cy
2023-11-06 d7f0b77a81c6c6f8895af082214edcbed29e3ab9
feat: 调拨调整
1个文件已添加
6个文件已修改
254 ■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordCoreService.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LGoodsWhRecordServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhProcureModelUserServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordCoreService.java
@@ -1,25 +1,35 @@
package com.consum.base.service;
import com.consum.base.core.util.LockManage;
import com.consum.model.po.LGoodsUserRecord;
import com.consum.model.po.LWhFormTransfer;
import com.consum.model.po.LWhProcureModelUser;
import com.consum.model.po.LWhProcureModelUserRecord;
import com.walker.infrastructure.utils.NumberGenerator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName LGoodsUserRecordCoreService
 * @Date 2023/11/2
 * @Description
 * @Version 1.0
 **/
@Service
@Transactional(rollbackFor = Exception.class)
public class LGoodsUserRecordCoreService {
    @Resource
    private GoodsBaseServiceImpl goodsBaseService;
    @Resource
    private LWhGoodsService lWhGoodsService;
    @Resource
    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
    /**
     * 通过新旧 物品使用人修改记录【L_WH_PROCURE_MODEL_USER_RECORD】中的ID , 来修改物品使用人
@@ -38,14 +48,51 @@
        String operatorName = lWhProcureModelUserRecord.getOperatorName();
        // 调拨单id
        Long transBusinessId = lWhProcureModelUserRecord.getTransBusinessId();
        LWhFormTransfer whFormTransfer = goodsBaseService.get(new LWhFormTransfer(transBusinessId));
        Integer inWarehouseType = whFormTransfer.getInWarehouseType();
        Long inWarehouseId = whFormTransfer.getInWarehouseId();
        // 将所有物品设置为未分发
        List<Long> srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, null, null, null);
        lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, (short) 3);
        // 设置旧的LAST_RECORD= 0
        lGoodsUserRecordService.updSetNotLast(srappedGoodsIds);
        //插入新的
        LWhProcureModelUser modelUser = new LWhProcureModelUser();
        modelUser.setProcureModelUserRecordId(newProcureModelUserRecordId);
        List<LWhProcureModelUser> modelUserList = goodsBaseService.select(modelUser);
        if (CollectionUtils.isEmpty(modelUserList)) {
            return true;
        }
        ArrayList<LGoodsUserRecord> goodsUserRecords = new ArrayList<>();
        for (LWhProcureModelUser lWhProcureModelUser : modelUserList) {
            Long baseGoodsModelsId = lWhProcureModelUser.getBaseGoodsModelsId();
            Integer goodsNum = lWhProcureModelUser.getGoodsNum();
            //通过LockManage获得锁
            Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
            synchronized (warehouseModelLockObj) {
                List<Long> toUserGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, baseGoodsModelsId, (short) 1, goodsNum);
                if (CollectionUtils.isEmpty(toUserGoodsIds)) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    throw new RuntimeException("操作失败!型号数量不足");
                }
                for (Long toUserGoodsId : toUserGoodsIds) {
                    LGoodsUserRecord tmp = new LGoodsUserRecord();
                    tmp.setId(NumberGenerator.getLongSequenceNumber());
                    tmp.setWhGoodsId(toUserGoodsId);
                    tmp.setRecordType(1);
                    tmp.setTransBusinessId(transBusinessId);
                    tmp.setNowUserName(lWhProcureModelUser.getNowUserName());
                    tmp.setNowUserPhone(lWhProcureModelUser.getNowUserPhone());
                    tmp.setOperatorId(operatorId);
                    tmp.setOperatorName(operatorName);
                    tmp.setDealTime(dealTime);
                    tmp.setLastRecord(1);
                    goodsUserRecords.add(tmp);
                }
                lWhGoodsService.modGoodsTransfering(toUserGoodsIds, null, null, null, (short) 2);
                lGoodsUserRecordService.insertBatch(goodsUserRecords);
            }
        }
        return true;
    }
consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordServiceImpl.java
@@ -2,15 +2,54 @@
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName LGoodsUserRecordServiceImpl
 * @Date 2023/11/2
 * @Description
 * @Version 1.0
 **/
@Service
@Transactional(rollbackFor = Exception.class)
public class LGoodsUserRecordServiceImpl extends BaseServiceImpl {
    /**
     * 设置为非最新
     */
    private static String updSetNotLast = "update L_GOODS_USER_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?) and LAST_RECORD=1";
    public int updSetNotLast(List<Long> outGoodsIds) {
        ArrayList<Object> params = new ArrayList<>();
        params.add(outGoodsIds);
        return this.update(updSetNotLast, params.toArray());
    }
    /**
     * 通过 调拨单ID 或者 分发记录表id 删除
     */
    private static String DEL_BY_TRANDS_AND_RECORDID = "delete from L_GOODS_USER_RECORD where 1=1";
    public int delByTrandsAndRecordId(Long transBusinessId, Long procureModelUserRecordId) {
        if (transBusinessId == null && procureModelUserRecordId == null) {
            return 0;
        }
        ArrayList<Object> params = new ArrayList<>();
        StringBuilder sql = new StringBuilder(DEL_BY_TRANDS_AND_RECORDID);
        if (transBusinessId != null) {
            sql.append(" and TRANS_BUSINESS_ID =?");
            params.add(transBusinessId);
        }
        if (procureModelUserRecordId != null) {
            sql.append(" and PROCURE_MODEL_USER_RECORD_ID =?");
            params.add(procureModelUserRecordId);
        }
        return update(sql.toString(), params.toArray());
    }
}
consum-base/src/main/java/com/consum/base/service/LGoodsWhRecordServiceImpl.java
@@ -31,7 +31,7 @@
    /**
     * 设置为非最新
     */
    private static String updSetNotLast = "update L_GOODS_WH_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?)";
    private static String updSetNotLast = "update L_GOODS_WH_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?) and LAST_RECORD=1";
    public int updSetNotLast(List<Long> outGoodsIds) {
        ArrayList<Object> params = new ArrayList<>();
consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
@@ -20,7 +20,6 @@
/**
 * @ClassName WhFormOutputCoreService
 * @Date 2023/10/26
 * @Description
 * @Version 1.0
@@ -166,6 +165,9 @@
        Integer outWarehouseType = lWhFormOutput.getOutWarehouseType();
        Long outWarehouseId = lWhFormOutput.getWarehouseId();
        String warehouseName = lWhFormOutput.getWarehouseName();
        Integer inWarehouseType = lWhFormOutput.getInWarehouseType();
        Long inWarehouseId = lWhFormOutput.getInWarehouseId();
        String inWarehouseName = lWhFormOutput.getInWarehouseName();
        Long userId = currentUser.getId();
        String nickName = currentUser.getNick_name();
@@ -251,7 +253,7 @@
                //出库时候,按 先入库的先出库,同时入库的,按价格高的先出库
                List<Long> outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseType, outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType, goodsModelNum);
                lWhGoodsService.modGoodsTransfering(outGoodsId, null, null, null, modGoodsTransferingStatus);
                lWhGoodsService.modGoodsTransfering(outGoodsId, inWarehouseType, inWarehouseId, inWarehouseName, modGoodsTransferingStatus);
                // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS]
                lWhGoodsRecordDetailsService.sameGoodsInsertMore(outGoodsId, whGoodsRecordId, (short) 0);
                lWhGoodsRecordService.insert(whGoodsRecord);
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java
@@ -1,10 +1,7 @@
package com.consum.base.service;
import com.consum.base.core.util.LockManage;
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.*;
import com.iplatform.model.po.S_user_core;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.infrastructure.utils.DateUtils;
@@ -12,8 +9,10 @@
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;
@@ -43,8 +42,10 @@
    private LGoodsWhRecordServiceImpl lGoodsWhRecordService;
    @Resource
    private LWarehouseFlowService lWarehouseFlowService;
//    @Resource
//    private LWarehouseFlowService LWhGoodsRecordDetailsService;
    @Resource
    private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService;
    @Resource
    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
    /**
@@ -116,8 +117,20 @@
        // 流水记录总表ID
        long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber();
        // 根据出库流水ID 查询 出库的物品ID
        List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId);
        //单据类型。0仓库调拨;1部门分发;2部门物品回退
        Integer businessType = lWhFormTransfer.getBusinessType();
        //状态(0=在途调拨;1=入库未分发;2=已下发;3=报废 4 零星出库)
        short goodsStatus = 1;
        //类型0分发使用1 反库
        Integer recordType = null;
        if (businessType == 1) {
            goodsStatus = 2;
            recordType = 0;
        } else if (businessType == 2) {
            goodsStatus = 1;
            recordType = 1;
        }
        // 插入 进出库流水总表[L_WAREHOUSE_FLOW]
        LWarehouseFlow inwarehouseFlow = new LWarehouseFlow();
@@ -146,6 +159,59 @@
            //通过LockManage获得锁
            Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
            synchronized (warehouseModelLockObj) {
                // 根据出库流水ID 查询 出库的物品ID
                List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
                // 库存物品详情(L_WH_GOODS)中 状态设置为1
                lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, goodsStatus);
                //此时要往 物品使用记录【L_GOODS_USER_RECORD】添加数据
                //查询部门分发使用人
                LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
                lWhProcureModelUser.setTransBusinessId(whFormTransferId);
                lWhProcureModelUser.setBaseGoodsModelsId(baseGoodsModelsId);
                List<LWhProcureModelUser> goodsUserInfo = goodsBaseService.select(lWhProcureModelUser);
                int totalGoodsNum = goodsUserInfo.stream().mapToInt(LWhProcureModelUser::getGoodsNum).sum();
                if (totalGoodsNum != outGoodsIds.size()) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    throw new RuntimeException("入库单失败,使用人使用数量与物品数量不一致");
//                        log.error("创建入库单失败");
                }
                //将物品型号以前的使用记录设置为非最新
                lGoodsUserRecordService.updSetNotLast(outGoodsIds);
                ArrayList<LGoodsUserRecord> goodsUserRecordList = new ArrayList<>();
                int startIndex = 0;
                for (LWhProcureModelUser whProcureModelUser : goodsUserInfo) {
                    Integer goodsNum = whProcureModelUser.getGoodsNum();
                    String nowUserName = whProcureModelUser.getNowUserName();
                    Long nowUserPhone = whProcureModelUser.getNowUserPhone();
                    Long procureModelUserRecordId = whProcureModelUser.getProcureModelUserRecordId();
                    List<Long> goodsIds = outGoodsIds.subList(startIndex, startIndex + goodsNum);
                    for (Long goodsId : goodsIds) {
                        LGoodsUserRecord tmp = new LGoodsUserRecord();
                        tmp.setWhGoodsId(goodsId);
                        tmp.setRecordType(recordType);
                        tmp.setTransBusinessId(whFormTransferId);
                        if (businessType == 1) {
                            tmp.setNowUserName(nowUserName);
                            tmp.setNowUserPhone(nowUserPhone);
                        } else if (businessType == 2) {
                            tmp.setNowUserName(null);
                            tmp.setNowUserPhone(null);
                        }
                        tmp.setProcureModelUserRecordId(procureModelUserRecordId);
                        tmp.setOperatorId(userId);
                        tmp.setOperatorName(nickName);
                        tmp.setDealTime(dealTime);
                        tmp.setLastRecord(1);
                        goodsUserRecordList.add(tmp);
                    }
                    // 更新下标位置
                    startIndex += goodsNum;
                }
                //批量插入使用人记录
                lGoodsUserRecordService.insertBatch(goodsUserRecordList);
                //将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】
                lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
                // 获得锁后查询该型号的期初数量
                int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null);
                whGoodsRecord.setInitialCount(goodsModelNum);
@@ -153,30 +219,14 @@
            }
            LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
            lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
            List<LWhGoodsRecordDetails> goodsRecordDetailsList = null;// LWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
            List<LWhGoodsRecordDetails> goodsRecordDetailsList = lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
            for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) {
                whGoodsRecordDetails.setId(NumberGenerator.getLongSequenceNumber());
                whGoodsRecordDetails.setThisType(1);
            }
//            LWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
            lWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
        }
        lWhGoodsRecordService.insertBatch(whGoodsRecordList);
        // 库存物品详情(L_WH_GOODS)中 状态设置为1
        lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, (short) 1);
        //将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】
        lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
        //单据类型。0仓库调拨;1部门分发;2部门物品回退
        Integer businessType = lWhFormTransfer.getBusinessType();
        if (businessType == 1) {
            // 需要往 物品使用记录【L_GOODS_USER_RECORD】 增加记录
        } else if (businessType == 2) {
            // 需要往 物品使用记录【L_GOODS_USER_RECORD】 增加记录
        }
        // 更新调拨单
        lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
@@ -198,11 +248,17 @@
     *
     * @param lWarehouseFlowId
     */
    private List<Long> getGoodsidByFlowId(long lWarehouseFlowId) {
    private List<Long> getGoodsidByFlowId(Long lWarehouseFlowId, Long whGoodsRecordId) {
        StringBuilder sql = new StringBuilder(GET_GOODSID_BY_FLOWID);
        Map<String, Object> paramts = new HashMap<>();
        sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId");
        paramts.put("lWarehouseFlowId", lWarehouseFlowId);
        if (lWarehouseFlowId != null) {
            sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId");
            paramts.put("lWarehouseFlowId", lWarehouseFlowId);
        }
        if (whGoodsRecordId != null) {
            sql.append(" and gr.id =:whGoodsRecordId");
            paramts.put("whGoodsRecordId", whGoodsRecordId);
        }
        List<Map<String, Object>> outGoods = goodsBaseService.select(sql.toString(), paramts);
        if (CollectionUtils.isEmpty(outGoods)) {
            return null;
consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java
@@ -13,7 +13,6 @@
/**
 * @ClassName LWhGoodsService
 * @Date 2023/10/24
 * @Description
 * @Version 1.0
@@ -132,7 +131,9 @@
     * @param goodsModelNum     取出的数量
     * @return
     */
    private static String QUERY_SCRAPPED_GOODS_PREFIX = "SELECT goods.id FROM L_WH_GOODS goods LEFT JOIN (SELECT t2.*FROM (SELECT max(DEAL_TIME) DEAL_TIME,WH_GOODS_ID FROM L_GOODS_USER_RECORD GROUP BY WH_GOODS_ID) t1 LEFT JOIN L_GOODS_USER_RECORD t2 ON t1.DEAL_TIME=t2.DEAL_TIME AND t1.WH_GOODS_ID=t2.WH_GOODS_ID) useRecord ON goods.id=useRecord.WH_GOODS_ID WHERE 1=1";
    private static String QUERY_SCRAPPED_GOODS_PREFIX_1 = "SELECT goods.id FROM L_WH_GOODS goods LEFT JOIN L_GOODS_USER_RECORD useRecord ON goods.id=useRecord.WH_GOODS_ID AND useRecord.LAST_RECORD=1 WHERE 1=1 ";
    private static String QUERY_SCRAPPED_GOODS_PREFIX_2 = " AND goods.id IN (SELECT lwgrd.WH_GOODS_ID FROM L_WAREHOUSE_FLOW flow LEFT JOIN L_WH_GOODS_RECORD lwgr ON lwgr.WAREHOUSE_FLOW_ID=flow.id LEFT JOIN L_WH_GOODS_RECORD_DETAILS lwgrd ON lwgrd.WH_GOODS_RECORD_ID=lwgr.id WHERE flow.THIS_TYPE=4 AND flow.BUSINESS_FORM_ID=:transBusinessId)";
    private static String QUERY_SCRAPPED_GOODS_END = " ORDER BY goods.PRICE DESC,goods.PROCURE_DATE ASC,goods.id";
    public List<Map<String, Object>> queryScrappedGoods(Integer warehouseType,
@@ -145,7 +146,7 @@
        if (warehouseType == null) {
            warehouseType = 0;
        }
        StringBuilder sql = new StringBuilder(QUERY_SCRAPPED_GOODS_PREFIX);
        StringBuilder sql = new StringBuilder(QUERY_SCRAPPED_GOODS_PREFIX_1);
        Map<String, Object> paramts = new HashMap<>();
        if (warehouseType != null) {
            sql.append(" AND goods.WAREHOUSE_TYPE=:warehouseType");
@@ -154,10 +155,6 @@
        if (warehouseId != null) {
            sql.append(" AND goods.WAREHOUSE_ID=:warehouseId");
            paramts.put("warehouseId", warehouseId);
        }
        if (transBusinessId != null) {
            sql.append(" and useRecord.TRANS_BUSINESS_ID=:transBusinessId");
            paramts.put("transBusinessId", transBusinessId);
        }
        if (StringUtils.isNotEmpty(nowUserName)) {
            sql.append(" AND useRecord.NOW_USER_NAME=:nowUserName");
@@ -171,7 +168,15 @@
            sql.append(" AND goods.STATES=:states");
            paramts.put("states", states);
        }
        return select(sql.append(QUERY_SCRAPPED_GOODS_END).append(" limit").append(goodsModelNum).toString(), paramts);
        if (transBusinessId != null) {
            sql.append(QUERY_SCRAPPED_GOODS_PREFIX_2);
            paramts.put("transBusinessId", transBusinessId);
        }
        sql.append(QUERY_SCRAPPED_GOODS_END);
        if (goodsModelNum != null) {
            sql.append(" limit").append(goodsModelNum);
        }
        return select(sql.toString(), paramts);
    }
    /**
@@ -237,6 +242,5 @@
        params.add(whGoods);
        return update(sql.toString(), params.toArray());
    }
}
consum-base/src/main/java/com/consum/base/service/LWhProcureModelUserServiceImpl.java
New file
@@ -0,0 +1,16 @@
package com.consum.base.service;
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
 * @ClassName LWhProcureModelUserServiceImpl
 * @Author cy
 * @Date 2023/11/3
 * @Description
 * @Version 1.0
 **/
@Service
public class LWhProcureModelUserServiceImpl extends BaseServiceImpl {
}