cy
2023-12-09 a4d0977f01a4b290f4982918382fffb4f5fbcb14
consum-base/src/main/java/com/consum/base/service/LWarehouseFlowCoreService.java
@@ -1,5 +1,22 @@
package com.consum.base.service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.LockManage;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.LWarehouseFlow;
@@ -7,17 +24,8 @@
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;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service;
/**
 * @ClassName LWarehouseFlowService
@@ -27,24 +35,32 @@
 **/
@Service
@Slf4j
@Transactional(propagation = Propagation.REQUIRED)
public class LWarehouseFlowCoreService {
    private final JdbcTemplate jdbcTemplate;
    private SimpleJdbcCall simpleJdbcCall;
    private LWarehouseFlowService lWarehouseFlowService;
    private LWhGoodsService lWhGoodsService;
    private LWhGoodsRecordService lWhGoodsRecordService;
    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
    private LWhGoodsRecordService lWhGoodsRecordServiceImpl;
    private BaseGoodsTemplateService baseGoodsTemplateService;
    @Value("${spring.datasource.dataBaseName}")
    private String dataBaseName;
    @PostConstruct
    public void init() {
        this.simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withCatalogName(dataBaseName).withProcedureName("InsertL_WH_GOODS");
    }
    @Autowired
    public LWarehouseFlowCoreService(JdbcTemplate jdbcTemplate, LWarehouseFlowService lWarehouseFlowService, LWhGoodsService lWhGoodsService,
        BaseGoodsTemplateServiceImpl baseGoodsTemplateService, LWhGoodsRecordService lWhGoodsRecordService) {
                                     BaseGoodsTemplateService baseGoodsTemplateService, LWhGoodsRecordService lWhGoodsRecordServiceImpl) {
        this.jdbcTemplate = jdbcTemplate;
        this.lWarehouseFlowService = lWarehouseFlowService;
        this.baseGoodsTemplateService = baseGoodsTemplateService;
        this.lWhGoodsService = lWhGoodsService;
        this.lWhGoodsRecordService = lWhGoodsRecordService;
        this.simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("InsertL_WH_GOODS");
        this.lWhGoodsRecordServiceImpl = lWhGoodsRecordServiceImpl;
    }
    /**
@@ -72,8 +88,8 @@
        //采购方式(1:集采;2=自采)
        short buyType = lWhFormProcure.getBuyType().shortValue();
        //采购时间
        Long procureTime = lWhFormProcure.getProcureTime();
        Long procureTime2 = lWhFormProcure.getProcureTime();
        Long procureTime = procureTime2 == null ? dealTime : procureTime2;
        // 插入流水总表
        int flowInsertFlag = lWarehouseFlowService.insert(warehouseFlow);
        if (flowInsertFlag == 0) {
@@ -82,11 +98,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);
@@ -103,7 +119,7 @@
            String goodsUnit = (String) tempGoodsInfo.get("unit");
            // 插入 各规格物品的进出库记录 L_WH_GOODS_RECORD
            long whGoodsRecordId = NumberGenerator.getLongSequenceNumberNano();
            long whGoodsRecordId = IdUtil.generateId();
            LWhGoodsRecord whGoodsRecord = new LWhGoodsRecord();
            whGoodsRecord.setId(whGoodsRecordId);
            whGoodsRecord.setWarehouseId(warehouseId);
@@ -136,14 +152,15 @@
                    Long price = item.getPrice();
                    //物品个数
                    Integer counts = item.getCounts();
                    totalPrice = totalPrice + counts*price;
                    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);
            lWhGoodsRecordServiceImpl.insert(whGoodsRecord);
        });
        return 1;
@@ -169,31 +186,31 @@
     * @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) {
                                    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);
    }