自动化立体仓库 - WMS系统
#
lsh
2024-06-07 e28ce2a6686f46cf20fecebd661af13febba8fbc
#
12个文件已修改
4个文件已添加
657 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/BasCrnp.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasDevpMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasDevpService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/enums/CrnStnType.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasCrnpMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastSplitTwinMapper.xml 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasCrnp.java
@@ -53,11 +53,32 @@
    private Integer crnSts;
    /**
     * 状态
     */
    @ApiModelProperty(value= "状态1")
    @TableField("crn_status_one")
    private Integer crnStatusOne;
    /**
     * 状态
     */
    @ApiModelProperty(value= "状态2")
    @TableField("crn_status_two")
    private Integer crnStatusTwo;
    /**
     * 工作号
     */
    @ApiModelProperty(value= "工作号")
    @TableField("wrk_no")
    private Integer wrkNo;
    /**
     * 工作号
     */
    @ApiModelProperty(value= "工作号")
    @TableField("wrk_no_two")
    private Integer wrkNoTwo;
    /**
     * 回原点
@@ -245,6 +266,22 @@
        this.crnSts = crnSts;
    }
    public Integer getCrnStatusOne() {
        return crnStatusOne;
    }
    public void setCrnStatusOne(Integer crnStatusOne) {
        this.crnStatusOne = crnStatusOne;
    }
    public Integer getCrnStatusTwo() {
        return crnStatusTwo;
    }
    public void setCrnStatusTwo(Integer crnStatusTwo) {
        this.crnStatusTwo = crnStatusTwo;
    }
    public Integer getWrkNo() {
        return wrkNo;
    }
@@ -253,6 +290,14 @@
        this.wrkNo = wrkNo;
    }
    public Integer getWrkNoTwo() {
        return wrkNoTwo;
    }
    public void setWrkNoTwo(Integer wrkNoTwo) {
        this.wrkNoTwo = wrkNoTwo;
    }
    public Integer getOrigin() {
        return origin;
    }
src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java
@@ -159,6 +159,35 @@
    public WrkMastSplitTwin() {}
    public WrkMastSplitTwin(WrkMast wrkMast,Integer crnStation,Date now) {
        this.wrkNo = wrkMast.getWrkNo().longValue();
        this.createTime = now;
        this.updateTime = now;
        this.type = crnStation; //工位
        this.lineNumber = wrkMast.getIoPri().intValue();
        this.bignTime = wrkMast.getIoTime();
        this.crnNo = wrkMast.getCrnNo();
    }
    public WrkMastSplitTwin(WrkMastSplitTwin wrkMastSplitTwin) {
        this.wrkNo = wrkMastSplitTwin.getWrkNo();
        this.createTime = wrkMastSplitTwin.getCreateTime();
        this.updateTime = wrkMastSplitTwin.getUpdateTime();
        this.type = wrkMastSplitTwin.getType();
        this.lineNumber = wrkMastSplitTwin.getLineNumber();
        this.bignTime = wrkMastSplitTwin.getBignTime();
        this.crnNo = wrkMastSplitTwin.getCrnNo();
        this.wrkStart = wrkMastSplitTwin.getWrkStart();
        this.wrkEnd = wrkMastSplitTwin.getWrkEnd();
        this.startRow = wrkMastSplitTwin.getStartRow();
        this.startBay = wrkMastSplitTwin.getStartBay();
        this.startLev = wrkMastSplitTwin.getStartLev();
        this.endRow = wrkMastSplitTwin.getEndRow();
        this.endBay = wrkMastSplitTwin.getEndBay();
        this.endLev = wrkMastSplitTwin.getEndLev();
        this.ioType = wrkMastSplitTwin.getIoType();
    }
    public WrkMastSplitTwin(Long wrkNo,Date createTime,Date updateTime,Integer type,Integer wrkSts,Integer lineNumber,Integer wrkType,Date bignTime,Integer crnNo,String wrkStart,String wrkEnd,Integer startRow,Integer startBay,Integer startLev,Integer endRow,Integer endBay,Integer endLev,Integer ioType) {
        this.wrkNo = wrkNo;
        this.createTime = createTime;
src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
@@ -15,4 +15,6 @@
    List<Integer> getAvailableInSite(@Param("typeNo") Integer typeNo);
    List<Integer> getAvailableOutSite(@Param("typeNo") Integer typeNo);
    Integer selectWaitNecessary(@Param("devNos") List<Integer> devNos,@Param("wrkNo") Integer wrkNo);
}
src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java
@@ -3,10 +3,14 @@
import com.zy.asrs.entity.WrkMastSplitTwin;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface WrkMastSplitTwinMapper extends BaseMapper<WrkMastSplitTwin> {
    List<WrkMastSplitTwin> getWrkMastSplitTwin(@Param("crnNo")Integer crnNo, @Param("type")Integer type, @Param("ioType")Integer ioType, @Param("wrkType")Integer wrkType, @Param("wrkSts")Integer wrkSts);
    List<WrkMastSplitTwin> getWrkMastSplitTwinNoComplete(@Param("crnNo")Integer crnNo, @Param("type")Integer type, @Param("ioType")Integer ioType, @Param("wrkType")Integer wrkType, @Param("wrkSts")Integer wrkSts);
}
src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -49,4 +49,11 @@
     */
    BasDevp checkSiteStatusEmpty(Integer devpNo, boolean pakin);
    /**
     * 目标站点状态检测
     * @param devNos 检测站点集合
     * @param wrkNo 排除工作号
     */
    Integer selectWaitNecessary(List<Integer> devNos,Integer wrkNo);
}
src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java
@@ -3,6 +3,9 @@
import com.zy.asrs.entity.WrkMastSplitTwin;
import com.baomidou.mybatisplus.service.IService;
public interface WrkMastSplitTwinService extends IService<WrkMastSplitTwin> {
import java.util.List;
public interface WrkMastSplitTwinService extends IService<WrkMastSplitTwin> {
    List<WrkMastSplitTwin> getWrkMastSplitTwin(Integer crnNo, Integer type, Integer ioType, Integer wrkType, Integer wrkSts);
    List<WrkMastSplitTwin> getWrkMastSplitTwinNoComplete(Integer crnNo, Integer type, Integer ioType, Integer wrkType, Integer wrkSts);
}
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -18,6 +18,11 @@
    private WrkMastService wrkMastService;
    @Override
    public Integer selectWaitNecessary(List<Integer> devNos,Integer wrkNo){
        return this.baseMapper.selectWaitNecessary(devNos,wrkNo);
    }
    @Override
    public List<Integer> getAvailableInSite() {
        return this.baseMapper.getAvailableInSite(1);
    }
src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java
@@ -6,7 +6,17 @@
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("wrkMastSplitTwinService")
public class WrkMastSplitTwinServiceImpl extends ServiceImpl<WrkMastSplitTwinMapper, WrkMastSplitTwin> implements WrkMastSplitTwinService {
    @Override
    public List<WrkMastSplitTwin> getWrkMastSplitTwin(Integer crnNo, Integer type, Integer ioType, Integer wrkType, Integer wrkSts) {
        return this.baseMapper.getWrkMastSplitTwin(crnNo, type, ioType, wrkType, wrkSts);
    }
    @Override
    public List<WrkMastSplitTwin> getWrkMastSplitTwinNoComplete(Integer crnNo, Integer type, Integer ioType, Integer wrkType, Integer wrkSts) {
        return this.baseMapper.getWrkMastSplitTwinNoComplete(crnNo, type, ioType, wrkType, wrkSts);
    }
}
src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java
New file
@@ -0,0 +1,290 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.WrkMastSplitTwin;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.WrkMastSplitTwinService;
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.Utils;
import com.zy.common.model.enums.CrnStnType;
import com.zy.common.model.enums.WrkMastExecuteType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2024.06.07
 * 亳州煜星..............以下.............亳州煜星.............前后双工位拆分堆垛机执行作业生成
 */
@Component
public class WrkMastSplitTwinInItScheduler {
    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
    @Autowired
    private WrkMastSplitTwinInItHandler wrkMastSplitTwinInItHandler;
    @Autowired
    private WrkMastSplitTwinService wrkMastSplitTwinService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private BasDevpServiceImpl basDevpService;
    public static final List<Integer> SplitTwin_CRN_NO = new ArrayList<Integer>() {{
        add(3);
        add(4);
        add(5);
    }};
    @Autowired
    private WrkMastServiceImpl wrkMastService;
    @Scheduled(cron = "0/3 * * * * ? ")
    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)) {
                    if (basCrnp.getWrkNo() == 0 && basCrnp.getCrnSts() != 3) {
                        continue;
                    }
                    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);
                            continue;
                        }
                        WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0);
                        if (wrkMastSplitTwin.getWrkType()!=1){
                            continue;
                        }
                        wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4);
                        if (wrkMastSplitTwinList.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2);
                            continue;
                        } else if (wrkMastSplitTwinList.size()==1){
                            continue;
                        }
                        switch (wrkMastSplitTwin.getIoType()){
                            case 1:
                                Integer count = basDevpService.selectWaitNecessary(integers,wrkMastSplitTwin.getWrkNo().intValue());
                                if (basCrnp.getCrnStatusOne() != 20) {//堆垛机工位1有物待作业
                                    continue;
                                }
                                if (wrkMastSplitTwin.getWrkSts()!=2){
                                    continue;
                                }
                                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));
                                    if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
                                        continue;
                                    }
                                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo()));
                                    if (wrkMast.getIoType()>10 || wrkMast.getWrkSts()!=2){
                                        continue;
                                    }
                                    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);
                                }
                                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(1);
                                            wrkMastSplitTwinNew.setIoType(2);
                                            wrkMastSplitTwinNew.setWrkSts(0);
                                            wrkMastSplitTwinService.insert(wrkMastSplitTwinNew);
                                        }
                                    }
                                }
                                break;
                            default:
                                log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={},工作类型={},工作状态={}",crnNo,"任务类型未知",1,1,1);
                        }
                    }
                }
            } catch (Exception e) {
                log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage());
            }
        }
    }
    @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有物待作业
                        List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 1, null, null, 4);
                        if (wrkMastSplitTwinList.size() != 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"不存在或者存在多笔可执行作业,请删除无效作业!!!",1);
                            continue;
                        }
                        WrkMastSplitTwin wrkMastSplitTwin = wrkMastSplitTwinList.get(0);
                        if (wrkMastSplitTwin.getWrkType()!=1){
                            continue;
                        }
                        wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwinNoComplete(crnNo, 2, null, null, 4);
                        if (wrkMastSplitTwinList.size() > 1){
                            log.error("前后双工位拆分堆垛机执行作业生成,堆垛机号={},异常信息={},工位号={}",crnNo,"存在多笔可执行作业,请删除无效作业!!!",2);
                            continue;
                        } else if (wrkMastSplitTwinList.size()==1){
                            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);
                        }
                    }
                }
            } catch (Exception e) {
                log.error("前后双工位拆分堆垛机执行作业生成失败,堆垛机号={},异常原因={}", crnNo, e.getMessage());
            }
        }
    }
}
src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java
@@ -17,7 +17,7 @@
/**
 * Created by Monkey D. Luffy on 2023.07.25
 * 徐工汉云..............以下.............上饶江铜.............自动补空板
 * 徐工汉云..............以下.............上饶江铜.............小车执行作业生成
 */
@Component
public class WrkMastStaInItScheduler {
src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java
New file
@@ -0,0 +1,84 @@
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.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
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;
/**
 * Created by Monkey D. Luffy on 2024.06.07
 * 亳州煜星..............以下.............亳州煜星.............前后双工位拆分堆垛机执行作业生成
 */
@Slf4j
@Service
@Transactional
public class WrkMastSplitTwinInItHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastStaService wrkMastStaService;
    public ReturnT<String> start(WrkMast wrkMast,BasDevp basDevp,Integer type) {
        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;
            }
        }catch (Exception e){
            log.error("异常!!!"+e);
            return FAIL;
        }
        return SUCCESS;
    }
    public boolean fullKM(WrkMast wrkMast){
        if (wrkMast.getIoType()!=10 && wrkMast.getIoType()!=110){
            return true;
        }
        return false;
    }
}
src/main/java/com/zy/common/model/enums/CrnStnType.java
New file
@@ -0,0 +1,57 @@
package com.zy.common.model.enums;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public enum CrnStnType {
    CRN_STN_261(3,261,10,1,1,true),
    CRN_STN_200(3,200,9,1,1,false),
    CRN_STN_260(4,260,12,1,1,true),
    CRN_STN_250(4,250,11,1,1,false),
    CRN_STN_259(5,259,14,1,1,true),
    CRN_STN_241(5,241,13,1,1,false)
    ;
    private final Integer CrnNo;
    private final Integer devNo;
    private final Integer row;
    private final Integer bay;
    private final Integer lev;
    private final boolean sign;
    CrnStnType(Integer CrnNo, Integer devNo,Integer row,Integer bay,Integer lev,boolean sign){
        this.CrnNo = CrnNo;
        this.devNo = devNo;
        this.row = row;
        this.bay = bay;
        this.lev = lev;
        this.sign = sign;
    }
    public static int[] get(Integer CrnNo,boolean sign) {
        for (CrnStnType type : CrnStnType.values()){
            if (type.CrnNo.equals(CrnNo) && type.sign == sign){
                return new int[]{type.row,type.bay,type.lev};
            }
        }
        return null;
    }
    public static Integer getDevNo(Integer CrnNo,boolean sign) {
        for (CrnStnType type : CrnStnType.values()){
            if (type.CrnNo.equals(CrnNo) && type.sign == sign){
                return type.devNo;
            }
        }
        return 0;
    }
    public static int[] get(Integer devNo) {
        for (CrnStnType type : CrnStnType.values()){
            if (type.devNo.equals(devNo)){
                return new int[]{type.row,type.bay,type.lev};
            }
        }
        return null;
    }
}
src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java
New file
@@ -0,0 +1,51 @@
package com.zy.common.model.enums;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public enum WrkMastExecuteType {
    DEVP_NO_CRN_THREE(3,"DEVP_NO_CRN_THREE", linearSmallToBig(1,3)),
    DEVP_NO_CRN_FOUR(4,"DEVP_NO_CRN_FOUR", linearSmallToBig(1,3)),
    DEVP_NO_CRN_FIVE(5,"DEVP_NO_CRN_FIVE", linearSmallToBig(1,3))
    ;
    private final Integer id;
    private final String code;
    private List<Integer> siteList;
    WrkMastExecuteType(Integer id,String code,List<Integer> siteList){
        this.id = id;
        this.code = code;
        this.siteList = siteList;
    }
    public static List<Integer> get(Integer id) {
        for (WrkMastExecuteType type : WrkMastExecuteType.values()){
            if (type.id.equals(id)){
                return type.siteList;
            }
        }
        return new ArrayList<>();
    }
    public static List<Integer> get(String code) {
        for (WrkMastExecuteType type : WrkMastExecuteType.values()){
            if (type.code.equals(code)){
                return type.siteList;
            }
        }
        return new ArrayList<>();
    }
    private static List<Integer> nonlinearSmallToBig(Integer[] sites){
        return new ArrayList<>(Arrays.asList(sites));
    }
    private static List<Integer> linearSmallToBig(Integer smallSta,Integer bigSta){
        List<Integer> integers = new ArrayList<>();
        for (int i = smallSta;i<bigSta;i++){
            integers.add(i);
        }
        return integers;
    }
}
src/main/resources/mapper/BasCrnpMapper.xml
@@ -8,7 +8,10 @@
        <result column="in_enable" property="inEnable" />
        <result column="out_enable" property="outEnable" />
        <result column="crn_sts" property="crnSts" />
        <result column="crn_status_one" property="crnStatusOne" />
        <result column="crn_status_two" property="crnStatusTwo" />
        <result column="wrk_no" property="wrkNo" />
        <result column="wrk_no_two" property="wrkNoTwo" />
        <result column="crn_err" property="crnErr" />
        <result column="frm_locno" property="frmLocno" />
        <result column="frm_sta" property="frmSta" />
src/main/resources/mapper/BasDevpMapper.xml
@@ -68,4 +68,16 @@
        group by abd.dev_no
    </select>
    <select id="selectWaitNecessary" resultType="java.lang.Integer">
        select count(1)
        from asr_bas_devp
        where 1=1
        and dev_no in
            <foreach item="item" collection="devNos" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        and wrk_no not is null and wrk_no!=0 and wrk_no != #{wrkNo}
    </select>
</mapper>
src/main/resources/mapper/WrkMastSplitTwinMapper.xml
@@ -26,4 +26,53 @@
    </resultMap>
    <sql id="batchSeq">
        <if test="type != null">
            and type = #{type}
        </if>
        <if test="ioType != null">
            and io_type = #{ioType}
        </if>
        <if test="wrkType != null">
            and wrk_type = #{wrkType}
        </if>
        <if test="wrkSts != null">
            and wrk_sts = #{wrkSts}
        </if>
        <if test="crnNo != null">
            and crn_no = #{crnNo}
        </if>
    </sql>
    <sql id="batchSeqNo">
        <if test="type != null">
            and type = #{type}
        </if>
        <if test="ioType != null">
            and io_type = #{ioType}
        </if>
        <if test="wrkType != null">
            and wrk_type = #{wrkType}
        </if>
        <if test="crnNo != null">
            and crn_no = #{crnNo}
        </if>
    </sql>
    <select id="getWrkMastSplitTwin" resultMap="BaseResultMap">
        select * from asr_wrk_mast_split_twin
        where 1=1
        <include refid="batchSeq"></include>
        order by line_number,id
    </select>
    <select id="getWrkMastSplitTwinNoComplete" resultMap="BaseResultMap">
        select * from asr_wrk_mast_split_twin
        where 1=1
        <if test="wrkSts != null">
            and wrk_sts != #{wrkSts}
        </if>
        <include refid="batchSeq"></include>
        order by line_number,id
    </select>
</mapper>