Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r41494 -r41504 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 41494) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 41504) @@ -108,6 +108,7 @@ import com.forgon.disinfectsystem.jasperreports.util.InstrumentRepairReportHelper; import com.forgon.disinfectsystem.jasperreports.util.InstrumentSetDemandReportHelper; import com.forgon.disinfectsystem.jasperreports.util.LineGraphReportOfWorkloadByTimePeriodHelper; +import com.forgon.disinfectsystem.jasperreports.util.MaterialErrorDamageReportHelper; import com.forgon.disinfectsystem.jasperreports.util.MonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.OperationTousseOperationRepartHelper; import com.forgon.disinfectsystem.jasperreports.util.PackingFailureRateReportChartHelper; @@ -173,7 +174,11 @@ private CustomReportsOfZsyy customReportsOfZsyy; private CustomReportsOfDgsfy customReportsOfDgsfy; - + private MaterialErrorDamageReportHelper materialErrorDamageReportHelper; + public void setMaterialErrorDamageReportHelper( + MaterialErrorDamageReportHelper materialErrorDamageReportHelper) { + this.materialErrorDamageReportHelper = materialErrorDamageReportHelper; + } private CustomReportsOfXjjqzyy customReportsOfXjjqzyy; private CssdNursingQualityControlSummaryReportHelper cssdNursingQualityControlSummaryReportHelper; public void setCssdNursingQualityControlSummaryReportHelper( @@ -2364,7 +2369,8 @@ String circuitNurse = StrutsParamUtils.getPraramValue("circuitNurse", ""); String doctorName = StrutsParamUtils.getPraramValue("doctorName", ""); Long ancestorID = StrutsParamUtils.getPraramLongValue("ancestorID", null); - return jasperReportManager.getMaterialMissItemViewDataSource(startDay,endDay,departSearch,goodsName,statType,circuitNurse,doctorName,ancestorID); + String errorType = StrutsParamUtils.getPraramValue("errorType", ""); + return materialErrorDamageReportHelper.getMaterialMissItemViewDataSource(startDay,endDay,departSearch,goodsName,statType,circuitNurse,doctorName,ancestorID, errorType); }else if ("tousseTraceabilityInquiry".equals(reportName)) { String barcode = StrutsParamUtils.getPraramValue("barcode", ""); String tousseName = StrutsParamUtils.getPraramValue("tousseName", ""); @@ -2433,11 +2439,12 @@ String endDay = StrutsParamUtils.getPraramValue("endDay", ""); String departmentCode = StrutsParamUtils.getPraramValue("departmentCode", ""); String goodsId = StrutsParamUtils.getPraramValue("goodsId", ""); + String errorType = StrutsParamUtils.getPraramValue("errorType", ""); if (StringTools.isNotBlank(startDay) && StringTools.isNotBlank(endDay)) { if (statisticsType.equals("材料")) { - return jasperReportManager.getMaterialErrorDamageData(startDay, endDay, departmentCode, goodsId); + return materialErrorDamageReportHelper.getMaterialErrorDamageData(startDay, endDay, departmentCode, goodsId, errorType); } else { - List materialErrorDamageSummaryData = jasperReportManager.getMaterialErrorDamageSummaryData(startDay, endDay, departmentCode, goodsId); + List materialErrorDamageSummaryData = materialErrorDamageReportHelper.getMaterialErrorDamageSummaryData(startDay, endDay, departmentCode, goodsId, errorType); return materialErrorDamageSummaryData; } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r40302 -r41504 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 40302) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 41504) @@ -690,20 +690,6 @@ */ public List getTousseTraceabilityInquiry(String barcode, String tousseName, String destinationLocation, String startDate, String endDate, String recipient, String handover, String queryType, boolean merge); /** - * 查询器械丢失明细数据 - * @param startDay 查询开始时间 格式'2017-02-02' - * @param endDay 查询结束时间 格式'2017-02-02' - * @param departSearch 科室名称 - * @param goodsName 物品名称 - * @param statType 查询方式 - * @param circuitNurse 巡回护士 - * @param doctorName 医生 - * @param ancestorID 包定义id - * @return - */ - public List getMaterialMissItemViewDataSource(String startDay,String endDay,String departSearch,String goodsName,String statType, String circuitNurse, String doctorName, Long ancestorID); - - /** * 获取器械包规格大小统计报表的数据. * @param startDay 查询开始时间 格式'2017-02-02' * @param endDay 查询结束时间 格式'2017-02-02' @@ -774,30 +760,8 @@ */ public List getCleaningAreaWorkloadForUserData(String monthSearch, String departmentCode); - - /** - * 材料丢失汇总统计报表(按材料汇总) - * @param startDay 开始时间 - * @param endDay 结束时间 - * @param departmentCode 科室编码 - * @param goodsId 材料id - * @return - */ - public List getMaterialErrorDamageData(String startDay, String endDay, - String departmentCode, String goodsId); /** - * 材料丢失汇总统计报表(按科室汇总) - * @param startDay 开始时间 - * @param endDay 结束时间 - * @param departmentCode 科室编码 - * @param goodsId 材料id - * @return - */ - public List getMaterialErrorDamageSummaryData(String startDay, String endDay, - String departmentCode, String goodsId); - - /** * 清洗情况报表 * @param startDate 开始日期 * @param endDate 结束日期 Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r40405 -r41504 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 40405) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 41504) @@ -1119,14 +1119,6 @@ String endTime, String tousseName) { return operationReservationInvoiceHelper.getOperationReservationSumData(startTime, endTime, tousseName); } - - @Override - public List getMaterialMissItemViewDataSource(String startDay, - String endDay, String departSearch, String goodsName, - String statType, String circuitNurse, String doctorName, - Long ancestorID) { - return materialErrorDamageReportHelper.getMaterialMissItemViewDataSource(startDay, endDay, departSearch, goodsName, statType, circuitNurse, doctorName, ancestorID); - } @Override public List getTousseTraceabilityInquiry( @@ -1176,22 +1168,7 @@ String monthSearch, String departmentCode) { return washReportHelper.getCleaningAreaWorkloadForUserData(monthSearch, departmentCode); } - @Override - public List getMaterialErrorDamageData( - String startDay, String endDay, String departmentCode, - String goodsId) { - return materialErrorDamageReportHelper.getMaterialErrorDamageData(startDay, endDay, departmentCode, goodsId); - } - - @Override - public List getMaterialErrorDamageSummaryData( - String startDay, String endDay, String departmentCode, - String goodsId) { - return materialErrorDamageReportHelper.getMaterialErrorDamageSummaryData(startDay, endDay, departmentCode, goodsId); - } - - @Override public List getTousseReturnDisinfectionSummaryList( String startDate, String endDate, String departmentCode, String tousseTypes, Long tousseDefinitionId) { Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java =================================================================== diff -u -r38988 -r41504 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java (.../MaterialErrorDamageReportHelper.java) (revision 38988) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java (.../MaterialErrorDamageReportHelper.java) (revision 41504) @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageItemBean; @@ -48,7 +49,7 @@ */ public List getMaterialErrorDamageData( String startDay, String endDay, String departmentCode, - String goodsId) { + String goodsId, String errorType) { List list = new ArrayList(); if (StringTools.isNotBlank(startDay) && StringTools.isNotBlank(endDay)) { String betweenSql = " and " + dateQueryAdapter.dateAreaSql("medd.operationTime", startDay, endDay, true); @@ -65,11 +66,15 @@ materialIdSql = String.format(" and medd.materialDefinitionId='%s' ", goodsId); } - + boolean enableInstrumentLossReportErrorTypeMode = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLossReportErrorTypeMode", false); String sql = String.format("select medd.materialName,medd.materialCost,sum(medd.amount) amountSum,sum(medd.amount)*medd.materialCost totalPrice " - + "from MaterialErrorDamageDetail medd " + + (enableInstrumentLossReportErrorTypeMode?",medd.errorType ":"") + + " from MaterialErrorDamageDetail medd " + "where medd.materialName<>'器械包标识牌' and medd.type='%s' %s %s %s " - + "group by medd.materialName,medd.materialCost order by medd.materialName", + + (StringUtils.isNotBlank(errorType) && !errorType.contains("全部")?" and medd.errorType='"+ errorType +"' ":StringUtils.EMPTY) + + "group by medd.materialName,medd.materialCost " + + (enableInstrumentLossReportErrorTypeMode?",medd.errorType ":"") + + "order by medd.materialName", MaterialErrorDamageDetail.TYPE_ERROR, betweenSql, departCodeSql, materialIdSql); ResultSet rs = objectDao.executeSql(sql); @@ -80,12 +85,20 @@ int amountSum = rs.getInt("amountSum"); double totalPrice = rs.getDouble("totalPrice"); - + String meddErrorType = enableInstrumentLossReportErrorTypeMode?rs.getString("errorType"):null; MaterialErrorDamageVO vo = new MaterialErrorDamageVO(); vo.setMaterialName(materialName); - vo.setPrice(materialCost); vo.setAmount(amountSum); - vo.setTotalPrice(totalPrice); + vo.setErrorType(meddErrorType); + vo.setPrice(materialCost); + if(enableInstrumentLossReportErrorTypeMode && MaterialErrorDamageDetail.ERRORTYPE_ADD.equals(meddErrorType)){ + vo.setAmount(amountSum>0?-amountSum:amountSum); //变为负数 + vo.setTotalPrice(totalPrice>0?-totalPrice:totalPrice); + }else{ + vo.setAmount(amountSum); + vo.setTotalPrice(totalPrice); + } + list.add(vo); } } catch (Exception e) { @@ -106,7 +119,7 @@ */ public List getMaterialErrorDamageSummaryData( String startDay, String endDay, String departmentCode, - String goodsId) { + String goodsId, String errorType) { Map map = new HashMap(); if (StringTools.isNotBlank(startDay) && StringTools.isNotBlank(endDay)) { @@ -123,11 +136,14 @@ if (DatabaseUtil.isPoIdValid(goodsId)) { materialIdSql = String.format(" and medd.materialDefinitionId='%s' ", goodsId); } - + boolean enableInstrumentLossReportErrorTypeMode = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLossReportErrorTypeMode", false); String sql = String.format("select medd.departCode,medd.depart,medd.materialName,medd.materialCost,sum(medd.amount) amountSum,sum(medd.amount)*medd.materialCost totalPrice " + + (enableInstrumentLossReportErrorTypeMode?",medd.errorType ":"") + "from MaterialErrorDamageDetail medd " + "where medd.materialName<>'器械包标识牌' and medd.type='%s' %s %s %s " - + "group by medd.departCode,medd.depart,medd.materialName,medd.materialCost order by medd.materialName", + + "group by medd.departCode,medd.depart,medd.materialName,medd.materialCost" + + (enableInstrumentLossReportErrorTypeMode?",medd.errorType ":"") + + " order by medd.materialName", MaterialErrorDamageDetail.TYPE_ERROR, betweenSql, departCodeSql, materialIdSql); ResultSet rs = objectDao.executeSql(sql); @@ -140,13 +156,26 @@ int amountSum = rs.getInt("amountSum"); double totalPrice = rs.getDouble("totalPrice"); - + String meddErrorType = enableInstrumentLossReportErrorTypeMode?rs.getString("errorType"):null; MaterialErrorDamageVO child = new MaterialErrorDamageVO(); child.setMaterialName(materialName); child.setPrice(materialCost); - child.setAmount(amountSum); - child.setTotalPrice(totalPrice); + child.setErrorType(meddErrorType); + if(enableInstrumentLossReportErrorTypeMode && MaterialErrorDamageDetail.ERRORTYPE_ADD.equals(meddErrorType)){ + if(amountSum > 0){ + amountSum = -amountSum; + } + child.setAmount(amountSum); //变为负数 + if(totalPrice > 0){ + totalPrice = -totalPrice; + } + child.setTotalPrice(totalPrice); + }else{ + child.setAmount(amountSum); + child.setTotalPrice(totalPrice); + } + MaterialErrorDamageSummaryOfDepartmentVO vo = map.get(departCode); if (vo == null) { vo = new MaterialErrorDamageSummaryOfDepartmentVO(); @@ -184,11 +213,11 @@ public List getMaterialMissItemViewDataSource(String startDay, String endDay, String departSearch, String goodsName, String statType, String circuitNurse, String doctorName, - Long ancestorID) { + Long ancestorID, String errorType) { String sql = ""; sql = "select * from ( " +" select medd.errorRemark, medd.type,medd.materialName,medd.toussename,medd.toussedefinitionid,medd.operationTime,medd.depart,medd.amount,medd.materialCost " - +" ,ur.circuitNurse,ur.doctorName,case when ur.operationTime is null then ur.enteringDate else ur.operationTime end useTime " + +" ,ur.circuitNurse,ur.doctorName,case when ur.operationTime is null then ur.enteringDate else ur.operationTime end useTime,medd.errorType " +" from MaterialErrorDamageDetail medd " +" join MaterialDefinition md on md.id=medd.materialDefinitionId " +" join recyclingItem_errorDamage re on re.errorDamageDetail_id=medd.id " @@ -202,7 +231,7 @@ +" union all " +" select medd.errorRemark,medd.type,medd.materialName,medd.toussename,medd.toussedefinitionid,medd.operationTime,medd.depart,medd.amount,medd.materialCost " - +" ,ur.circuitNurse,ur.doctorName,case when ur.operationTime is null then ur.enteringDate else ur.operationTime end useTime " + +" ,ur.circuitNurse,ur.doctorName,case when ur.operationTime is null then ur.enteringDate else ur.operationTime end useTime,medd.errorType " +" from MaterialErrorDamageDetail medd " +" join MaterialDefinition md on md.id=medd.materialDefinitionId " +" join recyclingItem_errorDamage re on re.errorDamageDetail_id=medd.id " @@ -216,14 +245,14 @@ +" union all " +" select medd.errorRemark,medd.type,medd.materialName,medd.toussename,medd.toussedefinitionid,medd.operationTime,medd.depart,medd.amount,medd.materialCost, " - +" null,null,null " + +" null,null,null,medd.errorType " +" from MaterialErrorDamageDetail medd " +" join MaterialDefinition md on md.id=medd.materialDefinitionId " +" join recyclingItem_errorDamage re on re.errorDamageDetail_id=medd.id " +" join RecyclingItem ri on re.recyclingItem_id=ri.id " +" where ri.amount > 1 " +" union all " - + " select medd.errorRemark,medd.type,medd.materialName,medd.toussename,medd.toussedefinitionid,medd.operationTime,medd.depart,medd.amount,medd.materialCost,null , null, null" + + " select medd.errorRemark,medd.type,medd.materialName,medd.toussename,medd.toussedefinitionid,medd.operationTime,medd.depart,medd.amount,medd.materialCost,null , null, null,medd.errorType" + " from MaterialErrorDamageDetail medd " + " left join recyclingItem_errorDamage re on re.errorDamageDetail_id=medd.id " + " where re.errorDamageDetail_id is null and medd.materialName<>'器械包标识牌' " @@ -242,18 +271,21 @@ if(ancestorID != null){ sql += " and toussedefinitionid=" + ancestorID; } + if(StringUtils.isNotBlank(errorType) && !errorType.contains("全部")){ + sql += " and errorType='"+ errorType +"' "; + } if (StringUtils.isNotBlank(circuitNurse)) { sql += " and circuitNurse='" + circuitNurse + "'"; } if (StringUtils.isNotBlank(doctorName)) { sql += " and doctorName='" + doctorName + "'"; } sql += " order by r.operationTime desc "; - + boolean enableInstrumentLossReportErrorTypeMode = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLossReportErrorTypeMode", false); if("statMaterial".equals(statType)){ - return getMaterialMissItemDataSourceStatMaterial(sql); + return getMaterialMissItemDataSourceStatMaterial(sql, enableInstrumentLossReportErrorTypeMode); }else if("statDepart".equals(statType)){ - return getMaterialMissItemDataSourceStatDeaprt(sql); + return getMaterialMissItemDataSourceStatDeaprt(sql, enableInstrumentLossReportErrorTypeMode); } return null; } @@ -262,7 +294,7 @@ * @param sql * @return */ - private List getMaterialMissItemDataSourceStatMaterial(String sql){ + private List getMaterialMissItemDataSourceStatMaterial(String sql, boolean enableInstrumentLossReportErrorTypeMode){ List list = new ArrayList(); ResultSet result = objectDao.executeSql(sql); try { @@ -279,7 +311,6 @@ Date useTime = result.getTimestamp("useTime"); MaterialMissItemBean bean = new MaterialMissItemBean(); bean.setMaterialName(materialName); - bean.setMissAmount(amount); bean.setErrorRemark(result.getString("errorRemark")); bean.setDepart(depart); bean.setMaterialcost((materialcost != null && materialcost instanceof Number) ? ((Number)materialcost).doubleValue() : 0); @@ -288,6 +319,18 @@ bean.setDoctorName(doctorName); bean.setOperationTime(ForgonDateUtils.safelyFormatDate(operationTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); bean.setUseTime(ForgonDateUtils.safelyFormatDate(useTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); + + if(enableInstrumentLossReportErrorTypeMode){ + String errorType = result.getString("errorType"); + if(MaterialErrorDamageDetail.ERRORTYPE_ADD.equals(errorType) && amount != null && amount > 0){ + bean.setMissAmount(-amount); //变为负数 + }else{ + bean.setMissAmount(amount); + } + bean.setErrorType(errorType); + }else{ + bean.setMissAmount(amount); + } list.add(bean); } } @@ -303,7 +346,7 @@ * @param sql * @return */ - private List getMaterialMissItemDataSourceStatDeaprt(String sql){ + private List getMaterialMissItemDataSourceStatDeaprt(String sql, boolean enableInstrumentLossReportErrorTypeMode){ List list = new ArrayList(); Map> map = new HashMap>(); ResultSet result = null; @@ -325,14 +368,25 @@ MaterialMissItemBean bean = new MaterialMissItemBean(); bean.setMaterialName(materialName); bean.setErrorRemark(result.getString("errorRemark")); - bean.setMissAmount(amount); bean.setDepart(depart); bean.setMaterialcost((materialcost != null && materialcost instanceof Number) ? ((Number)materialcost).doubleValue() : 0); bean.setOperationTime(ForgonDateUtils.safelyFormatDate(operationTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); bean.setCircuitNurse(circuitNurse); bean.setDoctorName(doctorName); bean.setUseTime(ForgonDateUtils.safelyFormatDate(useTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); bean.setTousseName(tousseName); + if(enableInstrumentLossReportErrorTypeMode){ + String errorType = result.getString("errorType"); + if(MaterialErrorDamageDetail.ERRORTYPE_ADD.equals(errorType) && amount != null && amount > 0){ + bean.setMissAmount(-amount); //变为负数 + }else{ + bean.setMissAmount(amount); + } + bean.setErrorType(errorType); + }else{ + bean.setMissAmount(amount); + } + if(StringUtils.isNotBlank(keyName)){ List itemList = new ArrayList(); if(map.containsKey(keyName)){