Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r35878 -r35879 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 35878) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 35879) @@ -51,11 +51,11 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceAmountContrastBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQuery; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQueryItem; +import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageTotal_child; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialErrorDamageSummaryOfDepartmentVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialErrorDamageVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialTypeWorkloadReport; -import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialWashUnqualified; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialWashUnqualifiedContrast; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialWashUnqualifiedPosition; import com.forgon.disinfectsystem.jasperreports.javabeansource.MonitoringItemBean; @@ -1259,5 +1259,16 @@ * @return */ public List getMaterialDamageTotalViewDataSource(String startDay, String endDay, String departCoding, String goodsName); + /** + * 器械报损明细统计报表 + * @param startDay + * @param endDay + * @param departSearch + * @param damageReporter + * @param circuitNurse + * @param doctorName + * @return + */ + public List getMaterialDamageItemViewDataSource(String startDay, String endDay, String departSearch, String damageReporter, String circuitNurse, String doctorName); } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35878 -r35879 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35878) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35879) @@ -7344,4 +7344,10 @@ public List getMaterialDamageTotalViewDataSource(String startDay, String endDay, String departCoding, String goodsName) { return materialErrorDamageReportHelper.getMaterialDamageTotalViewDataSource(startDay, endDay, departCoding, goodsName); } + @Override + public List getMaterialDamageItemViewDataSource( + String startDay, String endDay, String departSearch, + String damageReporter, String circuitNurse, String doctorName) { + return materialErrorDamageReportHelper.getMaterialDamageItemViewDataSource(startDay, endDay, departSearch, damageReporter, circuitNurse, doctorName); + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r35878 -r35879 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 35878) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 35879) @@ -1748,7 +1748,16 @@ }else if (reportName.equals("useRecordOperatorTotalView")) {//使用记录人员汇总报表 return getUserRecordOperatorTotalViewDataSource(); } else if ("materialDamageItemView".equals(reportName)) {//器械报损明细统计报表 - return getMaterialDamageItemViewDataSource(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String startDay = StrutsParamUtils.getPraramValue("startDay", + sdf.format(new Date())); + String endDay = StrutsParamUtils.getPraramValue("endDay", + sdf.format(new Date())); + String departSearch = StrutsParamUtils.getPraramValue("departSearch",""); + String damageReporter = StrutsParamUtils.getPraramValue("damageReporter",""); + String circuitNurse = StrutsParamUtils.getPraramValue("circuitNurse",null); + String doctorName = StrutsParamUtils.getPraramValue("doctorName",null); + return jasperReportManager.getMaterialDamageItemViewDataSource(startDay, endDay, departSearch, damageReporter, circuitNurse, doctorName); } else if ("materialDamageTotalView".equals(reportName)) {//器械报损汇总统计报表 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String startDay = StrutsParamUtils.getPraramValue("startDay",sdf.format(new Date())); @@ -2498,172 +2507,8 @@ } return totalIntegral; } - - /** - * 获取材料报损数据 - * @return - */ - private List getMaterialDamageItemViewDataSource() { - List damageBeans = new ArrayList(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String startDay = StrutsParamUtils.getPraramValue("startDay", - sdf.format(new Date())); - String endDay = StrutsParamUtils.getPraramValue("endDay", - sdf.format(new Date())); - String departSearch = StrutsParamUtils.getPraramValue("departSearch",""); - String damageReporter = StrutsParamUtils.getPraramValue("damageReporter",""); - String circuitNurse = StrutsParamUtils.getPraramValue("circuitNurse",null); - String doctorName = StrutsParamUtils.getPraramValue("doctorName",null); - StringBuffer notExistsSql = new StringBuffer(350);//MaterialErrorDamageDetail和recyclingItem没有关联关系的数据查询语句 - notExistsSql.append("select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,medd.operationTime,medd.depart,medd.amount,medd.materialCost, null circuitNurse,null doctorName,null useTime from ") - .append(MaterialErrorDamageDetail.class.getSimpleName()) - .append(" medd where not exists(select 1 from recyclingItem_errorDamage re where re.errordamagedetail_id=medd.id) and type='") - .append(MaterialErrorDamageDetail.TYPE_DAMAGE) - .append("'"); - String sql = "select * from ( " - +" select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,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 " - +" 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 " - +" join RecyclingRecord rr on ri.recyclingRecord_id = rr.id " - +" join invoicePlan ip on ip.id=rr.recyclingapplication_id " - +" join RecyclingApplication ra on ra.id=ip.id " - +" left join UseRecord ur on ur.id=ra.userecord_id " - +" where ri.amount = 1 " - +" union all " - +" select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,medd.operationTime,medd.depart,medd.amount,medd.materialCost, " - +" null,null,null " - +" 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 " - + notExistsSql - +" ) po "; - sql += " where 1=1 "; - if (StringUtils.isNotBlank(departSearch)) { - sql += " and po.depart='" + departSearch + "'"; - } - if (StringUtils.isNotBlank(damageReporter)) { - sql += " and po.operator='" + damageReporter + "'"; - } - if (StringUtils.isNotBlank(circuitNurse)) { - sql += " and po.circuitNurse='" + circuitNurse + "'"; - } - if (StringUtils.isNotBlank(doctorName)) { - sql += " and po.doctorName='" + doctorName + "'"; - } - sql += " and po.type = '"+MaterialErrorDamageDetail.TYPE_DAMAGE+"' "; - sql += " and po.operationTime between " - + dateQueryAdapter.dateAdapter(startDay + " 00:00:00") - + " and " + dateQueryAdapter.dateAdapter(endDay + " 23:59:59"); - sql += " order by po.operationTime desc"; - List items = getMaterialDamageItemData(sql); - Map map = new HashMap(); - Integer sumAmount = 0; - if (items != null) { - for (MaterialDamageItemBean item : items) { - String keyName = item.getDepart(); - if(StringUtils.isBlank(keyName)){ - continue; - } - MaterialDamageBean bean = null; - if(map.containsKey(keyName)){ - bean = map.get(keyName); - }else{ - bean = new MaterialDamageBean(); - } - bean.setDepart(item.getDepart()); - List materialDamageItems = bean.getMaterialDamageItems(); - if(CollectionUtils.isEmpty(materialDamageItems)){ - materialDamageItems = new ArrayList(); - } - - MaterialDamageItemBean itemBean = new MaterialDamageItemBean(); - itemBean.setMaterialName(item.getMaterialName()); - itemBean.setDamageAmount(item.getDamageAmount()); - itemBean.setDamageReporter(item.getDamageReporter()); - itemBean.setDamageTime(item.getDamageTime()); - sumAmount += item.getDamageAmount(); - itemBean.setDamageRemark(item.getDamageRemark()); - Double cost = item.getMaterialCost(); - if(cost == null){ - cost = 0d; - } - itemBean.setMaterialCost(cost); - itemBean.setCircuitNurse(item.getCircuitNurse()); - itemBean.setDoctorName(item.getDoctorName()); - itemBean.setUseTime(item.getUseTime()); - materialDamageItems.add(itemBean); - Integer curAmount = bean.getAmount(); - Double totalPrice = bean.getTotalPrice(); - Double price = MathTools.mul(cost, item.getDamageAmount(), 2).doubleValue(); - bean.setAmount(curAmount + item.getDamageAmount()); - bean.setTotalPrice(totalPrice + price); - - bean.setMaterialDamageItems(materialDamageItems); - map.put(keyName, bean); - } - } - if(map.size() > 0){ - for(MaterialDamageBean bean : map.values()){ - // 计算科室占比 - Integer amount = bean.getAmount(); - String rate = MathTools.divideStr(amount, sumAmount, 2); - bean.setRate(rate); - damageBeans.add(bean); - } - } - return damageBeans; - } /** - * 器械丢失数据,按材料汇总 - * @param sql - * @return - */ - private List getMaterialDamageItemData(String sql){ - List list = new ArrayList(); - ResultSet result = objectDao.executeSql(sql); - try { - while(result.next()){ - String materialName = result.getString("materialName"); - if(StringUtils.isNotBlank(materialName)){ - Integer amount = result.getInt("amount"); - String depart = result.getString("depart"); - Object materialcost = result.getObject("materialCost"); - Date operationTime = result.getTimestamp("operationTime"); - String tousseName = result.getString("tousseName"); - String circuitNurse = result.getString("circuitNurse"); - String doctorName = result.getString("doctorName"); - Date useTime = result.getTimestamp("useTime"); - String operator = result.getString("operator"); - MaterialDamageItemBean bean = new MaterialDamageItemBean(); - bean.setMaterialName(materialName); - bean.setDamageRemark(result.getString("damageRemark")); - bean.setDamageAmount(amount); - bean.setDepart(depart); - bean.setTousseName(tousseName); - bean.setDamageReporter(operator); - bean.setMaterialCost((materialcost != null && materialcost instanceof Number) ? ((Number)materialcost).doubleValue() : 0); - bean.setDamageTime(operationTime); - bean.setCircuitNurse(circuitNurse); - bean.setDoctorName(doctorName); - bean.setUseTime(ForgonDateUtils.safelyFormatDate(useTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); - list.add(bean); - } - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(result); - } - return list; - } - - /** * 使用记录人员汇总报表 * @return * 2014-7-25 Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java =================================================================== diff -u -r35878 -r35879 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java (.../MaterialErrorDamageReportHelper.java) (revision 35878) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/MaterialErrorDamageReportHelper.java (.../MaterialErrorDamageReportHelper.java) (revision 35879) @@ -8,14 +8,14 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; +import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageBean; +import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageItemBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialDamageTotal_child; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialErrorDamageSummaryOfDepartmentVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialErrorDamageVO; @@ -30,6 +30,7 @@ * 器械丢失汇总统计报表 * 器械丢失明细统计报表 * 器械报损汇总统计报表 + * 器械报损明细统计报表 */ @Component public class MaterialErrorDamageReportHelper { @@ -410,4 +411,157 @@ } return damageBeans; } + /** + * 获取材料报损数据 + * @return + */ + public List getMaterialDamageItemViewDataSource(String startDay, String endDay, String departSearch, String damageReporter, String circuitNurse, String doctorName) { + List damageBeans = new ArrayList(); + StringBuffer notExistsSql = new StringBuffer(350);//MaterialErrorDamageDetail和recyclingItem没有关联关系的数据查询语句 + notExistsSql.append("select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,medd.operationTime,medd.depart,medd.amount,medd.materialCost, null circuitNurse,null doctorName,null useTime from ") + .append(MaterialErrorDamageDetail.class.getSimpleName()) + .append(" medd where not exists(select 1 from recyclingItem_errorDamage re where re.errordamagedetail_id=medd.id) and type='") + .append(MaterialErrorDamageDetail.TYPE_DAMAGE) + .append("'"); + String sql = "select * from ( " + +" select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,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 " + +" 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 " + +" join RecyclingRecord rr on ri.recyclingRecord_id = rr.id " + +" join invoicePlan ip on ip.id=rr.recyclingapplication_id " + +" join RecyclingApplication ra on ra.id=ip.id " + +" left join UseRecord ur on ur.id=ra.userecord_id " + +" where ri.amount = 1 " + +" union all " + +" select medd.damageRemark,medd.type,medd.operator,medd.materialName,medd.toussename,medd.operationTime,medd.depart,medd.amount,medd.materialCost, " + +" null,null,null " + +" 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 " + + notExistsSql + +" ) po "; + sql += " where 1=1 "; + if (StringUtils.isNotBlank(departSearch)) { + sql += " and po.depart='" + departSearch + "'"; + } + if (StringUtils.isNotBlank(damageReporter)) { + sql += " and po.operator='" + damageReporter + "'"; + } + if (StringUtils.isNotBlank(circuitNurse)) { + sql += " and po.circuitNurse='" + circuitNurse + "'"; + } + if (StringUtils.isNotBlank(doctorName)) { + sql += " and po.doctorName='" + doctorName + "'"; + } + sql += " and po.type = '"+MaterialErrorDamageDetail.TYPE_DAMAGE+"' "; + sql += " and po.operationTime between " + + dateQueryAdapter.dateAdapter(startDay + " 00:00:00") + + " and " + dateQueryAdapter.dateAdapter(endDay + " 23:59:59"); + sql += " order by po.operationTime desc"; + List items = getMaterialDamageItemData(sql); + Map map = new HashMap(); + Integer sumAmount = 0; + if (items != null) { + for (MaterialDamageItemBean item : items) { + String keyName = item.getDepart(); + if(StringUtils.isBlank(keyName)){ + continue; + } + MaterialDamageBean bean = null; + if(map.containsKey(keyName)){ + bean = map.get(keyName); + }else{ + bean = new MaterialDamageBean(); + } + bean.setDepart(item.getDepart()); + List materialDamageItems = bean.getMaterialDamageItems(); + if(CollectionUtils.isEmpty(materialDamageItems)){ + materialDamageItems = new ArrayList(); + } + + MaterialDamageItemBean itemBean = new MaterialDamageItemBean(); + itemBean.setMaterialName(item.getMaterialName()); + itemBean.setDamageAmount(item.getDamageAmount()); + itemBean.setDamageReporter(item.getDamageReporter()); + itemBean.setDamageTime(item.getDamageTime()); + sumAmount += item.getDamageAmount(); + itemBean.setDamageRemark(item.getDamageRemark()); + Double cost = item.getMaterialCost(); + if(cost == null){ + cost = 0d; + } + itemBean.setMaterialCost(cost); + itemBean.setCircuitNurse(item.getCircuitNurse()); + itemBean.setDoctorName(item.getDoctorName()); + itemBean.setUseTime(item.getUseTime()); + materialDamageItems.add(itemBean); + Integer curAmount = bean.getAmount(); + Double totalPrice = bean.getTotalPrice(); + Double price = MathTools.mul(cost, item.getDamageAmount(), 2).doubleValue(); + bean.setAmount(curAmount + item.getDamageAmount()); + bean.setTotalPrice(totalPrice + price); + + bean.setMaterialDamageItems(materialDamageItems); + map.put(keyName, bean); + } + } + if(map.size() > 0){ + for(MaterialDamageBean bean : map.values()){ + // 计算科室占比 + Integer amount = bean.getAmount(); + String rate = MathTools.divideStr(amount, sumAmount, 2); + bean.setRate(rate); + damageBeans.add(bean); + } + } + return damageBeans; + } + /** + * 器械丢失数据,按材料汇总 + * @param sql + * @return + */ + private List getMaterialDamageItemData(String sql){ + List list = new ArrayList(); + ResultSet result = objectDao.executeSql(sql); + try { + while(result.next()){ + String materialName = result.getString("materialName"); + if(StringUtils.isNotBlank(materialName)){ + Integer amount = result.getInt("amount"); + String depart = result.getString("depart"); + Object materialcost = result.getObject("materialCost"); + Date operationTime = result.getTimestamp("operationTime"); + String tousseName = result.getString("tousseName"); + String circuitNurse = result.getString("circuitNurse"); + String doctorName = result.getString("doctorName"); + Date useTime = result.getTimestamp("useTime"); + String operator = result.getString("operator"); + MaterialDamageItemBean bean = new MaterialDamageItemBean(); + bean.setMaterialName(materialName); + bean.setDamageRemark(result.getString("damageRemark")); + bean.setDamageAmount(amount); + bean.setDepart(depart); + bean.setTousseName(tousseName); + bean.setDamageReporter(operator); + bean.setMaterialCost((materialcost != null && materialcost instanceof Number) ? ((Number)materialcost).doubleValue() : 0); + bean.setDamageTime(operationTime); + bean.setCircuitNurse(circuitNurse); + bean.setDoctorName(doctorName); + bean.setUseTime(ForgonDateUtils.safelyFormatDate(useTime, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, null)); + list.add(bean); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + return list; + } }