自动化立体仓库 - WMS系统
#
lsh
2024-06-08 21e9b4b7d15e10cec7c8ad0b14006f225e16de1c
#
3个文件已修改
2个文件已添加
382 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/LocAndStaCodeUtil.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java
@@ -297,7 +297,7 @@
            case 2:
                return "出库";
            default:
                return String.valueOf(this.ioType);
                return "未知:"+this.ioType;
        }
    }
src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java
@@ -12,6 +12,7 @@
import com.zy.asrs.service.impl.BasDevpServiceImpl;
import com.zy.asrs.service.impl.WrkMastServiceImpl;
import com.zy.asrs.task.handler.WrkMastSplitTwinInItHandler;
import com.zy.asrs.utils.LocAndStaCodeUtil;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.enums.CrnStnType;
import com.zy.common.model.enums.WrkMastExecuteType;
@@ -56,7 +57,6 @@
    private void execute() {
        for (Integer crnNo : SplitTwin_CRN_NO) {
            try {
                Date now = new Date();
                List<Integer> integers = WrkMastExecuteType.get(crnNo);
                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
                if (!Cools.isEmpty(basCrnp)) {
@@ -66,7 +66,7 @@
                    if (((basCrnp.getCrnStatusOne() > 0 && basCrnp.getCrnStatusOne() <= 3) || basCrnp.getCrnStatusOne() == 20) && basCrnp.getCrnStatusTwo() == 0) {//堆垛机工位1取货运行中 //堆垛机工位1有物待作业
                        List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4);
                        if (wrkMastSplitTwinList.size() != 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请删除无效作业!!!",1);
                            log.error("前后双工位拆分堆垛机执行作业生成,作业数量={},堆垛机号={},异常信息={},工位号={}",wrkMastSplitTwinList.size(),crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",1);
                            continue;
                        }
                        WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0);
@@ -75,7 +75,7 @@
                        }
                        wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4);
                        if (wrkMastSplitTwinList.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2);
                            log.error("前后双工位拆分堆垛机执行作业生成,作业数量={},堆垛机号={},异常信息={},工位号={}",wrkMastSplitTwinList.size(),crnNo,"存在多笔可执行作业,请维护执行作业!!!",2);
                            continue;
                        } else if (wrkMastSplitTwinList.size()==1){
                            continue;
@@ -84,53 +84,24 @@
                            case 1:
                                Integer count = basDevpService.selectWaitNecessary(integers,wrkMastSplitTwin.getWrkNo().intValue());
                                if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业
                                    continue;
                                    break;
                                }
                                if (wrkMastSplitTwin.getWrkSts()!=2){
                                    continue;
                                    break;
                                }
                                if (count==0){
                                    wrkMastSplitTwin.setWrkSts(4);
                                    wrkMastSplitTwin.setUpdateTime(now);
                                    wrkMastSplitTwinService.updateById(wrkMastSplitTwin);
                                    WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin);
                                    wrkMastSplitTwinNew.setCreateTime(now);
                                    wrkMastSplitTwinNew.setUpdateTime(now);
                                    wrkMastSplitTwinNew.setWrkSts(0);
                                    wrkMastSplitTwinNew.setWrkType(2);
                                    wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                }else {
                                    BasDevp basDevp = basDevpService.selectById(CrnStnType.getDevNo(crnNo, true));
                                    wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin);
                                    break;
                                } else {
                                    BasDevp basDevp = basDevpService.selectById(CrnStnType.getDevNo(crnNo, true));//入库站点
                                    if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
                                        continue;
                                        break;
                                    }
                                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                                    if (wrkMast.getIoType()>10 || wrkMast.getWrkSts()!=2){
                                        continue;
                                    if (wrkMast.getIoType()>100 || wrkMast.getWrkSts()!=2){
                                        break;
                                    }
                                    WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now);
                                    wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo());
                                    wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString());
                                    wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo()));
                                    wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo()));
                                    wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo()));
                                    int[] ints = new int[3];
                                    if (wrkMast.getIoType()!=11){
                                        ints = CrnStnType.get(wrkMast.getSourceStaNo());
                                        if (ints == null){
                                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo());
                                            continue;
                                        }
                                    }
                                    wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]);
                                    wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]);
                                    wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]);
                                    wrkMastSplitTwinNew.setWrkType(1);
                                    wrkMastSplitTwinNew.setIoType(1);
                                    wrkMastSplitTwinNew.setWrkSts(0);
                                    wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                    wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin,wrkMast,2);
                                }
                                break;
                            case 2:
@@ -139,45 +110,19 @@
                                    wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 11L).eq("crn_no", crnNo));
                                    if (wrkMasts.isEmpty()){
                                        if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业
                                            continue;
                                            break;
                                        }
                                        if (wrkMastSplitTwin.getWrkSts()!=2){
                                            continue;
                                            break;
                                        }
                                        wrkMastSplitTwin.setWrkSts(4);
                                        wrkMastSplitTwin.setUpdateTime(now);
                                        wrkMastSplitTwinService.updateById(wrkMastSplitTwin);
                                        WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin);
                                        wrkMastSplitTwinNew.setCreateTime(now);
                                        wrkMastSplitTwinNew.setUpdateTime(now);
                                        wrkMastSplitTwinNew.setWrkSts(0);
                                        wrkMastSplitTwinNew.setWrkType(2);
                                        wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                        wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin);
                                        break;
                                    }else {
                                        for (WrkMast wrkMast:wrkMasts){
                                            WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now);
                                            wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo());
                                            wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString());
                                            wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo()));
                                            wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo()));
                                            wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo()));
                                            int[] ints = new int[3];
                                            if (wrkMast.getIoType()!=11){
                                                ints = CrnStnType.get(wrkMast.getSourceStaNo());
                                                if (ints == null){
                                                    log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo());
                                                    continue;
                                                }
                                            }
                                            wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]);
                                            wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]);
                                            wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]);
                                            wrkMastSplitTwinNew.setWrkType(1);
                                            wrkMastSplitTwinNew.setIoType(2);
                                            wrkMastSplitTwinNew.setWrkSts(0);
                                            wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                            wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin,wrkMast,2);
                                            break;
                                        }
                                        break;
                                    }
                                }
                                break;
@@ -192,92 +137,42 @@
        }
    }
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/3 * * * * ? ")
    private void executeTwo() {
        for (Integer crnNo : SplitTwin_CRN_NO) {
            try {
                Date now = new Date();
                List<Integer> integers = WrkMastExecuteType.get(crnNo);
                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
                if (!Cools.isEmpty(basCrnp)) {
                    if (basCrnp.getWrkNo() == 0 && basCrnp.getCrnSts() != 3) {
                        continue;
                    }
                    if (basCrnp.getCrnStatusOne() == 20 && basCrnp.getCrnStatusTwo() == 0) {//堆垛机工位1有物待作业
                    if (basCrnp.getCrnStatusOne() == 20 && basCrnp.getCrnStatusTwo() == 20) {//堆垛机工位1有物待作业  工位2有物待作业
                        List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4);
                        if (wrkMastSplitTwinList.size() != 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请删除无效作业!!!",1);
                        if (wrkMastSplitTwinList.isEmpty()){
                            continue;
                        }
                        if (wrkMastSplitTwinList.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",1);
                            continue;
                        }
                        WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0);
                        if (wrkMastSplitTwin.getWrkType()!=1){
                        if (wrkMastSplitTwin.getWrkType()!=1 || wrkMastSplitTwin.getWrkSts()!=2){//工作类型 0: 未知  1: 取  2: 放  3: 取放  4: 完成
                            continue;
                        }
                        wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4);
                        if (wrkMastSplitTwinList.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2);
                            continue;
                        } else if (wrkMastSplitTwinList.size()==1){
                        List<WrkMastSplitTwin> wrkMastSplitTwinListTwo = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4);
                        if (wrkMastSplitTwinListTwo.isEmpty()){
                            continue;
                        }
                        switch (wrkMastSplitTwin.getIoType()){
                            case 1:
                                Integer count = basDevpService.selectWaitNecessary(integers,wrkMastSplitTwin.getWrkNo().intValue());
                                if (count!=0){
                                }
                                break;
                            case 2:
                                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 12L).eq("crn_no", crnNo));
                                if (wrkMasts.size()==1){
                                    wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 11L).eq("crn_no", crnNo));
                                    if (wrkMasts.isEmpty()){
                                        if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业
                                            continue;
                                        }
                                        if (wrkMastSplitTwin.getWrkSts()!=2){
                                            continue;
                                        }
                                        wrkMastSplitTwin.setWrkSts(4);
                                        wrkMastSplitTwin.setUpdateTime(now);
                                        wrkMastSplitTwinService.updateById(wrkMastSplitTwin);
                                        WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin);
                                        wrkMastSplitTwinNew.setCreateTime(now);
                                        wrkMastSplitTwinNew.setUpdateTime(now);
                                        wrkMastSplitTwinNew.setWrkSts(0);
                                        wrkMastSplitTwinNew.setWrkType(2);
                                        wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                    }else {
                                        for (WrkMast wrkMast:wrkMasts){
                                            WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,2,now);
                                            wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo());
                                            wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString());
                                            wrkMastSplitTwinNew.setStartRow(Utils.getRow(wrkMast.getSourceLocNo()));
                                            wrkMastSplitTwinNew.setStartBay(Utils.getBay(wrkMast.getSourceLocNo()));
                                            wrkMastSplitTwinNew.setStartLev(Utils.getLev(wrkMast.getSourceLocNo()));
                                            int[] ints = new int[3];
                                            if (wrkMast.getIoType()!=11){
                                                ints = CrnStnType.get(wrkMast.getSourceStaNo());
                                                if (ints == null){
                                                    log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工作号={},站点号={}",crnNo,"未知站点号",wrkMast.getSourceStaNo(),wrkMast.getSourceStaNo());
                                                    continue;
                                                }
                                            }
                                            wrkMastSplitTwinNew.setEndRow(wrkMast.getIoType()==11? Utils.getRow(wrkMast.getLocNo()): ints[0]);
                                            wrkMastSplitTwinNew.setEndBay(wrkMast.getIoType()==11? Utils.getBay(wrkMast.getLocNo()): ints[1]);
                                            wrkMastSplitTwinNew.setEndLev(wrkMast.getIoType()==11? Utils.getLev(wrkMast.getLocNo()): ints[2]);
                                            wrkMastSplitTwinNew.setWrkType(0);
                                            wrkMastSplitTwinNew.setIoType(1);
                                            wrkMastSplitTwinNew.setWrkSts(0);
                                            wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                        }
                                    }
                                }
                                break;
                            default:
                                log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={},工作类型={},工作状态={}",crnNo,"任务类型未知",1,1,1);
                        if (wrkMastSplitTwinListTwo.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请维护执行作业!!!",2);
                            continue;
                        }
                        WrkMastSplitTwin wrkMastSplitTwinTwo = wrkMastSplitTwinListTwo.get(0);
                        if (wrkMastSplitTwinTwo.getWrkType()!=1 || wrkMastSplitTwinTwo.getWrkSts()!=2){//工作类型 0: 未知  1: 取  2: 放  3: 取放  4: 完成   //工作状态 0: 初始  1: 等待取货完成  2: 取货完成待作业  3: 等待放货完成  4: 完成
                            continue;
                        }
                        wrkMastSplitTwinInItHandler.start(wrkMastSplitTwin);
                        wrkMastSplitTwinInItHandler.start(wrkMastSplitTwinTwo);
                    }
                }
            } catch (Exception e) {
src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java
@@ -1,13 +1,12 @@
package com.zy.asrs.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.WrkMastSta;
import com.zy.asrs.service.WrkMastStaService;
import com.zy.asrs.entity.WrkMastSplitTwin;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.WrkMastSplitTwinService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.LocAndStaCodeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,61 +23,67 @@
@Transactional
public class WrkMastSplitTwinInItHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastStaService wrkMastStaService;
    private WrkMastSplitTwinService wrkMastSplitTwinService;
    @Autowired
    private WrkMastService wrkMastService;
    public ReturnT<String> start(WrkMast wrkMast,BasDevp basDevp,Integer type) {
    public ReturnT<String> start(WrkMastSplitTwin wrkMastSplitTwin) {  //取货任务完成  放货
        try {
            WrkMastSta wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkMast.getWrkNo().longValue()));
            if (!Cools.isEmpty(wrkMastSta)){
                return SUCCESS;
            }
            switch (type){
                case 13://出  3:取放
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(1);      //类型 1:非空  2:空板
                        wrkMastSta1.setWrkType(3);                    //工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                        wrkMastStaService.insert(wrkMastSta1);
                    }
                    break;
                case 21://1:取(叠盘)
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(fullKM(wrkMast)? 1:2);
                        wrkMastSta1.setWrkType(1);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                        wrkMastStaService.insert(wrkMastSta1);
                    };
                    break;
                case 22://2:放(拆盘)
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(fullKM(wrkMast)? 1:2);
                        wrkMastSta1.setWrkType(5);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                        wrkMastStaService.insert(wrkMastSta1);
                    };
                    break;
                case 23://3:满取
                    if (Cools.isEmpty(wrkMastSta)){
                        WrkMastSta wrkMastSta1 = new WrkMastSta(wrkMast,new Date(),basDevp);
                        wrkMastSta1.setType(fullKM(wrkMast)? 1:2);
                        wrkMastSta1.setWrkType(5);
                        wrkMastStaService.insert(wrkMastSta1);
                    }
                default:
                    return SUCCESS;
            }
            Date now = new Date();
            WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMastSplitTwin);
            wrkMastSplitTwin.setWrkSts(4);//工作状态 0: 初始  1: 等待取货完成  2: 取货完成待作业  3: 等待放货完成  4: 完成
            wrkMastSplitTwin.setUpdateTime(now);
            wrkMastSplitTwinService.updateById(wrkMastSplitTwin);
            wrkMastSplitTwinNew.setCreateTime(now);
            wrkMastSplitTwinNew.setUpdateTime(now);
            wrkMastSplitTwinNew.setWrkSts(0);//工作状态 0: 初始  1: 等待取货完成  2: 取货完成待作业  3: 等待放货完成  4: 完成
            wrkMastSplitTwinNew.setWrkType(2);//工作类型 0: 未知  1: 取  2: 放  3: 取放  4: 完成
            wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
        }catch (Exception e){
            log.error("异常!!!"+e);
            log.error("前后双工位拆分堆垛机执行作业生成异常!!!"+e.getMessage());
            return FAIL;
        }
        return SUCCESS;
    }
    public boolean fullKM(WrkMast wrkMast){
        if (wrkMast.getIoType()!=10 && wrkMast.getIoType()!=110){
            return true;
    public ReturnT<String> start(WrkMastSplitTwin wrkMastSplitTwin,WrkMast wrkMast,Integer crnStation) {  //取货任务完成  放货
        try {
            Date now = new Date();
            WrkMastSplitTwin wrkMastSplitTwinNew = new WrkMastSplitTwin(wrkMast,crnStation,now);
            switch (wrkMastSplitTwin.getIoType()){
                case 1:
                    wrkMastSplitTwinNew.setWrkStart(wrkMast.getStaNo().toString());
                    wrkMastSplitTwinNew.setWrkEnd(wrkMast.getLocNo());
                    break;
                case 2:
                    wrkMastSplitTwinNew.setWrkStart(wrkMast.getSourceLocNo());
                    wrkMastSplitTwinNew.setWrkEnd(wrkMast.getIoType()==11? wrkMast.getLocNo():wrkMast.getSourceStaNo().toString());
                    break;
                default:
                    log.error("前后双工位拆分堆垛机执行作业生成异常!!!====>工作号={},任务类型={},任务类型异常!",wrkMastSplitTwin.getWrkNo(),wrkMastSplitTwin.getIoType$());
                    return FAIL;
            }
            wrkMastSplitTwinNew.setStartRow(LocAndStaCodeUtil.getRow(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setStartBay(LocAndStaCodeUtil.getBay(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setStartLev(LocAndStaCodeUtil.getLev(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setEndRow(LocAndStaCodeUtil.getRow(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setEndBay(LocAndStaCodeUtil.getBay(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setEndLev(LocAndStaCodeUtil.getLev(wrkMastSplitTwin.getWrkStart()));
            wrkMastSplitTwinNew.setWrkType(1);//工作类型 0: 未知  1: 取  2: 放  3: 取放  4: 完成
            wrkMastSplitTwinNew.setIoType(wrkMastSplitTwin.getIoType());//任务类型 0: 未知  1: 入库  2: 出库
            wrkMastSplitTwinNew.setWrkSts(0);//工作状态 0: 初始  1: 等待取货完成  2: 取货完成待作业  3: 等待放货完成  4: 完成
            wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
            wrkMast.setWrkSts(wrkMast.getWrkSts()+1);
            wrkMast.setAppeTime(now);
            wrkMastService.updateById(wrkMast);
        }catch (Exception e){
            log.error("前后双工位拆分堆垛机执行作业生成异常!!!"+e.getMessage());
            return FAIL;
        }
        return false;
        return SUCCESS;
    }
}
src/main/java/com/zy/asrs/utils/CodeDetectionUtil.java
New file
@@ -0,0 +1,38 @@
package com.zy.asrs.utils;
import java.util.regex.Pattern;
public class CodeDetectionUtil {
    /**
     * 检测货架码
     */
    public static boolean barcodeDetection(String barcode,int code){
        Pattern pattern = Pattern.compile("\\d{"+code+"}");//位数字
        return pattern.matcher(barcode).matches();
    }
    /**
     * 检测小车地码
     */
    public static boolean carCodeDetection(String carCode){
        return carCode.contains("_");
    }
    public static void main(String[] args) {
        System.out.println("barcodeDetection:"+"22222222===>"+barcodeDetection("22222222",7));
        System.out.println("barcodeDetection:"+"222222===>"+barcodeDetection("222222",7));
        System.out.println("barcodeDetection:"+"111===>"+barcodeDetection("111",7));
        System.out.println("barcodeDetection:"+"DB_123ss===>"+barcodeDetection("DB_123ss",7));
        System.out.println("barcodeDetection:"+"12_1231===>"+barcodeDetection("12_1231",7));
        System.out.println("barcodeDetection:"+"DB_123456===>"+barcodeDetection("DB_123456",7));
        System.out.println("carCodeDetection:"+"22222222===>"+carCodeDetection("22222222"));
        System.out.println("carCodeDetection:"+"222222===>"+carCodeDetection("222222"));
        System.out.println("carCodeDetection:"+"111===>"+carCodeDetection("111"));
        System.out.println("carCodeDetection:"+"DB_123ss===>"+carCodeDetection("DB_123ss"));
        System.out.println("carCodeDetection:"+"12_1231===>"+carCodeDetection("12_1231"));
        System.out.println("carCodeDetection:"+"DB_123456===>"+carCodeDetection("DB_123456"));
    }
}
src/main/java/com/zy/asrs/utils/LocAndStaCodeUtil.java
New file
@@ -0,0 +1,52 @@
package com.zy.asrs.utils;
import com.core.common.Cools;
import com.zy.common.model.enums.CrnStnType;
import java.util.Objects;
public class LocAndStaCodeUtil {
    /**
     * 通过库位号获取 排
     */
    public static int getRow(String parameter) {
        if (!Cools.isEmpty(parameter)) {
            if (CodeDetectionUtil.barcodeDetection(parameter,7)){
                return Integer.parseInt(parameter.substring(0, 2));
            } else if (CodeDetectionUtil.barcodeDetection(parameter,3)){
                return Objects.requireNonNull(CrnStnType.get(Integer.parseInt(parameter)))[0];
            }
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 通过库位号获取 列
     */
    public static int getBay(String parameter) {
        if (!Cools.isEmpty(parameter)) {
            if (CodeDetectionUtil.barcodeDetection(parameter,7)){
                return Integer.parseInt(parameter.substring(2, 5));
            } else if (CodeDetectionUtil.barcodeDetection(parameter,3)){
                return Objects.requireNonNull(CrnStnType.get(Integer.parseInt(parameter)))[1];
            }
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 通过库位号获取 层
     */
    public static int getLev(String parameter) {
        if (!Cools.isEmpty(parameter)) {
            if (CodeDetectionUtil.barcodeDetection(parameter,7)){
                return Integer.parseInt(parameter.substring(5, 7));
            } else if (CodeDetectionUtil.barcodeDetection(parameter,3)){
                return Objects.requireNonNull(CrnStnType.get(Integer.parseInt(parameter)))[2];
            }
        }
        throw new RuntimeException("库位解析异常");
    }
}