Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r34423 -r34629 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 34423) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 34629) @@ -80,6 +80,7 @@ import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstance; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -102,12 +103,14 @@ import com.forgon.disinfectsystem.entity.systemwarning.SystemWarningVo; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.expirationdateinfo.service.ExpirationDateInfoManager; +import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationTransition.service.SterilizationTransitionItemManager; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.vo.SterilizationRecordPrintTousseItem; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationunload.service.SterileUnloadScanTousseManager; import com.forgon.disinfectsystem.sterilizationmanager.sterilizerrecord.service.SenohSterilizerRecordManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; +import com.forgon.disinfectsystem.tousse.instrumentinstance.service.InstrumentInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.vo.ItemDefinitionVO; @@ -200,6 +203,17 @@ private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(4); + private IDCardInstanceManager idCardInstanceManager; + private InstrumentInstanceManager instrumentInstanceManager; + + public void setInstrumentInstanceManager( + InstrumentInstanceManager instrumentInstanceManager) { + this.instrumentInstanceManager = instrumentInstanceManager; + } + public void setIdCardInstanceManager( + IDCardInstanceManager idCardInstanceManager) { + this.idCardInstanceManager = idCardInstanceManager; + } public void setSenohSterilizerRecordManager( SenohSterilizerRecordManager senohSterilizerRecordManager) { this.senohSterilizerRecordManager = senohSterilizerRecordManager; @@ -1865,6 +1879,9 @@ Collection originalTousseInstances = sterilizationRecord .getTousseInstanceList(); List removeTousseInstanceList = new ArrayList(); + boolean enableInstrumentLifeCycleTraceabilityManagement = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLifeCycleTraceabilityManagement", false); + Set removeIdCardInstanceIDs = new HashSet();//移除的带有标识牌的包实例 + Set addIdCardInstanceIDs = new HashSet();//添加的带有标识牌的包实例 if (CollectionUtils.isNotEmpty(originalTousseInstances)) { for (TousseInstance tousseInstance : originalTousseInstances) { String barcode = tousseInstance.getBarcode(); @@ -1878,6 +1895,9 @@ if(tousseInstance.isSteriling()){ tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); tousseInstance.setSterilizerPosition(null); + if(enableInstrumentLifeCycleTraceabilityManagement && DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ + removeIdCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } tousseInstanceManager.save(tousseInstance); removeTousseInstanceList.add(tousseInstance); //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 @@ -1893,7 +1913,7 @@ } //删除篮筐内器械包 List delReviewedBasket = new ArrayList(); - Map delResult = delTousseOfBasket(delTousseJsonArr,sterilizationRecord, delReviewedBasket); + Map delResult = delTousseOfBasket(delTousseJsonArr,sterilizationRecord, delReviewedBasket, removeIdCardInstanceIDs); if(delResult != null){ return delResult;//有不能删除的器械包 } @@ -1935,6 +1955,9 @@ for (TousseInstance tousseInstance : tousseInstances) { if(tousseInstance.isSteriling()){ tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + if(enableInstrumentLifeCycleTraceabilityManagement && DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ + removeIdCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } tousseInstanceManager.save(tousseInstance); } } @@ -1959,7 +1982,7 @@ urgentJoinSql = ""; urgentQuerySql = ""; } - String sql = String.format("select %s ti.id, ti.status, ti.sterilingMode, ti.tousseDefinition_id, ti.proxyDisinfection_id, ti.sterileStartTime, ti.tousseName, bd.barcode from %s ti %s join %s bd on bd.id = ti.id where %s ", + String sql = String.format("select %s ti.idCardInstanceID,ti.id, ti.status, ti.sterilingMode, ti.tousseDefinition_id, ti.proxyDisinfection_id, ti.sterileStartTime, ti.tousseName, bd.barcode from %s ti %s join %s bd on bd.id = ti.id where %s ", urgentQuerySql, TousseInstance.class.getSimpleName(),urgentJoinSql, BarcodeDevice.class.getSimpleName(), SqlUtils.getStringFieldInLargeCollectionsPredicate("bd.barcode", tousseInstanceBarcodes)); ResultSet rs = null; @@ -1998,6 +2021,7 @@ TousseDefinition td = new TousseDefinition(); td.setId(tousseDefinition_id); ti.setTousseDefinition(td); + ti.setIdCardInstanceID(rs.getLong("idCardInstanceID")); ti.setSterileStartTime(sterileStartTime); ti.setBarcode(barcode); ti.setTousseName(tousseName); @@ -2033,6 +2057,9 @@ tousseInstance.setSterilizerPosition(positoin); } } + if(enableInstrumentLifeCycleTraceabilityManagement && DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ + addIdCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } tousseInstanceList.add(tousseInstance); } } @@ -2047,6 +2074,9 @@ TousseDefinition td = tousseInstance.getTousseDefinition(); if(subTdAmountMap.keySet().contains(td) && subTdAmountMap.get(td).intValue() > 0){ tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); + if(enableInstrumentLifeCycleTraceabilityManagement && DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ + removeIdCardInstanceIDs.add(tousseInstance.getIdCardInstanceID()); + } tousseInstance.setSterilizerPosition(null); tousseInstanceManager.save(tousseInstance); subTdAmountMap.put(td, (subTdAmountMap.get(td)-1)); @@ -2088,6 +2118,16 @@ reviewedBasket.setSterilizerPosition(positoin); } } + if(enableInstrumentLifeCycleTraceabilityManagement){ + Collection tousseInstances = tousseInstanceManager.getReviewedTousseInstance(reviewedBasket); + if(CollectionUtils.isNotEmpty(tousseInstances)){ + for (TousseInstance ti : tousseInstances) { + if(DatabaseUtil.isPoIdValid(ti.getIdCardInstanceID())){ + addIdCardInstanceIDs.add(ti.getIdCardInstanceID()); + } + } + } + } newReviewedBaskets.add(reviewedBasket); // 篮筐状态改为[灭菌中] reviewedBasket.getContainer().setStatus( @@ -2366,11 +2406,26 @@ if(enableScanSterilizationMonitoringPackage){ isNeedScanMonitoringTousse(sterilizationRecord); } - + if(enableInstrumentLifeCycleTraceabilityManagement){ + handleInstrumentInstance(addIdCardInstanceIDs, removeIdCardInstanceIDs, sterilizationRecord.getId()); + } return result; } - - /** + /** + * 处理器械实例 + * @param basketItemJson + */ + private void handleInstrumentInstance(Set addIdCardInstanceIDs, Set removeIdCardInstanceIDs, Long id){ + if(addIdCardInstanceIDs.size() > 0){ + List addIdCardInstanceList = idCardInstanceManager.getByHql(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.id", addIdCardInstanceIDs)); + instrumentInstanceManager.addOrRemoveInstrumentInstanceBusinessData(InstrumentInstanceManager.operateTypeEnum.ADD, SterilizationRecord.class, id, addIdCardInstanceList, null); + } + if(removeIdCardInstanceIDs.size() > 0){ + List reduceIdCardInstanceList = idCardInstanceManager.getByHql(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.id", removeIdCardInstanceIDs)); + instrumentInstanceManager.addOrRemoveInstrumentInstanceBusinessData(InstrumentInstanceManager.operateTypeEnum.REMOVE, SterilizationRecord.class, id, reduceIdCardInstanceList, null); + } + } + /** * 同步千樱脉动真空灭菌炉运行参数 * @param sterilizationRecord */ @@ -2698,7 +2753,7 @@ * @param delReviewedBasket 方法执行后从灭菌记录中删除的篮筐 * @return */ - private Map delTousseOfBasket(JSONArray delTousseJsonArr, SterilizationRecord sterilizationRecord, List delReviewedBasket){ + private Map delTousseOfBasket(JSONArray delTousseJsonArr, SterilizationRecord sterilizationRecord, List delReviewedBasket, Set removeIdCardInstanceIDs){ if(CollectionUtils.isEmpty(delTousseJsonArr)){ return null; } @@ -2766,6 +2821,14 @@ } //包实例相关灭菌信息置空 objectDao.executeUpdate(getReturnSql(canDelId)); + if(removeIdCardInstanceIDs != null){ + List tousseInstancesOfIdCardInstanceIDIsNotNull = objectDao.findByHql("select po from TousseInstance po where po.idCardInstanceID is not null and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", canDelId)); + if(CollectionUtils.isNotEmpty(tousseInstancesOfIdCardInstanceIDIsNotNull)){ + for (TousseInstance ti : tousseInstancesOfIdCardInstanceIDIsNotNull) { + removeIdCardInstanceIDs.add(ti.getIdCardInstanceID()); + } + } + } //篮筐状态回滚 if (MapUtils.isEmpty(reviewedBasketMap)) { return result; @@ -6273,7 +6336,7 @@ } List delReviewedBasket = new ArrayList(); //删除篮筐内器械包 - Map delResult = delTousseOfBasket(delTousseJsonArr,sterilizationRecord, delReviewedBasket); + Map delResult = delTousseOfBasket(delTousseJsonArr,sterilizationRecord, delReviewedBasket,null); if(delResult != null){ return delResult;//有不能删除的器械包 } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r34542 -r34629 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 34542) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 34629) @@ -121,6 +121,7 @@ import com.forgon.disinfectsystem.recyclingrecord.vo.TousseDefinitionAble; import com.forgon.disinfectsystem.recyclingrecord.vo.TousseIntoBasketService; import com.forgon.disinfectsystem.recyclingrecord.vo.UrgentTousseItem; +import com.forgon.disinfectsystem.tousse.instrumentinstance.service.InstrumentInstanceManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -232,6 +233,12 @@ private GoodsDepartShareConfigManager goodsDepartShareConfigManager; + private InstrumentInstanceManager instrumentInstanceManager; + + public void setInstrumentInstanceManager( + InstrumentInstanceManager instrumentInstanceManager) { + this.instrumentInstanceManager = instrumentInstanceManager; + } public void setGoodsDepartShareConfigManager( GoodsDepartShareConfigManager goodsDepartShareConfigManager) { this.goodsDepartShareConfigManager = goodsDepartShareConfigManager; @@ -1961,7 +1968,10 @@ logger.debug("外来器械包申请单回收完成,返回申请单id及回收成功信息,申请单ID:【" + deliveryCode + "】"); } } - + boolean enableInstrumentLifeCycleTraceabilityManagement = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLifeCycleTraceabilityManagement", false); + if(enableInstrumentLifeCycleTraceabilityManagement){ + handleInstrumentInstance(basketItemJson, record.getId()); + } // 扫包实例条码二次回收时,通过器械包实例的recyclingItemId,关联被回收的包实例和二次回收记录的回收项; // 或者删除回收记录物品时,解除被回收的包实例和二次回收记录的回收项的关联关系 setRecyclingItemIdForLastTousseInstance(record, tousseItemJson); @@ -1976,6 +1986,34 @@ // throw new RuntimeException("测试"); } /** + * 处理器械实例 + * @param basketItemJson + */ + private void handleInstrumentInstance(List basketItemJson, Long recyclingRecordId){ + if(CollectionUtils.isEmpty(basketItemJson)){ + return; + } + Set addIdCardBarcodes = new HashSet(); + Set reduceIdCardBarcodes = new HashSet(); + for (RecyclingBasketItemVo vo : basketItemJson) { + if(StringUtils.isNotBlank(vo.getIdCardBarcode()) && vo.getAmount() != null){ + if(vo.getAmount() > 0){ + addIdCardBarcodes.add(vo.getIdCardBarcode()); + }else if(vo.getAmount() < 0){ + reduceIdCardBarcodes.add(vo.getIdCardBarcode()); + } + } + } + if(addIdCardBarcodes.size() > 0){ + List addIdCardInstanceList = idCardInstanceManager.getByHql(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.barcode", addIdCardBarcodes)); + instrumentInstanceManager.addOrRemoveInstrumentInstanceBusinessData(InstrumentInstanceManager.operateTypeEnum.ADD, RecyclingRecord.class, recyclingRecordId, addIdCardInstanceList, null); + } + if(reduceIdCardBarcodes.size() > 0){ + List reduceIdCardInstanceList = idCardInstanceManager.getByHql(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.barcode", reduceIdCardBarcodes)); + instrumentInstanceManager.addOrRemoveInstrumentInstanceBusinessData(InstrumentInstanceManager.operateTypeEnum.REMOVE, RecyclingRecord.class, recyclingRecordId, reduceIdCardInstanceList, null); + } + } + /** * 一次性查询申请单里的包定义 * @param invoicePlan * @return Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r34624 -r34629 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 34624) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 34629) @@ -148,6 +148,7 @@ import com.forgon.disinfectsystem.stockmanage.cssdstock.service.TousseStockManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; import com.forgon.disinfectsystem.tousse.comboTousse.service.ComboTousseManager; +import com.forgon.disinfectsystem.tousse.instrumentinstance.service.InstrumentInstanceManager; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -275,6 +276,12 @@ private ClassifiedItemManager classifiedItemManager; private CleanMethodManager cleanMethodManager; + private InstrumentInstanceManager instrumentInstanceManager; + + public void setInstrumentInstanceManager( + InstrumentInstanceManager instrumentInstanceManager) { + this.instrumentInstanceManager = instrumentInstanceManager; + } public void setCleanMethodManager(CleanMethodManager cleanMethodManager) { this.cleanMethodManager = cleanMethodManager; } @@ -4494,7 +4501,7 @@ String msg = "保存成功"; String washBasket = ""; - + boolean enableInstrumentLifeCycleTraceabilityManagement = CssdUtils.getSystemSetConfigByNameBool("enableInstrumentLifeCycleTraceabilityManagement", false); JSONObject json = new JSONObject(); DisposableGoodsServiceContext disposableGoodsServiceContext = new DisposableGoodsServiceContext(); Map> packingRecordToDisposableGoodsOutAmount = new HashMap>(); @@ -4973,6 +4980,11 @@ if(packingRecord != null){ packignRecordId = packingRecord.getId(); packingRecordIdList.add(packignRecordId); + if(enableInstrumentLifeCycleTraceabilityManagement && idCardInstance != null){ + List addIdCardInstanceList = new ArrayList(); + addIdCardInstanceList.add(idCardInstance); + instrumentInstanceManager.addOrRemoveInstrumentInstanceBusinessData(InstrumentInstanceManager.operateTypeEnum.ADD, PackingRecord.class, packignRecordId, addIdCardInstanceList, null); + } } // 汇总装配记录对应的一次性物品扣减信息