自动化立体仓库 - WMS系统
skyouc
11 小时以前 f6e687c194354f1c0b883b5ac56da3a8e70db471
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -15,6 +15,7 @@
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
@@ -24,9 +25,7 @@
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.web.WcsController;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -102,6 +101,8 @@
    private OrderPakoutService orderPakOutService;
    @Autowired
    private BasDeviceServiceImpl basDeviceService;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Override
    @Transactional
@@ -420,7 +421,7 @@
        String wrkCode = null;
        if (!Objects.isNull(deviceNo)) {
            wrkCode = workNo + "-1";
            ioType = 101;
//            ioType = 101;
            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, deviceNo);
        } else {
            generateOutStock(taskDto, userId, workNo, wrkCode, now, ioType, locMast, staDesc, null);
@@ -533,21 +534,22 @@
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBrand(orderDetl.getBrand());
            wrkDetl.setModel(orderDetl.getModel());
            wrkDetl.setUnit(orderDetl.getUnit());
            wrkDetl.setStandby1(locDto.getStandby1());
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
//            LocDetl locDel = locDetlService.selectOne(new EntityWrapper<LocDetl>()
//                    .eq("loc_no", locDto.getLocNo())
//                    .eq("batch", locDto.getBatch())
//                    .eq(!Objects.isNull(locDto.getBarcode()), "barcode", locDto.getBarcode())
//                    .eq("matnr", locDto.getMatnr()));
//            if (Objects.isNull(locDel)) {
//                throw new CoolException("数据错误,库存明细不存在!!");
//            }
            wrkDetl.setStandby1(locDto.getStandby1());
            LocDetl locDel = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                    .eq("loc_no", locDto.getLocNo())
                    .eq("batch", locDto.getBatch())
                    .eq(!Objects.isNull(locDto.getBarcode()), "barcode", locDto.getBarcode())
                    .eq("matnr", locDto.getMatnr()));
            if (Objects.isNull(locDel)) {
                throw new CoolException("数据错误,库存明细不存在!!");
            }
            wrkDetl.setBrand(locDel.getBrand());
            wrkDetl.setModel(locDel.getModel());
            wrkDetl.setUnit(locDel.getUnit());
            wrkDetl.setSpecs(locDel.getSpecs());
            wrkDetl.setBatch(locDel.getBatch());
//            wrkDetl.setAnfme(locDel.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
@@ -1158,11 +1160,11 @@
                locMast.setLocSts("F");
            }
        }
        locMast.setModiUser(userId);
        locMast.setModiTime(now);
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("更新库位状态失败");
        }
//        locMast.setModiUser(userId);
//        locMast.setModiTime(now);
//        if (!locMastService.updateById(locMast)) {
//            throw new CoolException("更新库位状态失败");
//        }
    }
@@ -1192,6 +1194,16 @@
                locMast.setModiTime(now);
                locMast.setModiUser(userId);
                locMastService.updateById(locMast);
            }
            if (!Objects.isNull(wrkMast.getWrkCode())) {
                LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
                if (!Objects.isNull(aroundBind)) {
                    aroundBind.setLocType(LocStsType.LOC_STS_TYPE_O.type);
                    if (!locAroundBindService.updateById(aroundBind)) {
                        throw new CoolException("工位状态修改失败!!");
                    }
                }
            }
            // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
@@ -1399,13 +1411,21 @@
        Integer ioType = wrkMast.getIoType() - 50;
        Integer wokNo;
        // 入出库类型判断
        if (wrkMast.getIoType() == 103) {
            ioType = 1;
        } else if (wrkMast.getIoType() == 101) {
//        if (wrkMast.getIoType() == 103) {
//            ioType = 1;
//        } else if (wrkMast.getIoType() == 101) {
//            ioType = 10;
//        }
        if (Objects.isNull(wrkMast.getIsSuplus())) {
            throw new CoolException("回库类型不能为空!!");
        }
        if (wrkMast.getIsSuplus() == 0) {
            ioType = 10;
        } else {
            ioType = 1;
        }
        wokNo = commonService.getWorkNo(0);
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", ioType)
@@ -1415,6 +1435,23 @@
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("入库路径不存在");
        }
        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", wrkMast.getBarcode()));
        if (count >= 2) {
            throw new CoolException("任务档已生成,不可以重复生成相同的子任务!!");
        }
        WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        LocDetl locDetl = new LocDetl();
        BeanUtils.copyProperties(detl, locDetl);
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.parseInt(wrkMast.getStaNo()), false);
        sourceStaNo.setLocType1((short) 1);
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto locNo = commonService.getLocNo(1, Integer.parseInt(wrkMast.getStaNo()), findLocNoAttributeVo, locTypeDto);
        Date now = new Date();
        // 堆垛机站点(目标站)
        Integer staNo = staDesc.getCrnStn();
@@ -1426,11 +1463,8 @@
        mast.setWrkSts(2L); // 工作状态: 2.设备上走
        mast.setSourceStaNo(wrkMast.getStaNo()); // 源站
        mast.setStaNo(staNo + ""); // 目标站
        //判断是否为领料出库
        if (Objects.isNull(mast.getWrkCode())) {
            mast.setLocNo(mast.getSourceLocNo()); // 目标库位 = 出库时的源库位
        }
//        mast.setSourceLocNo(""); // 源库位清空
        mast.setSourceLocNo(wrkMast.getLocNo());
        mast.setLocNo(locNo.getLocNo()); // 目标库位 = 出库时的源库位
        mast.setModiTime(now);
        mast.setModiUser(userId);
        if (!wrkMastService.insert(mast)) {
@@ -1440,29 +1474,49 @@
        if (Cools.isEmpty(wrkDetls)) {
            throw new CoolException("数据错误,任务档明细不存在 !!");
        }
        wrkDetls.forEach(wrkDetl -> {
            WrkDetl wrkDetl1 = new WrkDetl();
            BeanUtils.copyProperties(wrkDetl, wrkDetl1);
            wrkDetl1.setWrkNo(wokNo);
            if (!wrkDetlService.insert(wrkDetl1)) {
                throw new CoolException("任务档明细保存失败!!");
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast inLoc = locMastService.selectById(mast.getLocNo());
        inLoc.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
        inLoc.setModiTime(now);
        inLoc.setModiUser(userId);
        if (!locMastService.updateById(inLoc)) {
            throw new CoolException("修改库位状态失败");
        }
        LocAroundBind aroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", mast.getSourceLocNo()));
        if (!Objects.isNull(aroundBind)) {
            aroundBind.setLocType(LocStsType.LOC_STS_TYPE_R.type);
            if (!locAroundBindService.updateById(aroundBind)) {
                throw new CoolException("工位状态修改失败!!");
            }
        });
        }
        //工作类型为1时,才添加明细
        if (ioType == 1) {
            wrkDetls.forEach(wrkDetl -> {
                WrkDetl wrkDetl1 = new WrkDetl();
                BeanUtils.copyProperties(wrkDetl, wrkDetl1);
                wrkDetl1.setWrkNo(wokNo);
                if (!wrkDetlService.insert(wrkDetl1)) {
                    throw new CoolException("任务档明细保存失败!!");
                }
            });
        }
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        locMast.setLocSts("Q");
        locMast.setLocSts("R");
        locMast.setModiTime(now);
        locMast.setModiUser(userId);
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("修改库位状态失败");
        }
        wrkMast.setWrkCode(null);
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("任务档更新失败!!");
        }
//        wrkMast.setWrkCode(null);
//
//        if (!wrkMastService.updateById(wrkMast)) {
//            throw new CoolException("任务档更新失败!!");
//        }
    }
@@ -1598,6 +1652,36 @@
        }
    }
    /**
     * 修改任务档余料回库状态
     *
     * @param workNo
     * @param userId
     * @param type
     * @author Ryan
     * @date 2026/1/14 15:06
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateWrkIsSuplus(String workNo, Long userId, Integer type) {
        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Objects.isNull(mast)) {
            throw new CoolException("任务档不存在!!");
        }
        if (mast.getWrkSts() != 15) {
            throw new CoolException("当前任务状态,无法执行此操作!");
        }
        if (type == 4) {
            mast.setIsSuplus(0);
        } else if (type == 5) {
            mast.setIsSuplus(1);
        }
        if (!wrkMastService.updateById(mast)) {
            throw new CoolException("任务档修改失败!!");
        }
    }
    /**
     * 生成出库匹配的工作站入库任务
     *