From e28ce2a6686f46cf20fecebd661af13febba8fbc Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期五, 07 六月 2024 18:12:11 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/model/enums/CrnStnType.java                 |   57 +++++
 src/main/resources/mapper/WrkMastSplitTwinMapper.xml                    |   49 ++++
 src/main/java/com/zy/asrs/service/BasDevpService.java                   |    7 
 src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java |   84 +++++++
 src/main/java/com/zy/asrs/mapper/BasDevpMapper.java                     |    2 
 src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java          |    5 
 src/main/java/com/zy/asrs/entity/BasCrnp.java                           |   45 ++++
 src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java         |   51 ++++
 src/main/resources/mapper/BasCrnpMapper.xml                             |    3 
 src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java            |    6 
 src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java                  |   29 ++
 src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java             |    2 
 src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java |   10 
 src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java       |  290 ++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java          |    5 
 src/main/resources/mapper/BasDevpMapper.xml                             |   12 +
 16 files changed, 654 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasCrnp.java b/src/main/java/com/zy/asrs/entity/BasCrnp.java
index 73d632e..43d7092 100644
--- a/src/main/java/com/zy/asrs/entity/BasCrnp.java
+++ b/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;
     }
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java b/src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java
index ec0a4d7..2ef6006 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastSplitTwin.java
+++ b/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;
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
index 668d2ca..f5ddf09 100644
--- a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
+++ b/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);
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java
index 2b7cfc5..317d9cb 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastSplitTwinMapper.java
+++ b/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);
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java
index 3e8f21f..43ff028 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpService.java
+++ b/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);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java b/src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java
index 7f1d735..b1d584a 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastSplitTwinService.java
+++ b/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);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index fa2dd99..9f914a8 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/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);
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java
index f0b7c4d..eb9235f 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastSplitTwinServiceImpl.java
+++ b/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);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java
new file mode 100644
index 0000000..c9a66cf
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/WrkMastSplitTwinInItScheduler.java
@@ -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());
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java
index 8f96b4e..8ff7df8 100644
--- a/src/main/java/com/zy/asrs/task/WrkMastStaInItScheduler.java
+++ b/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 {
diff --git a/src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java b/src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java
new file mode 100644
index 0000000..8f879a8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/WrkMastSplitTwinInItHandler.java
@@ -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;
+    }
+}
diff --git a/src/main/java/com/zy/common/model/enums/CrnStnType.java b/src/main/java/com/zy/common/model/enums/CrnStnType.java
new file mode 100644
index 0000000..ed4ec3b
--- /dev/null
+++ b/src/main/java/com/zy/common/model/enums/CrnStnType.java
@@ -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;
+    }
+}
diff --git a/src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java b/src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java
new file mode 100644
index 0000000..716c986
--- /dev/null
+++ b/src/main/java/com/zy/common/model/enums/WrkMastExecuteType.java
@@ -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;
+    }
+}
diff --git a/src/main/resources/mapper/BasCrnpMapper.xml b/src/main/resources/mapper/BasCrnpMapper.xml
index 50d9755..f52453f 100644
--- a/src/main/resources/mapper/BasCrnpMapper.xml
+++ b/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" />
diff --git a/src/main/resources/mapper/BasDevpMapper.xml b/src/main/resources/mapper/BasDevpMapper.xml
index 7cd9d8e..9a765ab 100644
--- a/src/main/resources/mapper/BasDevpMapper.xml
+++ b/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>
diff --git a/src/main/resources/mapper/WrkMastSplitTwinMapper.xml b/src/main/resources/mapper/WrkMastSplitTwinMapper.xml
index f409abe..0a474f2 100644
--- a/src/main/resources/mapper/WrkMastSplitTwinMapper.xml
+++ b/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>

--
Gitblit v1.9.1