cy
2023-10-26 5d7ab4ea0ef70f7930cc7b3a4209ded1b1c83115
feat: 根据调拨单生成出库单,根据出库单id进行出库
6个文件已修改
240 ■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormOutputService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-model-pojo/src/main/java/com/consum/model/po/LWhFormOutput.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-model-pojo/src/main/java/com/consum/model/po/LWhFormOutput_mapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
@@ -8,14 +8,18 @@
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.apache.commons.lang3.StringUtils;
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;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@@ -29,20 +33,37 @@
@Slf4j
@Service
public class LWhFormOutputCoreService {
    @Resource
    private final JdbcTemplate jdbcTemplate;
    private SimpleJdbcCall simpleJdbcCall;
    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
    @Resource
    private LWhGoodsService lWhGoodsService;
    @Resource
    private CodeGeneratorService codeGeneratorService;
    @Resource
    private LWhProcureModelService lWhProcureModelService;
    @Resource
    private LWhFormTransferService lWhFormTransferService;
    @Resource
    private LWhFormOutputService lWhFormOutputService;
    @Resource
    private LWarehouseFlowService lWarehouseFlowService;
    @Autowired
    public LWhFormOutputCoreService(BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
                                    LWhGoodsService lWhGoodsService,
                                    CodeGeneratorService codeGeneratorService,
                                    LWhProcureModelService lWhProcureModelService,
                                    LWhFormTransferService lWhFormTransferService,
                                    LWhFormOutputService lWhFormOutputService,
                                    LWarehouseFlowService lWarehouseFlowService,
                                    JdbcTemplate jdbcTemplate
    ) {
        this.baseGoodsTemplateService = baseGoodsTemplateService;
        this.lWhGoodsService = lWhGoodsService;
        this.codeGeneratorService = codeGeneratorService;
        this.lWhProcureModelService = lWhProcureModelService;
        this.lWhFormTransferService = lWhFormTransferService;
        this.lWhFormOutputService = lWhFormOutputService;
        this.lWarehouseFlowService = lWarehouseFlowService;
        this.jdbcTemplate = jdbcTemplate;
        this.simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("insert_WH_GOODS_RECORD_DETAILS");
    }
    /**
     * 根据 调拨单 生成 出库单
@@ -51,7 +72,7 @@
     * @return 出库单Id
     */
    @Transactional(rollbackFor = Exception.class)
    public Long createOutFormByTransId(Long whFormTransferId, S_user_core currentUser) {
    public Long createOutFormByTransId(Long whFormTransferId, S_user_core currentUser,Long dealTime) {
        if (whFormTransferId == null) {
            return null;
        }
@@ -61,6 +82,12 @@
            log.error("调拨失败!请检查调拨单状态");
            return null;
        }
        // 查询该调拨单是否已经生成了出库单
        Long outWarehouseFormIdT = lWhFormOutputService.queyrIdByTransferId(whFormTransferId);
        if (outWarehouseFormIdT != null) {
            return outWarehouseFormIdT;
        }
        //申请调拨的物品
        List<LWhProcureModel> goodsModelNumList = lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, whFormTransferId);
        if (CollectionUtils.isEmpty(goodsModelNumList)) {
@@ -71,36 +98,18 @@
        String outWarehouseName = lWhFormTransfer.getOutWarehouseName();
        // 出库单ID
        Long outWarehouseFormId = NumberGenerator.getLongSequenceNumberNano();
        outWarehouseFormIdT = NumberGenerator.getLongSequenceNumberNano();
        Long outWarehouseFormId = outWarehouseFormIdT;
        // 调拨单物品 已经按型号分好了
        goodsModelNumList.forEach(itemModelInfo -> {
            // 需要调拨的物品的某个型号
            Long baseGoodsModelsId = itemModelInfo.getBaseGoodsModelsId();
            // 需要调拨的物品某个型号的数量
            Integer counts = itemModelInfo.getCounts();
            //通过LockManage获得锁
            //因为是根据调拨生成的 所以此处不用校验库存
//            Object warehouseModelLockObj = LockManage.acquireLock(outWarehouseId, baseGoodsModelsId);
            //            synchronized (warehouseModelLockObj) {
            // 获得锁后查询该型号的期初数量
//                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType);
//                if (goodsModelNum < counts) {
//                    log.error("出库失败!型号{} 的数量不足,需要调拨{}个,仓库中现存{}个", baseGoodsModelsId, counts, goodsModelNum);
//                    // 手动回滚
//                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    throw new RuntimeException("出库失败!型号数量不足");
//                }
            // 复用对象
            itemModelInfo.setId(NumberGenerator.getLongSequenceNumber());
            itemModelInfo.setFromProcureGoodsId(null);
            itemModelInfo.setBusinessType(3);
            itemModelInfo.setBusinessId(outWarehouseFormId);
            itemModelInfo.setPrice(null);
//                itemModelInfo.setCounts(counts);
//                itemModelInfo.setWorehouseCount(goodsModelNum);
            itemModelInfo.setSupplier(null);
//            }
        });
        lWhProcureModelService.insertBatch(goodsModelNumList);
@@ -123,7 +132,6 @@
        whFormOutput.setAgencyName(null);
        whFormOutput.setOperatorId(currentUser.getId());
        whFormOutput.setOperatorName(currentUser.getNick_name());
        long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
        whFormOutput.setDealTime(dealTime);
        whFormOutput.setStates(1);
@@ -144,7 +152,7 @@
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Long outFormByTransId(Long outWarehouseFormId, S_user_core currentUser) {
    public Long outFormByTransId(Long outWarehouseFormId, S_user_core currentUser,Long dealTime) {
        if (outWarehouseFormId == null) {
            return null;
        }
@@ -166,7 +174,7 @@
        Long userId = currentUser.getId();
        String nickName = currentUser.getNick_name();
        long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
        // 流水记录总表ID
        long lWarehouseFlowId = NumberGenerator.getLongSequenceNumberNano();
        // 流水记录总表中 业务ID 。调拨单时  保存调拨单id  出库单时 保存出库单id
@@ -176,18 +184,25 @@
        short queryModelStatusT = 1;
        //采购方式(1:集采;2=自采)
        Short buyTypeT = null;
        Short modGoodsTransferingStatusT = null;
        String outputCode = lWhFormOutput.getOutputCode();
        if ((BaseWarehouseParam1.In_OutPutTypeEnum.Transfer_Output.getValue() + "").equals(outputCode)) {
            //调拨出库
            queryModelStatusT = 1;
            buyTypeT = 1;
            lWarehouseFlowBusinessId = lWhFormOutput.getTransBusinessId();
            modGoodsTransferingStatusT = 0;
        } else if ((BaseWarehouseParam1.In_OutPutTypeEnum.Dept_Lending_Out.getValue() + "").equals(outputCode)) {
            //  部门仓库 分发出库
//            queryModelStatusT = 2;
        }
        short queryModelStatus = queryModelStatusT;
        Short buyType = buyTypeT;
        Short modGoodsTransferingStatus = modGoodsTransferingStatusT;
        // 接收方仓库信息
        Long inWarehouseId = lWhFormOutput.getInWarehouseId();
        String inWarehouseName = lWhFormOutput.getInWarehouseName();
        goodsModelNumList.forEach(itemModelInfo -> {
            // 需要调拨的物品的某个型号
@@ -240,12 +255,10 @@
                //出库时候,按 先入库的先出库,同时入库的,按价格高的先出库
                List<Long> outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType, goodsModelNum);
                outGoodsId.forEach(whGoodsId -> {
                });
                lWhGoodsService.modGoodsTransfering(outGoodsId, inWarehouseId, inWarehouseName, modGoodsTransferingStatus);
                // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS]
                sameGoodsInsertMore(outGoodsId, whGoodsRecordId, (short) 0);
            }
        });
        LWarehouseFlow warehouseFlow = new LWarehouseFlow();
        warehouseFlow.setId(lWarehouseFlowId);
@@ -261,8 +274,18 @@
        // 插入流水总表
        int flowInsertFlag = lWarehouseFlowService.insert(warehouseFlow);
        if (flowInsertFlag == 0) {
            return 0l;
            return null;
        }
        return 1l;
        return lWarehouseFlowId;
    }
    public void sameGoodsInsertMore(List<Long> outGoodsId, long whGoodsRecordId, short thisType) {
        SqlParameterSource in = new MapSqlParameterSource()
                .addValue("WHGOODSIDList", StringUtils.join(outGoodsId))
                .addValue("WH_GOODS_RECORD_ID", whGoodsRecordId)
                .addValue("THIS_TYPE", thisType);
        Map<String, Object> out = simpleJdbcCall.execute(in);
        System.out.println("Procedure result: " + out);
    }
}
consum-base/src/main/java/com/consum/base/service/LWhFormOutputService.java
@@ -1,8 +1,13 @@
package com.consum.base.service;
import com.consum.model.po.WhFormOutput;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
/**
 * @ClassName WhFormOutputService
@@ -15,4 +20,21 @@
@Service
public class LWhFormOutputService extends BaseServiceImpl {
    /**
     * 通过调拨单查询出库单id
     *
     * @param transBusinessId
     * @return
     */
    private static String QUEYR_ID_BY_TRANSFERID = "select id from L_WH_FORM_OUTPUT where TRANS_BUSINESS_ID =:transBusinessId limit 1";
    public Long queyrIdByTransferId(Long transBusinessId) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("transBusinessId", transBusinessId);
        List<WhFormOutput> whFormOutputs = select(QUEYR_ID_BY_TRANSFERID, map, new WhFormOutput());
        if (CollectionUtils.isEmpty(whFormOutputs)) {
            return null;
        }
        return whFormOutputs.get(0).getId();
    }
}
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java
@@ -54,14 +54,22 @@
        Long outWarehouseFormId = null;
        try {
            // 根据调拨单 生成 出库单
            outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, currentUser);
            outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, currentUser, dealTime);
        } catch (Exception e) {
            log.error(e.getMessage());
            return;
        }
        // 出库单 出库
        Long aLong = lWhFormOutputCoreService.outFormByTransId(whFormTransferId, currentUser);
        // 出库单 出库,返回 出库单流水Id
        Long outFormByTransId = lWhFormOutputCoreService.outFormByTransId(whFormTransferId, currentUser, dealTime);
        // 更新调拨单
        lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
        lWhFormTransfer.setOutWarehouseFormId(outWarehouseFormId);
        lWhFormTransfer.setStates(1);
        lWhFormTransfer.setOutOperatorId(userId);
        lWhFormTransfer.setOutOperatorName(nickName);
        lWhFormTransfer.setOutputTime(dealTime);
        lWhFormTransferService.update(lWhFormTransfer);
        log.info("调拨单:{} 出库完成", whFormTransferId);
        return;
consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java
@@ -4,6 +4,7 @@
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -115,10 +116,26 @@
     * @param toWarehouseName
     * @return
     */
    private static String MOD_GOODS_TRANSFERING = "";
    private static String MOD_GOODS_TRANSFERING_PREFIX = "update L_WH_GOODS set";
    public int modGoodsTransfering(List<Long> whGoods, Long toWarehouseId, String toWarehouseName) {
//upda
        return 0;
    public int modGoodsTransfering(List<Long> whGoods, Long toWarehouseId, String toWarehouseName, Short states) {
        StringBuilder sql = new StringBuilder(MOD_GOODS_TRANSFERING_PREFIX);
        ArrayList<Object> params = new ArrayList<>();
        if (toWarehouseId != null) {
            sql.append(", WAREHOUSE_ID=?");
            params.add(toWarehouseId);
        }
        if (toWarehouseName != null) {
            sql.append(", WAREHOUSE_NAME=?");
            params.add(toWarehouseName);
        }
        if (states != null) {
            sql.append(", STATES=?");
            params.add(states);
        }
        sql.deleteCharAt(22);
        sql.append(" where id in(?)");
        params.add(whGoods);
        return update(sql.toString(), params.toArray());
    }
}
consum-model-pojo/src/main/java/com/consum/model/po/LWhFormOutput.java
@@ -52,6 +52,14 @@
    @JsonIgnore
    protected boolean isset_warehouseName = false;
    private Long inWarehouseId = null;
    @JsonIgnore
    protected boolean isset_inWarehouseId = false;
    private String inWarehouseName = null;
    @JsonIgnore
    protected boolean isset_inWarehouseName = false;
    private Long agencyId = null;
    @JsonIgnore
    protected boolean isset_agencyId = false;
@@ -227,6 +235,34 @@
        return this.warehouseName == null || this.warehouseName.length() == 0;
    }
    public Long getInWarehouseId() {
        return this.inWarehouseId;
    }
    public void setInWarehouseId(Long inWarehouseId) {
        this.inWarehouseId = inWarehouseId;
        this.isset_inWarehouseId = true;
    }
    @JsonIgnore
    public boolean isEmptyInWarehouseId() {
        return this.inWarehouseId == null;
    }
    public String getInWarehouseName() {
        return this.inWarehouseName;
    }
    public void setInWarehouseName(String inWarehouseName) {
        this.inWarehouseName = inWarehouseName;
        this.isset_inWarehouseName = true;
    }
    @JsonIgnore
    public boolean isEmptyInWarehouseName() {
        return this.inWarehouseName == null || this.inWarehouseName.length() == 0;
    }
    public Long getAgencyId() {
        return this.agencyId;
    }
@@ -340,6 +376,8 @@
                .append("outputName=").append(this.outputName)
                .append("warehouseId=").append(this.warehouseId)
                .append("warehouseName=").append(this.warehouseName)
                .append("inWarehouseId=").append(this.inWarehouseId)
                .append("inWarehouseName=").append(this.inWarehouseName)
                .append("agencyId=").append(this.agencyId)
                .append("agencyName=").append(this.agencyName)
                .append("operatorId=").append(this.operatorId)
@@ -388,6 +426,12 @@
        if (this.isset_warehouseName) {
            l_wh_form_output.setWarehouseName(this.getWarehouseName());
        }
        if (this.isset_inWarehouseId) {
            l_wh_form_output.setInWarehouseId(this.getInWarehouseId());
        }
        if (this.isset_inWarehouseName) {
            l_wh_form_output.setInWarehouseName(this.getInWarehouseName());
        }
        if (this.isset_agencyId) {
            l_wh_form_output.setAgencyId(this.getAgencyId());
        }
consum-model-pojo/src/main/java/com/consum/model/po/LWhFormOutput_mapper.java
@@ -34,6 +34,8 @@
    public static final String OutputName = "output_name";
    public static final String WarehouseId = "warehouse_id";
    public static final String WarehouseName = "warehouse_name";
    public static final String InWarehouseId = "in_warehouse_id";
    public static final String InWarehouseName = "in_warehouse_name";
    public static final String AgencyId = "agency_id";
    public static final String AgencyName = "agency_name";
    public static final String OperatorId = "operator_id";
@@ -77,6 +79,12 @@
        }
        if (lWhFormOutput.isset_warehouseName) {
            this.setWarehouseName(lWhFormOutput.getWarehouseName());
        }
        if (lWhFormOutput.isset_inWarehouseId) {
            this.setInWarehouseId(lWhFormOutput.getInWarehouseId());
        }
        if (lWhFormOutput.isset_inWarehouseName) {
            this.setInWarehouseName(lWhFormOutput.getInWarehouseName());
        }
        if (lWhFormOutput.isset_agencyId) {
            this.setAgencyId(lWhFormOutput.getAgencyId());
@@ -150,6 +158,8 @@
        ib.set(OutputName, this.getOutputName(), this.isset_outputName);
        ib.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
        ib.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
        ib.set(InWarehouseId, this.getInWarehouseId(), this.isset_inWarehouseId);
        ib.set(InWarehouseName, this.getInWarehouseName(), this.isset_inWarehouseName);
        ib.set(AgencyId, this.getAgencyId(), this.isset_agencyId);
        ib.set(AgencyName, this.getAgencyName(), this.isset_agencyName);
        ib.set(OperatorId, this.getOperatorId(), this.isset_operatorId);
@@ -174,6 +184,8 @@
        ub.set(OutputName, this.getOutputName(), this.isset_outputName);
        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
        ub.set(InWarehouseId, this.getInWarehouseId(), this.isset_inWarehouseId);
        ub.set(InWarehouseName, this.getInWarehouseName(), this.isset_inWarehouseName);
        ub.set(AgencyId, this.getAgencyId(), this.isset_agencyId);
        ub.set(AgencyName, this.getAgencyName(), this.isset_agencyName);
        ub.set(OperatorId, this.getOperatorId(), this.isset_operatorId);
@@ -199,6 +211,8 @@
        ub.set(OutputName, this.getOutputName(), this.isset_outputName);
        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
        ub.set(InWarehouseId, this.getInWarehouseId(), this.isset_inWarehouseId);
        ub.set(InWarehouseName, this.getInWarehouseName(), this.isset_inWarehouseName);
        ub.set(AgencyId, this.getAgencyId(), this.isset_agencyId);
        ub.set(AgencyName, this.getAgencyName(), this.isset_agencyName);
        ub.set(OperatorId, this.getOperatorId(), this.isset_operatorId);
@@ -223,6 +237,8 @@
        ub.set(OutputName, this.getOutputName(), this.isset_outputName);
        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
        ub.set(InWarehouseId, this.getInWarehouseId(), this.isset_inWarehouseId);
        ub.set(InWarehouseName, this.getInWarehouseName(), this.isset_inWarehouseName);
        ub.set(AgencyId, this.getAgencyId(), this.isset_agencyId);
        ub.set(AgencyName, this.getAgencyName(), this.isset_agencyName);
        ub.set(OperatorId, this.getOperatorId(), this.isset_operatorId);
@@ -277,7 +293,7 @@
     */
    @Override
    public SqlAndParameters<Map<String, Object>> getSelectSql_(String where, Map<String, Object> parameters) {
        return new SqlAndParameters<>("select id, warehouse_flow_id, business_form_code, in_warehouse_flow_id, trans_business_id, output_code, output_name, warehouse_id, warehouse_name, agency_id, agency_name, operator_id, operator_name, deal_time, states, beiz from " + this.getTableName_() + " " + where, parameters);
        return new SqlAndParameters<>("select id, warehouse_flow_id, business_form_code, in_warehouse_flow_id, trans_business_id, output_code, output_name, warehouse_id, warehouse_name, in_warehouse_id, in_warehouse_name, agency_id, agency_name, operator_id, operator_name, deal_time, states, beiz from " + this.getTableName_() + " " + where, parameters);
    }
    /**
@@ -285,7 +301,7 @@
     */
    @Override
    public SqlAndParameters<Object[]> getSelectSql_(String where, Object[] parameters) {
        return new SqlAndParameters<>("select id, warehouse_flow_id, business_form_code, in_warehouse_flow_id, trans_business_id, output_code, output_name, warehouse_id, warehouse_name, agency_id, agency_name, operator_id, operator_name, deal_time, states, beiz from " + this.getTableName_() + " " + where, parameters);
        return new SqlAndParameters<>("select id, warehouse_flow_id, business_form_code, in_warehouse_flow_id, trans_business_id, output_code, output_name, warehouse_id, warehouse_name, in_warehouse_id, in_warehouse_name, agency_id, agency_name, operator_id, operator_name, deal_time, states, beiz from " + this.getTableName_() + " " + where, parameters);
    }
    /**
@@ -370,6 +386,18 @@
        if (columnIndex > 0) {
            l_wh_form_output.setWarehouseName(rs.getString(columnIndex));
        }
        columnIndex = resultSetUtils.findColumn(rs, LWhFormOutput_mapper.InWarehouseId);
        if (columnIndex > 0) {
            if (rs.getBigDecimal(columnIndex) == null) {
                l_wh_form_output.setInWarehouseId(null);
            } else {
                l_wh_form_output.setInWarehouseId(rs.getLong(columnIndex));
            }
        }
        columnIndex = resultSetUtils.findColumn(rs, LWhFormOutput_mapper.InWarehouseName);
        if (columnIndex > 0) {
            l_wh_form_output.setInWarehouseName(rs.getString(columnIndex));
        }
        columnIndex = resultSetUtils.findColumn(rs, LWhFormOutput_mapper.AgencyId);
        if (columnIndex > 0) {
            if (rs.getBigDecimal(columnIndex) == null) {