Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java =================================================================== diff -u -r39566 -r40649 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java (.../LaoKenThirdPartyTousseReceiveRecordManagerImpl.java) (revision 39566) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/LaoKenThirdPartyTousseReceiveRecordManagerImpl.java (.../LaoKenThirdPartyTousseReceiveRecordManagerImpl.java) (revision 40649) @@ -367,43 +367,54 @@ tousseInstance.setLastTousseInstanceId(lastTousseInstance.getId()); } } - int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseInstance.getTousseDefinition()); - Long useAmount = idCardInstance.getUseAmount(); - if (useAmount != null){ - /*if(packingTask != null + //标识牌使用次数计算方式:等于0时,装配后标识牌的使用次数加1;等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + if(usageCountingMethodOfIdCard == 0 || tousseInstance.isUsed()){ + int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseInstance.getTousseDefinition()); + Long useAmount = idCardInstance.getUseAmount(); + if (useAmount != null){ + /*if(packingTask != null && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ //质量监测重新装配标识牌使用次数不需要增加 }else{*/ useAmount += 1; - //} - } else { - useAmount = 1L; - } - // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 - idCardInstance.setUseAmount(useAmount); - Long useAmountOfDef = idCardDefinition.getUseAmount(); - if (useAmountOfDef != null){ - /*if(packingTask != null + //} + } else { + useAmount = 1L; + } + // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 + idCardInstance.setUseAmount(useAmount); + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if (useAmountOfDef != null){ + /*if(packingTask != null && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ //质量监测重新装配标识牌使用次数不需要增加 }else{*/ useAmountOfDef += 1; - //} - } - else{ - useAmountOfDef = 1L; - } - idCardDefinition.setUseAmount(useAmountOfDef); - tousseInstance.setUseAmount(useAmountOfDef); - // 判断是否超出自动废弃计数 - if(autoDiscardCount > 0){ - if(useAmount >= autoDiscardCount){ - idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); - // 废弃当前的之后新建一个 + //} + } + else{ + useAmountOfDef = 1L; + } + idCardDefinition.setUseAmount(useAmountOfDef); + tousseInstance.setUseAmount(useAmountOfDef); + // 判断是否超出自动废弃计数 + if(autoDiscardCount > 0){ + if(useAmount >= autoDiscardCount){ + idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); + // 废弃当前的之后新建一个 // IDCardInstance newIdCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + } } + }else{ + //装配后不再增加标识牌的已使用次数,在器械包实例中的字段“使用次数”记录的值为截止到当前该标识牌的已使用次数SZSDSRMYY-186 + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if(useAmountOfDef == null){ + useAmountOfDef = 0L; + } + tousseInstance.setUseAmount(useAmountOfDef); } objectDao.saveOrUpdate(tousseInstance); // 中大附一新功能,如果状态为可以重新使用,改为使用中 Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r40608 -r40649 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 40608) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 40649) @@ -6283,43 +6283,55 @@ tousseInstance.setLastTousseInstanceId(lastTousseInstance.getId()); } } - int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseInstance.getTousseDefinition()); - Long useAmount = idCardInstance.getUseAmount(); - if (useAmount != null){ - /*if(packingTask != null + //标识牌使用次数计算方式:等于0时,装配后标识牌的使用次数加1;等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + if(usageCountingMethodOfIdCard == 0){ + + int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseInstance.getTousseDefinition()); + Long useAmount = idCardInstance.getUseAmount(); + if (useAmount != null){ + /*if(packingTask != null && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ //质量监测重新装配标识牌使用次数不需要增加 }else{*/ useAmount += 1; - //} - } else { - useAmount = 1L; - } - // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 - idCardInstance.setUseAmount(useAmount); - Long useAmountOfDef = idCardDefinition.getUseAmount(); - if (useAmountOfDef != null){ - /*if(packingTask != null + //} + } else { + useAmount = 1L; + } + // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 + idCardInstance.setUseAmount(useAmount); + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if (useAmountOfDef != null){ + /*if(packingTask != null && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ //质量监测重新装配标识牌使用次数不需要增加 }else{*/ useAmountOfDef += 1; - //} - } - else{ - useAmountOfDef = 1L; - } - idCardDefinition.setUseAmount(useAmountOfDef); - tousseInstance.setUseAmount(useAmountOfDef); - // 判断是否超出自动废弃计数 - if(autoDiscardCount > 0){ - if(useAmount >= autoDiscardCount){ - idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); - // 废弃当前的之后新建一个 -// IDCardInstance newIdCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + //} } + else{ + useAmountOfDef = 1L; + } + idCardDefinition.setUseAmount(useAmountOfDef); + tousseInstance.setUseAmount(useAmountOfDef); + // 判断是否超出自动废弃计数 + if(autoDiscardCount > 0){ + if(useAmount >= autoDiscardCount){ + idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); + // 废弃当前的之后新建一个 + // IDCardInstance newIdCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + } + } + }else{ + //装配后不再增加标识牌的已使用次数,在器械包实例中的字段“使用次数”记录的值为截止到当前该标识牌的已使用次数SZSDSRMYY-186 + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if(useAmountOfDef == null){ + useAmountOfDef = 0L; + } + tousseInstance.setUseAmount(useAmountOfDef); } objectDao.saveOrUpdate(tousseInstance); // 中大附一新功能,如果状态为可以重新使用,改为使用中 Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r40596 -r40649 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40596) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40649) @@ -6934,44 +6934,56 @@ tousseInstance.setLastTousseInstanceId(lastTousseInstance.getId()); } } - int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseDefinition); - Long useAmount = idCardInstance.getUseAmount(); - if (useAmount != null){ - if(packingTask != null - && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) - || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ - //质量监测重新装配标识牌使用次数不需要增加 - }else{ - useAmount += 1; + + //标识牌使用次数计算方式:等于0时,装配后标识牌的使用次数加1;等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + if(usageCountingMethodOfIdCard == 0){ + int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseDefinition); + Long useAmount = idCardInstance.getUseAmount(); + if (useAmount != null){ + if(packingTask != null + && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) + || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ + //质量监测重新装配标识牌使用次数不需要增加 + }else{ + useAmount += 1; + } } - } - else{ - useAmount = 1L; - } - // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 - idCardInstance.setUseAmount(useAmount); - Long useAmountOfDef = idCardDefinition.getUseAmount(); - if (useAmountOfDef != null){ - if(packingTask != null - && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) - || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ - //质量监测重新装配标识牌使用次数不需要增加 - }else{ - useAmountOfDef += 1; + else{ + useAmount = 1L; } - } - else{ - useAmountOfDef = 1L; - } - idCardDefinition.setUseAmount(useAmountOfDef); - tousseInstance.setUseAmount(useAmountOfDef); - // 判断是否超出自动废弃计数 - if(autoDiscardCount > 0){ - if(useAmount >= autoDiscardCount){ - idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); - // 废弃当前的之后新建一个 + // 此处已做并发控制,可以直接增加次数,不用汇总所有标识牌实例 + idCardInstance.setUseAmount(useAmount); + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if (useAmountOfDef != null){ + if(packingTask != null + && (PackingTask.TASK_QUALITY_MONITOR.equals(packingTask.getTaskType()) + || PackingTask.TASK_RETURNGOODS.equals(packingTask.getTaskType()))){ + //质量监测重新装配标识牌使用次数不需要增加 + }else{ + useAmountOfDef += 1; + } + } + else{ + useAmountOfDef = 1L; + } + idCardDefinition.setUseAmount(useAmountOfDef); + tousseInstance.setUseAmount(useAmountOfDef); + // 判断是否超出自动废弃计数 + if(autoDiscardCount > 0){ + if(useAmount >= autoDiscardCount){ + idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); + // 废弃当前的之后新建一个 // IDCardInstance newIdCardInstance = idCardInstanceManager.newIdCardInstance(idCardDefinition, tousseDefinition, IDCardInstance.STATUS_USING,false, true); + } } + }else{ + //装配后不再增加标识牌的已使用次数,在器械包实例中的字段“使用次数”记录的值为截止到当前该标识牌的已使用次数SZSDSRMYY-186 + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if(useAmountOfDef == null){ + useAmountOfDef = 0L; + } + tousseInstance.setUseAmount(useAmountOfDef); } objectDao.saveOrUpdate(tousseInstance); // 中大附一新功能,如果状态为可以重新使用,改为使用中 Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r40592 -r40649 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 40592) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 40649) @@ -140,6 +140,7 @@ import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsInstanceManager; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsStockManager; import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; +import com.forgon.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.mq.dao.gdsy.WebSphereMQDao; import com.forgon.disinfectsystem.packing.service.PackingManager; @@ -265,7 +266,13 @@ private UseRecordUrgentReservationManager useRecordUrgentReservationManager; private UrgentReservationGroupManager urgentReservationGroupManager; + + private IDCardDefinitionManager idCardDefinitionManager; + public void setIdCardDefinitionManager(IDCardDefinitionManager idCardDefinitionManager) { + this.idCardDefinitionManager = idCardDefinitionManager; + } + public void setUrgentReservationGroupManager(UrgentReservationGroupManager urgentReservationGroupManager) { this.urgentReservationGroupManager = urgentReservationGroupManager; } @@ -3296,6 +3303,8 @@ } if(DatabaseUtil.isPoIdValid(tousseInstance.getIdCardInstanceID())){ iDCardInstaceIdList.add(tousseInstance.getIdCardInstanceID()); + //配置项usageCountingMethodOfIdCard等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + updateIdCardUseAmount(tousseInstance); } } @@ -3368,6 +3377,56 @@ } /** + * 配置项usageCountingMethodOfIdCard等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + * @param tousseInstance 器械包实例 + */ + private void updateIdCardUseAmount(TousseInstance tousseInstance) { + Long idCardInstanceID = tousseInstance.getIdCardInstanceID(); + if(!DatabaseUtil.isPoIdValid(idCardInstanceID)){ + return; + } + //标识牌使用次数计算方式:等于0时,装配后标识牌的使用次数加1;等于1时,录入使用记录并保存后标识牌的使用次数再增加;SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + if(usageCountingMethodOfIdCard == 0){ + return; + } + IDCardInstance idCardInstance = idCardInstanceManager.getIDCardInstanceById_ForUpdate(idCardInstanceID+""); + if(idCardInstance == null){ + throw new RuntimeException("标识牌已被删除!"); + } + IDCardDefinition idCardDefinition = idCardDefinitionManager.getForUpdate(idCardInstance.getIdCardDefinitionID()); + if(idCardDefinition == null){ + throw new RuntimeException("标识牌定义已被删除!"); + } + TousseDefinition tousseDefinition = this.getTousseInstanceAncestorTD(tousseInstance); + int autoDiscardCount = TousseDefinitionUtils.getAutoDiscardCount(tousseDefinition ); + Long useAmount = idCardInstance.getUseAmount(); + if (useAmount != null){ + useAmount += 1; + }else{ + useAmount = 1L; + } + idCardInstance.setUseAmount(useAmount); + Long useAmountOfDef = idCardDefinition.getUseAmount(); + if (useAmountOfDef != null){ + useAmountOfDef += 1; + }else{ + useAmountOfDef = 1L; + } + idCardDefinition.setUseAmount(useAmountOfDef); + tousseInstance.setUseAmount(useAmountOfDef); + String logDescription = String.format("标识牌实例%s第%s次使用,使用记录id=%s", idCardInstance.getBarcode(), useAmount, tousseInstance.getUseRecord_id()); + // 判断是否超出自动废弃计数 + if(autoDiscardCount > 0){ + if(useAmount >= autoDiscardCount){ + idCardInstance.setStatus(IDCardDefinition.STATUS_DISCARDED); + logDescription += ",达到最大使用次数,自动废弃标识牌"; + } + } + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_USERECORD, Log.TYPE_ADD, logDescription); + } + + /** * 当外来器械包登记了病人使用记录之后,那么申请单包状态变为已使用HBTSGRYY-11 * @param tousseInstanceList 器械包实例 */ @@ -10331,7 +10390,7 @@ // obj.put("idCardUseAmount", idCardDefinition.getUseAmount()); // } // } - Long useAmount = ti.getUseAmount(); + Long useAmount = getTousseInstanceUseAmount(ti); obj.put("idCardUseAmount", useAmount); boolean disableIdCard = CssdUtils.getSystemSetConfigByNameBool("disableIdCard", true); if(!disableIdCard && td != null && !Constants.STR_YES.equals(td.getIsDisableIDCard())){//禁用标识牌,就没必要提示 @@ -10638,6 +10697,39 @@ } /** + * 查询器械包的使用次数 + * @param ti 器械包实例 + * @return 器械包实例绑定标识牌的使用次数 + */ + private Long getTousseInstanceUseAmount(TousseInstance ti) { + Long useAmount = ti.getUseAmount(); + if(useAmount == null){ + useAmount = 0L; + } + //标识牌使用次数更改为录入使用记录后增加次数SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + //usageCountingMethodOfIdCard=1时,才去查询标识牌定义的使用次数;否则,包实例上的使用次数就为标识牌定义的使用次数; + if(usageCountingMethodOfIdCard == 1 && DatabaseUtil.isPoIdValid(ti.getIdCardInstanceID())){ + IDCardInstance theIDCardInstance = idCardInstanceManager.get(ti.getIdCardInstanceID()); + if(theIDCardInstance == null){ + throw new RuntimeException(String.format("id=%s的标识牌实例已经被删除!", ti.getIdCardInstanceID())); + } + IDCardDefinition theIDCardDefinition = idCardDefinitionManager.get(theIDCardInstance.getIdCardDefinitionID()); + if(theIDCardDefinition == null){ + throw new RuntimeException(String.format("id=%s的标识牌定义已经被删除!", theIDCardInstance.getIdCardDefinitionID())); + } + //取标识牌定义上的使用次数 + useAmount = theIDCardDefinition.getUseAmount(); + if(useAmount == null){ + useAmount = 0L; + } + useAmount++; + } + + return useAmount; + } + + /** * 获取器械包实例的祖先包定义 * @param ti * @return @@ -13104,6 +13196,21 @@ //没有配置科室物品共享,且包实例位置不在当前科室 throw new RuntimeException(ti.getTousseDefinitionName() + ti.getBarcode() + "所属科室为" + lastLocationForDisplayOfTi + ",不能录入使用记录!"); } + + Long idCardInstanceID = ti.getIdCardInstanceID(); + if(DatabaseUtil.isPoIdValid(idCardInstanceID)){ + //标识牌使用次数计算方式:等于0时,装配后标识牌的使用次数加1;等于1时,录入使用记录并保存后标识牌的使用次数再增加;标识牌实例被废弃后,不允许录入使用记录;SZSDSRMYY-186 + int usageCountingMethodOfIdCard = ConfigUtils.getSystemSetConfigByNameInt("usageCountingMethodOfIdCard", 0); + if(usageCountingMethodOfIdCard == 1){ + IDCardInstance theIDCardInstance = idCardInstanceManager.get(idCardInstanceID); + if(theIDCardInstance == null){ + throw new RuntimeException(String.format("id=%s的标识牌实例已经被删除!", idCardInstanceID)); + } + if(theIDCardInstance.isDiscarded()){ + throw new RuntimeException(String.format("标识牌(%s)已被废弃,无法录入使用记录。", theIDCardInstance.getBarcode(), theIDCardInstance.getStatus())); + } + } + } } @Override