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