From cbd438bc855063b1f653c8976352b7fa91536945 Mon Sep 17 00:00:00 2001
From: cy <1664593601@qq.com>
Date: 星期三, 01 十一月 2023 15:31:58 +0800
Subject: [PATCH] feat: 盘点单生成入库、出库单

---
 consum-base/src/main/java/com/consum/base/service/LWhFormInventoryCoreService.java  |  291 ++++++++++++++++++++++++++++++++++++++++++++++++
 consum-base/src/main/java/com/consum/base/service/BaseGoodsTemplateServiceImpl.java |    2 
 consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java     |    6 +
 consum-base/src/main/java/com/consum/base/service/LWhFormOutputServiceImpl.java     |   11 +
 consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java    |    1 
 5 files changed, 305 insertions(+), 6 deletions(-)

diff --git a/consum-base/src/main/java/com/consum/base/service/BaseGoodsTemplateServiceImpl.java b/consum-base/src/main/java/com/consum/base/service/BaseGoodsTemplateServiceImpl.java
index 288bee8..48140de 100644
--- a/consum-base/src/main/java/com/consum/base/service/BaseGoodsTemplateServiceImpl.java
+++ b/consum-base/src/main/java/com/consum/base/service/BaseGoodsTemplateServiceImpl.java
@@ -233,7 +233,7 @@
      * @param modelId
      * @return
      */
-    private static String QUERY_GOODSINFO_BY_MODELID = "SELECT model.MODEL_NAME modelName,model.UNIT,temp.id goodsId, temp.GOODS_CODE goodsCode,temp.GOODS_NAME goodsName,temp.CLASSIFICATION classification FROM BASE_GOODS_MODELS model LEFT JOIN BASE_GOODS_TEMPLATE temp ON model.GOODS_TEMPLATES_ID=temp.id WHERE 1=1 ";
+    private static String QUERY_GOODSINFO_BY_MODELID = "SELECT model.MODEL_NAME modelName,model.UNIT,temp.id goodsId, temp.GOODS_CODE goodsCode,temp.GOODS_NAME goodsName,temp.CLASSIFICATION classification,temp.CATEGORY_ID categoryId FROM BASE_GOODS_MODELS model LEFT JOIN BASE_GOODS_TEMPLATE temp ON model.GOODS_TEMPLATES_ID=temp.id WHERE 1=1 ";
 
     public Map<String, Object> queryGoodsInfoByModelId(Long modelId) {
         StringBuilder sqlStr = new StringBuilder(QUERY_GOODSINFO_BY_MODELID);
diff --git a/consum-base/src/main/java/com/consum/base/service/LWhFormInventoryCoreService.java b/consum-base/src/main/java/com/consum/base/service/LWhFormInventoryCoreService.java
new file mode 100644
index 0000000..6a5d972
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/service/LWhFormInventoryCoreService.java
@@ -0,0 +1,291 @@
+package com.consum.base.service;
+
+import com.consum.base.core.CodeGeneratorEnum;
+import com.consum.base.core.CodeGeneratorService;
+import com.consum.base.core.WhBusinessEnum;
+import com.consum.base.core.param.BaseWarehouseParam1;
+import com.consum.base.util.IdUtil;
+import com.consum.model.po.*;
+import com.iplatform.model.po.S_user_core;
+import com.walker.infrastructure.utils.NumberGenerator;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName LWhFormInventoryCoreService
+ * @Author cy
+ * @Date 2023/11/1
+ * @Description
+ * @Version 1.0
+ **/
+@Slf4j
+@Service
+public class LWhFormInventoryCoreService {
+    private LWhFormInventoryGoodsServiceImpl lWhFormInventoryGoods;
+    private LWhFormOutputCoreService lWhFormOutputCoreService;
+    private CodeGeneratorService codeGeneratorService;
+    private LWhFormProcureService lWhFormProcureService;
+    private BaseWarehouseServiceImpl baseWarehouseService;
+    private LWhFormProcureGoodsService lWhFormProcureGoodsService;
+    private LWhProcureModelService lWhProcureModelService;
+    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
+    private LWhGoodsService lWhGoodsService;
+    private LWhFormInventoryServiceImpl lWhFormInventoryService;
+    private LWhFormProcureCoreService lWhFormProcureCoreService;
+    private LWhFormOutputServiceImpl lWhFormOutputService;
+
+    @Autowired
+    public LWhFormInventoryCoreService(LWhFormInventoryGoodsServiceImpl lWhFormInventoryGoods,
+                                       LWhFormOutputCoreService lWhFormOutputCoreService,
+                                       CodeGeneratorService codeGeneratorService,
+                                       LWhFormProcureService lWhFormProcureService,
+                                       BaseWarehouseServiceImpl baseWarehouseService,
+                                       LWhFormProcureGoodsService lWhFormProcureGoodsService,
+                                       LWhProcureModelService lWhProcureModelService,
+                                       BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
+                                       LWhGoodsService lWhGoodsService,
+                                       LWhFormInventoryServiceImpl lWhFormInventoryService,
+                                       LWhFormProcureCoreService lWhFormProcureCoreService,
+                                       LWhFormOutputServiceImpl lWhFormOutputService
+
+    ) {
+        this.lWhFormInventoryGoods = lWhFormInventoryGoods;
+        this.lWhFormOutputCoreService = lWhFormOutputCoreService;
+        this.codeGeneratorService = codeGeneratorService;
+        this.lWhFormProcureService = lWhFormProcureService;
+        this.baseWarehouseService = baseWarehouseService;
+        this.lWhFormProcureGoodsService = lWhFormProcureGoodsService;
+        this.lWhProcureModelService = lWhProcureModelService;
+        this.baseGoodsTemplateService = baseGoodsTemplateService;
+        this.lWhGoodsService = lWhGoodsService;
+        this.lWhFormInventoryService = lWhFormInventoryService;
+        this.lWhFormProcureCoreService = lWhFormProcureCoreService;
+        this.lWhFormOutputService = lWhFormOutputService;
+    }
+
+    /**
+     * 鏍规嵁 鐩樼偣鍗� 鐢熸垚 鍑哄簱鍗� 鍜� 鍏ュ簱鍗�
+     * 鐩樼偣鍗曚腑 鐩樼泩鐗╁搧鐢熸垚鍏ュ簱鍗曪紝鐩樹簭鐢熸垚鍑哄簱鍗�
+     *
+     * @param whformInventoryId 鐩樼偣鍗昳d
+     * @return status true/false
+     * errMsg 閿欒娑堟伅
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> createInOutFormByInventoryId(Long whformInventoryId, S_user_core currentUser, FinSysTenantUser sysInfo) {
+        HashMap<String, Object> rtnMap = new HashMap<>();
+        List<LWhFormInventoryGoods> lWhFormInventoryGoods = this.lWhFormInventoryGoods.getByInventoryId(whformInventoryId);
+        if (CollectionUtils.isEmpty(lWhFormInventoryGoods)) {
+            rtnMap.put("status", false);
+            rtnMap.put("errMsg", "娌℃湁鎵惧埌鐗╁搧");
+            return rtnMap;
+        }
+        Map<Integer, List<LWhFormInventoryGoods>> inventoryGoodsMap = lWhFormInventoryGoods.stream()
+                .filter(goods -> goods.getInventoryResult() == 2 || goods.getInventoryResult() == 3)
+                .collect(Collectors.groupingBy(LWhFormInventoryGoods::getInventoryResult));
+        if (CollectionUtils.isEmpty(lWhFormInventoryGoods)) {
+            rtnMap.put("status", true);
+            return rtnMap;
+        }
+        LWhFormInventory lWhFormInventory = lWhFormInventoryService.get(new LWhFormInventory(whformInventoryId));
+        Long warehouseId = lWhFormInventory.getWarehouseId();
+        Long stopTime = lWhFormInventory.getStopTime();
+
+        for (Map.Entry<Integer, List<LWhFormInventoryGoods>> entry : inventoryGoodsMap.entrySet()) {
+            //鐩樼偣缁撴灉锛�1=姝e父锛�2=鐩樼泩锛�3=鐩樹簭锛�
+            Integer inventoryResult = entry.getKey();
+            List<LWhFormInventoryGoods> inventoryGoods = entry.getValue();
+            if (inventoryResult == 2) {
+                // 鍒涘缓鍏ュ簱鍗曞苟鍏ュ簱
+                // 杩斿洖鍏ュ簱鍗曞彿
+                Long inFormByInventoryId = createInFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser);
+                if (inFormByInventoryId == null) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                    throw new RuntimeException("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    log.error("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    rtnMap.put("status", false);
+                    rtnMap.put("errMsg", "鍒涘缓鍏ュ簱鍗曞け璐�");
+                    return rtnMap;
+                }
+                String errMsg = lWhFormProcureCoreService.doProcure(warehouseId, currentUser);
+                if (errMsg != null) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                    throw new RuntimeException(errMsg);
+                    log.error("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    rtnMap.put("status", false);
+                    rtnMap.put("errMsg", "鍒涘缓鍏ュ簱鍗曞け璐�");
+                    return rtnMap;
+                }
+            } else {
+                // 鍒涘缓鍑哄簱鍗曞苟鍑哄簱
+                Long lWhFormOutputId = this.createOutFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser, sysInfo);
+                if (lWhFormOutputId == null) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                    throw new RuntimeException("鍒涘缓鍑哄簱鍗曞け璐�");
+                    log.error("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    rtnMap.put("status", false);
+                    rtnMap.put("errMsg", "鍒涘缓鍏ュ簱鍗曞け璐�");
+                    return rtnMap;
+                }
+                //2.鏍规嵁鍑哄簱鍗曞嚭搴�
+                Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(lWhFormOutputId, currentUser, stopTime);
+                if (lWarehouseFlowId == null) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                    throw new RuntimeException("鍒涘缓鍑哄簱鍗曞け璐�");
+                    log.error("鍒涘缓鍏ュ簱鍗曞け璐�");
+                    rtnMap.put("status", false);
+                    rtnMap.put("errMsg", "鍒涘缓鍏ュ簱鍗曞け璐�");
+                    return rtnMap;
+                }
+
+            }
+        }
+
+        return rtnMap;
+    }
+
+    /**
+     * 鏍规嵁淇℃伅鍒涘缓鍏ュ簱鍗�
+     *
+     * @param warehouseId 浠撳簱ID
+     * @param procureTime 閲囪喘鏃堕棿
+     * @param currentUser
+     */
+    private Long createInFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
+                                           S_user_core currentUser) {
+        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
+            return null;
+        }
+        Long whFormProcureId = NumberGenerator.getLongSequenceNumber();
+        BaseWarehouse baseWarehouse = baseWarehouseService.getById(warehouseId);
+        LWhFormProcure lWhFormProcure = new LWhFormProcure();
+        lWhFormProcure.setId(whFormProcureId);
+        lWhFormProcure.setBusinessFormCode(codeGeneratorService.createCodeByPrefix(CodeGeneratorEnum.Procure_Warehouse.getValue(), 10));
+        lWhFormProcure.setWarehouseId(warehouseId);
+        lWhFormProcure.setWarehouseName(baseWarehouse.getWarehouseName());
+        lWhFormProcure.setBuyerId(currentUser.getId());
+        lWhFormProcure.setBuyerName(currentUser.getNick_name());
+        lWhFormProcure.setProcureTime(procureTime);
+        lWhFormProcure.setProcureDoc(null);
+        lWhFormProcure.setBuyType(2);
+        lWhFormProcure.setStates(1);
+        lWhFormProcure.setAgencyId(baseWarehouse.getAgencyId());
+        lWhFormProcure.setAgencyName(baseWarehouse.getAgencyName());
+        int result = lWhFormProcureService.insert(lWhFormProcure);
+        if (result == 0) return null;
+
+        ArrayList<LWhFormProcureGoods> procureGoodList = new ArrayList<>();
+        ArrayList<LWhProcureModel> whProcureModeLlist = new ArrayList<>();
+
+        for (LWhFormInventoryGoods inventoryGoods : inventoryGoodsList) {
+            Long baseGoodsModelsId = inventoryGoods.getBaseGoodsModelsId();
+            Long baseGoodsTemplateId = inventoryGoods.getBaseGoodsTemplateId();
+            //鏌ヨ鍨嬪彿淇℃伅
+            Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
+            Long baseCategoryId = Long.valueOf(tempGoodsInfo.get("categoryid") + "");
+
+            LWhFormProcureGoods procureGood = new LWhFormProcureGoods();
+            long fromProcureGoodsId = NumberGenerator.getLongSequenceNumber();
+            procureGood.setId(fromProcureGoodsId);
+            procureGood.setWhFormProcureId(whFormProcureId);
+            procureGood.setBaseCategoryId(baseCategoryId);
+            procureGood.setBaseGoodsTemplateId(baseGoodsTemplateId);
+            procureGood.setGoodsTemplateName(null);
+            procureGood.setSupplier(null);
+            procureGood.setSort(null);
+
+            Integer counts = inventoryGoods.getErrorCounts();
+            if (counts == null || counts <= 0) {
+                continue;
+            }
+            // 鏌ヨ鍨嬪彿搴撳瓨
+            int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, (short) 1, null);
+            LWhProcureModel model = new LWhProcureModel();
+            model.setId(NumberGenerator.getLongSequenceNumber());
+            model.setFromProcureGoodsId(fromProcureGoodsId);
+            model.setBusinessType(WhBusinessEnum.CAIGOU.getValue() + 0);
+            model.setBusinessId(whFormProcureId);
+            model.setBaseGoodsModelsId(baseGoodsModelsId);
+            model.setPrice(0l);
+            model.setCounts(counts);
+            model.setWorehouseCount(goodsModelNum);
+            model.setSupplier(null);
+            whProcureModeLlist.add(model);
+            procureGoodList.add(procureGood);
+        }
+        lWhFormProcureGoodsService.insertBatch(procureGoodList);
+        lWhProcureModelService.insertBatch(whProcureModeLlist);
+        return whFormProcureId;
+    }
+
+    /**
+     * 鏍规嵁淇℃伅鍒涘缓鍑哄簱鍗�
+     *
+     * @param warehouseId 浠撳簱ID
+     * @param procureTime 鍑哄簱鏃堕棿
+     * @param currentUser
+     */
+    private Long createOutFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
+                                            S_user_core currentUser, FinSysTenantUser sysInfo) {
+        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
+            return null;
+        }
+        //1.鏂板鍑哄簱鍗曡褰�
+        LWhFormOutput lWhFormOutput = new LWhFormOutput();
+        //鍑哄叆搴搃d
+        long lWhFormOutputId = IdUtil.generateId();
+        lWhFormOutput.setId(lWhFormOutputId);
+        lWhFormOutput.setWarehouseId(warehouseId);
+        //鏍规嵁浠撳簱id鏌ヨ浠撳簱
+        BaseWarehouse warehouse = this.baseWarehouseService.getById(warehouseId);
+        if (warehouse == null) {
+            log.error("浠撳簱id涓嶅瓨鍦�");
+            return null;
+        }
+        lWhFormOutput.setWarehouseName(warehouse.getWarehouseName());
+        lWhFormOutput.setOutputCode(BaseWarehouseParam1.In_OutPutTypeEnum.Inventory_Output.getValue() + "");
+        lWhFormOutput.setOutputName("鐩樼偣鍑哄簱");
+        lWhFormOutput.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
+        lWhFormOutput.setAgencyName(sysInfo.getTenantName());
+        lWhFormOutput.setOperatorId(sysInfo.getId());
+        lWhFormOutput.setOperatorName(sysInfo.getUserName());
+
+        lWhFormOutput.setDealTime(procureTime);
+        lWhFormOutput.setStates(1);
+        int flag1 = lWhFormOutputService.insert(lWhFormOutput);
+        if (flag1 != 1) {
+            return null;
+        }
+        for (LWhFormInventoryGoods inventoryGoods : inventoryGoodsList) {
+            Long baseGoodsModelsId = inventoryGoods.getBaseGoodsModelsId();
+            Integer counts = inventoryGoods.getErrorCounts();
+            if (counts == null || counts <= 0) {
+                continue;
+            }
+            //鏍规嵁鐗╁搧鍨嬪彿鏌ヨ鐗╁搧搴撳瓨
+            int goodsNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, (short) 1, null);
+            //鏂板L_WH_PROCURE_MODEL璁板綍
+            LWhProcureModel lWhProcureModel = new LWhProcureModel();
+            lWhProcureModel.setId(IdUtil.generateId());
+            lWhProcureModel.setBusinessType(3);
+            lWhProcureModel.setBaseGoodsModelsId(baseGoodsModelsId);
+            lWhProcureModel.setCounts(counts);
+            lWhProcureModel.setWorehouseCount(goodsNum);
+            lWhProcureModelService.insert(lWhProcureModel);
+        }
+
+
+        return lWhFormOutputId;
+
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java b/consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
index 9494cc6..203c123 100644
--- a/consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
+++ b/consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
@@ -279,6 +279,12 @@
         if (flowInsertFlag == 0) {
             return null;
         }
+        // 鍚戝嚭搴撳崟 鎻掑叆 杩涘嚭搴撴祦姘存�昏〃ID
+        lWhFormOutput = new LWhFormOutput(outWarehouseFormId);
+        lWhFormOutput.setStates(2);
+        lWhFormOutput.setWarehouseFlowId(lWarehouseFlowId);
+        lWhFormOutputService.update(lWhFormOutput);
+
         return lWarehouseFlowId;
     }
 
diff --git a/consum-base/src/main/java/com/consum/base/service/LWhFormOutputServiceImpl.java b/consum-base/src/main/java/com/consum/base/service/LWhFormOutputServiceImpl.java
index bda721f..6a117a4 100644
--- a/consum-base/src/main/java/com/consum/base/service/LWhFormOutputServiceImpl.java
+++ b/consum-base/src/main/java/com/consum/base/service/LWhFormOutputServiceImpl.java
@@ -192,11 +192,12 @@
         Long lWarehouseFlowId = this.lWhFormOutputCoreService.outFormByTransId(lWhFormOutput.getId(), currentUser, dateTimeNumber);
         //3.鍚戝嚭搴撳崟 鎻掑叆 杩涘嚭搴撴祦姘存�昏〃ID
         int flag3 = 0;
-        if (flag1 > 0) {
-            LWhFormOutput lWhFormOutput1 = new LWhFormOutput(lWhFormOutputId);
-            lWhFormOutput1.setWarehouseFlowId(lWarehouseFlowId);
-            flag3 = this.update(lWhFormOutput1);
-        }
+        // lWhFormOutputCoreService.outFormByTransId 涓凡缁忔洿鏂颁簡
+//        if (flag1 > 0) {
+//            LWhFormOutput lWhFormOutput1 = new LWhFormOutput(lWhFormOutputId);
+//            lWhFormOutput1.setWarehouseFlowId(lWarehouseFlowId);
+//            flag3 = this.update(lWhFormOutput1);
+//        }
 
         //濡傛灉鏈変竴鏉¤褰曟柊澧炲け璐ワ紝鍒欏洖婊�
         if (flag1 == 0 || flag3 == 0 || flag5 != recordList.size()) {
diff --git a/consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java b/consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java
index 31e2a83..bedf47d 100644
--- a/consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java
+++ b/consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java
@@ -68,6 +68,7 @@
         int flowInsertFlag = lWarehouseFlowService.buyInsertWareFlow(goodsModelNum, lWhFormProcure, warehouseFlow);
         if (flowInsertFlag == 1) {
             // 鏇存柊閲囪喘鍗曘�怢_WH_FORM_PROCURE銆�
+            whFormProcure = new LWhFormProcure(whFormProcureId);
             whFormProcure.setStates(2);
             whFormProcure.setLWarehouseFlowId(lWarehouseFlowId);
             whFormProcure.setIncomeId(userId);

--
Gitblit v1.9.1