自动化立体仓库 - WMS系统
zhangc
2024-12-11 b67e67a182969b4dbfcd7eff423dca8c27f08683
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.zy.asrs.entity.AgvBasDevp;
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.service.AgvBasDevpService;
@@ -18,6 +19,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -41,22 +43,35 @@
    /*
    定时处理AGV工作档中工作状态为205.工作完成 且 (1.入库 || 53,拣料入库 || 57.盘点入库 || 10.空板入库 || 11.库格移载)的数据
    定时处理AGV工作档中工作状态为205.工作完成 且 (1.入库 || 53,拣料入库 || 57.盘点入库 || 10.空板入库 || 11.单层移库 || 12.跨层移库 || 108.自动调拨 || 109.手动调拨)的数据
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    public void excutePutwayWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 205)
                .andNew().eq("io_type",53)
                .or().eq("io_type",1)
                .or().eq("io_type",57)
                .or().eq("io_type",58)
                .or().eq("io_type",10)
                .or().eq("io_type",11)
                .or().eq("io_type",12)
                .or().eq("io_type",108)
                .or().eq("io_type",109));
                .or().eq("io_type",109)
                .or().eq("io_type",111)
                .or().eq("io_type",112)
                .or().eq("io_type",113)
                .or().eq("io_type",114)
                .or().eq("io_type",121)
        );
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.stream().forEach(agvWrkMast -> {
                agvWrkMastHandler.completedPutWayWrk(agvWrkMast);
                try{
                    agvWrkMastHandler.completedPutWayWrk(agvWrkMast);
                } catch (Exception e){
                    log.error("工作号"+agvWrkMast.getWrkNo()+"定时处理AGV工作档中工作状态为205,处理失败:===》异常原因:"+e.getMessage());
                }
            });
        }
    }
@@ -64,7 +79,8 @@
    /*
    定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库)
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    public void excuteCarryWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 206)
@@ -72,15 +88,22 @@
                .or().eq("io_type",101));
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.stream().forEach(agvWrkMast -> {
                ReturnT<String> returnT = agvWrkMastHandler.completedCarryWrk(agvWrkMast);
                try{
                    agvWrkMastHandler.completedCarryWrk(agvWrkMast);
                } catch (Exception e){
                    //e.printStackTrace();
                    log.error("工作号"+agvWrkMast.getWrkNo()+"定时处理AGV工作档中工作状态为206,处理失败:===》异常原因:"+e.getMessage());
                }
            });
        }
    }
    /*
    定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库)
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    public void excuteCarryWrk2(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 208)
@@ -88,7 +111,11 @@
                .or().eq("io_type",101));
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.stream().forEach(agvWrkMast -> {
                ReturnT<String> returnT = agvWrkMastHandler.completedCarryWrk2(agvWrkMast);
                try{
                    agvWrkMastHandler.completedCarryWrk2(agvWrkMast);
                } catch (Exception e){
                    log.error("工作号"+agvWrkMast.getWrkNo()+"定时处理AGV工作档中工作状态为206,处理失败:===》异常原因:"+e.getMessage());
                }
            });
        }
    }
@@ -98,8 +125,9 @@
    putaway:上架
    定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    public void startPutwayWrk(){
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 3000)
    public synchronized void startPutwayWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 201)
@@ -107,13 +135,43 @@
                .or().eq("io_type", 1)
                .or().eq("io_type", 10)
                .or().eq("io_type", 57)
                .or().eq("io_type", 58)
                .or().eq("io_type", 11)
                .or().eq("io_type", 12)
                .or().eq("io_type", 109)
                .or().eq("io_type", 108)).getRecords();
                .or().eq("io_type", 108)
                .or().eq("io_type", 111)
                .or().eq("io_type", 112)
                .or().eq("io_type", 113)
                .or().eq("io_type", 114)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.forEach(agvWrkMast -> {
                try{
                    agvWrkMastHandler.startPutWayWrk(agvWrkMast);
                } catch (Exception e){
                    log.error("工作号"+agvWrkMast.getWrkNo()+"定时处理AGV工作档中工作状态为201,处理失败:===》异常原因:"+e.getMessage());
                }
            });
        }
    }
    /*
    putaway:上架
    定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    public void startAllcationIn(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
                        .eq("wrk_sts", 211)
                        .andNew().eq("io_type", 112)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.forEach(agvWrkMast -> {
                try {
                    agvWrkMastHandler.startPutWayWrk(agvWrkMast);
                    agvWrkMastHandler.startAllcationIn(agvWrkMast);
                } catch (IOException e) {
                    log.error(e.getMessage());
                }
@@ -125,7 +183,8 @@
    carry:搬运,统指出库、移库、点到点搬运等
    定时处理AGV工作档中工作状态为21.生成出库任务 且(出库类型为 101.出库 || 103.拣料出库 || 11.库格移栽 || 110.空板出库 || 107.盘点出库)的数据
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 2000)
    public void startCarryWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
@@ -135,7 +194,9 @@
                        .or().eq("io_type", 103)
                        .or().eq("io_type", 11)
                        .or().eq("io_type", 110)
                        .or().eq("io_type", 107)).getRecords();
                        .or().eq("io_type", 107)
                        .or().eq("io_type", 109)
                        .or().eq("io_type", 108)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
            List<String> devNos = new ArrayList<>();
@@ -156,10 +217,17 @@
                    if(!Cools.isEmpty(agvWrkMastWorking)){
                        return;
                    }
                    agvWrkMastWorking = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
                            .eq("source_loc_no",agvWrkMast.getLocNo())
                            .le("wrk_sts",204L));
                    if(!Cools.isEmpty(agvWrkMastWorking)){
                        return;
                    }
                    agvWrkMastHandler.startPutWayWrk(agvWrkMast);
                } catch (IOException e) {
                    log.error(e.getMessage());
                } catch (Exception e) {
                    log.error("搬运,统指出库、移库、点到点搬运等"+e.getMessage());
                }
            });
        }
@@ -183,7 +251,8 @@
    /*
    自动生成空板出库任务
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    public void autoEmptyOut(){
        boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt());
        boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut());