Index: ssts-web/src/main/webapp/dataUpdater/sqls/5.0.7_5.0.8.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/5.0.7_5.0.8.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/5.0.7_5.0.8.sql (revision 35560) @@ -0,0 +1 @@ +update Rinser set isPackingAfterWashTimeEnd = (select case when (src.isPackingAfterWashTimeEnd = 1 or src.isPackingAfterWashTimeEnd is null) then '是' else '否' end from SupplyRoomConfig src where src.supplyRoomType = 0) where isPackingAfterWashTimeEnd = '否' and name not like '%手%'; \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/rinser/Rinser.java =================================================================== diff -u -r34042 -r35560 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/rinser/Rinser.java (.../Rinser.java) (revision 34042) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/rinser/Rinser.java (.../Rinser.java) (revision 35560) @@ -12,6 +12,7 @@ import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; +import javax.persistence.Column; import javax.persistence.FetchType; import javax.persistence.Index; import javax.persistence.JoinColumn; @@ -161,6 +162,11 @@ @JsonIgnore private ConsumptiveMaterialContainer consumptiveMaterialContainer; + /** + * 是否清洗时间结束后装配,默认值为“否”JYSRMYY-22 + */ + private String isPackingAfterWashTimeEnd = Constants.STR_NO; + public String getUseStatus() { return useStatus; } @@ -468,5 +474,14 @@ ConsumptiveMaterialContainer consumptiveMaterialContainer) { this.consumptiveMaterialContainer = consumptiveMaterialContainer; } + + @Column(columnDefinition=" varchar(255) default '" + Constants.STR_NO + "' not null ") + public String getIsPackingAfterWashTimeEnd() { + return isPackingAfterWashTimeEnd; + } + + public void setIsPackingAfterWashTimeEnd(String isPackingAfterWashTimeEnd) { + this.isPackingAfterWashTimeEnd = isPackingAfterWashTimeEnd; + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java =================================================================== diff -u -r35509 -r35560 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 35509) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 35560) @@ -397,7 +397,7 @@ private Boolean isFtOnlyImplantConvert = true; /** - * 是否清洗时间结束后装配 + * 是否清洗时间结束后装配,此字段已废弃(科室供应室设置里的“是否清洗时间结束后装配”改进为在清洗机定义中进行配置JYSRMYY-22) */ private Boolean isPackingAfterWashTimeEnd = true; Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java =================================================================== diff -u -r33817 -r35560 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 33817) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 35560) @@ -27,7 +27,7 @@ import com.forgon.Constants; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; -import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; @@ -599,7 +599,7 @@ * @return */ @Transient - public boolean cleaned(ObjectDao objectDao, SupplyRoomConfig supplyRoomConfig, Map washAndDisinfectRecordMap) { + public boolean cleaned(ObjectDao objectDao, Map washAndDisinfectRecordMap) { boolean result = false; if(DatabaseUtil.isPoIdValid(washRecord_id)){ WashAndDisinfectRecord washAndDisinfectRecord = null; @@ -610,8 +610,9 @@ washAndDisinfectRecordMap.put(washRecord_id, washAndDisinfectRecord); } if(washAndDisinfectRecord != null && washAndDisinfectRecord.washed()){ - if(supplyRoomConfig != null - && BooleanUtils.isTrue(supplyRoomConfig.getIsPackingAfterWashTimeEnd())){ + Rinser rinser = (Rinser) objectDao.getById(Rinser.class.getSimpleName(), washAndDisinfectRecord.getRinserId()); + if(rinser != null + && StringUtils.equals(Constants.STR_YES, rinser.getIsPackingAfterWashTimeEnd())){ if(washAndDisinfectRecord.getEndDate() != null && new Date().after(washAndDisinfectRecord.getEndDate())){ result = true; } Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r35499 -r35560 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 35499) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 35560) @@ -27,7 +27,8 @@ "4.9.25","4.9.26","4.9.27","4.9.28","4.9.29","4.9.30","4.9.31","4.9.32","4.9.33","4.9.34","4.9.35","4.9.36","4.9.37","4.9.38","4.9.39","4.9.40","4.9.41","4.9.42","4.9.43","4.9.44", "4.9.45","4.9.46","4.9.47","4.9.48","4.9.49","4.9.50","4.9.51","4.9.52","4.9.53","4.9.54","4.9.55","4.9.56","4.9.57","4.9.58","4.9.59","4.9.60","4.9.61","4.9.62", "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", - "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7"}; + "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", + "5.0.8"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r35446 -r35560 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 35446) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 35560) @@ -83,10 +83,8 @@ import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; -import com.forgon.disinfectsystem.disposablegoods.service.DisposableGoodsServiceContext; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; -import com.forgon.disinfectsystem.entity.basedatamanager.cleanmethod.CleanMethod; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; @@ -1801,7 +1799,7 @@ itemVo.setDamageRemark(task.getDamageRemark()); itemVo.setRecyclingItemRemark(task.getRecyclingItemRemark()); itemVo.setUrgentLevel(task.getUrgentLevel()); - itemVo.setCleaned(task.cleaned(objectDao,supplyRoomConfig,washAndDisinfectRecordMap)); + itemVo.setCleaned(task.cleaned(objectDao,washAndDisinfectRecordMap)); UrgentLevel ul = task.getUrgentLevelObj(); itemVo.setUrgentLevelObj(ul); if(isTimeout){ @@ -2464,7 +2462,7 @@ throw new RuntimeException(String.format("请扫描清洗完成的篮筐,该篮筐状态为%s!",status)); } //验证篮筐清洗完成时间是否清洗完成 - if(config != null){ + /*if(config != null){ //清洗时间结束后再装配 Boolean isPackingAfterWashTimeEnd = config.getIsPackingAfterWashTimeEnd(); if(isPackingAfterWashTimeEnd == null || isPackingAfterWashTimeEnd){ @@ -2475,6 +2473,11 @@ } } } + }*/ + ClassifyBasket classifyBasket = beCleanItemManager.getLatestWashedBasketByBarcode(basketBarcode); + //JYSRMYY-22 科室供应室设置里的“是否清洗时间结束后装配”改进为在清洗机定义中进行配置 + if(!isPackingAfterWashTimeEnd(classifyBasket)){ + throw new RuntimeException("该篮筐清洗未结束,请清洗结束后再扫描!"); } sql += " and po.basketBarcode like '%" + basketBarcode + "%' "; } @@ -2484,6 +2487,42 @@ } /** + * 清洗时间结束后再装配JYSRMYY-22 + * @param basketBarcode + */ + private boolean isPackingAfterWashTimeEnd(ClassifyBasket classifyBasket) { + + if(classifyBasket == null || !DatabaseUtil.isPoIdValid(classifyBasket.getId())){ + throw new RuntimeException("参数异常"); + } + + String databaseNowTime = "GETDATE()"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + databaseNowTime = "SYSDATE"; + } + + String countSql = String.format("select count(0) from %s cb " + + "join ClassifyBasket_WashRecord cbw on cb.id = cbw.ClassifyBasket_ID " + + "join %s wdr on wdr.id = cbw.WashAndDisinfectRecord_ID " + + "join %s r on r.id = wdr.rinserId " + + "where cb.id = %s " + + "and r.isPackingAfterWashTimeEnd = '%s' " + + "and wdr.endDate > %s", + ClassifyBasket.class.getSimpleName(), + WashAndDisinfectRecord.class.getSimpleName(), + Rinser.class.getSimpleName(), + classifyBasket.getId(), + Constants.STR_YES, + databaseNowTime); + + if(objectDao.countBySql(countSql) > 0){ + //throw new RuntimeException("该篮筐清洗未结束,请清洗结束后再扫描!"); + return false; + } + return true; + } + + /** * 查询外来器械器械包、外来器械拆分小包的待装配装配任务集合(按科室供应室配置的任务组查询) * @param taskGroup * @param basketBarcode @@ -3828,7 +3867,7 @@ } }else if(Container.CONTAINER_STATUS_WASHED.equals(status)){ //验证篮筐清洗完成时间是否清洗完成 - if(supplyRoomConfig != null){ + /*if(supplyRoomConfig != null){ //清洗时间结束后再装配 Boolean isPackingAfterWashTimeEnd = supplyRoomConfig.getIsPackingAfterWashTimeEnd(); if(isPackingAfterWashTimeEnd == null || isPackingAfterWashTimeEnd){; @@ -3840,6 +3879,14 @@ } } } + }*/ + if(cb != null && cb.getWashEndTime() != null){ + //JYSRMYY-22通过清洗记录所在的清洗机的“是否清洗时间结束后装配”属性进行判断是否清洗完成再装配 + if(!isPackingAfterWashTimeEnd(cb)){ + errorMsg = "标识牌条码为"+ barcode +"的【"+ tousseDefinition.getName() +"】正在清洗,不能进行装配!"; + errorMsg += "清洗结束时间:" + sdf.format(cb.getWashEndTime().getTime()); + throw new RuntimeException(errorMsg); + } } } } @@ -8492,7 +8539,7 @@ } String washRecord_idSql = ""; if(isWashed){ - SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + /*SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); //清洗完成后装配 boolean isPackingAfterWashTimeEnd = true; if(config != null){ @@ -8505,8 +8552,17 @@ databaseNowTime = "SYSDATE"; } databaseNowTimeSql = " and endDate<" + databaseNowTime; + }*/ + + String databaseNowTime = "GETDATE()"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + databaseNowTime = "SYSDATE"; } - washRecord_idSql = String.format(" and ((po.taskType is null or po.taskType<> %s) or po.taskType=%s and po.washRecord_id in (select id from WashAndDisinfectRecord where washStatus='%s' %s)) ", + //JYSRMYY-22通过清洗记录所在的清洗机的“是否清洗时间结束后装配”属性进行判断是否清洗完成再装配 + String databaseNowTimeSql = " and (r.isPackingAfterWashTimeEnd = '" + Constants.STR_NO + "' or (r.isPackingAfterWashTimeEnd = '" + Constants.STR_YES + "' and wdr.endDate<" + databaseNowTime + ")) "; + washRecord_idSql = String.format(" and ((po.taskType is null or po.taskType<> %s) or po.taskType=%s " + + " and po.washRecord_id in (select wdr.id from WashAndDisinfectRecord wdr " + + " ,Rinser r where wdr.rinserId = r.id and washStatus='%s' %s)) ", PackingTask.TASK_RECYCLINGRECORD, PackingTask.TASK_RECYCLINGRECORD, WashAndDisinfectRecord.STATUS_WASHED, @@ -8532,7 +8588,7 @@ String washRecord_idSql = ""; String joinWashAndDisinfectRecordSql = ""; //清洗完成后装配 - boolean isPackingAfterWashTimeEnd = true; + /*boolean isPackingAfterWashTimeEnd = true; SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); if(config != null){ isPackingAfterWashTimeEnd = BooleanUtils.toBooleanDefaultIfNull(config.getIsPackingAfterWashTimeEnd(), true); @@ -8546,13 +8602,20 @@ databaseNowTimeSql = "or wd.endDate>" + databaseNowTime; }else{ databaseNowTimeSql = ""; + }*/ + //JYSRMYY-22通过清洗记录所在的清洗机的“是否清洗时间结束后装配”属性进行判断是否清洗完成再装配 + String databaseNowTimeSql = ""; + String databaseNowTime = "GETDATE()"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + databaseNowTime = "SYSDATE"; } + databaseNowTimeSql = "or (r.isPackingAfterWashTimeEnd = '" + Constants.STR_YES + "' and wd.endDate>" + databaseNowTime + ") "; washRecord_idSql = String.format(", case when po.taskType=%s and (po.washRecord_id is null or wd.washStatus is null or wd.washStatus<>'%s' %s) then 0 else 1 end as isWashTimeEnd ", PackingTask.TASK_RECYCLINGRECORD, WashAndDisinfectRecord.STATUS_WASHED, databaseNowTimeSql); - joinWashAndDisinfectRecordSql = String.format(" left join %s wd on wd.id=po.washRecord_id ", - WashAndDisinfectRecord.class.getSimpleName()); + joinWashAndDisinfectRecordSql = String.format(" left join %s wd on wd.id=po.washRecord_id left join %s r on r.id = wd.rinserId ", + WashAndDisinfectRecord.class.getSimpleName(), Rinser.class.getSimpleName()); String departCodingSql = null; if(CollectionUtils.isNotEmpty(departCodingList)){ departCodingSql = " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.departCoding", departCodingList); @@ -9907,20 +9970,14 @@ } } } - SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); - //清洗完成后装配 - boolean isPackingAfterWashTimeEnd = true; - if(config != null){ - isPackingAfterWashTimeEnd = BooleanUtils.toBooleanDefaultIfNull(config.getIsPackingAfterWashTimeEnd(), true); - } // 查找所有装配任务 List list = findPackingTaskBySQL(allTousseIdSet,handlerDepartCode,new ArrayList(departCodingSet),false,false); if(CollectionUtils.isEmpty(list)){ comboTousses = new JSONArray(); }else{ for(int i=0;i list,JSONObject comboTousse,String comboTousseOrgUnitCoding,Map> idToUnitCodeSetMap,Map> idToTousseIdSetMap){ + private int calTousseAmount(List list,JSONObject comboTousse,String comboTousseOrgUnitCoding,Map> idToUnitCodeSetMap,Map> idToTousseIdSetMap){ Long id = JSONUtil.optLong(comboTousse, "id", null); int totalAmount = 0; int unWashAmount = 0; Set comboTousseOrgUnitCodingSet = idToUnitCodeSetMap.get(id); Set tousseIdSet = idToTousseIdSetMap.get(id); + //查询装配任务关联的清洗机器是否需要清洗完成后装配JYSRMYY-22 + Map isPackingAfterWashTimeEndMap = getIsPackingAfterWashTimeEndMap(list); for (PackingTask packingTask : list) { boolean orgUnitMatch = false; if(StringUtils.isNotBlank(comboTousseOrgUnitCoding)){ @@ -9958,6 +10017,7 @@ if(!tousseIdSet.contains(packingTask.getTousseDefinition().getId())){ continue; } + boolean isPackingAfterWashTimeEnd = isPackingAfterWashTimeEndMap.get(packingTask) != null && isPackingAfterWashTimeEndMap.get(packingTask); if (isPackingAfterWashTimeEnd && PackingTask.TASK_RECYCLINGRECORD .equals(packingTask.getTaskType()) @@ -9970,7 +10030,63 @@ } comboTousse.put("currrentTaskAmount", totalAmount); comboTousse.put("unWashAmount", unWashAmount); - return totalAmount+unWashAmount; + return totalAmount+unWashAmount; +} + + /** + * 查询装配任务关联的清洗机器是否需要清洗完成后装配 + * @param list + * @return + */ + private Map getIsPackingAfterWashTimeEndMap(List list) { + Map isPackingAfterWashTimeEndMap = new HashMap(); + if(CollectionUtils.isEmpty(list)){ + return isPackingAfterWashTimeEndMap; + } + List washRecordIdList = new ArrayList(); + for (PackingTask packingTask : list) { + if(DatabaseUtil.isPoIdValid(packingTask.getWashRecord_id())){ + washRecordIdList.add(packingTask.getWashRecord_id()); + } + } + if(CollectionUtils.isEmpty(washRecordIdList)){ + return isPackingAfterWashTimeEndMap; + } + String sql = String.format("select wdr.id washRecordId, r.isPackingAfterWashTimeEnd " + + "from %s wdr " + + "join %s r on r.id = wdr.rinserId " + + "where %s", + WashAndDisinfectRecord.class.getSimpleName(), + Rinser.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("wdr.id", washRecordIdList)); + ResultSet rs = null; + try { + Map washRecordIdIsPackingAfterWashTimeEndMap = new HashMap(); + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long washRecordId = rs.getLong("washRecordId"); + String isPackingAfterWashTimeEnd = rs.getString("isPackingAfterWashTimeEnd"); + washRecordIdIsPackingAfterWashTimeEndMap.put(washRecordId, isPackingAfterWashTimeEnd); + } + for (PackingTask packingTask : list) { + if(DatabaseUtil.isPoIdValid(packingTask.getWashRecord_id())){ + Boolean isPackingAfterWashTimeEnd = false; + String isPackingAfterWashTimeEndStr = + washRecordIdIsPackingAfterWashTimeEndMap.get(packingTask.getWashRecord_id()); + if(StringUtils.equals(Constants.STR_YES, isPackingAfterWashTimeEndStr)){ + isPackingAfterWashTimeEnd = true; + } + isPackingAfterWashTimeEndMap.put(packingTask, isPackingAfterWashTimeEnd); + } + + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return isPackingAfterWashTimeEndMap; } @Override public Set filterDepartmentsWithoutTousses(Set departCodesSet) {