cy
2023-11-20 717ff115ee5c57c8df0fd491b40b848090d2c68e
consum-base/src/main/java/com/consum/base/service/LWarehouseFlowCoreService.java
@@ -1,9 +1,16 @@
package com.consum.base.service;
import com.consum.base.core.util.LockManage;
import com.consum.model.po.*;
import com.consum.base.core.utils.LockManage;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.LWarehouseFlow;
import com.consum.model.po.LWhFormProcure;
import com.consum.model.po.LWhGoodsRecord;
import com.consum.model.po.LWhProcureModel;
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.jdbc.core.JdbcTemplate;
@@ -12,13 +19,8 @@
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @ClassName LWarehouseFlowService
 * @Author cy
 * @Date 2023/10/24
 * @Description
 * @Version 1.0
@@ -32,17 +34,14 @@
    private LWarehouseFlowService lWarehouseFlowService;
    private LWhGoodsService lWhGoodsService;
    private LWhGoodsRecordService lWhGoodsRecordService;
    private LWhFormTransferServiceImpl lWhFormTransferService;
    private LWhFormOutputCoreService lWhFormOutputCoreService;
    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
    @Autowired
    public LWarehouseFlowCoreService(JdbcTemplate jdbcTemplate, LWarehouseFlowService lWarehouseFlowService, LWhGoodsService lWhGoodsService, LWhFormTransferServiceImpl lWhFormTransferService, LWhFormOutputCoreService lWhFormOutputCoreService, BaseGoodsTemplateServiceImpl baseGoodsTemplateService, LWhGoodsRecordService lWhGoodsRecordService) {
    public LWarehouseFlowCoreService(JdbcTemplate jdbcTemplate, LWarehouseFlowService lWarehouseFlowService, LWhGoodsService lWhGoodsService,
        BaseGoodsTemplateServiceImpl baseGoodsTemplateService, LWhGoodsRecordService lWhGoodsRecordService) {
        this.jdbcTemplate = jdbcTemplate;
        this.lWarehouseFlowService = lWarehouseFlowService;
        this.baseGoodsTemplateService = baseGoodsTemplateService;
        this.lWhFormTransferService = lWhFormTransferService;
        this.lWhFormOutputCoreService = lWhFormOutputCoreService;
        this.lWhGoodsService = lWhGoodsService;
        this.lWhGoodsRecordService = lWhGoodsRecordService;
        this.simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("InsertL_WH_GOODS");
@@ -83,11 +82,11 @@
        //统计各型号数量
        Map<Long, Integer> countsSumByBaseGoodsModelsId = goodsModelNumList.stream()
                .collect(Collectors.groupingBy(LWhProcureModel::getBaseGoodsModelsId,
                        Collectors.summingInt(LWhProcureModel::getCounts)));
            .collect(Collectors.groupingBy(LWhProcureModel::getBaseGoodsModelsId,
                Collectors.summingInt(LWhProcureModel::getCounts)));
        Map<Long, List<LWhProcureModel>> sameModelList = goodsModelNumList.stream()
                // 按型号分
                .collect(Collectors.groupingBy(LWhProcureModel::getBaseGoodsModelsId));
            // 按型号分
            .collect(Collectors.groupingBy(LWhProcureModel::getBaseGoodsModelsId));
        countsSumByBaseGoodsModelsId.forEach((baseGoodsModelsId, modelCount) -> {
            //查询型号信息
            Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
@@ -122,24 +121,27 @@
            Object warehouseModelLockObj = LockManage.acquireLock(warehouseType, warehouseId, baseGoodsModelsId);
            synchronized (warehouseModelLockObj) {
                // 获得锁后查询该型号的期初数量
                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseId, baseGoodsModelsId, (short) 1, null);
                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseId, baseGoodsModelsId, 1, null);
                whGoodsRecord.setInitialCount(goodsModelNum);
                whGoodsRecord.setThisCount(modelCount);
                whGoodsRecord.setEndCount(goodsModelNum + modelCount);
                long totalPrice = 0;
                //将同型号的物品插入 库存物品详情
                List<LWhProcureModel> lWhProcureModels = sameModelList.get(baseGoodsModelsId);
                lWhProcureModels.forEach(item -> {
                for (LWhProcureModel item : lWhProcureModels) {
                    //供应商
                    String supplier = item.getSupplier();
                    //价格
                    Long price = item.getPrice();
                    //物品个数
                    Integer counts = item.getCounts();
                    totalPrice = totalPrice + counts*price;
                    sameGoodsInsertMore(warehouseFlowId, warehouseType, warehouseId, whGoodsRecordId, (short) 1, warehouseName,
                            classification, tempGoodsId, goodsName, baseGoodsModelsId, modelName,
                            supplier, buyType, goodsUnit, price, procureTime, 1, dealTime, counts);
                });
                        classification, tempGoodsId, goodsName, baseGoodsModelsId, modelName,
                        supplier, buyType, goodsUnit, price, procureTime, 1, dealTime, counts);
                };
                whGoodsRecord.setTotalPrice(totalPrice);
            }
            lWhGoodsRecordService.insert(whGoodsRecord);
        });
@@ -147,10 +149,9 @@
        return 1;
    }
    /**
     * 同样规格的物品 插入多次,
     * 同时将主键记录在 进出库流水明细【L_WH_GOODS_RECORD_DETAILS】,
     * 更新 物品仓库保管记录【L_GOODS_WH_RECORD】
     * 同样规格的物品 插入多次, 同时将主键记录在 进出库流水明细【L_WH_GOODS_RECORD_DETAILS】, 更新 物品仓库保管记录【L_GOODS_WH_RECORD】
     *
     * @param pWarehouseId         仓库id
     * @param pWarehouseName       仓库名称
@@ -167,51 +168,34 @@
     * @param pStates              状态
     * @param pTimes               插入条数
     */
    public void sameGoodsInsertMore(long pWarehouseFlowId, Integer warehouseType , long pWarehouseId, long pWhGoodsRecordId, short pRecordType, String pWarehouseName, short pCostType,
                                    long pBaseGoodsTemplateId, String pGoodsTemplateName, long pBaseGoodsModelsId,
                                    String pBaseGoodsModelsName, String pSupplier, short pBuyType,
                                    String pUnit, long pPrice, long pProcureDate,
                                    int pStates, long pDealTime, int pTimes) {
    public void sameGoodsInsertMore(long pWarehouseFlowId, Integer warehouseType, long pWarehouseId, long pWhGoodsRecordId, short pRecordType,
        String pWarehouseName, short pCostType,
        long pBaseGoodsTemplateId, String pGoodsTemplateName, long pBaseGoodsModelsId,
        String pBaseGoodsModelsName, String pSupplier, short pBuyType,
        String pUnit, long pPrice, long pProcureDate,
        int pStates, long pDealTime, int pTimes) {
        SqlParameterSource in = new MapSqlParameterSource()
                .addValue("p_WAREHOUSE_FLOW_ID", pWarehouseFlowId)
                .addValue("p_WAREHOUSE_TYPE", warehouseType)
                .addValue("p_WAREHOUSE_ID", pWarehouseId)
                .addValue("p_WH_GOODS_RECORD_ID", pWhGoodsRecordId)
                .addValue("p_RECORD_TYPE", pRecordType)
                .addValue("p_WAREHOUSE_NAME", pWarehouseName)
                .addValue("p_COST_TYPE", pCostType)
                .addValue("p_BASE_GOODS_TEMPLATE_ID", pBaseGoodsTemplateId)
                .addValue("p_GOODS_TEMPLATE_NAME", pGoodsTemplateName)
                .addValue("p_BASE_GOODS_MODELS_ID", pBaseGoodsModelsId)
                .addValue("p_BASE_GOODS_MODELS_NAME", pBaseGoodsModelsName)
                .addValue("p_SUPPLIER", pSupplier)
                .addValue("p_BUY_TYPE", pBuyType)
                .addValue("p_UNIT", pUnit)
                .addValue("p_PRICE", pPrice)
                .addValue("p_PROCURE_DATE", pProcureDate)
                .addValue("p_STATES", pStates)
                .addValue("p_DEAL_TIME", pDealTime)
                .addValue("p_times", pTimes);
            .addValue("p_WAREHOUSE_FLOW_ID", pWarehouseFlowId)
            .addValue("p_WAREHOUSE_TYPE", warehouseType)
            .addValue("p_WAREHOUSE_ID", pWarehouseId)
            .addValue("p_WH_GOODS_RECORD_ID", pWhGoodsRecordId)
            .addValue("p_RECORD_TYPE", pRecordType)
            .addValue("p_WAREHOUSE_NAME", pWarehouseName)
            .addValue("p_COST_TYPE", pCostType)
            .addValue("p_BASE_GOODS_TEMPLATE_ID", pBaseGoodsTemplateId)
            .addValue("p_GOODS_TEMPLATE_NAME", pGoodsTemplateName)
            .addValue("p_BASE_GOODS_MODELS_ID", pBaseGoodsModelsId)
            .addValue("p_BASE_GOODS_MODELS_NAME", pBaseGoodsModelsName)
            .addValue("p_SUPPLIER", pSupplier)
            .addValue("p_BUY_TYPE", pBuyType)
            .addValue("p_UNIT", pUnit)
            .addValue("p_PRICE", pPrice)
            .addValue("p_PROCURE_DATE", pProcureDate)
            .addValue("p_STATES", pStates)
            .addValue("p_DEAL_TIME", pDealTime)
            .addValue("p_times", pTimes);
        Map<String, Object> out = simpleJdbcCall.execute(in);
        System.out.println("Procedure result: " + out);
    }
    /**
     * 调拨出库
     *
     * @param outWarehouseId 出库单
     * @return
     */
    public int outInsertWareFlow(Long outWarehouseId) {
        // 出库时候,按 先入库的先出库,同时入库的,按价格高的先出库
//        List<Long> outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType, goodsModelNum);
        // 修改物品的状态为  状态(0=在途调拨;1=入库未分发;2=已下发;3=报废)
        // 修改 所属仓库仓库编号WAREHOUSE_ID、仓库名称WAREHOUSE_NAME,此时不要同步进 物品仓库保管记录【L_GOODS_WH_RECORD】!入库时再同步
        // 新增记录 进出库流水总表[L_WAREHOUSE_FLOW]   各规格物品的进出库【L_WH_GOODS_RECORD】进出库流水明细[L_WH_GOODS_RECORD_DETAILS]
        return 0;
    }
}