futian.liu
2023-12-04 43a322430e7e6dcea64242bec6918037da160986
consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java
@@ -3,6 +3,7 @@
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.IdUtil;
import com.consum.base.core.utils.LockManage;
import com.consum.model.po.*;
import com.iplatform.model.po.S_user_core;
@@ -34,7 +35,7 @@
public class LWhFormTransferCoreService {
    @Resource
    private LWhFormTransferServiceImpl lWhFormTransferService;
    private LWhFormTransferService lWhFormTransferService;
    @Resource
    private LWhFormOutputCoreService lWhFormOutputCoreService;
    @Resource
@@ -93,7 +94,7 @@
            return;
        }
        // 出库单 出库,返回 出库单流水Id
        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime);
        Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, businessEnum, currentUser, dealTime, whFormTransferId);
        // 更新调拨单
        lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
@@ -127,7 +128,7 @@
        String nickName = currentUser.getNick_name();
        // 出库单流水id
        Long outWarehouseFlowId = lWhFormTransfer.getOutWarehouseFlowId();
        if (outWarehouseFlowId == null){
        if (outWarehouseFlowId == null) {
            log.error("调拨失败!未找到出库单");
            return;
        }
@@ -177,7 +178,8 @@
            Long oldRecordId = whGoodsRecord.getId();
            Long baseGoodsModelsId = whGoodsRecord.getBaseGoodsModelsId();
            allChangModelList.add(baseGoodsModelsId);
            whGoodsRecord.setId(NumberGenerator.getLongSequenceNumber());
            whGoodsRecord.setId(IdUtil.generateId());
            whGoodsRecord.setWarehouseFlowId(inWarehouseFlowId);
            whGoodsRecord.setWarehouseType(inWarehouseType);
            whGoodsRecord.setWarehouseId(inWarehouseId);
            whGoodsRecord.setDealTime(dealTime);
@@ -187,7 +189,7 @@
            synchronized (warehouseModelLockObj) {
                // 根据出库流水ID 查询 出库的物品ID
                outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId);
                if (CollectionUtils.isEmpty(outGoodsIds)){
                if (CollectionUtils.isEmpty(outGoodsIds)) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    throw new RuntimeException("入库单失败,未查询到物品!");
                }
@@ -203,60 +205,59 @@
            }
            if (businessType == 1) {
//                List<Map<String, Object>> modelInfo = baseGoodsModelsService.queryGoodsModelInfo(baseGoodsModelsId);
                // 1部门分发 此时要往 物品使用记录【L_GOODS_USER_RECORD】添加数据
                //查询部门分发使用人
                LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
                lWhProcureModelUser.setTransBusinessId(whFormTransferId);
                lWhProcureModelUser.setBaseGoodsModelsId(baseGoodsModelsId);
                List<LWhProcureModelUser> goodsUserInfo = goodsBaseService.select(lWhProcureModelUser);
                if (CollectionUtils.isEmpty(goodsUserInfo)){
                    continue;
                }
                int totalGoodsNum = goodsUserInfo.stream().filter(item -> item.getGoodsNum() != null).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);
                if (!CollectionUtils.isEmpty(goodsUserInfo)) {
                    //认为是A类物品
                    int totalGoodsNum = goodsUserInfo.stream().filter(item -> item.getGoodsNum() != null).mapToInt(LWhProcureModelUser::getGoodsNum).sum();
                    if (totalGoodsNum != outGoodsIds.size()) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        throw new RuntimeException("入库单失败,使用人使用数量与物品数量不一致");
//                        log.error("创建入库单失败");
                    }
                    // 更新下标位置
                    startIndex += goodsNum;
                    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);
                }
                //批量插入使用人记录
                lGoodsUserRecordService.insertBatch(goodsUserRecordList);
            }
            //将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】
            lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
            LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
            lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
@@ -281,7 +282,7 @@
        lWhFormTransferService.update(lWhFormTransfer);
        //当库存变动时调用该方法
        if (inWarehouseType == 0){
        if (inWarehouseType == 0) {
            lWhWarningCoreService.updateKuCun(Convert.toShort(inWarehouseType, (short) 0), inWarehouseId, allChangModelList, null, dealTime);
        }
        log.info("调拨单:{} 入库完成", whFormTransferId);