cy
2023-11-25 211556339427f512b5e78e009f91bbeee7b5e618
feat: 库存变动预警
6个文件已修改
150 ■■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/core/service/LWhWarningCoreServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormScrappedCoreService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhWarningServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/core/service/LWhWarningCoreServiceImpl.java
@@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -45,6 +46,7 @@
        if (baseModelIdList == null) {
            baseModelIdList = new ArrayList<>();
        }
        sysInfo = sysInfo == null ? new FinSysTenantUser() : sysInfo;
        // 获取到达到阈值的物品
        List<Map<String, Object>> kuCunNotifyList = lWhWarningService.checkKuCun(warehouseType, warehouseId, baseModelIdList);
        //
@@ -53,6 +55,11 @@
            kuCunNormalModel(warehouseType, warehouseId, baseModelIdList);
            return;
        }
        List<Long> allChangModelList = baseModelIdList.stream()
                .distinct()
                .collect(Collectors.toList());
        baseModelIdList = allChangModelList;
        // 将数据插入库存预警【WH_WARNING】
        BaseWarehouse baseWarehouses = baseWarehouseService.get(new BaseWarehouse(warehouseId));
@@ -105,8 +112,15 @@
    private String KU_CUN_NORMAL_MODEL = "update WH_WARNING set STATES=2 where WAREHOUSE_TYPE=? and BASE_WAREHOUSE_ID=?";
    private int kuCunNormalModel(Short warehouseType, Long warehouseId, List<Long> baseModelIdList) {
        if (CollectionUtils.isEmpty(baseModelIdList)) {
    /**
     *
     * @param warehouseType
     * @param warehouseId
     * @param normalBaseModelIdList 库存正常的
     * @return
     */
    private int kuCunNormalModel(Short warehouseType, Long warehouseId, List<Long> normalBaseModelIdList) {
        if (CollectionUtils.isEmpty(normalBaseModelIdList)) {
            return 1;
        }
        ArrayList<Object> params = new ArrayList<>();
@@ -114,9 +128,9 @@
        params.add(warehouseId);
        StringBuilder sql = new StringBuilder(KU_CUN_NORMAL_MODEL);
        if (!org.springframework.util.CollectionUtils.isEmpty(baseModelIdList)) {
        if (!org.springframework.util.CollectionUtils.isEmpty(normalBaseModelIdList)) {
            sql.append(" and BASE_GOODS_MODELS_ID in(?)");
            params.add(baseModelIdList);
            params.add(org.apache.commons.lang3.StringUtils.join(normalBaseModelIdList, ","));
        }
        return lWhWarningService.update(sql.toString(), params.toArray());
    }
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
@@ -1,25 +1,25 @@
package com.consum.base.service;
import cn.hutool.core.convert.Convert;
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.core.service.LWhWarningCoreServiceImpl;
import com.consum.base.core.utils.LockManage;
import com.consum.model.po.LWarehouseFlow;
import com.consum.model.po.LWhFormOutput;
import com.consum.model.po.LWhFormTransfer;
import com.consum.model.po.LWhGoodsRecord;
import com.consum.model.po.LWhProcureModel;
import com.consum.model.po.*;
import com.iplatform.model.po.S_user_core;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.infrastructure.utils.NumberGenerator;
import java.util.List;
import java.util.Map;
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * @ClassName WhFormOutputCoreService
@@ -37,19 +37,21 @@
    private CodeGeneratorService codeGeneratorService;
    private LWhProcureModelService lWhProcureModelService;
    private LWhFormOutputService lWhFormOutputService;
    private LWhWarningCoreServiceImpl lWhWarningCoreService;
    private LWarehouseFlowService lWarehouseFlowService;
    private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
    private LWhGoodsRecordService lWhGoodsRecordService;
    @Autowired
    public LWhFormOutputCoreService(BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
        LWhGoodsService lWhGoodsService,
        CodeGeneratorService codeGeneratorService,
        LWhProcureModelService lWhProcureModelService,
        LWhFormOutputService lWhFormOutputService,
        LWarehouseFlowService lWarehouseFlowService,
        LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
        LWhGoodsRecordService lWhGoodsRecordService) {
                                    LWhGoodsService lWhGoodsService,
                                    CodeGeneratorService codeGeneratorService,
                                    LWhProcureModelService lWhProcureModelService,
                                    LWhFormOutputService lWhFormOutputService,
                                    LWarehouseFlowService lWarehouseFlowService,
                                    LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
                                    LWhGoodsRecordService lWhGoodsRecordService,
                                    LWhWarningCoreServiceImpl lWhWarningCoreService) {
        this.baseGoodsTemplateService = baseGoodsTemplateService;
        this.lWhGoodsService = lWhGoodsService;
        this.codeGeneratorService = codeGeneratorService;
@@ -58,6 +60,7 @@
        this.lWarehouseFlowService = lWarehouseFlowService;
        this.lWhGoodsRecordDetailsService = lWhGoodsRecordDetailsService;
        this.lWhGoodsRecordService = lWhGoodsRecordService;
        this.lWhWarningCoreService = lWhWarningCoreService;
    }
@@ -206,9 +209,11 @@
        Integer buyType = buyTypeT;
        Integer modGoodsTransferingStatus = modGoodsTransferingStatusT;
        ArrayList<Long> allChangModelList = new ArrayList<>();
        goodsModelNumList.forEach(itemModelInfo -> {
            // 需要调拨的物品的某个型号
            Long baseGoodsModelsId = itemModelInfo.getBaseGoodsModelsId();
            allChangModelList.add(baseGoodsModelsId);
            // 需要调拨的物品某个型号的数量
            Integer counts = itemModelInfo.getCounts();
@@ -258,7 +263,7 @@
                //出库时候,按 先入库的先出库,同时入库的,按价格高的先出库
                outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseType, outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType,
                    counts);
                        counts);
                lWhGoodsService.modGoodsTransfering(outGoodsId, inWarehouseType, inWarehouseId, inWarehouseName, modGoodsTransferingStatus);
                // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS]
                lWhGoodsRecordDetailsService.sameGoodsInsertMore(outGoodsId, whGoodsRecordId, (short) 0);
@@ -292,6 +297,8 @@
        lWhFormOutput.setWarehouseFlowId(lWarehouseFlowId);
        lWhFormOutputService.update(lWhFormOutput);
        //当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun(Convert.toShort(outWarehouseType, (short) 0), outWarehouseId, allChangModelList, null, dealTime);
        return lWarehouseFlowId;
    }
consum-base/src/main/java/com/consum/base/service/LWhFormProcureCoreService.java
@@ -1,6 +1,7 @@
package com.consum.base.service;
import com.consum.base.core.WhBusinessEnum;
import com.consum.base.core.service.LWhWarningCoreServiceImpl;
import com.consum.model.po.LWarehouseFlow;
import com.consum.model.po.LWhFormProcure;
import com.consum.model.po.LWhProcureModel;
@@ -13,10 +14,10 @@
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @ClassName LWhFormProcureCoreService
 * @Date 2023/10/26
 * @Description
 * @Version 1.0
@@ -29,6 +30,9 @@
    @Resource
    private LWhFormProcureService lWhFormProcureService;
    @Resource
    private LWhWarningCoreServiceImpl lWhWarningCoreService;
    @Resource
    private LWarehouseFlowCoreService lWarehouseFlowService;
@@ -56,11 +60,12 @@
        List<LWhProcureModel> goodsModelNum = lWhProcureModelService.getModelByForm(WhBusinessEnum.CAIGOU, whFormProcureId);
        // 流水记录总表ID
        Long warehouseId = lWhFormProcure.getWarehouseId();
        long lWarehouseFlowId = NumberGenerator.getLongSequenceNumberNano();
        LWarehouseFlow warehouseFlow = new LWarehouseFlow();
        warehouseFlow.setId(lWarehouseFlowId);
        warehouseFlow.setWarehouseType(0);
        warehouseFlow.setWarehouseId(lWhFormProcure.getWarehouseId());
        warehouseFlow.setWarehouseId(warehouseId);
        warehouseFlow.setWarehouseName(lWhFormProcure.getWarehouseName());
        warehouseFlow.setThisType(1);
        warehouseFlow.setBusinessType(WhBusinessEnum.CAIGOU.getValue() + 0);
@@ -79,8 +84,18 @@
            whFormProcure.setIncomeTime(dealTime);
            lWhFormProcureService.update(whFormProcure);
        }
        // 提取baseGoodsModelsId并放入新的List中
        List<Long> allChangModelList = goodsModelNum.stream()
                .map(LWhProcureModel::getBaseGoodsModelsId)
                .distinct()
                .collect(Collectors.toList());
        //当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun((short) 0, warehouseId, allChangModelList, null, dealTime);
        log.info("入库单:{} 入库完成", whFormProcureId);
        return null;
    }
}
consum-base/src/main/java/com/consum/base/service/LWhFormScrappedCoreService.java
@@ -1,6 +1,8 @@
package com.consum.base.service;
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.LockManage;
import com.consum.model.po.LWarehouseFlow;
import com.consum.model.po.LWhFormScrapped;
@@ -9,14 +11,16 @@
import com.iplatform.model.po.S_user_core;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.infrastructure.utils.NumberGenerator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @ClassName LWhFormScrappedCoreService
@@ -35,15 +39,17 @@
    private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
    private LWhGoodsRecordService lWhGoodsRecordService;
    private LWarehouseFlowService lWarehouseFlowService;
    private LWhWarningCoreServiceImpl lWhWarningCoreService;
    @Autowired
    public LWhFormScrappedCoreService(GoodsBaseServiceImpl goodsBaseService,
        LWhFormScrappedGoodsService lWhFormScrappedGoodsService,
        BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
        LWhGoodsService lWhGoodsService,
        LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
        LWhGoodsRecordService lWhGoodsRecordService,
        LWarehouseFlowService lWarehouseFlowService) {
                                      LWhFormScrappedGoodsService lWhFormScrappedGoodsService,
                                      BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
                                      LWhGoodsService lWhGoodsService,
                                      LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
                                      LWhGoodsRecordService lWhGoodsRecordService,
                                      LWarehouseFlowService lWarehouseFlowService,
                                      LWhWarningCoreServiceImpl lWhWarningCoreService) {
//        this.lWhFormScrappedService = lWhFormScrappedService;
        this.lWhFormScrappedGoodsService = lWhFormScrappedGoodsService;
        this.baseGoodsTemplateService = baseGoodsTemplateService;
@@ -52,6 +58,7 @@
        this.lWhGoodsRecordService = lWhGoodsRecordService;
        this.lWarehouseFlowService = lWarehouseFlowService;
        this.goodsBaseService = goodsBaseService;
        this.lWhWarningCoreService = lWhWarningCoreService;
    }
@@ -92,11 +99,14 @@
        }
        // 按型号分组
        ArrayList<Long> allChangModelList = new ArrayList<>();
        Map<Long, List<LWhFormScrappedGoods>> modelGroup = formScrappedGoods.stream()
            .collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsModelsId));
                .collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsModelsId));
        for (Map.Entry<Long, List<LWhFormScrappedGoods>> entry : modelGroup.entrySet()) {
            //规格型号编号
            Long baseGoodsModelsId = entry.getKey();
            allChangModelList.add(baseGoodsModelsId);
            //对每组中要报废的数量求和
            List<LWhFormScrappedGoods> modelGoodsList = entry.getValue();
            //查询型号信息
@@ -140,7 +150,7 @@
                        String userName = formScrappedGood.getUserName();
                        // 根据分发单、规格型号编号、使用人员名称,进行报废
                        srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(warehouseType, warehouseId, transBusinessId, userName, baseGoodsModelsId,
                            (short) 2, counts);
                                (short) 2, counts);
                    }
                    if (CollectionUtils.isEmpty(srappedGoodsIds) || srappedGoodsIds.size() < counts) {
                        log.error("要报废的物品数量不足!");
@@ -191,6 +201,9 @@
        lWhFormScrapped.setOperatorName(nickName);
        lWhFormScrapped.setDealTime(dealTime);
        goodsBaseService.update(lWhFormScrapped);
        //当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList, null, dealTime);
        return lWarehouseFlowId;
    }
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java
@@ -1,27 +1,25 @@
package com.consum.base.service;
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.LockManage;
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.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.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
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;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
/**
 * @ClassName LWhFormTransferCoreService
@@ -52,7 +50,8 @@
    private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
    @Resource
    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
    @Resource
    private LWhWarningCoreServiceImpl lWhWarningCoreService;
    /**
     * 执行调拨出库操作
@@ -103,6 +102,7 @@
        lWhFormTransfer.setOutputTime(dealTime);
        lWhFormTransfer.setOutWarehouseFlowId(lWarehouseFlowId);
        lWhFormTransferService.update(lWhFormTransfer);
        log.info("调拨单:{} 出库完成", whFormTransferId);
        return;
@@ -163,12 +163,14 @@
        inwarehouseFlow.setDealTime(dealTime);
        lWarehouseFlowService.insert(inwarehouseFlow);
        ArrayList<Long> allChangModelList = new ArrayList<>();
        LWhGoodsRecord lWhGoodsRecord = new LWhGoodsRecord();
        lWhGoodsRecord.setWarehouseFlowId(outWarehouseFlowId);
        List<LWhGoodsRecord> whGoodsRecordList = lWhGoodsRecordService.select(lWhGoodsRecord);
        for (LWhGoodsRecord whGoodsRecord : whGoodsRecordList) {
            Long oldRecordId = whGoodsRecord.getId();
            Long baseGoodsModelsId = whGoodsRecord.getBaseGoodsModelsId();
            allChangModelList.add(baseGoodsModelsId);
            whGoodsRecord.setId(NumberGenerator.getLongSequenceNumber());
            whGoodsRecord.setWarehouseType(inWarehouseType);
            whGoodsRecord.setWarehouseId(inWarehouseId);
@@ -180,7 +182,7 @@
                List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
                // 库存物品详情(L_WH_GOODS)中 状态设置为1
                lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, goodsStatus);
                if (businessType == 1){
                if (businessType == 1) {
                    // 1部门分发 此时要往 物品使用记录【L_GOODS_USER_RECORD】添加数据
                    //查询部门分发使用人
                    LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
@@ -257,6 +259,9 @@
        lWhFormTransfer.setInOperatorName(nickName);
        lWhFormTransfer.setInTime(dealTime);
        lWhFormTransferService.update(lWhFormTransfer);
        //当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun(Convert.toShort(inWarehouseType, (short) 0), inWarehouseId, allChangModelList, null, dealTime);
        log.info("调拨单:{} 入库完成", whFormTransferId);
        return;
    }
consum-base/src/main/java/com/consum/base/service/LWhWarningServiceImpl.java
@@ -68,7 +68,7 @@
            paramts.put("costType", costType);
        }
        sql.append(" ORDER BY wareWarn.id DESC ");
        sql.append(" ORDER BY wareWarn.DEAL_TIME DESC ");
        return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil());
    }
@@ -87,7 +87,7 @@
    private String CHECK_KUCUN_CONFIG_JOINTKUCUN = ") warnConf LEFT JOIN (";
    private String CHECK_KUCUN_KUCUN_PREFIX = "SELECT WAREHOUSE_TYPE,WAREHOUSE_ID,BASE_GOODS_MODELS_ID,count(1) goods_Num FROM L_WH_GOODS";
    private String CHECK_KUCUN_KUCUN_WHERE = " WHERE 1=1";
    private String CHECK_KUCUN_KUCUN_WHERE = " WHERE 1=1 and STATES=1";
    private String CHECK_KUCUN_KUCUN_END = " GROUP BY BASE_GOODS_MODELS_ID)";
    private String CHECK_KUCUN_END = "goods ON goods.BASE_GOODS_MODELS_ID=warnConf.BASE_GOODS_MODELS_ID AND goods.WAREHOUSE_TYPE=warnConf.WAREHOUSE_TYPE AND goods.BASE_GOODS_MODELS_ID=warnConf.BASE_GOODS_MODELS_ID WHERE (warnConf.LOWER_LIMIT>=goods.goods_Num OR warnConf.UPPER_LIMIT<=goods.goods_Num)";