Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r36140 -r36175 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 36140) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 36175) @@ -54,6 +54,7 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.model.SetCode_Barcode; import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.barcode.util.BarcodeUtils; @@ -8612,6 +8613,35 @@ result.add("data", data); result.add("tips", tips); return result; + }else if (StringUtils.equals(((BarcodeDevice)barcodeDevice).getType(),BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE)) { + //包实例集合码 + if(Invoice.TYPE_OPERATION_RESERVATION.equals(invoiceType)){ + return buildErrorMsgJsonResult("手术预约发货暂时不支持" + BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE); + } + if(Invoice.TYPE_CUSTOM.equals(invoiceType)){ + return buildErrorMsgJsonResult("自定义发货暂时不支持" + BarcodeDevice.BARCODE_TYPE_TOUSSEINSTANCESETCODE); + } + JsonObject result = new JsonObject(); + //根据器械包集合码查询对应的包实例集合 + List tousseInstanceList = tousseInstanceManager.getTousseInstancesBySetCode(barcodeStr); + filterTousseInstanceByInvoiceType(invoiceType, tousseInstanceList); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + //只保留状态为已灭菌及已消毒的包实例、并按所属仓库 + filterTousseInstanceListOfSetCode(tousseInstanceList, params.get("extraParam").getAsJsonObject().get("sourceWarehouseId").getAsLong()); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + JsonArray datasJSONArray = buildJSONArrayForTousseInstances(tousseInstanceList,departCodeOfInvoicePlan); + result.add("data", datasJSONArray); + result.addProperty("success", true); + result.addProperty("barcode", barcode); + result.addProperty("type", "tousseInstanceSetCode"); + result.add("tips", tips); + return result; + }else{ + return buildErrorMsgJsonResult("该集合码中没有符合条件的器械包,无法加载"); + } + }else{ + return buildErrorMsgJsonResult("该集合码中没有符合条件的器械包,无法加载"); + } }else { //SSTS-287 自定义发货,在“扫描条码”筐中扫描科室条码时,进行提示 if(barcodeDevice instanceof BarcodeDevice){ @@ -8629,6 +8659,25 @@ } /** + * 过滤掉器械包集合码中的器械包实例,保留符合本次发货条件(所属仓库需要一致、状态必须为已灭菌或已消毒)的器械包实例集合并返回 + * @param tousseInstanceList 包实例集合 + * @param sourceWarehouseId 源仓库id + * @return + */ + private List filterTousseInstanceListOfSetCode(List tousseInstanceList,Long sourceWarehouseId){ + return tousseInstanceList.stream().filter(ti -> { + boolean statusCanInvoice = StringUtils.equals(ti.getStatus(), TousseInstance.STATUS_STERILED) || StringUtils.equals(ti.getStatus(), TousseInstance.STATUS_DISINFECTED); + if(statusCanInvoice){ + Long warehouseIdOfTousseInstance = ti.getWareHouseId(); + if(DatabaseUtil.isPoIdValid(warehouseIdOfTousseInstance) && Objects.equals(warehouseIdOfTousseInstance, sourceWarehouseId)){ + return true; + } + } + return false; + }).collect(Collectors.toList()); + } + + /** * 校验扫描及发货提交的包实例条码是否符合是否追溯与固定与唯一条码规则(大原则:追溯->唯一条码、不追溯->固定条码规则) * @param tousseInstance */