Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r40487 -r40492 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 40487) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 40492) @@ -4495,7 +4495,7 @@ }*/ if(useNewSecondSupplyRoomAutoInvoice){ try{ - execAutoInvoiceByInvokingInvoiceManagerMethod(deptName, deptCode, defaultWareHouse, invoiceItemArray); + execAutoInvoiceByInvokingInvoiceManagerMethod(orgUnitCoding,deptName, deptCode, defaultWareHouse, invoiceItemArray); }catch(SystemException e){ e.printStackTrace(); throw new InvoiceException(e.getMessage()); @@ -4551,12 +4551,13 @@ /** * 通过调用发货manager方法的方式执行发货业务(先留在这里暂时不用,以后如果用得上再放开) + * @param orgUnitCoding 供应室编码 * @param deptName * @param deptCode * @param defaultWareHouse * @param invoiceItemArray */ - private void execAutoInvoiceByInvokingInvoiceManagerMethod(String deptName, + private void execAutoInvoiceByInvokingInvoiceManagerMethod(String orgUnitCoding,String deptName, String deptCode,WareHouse defaultWareHouse,JSONArray invoiceItemArray){ //调用发货的bean的方式 JSONObject invoiceParams = new JSONObject(); @@ -4571,6 +4572,7 @@ invoiceParams.put("invoiceRemark", "二级供应室自动发货"); //发货的明细 invoiceParams.put("invoiceItems", invoiceItemArray); + invoiceOptimizeManager.setCurrentSupplyRoomOrgUnitCode(orgUnitCoding); invoiceOptimizeManager.submitInvoice(invoiceParams); } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r40302 -r40492 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 40302) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 40492) @@ -483,4 +483,10 @@ */ public Map getBarcodeDisposableGoodsBatchMapByDiposableGoodsItem(List diposableGoodsItemList); + /** + * 设置发货的当前供应室编码 + * @param supplyRoomOrgUnitCode + */ + public void setCurrentSupplyRoomOrgUnitCode(String currentSupplyRoomOrgUnitCode); + } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r40351 -r40492 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 40351) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 40492) @@ -30,7 +30,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.hibernate.Session; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import com.forgon.Constants; @@ -204,6 +203,7 @@ */ // 是否启用一次性物品高值耗材功能,默认为否 boolean enableExpensiveDisposableGoods = CssdUtils.getSystemSetConfigByNameBool("enableExpensiveDisposableGoods"); + objectDao.clear(); //科室供应室配置:系统参数 SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); @@ -338,7 +338,7 @@ } } } - + //根据条码集合取出条码对象 List barcodeDeviceList = barcodeManager.getCollectionForUpdate("barcode", barcodeList); @@ -2699,7 +2699,7 @@ Date currentDateOnly = cal.getTime(); //包实例产生的供应室的编码 - String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",AcegiHelper.getCurrentOrgUnitCode()); + String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",getCurrentSupplyRoomOrgUnitCode()); String queryTousseInstanceCondition = String.format("where %s and %s and %s and (validUntil is null or %s and %s) and %s", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tdIdToSendAmountMap.keySet()), SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.invoicePlanID", invoicePlanIdList), @@ -3104,7 +3104,7 @@ //是否按回收时间过滤申请单(NFYY-55) boolean willFilterInvoicePlanByRecyclingTime = InvoiceUtils.willFilterInvoicePlanByRecyclingTime(applyDate); //各器械包的借物基数-zswy-233 - Map availableCardinalNumMap = getAvailableCardinalNumMap(tdIdListOfTiList, AcegiHelper.getCurrentOrgUnitCode()); + Map availableCardinalNumMap = getAvailableCardinalNumMap(tdIdListOfTiList, getCurrentSupplyRoomOrgUnitCode()); //给借物单发放有配置了借物基数的器械包,超出可借基数部分的包实例及对应数量的情况 Map overBorrowCardinalNumMap = new HashMap(); for(TousseItem tousseItem : tousseItemList) { @@ -3660,7 +3660,7 @@ Date currentDateOnly = cal.getTime(); //包实例产生的供应室的编码 - String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",AcegiHelper.getCurrentOrgUnitCode()); + String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",getCurrentSupplyRoomOrgUnitCode()); String queryTousseInstanceCondition = String.format("where %s and %s and (validUntil is null or %s and %s) and %s and %s ", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tdIdToSendAmountMap.keySet()), @@ -4027,7 +4027,7 @@ Date currentDateOnly = cal.getTime(); //包实例产生的供应室的编码 - String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",AcegiHelper.getCurrentOrgUnitCode()); + String orgUnitCodingCondition = String.format("orgUnitCoding='%s'",getCurrentSupplyRoomOrgUnitCode()); String queryTousseInstanceCondition = String.format("where %s and %s and (validUntil is null or %s and %s) and %s and %s", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.ancestorID", @@ -5033,7 +5033,7 @@ * 1.6打印状态:受hideUnprintedDisposableGoodsInvoicePlan参数影响,如果单类型是一次性物品申请,则打印状态不为已打印的不显示 * 1.7.借物单审核状态(只能为null或不为未审核,前提是有包含借物单的话) */ - String handleDepartCodingCondition = String.format("invoicePlan.handleDepartCoding='%s'",AcegiHelper.getCurrentOrgUnitCode()); + String handleDepartCodingCondition = String.format("invoicePlan.handleDepartCoding='%s'",getCurrentSupplyRoomOrgUnitCode()); String departCodingCondition = String.format("invoicePlan.%s='%s'",InvoiceUtils.getInvoiceGroupByConfig(),departCoding); //单类型过滤条件 String typeCondition = "1=1"; @@ -5287,7 +5287,7 @@ //一个申请单生成一个发货单 String[] invoiceSerialNumberArray = serialNumManager.getSerialNumberStrs(SerialNum.TYPE_INVOICE, size); - String orgUnitCoding = AcegiHelper.getCurrentOrgUnitCode(); + String orgUnitCoding = getCurrentSupplyRoomOrgUnitCode(); //批量插入发货单 jdbcTemplate.batchUpdate(insertIntoInvoiceBatchSql, new BatchPreparedStatementSetter() { @@ -7310,7 +7310,7 @@ //供应室发货给自己时扣减物品的库存,默认值为true(值为true:则供应室发货给自己时,要扣减该发货物品的库存 ;值为false或者没有配置:则供应室发货给自己时,该物品的库存保持不变) boolean decreaseGoodsStorageWhenCSSDSendToItself = CssdUtils.getSystemSetConfigByNameBool("decreaseGoodsStorageWhenCSSDSendToItself"); //是否需要增加目标仓库(即收货科室的默认仓库)库存(仅一次性物品):(ASSFDZLYY-25 供应室填申请单申领一次性物品发货后,供应室库存没有扣减一次性物品) - boolean needIncreaseTargetOrgUnitDgStock = (decreaseGoodsStorageWhenCSSDSendToItself && StringUtils.equals(AcegiHelper.getCurrentOrgUnitCode(), params.optString("departCode"))) ? false : true; + boolean needIncreaseTargetOrgUnitDgStock = (decreaseGoodsStorageWhenCSSDSendToItself && StringUtils.equals(getCurrentSupplyRoomOrgUnitCode(), params.optString("departCode"))) ? false : true; objectDao.clear(); List targetStockList = objectDao.getBySql_ForUpdate2(DisposableGoodsStock.class.getSimpleName(), @@ -8997,7 +8997,7 @@ //发货单序列号 String[] serialNumbers = serialNumManager.getSerialNumberStrs(SerialNum.TYPE_INVOICE, idToComboTousseInstanceMap.size()); int index = 0; - String orgunitCoding = AcegiHelper.getCurrentOrgUnitCode(); + String orgunitCoding = getCurrentSupplyRoomOrgUnitCode(); OrgUnit orgunit = orgUnitManager.getByCode(departCoding); WareHouse wareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(departCoding); OrgUnit settleAccountsDepartment = orgUnitManager.getSettleAccountsDepartment(departCoding); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r40408 -r40492 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 40408) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 40492) @@ -299,7 +299,13 @@ @Autowired protected RunWithTransNewManager runWithTransNewManager; - + + /** + * 当前供应室编码(用于发货时,查询待发货的申请单时按处理科室为该供应室编码进行申请单的过滤-兼容定时或自动完成灭菌时二级供应室自动发货的场景) + * 因为定时或自动完成灭菌时触发二级供应室自动发货时,此时并没有当前登录用户,导致查不出待发货的申请单 + */ + protected String currentSupplyRoomOrgUnitCode; + public void setUserManager(UserManager userManager) { this.userManager = userManager; } @@ -417,6 +423,18 @@ } @Override + public void setCurrentSupplyRoomOrgUnitCode(String currentSupplyRoomOrgUnitCode) { + this.currentSupplyRoomOrgUnitCode = currentSupplyRoomOrgUnitCode; + } + + protected String getCurrentSupplyRoomOrgUnitCode() { + if(StringUtils.isBlank(currentSupplyRoomOrgUnitCode)){ + return AcegiHelper.getCurrentOrgUnitCode(); + } + return currentSupplyRoomOrgUnitCode; + } + + @Override public void saveInvoice(Invoice invoice) { invoice.setSpelling(GB2Alpha.string2Alpha(invoice.getDepart())); invoice.setWbCode(GB2WB.getWBCode(invoice.getDepart())); @@ -9316,6 +9334,7 @@ } } if(CollectionUtils.isNotEmpty(barcodeList)){ + objectDao.clear(); List barcodeDeviceList = barcodeManager.getCollectionForUpdate("barcode", barcodeList); if(CollectionUtils.isNotEmpty(barcodeDeviceList)){ for(BarcodeDevice barcodeDevice : barcodeDeviceList){