From 951e8fa8b82e56bd02bb6f821be070c21616f744 Mon Sep 17 00:00:00 2001
From: cy <1664593601@qq.com>
Date: 星期五, 08 十二月 2023 15:28:51 +0800
Subject: [PATCH] feat: 1.调拨不再生成出库单 2.增加出库金额

---
 consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferCoreService.java |  234 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 192 insertions(+), 42 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..731a0dc 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,42 +1,28 @@
 package com.consum.base.service.impl;
 
-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 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.base.service.*;
+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.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.base.service.GoodsBaseServiceImpl;
-import com.consum.base.service.LGoodsUserRecordServiceImpl;
-import com.consum.base.service.LGoodsWhRecordServiceImpl;
-import com.consum.base.service.LWarehouseFlowService;
-import com.consum.base.service.LWhFormTransferService;
-import com.consum.base.service.LWhGoodsRecordService;
-import com.consum.base.service.LWhGoodsService;
-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;
+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;
 
 /**
  * @ClassName LWhFormTransferCoreService
@@ -51,6 +37,12 @@
 
     @Resource
     private LWhFormTransferService lWhFormTransferService;
+    @Resource
+    private LWhProcureModelService lWhProcureModelService;
+    @Resource
+    private BaseGoodsTemplateService baseGoodsTemplateService;
+
+
     @Resource
     private LWhFormOutputCoreService lWhFormOutputCoreService;
     @Resource
@@ -104,14 +96,14 @@
             // 鏍规嵁璋冩嫧鍗� 鐢熸垚 鍑哄簱鍗� 杩欐牱灏辫兘鍏敤鍑哄簱
             lWhFormTransfer.getBusinessType();
             outWarehouseFormId =
-                lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, businessEnum, currentUser, dealTime);
+                    lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, businessEnum, currentUser, dealTime);
         } catch (Exception e) {
             log.error(e.getMessage());
             return;
         }
         // 鍑哄簱鍗� 鍑哄簱锛岃繑鍥� 鍑哄簱鍗曟祦姘碔d
         Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser,
-            dealTime, whFormTransferId);
+                dealTime, whFormTransferId);
 
         // 鏇存柊璋冩嫧鍗�
         lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
@@ -125,6 +117,164 @@
 
         log.info("璋冩嫧鍗曪細{} 鍑哄簱瀹屾垚", whFormTransferId);
         return;
+
+    }
+
+    /**
+     * 鏂拌皟鎷ㄥ嚭搴� 锛屼笉鍐嶇敓鎴愬嚭搴撳崟
+     *
+     * @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) {
+                // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
+                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(outWarehouseType, outWarehouseId, 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;
 
     }
 
@@ -212,7 +362,7 @@
                 }
                 // 搴撳瓨鐗╁搧璇︽儏锛圠_WH_GOODS锛変腑 鐘舵�佽缃负1
                 lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName,
-                    goodsStatus);
+                        goodsStatus);
 
                 // 閫氳繃鐗╁搧id鏌ヨ鎵�鏈夊晢鍝佺殑鎬婚噾棰�
 //                long amount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
@@ -222,7 +372,7 @@
 
                 // 鑾峰緱閿佸悗鏌ヨ璇ュ瀷鍙风殑鏈熷垵鏁伴噺
                 int goodsModelNum =
-                    lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, 1, null);
+                        lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, 1, null);
                 whGoodsRecord.setInitialCount(goodsModelNum);
                 whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
                 long totalAmount = lWhGoodsService.queryGoodsPriceById(outGoodsIds);
@@ -241,7 +391,7 @@
                 if (!CollectionUtils.isEmpty(goodsUserInfo)) {
                     // 璁や负鏄疉绫荤墿鍝�
                     int totalGoodsNum = goodsUserInfo.stream().filter(item -> item.getGoodsNum() != null)
-                        .mapToInt(LWhProcureModelUser::getGoodsNum).sum();
+                            .mapToInt(LWhProcureModelUser::getGoodsNum).sum();
                     if (totalGoodsNum != outGoodsIds.size()) {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         throw new RuntimeException("鍏ュ簱鍗曞け璐ワ紝浣跨敤浜轰娇鐢ㄦ暟閲忎笌鐗╁搧鏁伴噺涓嶄竴鑷�");
@@ -288,7 +438,7 @@
             LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
             lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
             List<LWhGoodsRecordDetails> goodsRecordDetailsList =
-                lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
+                    lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
             for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) {
                 whGoodsRecordDetails.setId(null);
                 whGoodsRecordDetails.setWhGoodsRecordId(whGoodsRecord.getId());
@@ -310,15 +460,15 @@
 
         // 褰撳簱瀛樺彉鍔ㄦ椂璋冪敤璇ユ柟娉�
         if (inWarehouseType == 0) {
-            lWhWarningCoreService.updateKuCun(Convert.toShort(inWarehouseType, (short)0), inWarehouseId,
-                allChangModelList, null, dealTime);
+            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";
+            "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
@@ -340,7 +490,7 @@
         if (CollectionUtils.isEmpty(outGoods)) {
             return null;
         }
-        List<Long> whGoodsIds = outGoods.stream().map(map -> (Long)map.get("id")).collect(Collectors.toList());
+        List<Long> whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList());
         return whGoodsIds;
     }
 }

--
Gitblit v1.9.1