自动化立体仓库 - WMS系统
1
zhangc
2025-04-21 cbbc882e4f93d87d91c1734901a7fc2ca0399774
1
4个文件已修改
109 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkMast.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -160,7 +160,7 @@
    @TableField("ctn_type")
    private Integer ctnType;
    @ApiModelProperty(value= "")
    @ApiModelProperty(value= "用于标识跨库操作,1,堆垛机往四向库,2四向库往堆垛机")
    private String packed;
    @ApiModelProperty(value= "")
src/main/java/com/zy/asrs/service/WorkService.java
@@ -2,6 +2,7 @@
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.param.FullStoreParam;
@@ -113,4 +114,6 @@
     * sxk并板出库
     */
    void locMergeOutSxk(StockOutParam param, Long userId);
    void toSxk(WrkMast wrkMastold, List<WrkDetl> wrkDetls, Short locType);
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -20,7 +20,7 @@
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.utils.OutStockInterceptUtil;
import com.zy.common.utils.Synchro;
import com.zy.common.web.WcsController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -264,7 +264,9 @@
            // 生成工作档明细
            if (ioType != 104){
                for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
                    if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                    if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                        continue;
                    }
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(detlDto.getLocDetl());
                    wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
@@ -386,7 +388,9 @@
                    throw new CoolException("保存盘点明细失败");
                }
                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                    continue;
                }
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(detlDto.getLocDetl());
                wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
@@ -466,7 +470,9 @@
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            if (orderDetl == null) {
                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
@@ -576,7 +582,9 @@
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            if (orderDetl == null) {
                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
@@ -1056,7 +1064,9 @@
                    throw new CoolException("保存盘点明细失败");
                }
                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                    continue;
                }
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(detlDto.getLocDetl());
                wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
@@ -1225,7 +1235,9 @@
            Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
            while (iterator1.hasNext()) {
                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                if (adjust.getCount() == 0) { continue; }
                if (adjust.getCount() == 0) {
                    continue;
                }
                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                        // todo 盘点记录
@@ -1274,7 +1286,9 @@
        // 添加库存
        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
            if (adjust.getCount() == 0.0D) { continue; }
            if (adjust.getCount() == 0.0D) {
                continue;
            }
            Mat mat = matService.selectByMatnr(adjust.getMatnr());
            LocDetl locDetl = new LocDetl();
            locDetl.sync(mat);
@@ -1713,7 +1727,6 @@
    }
    @Transactional
    public void stockOutSXK(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
        Date now = new Date();
@@ -1812,7 +1825,9 @@
            // 生成工作档明细
            if (ioType != 104){
                for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
                    if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                    if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                        continue;
                    }
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(detlDto.getLocDetl());
                    wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号
@@ -1845,4 +1860,65 @@
        }
    }
    @Transactional
    public void toSxk(WrkMast wrkMastold, List<WrkDetl> wrkDetls, Short locType) {
        LocTypeDto locTypeDto = new LocTypeDto();
        locTypeDto.setLocType1(locType);
        StartupDto dto = commonService.getLocNo(1, 1031, null, null, null, locTypeDto, false);
        if (Cools.isEmpty(dto)) {
            throw new CoolException("去四项库未找到库位");
        }
        LocMast loc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", dto.getLocNo()));
        // 获取工作号
        int workNo = commonService.getWorkNo(0);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(1L); // 工作状态:1.生成入库ID
        wrkMast.setIoType(1); // 入出库状态: 1.库格移载
        wrkMast.setIoPri(12D);
        wrkMast.setCrnNo(7);
        wrkMast.setLocNo(dto.getLocNo()); // 目标库位
        wrkMast.setFullPlt("Y"); // 满板
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setBarcode(wrkMastold.getBarcode()); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiTime(new Date());
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 工作档明细保存
        for (WrkDetl wrk : wrkDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            Synchro.Copy(wrk, wrkDetl);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(new Date());
            wrkDetl.setAnfme(wrk.getAnfme());
            wrkDetl.setAppeTime(new Date());
            wrkDetl.setModiTime(new Date());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
        }
        // 修改目标库位状态
        if (loc.getLocSts().equals("O")) {
            loc.setLocSts("S"); // S.入库预约
            loc.setModiTime(new Date());
            if (!locMastService.updateById(loc)) {
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败");
        }
    }
}
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -39,6 +39,8 @@
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WorkService workService;
//    private static final Map<Integer,Integer> sourceSite = new HashMap<>();
//    static {
@@ -386,12 +388,16 @@
            switch (wrkMast.getIoType()) {
                // 全板出库
                case 101:
                    List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkMast.getStaNo()==1135){
                        //那需要生成一条四项库的入库任务
                        workService.toSxk(wrkMast,wrkDetls101, (short) 1);
                    }
//                    // 出库确认信号位
//                    if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) {
//                        return SUCCESS;
//                    }
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkDetls101.isEmpty()) {
//                        exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();