|  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  |     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.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); | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                         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; | 
 |  |  | 
 |  |  |                             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: | 
 |  |  | 
 |  |  |                                     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; | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    @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) { |