自动化立体仓库 - WMS系统
野心家
2024-11-11 d7b8a1165db6ba6beafde9cb98b7a08afa57ed70
自动移库功能更新
3个文件已修改
2个文件已添加
468 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/AutomaticLibraryTransferScheduler.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/EmptyOutWing.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutomaticLibraryTransferHandler.java 409 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WCSReportHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutomaticLibraryTransferScheduler.java
New file
@@ -0,0 +1,43 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.handler.AutomaticLibraryTransferHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class AutomaticLibraryTransferScheduler {
    @Autowired
    private ConfigService configService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private AutomaticLibraryTransferHandler automaticLibraryTransferHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        Config config = configService.selectConfigByCode("AutomaticLibraryTransfer");
        if(config.getStatus()==0){
            return;
        }
        int WrkCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>());
        if(WrkCount>0){
            return;
        }
        if(config.getValue().equals("1")){
            automaticLibraryTransferHandler.startOne();
        }else if(config.getValue().equals("2")){
            automaticLibraryTransferHandler.startTwo();
        }else if(config.getValue().equals("3")){
            automaticLibraryTransferHandler.startThree();
        }else{
            automaticLibraryTransferHandler.startAll();
        }
        System.out.println("AutomaticLibraryTransferScheduler");
    }
}
src/main/java/com/zy/asrs/task/EmptyOutWing.java
@@ -12,6 +12,8 @@
import com.zy.asrs.service.WrkMastService;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -30,10 +32,16 @@
    private StaDescService staDescService;
    @Autowired
    private CommonService commonService;
    @Autowired
    ConfigService configService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute() {
        Config config = configService.selectConfigByCode("AutoEmpty");
        if(config.getStatus()==0){
            return;
        }
        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 110));
        if (count > 0) {
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("wrk_sts", 7));
src/main/java/com/zy/asrs/task/handler/AutomaticLibraryTransferHandler.java
New file
@@ -0,0 +1,409 @@
package com.zy.asrs.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.VersionUtils;
import com.zy.common.service.CommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@Transactional
public class AutomaticLibraryTransferHandler extends AbstractHandler<String>  {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private CommonService commonService;
    public ReturnT<String> startOne() {
        List<LocMast> locMastsF=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","F").eq("lev1",1).orderBy("bay1",false));
        List<LocMast> locMastsO=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","O").eq("lev1",1).orderBy("bay1",false));
        if(Cools.isEmpty(locMastsO)){
            log.info("自动移库没有空库位,请关闭自动库位功能");
            return FAIL;
        }
        LocMast locMast1 = locMastsO.get(0);
        LocMast locMast2 = locMastsF.get(locMastsF.size()-1);
        if(locMast2.getBay1()>locMast1.getBay1()){
            return FAIL;
        }
        String locNo=null;
        for(LocMast locMast:locMastsF){
            if(locMast.getBay1()<locMast1.getBay1()){
                locNo=locMast1.getLocNo();
            }
            //生成移库任务
            if(locNo!=null){
                // 获取工作号
                int workNo = commonService.getWorkNo(0);
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(new Date());
                wrkMast.setWrkSts(0L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                wrkMast.setIoPri(10D);
                wrkMast.setCrnNo(1);
                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                wrkMast.setLocNo(locNo); // 目标库位
                wrkMast.setFullPlt("Y"); // 满板
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setBarcode(locMast.getBarcode()); // 托盘码
                wrkMast.setLinkMis("N");
                wrkMast.setAppeTime(new Date());
                wrkMast.setModiTime(new Date());
                if (!wrkMastService.insert(wrkMast)) {
                    throw new CoolException("保存工作档失败");
                }
                // 工作档明细保存
                if (locMast.getLocSts().equals("F")) {
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                    for (LocDetl locDetl : locDetls) {
                        WrkDetl wrkDetl = new WrkDetl();
                        wrkDetl.sync(locDetl);
                        wrkDetl.setWrkNo(workNo);
                        wrkDetl.setIoTime(new Date());
                        wrkDetl.setAnfme(locDetl.getAnfme());
                        wrkDetl.setAppeTime(new Date());
                        wrkDetl.setModiTime(new Date());
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("保存工作档明细失败");
                        }
                    }
                }
                // 修改源库位状态
                if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("F")) {
                    locMast.setLocSts("R"); // R.出库预约
                    locMast.setModiTime(new Date());
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新源库位状态失败");
                    }
                } else {
                    throw new CoolException("源库位出库失败");
                }
                // 修改目标库位状态
                if (locMast1.getLocSts().equals("O")) {
                    locMast1.setLocSts("S"); // S.入库预约
                    locMast1.setModiTime(new Date());
                    if (!locMastService.updateById(locMast1)) {
                        throw new CoolException("更新目标库位状态失败");
                    }
                } else {
                    throw new CoolException("移转失败");
                }
                break;
            }
        }
        return SUCCESS;
    }
    public ReturnT<String> startTwo() {
        List<LocMast> locMastsF=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","F").eq("lev1",2).orderBy("bay1",false));
        List<LocMast> locMastsO=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","O").eq("lev1",2).orderBy("bay1",false));
        if(Cools.isEmpty(locMastsO)){
            log.info("自动移库没有空库位,请关闭自动库位功能");
            return FAIL;
        }
        LocMast locMast1 = locMastsO.get(0);
        LocMast locMast2 = locMastsF.get(locMastsF.size()-1);
        if(locMast2.getBay1()>locMast1.getBay1()){
            return FAIL;
        }
        String locNo=null;
        for(LocMast locMast:locMastsF){
            if(locMast.getBay1()<locMast1.getBay1()){
                locNo=locMast1.getLocNo();
            }
            //生成移库任务
            if(locNo!=null){
                // 获取工作号
                int workNo = commonService.getWorkNo(0);
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(new Date());
                wrkMast.setWrkSts(0L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                wrkMast.setIoPri(10D);
                wrkMast.setCrnNo(1);
                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                wrkMast.setLocNo(locNo); // 目标库位
                wrkMast.setFullPlt("Y"); // 满板
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setBarcode(locMast.getBarcode()); // 托盘码
                wrkMast.setLinkMis("N");
                wrkMast.setAppeTime(new Date());
                wrkMast.setModiTime(new Date());
                if (!wrkMastService.insert(wrkMast)) {
                    throw new CoolException("保存工作档失败");
                }
                // 工作档明细保存
                if (locMast.getLocSts().equals("F")) {
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                    for (LocDetl locDetl : locDetls) {
                        WrkDetl wrkDetl = new WrkDetl();
                        wrkDetl.setWrkNo(workNo);
                        wrkDetl.setIoTime(new Date());
                        wrkDetl.setAnfme(locDetl.getAnfme());
                        wrkDetl.setAppeTime(new Date());
                        wrkDetl.setModiTime(new Date());
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("保存工作档明细失败");
                        }
                    }
                }
                // 修改源库位状态
                if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("F")) {
                    locMast.setLocSts("R"); // R.出库预约
                    locMast.setModiTime(new Date());
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新源库位状态失败");
                    }
                } else {
                    throw new CoolException("源库位出库失败");
                }
                // 修改目标库位状态
                if (locMast1.getLocSts().equals("O")) {
                    locMast1.setLocSts("S"); // S.入库预约
                    locMast1.setModiTime(new Date());
                    if (!locMastService.updateById(locMast1)) {
                        throw new CoolException("更新目标库位状态失败");
                    }
                } else {
                    throw new CoolException("移转失败");
                }
                break;
            }
        }
        return SUCCESS;
    }
    public ReturnT<String> startThree() {
        List<LocMast> locMastsF=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","D").eq("lev1",3).orderBy("bay1",true));
        List<LocMast> locMastsO=locMastService.selectList(new EntityWrapper<LocMast>()
                .eq("loc_sts","O").eq("lev1",3).orderBy("bay1",true));
        if(Cools.isEmpty(locMastsO)){
            log.info("自动移库没有空库位,请关闭自动库位功能");
            return FAIL;
        }
        LocMast locMast1 = locMastsO.get(0);
        LocMast locMast2 = locMastsF.get(locMastsF.size()-1);
        if(locMast2.getBay1()>locMast1.getBay1()){
            return FAIL;
        }
        String locNo=null;
        for(LocMast locMast:locMastsF){
            if(locMast.getBay1()<locMast1.getBay1()){
                locNo=locMast1.getLocNo();
            }
            //生成移库任务
            if(locNo!=null){
                // 获取工作号
                int workNo = commonService.getWorkNo(0);
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(new Date());
                wrkMast.setWrkSts(0L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                wrkMast.setIoPri(10D);
                wrkMast.setCrnNo(1);
                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                wrkMast.setLocNo(locNo); // 目标库位
                wrkMast.setFullPlt("Y"); // 满板
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setBarcode(locMast.getBarcode()); // 托盘码
                wrkMast.setLinkMis("N");
                wrkMast.setAppeTime(new Date());
                wrkMast.setModiTime(new Date());
                if (!wrkMastService.insert(wrkMast)) {
                    throw new CoolException("保存工作档失败");
                }
                // 工作档明细保存
                if (locMast.getLocSts().equals("F")) {
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                    for (LocDetl locDetl : locDetls) {
                        WrkDetl wrkDetl = new WrkDetl();
                        wrkDetl.setWrkNo(workNo);
                        wrkDetl.setIoTime(new Date());
                        wrkDetl.setAnfme(locDetl.getAnfme());
                        wrkDetl.setAppeTime(new Date());
                        wrkDetl.setModiTime(new Date());
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("保存工作档明细失败");
                        }
                    }
                }
                // 修改源库位状态
                if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("F")) {
                    locMast.setLocSts("R"); // R.出库预约
                    locMast.setModiTime(new Date());
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新源库位状态失败");
                    }
                } else {
                    throw new CoolException("源库位出库失败");
                }
                // 修改目标库位状态
                if (locMast1.getLocSts().equals("O")) {
                    locMast1.setLocSts("S"); // S.入库预约
                    locMast1.setModiTime(new Date());
                    if (!locMastService.updateById(locMast1)) {
                        throw new CoolException("更新目标库位状态失败");
                    }
                } else {
                    throw new CoolException("移转失败");
                }
                break;
            }
        }
        return SUCCESS;
    }
    public ReturnT<String> startAll() {
        for(int i=1;i<=3;i++){
            boolean boo=false;
            String sts="F";
            if(i==3){
                boo=true;
                sts="D";
            }
            List<LocMast> locMastsF=locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts",sts).eq("lev1",i).orderBy("bay1",boo));
            List<LocMast> locMastsO=locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts",sts).eq("lev1",i).orderBy("bay1",boo));
            if(Cools.isEmpty(locMastsO)){
                log.info("自动移库没有空库位,请关闭自动库位功能");
                return FAIL;
            }
            LocMast locMast1 = locMastsO.get(0);
            LocMast locMast2 = locMastsF.get(locMastsF.size()-1);
            if(locMast2.getBay1()>locMast1.getBay1()){
                return FAIL;
            }
            String locNo=null;
            for(LocMast locMast:locMastsF){
                if(locMast.getBay1()<locMast1.getBay1()){
                    locNo=locMast1.getLocNo();
                }
                //生成移库任务
                if(locNo!=null){
                    // 获取工作号
                    int workNo = commonService.getWorkNo(0);
                    // 保存工作档
                    WrkMast wrkMast = new WrkMast();
                    wrkMast.setWrkNo(workNo);
                    wrkMast.setIoTime(new Date());
                    wrkMast.setWrkSts(0L); // 工作状态:11.生成出库ID
                    wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                    wrkMast.setIoPri(10D);
                    wrkMast.setCrnNo(1);
                    wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                    wrkMast.setLocNo(locNo); // 目标库位
                    wrkMast.setFullPlt("Y"); // 满板
                    wrkMast.setPicking("N"); // 拣料
                    wrkMast.setExitMk("N"); // 退出
                    wrkMast.setEmptyMk("N"); // 空板
                    wrkMast.setBarcode(locMast.getBarcode()); // 托盘码
                    wrkMast.setLinkMis("N");
                    wrkMast.setAppeTime(new Date());
                    wrkMast.setModiTime(new Date());
                    if (!wrkMastService.insert(wrkMast)) {
                        throw new CoolException("保存工作档失败");
                    }
                    // 工作档明细保存
                    if (locMast.getLocSts().equals("F")) {
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                        for (LocDetl locDetl : locDetls) {
                            WrkDetl wrkDetl = new WrkDetl();
                            wrkDetl.setWrkNo(workNo);
                            wrkDetl.setIoTime(new Date());
                            wrkDetl.setAnfme(locDetl.getAnfme());
                            wrkDetl.setAppeTime(new Date());
                            wrkDetl.setModiTime(new Date());
                            if (!wrkDetlService.insert(wrkDetl)) {
                                throw new CoolException("保存工作档明细失败");
                            }
                        }
                    }
                    // 修改源库位状态
                    if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("F")) {
                        locMast.setLocSts("R"); // R.出库预约
                        locMast.setModiTime(new Date());
                        if (!locMastService.updateById(locMast)) {
                            throw new CoolException("更新源库位状态失败");
                        }
                    } else {
                        throw new CoolException("源库位出库失败");
                    }
                    // 修改目标库位状态
                    if (locMast1.getLocSts().equals("O")) {
                        locMast1.setLocSts("S"); // S.入库预约
                        locMast1.setModiTime(new Date());
                        if (!locMastService.updateById(locMast1)) {
                            throw new CoolException("更新目标库位状态失败");
                        }
                    } else {
                        throw new CoolException("移转失败");
                    }
                    break;
                }
            }
            if (locNo !=null){
                break;
            }
        }
        return SUCCESS;
    }
}
src/main/java/com/zy/asrs/task/handler/WCSReportHandler.java
@@ -67,7 +67,11 @@
            task.setTaskType(1);//出库
            task.setStartNode(wrkMast.getSourceLocNo());//源库位
            task.setEndNode(outDevp);
        }else{//空板出库
        }else if(wrkMast.getIoType() == 11){//移库
            task.setTaskType(2);//移库
            task.setStartNode(wrkMast.getSourceLocNo());//源库位
            task.setEndNode(wrkMast.getLocNo());//目标库位
        } else {//空板出库
            task.setTaskType(1);//出库
            task.setStartNode(wrkMast.getSourceLocNo());//源库位
            task.setEndNode("100");
src/main/java/com/zy/common/web/WcsController.java
@@ -348,7 +348,7 @@
            wrkMast.setWrkSts(6L);//6.任务中断
        } else if (statusParam.getTaskStatus()==4 || statusParam.getTaskStatus()==8){
//            wrkMast.setWrkSts(7L);//6.放货完成
            if(wrkMast.getIoType()==1 || wrkMast.getIoType() == 10){
            if(wrkMast.getIoType()==1 || wrkMast.getIoType() == 10 || wrkMast.getIoType() == 11){
                wrkMast.setWrkSts(4L);//4.入库完成
            }else if (wrkMast.getIoType()==101){
                wrkMast.setWrkSts(14L);//14.已出库未确认