From edc87e2fc3760cd7d1230bc058acf5620ea2c465 Mon Sep 17 00:00:00 2001
From: futian.liu <liufutianyoo@163.com>
Date: 星期六, 02 十二月 2023 15:03:15 +0800
Subject: [PATCH] 部门分发添加,分发单型号查询

---
 consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java |  285 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 268 insertions(+), 17 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 70c38b4..e890509 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,40 +1,66 @@
 package com.consum.base.service;
 
+import cn.hutool.core.convert.Convert;
+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 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 javax.annotation.Resource;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 /**
  * @ClassName LWhFormTransferCoreService
- * @Author cy
  * @Date 2023/10/26
  * @Description
  * @Version 1.0
  **/
 @Service
 @Slf4j
+@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
 public class LWhFormTransferCoreService {
-    @Resource
-    private LWhProcureModelService lWhProcureModelService;
+
     @Resource
     private LWhFormTransferService lWhFormTransferService;
     @Resource
-    private LWarehouseFlowCoreService lWarehouseFlowService;
-    @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 LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
+    @Resource
+    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
+    @Resource
+    private LWhWarningCoreServiceImpl lWhWarningCoreService;
 
     /**
      * 鎵ц璋冩嫧鍑哄簱鎿嶄綔
-     * 1. 閫氳繃璋冩嫧鍗曘�怶H_FORM_TRANSFER銆� 纭畾璋冩嫧鍗曠墿鍝併�怢_WH_PROCURE_MODEL銆�
-     * 2. 鏍¢獙搴撳瓨
-     * 3. 鏇存柊杩涘嚭搴撴祦姘存�昏〃[L_WAREHOUSE_FLOW]銆佸悇瑙勬牸鐗╁搧鐨勮繘鍑哄簱銆怢_WH_GOODS_RECORD銆戙�佽繘鍑哄簱娴佹按鏄庣粏[L_WH_GOODS_RECORD_DETAILS]銆�
-     * 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛�
-     * 4. 鏇存柊璋冩嫧鍗曘�怶H_FORM_TRANSFER銆戜负寰呮帴鏀讹紝鏇存柊璋冩嫧鍗曠墿鍝併�怶H_FORM_TRANSFER_MODEL銆戝嚭搴撴祦姘碔D
      *
      * @param whFormTransferId 璋冩嫧鍗昳d
      */
@@ -49,22 +75,247 @@
         Long userId = currentUser.getId();
         String nickName = currentUser.getNick_name();
         long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
+        //鍗曟嵁绫诲瀷銆�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 outWarehouseFormId = null;
         try {
-            // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗�
-            outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, currentUser);
+            // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗� 杩欐牱灏辫兘鍏敤鍑哄簱
+            lWhFormTransfer.getBusinessType();
+            outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, businessEnum, currentUser, dealTime);
         } catch (Exception e) {
             log.error(e.getMessage());
             return;
         }
-        // 鍑哄簱鍗� 鍑哄簱
-        Long aLong = lWhFormOutputCoreService.outFormByTransId(whFormTransferId, currentUser);
+        // 鍑哄簱鍗� 鍑哄簱锛岃繑鍥� 鍑哄簱鍗曟祦姘碔d
+        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime);
 
+        // 鏇存柊璋冩嫧鍗�
+        lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
+        lWhFormTransfer.setOutWarehouseFormId(outWarehouseFormId);
+        lWhFormTransfer.setStates(1);
+        lWhFormTransfer.setOutOperatorId(userId);
+        lWhFormTransfer.setOutOperatorName(nickName);
+        lWhFormTransfer.setOutputTime(dealTime);
+        lWhFormTransfer.setOutWarehouseFlowId(lWarehouseFlowId);
+        lWhFormTransferService.update(lWhFormTransfer);
 
         log.info("璋冩嫧鍗曪細{} 鍑哄簱瀹屾垚", whFormTransferId);
         return;
 
     }
+
+    /**
+     * 璋冩嫧鍗曞叆搴�
+     *
+     * @param whFormTransferId
+     * @param currentUser
+     */
+    public void doTransferInPut(Long whFormTransferId, S_user_core currentUser) {
+        LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
+        lWhFormTransfer = lWhFormTransferService.get(lWhFormTransfer);
+        if (lWhFormTransfer == null || lWhFormTransfer.getStates() != 1) {
+            log.error("璋冩嫧澶辫触锛佽妫�鏌ヨ皟鎷ㄥ崟鐘舵��");
+            return;
+        }
+        Long userId = currentUser.getId();
+        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();
+        String inWarehouseName = lWhFormTransfer.getInWarehouseName();
+
+        long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
+
+        // 娴佹按璁板綍鎬昏〃ID
+        long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber();
+        //鍗曟嵁绫诲瀷銆�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();
+        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);
+
+        ArrayList<Long> allChangModelList = new ArrayList<>();
+        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();
+            allChangModelList.add(baseGoodsModelsId);
+            whGoodsRecord.setId(IdUtil.generateId());
+            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
+                outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
+                if (CollectionUtils.isEmpty(outGoodsIds)) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    throw new RuntimeException("鍏ュ簱鍗曞け璐ワ紝鏈煡璇㈠埌鐗╁搧锛�");
+                }
+                // 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛変腑 鐘舵�佽缃负1
+                lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, goodsStatus);
+
+                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
+                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);
+                if (CollectionUtils.isEmpty(goodsUserInfo)) {
+                    continue;
+                }
+                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) {
+                    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);
+
+            LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
+            lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
+            List<LWhGoodsRecordDetails> goodsRecordDetailsList = lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
+            for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) {
+                whGoodsRecordDetails.setId(null);
+                whGoodsRecordDetails.setWhGoodsRecordId(whGoodsRecord.getId());
+                whGoodsRecordDetails.setThisType(1);
+            }
+            lWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
+        }
+        lWhGoodsRecordService.insertBatch(whGoodsRecordList);
+
+        // 鏇存柊璋冩嫧鍗�
+        lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
+        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;
+    }
+
+
+    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, Long whGoodsRecordId) {
+        StringBuilder sql = new StringBuilder(GET_GOODSID_BY_FLOWID);
+        Map<String, Object> paramts = new HashMap<>();
+        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;
+        }
+        List<Long> whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList());
+        return whGoodsIds;
+    }
 }

--
Gitblit v1.9.1