Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r32613 -r32636 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 32613) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 32636) @@ -1130,7 +1130,8 @@ //3.2根据包定义查出该子包在其它使用记录已经录入的总数量 String countSql = "select sum(usedAmount) from "+ SubComboTousseUseRecord.class.getSimpleName() + - " where subTousseDefinitionId=" + subComboTousseUseRecord.getSubTousseDefinitionId(); + " where comboTousseInstanceId=" + subComboTousseUseRecord.getComboTousseInstanceId() + + " and subTousseDefinitionId = " + subComboTousseUseRecord.getSubTousseDefinitionId(); if(DatabaseUtil.isPoIdValid(useRecord.getId())){ countSql += " and useRecordId <> " + subComboTousseUseRecord.getUseRecordId(); } @@ -7597,9 +7598,18 @@ return obj; } //检测器械包状态是否为已发货、已签收 - if(!TousseInstance.STATUS_SHIPPED.equals(ti.getStatus()) && !TousseInstance.STATUS_SIGNED.equals(ti.getStatus())){ - obj.put(JSONUtil.JSON_KEY_MESSAGE, "该器械包状态为" + ti.getStatus() + ",不能录入使用记录!"); - return obj; + if(ti.isComboTousse()){ + // 支持一个聚合包可以扫描到多个使用记录上,录入的次数不能大于聚合包内各种包的数量的总和。 + if(!TousseInstance.STATUS_SHIPPED.equals(ti.getStatus()) && !TousseInstance.STATUS_SIGNED.equals(ti.getStatus()) + && !TousseInstance.STATUS_USED.equals(ti.getStatus())){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "该器械包状态为" + ti.getStatus() + ",不能录入使用记录!"); + return obj; + } + }else{ + if(!TousseInstance.STATUS_SHIPPED.equals(ti.getStatus()) && !TousseInstance.STATUS_SIGNED.equals(ti.getStatus())){ + obj.put(JSONUtil.JSON_KEY_MESSAGE, "该器械包状态为" + ti.getStatus() + ",不能录入使用记录!"); + return obj; + } } //包定义设置了签收后才可以录使用记录时,如果状态不为已签收进行提示 if(!TousseInstance.STATUS_SIGNED.equals(ti.getStatus()) && Constants.STR_YES.equals(ancestor.getRegistUseRecordAfterSigned())){ Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java =================================================================== diff -u -r31771 -r32636 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java (.../UseRecordUtil.java) (revision 31771) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java (.../UseRecordUtil.java) (revision 32636) @@ -130,13 +130,15 @@ throw new RuntimeException("器械包参数错误!"); } + // 聚合包小包上记的打包器械包实例的ID + Long comboTousseInstanceId = JSONUtil.optLong(obj,"comboTousseInstanceId",null); //可以是器械包实例id,一次性物品使用明细id或高值耗材实例id Long itemId = JSONUtil.optLong(obj,"id",null); //根据条码判断是否为器械包实例 String barcode = JSONUtil.optString(obj,"barcode",null); //为满足深圳南山人民医院早期的2017年8月接口文档 - if(StringUtils.isBlank(barcode) && !DatabaseUtil.isPoIdValid(itemId)){ - throw new RuntimeException("id与barcode参数不能都为空!"); + if(StringUtils.isBlank(barcode) && !DatabaseUtil.isPoIdValid(itemId) && !DatabaseUtil.isPoIdValid(comboTousseInstanceId)){ + throw new RuntimeException("id、barcode、comboTousseInstanceId参数不能都为空!"); } Object bd = null; //为满足深圳南山人民医院早期的2017年8月接口文档增加msg的属性返回 @@ -152,7 +154,7 @@ //为满足深圳南山人民医院早期的2017年8月接口文档增加msg的属性返回(如果barcode为空,则将id作为器械包实例id查询器械包信息) bd = tousseInstanceManager.get(itemId); } - if(bd == null && barcodeDevice == null){ + if(bd == null && barcodeDevice == null && !DatabaseUtil.isPoIdValid(comboTousseInstanceId)){ throw new RuntimeException("未找到条码数据!"); } @@ -161,7 +163,23 @@ tousseInstance = (TousseInstance)bd; } - if(tousseInstance != null){ + if(DatabaseUtil.isPoIdValid(comboTousseInstanceId)){ + //聚合包子包 + Integer amount = JSONUtil.optInteger(obj, "amount" , null); + Integer usedAmount = JSONUtil.optInteger(obj ,"usedAmount" , null); + //Long comboTousseInstanceId = JSONUtil.optLong(obj ,"comboTousseInstanceId" , null); + Long subTousseDefinitionId = JSONUtil.optLong(obj ,"subTousseDefinitionId" , null); + String tousseDefinitionName = JSONUtil.optString(obj ,"tousseDefinitionName" , null); + //内存对象,非持久化对象 + SubComboTousseUseRecord subComboTousseUseRecordInMemory = new SubComboTousseUseRecord(); + subComboTousseUseRecordInMemory.setComboTousseInstanceId(comboTousseInstanceId); + subComboTousseUseRecordInMemory.setSubTousseDefinitionId(subTousseDefinitionId); + subComboTousseUseRecordInMemory.setIncludeAmountByComboTousse(amount); + subComboTousseUseRecordInMemory.setUsedAmount(usedAmount); + subComboTousseUseRecordInMemory.setTousseName(tousseDefinitionName); + subComboTousseUseRecordInMemory.setUseRecordId(useRecord.getId()); + subComboTousseUseRecordList.add(subComboTousseUseRecordInMemory); + }else if(tousseInstance != null){ tousseInstanceUseRecordSortNumber++; //包实例id(非聚合包内的子包id都有值,如果没有值一般为聚合包内的子包) if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ @@ -270,7 +288,7 @@ }else{ Integer amount = JSONUtil.optInteger(obj, "amount" , null); Integer usedAmount = JSONUtil.optInteger(obj ,"usedAmount" , null); - Long comboTousseInstanceId = JSONUtil.optLong(obj ,"comboTousseInstanceId" , null); + //Long comboTousseInstanceId = JSONUtil.optLong(obj ,"comboTousseInstanceId" , null); Long subTousseDefinitionId = JSONUtil.optLong(obj ,"subTousseDefinitionId" , null); String tousseDefinitionName = JSONUtil.optString(obj ,"tousseDefinitionName" , null); //内存对象,非持久化对象