Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r14383 -r14451 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 14383) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 14451) @@ -56,12 +56,15 @@ import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.ConsumptiveConfig; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.DetectionItem; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.devicemaintenance.DeviceMaintenance; import com.forgon.disinfectsystem.entity.devicemonitoring.DeviceMonitoring; import com.forgon.disinfectsystem.entity.disposablegoods.DisposableGoodsInventory; @@ -92,6 +95,8 @@ import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; +import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecordMaterial; import com.forgon.disinfectsystem.jasperreports.javabeansource.ApparatusInfusionisType; import com.forgon.disinfectsystem.jasperreports.javabeansource.BaseBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordItemVo; @@ -309,6 +314,13 @@ c.add(Calendar.YEAR, 1); return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); } + + public String getNextMonth(String year,String mm) { + Calendar c = Calendar.getInstance(); + c.set(Integer.parseInt(year), Integer.parseInt(mm), 1); + //c.add(Calendar.MONTH, 1); + return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + } /** * 消毒供应中心年度各月份清洗不合格率统计 @@ -386,12 +398,11 @@ + " and s.status = '灭菌完成'" + " and s.orgUnitCoding = '"+departCoding+"'" + " group by "+dateQueryAdapter.dateConverAdapter3("s.endDate","mm"); - String qualityMonitoringSql = "select "+dateQueryAdapter.dateConverAdapter3("q.datetime","mm")+" as datetime,sum(q.amount) from QualityMonitoring q " - - + "where q.datetime between " + String qualityMonitoringSql = "select "+dateQueryAdapter.dateConverAdapter3("q.datetime","mm")+" as datetime,sum(q.amount) from QualityMonitoring q,QualityMonitoringAnswer a " + + "where q.id = a.qualitymonitoring_id and a.answer like '%包装密闭不合格%' " + + " and q.datetime between " + dateQueryAdapter.dateAdapter(queryYear) + "and " + dateQueryAdapter.dateAdapter(nextYear) - + " and q.amount is not null " + " and q.orgUnitCoding = '"+departCoding+"'" + " and q.type = '质量监测' group by "+dateQueryAdapter.dateConverAdapter3("q.datetime","mm"); @@ -543,9 +554,69 @@ bean.setQuotaName(quotaName); return bean; } - /** - * 灭菌方式选择不正常发生次数 + * 通过按月统计的结果集合,获取某指标的不合格率 + * @param totalResultMap 分母结果集合 + * @param resultMap 分子结果集合 + * @param quotaName 统计项名称 + * @return + */ + public EighteenQuotaBean getFractionDefective(Map totalResultMap, + Map resultMap, String quotaName) { + Map map = new HashMap(); + if(totalResultMap == null || resultMap == null) + return null; + try{ + double avgBHGL = 0.00; + for (int i = 1; i <= 12; i++) { + String key = ""; + if (i > 9) { + key = "" + i; + } else { + key = "0" + i; + } + + Double bhgl = 0.00; + if (totalResultMap.get(key) != null + && totalResultMap.get(key) != 0 + && resultMap.get(key) != null) { + BigDecimal b1 = new BigDecimal(resultMap.get(key)); + BigDecimal b2 = new BigDecimal(totalResultMap.get(key)); + bhgl = b1.divide(b2, 4, BigDecimal.ROUND_HALF_UP) + .doubleValue(); + bhgl = MathTools.mul(bhgl, 100, 2); + } + map.put(key, bhgl); + avgBHGL += bhgl; + } + BigDecimal b1 = new BigDecimal(avgBHGL); + BigDecimal b2 = new BigDecimal(12); + double avg = b1.divide(b2, 4, BigDecimal.ROUND_HALF_UP) + .doubleValue(); + map.put("avg", avg); + } catch (Exception e) { + e.printStackTrace(); + } + EighteenQuotaBean bean = new EighteenQuotaBean(); + bean.setSortNumber(1L); + bean.setJanuaryBHGL("" + map.get("01") + "%"); + bean.setFebruaryBHGL(map.get("02") + "%"); + bean.setMarchBHGL(map.get("03") + "%"); + bean.setAprilBHGL(map.get("04") + "%"); + bean.setMayBHGL(map.get("05") + "%"); + bean.setJuneBHGL(map.get("06") + "%"); + bean.setJulyBHGL(map.get("07") + "%"); + bean.setAugustBHGL(map.get("08") + "%"); + bean.setSeptemberBHGL(map.get("09") + "%"); + bean.setOctoberBHGL(map.get("10") + "%"); + bean.setNovemberBHGL(map.get("11") + "%"); + bean.setDecemberBHGL(map.get("12") + "%"); + bean.setAvgBHGL(map.get("avg") + "%"); + bean.setQuotaName(quotaName); + return bean; + } + /** + * 灭菌方式选择不正确发生次数 * * @return */ @@ -560,6 +631,8 @@ + " and "+ dateQueryAdapter.dateAdapter(nextYear) + " and q.type = '质量监测' " +" group by "+dateQueryAdapter.dateConverAdapter3("q.datetime","mm"); +// String sql = getQualityMonitoringRecordsCountSql(departCoding, +// queryYear, nextYear, "灭菌方式选择不正确"); ResultSet resultSet = objectDao.executeSql(sql); return getEveryMonthAmount(resultSet, "灭菌方式选择不正确发生次数"); } @@ -768,36 +841,40 @@ */ public EighteenQuotaBean getGeneralMaterialAmount(String year,String departCoding) { if (StringUtils.isNotBlank(year)) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = getNextYear(year) + " 00:00:00"; - String washSql = "select "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm")+" as monthstr,sum(w.generalMaterialAmount+w.operateMaterialAmount+w.foreignMaterialAmount) from WashAndDisinfectRecord w" - + " where w.endDate between "+dateQueryAdapter.dateAdapter(queryYear) - + "and "+dateQueryAdapter.dateAdapter(nextYear) - + " and w.orgUnitCoding = '"+departCoding+"'" - + " group by "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm"); - ResultSet foreignMaterialRS = objectDao.executeSql(washSql); - return getEveryMonthAmount(foreignMaterialRS, "处理器械总件数"); +// String queryYear = year + "-01-01 00:00:00"; +// String nextYear = getNextYear(year) + " 00:00:00"; +// String washSql = "select "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm")+" as monthstr,sum(w.generalMaterialAmount+w.operateMaterialAmount+w.foreignMaterialAmount) from WashAndDisinfectRecord w" +// + " where w.endDate between "+dateQueryAdapter.dateAdapter(queryYear) +// + "and "+dateQueryAdapter.dateAdapter(nextYear) +// + " and w.orgUnitCoding = '"+departCoding+"'" +// + " group by "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm"); +// ResultSet foreignMaterialRS = objectDao.executeSql(washSql); + // 不包括辅料包、外来器械包 + Map map = getGeneralMaterialMap(year,departCoding); + return getEveryMonthAmount(map, "处理器械总件数"); } return null; } /** - * 外来手术器械总件数 + * 外来器械总件数 * * @param year * @return */ public EighteenQuotaBean getForeignMaterialAmount(String year,String departCoding) { if (StringUtils.isNotBlank(year)) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = getNextYear(year) + " 00:00:00"; - String washSql = "select "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm")+" as monthstr,sum(w.foreignMaterialAmount) from WashAndDisinfectRecord w" - + " where w.endDate between "+dateQueryAdapter.dateAdapter(queryYear) - + "and "+dateQueryAdapter.dateAdapter(nextYear) - + " and w.orgUnitCoding = '"+departCoding+"'" - + " group by "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm"); - ResultSet foreignMaterialRS = objectDao.executeSql(washSql); - return getEveryMonthAmount(foreignMaterialRS, "外来手术器械总件数"); +// String queryYear = year + "-01-01 00:00:00"; +// String nextYear = getNextYear(year) + " 00:00:00"; +// String washSql = "select "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm")+" as monthstr,sum(w.foreignMaterialAmount) from WashAndDisinfectRecord w" +// + " where w.endDate between "+dateQueryAdapter.dateAdapter(queryYear) +// +// + "and "+dateQueryAdapter.dateAdapter(nextYear) +// + " and w.orgUnitCoding = '"+departCoding+"'" +// + " group by "+dateQueryAdapter.dateConverAdapter3("w.endDate","mm"); +// ResultSet foreignMaterialRS = objectDao.executeSql(washSql); + Map map = getForeignMaterialMap(year,departCoding); + return getEveryMonthAmount(map, "外来手术器械总件数"); } return null; } @@ -809,35 +886,37 @@ */ public EighteenQuotaBean getMorrowSendIncidence(String year,String departCoding) { if (StringUtils.isNotBlank(year)) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = getNextYear(year) + " 00:00:00"; - String applicationtimeSql = ""; - String sendtimeSql = ""; - String database = dbConnection.getDatabase(); - if(DatabaseUtil.isOracle(database)){ - applicationtimeSql = dateQueryAdapter.dateConverAdapter3("p.applicationtime","yyyy-mm-dd"); - sendtimeSql = dateQueryAdapter.dateConverAdapter3("i.sendtime","yyyy-mm-dd"); - }else{ - applicationtimeSql = dateQueryAdapter.dateConverAdapter("p.applicationtime","yyyy-mm-dd"); - sendtimeSql = dateQueryAdapter.dateConverAdapter("i.sendtime","yyyy-mm-dd"); - } - String recyclingSql = "select "+dateQueryAdapter.dateConverAdapter3("p.applicationtime","mm")+" as monthstr,count(*) from invoiceplan p ,invoice i,tousseinstance t where p.id = i.invoiceplan_id and t.invoice_id = i.id " - + "and "+applicationtimeSql+" != "+sendtimeSql+" and p.depart = '手术室' " - + "and p.applicationtime between "+dateQueryAdapter.dateAdapter(queryYear) - + " and "+dateQueryAdapter.dateAdapter(nextYear) - + " and i.status != '未发货' and i.orgUnitCoding = '"+departCoding+"'" - +" group by "+dateQueryAdapter.dateConverAdapter3("p.applicationtime","mm"); - - ResultSet recyclingResult = objectDao.executeSql(recyclingSql); - String invoiceSql = "select "+dateQueryAdapter.dateConverAdapter3("i.sendtime","mm")+" as monthstr,count(*) from Invoice i,Tousseinstance t" - + " where i.id = t.invoice_id and i.sendtime between "+dateQueryAdapter.dateAdapter(queryYear) - + "and "+dateQueryAdapter.dateAdapter(nextYear) - + " and i.status != '未发货' " - + " and i.depart = '手术室' and i.orgUnitCoding = '"+departCoding+"'" - +" group by "+dateQueryAdapter.dateConverAdapter3("i.sendtime","mm"); - ResultSet invoiceResult = objectDao.executeSql(invoiceSql); - return getFractionDefective(invoiceResult, recyclingResult, - "手术器械包次日下送发生率", false); +// String queryYear = year + "-01-01 00:00:00"; +// String nextYear = getNextYear(year) + " 00:00:00"; +// String applicationtimeSql = ""; +// String sendtimeSql = ""; +// String database = dbConnection.getDatabase(); +// if(DatabaseUtil.isOracle(database)){ +// applicationtimeSql = dateQueryAdapter.dateConverAdapter3("p.applicationtime","yyyy-mm-dd"); +// sendtimeSql = dateQueryAdapter.dateConverAdapter3("i.sendtime","yyyy-mm-dd"); +// }else{ +// applicationtimeSql = dateQueryAdapter.dateConverAdapter("p.applicationtime","yyyy-mm-dd"); +// sendtimeSql = dateQueryAdapter.dateConverAdapter("i.sendtime","yyyy-mm-dd"); +// } +// String recyclingSql = "select "+dateQueryAdapter.dateConverAdapter3("p.applicationtime","mm")+" as monthstr,count(*) from invoiceplan p ,invoice i,tousseinstance t where p.id = i.invoiceplan_id and t.invoice_id = i.id " +// + "and "+applicationtimeSql+" != "+sendtimeSql+" and p.depart = '手术室' " +// + "and p.applicationtime between "+dateQueryAdapter.dateAdapter(queryYear) +// + " and "+dateQueryAdapter.dateAdapter(nextYear) +// + " and i.status != '未发货' and i.orgUnitCoding = '"+departCoding+"'" +// +" group by "+dateQueryAdapter.dateConverAdapter3("p.applicationtime","mm"); +// +// ResultSet recyclingResult = objectDao.executeSql(recyclingSql); +// String invoiceSql = "select "+dateQueryAdapter.dateConverAdapter3("i.sendtime","mm")+" as monthstr,count(*) from Invoice i,Tousseinstance t" +// + " where i.id = t.invoice_id and i.sendtime between "+dateQueryAdapter.dateAdapter(queryYear) +// + "and "+dateQueryAdapter.dateAdapter(nextYear) +// + " and i.status != '未发货' " +// + " and i.depart = '手术室' and i.orgUnitCoding = '"+departCoding+"'" +// +" group by "+dateQueryAdapter.dateConverAdapter3("i.sendtime","mm"); +// ResultSet invoiceResult = objectDao.executeSql(invoiceSql); + Map totalTousseInstanceMap = getMorrowSendTousseInstanceMap(year,departCoding,false); + Map morrowSendTousseInstanceMap = getMorrowSendTousseInstanceMap(year,departCoding,true); + return getFractionDefective(totalTousseInstanceMap, morrowSendTousseInstanceMap, + "手术器械包次日下送发生率"); } return null; } @@ -965,7 +1044,68 @@ bean.setQuotaName(quotaName); return bean; } + /** + * 获取每个月不合格发生数量 + * @param map 每个月不合格map + * @param quotaName 指标名称 + * @return + */ + public EighteenQuotaBean getEveryMonthAmount(Map rsMap, String quotaName) { + if(rsMap == null){ + return null; + } + Map map = new HashMap(); +// Map rsMap = new HashMap(); +// if (rs != null) { +// try { +// while (rs.next()) { +// String month = rs.getString(1); +// int amount = rs.getInt(2); +// rsMap.put(month, amount); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// DatabaseUtil.closeResultSetAndStatement(rs); +// } +// } + Integer avgValue = 0; + for (int i = 1; i <= 12; i++) { + String key = ""; + if (i > 9) { + key = "" + i; + } else { + key = "0" + i; + } + Integer value = 0; + if (rsMap.get(key) != null) { + value = rsMap.get(key); + } + avgValue += value; + map.put(key, "" + value); + } + EighteenQuotaBean bean = new EighteenQuotaBean(); + bean.setSortNumber(1L); + bean.setJanuaryBHGL("" + map.get("01")); + bean.setFebruaryBHGL("" + map.get("02")); + bean.setMarchBHGL("" + map.get("03")); + bean.setAprilBHGL("" + map.get("04")); + bean.setMayBHGL("" + map.get("05")); + bean.setJuneBHGL("" + map.get("06")); + bean.setJulyBHGL("" + map.get("07")); + bean.setAugustBHGL("" + map.get("08")); + bean.setSeptemberBHGL("" + map.get("09")); + bean.setOctoberBHGL("" + map.get("10")); + bean.setNovemberBHGL("" + map.get("11")); + bean.setDecemberBHGL("" + map.get("12")); + BigDecimal b1 = new BigDecimal(avgValue); + BigDecimal b2 = new BigDecimal(12); + double avg = b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + bean.setAvgBHGL("" + avg); + bean.setQuotaName(quotaName); + return bean; + } /** * 获取某个月的开始日期下一个月的第一天 2012-01-01 2012-02-01 * @@ -2696,7 +2836,7 @@ } String sql = "select sum(q.amount) from QualityMonitoring q,QualityMonitoringAnswer a " + "where q.id = a.qualitymonitoring_id " - + "and a.answer like '%包内化学指示卡变色不合格%' and q.dateTime >= " + + "and a.questionName like '%包内化学指示卡变色不合格%' and q.dateTime >= " + dateQueryAdapter.dateAdapter(startDay) + " and q.dateTime <= " + dateQueryAdapter.dateAdapter(endDay) @@ -8893,4 +9033,243 @@ } return statisticsItems; } + /** + * 获取器械包处理总件数map + * @param year + * @param departCoding + * @return + */ + public Map getGeneralMaterialMap(String year,String departCoding){ + if (StringUtils.isNotBlank(year)){ + Map rsMap = new HashMap(); + for (int i = 1; i <= 12; i++) { + String mm = ""; + if (i > 9) { + mm = "" + i; + } else { + mm = "0" + i; + } + String startTime = year + "-" + mm + "-01 00:00:00"; + String endTime = getNextMonth(year,mm) + " 00:00:00"; + String sql = "select distinct po from " + ClassifyBasket.class.getSimpleName() + + " po left join po.washAndDisinfectRecords wr where wr is not null" + + " and po.containerName in (select containerName from Container where departCode = '" + departCoding + "' )" + + " and po.recyclingTime between " + dateQueryAdapter.dateAdapter(startTime) + + " and " + dateQueryAdapter.dateAdapter(endTime) ; + List baskets = (List)objectDao.findByHql(sql); + int totalAmount = 0; + int basketMaterialAmount = 0; + if(baskets != null || baskets.size()>0){ + for(ClassifyBasket cb : baskets){ + basketMaterialAmount += getMaterialsAmount(cb); + } + } + int washMaterialAmount = 0; + // 不入框清洗的材料 + String washRecordSql = "select distinct po from " + WashAndDisinfectRecord.class.getSimpleName() + + " po where po.orgUnitCoding = '" + departCoding + "'" + + " and po.endDate between " + dateQueryAdapter.dateAdapter(startTime) + + " and " + dateQueryAdapter.dateAdapter(endTime) ; + List washRecords = (List)objectDao.findByHql(washRecordSql); + if(washRecords != null || washRecords.size()>0){ + for(WashAndDisinfectRecord wr : washRecords){ + washMaterialAmount += getMaterialsAmount(wr); + } + } + totalAmount = basketMaterialAmount + washMaterialAmount; + // 插入一个月的统计数量 + rsMap.put(mm, totalAmount); + } + return rsMap; + } + return null; + } + // 获取未入框清洗的材料 + public int getMaterialsAmount(WashAndDisinfectRecord wr){ + if(wr == null) + return 0; + int amount = 0; + List washAndDisinfectMaterials = new ArrayList(); + washAndDisinfectMaterials = wr.getWashAndDisinfectMaterials(); + for(WashAndDisinfectRecordMaterial wm : washAndDisinfectMaterials){ + amount += wm.getAmount(); + } + return amount; + } + public int getMaterialsAmount(ClassifyBasket cb){ + if( cb == null) + return 0; + int amount = 0; + for(ClassifiedItem item : cb.getClassfiedItems()){ + if(ClassifiedItem.TYPE_FOREIGN_TOUSSE.equals(item.getItemType())){ + // 外来器械包不统计 + continue; + } + if( ClassifiedItem.TYPE_MATERIAL.equals(item.getItemType())) + { + amount += item.getAmount(); + }else{ + // 器械包里面材料数量 + int materialAmount = 0; + TousseDefinition td = item.getTousseDefinition(); + List mis = new ArrayList(); + // 辅料包不统计 + if(td != null && !TousseDefinition.PACKAGE_TYPE_DRESSING.equals(td.getPackageType()) ){ + mis = td.getMaterialInstances(); + } + for(MaterialInstance mi : mis){ + materialAmount += mi.getCount(); + } + amount += item.getAmount() * materialAmount; + } + } + return amount; + } + public Map getForeignMaterialMap(String year,String departCoding){ + if (StringUtils.isNotBlank(year)){ + Map rsMap = new HashMap(); + for (int i = 1; i <= 12; i++) { + String mm = ""; + if (i > 9) { + mm = "" + i; + } else { + mm = "0" + i; + } + String startTime = year + "-" + mm + "-01 00:00:00"; + String endTime = getNextMonth(year,mm) + " 00:00:00"; + String sql = "select distinct po from " + ClassifyBasket.class.getSimpleName() + + " po left join po.washAndDisinfectRecords wr where wr is not null" + + " and po.containerName in (select containerName from Container where departCode = '" + departCoding + "' )" + + " and po.recyclingTime between " + dateQueryAdapter.dateAdapter(startTime) + + " and " + dateQueryAdapter.dateAdapter(endTime) ; + List baskets = (List)objectDao.findByHql(sql); + int basketMaterialAmount = 0; + if(baskets != null || baskets.size()>0){ + for(ClassifyBasket cb : baskets){ + basketMaterialAmount += getForeignMaterialsAmount(cb); + } + } + // 插入一个月的统计数量 + rsMap.put(mm, basketMaterialAmount); + } + return rsMap; + } + return null; + } + + public int getForeignMaterialsAmount(ClassifyBasket cb){ + if( cb == null) + return 0; + int amount = 0; + for(ClassifiedItem item : cb.getClassfiedItems()){ + if(ClassifiedItem.TYPE_FOREIGN_TOUSSE.equals(item.getItemType())){ + int materialAmount = 0; + TousseDefinition td = item.getTousseDefinition(); + List mis = new ArrayList(); + if(td != null){ + mis = td.getMaterialInstances(); + } + for(MaterialInstance mi : mis){ + materialAmount += mi.getCount(); + } + amount += item.getAmount() * materialAmount; + }else if( ClassifiedItem.TYPE_MATERIAL.equals(item.getItemType())) + { + MaterialDefinition materialDefinition = item.getMaterialDefinition(); + if( materialDefinition != null){ + String isForeignMaterial = materialDefinition.getIsForeignMaterial(); + if(isForeignMaterial != null && isForeignMaterial.equals("是")){ + // 是外来器械材料,需要统计 + amount += item.getAmount(); + } + } + } + } + return amount; + } + /** + * + * @param year + * @param departCoding + * @param isMorrowSend 是否仅获取次日下送的包 + * @return + */ + public Map getMorrowSendTousseInstanceMap(String year,String departCoding,Boolean isMorrowSend){ + if (StringUtils.isNotBlank(year)){ + Map rsMap = new HashMap(); + for (int i = 1; i <= 12; i++) { + String mm = ""; + if (i > 9) { + mm = "" + i; + } else { + mm = "0" + i; + } + String startTime = year + "-" + mm + "-01 00:00:00"; + String endTime = getNextMonth(year,mm) + " 00:00:00"; + String sql = "select po from " + Invoice.class.getSimpleName() + " po where " + + " ( po.invoicePlan.depart like '%" + "手术室" + "%' or po.invoicePlan.depart like '%" + "麻醉" +"%' )" + + " and po.invoicePlan.handleDepartCoding = '" + departCoding + "'" + + " and po.sendTime between " + dateQueryAdapter.dateAdapter(startTime) + + " and " + dateQueryAdapter.dateAdapter(endTime) ; + List invoices = (List)objectDao.findByHql(sql); + int tousseInstanceAmount = 0; + if(invoices != null || invoices.size()>0){ + for(Invoice invoice : invoices){ + tousseInstanceAmount += getMorrowSendTousseInstance(invoice,isMorrowSend); + } + } + // 插入一个月的统计数量 + rsMap.put(mm, tousseInstanceAmount); + } + return rsMap; + } + return null; + } + /** + * 统计一张发货单里面的器械包,isMorrowSend为true时,只返回次日下送器械包个数 + * @param invoice + * @param isMorrowSend + * @return + */ + public int getMorrowSendTousseInstance(Invoice invoice,Boolean isMorrowSend){ + if(invoice == null) + return 0; + int amount = 0; + try{ + String sql = "select sum(it.amount) from invoiceitem it where it.tousseType != '一次性物品' and it.invoice_id = " + invoice.getId(); + ResultSet rs = objectDao.executeSql(sql); + // 获取发货单器械包数量 + while (rs.next()) { + amount = rs.getInt(1); + } + + if(isMorrowSend){ + sql = "select i.sendTime,rr.recyclingTime from RecyclingRecord rr,invoicePlan ip,invoice i " + + " where i.invoicePlan_ID = ip.id and rr.recyclingApplication_id = ip.id" + + " and i.id = " + invoice.getId(); + ResultSet rs1 = objectDao.executeSql(sql); + String sendTimeStr = null; + String recyclingTimeStr = null; + while (rs1.next()) { + sendTimeStr = rs1.getString(1); + recyclingTimeStr = rs1.getString(2); + } + if( StringUtils.isNotBlank(sendTimeStr) && StringUtils.isNotBlank(recyclingTimeStr) ){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + sendTimeStr = sendTimeStr.substring(0,10); + recyclingTimeStr = recyclingTimeStr.substring(0,10); + if( !sendTimeStr.equals(recyclingTimeStr) ){ + // 两个时间不一样,则为次日下送 + return amount; + } + } + return 0; + }else{ + return amount; + } + }catch(Exception ex){ + ex.printStackTrace(); + return 0; + } + } }