Index: forgon-core/src/main/java/com/forgon/databaseadapter/service/DateQueryAdapter.java =================================================================== diff -u -r16980 -r17243 --- forgon-core/src/main/java/com/forgon/databaseadapter/service/DateQueryAdapter.java (.../DateQueryAdapter.java) (revision 16980) +++ forgon-core/src/main/java/com/forgon/databaseadapter/service/DateQueryAdapter.java (.../DateQueryAdapter.java) (revision 17243) @@ -71,6 +71,34 @@ return sql; } /** + * 生成日期时间的区间查询条件,可以连接到and 或者 where 子句后面。字段的类型为字符串,实际记录的是日期 + * @param property + * @param startDateTime + * @param endDateTime + * @return + */ + public String strDateAreasql(String property,String startDateTime,String endDateTime){ + String sql = " ( 1= 1 )"; + if(StringUtils.isNotBlank(startDateTime) && StringUtils.isNotBlank(endDateTime)){ + sql = " ( " + stringFieldToDate(property) + " between " + dateAdapter(startDateTime) + " and " + dateAdapter(endDateTime) + " ) "; + } + return sql; + } + /** + * 生成日期时间的区间查询条件,可以连接到and 或者 where 子句后面。字段的类型为字符串,实际记录的是日期 + * @param property po的属性字符串。如po.time + * @param startDateTime 开始的日期时间,如果为null或者是空字符,则不过滤 + * @param endDateTime 结束的日期时间,如果为null或者是空字符,则不过滤 + * @param appendTime true表示 startDateTime和 endDateTime是日期,需要分别添加时间00:00:00和23:59:59 + * @return + */ + public String strDateAreasql(String property,String startDateTime,String endDateTime,boolean appendTime){ + if(appendTime && StringUtils.isNotBlank(startDateTime) && StringUtils.isNotBlank(endDateTime)){ + return strDateAreasql(property,startDateTime + " 00:00:00",endDateTime + " 23:59:59"); + } + return strDateAreasql(property,startDateTime,endDateTime); + } + /** * 生成日期时间的区间查询条件,可以连接到and 或者 where 子句后面 * @param property po的属性字符串。如po.time * @param startDateTime 开始的日期时间,如果为null或者是空字符,则不过滤 Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r17239 -r17243 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17239) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17243) @@ -12990,26 +12990,32 @@ if(StringTools.isEmpty(sterilizerName) || StringTools.isEmpty(sterilizationType)){ where = " 1=0 "; } + Date startDate = ForgonDateUtils.safelyParseDate(startDay, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM); + Date endDate = ForgonDateUtils.safelyParseDate(endDay, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM); + startDay = ForgonDateUtils.safelyFormatDate(startDate, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); + endDay = ForgonDateUtils.safelyFormatDate(endDate, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "");; GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_TOUSSEOVERLOAD, AcegiHelper.getCurrentOrgUnitCode()); if(option != null){ String v = option.getValue(); if(StringTools.isNotBlank(v)){ String[] array = v.split(";"); String vString = StringTools.join(array, "','"); vString = "'" + vString + "'"; - where += " and tousseName in (" + vString + ")"; + where += " and ti.tousseName in (" + vString + ")"; } } List voList = new ArrayList(); - String sterileStartTime = SqlUtils.getSubStringSql(dbConnection, "sterileStartTime", 0, 10); + String sterileStartTime = SqlUtils.getSubStringSql(dbConnection, "ti.sterileStartTime", 0, 10); String sql = "select sterilingType,sterileFrequency,"+sterileStartTime+" sterileStartTime,tousseName,count(*) tousseCount from " - + TousseInstance.class.getSimpleName() - + " where sterilizerName='" + sterilizerName + "' and sterilingType='" + sterilizationType + "'" - + " and (" + dateQueryAdapter.dateAreaSql("sterileStartTime", startDay, endDay, false) - + " or " + dateQueryAdapter.dateAreaSql("sterileEndTime", startDay, endDay, false) + + TousseInstance.class.getSimpleName() + " ti join " + TousseDefinition.class.getSimpleName() + " td on td.id = ti.tousseDefinition_id " + + " where ti.sterilizerName='" + sterilizerName + "' and ti.sterilingType='" + sterilizationType + "'" + + " and td.tousseType in ('" + TousseDefinition.PACKAGE_TYPE_INSIDE + "','" + + TousseDefinition.PACKAGE_TYPE_DRESSING + "','" + TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY + "')" + + " and (" + dateQueryAdapter.strDateAreasql("ti.sterileStartTime", startDay, endDay, false) + + " or " + dateQueryAdapter.strDateAreasql("ti.sterileEndTime", startDay, endDay, false) + " ) and " + where - + " group by sterilingType,sterileFrequency,"+sterileStartTime+",tousseName" + + " group by ti.sterilingType,ti.sterileFrequency,"+sterileStartTime+",ti.tousseName" + " order by " + sterileStartTime; try{ Index: ssts-web/src/test/java/test/forgon/disinfectsystem/reports/TestTousseOverLoad.java =================================================================== diff -u -r17239 -r17243 --- ssts-web/src/test/java/test/forgon/disinfectsystem/reports/TestTousseOverLoad.java (.../TestTousseOverLoad.java) (revision 17239) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/reports/TestTousseOverLoad.java (.../TestTousseOverLoad.java) (revision 17243) @@ -18,10 +18,13 @@ import org.springframework.test.annotation.Rollback; import org.testng.annotations.Test; +import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -93,14 +96,14 @@ List allTousseName = new ArrayList<>(); allTousseName.add("Test开胸包"); allTousseName.add("Test开颅包"); - allTousseName.add("Test开口包"); - allTousseName.add("Test穿刺包"); + allTousseName.add("4#压力蒸汽灭菌包"); + allTousseName.add("Test治疗巾"); Map codeCount = new HashMap<>(); - codeCount.put("Test开胸包1Test开颅包2Test开口包3Test穿刺包4", 2); - codeCount.put("Test开胸包1Test开颅包2Test开口包3Test穿刺包6", 4); - codeCount.put("Test开胸包1Test开颅包1Test开口包1Test穿刺包6", 1); - codeCount.put("Test开胸包2Test开颅包3Test开口包3Test穿刺包6", 1); + codeCount.put("Test开胸包1Test开颅包24#压力蒸汽灭菌包3Test治疗巾4", 2); + codeCount.put("Test开胸包1Test开颅包24#压力蒸汽灭菌包3Test治疗巾6", 4); + codeCount.put("Test开胸包1Test开颅包14#压力蒸汽灭菌包1Test治疗巾6", 1); + codeCount.put("Test开胸包2Test开颅包34#压力蒸汽灭菌包3Test治疗巾6", 1); //同一行,所有bean的灭菌程序,炉次,日期,序号,组合编号及组合编号出现的次数一样 for(Entry> entry : frequencyItems.entrySet()){ @@ -129,9 +132,9 @@ } private void prepareTodayData() { frequencyTousseCount.clear(); - List count = Arrays.asList(1,2,3,4); + List count = Arrays.asList(1,2,3,4,2);//添加两个自定义器械包,干扰数据 frequencyTousseCount.put(1, count); - count = Arrays.asList(1,2,3,6); + count = Arrays.asList(1,2,3,6,4);//添加四个自定义器械包,干扰数据 frequencyTousseCount.put(2, count); count = Arrays.asList(1,1,1,6); @@ -175,14 +178,41 @@ Sterilizer s = sterilizerManager.getSterilizerByName("1号高温蒸汽灭菌炉"); s.getSterilisations().add(sterilisation); objectDao.saveOrUpdate(s); + + MaterialDefinition materialDefinition1 = new MaterialDefinition(); + materialDefinition1.setName("Test镊子"); + materialDefinition1.setType("金属类"); + materialDefinition1.setSpelling("TEATNZ"); + materialDefinition1.setCost(2.4); + materialDefinitionManager.saveOrUpdate(materialDefinition1); + + MaterialInstance materialInstance1 = new MaterialInstance(); + materialInstance1.setMaterialDefinition(materialDefinition1); + materialInstance1.setCount(2); + materialInstance1.setMaterialName(materialDefinition1.getName()); + + TousseDefinition tousseDefinition11 = new TousseDefinition(); + //自定义器械包 + tousseDefinition11.setName("Test自定义包类型的器械包"); + tousseDefinition11.setIsCleanedEntirely("是"); + tousseDefinition11.setTaskGroup("器械组"); + tousseDefinition11.setTousseType(TousseDefinition.PACKAGE_TYPE_CUSTOM); + tousseDefinition11.setHandlerDepartName(Constants.ORG_UNIT_NAME_DISINFECT); + tousseDefinition11.setHandlerDepartCode(Constants.ORG_UNIT_CODE_DISINFECT); + + tousseDefinition11.getMaterialInstances().add(materialInstance1); + tousseDefinitionManager.saveOrUpdate(tousseDefinition11); } private void prepare(Date date){ //包定义 TousseDefinition td1 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); TousseDefinition td2 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); - TousseDefinition td3 = tousseDefinitionManager.getTousseDefinitionByName("Test开口包"); - TousseDefinition td4 = tousseDefinitionManager.getTousseDefinitionByName("Test穿刺包"); + TousseDefinition td3 = tousseDefinitionManager.getTousseDefinitionByName("4#压力蒸汽灭菌包"); //外部代理灭菌包 + TousseDefinition td4 = tousseDefinitionManager.getTousseDefinitionByName("Test治疗巾"); //敷料包 + TousseDefinition td5 = tousseDefinitionManager.getTousseDefinitionByName("Test自定义包类型的器械包"); //自定义器械包,干扰数据 + + boolean toBaket = false; Sterilizer s = sterilizerManager.getSterilizerByName("1号高温蒸汽灭菌炉"); @@ -198,7 +228,7 @@ sterilizationRecord.setSterilizationType("灭菌程序100"); List barcodeList = new ArrayList<>(); - TousseDefinition[] tds = {td1,td2,td3,td4}; + TousseDefinition[] tds = {td1,td2,td3,td4,td5}; for(int i = 0; i < entry.getValue().size();++i){ int count = entry.getValue().get(i); TousseDefinition td = tds[i];