From 85cbeedbf3e6c7a46afb53090d0ed44a52883f46 Mon Sep 17 00:00:00 2001 From: cy <1664593601@qq.com> Date: 星期四, 02 十一月 2023 19:19:32 +0800 Subject: [PATCH] feat: 调拨调整 --- consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 108 insertions(+), 8 deletions(-) diff --git a/consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java b/consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java index bc83a71..d3843d3 100644 --- a/consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java +++ b/consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java @@ -1,31 +1,56 @@ package com.consum.base.service; +import com.consum.base.core.util.LockManage; +import com.consum.model.po.LWarehouseFlow; import com.consum.model.po.LWhFormTransfer; +import com.consum.model.po.LWhGoodsRecord; +import com.consum.model.po.LWhGoodsRecordDetails; import com.iplatform.model.po.S_user_core; +import com.walker.infrastructure.utils.CollectionUtils; import com.walker.infrastructure.utils.DateUtils; +import com.walker.infrastructure.utils.NumberGenerator; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @ClassName LWhFormTransferCoreService - * @Author cy + * @Date 2023/10/26 * @Description * @Version 1.0 **/ @Service @Slf4j +@Transactional(rollbackFor = Exception.class) public class LWhFormTransferCoreService { @Resource private LWhFormTransferServiceImpl lWhFormTransferService; @Resource private LWhFormOutputCoreService lWhFormOutputCoreService; + @Resource + private GoodsBaseServiceImpl goodsBaseService; + @Resource + private LWhGoodsRecordService lWhGoodsRecordService; + @Resource + private LWhGoodsService lWhGoodsService; + @Resource + private LGoodsWhRecordServiceImpl lGoodsWhRecordService; + @Resource + private LWarehouseFlowService lWarehouseFlowService; + @Resource + private LWarehouseFlowService LWhGoodsRecordDetailsService; /** * 鎵ц璋冩嫧鍑哄簱鎿嶄綔 + * * @param whFormTransferId 璋冩嫧鍗昳d */ public void doTransferOutPut(Long whFormTransferId, S_user_core currentUser) { @@ -50,7 +75,7 @@ return; } // 鍑哄簱鍗� 鍑哄簱锛岃繑鍥� 鍑哄簱鍗曟祦姘碔d - Long outFormByTransId = lWhFormOutputCoreService.outFormByTransId(whFormTransferId, currentUser, dealTime); + Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, currentUser, dealTime); // 鏇存柊璋冩嫧鍗� lWhFormTransfer = new LWhFormTransfer(whFormTransferId); @@ -59,8 +84,8 @@ lWhFormTransfer.setOutOperatorId(userId); lWhFormTransfer.setOutOperatorName(nickName); lWhFormTransfer.setOutputTime(dealTime); + lWhFormTransfer.setOutWarehouseFlowId(lWarehouseFlowId); lWhFormTransferService.update(lWhFormTransfer); - log.info("璋冩嫧鍗曪細{} 鍑哄簱瀹屾垚", whFormTransferId); return; @@ -81,23 +106,98 @@ } Long userId = currentUser.getId(); String nickName = currentUser.getNick_name(); + // 鍑哄簱鍗曟祦姘磇d + Long outWarehouseFlowId = lWhFormTransfer.getOutWarehouseFlowId(); + // 鍏ュ簱浠撳簱绫诲瀷 0鏈烘瀯1閮ㄩ棬 + Integer inWarehouseType = lWhFormTransfer.getInWarehouseType(); + Long inWarehouseId = lWhFormTransfer.getInWarehouseId(); + String inWarehouseName = lWhFormTransfer.getInWarehouseName(); - // 鍑哄簱鍗旾D - Long outWarehouseFormId = lWhFormTransfer.getOutWarehouseFormId(); long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis()); + // 娴佹按璁板綍鎬昏〃ID - long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, currentUser, dealTime); + long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber(); + // 鏍规嵁鍑哄簱娴佹按ID 鏌ヨ 鍑哄簱鐨勭墿鍝両D + List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId); + + // 鎻掑叆 杩涘嚭搴撴祦姘存�昏〃[L_WAREHOUSE_FLOW] + LWarehouseFlow inwarehouseFlow = new LWarehouseFlow(); + inwarehouseFlow.setId(inWarehouseFlowId); + inwarehouseFlow.setWarehouseType(inWarehouseType); + inwarehouseFlow.setWarehouseId(inWarehouseId); + inwarehouseFlow.setWarehouseName(inWarehouseName); + inwarehouseFlow.setThisType(1); + inwarehouseFlow.setBusinessType(2); + inwarehouseFlow.setBusinessFormId(whFormTransferId); + inwarehouseFlow.setOperatorId(userId); + inwarehouseFlow.setOperatorName(nickName); + inwarehouseFlow.setDealTime(dealTime); + lWarehouseFlowService.insert(inwarehouseFlow); + + LWhGoodsRecord lWhGoodsRecord = new LWhGoodsRecord(); + lWhGoodsRecord.setWarehouseFlowId(outWarehouseFlowId); + List<LWhGoodsRecord> whGoodsRecordList = lWhGoodsRecordService.select(lWhGoodsRecord); + for (LWhGoodsRecord whGoodsRecord : whGoodsRecordList) { + Long oldRecordId = whGoodsRecord.getId(); + Long baseGoodsModelsId = whGoodsRecord.getBaseGoodsModelsId(); + whGoodsRecord.setId(NumberGenerator.getLongSequenceNumber()); + whGoodsRecord.setWarehouseType(inWarehouseType); + whGoodsRecord.setWarehouseId(inWarehouseId); + whGoodsRecord.setDealTime(dealTime); + //閫氳繃LockManage鑾峰緱閿� + Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId); + synchronized (warehouseModelLockObj) { + // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺 + int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null); + whGoodsRecord.setInitialCount(goodsModelNum); + whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount()); + } + LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails(); + lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId); + List<LWhGoodsRecordDetails> goodsRecordDetailsList = LWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails); + for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) { + whGoodsRecordDetails.setId(NumberGenerator.getLongSequenceNumber()); + whGoodsRecordDetails.setThisType(1); + } + LWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList); + } + lWhGoodsRecordService.insertBatch(whGoodsRecordList); + + // 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛変腑 鐘舵�佽缃负1 + lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, (short) 1); + //灏嗕繚绠′粨搴撲俊鎭洿鏂板埌 鐗╁搧浠撳簱淇濈璁板綍銆怢_GOODS_WH_RECORD銆� + lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime); // 鏇存柊璋冩嫧鍗� lWhFormTransfer = new LWhFormTransfer(whFormTransferId); - lWhFormTransfer.setInWarehouseFormId(lWarehouseFlowId); + lWhFormTransfer.setInWarehouseFormId(inWarehouseFlowId); lWhFormTransfer.setStates(2); lWhFormTransfer.setInOperatorId(userId); lWhFormTransfer.setInOperatorName(nickName); lWhFormTransfer.setInTime(dealTime); lWhFormTransferService.update(lWhFormTransfer); - log.info("璋冩嫧鍗曪細{} 鍏ュ簱瀹屾垚", whFormTransferId); return; } + + + private static String GET_GOODSID_BY_FLOWID = "SELECT goods.id FROM L_WH_GOODS_RECORD gr LEFT JOIN L_WH_GOODS_RECORD_DETAILS grd ON gr.id=grd.WH_GOODS_RECORD_ID LEFT JOIN L_WH_GOODS goods ON goods.id=grd.WH_GOODS_ID WHERE 1=1"; + + /** + * 鏍规嵁鍑哄簱娴佹按ID 鏌ヨ 鍑哄簱鐨勭墿鍝両D + * + * @param lWarehouseFlowId + */ + private List<Long> getGoodsidByFlowId(long lWarehouseFlowId) { + StringBuilder sql = new StringBuilder(GET_GOODSID_BY_FLOWID); + Map<String, Object> paramts = new HashMap<>(); + sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId"); + paramts.put("lWarehouseFlowId", lWarehouseFlowId); + List<Map<String, Object>> outGoods = goodsBaseService.select(sql.toString(), paramts); + if (CollectionUtils.isEmpty(outGoods)) { + return null; + } + List<Long> whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList()); + return whGoodsIds; + } } -- Gitblit v1.9.1