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