From 7261ee93908d61a2c714645f19501aee9a7aba7b Mon Sep 17 00:00:00 2001
From: futian.liu <liufutianyoo@163.com>
Date: 星期五, 24 十一月 2023 17:35:51 +0800
Subject: [PATCH] --部门物品分发

---
 consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java |  137 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 112 insertions(+), 25 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 d3843d3..7c0bff1 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,27 +1,30 @@
 package com.consum.base.service;
 
-import com.consum.base.core.util.LockManage;
+import com.consum.base.core.WhBusinessEnum;
+import com.consum.base.core.utils.LockManage;
+import com.consum.model.po.LGoodsUserRecord;
 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.consum.model.po.LWhProcureModelUser;
 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.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 /**
  * @ClassName LWhFormTransferCoreService
-
  * @Date 2023/10/26
  * @Description
  * @Version 1.0
@@ -30,6 +33,7 @@
 @Slf4j
 @Transactional(rollbackFor = Exception.class)
 public class LWhFormTransferCoreService {
+
     @Resource
     private LWhFormTransferServiceImpl lWhFormTransferService;
     @Resource
@@ -45,7 +49,9 @@
     @Resource
     private LWarehouseFlowService lWarehouseFlowService;
     @Resource
-    private LWarehouseFlowService LWhGoodsRecordDetailsService;
+    private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
+    @Resource
+    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
 
 
     /**
@@ -68,14 +74,25 @@
         // 鍑哄簱鍗旾D
         Long outWarehouseFormId = null;
         try {
-            // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗�
+            // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗� 杩欐牱灏辫兘鍏敤鍑哄簱
             outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, currentUser, dealTime);
         } catch (Exception e) {
             log.error(e.getMessage());
             return;
         }
+        //鍗曟嵁绫诲瀷銆�0浠撳簱璋冩嫧锛�1閮ㄩ棬鍒嗗彂锛�2閮ㄩ棬鐗╁搧鍥為��
+        Integer businessType = lWhFormTransfer.getBusinessType();
+        businessType = businessType == null ? 0 : businessType;
+        WhBusinessEnum businessEnum = WhBusinessEnum.DIAOBO;
+        if (businessType == 0) {
+            businessEnum = WhBusinessEnum.DIAOBO;
+        } else if (businessType == 1) {
+            businessEnum = WhBusinessEnum.BUMENFENFA;
+        } else if (businessType == 2) {
+            businessEnum = WhBusinessEnum.BUMENTUIHUI;
+        }
         // 鍑哄簱鍗� 鍑哄簱锛岃繑鍥� 鍑哄簱鍗曟祦姘碔d
-        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, currentUser, dealTime);
+        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime);
 
         // 鏇存柊璋冩嫧鍗�
         lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
@@ -117,8 +134,20 @@
 
         // 娴佹按璁板綍鎬昏〃ID
         long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber();
-        // 鏍规嵁鍑哄簱娴佹按ID 鏌ヨ 鍑哄簱鐨勭墿鍝両D
-        List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId);
+        //鍗曟嵁绫诲瀷銆�0浠撳簱璋冩嫧锛�1閮ㄩ棬鍒嗗彂锛�2閮ㄩ棬鐗╁搧鍥為��
+        Integer businessType = lWhFormTransfer.getBusinessType();
+        //鐘舵�侊紙0=鍦ㄩ�旇皟鎷紱1=鍏ュ簱鏈垎鍙戯紱2=宸蹭笅鍙戯紱3=鎶ュ簾 4 闆舵槦鍑哄簱锛�
+        Integer goodsStatus = 1;
+        //绫诲瀷0鍒嗗彂浣跨敤1 鍙嶅簱
+        Integer recordType = null;
+        if (businessType == 1) {
+            goodsStatus = 2;
+            recordType = 0;
+
+        } else if (businessType == 2) {
+            goodsStatus = 1;
+            recordType = 1;
+        }
 
         // 鎻掑叆 杩涘嚭搴撴祦姘存�昏〃[L_WAREHOUSE_FLOW]
         LWarehouseFlow inwarehouseFlow = new LWarehouseFlow();
@@ -147,30 +176,82 @@
             //閫氳繃LockManage鑾峰緱閿�
             Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
             synchronized (warehouseModelLockObj) {
+                // 鏍规嵁鍑哄簱娴佹按ID 鏌ヨ 鍑哄簱鐨勭墿鍝両D
+                List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
+                // 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛変腑 鐘舵�佽缃负1
+                lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, goodsStatus);
+                if (businessType == 1){
+                    // 1閮ㄩ棬鍒嗗彂 姝ゆ椂瑕佸線 鐗╁搧浣跨敤璁板綍銆怢_GOODS_USER_RECORD銆戞坊鍔犳暟鎹�
+                    //鏌ヨ閮ㄩ棬鍒嗗彂浣跨敤浜�
+                    LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
+                    lWhProcureModelUser.setTransBusinessId(whFormTransferId);
+                    lWhProcureModelUser.setBaseGoodsModelsId(baseGoodsModelsId);
+                    List<LWhProcureModelUser> goodsUserInfo = goodsBaseService.select(lWhProcureModelUser);
+                    int totalGoodsNum = goodsUserInfo.stream().mapToInt(LWhProcureModelUser::getGoodsNum).sum();
+                    if (totalGoodsNum != outGoodsIds.size()) {
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        throw new RuntimeException("鍏ュ簱鍗曞け璐ワ紝浣跨敤浜轰娇鐢ㄦ暟閲忎笌鐗╁搧鏁伴噺涓嶄竴鑷�");
+//                        log.error("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    }
+                    //灏嗙墿鍝佸瀷鍙蜂互鍓嶇殑浣跨敤璁板綍璁剧疆涓洪潪鏈�鏂�
+                    lGoodsUserRecordService.updSetNotLast(outGoodsIds);
+                    ArrayList<LGoodsUserRecord> goodsUserRecordList = new ArrayList<>();
+                    int startIndex = 0;
+                    for (LWhProcureModelUser whProcureModelUser : goodsUserInfo) {
+                        Integer goodsNum = whProcureModelUser.getGoodsNum();
+                        String nowUserName = whProcureModelUser.getNowUserName();
+                        Long nowUserPhone = whProcureModelUser.getNowUserPhone();
+                        Long procureModelUserRecordId = whProcureModelUser.getProcureModelUserRecordId();
+                        List<Long> goodsIds = outGoodsIds.subList(startIndex, startIndex + goodsNum);
+                        for (Long goodsId : goodsIds) {
+                            LGoodsUserRecord tmp = new LGoodsUserRecord();
+                            tmp.setWhGoodsId(goodsId);
+                            tmp.setRecordType(recordType);
+                            tmp.setTransBusinessId(whFormTransferId);
+                            if (businessType == 1) {
+                                tmp.setNowUserName(nowUserName);
+                                tmp.setNowUserPhone(nowUserPhone);
+                            } else if (businessType == 2) {
+                                tmp.setNowUserName(null);
+                                tmp.setNowUserPhone(null);
+                            }
+                            tmp.setProcureModelUserRecordId(procureModelUserRecordId);
+                            tmp.setOperatorId(userId);
+                            tmp.setOperatorName(nickName);
+                            tmp.setDealTime(dealTime);
+                            tmp.setLastRecord(1);
+                            goodsUserRecordList.add(tmp);
+                        }
+                        // 鏇存柊涓嬫爣浣嶇疆
+                        startIndex += goodsNum;
+                    }
+                    //鎵归噺鎻掑叆浣跨敤浜鸿褰�
+                    lGoodsUserRecordService.insertBatch(goodsUserRecordList);
+                }
+                //灏嗕繚绠′粨搴撲俊鎭洿鏂板埌 鐗╁搧浠撳簱淇濈璁板綍銆怢_GOODS_WH_RECORD銆�
+                lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
+
                 // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
-                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null);
+                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, 1, null);
                 whGoodsRecord.setInitialCount(goodsModelNum);
                 whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
             }
             LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
             lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
-            List<LWhGoodsRecordDetails> goodsRecordDetailsList = LWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
+            List<LWhGoodsRecordDetails> goodsRecordDetailsList = lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
             for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) {
-                whGoodsRecordDetails.setId(NumberGenerator.getLongSequenceNumber());
+                whGoodsRecordDetails.setId(null);
+                whGoodsRecordDetails.setWhGoodsRecordId(whGoodsRecord.getId());
                 whGoodsRecordDetails.setThisType(1);
             }
-            LWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
+            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(inWarehouseFlowId);
+        lWhFormTransfer.setInWarehouseFlowId(inWarehouseFlowId);
+        lWhFormTransfer.setInWarehouseFormId(null);
         lWhFormTransfer.setStates(2);
         lWhFormTransfer.setInOperatorId(userId);
         lWhFormTransfer.setInOperatorName(nickName);
@@ -188,11 +269,17 @@
      *
      * @param lWarehouseFlowId
      */
-    private List<Long> getGoodsidByFlowId(long lWarehouseFlowId) {
+    private List<Long> getGoodsidByFlowId(Long lWarehouseFlowId, Long whGoodsRecordId) {
         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);
+        if (lWarehouseFlowId != null) {
+            sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId");
+            paramts.put("lWarehouseFlowId", lWarehouseFlowId);
+        }
+        if (whGoodsRecordId != null) {
+            sql.append(" and gr.id =:whGoodsRecordId");
+            paramts.put("whGoodsRecordId", whGoodsRecordId);
+        }
         List<Map<String, Object>> outGoods = goodsBaseService.select(sql.toString(), paramts);
         if (CollectionUtils.isEmpty(outGoods)) {
             return null;

--
Gitblit v1.9.1