From ceecebe477faf5a45b19f3b258f7add8f93b4583 Mon Sep 17 00:00:00 2001
From: futian.liu <liufutianyoo@163.com>
Date: 星期二, 05 十二月 2023 10:00:24 +0800
Subject: [PATCH] 代码优化 结构调整

---
 consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java |  141 ++++++++++++++++++++++++++++++----------------
 1 files changed, 91 insertions(+), 50 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 69fcc5e..25ab0e0 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,23 +1,35 @@
 package com.consum.base.service;
 
-import com.consum.base.core.WhBusinessEnum;
-import com.consum.base.core.utils.LockManage;
-import com.consum.model.po.*;
-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 org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-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 org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import com.consum.base.core.WhBusinessEnum;
+import com.consum.base.core.service.LWhWarningCoreServiceImpl;
+import com.consum.base.core.utils.IdUtil;
+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 cn.hutool.core.convert.Convert;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @ClassName LWhFormTransferCoreService
@@ -27,17 +39,17 @@
  **/
 @Service
 @Slf4j
-@Transactional(rollbackFor = Exception.class)
+@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
 public class LWhFormTransferCoreService {
 
     @Resource
-    private LWhFormTransferServiceImpl lWhFormTransferService;
+    private LWhFormTransferService lWhFormTransferService;
     @Resource
     private LWhFormOutputCoreService lWhFormOutputCoreService;
     @Resource
     private GoodsBaseServiceImpl goodsBaseService;
     @Resource
-    private LWhGoodsRecordService lWhGoodsRecordService;
+    private LWhGoodsRecordService lWhGoodsRecordServiceImpl;
     @Resource
     private LWhGoodsService lWhGoodsService;
     @Resource
@@ -48,7 +60,8 @@
     private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
     @Resource
     private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
-
+    @Resource
+    private LWhWarningCoreServiceImpl lWhWarningCoreService;
 
     /**
      * 鎵ц璋冩嫧鍑哄簱鎿嶄綔
@@ -66,16 +79,6 @@
         Long userId = currentUser.getId();
         String nickName = currentUser.getNick_name();
         long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
-
-        // 鍑哄簱鍗旾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;
@@ -87,8 +90,19 @@
         } else if (businessType == 2) {
             businessEnum = WhBusinessEnum.BUMENTUIHUI;
         }
+
+        // 鍑哄簱鍗旾D
+        Long outWarehouseFormId = null;
+        try {
+            // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗� 杩欐牱灏辫兘鍏敤鍑哄簱
+            lWhFormTransfer.getBusinessType();
+            outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, businessEnum, currentUser, dealTime);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return;
+        }
         // 鍑哄簱鍗� 鍑哄簱锛岃繑鍥� 鍑哄簱鍗曟祦姘碔d
-        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime);
+        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime, whFormTransferId);
 
         // 鏇存柊璋冩嫧鍗�
         lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
@@ -99,6 +113,7 @@
         lWhFormTransfer.setOutputTime(dealTime);
         lWhFormTransfer.setOutWarehouseFlowId(lWarehouseFlowId);
         lWhFormTransferService.update(lWhFormTransfer);
+
         log.info("璋冩嫧鍗曪細{} 鍑哄簱瀹屾垚", whFormTransferId);
         return;
 
@@ -121,6 +136,10 @@
         String nickName = currentUser.getNick_name();
         // 鍑哄簱鍗曟祦姘磇d
         Long outWarehouseFlowId = lWhFormTransfer.getOutWarehouseFlowId();
+        if (outWarehouseFlowId == null) {
+            log.error("璋冩嫧澶辫触锛佹湭鎵惧埌鍑哄簱鍗�");
+            return;
+        }
         // 鍏ュ簱浠撳簱绫诲瀷 0鏈烘瀯1閮ㄩ棬
         Integer inWarehouseType = lWhFormTransfer.getInWarehouseType();
         Long inWarehouseId = lWhFormTransfer.getInWarehouseId();
@@ -159,38 +178,58 @@
         inwarehouseFlow.setDealTime(dealTime);
         lWarehouseFlowService.insert(inwarehouseFlow);
 
+        ArrayList<Long> allChangModelList = new ArrayList<>();
         LWhGoodsRecord lWhGoodsRecord = new LWhGoodsRecord();
         lWhGoodsRecord.setWarehouseFlowId(outWarehouseFlowId);
-        List<LWhGoodsRecord> whGoodsRecordList = lWhGoodsRecordService.select(lWhGoodsRecord);
+        List<LWhGoodsRecord> whGoodsRecordList = lWhGoodsRecordServiceImpl.select(lWhGoodsRecord);
         for (LWhGoodsRecord whGoodsRecord : whGoodsRecordList) {
             Long oldRecordId = whGoodsRecord.getId();
             Long baseGoodsModelsId = whGoodsRecord.getBaseGoodsModelsId();
-            whGoodsRecord.setId(NumberGenerator.getLongSequenceNumber());
+            allChangModelList.add(baseGoodsModelsId);
+            whGoodsRecord.setId(IdUtil.generateId());
+            whGoodsRecord.setWarehouseFlowId(inWarehouseFlowId);
             whGoodsRecord.setWarehouseType(inWarehouseType);
             whGoodsRecord.setWarehouseId(inWarehouseId);
             whGoodsRecord.setDealTime(dealTime);
             //閫氳繃LockManage鑾峰緱閿�
             Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
+            List<Long> outGoodsIds = null;
             synchronized (warehouseModelLockObj) {
                 // 鏍规嵁鍑哄簱娴佹按ID 鏌ヨ 鍑哄簱鐨勭墿鍝両D
-                List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
+                outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
+                if (CollectionUtils.isEmpty(outGoodsIds)) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    throw new RuntimeException("鍏ュ簱鍗曞け璐ワ紝鏈煡璇㈠埌鐗╁搧锛�");
+                }
                 // 搴撳瓨鐗╁搧璇︽儏锛圠_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();
+
+                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
+                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, 1, null);
+                whGoodsRecord.setInitialCount(goodsModelNum);
+                whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
+                long totalAmount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
+                whGoodsRecord.setTotalPrice(totalAmount);
+            }
+            if (businessType == 1) {
+//                List<Map<String, Object>> modelInfo = baseGoodsModelsService.queryGoodsModelInfo(baseGoodsModelsId);
+                // 1閮ㄩ棬鍒嗗彂 姝ゆ椂瑕佸線 鐗╁搧浣跨敤璁板綍銆怢_GOODS_USER_RECORD銆戞坊鍔犳暟鎹�
+                //鏌ヨ閮ㄩ棬鍒嗗彂浣跨敤浜�
+                LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
+                lWhProcureModelUser.setTransBusinessId(whFormTransferId);
+                lWhProcureModelUser.setBaseGoodsModelsId(baseGoodsModelsId);
+                List<LWhProcureModelUser> goodsUserInfo = goodsBaseService.select(lWhProcureModelUser);
+                //灏嗙墿鍝佸瀷鍙蜂互鍓嶇殑浣跨敤璁板綍璁剧疆涓洪潪鏈�鏂�
+                lGoodsUserRecordService.updSetNotLast(outGoodsIds);
+                if (!CollectionUtils.isEmpty(goodsUserInfo)) {
+                    //璁や负鏄疉绫荤墿鍝�
+                    int totalGoodsNum = goodsUserInfo.stream().filter(item -> item.getGoodsNum() != null).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) {
@@ -224,14 +263,10 @@
                     //鎵归噺鎻掑叆浣跨敤浜鸿褰�
                     lGoodsUserRecordService.insertBatch(goodsUserRecordList);
                 }
-                //灏嗕繚绠′粨搴撲俊鎭洿鏂板埌 鐗╁搧浠撳簱淇濈璁板綍銆怢_GOODS_WH_RECORD銆�
-                lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
-
-                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
-                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null);
-                whGoodsRecord.setInitialCount(goodsModelNum);
-                whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
             }
+            //灏嗕繚绠′粨搴撲俊鎭洿鏂板埌 鐗╁搧浠撳簱淇濈璁板綍銆怢_GOODS_WH_RECORD銆�
+            lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
+
             LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
             lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
             List<LWhGoodsRecordDetails> goodsRecordDetailsList = lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
@@ -242,16 +277,22 @@
             }
             lWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
         }
-        lWhGoodsRecordService.insertBatch(whGoodsRecordList);
+        lWhGoodsRecordServiceImpl.insertBatch(whGoodsRecordList);
 
         // 鏇存柊璋冩嫧鍗�
         lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
-        lWhFormTransfer.setInWarehouseFormId(inWarehouseFlowId);
+        lWhFormTransfer.setInWarehouseFlowId(inWarehouseFlowId);
+        lWhFormTransfer.setInWarehouseFormId(null);
         lWhFormTransfer.setStates(2);
         lWhFormTransfer.setInOperatorId(userId);
         lWhFormTransfer.setInOperatorName(nickName);
         lWhFormTransfer.setInTime(dealTime);
         lWhFormTransferService.update(lWhFormTransfer);
+
+        //褰撳簱瀛樺彉鍔ㄦ椂璋冪敤璇ユ柟娉�
+        if (inWarehouseType == 0) {
+            lWhWarningCoreService.updateKuCun(Convert.toShort(inWarehouseType, (short) 0), inWarehouseId, allChangModelList, null, dealTime);
+        }
         log.info("璋冩嫧鍗曪細{} 鍏ュ簱瀹屾垚", whFormTransferId);
         return;
     }

--
Gitblit v1.9.1