From 3884e330379c96e7576ada6b7a988a84e8757886 Mon Sep 17 00:00:00 2001
From: futian.liu <liufutianyoo@163.com>
Date: 星期一, 18 十二月 2023 16:12:50 +0800
Subject: [PATCH] 修改查询库存的仓库参数

---
 consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java |  207 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 192 insertions(+), 15 deletions(-)

diff --git a/consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java
index ee77afb..6a2114d 100644
--- a/consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java
+++ b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java
@@ -1,6 +1,7 @@
 package com.consum.base.service.impl;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -17,6 +18,7 @@
 import com.consum.base.core.service.LWhWarningCoreServiceImpl;
 import com.consum.base.core.utils.IdUtil;
 import com.consum.base.core.utils.LockManage;
+import com.consum.base.service.BaseGoodsTemplateService;
 import com.consum.base.service.GoodsBaseServiceImpl;
 import com.consum.base.service.LGoodsUserRecordServiceImpl;
 import com.consum.base.service.LGoodsWhRecordServiceImpl;
@@ -24,16 +26,19 @@
 import com.consum.base.service.LWhFormTransferService;
 import com.consum.base.service.LWhGoodsRecordService;
 import com.consum.base.service.LWhGoodsService;
+import com.consum.base.service.LWhProcureModelService;
 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.LWhProcureModel;
 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 com.walker.infrastructure.utils.StringUtils;
 
 import cn.hutool.core.convert.Convert;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +56,11 @@
 
     @Resource
     private LWhFormTransferService lWhFormTransferService;
+    @Resource
+    private LWhProcureModelService lWhProcureModelService;
+    @Resource
+    private BaseGoodsTemplateService baseGoodsTemplateService;
+
     @Resource
     private LWhFormOutputCoreService lWhFormOutputCoreService;
     @Resource
@@ -88,14 +98,13 @@
         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) {
+        WhBusinessEnum businessEnum;
+        if (businessType == 1) {
             businessEnum = WhBusinessEnum.BUMENFENFA;
         } else if (businessType == 2) {
             businessEnum = WhBusinessEnum.BUMENTUIHUI;
+        } else {
+            businessEnum = WhBusinessEnum.DIAOBO;
         }
 
         // 鍑哄簱鍗旾D
@@ -129,12 +138,173 @@
     }
 
     /**
+     * 鏂拌皟鎷ㄥ嚭搴� 锛屼笉鍐嶇敓鎴愬嚭搴撳崟
+     *
+     * @param whFormTransferId
+     * @param currentUser
+     */
+    public Long doTransferOutPutNew(Long whFormTransferId, S_user_core currentUser) {
+        LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
+        lWhFormTransfer = lWhFormTransferService.get(lWhFormTransfer);
+        if (lWhFormTransfer == null || lWhFormTransfer.getStates() != 0) {
+            log.error("璋冩嫧澶辫触锛佽妫�鏌ヨ皟鎷ㄥ崟鐘舵��");
+            return null;
+        }
+
+        Long userId = currentUser.getId();
+        String nickName = currentUser.getNick_name();
+        long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
+        // 鐢宠璋冩嫧鐨勭墿鍝�
+        List<LWhProcureModel> goodsModelNumList =
+            lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, whFormTransferId);
+        if (CollectionUtils.isEmpty(goodsModelNumList)) {
+            log.error("娌℃湁瑕佸嚭搴撶殑鐗╁搧");
+            return null;
+        }
+        List<LWhProcureModel> goodsModelNumUpdList = new ArrayList<>(goodsModelNumList.size());
+
+        // 瑕佸嚭鐗╁搧鐨勪粨搴搃d
+        Integer outWarehouseType = lWhFormTransfer.getOutWarehouseType();
+        Long outWarehouseId = lWhFormTransfer.getOutWarehouseId();
+        String warehouseName = lWhFormTransfer.getOutWarehouseName();
+        Integer inWarehouseType = lWhFormTransfer.getInWarehouseType();
+        Long inWarehouseId = lWhFormTransfer.getInWarehouseId();
+        String inWarehouseName = lWhFormTransfer.getInWarehouseName();
+
+        // 娴佹按璁板綍鎬昏〃ID
+        long lWarehouseFlowId = NumberGenerator.getLongSequenceNumberNano();
+        // 娴佹按璁板綍鎬昏〃涓� 涓氬姟ID 銆傝皟鎷ㄥ崟鏃� 淇濆瓨璋冩嫧鍗昳d 鍑哄簱鍗曟椂 淇濆瓨鍑哄簱鍗昳d
+        long lWarehouseFlowBusinessId = whFormTransferId;
+
+        // 鐗╁搧鐘舵�侊紙0=鍦ㄩ�旇皟鎷紱1=鍏ュ簱鏈垎鍙戯紱2=宸蹭笅鍙戯紱3=鎶ュ簾锛�
+        Integer queryModelStatusT = 1;
+        // 閲囪喘鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛�
+        Integer buyTypeT = null;
+        Integer modGoodsTransferingStatusT = null;
+        // 璋冩嫧鍑哄簱
+        queryModelStatusT = 1;
+        buyTypeT = 1;
+        modGoodsTransferingStatusT = 0;
+
+        Integer queryModelStatus = queryModelStatusT;
+        Integer buyType = buyTypeT;
+        Integer modGoodsTransferingStatus = modGoodsTransferingStatusT;
+
+        ArrayList<Long> allChangModelList = new ArrayList<>();
+        goodsModelNumList.forEach(itemModelInfo -> {
+            // 闇�瑕佽皟鎷ㄧ殑鐗╁搧鐨勬煇涓瀷鍙�
+            Long baseGoodsModelsId = itemModelInfo.getBaseGoodsModelsId();
+            LWhProcureModel updWhProcureModel = new LWhProcureModel(itemModelInfo.getId());
+            // TODO 涓虹┖鏃朵笉鍔犲叆鏇存柊鍒楄〃
+            if (baseGoodsModelsId != null) {
+                allChangModelList.add(baseGoodsModelsId);
+            }
+            // 闇�瑕佽皟鎷ㄧ殑鐗╁搧鏌愪釜鍨嬪彿鐨勬暟閲�
+            Integer counts = itemModelInfo.getCounts();
+            // 鏌ヨ鍨嬪彿淇℃伅
+            Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
+            Long tempGoodsId = (Long)tempGoodsInfo.get("goodsid");
+            String goodsName = (String)tempGoodsInfo.get("goodsname");
+            String modelName = (String)tempGoodsInfo.get("modelname");
+
+            // 鎻掑叆 鍚勮鏍肩墿鍝佺殑杩涘嚭搴撹褰� L_WH_GOODS_RECORD
+            long whGoodsRecordId = NumberGenerator.getLongSequenceNumberNano();
+            LWhGoodsRecord whGoodsRecord = new LWhGoodsRecord();
+            whGoodsRecord.setId(whGoodsRecordId);
+            whGoodsRecord.setWarehouseId(outWarehouseId);
+            whGoodsRecord.setWarehouseFlowId(lWarehouseFlowId);
+            whGoodsRecord.setBaseGoodsTemplateId(tempGoodsId);
+            whGoodsRecord.setGoodsTemplateName(goodsName);
+            whGoodsRecord.setBaseGoodsModelsId(baseGoodsModelsId);
+            whGoodsRecord.setBaseGoodsModelsName(modelName);
+            whGoodsRecord.setDealTime(dealTime);
+            // 鏈璋冩暣绫诲瀷 1=璋冨锛�2=璋冨噺
+            whGoodsRecord.setThisType(2);
+            whGoodsRecord.setThisCount(counts);
+
+            // 閫氳繃LockManage鑾峰緱閿�
+            Object warehouseModelLockObj = LockManage.acquireLock(outWarehouseType, outWarehouseId, baseGoodsModelsId);
+            List<Long> outGoodsId = null;
+            synchronized (warehouseModelLockObj) {
+                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
+                List<Long> warehouseIds = new ArrayList<>(Arrays.asList(outWarehouseId));
+                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(outWarehouseType, warehouseIds,
+                    baseGoodsModelsId, queryModelStatus, buyType);
+                if (goodsModelNum < counts) {
+                    log.error("鍑哄簱澶辫触锛佸瀷鍙穥} 鐨勬暟閲忎笉瓒筹紝闇�瑕佽皟鎷▄}涓紝浠撳簱涓幇瀛榹}涓�", baseGoodsModelsId, counts, goodsModelNum);
+                    // 鎵嬪姩鍥炴粴
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    throw new RuntimeException("鍑哄簱澶辫触!鍨嬪彿鏁伴噺涓嶈冻");
+                }
+                whGoodsRecord.setInitialCount(goodsModelNum);
+                whGoodsRecord.setEndCount(goodsModelNum - counts);
+
+                // 鍑哄簱鏃跺�欙紝鎸� 鍏堝叆搴撶殑鍏堝嚭搴擄紝鍚屾椂鍏ュ簱鐨勶紝鎸変环鏍奸珮鐨勫厛鍑哄簱
+                outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseType, outWarehouseId, baseGoodsModelsId,
+                    queryModelStatus, buyType, counts);
+                lWhGoodsService.modGoodsTransfering(outGoodsId, inWarehouseType, inWarehouseId, inWarehouseName,
+                    modGoodsTransferingStatus);
+                // 鎵归噺鎻掑叆 杩涘嚭搴撴祦姘存槑缁哰L_WH_GOODS_RECORD_DETAILS]
+                lWhGoodsRecordDetailsService.sameGoodsInsertMore(outGoodsId, whGoodsRecordId, (short)0);
+            }
+            long totalAmount = lWhGoodsService.queryGoodsPriceById(outGoodsId);
+            LWhProcureModel lWhProcureModel = new LWhProcureModel(itemModelInfo.getId());
+            whGoodsRecord.setTotalPrice(totalAmount);
+            lWhGoodsRecordServiceImpl.insert(whGoodsRecord);
+            lWhProcureModel.setTotalAmount(totalAmount);
+            lWhProcureModelService.update(lWhProcureModel);
+            updWhProcureModel.setTotalAmount(totalAmount);
+            goodsModelNumUpdList.add(updWhProcureModel);
+        });
+        // 鏇存柊L_WH_PROCURE_MODEL琛ㄥ唴閲戦
+        lWhProcureModelService.updateBatch(goodsModelNumUpdList);
+
+        LWarehouseFlow warehouseFlow = new LWarehouseFlow();
+        warehouseFlow.setId(lWarehouseFlowId);
+        warehouseFlow.setWarehouseId(outWarehouseId);
+        warehouseFlow.setWarehouseName(warehouseName);
+        warehouseFlow.setThisType(2);
+        warehouseFlow.setBusinessType(WhBusinessEnum.DIAOBO.getValue() + 0);
+
+        warehouseFlow.setBusinessFormId(whFormTransferId == null ? lWarehouseFlowBusinessId : whFormTransferId);
+        warehouseFlow.setOperatorId(userId);
+        warehouseFlow.setOperatorName(nickName);
+        warehouseFlow.setDealTime(dealTime);
+        // 鎻掑叆娴佹按鎬昏〃
+        int flowInsertFlag = lWarehouseFlowService.insert(warehouseFlow);
+        if (flowInsertFlag == 0) {
+            return null;
+        }
+
+        // 褰撳簱瀛樺彉鍔ㄦ椂璋冪敤璇ユ柟娉�
+        if (outWarehouseType == 0) {
+            lWhWarningCoreService.updateKuCun(Convert.toShort(outWarehouseType, (short)0), outWarehouseId,
+                allChangModelList, null, 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 lWarehouseFlowId;
+
+    }
+
+    /**
      * 璋冩嫧鍗曞叆搴�
      *
      * @param whFormTransferId
      * @param currentUser
      */
-    public void doTransferInPut(Long whFormTransferId, S_user_core currentUser) {
+    public void doTransferInPut(Long whFormTransferId, S_user_core currentUser, String inOperatorName) {
         LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
         lWhFormTransfer = lWhFormTransferService.get(lWhFormTransfer);
         if (lWhFormTransfer == null || lWhFormTransfer.getStates() != 1) {
@@ -210,19 +380,21 @@
                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                     throw new RuntimeException("鍏ュ簱鍗曞け璐ワ紝鏈煡璇㈠埌鐗╁搧锛�");
                 }
+                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
+                List<Long> warehouseIds = new ArrayList<>(Arrays.asList(inWarehouseId));
+                int goodsModelNum =
+                    lWhGoodsService.queryGoodsModelNum(inWarehouseType, warehouseIds, baseGoodsModelsId, 1, null);
+
                 // 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛変腑 鐘舵�佽缃负1
                 lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName,
                     goodsStatus);
 
                 // 閫氳繃鐗╁搧id鏌ヨ鎵�鏈夊晢鍝佺殑鎬婚噾棰�
-//                long amount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
-//                LWhProcureModel lWhFormScrappedGoods = new LWhProcureModel(formScrappedGood.getId());
-//                lWhFormScrappedGoods.setTotalAmount(amount);
-//                lWhFormTransferService.update(lWhFormScrappedGoods);
+                // long amount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
+                // LWhProcureModel lWhFormScrappedGoods = new LWhProcureModel(formScrappedGood.getId());
+                // lWhFormScrappedGoods.setTotalAmount(amount);
+                // lWhFormTransferService.update(lWhFormScrappedGoods);
 
-                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
-                int goodsModelNum =
-                    lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, 1, null);
                 whGoodsRecord.setInitialCount(goodsModelNum);
                 whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
                 long totalAmount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
@@ -303,8 +475,13 @@
         lWhFormTransfer.setInWarehouseFlowId(inWarehouseFlowId);
         lWhFormTransfer.setInWarehouseFormId(null);
         lWhFormTransfer.setStates(2);
-        lWhFormTransfer.setInOperatorId(userId);
-        lWhFormTransfer.setInOperatorName(nickName);
+        if (StringUtils.isEmpty(inOperatorName)) {
+            lWhFormTransfer.setInOperatorId(userId);
+            lWhFormTransfer.setInOperatorName(nickName);
+        } else {
+            lWhFormTransfer.setInOperatorName(inOperatorName);
+        }
+
         lWhFormTransfer.setInTime(dealTime);
         lWhFormTransferService.update(lWhFormTransfer);
 

--
Gitblit v1.9.1