自动化立体仓库 - WCS系统
Junjie
2023-05-20 7a6aee85e03339b2651e762a5c258a688894de09
src/main/java/com/zy/asrs/service/impl/WmsWrkServiceImpl.java
@@ -1,7 +1,10 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.WmsWrkStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.WmsWrkMapper;
import com.zy.asrs.service.*;
@@ -12,6 +15,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Service("wmsWrkService")
public class WmsWrkServiceImpl extends ServiceImpl<WmsWrkMapper, WmsWrk> implements WmsWrkService {
@@ -26,6 +30,10 @@
    private WrkMastService wrkMastService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Override
    public WmsWrk selectByWmsWrkNo(Integer wmsWrkNo) {
@@ -47,10 +55,13 @@
        //创建任务
        if (wmsWrk.getIoType() == 1) {
            //入库
            //1.入库
            startup(wmsWrk, userId);
        }else if(wmsWrk.getIoType() == 11){
            //11.库格移载
            locMove(wmsWrk, userId);
        }else if(wmsWrk.getIoType() == 101){
            //出库
            //101.出库
            stockOut(wmsWrk, userId);
        }
@@ -66,7 +77,7 @@
        }
        // 生成任务号
        int workNo = commonService.getWorkNo(0);
        int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);
        wmsWrk.setWrkNo(workNo);
        this.baseMapper.updateById(wmsWrk);
@@ -76,6 +87,7 @@
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
        wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(1L); // 工作状态:生成入库ID
@@ -122,6 +134,7 @@
    }
    @Override
    @Transactional
    public void stockOut(WmsWrk wmsWrk, Long userId) {
        Date now = new Date();
        LocMast locMast = locMastService.selectByLocNo(wmsWrk.getSourceLocNo());
@@ -130,7 +143,7 @@
        }
        // 生成任务号
        int workNo = commonService.getWorkNo(2);
        int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
        wmsWrk.setWrkNo(workNo);
        this.baseMapper.updateById(wmsWrk);
@@ -139,6 +152,7 @@
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(101); // 101.出库
@@ -174,4 +188,91 @@
            throw new CoolException(wmsWrk.getSourceLocNo() + "库位不是在库状态");
        }
    }
    //库位移转
    @Override
    @Transactional
    public void locMove(WmsWrk wmsWrk, Long userId) {
        String sourceLocNo = wmsWrk.getSourceLocNo();
        String locNo = wmsWrk.getLocNo();
        LocMast sourceLoc = locMastService.selectById(sourceLocNo);
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
        if (Cools.isEmpty(sourceLoc)){
            throw new CoolException("未找到库位");
        }
        LocMast loc = locMastService.selectById(locNo);
        if (Cools.isEmpty(loc)){
            throw new CoolException("未找到库位");
        }
        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
            throw new CoolException("移转库位属于不同堆垛机");
        }
        Date now = new Date();
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        wmsWrk.setWrkNo(workNo);
        this.baseMapper.updateById(wmsWrk);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setWmsWrkNo(wmsWrk.getWmsWrkNo());//WMS任务号
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(11); // 入出库状态: 11.库格移载
        wrkMast.setIoPri(10D);
        wrkMast.setCrnNo(sourceLoc.getCrnNo());
        wrkMast.setSourceLocNo(sourceLocNo); // 源库位
        wrkMast.setLocNo(locNo); // 目标库位
        wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板
        wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 工作档明细保存
        for (LocDetl locDetl : locDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(now);
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
        }
        // 修改源库位状态
        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
            sourceLoc.setLocSts("R"); // R.出库预约
            sourceLoc.setModiUser(userId);
            sourceLoc.setModiTime(now);
            if (!locMastService.updateById(sourceLoc)){
                throw new CoolException("更新源库位状态失败");
            }
        } else {
            throw new CoolException("源库位出库失败,状态:"+sourceLoc.getLocSts$());
        }
        // 修改目标库位状态
        if (loc.getLocSts().equals("O")) {
            loc.setLocSts("S"); // S.入库预约
            loc.setModiTime(now);
            loc.setModiUser(userId);
            if (!locMastService.updateById(loc)) {
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败,目标库位状态:"+loc.getLocSts$());
        }
    }
}