Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationTransition/service/SterilizationTransitionManagerImpl.java =================================================================== diff -u -r38489 -r38504 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationTransition/service/SterilizationTransitionManagerImpl.java (.../SterilizationTransitionManagerImpl.java) (revision 38489) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationTransition/service/SterilizationTransitionManagerImpl.java (.../SterilizationTransitionManagerImpl.java) (revision 38504) @@ -476,6 +476,12 @@ child.put("tousseDefinitionId", item.getTousseDefinitionId()); child.put("tousseName", item.getTousseName()); child.put("tousseInstanceId", item.getTousseInstanceId()); + if(DatabaseUtil.isPoIdValid(item.getTousseInstanceId())){ + TousseInstance ti = tousseInstanceManager.get(item.getTousseInstanceId()); + if(ti != null){ + child.put("sterilizationMode", ti.getSterilingMode()); + } + } child.put("idCardInstanceBarcode", item.getIdCardInstanceBarcode()); child.put("tousseInstanceBarcode", item.getTousseInstanceBarcode()); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r38068 -r38504 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 38068) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 38504) @@ -1401,6 +1401,30 @@ public JSONArray loadTousseOperationTraceabilityInfo(String barcode, String tousseName, String destLocation, String operator, String tousseOperationInfo, String startTime, String endTime); + /** + * 验证灭菌方式 + * @param isNew 是否新的代理灭菌 + * @param sterilizationMode 验证的灭菌方式 + * @param type 类型 容器或器械包 + * @param tousseInstanceList 验证的包实例 + */ + public void checkSterilizationMode(boolean isNew, String sterilizationMode, String type, List tousseInstanceList); + /** + * 验证灭菌方式 + * @param containerBarcode 容器条码 + * @param sterilizationTransitionId 灭菌交接id + * @param oldSterilizationMode 验证的灭菌方式 + */ + public void checkSterilizationMode(String containerBarcode, Long sterilizationTransitionId, String oldSterilizationMode); + /** + * 通过器械包实例条码获取器械包实例的信息(用于灭菌交接). + * @param barcode 包实例条码 + * @param sterilizationTransitionId 灭菌交接记录的id + * @param sterilizationMode 灭菌方式 + * @param checkSterilizationMode 验证灭菌方式 + */ + public SterilizationTransitionItemVO loadTousseInstanceByBarcodeforSterilizationTransition( + String barcode, Long sterilizationTransitionId, String sterilizationMode, boolean checkSterilizationMode); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r37758 -r38504 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 37758) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 38504) @@ -307,14 +307,19 @@ try { String barcode = StrutsParamUtils.getPraramValue("barcode", ""); Long sterilizationTransitionId = StrutsParamUtils.getPraramLongValue("sterilizationTransitionId", 0L); - - SterilizationTransitionItemVO result = tousseInstanceManager.loadTousseInstanceByBarcodeforSterilizationTransition(barcode, sterilizationTransitionId); + String sterilizationMode = StrutsParamUtils.getPraramValue("sterilizationMode", ""); + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode, true); + SterilizationTransitionItemVO result = null; + if(BarcodeDevice.BARCODE_TYPE_PACKAGE.equals(barcodeDevice.getType())){ + result = tousseInstanceManager.loadTousseInstanceByBarcodeforSterilizationTransition(barcode, sterilizationTransitionId,sterilizationMode,true); + } //根据条码找不到器械包时,去找篮筐 - if(result == null){ + if(result == null && BarcodeDevice.BARCODE_TYPE_CONTAINER.equals(barcodeDevice.getType())){ JSONObject reviewedBasketRusult = tousseInstanceManager.getSterilizationReviewedBasketIdByBarcode(barcode); if(null == reviewedBasketRusult){//如果篮筐也找不到则直接报错 throw new TousseInstanceNotExist("请扫描器械包或灭菌筐条码"); }else{//找到对应的篮筐 + tousseInstanceManager.checkSterilizationMode(barcode, sterilizationTransitionId,sterilizationMode); result = new SterilizationTransitionItemVO(); result.setContainerName(reviewedBasketRusult.getString("containerName")); JSONObject data = JSONObject.fromObject(result); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r38479 -r38504 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 38479) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 38504) @@ -5738,30 +5738,7 @@ @Override public SterilizationTransitionItemVO loadTousseInstanceByBarcodeforSterilizationTransition( String barcode, Long sterilizationTransitionId) { - TousseInstance tousseInstance = getFirst("barcode", barcode); - if (tousseInstance == null){ - return null; - } - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - if (tousseDefinition.isInsideTousse() || tousseDefinition.isForeignOrSplitTousse()) { - if (!tousseInstance.isReviewed()) { - throw new SystemException("器械包状态必须为已审核才能做灭菌交接!"); - } - if (objectDao.countBySql("select count(*) from " - + SterilizationTransitionItem.class.getSimpleName() - +" where tousseInstanceId="+tousseInstance.getId()) > 0) { - throw new SystemException("此器械包已经做过灭菌交接!"); - } - SterilizationTransitionItemVO sterilizationTransitionItemVO = tousseInstanceToSterilizationTransitionItemVO(tousseInstance); - if(tousseInstance.getUrgentLevel() != null){ - sterilizationTransitionItemVO.setUrgentLevelId(tousseInstance.getUrgentLevel().getId()); - sterilizationTransitionItemVO.setColorCode(tousseInstance.getUrgentLevel().getColorCode()); - sterilizationTransitionItemVO.setUrgentLevelName(tousseInstance.getUrgentLevel().getName()); - } - return sterilizationTransitionItemVO; - } else { - throw new SystemException("只有器械包和外来器械包才能做灭菌交接记录!"); - } + return loadTousseInstanceByBarcodeforSterilizationTransition(barcode, sterilizationTransitionId, null, false); } @Override @@ -5797,6 +5774,7 @@ vo.setReviewerCode(tousseInstance.getReviewerCode()); //审核人编码 vo.setOperationTime(operationTime); //装配时间 vo.setIsUrgentTousse(tousseInstance.getIsUrgentTousse()); //是否加急 + vo.setSterilizationMode(tousseInstance.getSterilingMode()); } return vo; } @@ -14794,5 +14772,162 @@ } return null; } - + @Override + public void checkSterilizationMode(String containerBarcode, Long sterilizationTransitionId, String checkSterilizationMode) { + List containers = objectDao.findByHql("select po from Container po where po.barcode='"+containerBarcode+"'"); + Container container = null; + if(CollectionUtils.isNotEmpty(containers)){ + container = containers.get(0); + } + ReviewedBasket basket = reviewedBasketManager + .getReviewedBasketForSterilizeRecord(containerBarcode); + if(container != null && Container.CONTAINER_STATUS_STERILIZING.equals(container.getStatus())){ + throw new SystemException("该篮筐正在进行灭菌,不能使用该篮筐"); + }else{ + List tousses = this.buildReviewedTousseInstanceVos(basket); + if(CollectionUtils.isNotEmpty(tousses)){ + boolean isNew = false; + if(!DatabaseUtil.isPoIdValid(sterilizationTransitionId) + || objectDao.countBySql("select count(*) from ProxyDisinfection where sterilizationTransitionId=" + +sterilizationTransitionId) == 0){ + isNew = true; + } + if(isNew && StringUtils.isBlank(checkSterilizationMode)){ + + }else{ + checkSterilizationMode(isNew, checkSterilizationMode, "容器", tousses); + } + } + } + + } + private List buildReviewedTousseInstanceVos( + ReviewedBasket reviewedBasket) { + Set tis = getReviewedTousseInstance(reviewedBasket); + if(CollectionUtils.isNotEmpty(tis)){ + + //判断篮筐或者装配记录上面,灭菌方式是否相同 + Set sterilizationModeSet = new HashSet(); + for (TousseInstance ti : tis) { + sterilizationModeSet.add(StringUtils.defaultString(ti.getSterilingMode())); + if(sterilizationModeSet.size() > 1){ + throw new SystemException("该篮筐有多种不同灭菌方式的物品,不能装载物品,请先将筐内灭菌方式不同的物品移除"); + } + } + String orgUnitCode = AcegiHelper.getCurrentOrgUnitCode(); + List list = new ArrayList(); + for(TousseInstance ti : tis){ + if(!StringTools.equals(orgUnitCode, ti.getOrgUnitCoding())){ + //当前登录用户不能代理灭菌自己科室处理的包 + list.add(ti); + } + } + return list; + } + return null; + } + @Override + public SterilizationTransitionItemVO loadTousseInstanceByBarcodeforSterilizationTransition( + String barcode, Long sterilizationTransitionId, + String sterilizationMode, boolean checkSterilizationMode) { + TousseInstance tousseInstance = getFirst("barcode", barcode); + if (tousseInstance == null){ + return null; + } + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + if (tousseDefinition.isInsideTousse() || tousseDefinition.isForeignOrSplitTousse()) { + if (!tousseInstance.isReviewed()) { + throw new SystemException("器械包状态必须为已审核才能做灭菌交接!"); + } + if(checkSterilizationMode){ + boolean isNew = false; + if(!DatabaseUtil.isPoIdValid(sterilizationTransitionId) + || objectDao.countBySql("select count(*) from ProxyDisinfection where sterilizationTransitionId=" + +sterilizationTransitionId) == 0){ + isNew = true; + } + if(isNew && sterilizationMode == null){ + + }else{ + List tousseInstanceList = new ArrayList(); + tousseInstanceList.add(tousseInstance); + checkSterilizationMode(isNew, sterilizationMode, BarcodeDevice.BARCODE_TYPE_PACKAGE, tousseInstanceList); + } + } + + if (objectDao.countBySql("select count(*) from " + + SterilizationTransitionItem.class.getSimpleName() + +" where tousseInstanceId="+tousseInstance.getId()) > 0) { + throw new SystemException("此器械包已经做过灭菌交接!"); + } + SterilizationTransitionItemVO sterilizationTransitionItemVO = tousseInstanceToSterilizationTransitionItemVO(tousseInstance); + if(tousseInstance.getUrgentLevel() != null){ + sterilizationTransitionItemVO.setUrgentLevelId(tousseInstance.getUrgentLevel().getId()); + sterilizationTransitionItemVO.setColorCode(tousseInstance.getUrgentLevel().getColorCode()); + sterilizationTransitionItemVO.setUrgentLevelName(tousseInstance.getUrgentLevel().getName()); + } + return sterilizationTransitionItemVO; + } else { + throw new SystemException("只有器械包和外来器械包才能做灭菌交接记录!"); + } + } + private void isSameSterilizationMode(TousseInstance ti, + String sterilizationMode) { + String tiSterilingMode = StringUtils.defaultString(ti.getSterilingMode(), ""); + if(ti != null && !StringUtils.equals(tiSterilingMode, sterilizationMode)){ + String tiSterilingModeMessage = ""; + if(StringUtils.isNotBlank(tiSterilingMode)){ + tiSterilingModeMessage = "属于【" + tiSterilingMode + "】物品"; + } + String oldSterilingModeMessage = ""; + if(StringUtils.isNotBlank(sterilizationMode)){ + oldSterilingModeMessage = "【" + sterilizationMode + "】"; + } + throw new SystemException("【" + ti.getTousseName() + "】" + tiSterilingModeMessage + "与原有" + oldSterilingModeMessage + "物品的灭菌方式不一致,不能录入。"); + } + } + /** + * 检查扫描的物品和单上保存的物品的,灭菌方式是否一致 + * @param isNew + * @param sterilizationMode + * @param json + */ + @Override + public void checkSterilizationMode(boolean isNew, String sterilizationMode, String type, List tousseInstanceList) { + + if(CollectionUtils.isEmpty(tousseInstanceList)){ + return; + } + + if(StringUtils.equals(type, BarcodeDevice.BARCODE_TYPE_PACKAGE)){ + if(isNew && StringUtils.isBlank(sterilizationMode)){ + return; + } + TousseInstance ti = tousseInstanceList.get(0); + isSameSterilizationMode(ti, sterilizationMode); + return; + } + + if(StringUtils.equals(type, "容器") || StringUtils.equals(type, "装配记录")){ + + //判断篮筐或者装配记录上面,灭菌方式是否相同 + Set sterilizationModeSet = new HashSet(); + for (TousseInstance ti : tousseInstanceList) { + sterilizationModeSet.add(StringUtils.defaultString(ti.getSterilingMode())); + if(sterilizationModeSet.size() > 1){ + if(StringUtils.equals(type, "容器")){ + throw new SystemException("该篮筐有多种不同灭菌方式的物品,不能装载物品,请先将筐内灭菌方式不同的物品移除"); + }else if(StringUtils.equals(type, "装配记录")){ + throw new SystemException("装配记录有多种不同灭菌方式的物品,不能生成代理灭菌单,请不要勾选包含不同灭菌方式的物品的装配记录"); + } + } + } + + //新建代理灭菌单时,只需要判断篮筐或者装配记录上面的器械包,灭菌方式是否一致; + //修改代理灭菌单时,需要拿新增加的物品和已经保存的物品比较灭菌方式是否一致 + for (TousseInstance ti : tousseInstanceList) { + isSameSterilizationMode(ti, sterilizationMode); + } + } + } }