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