|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  | if(!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | //                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); | 
|---|
|  |  |  | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { | 
|---|
|  |  |  | if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9995); | 
|---|
|  |  |  | staProtocol.setStaNo(inSta.getBackSta().shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | 
|---|
|  |  |  | // plc 处理 | 
|---|
|  |  |  | barcodeThread.setBarcode(""); | 
|---|
|  |  |  | staProtocol.setWorkNo(dto.getWorkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(Utils.getStaNoConvertCentreOther3(dto.getStaNo(),inSta.getStaNo()).shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(Utils.getStaNoConvertCentreOther3(dto.getStaNo(), inSta.getStaNo()).shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ledThread.errorReset(); | 
|---|
|  |  |  | 
|---|
|  |  |  | String errorMsg = barcode + "托盘识别异常,请先进行组托!"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (code == 500 || code == 1000){ | 
|---|
|  |  |  | if (inSta.getStaNo().equals(103)){ | 
|---|
|  |  |  | staProtocol.setWorkNo((short)9996); | 
|---|
|  |  |  | staProtocol.setStaNo((short)203); | 
|---|
|  |  |  | } else if (code == 500 || code == 1000) { | 
|---|
|  |  |  | if (inSta.getStaNo().equals(103)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9996); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 203); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (inSta.getStaNo().equals(203)){ | 
|---|
|  |  |  | staProtocol.setWorkNo((short)9996); | 
|---|
|  |  |  | staProtocol.setStaNo((short)103); | 
|---|
|  |  |  | }if (inSta.getStaNo().equals(113)){ | 
|---|
|  |  |  | staProtocol.setWorkNo((short)9995); | 
|---|
|  |  |  | staProtocol.setStaNo((short)114); | 
|---|
|  |  |  | }else if (inSta.getStaNo().equals(213)){ | 
|---|
|  |  |  | staProtocol.setWorkNo((short)9995); | 
|---|
|  |  |  | staProtocol.setStaNo((short)214); | 
|---|
|  |  |  | if (inSta.getStaNo().equals(203)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9996); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 103); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (inSta.getStaNo().equals(113)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9995); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 114); | 
|---|
|  |  |  | } else if (inSta.getStaNo().equals(213)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9995); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 214); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | String data = jsonObject.getString("data"); | 
|---|
|  |  |  | String msg = jsonObject.getString("msg"); | 
|---|
|  |  |  | if (code == 500){ | 
|---|
|  |  |  | if (code == 500) { | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg ="入库站:" + staProtocol.getStaNo() + "---" + barcode + "检索库位失败,请检查库存剩余。===>>" + data + "--" + msg; | 
|---|
|  |  |  | String errorMsg = "入库站:" + staProtocol.getStaNo() + "---" + barcode + "检索库位失败,请检查库存剩余。===>>" + data + "--" + msg; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (code == 1000){ | 
|---|
|  |  |  | } else if (code == 1000) { | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg ="入库站:" + staProtocol.getStaNo() + "---" + barcode + "需要换入库站。"; | 
|---|
|  |  |  | String errorMsg = "入库站:" + staProtocol.getStaNo() + "---" + barcode + "需要换入库站。"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | // 判断重复工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); | 
|---|
|  |  |  | if (wrkMast == null) { continue; } | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 拣料、并板、盘点再入库 【第1阶段】 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick0(){ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick0() { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickOutSta()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | case 104: | 
|---|
|  |  |  | case 108: | 
|---|
|  |  |  | staNo = 103; | 
|---|
|  |  |  | if (basDevps1.size()!=0 && basDevps2.size()!=0){ | 
|---|
|  |  |  | if (basDevps1.size() != 0 && basDevps2.size() != 0) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int)staNo); | 
|---|
|  |  |  | if (wrkMasts1.size()!=0){ | 
|---|
|  |  |  | List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int) staNo); | 
|---|
|  |  |  | if (wrkMasts1.size() != 0) { | 
|---|
|  |  |  | boolean flag = false; | 
|---|
|  |  |  | for (WrkMast wrkMast1:wrkMasts1){ | 
|---|
|  |  |  | if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())){ | 
|---|
|  |  |  | for (WrkMast wrkMast1 : wrkMasts1) { | 
|---|
|  |  |  | if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())) { | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (flag)  { | 
|---|
|  |  |  | News.error("MainServiceImpl  324行"+"104站点存在货物,捡料盘点货物暂时不重新入库!!!"); | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | News.error("MainServiceImpl  324行" + "104站点存在货物,捡料盘点货物暂时不重新入库!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | case 204: | 
|---|
|  |  |  | case 208: | 
|---|
|  |  |  | staNo = 203; | 
|---|
|  |  |  | if (basDevps1.size()!=0 && basDevps2.size()!=0){ | 
|---|
|  |  |  | if (basDevps1.size() != 0 && basDevps2.size() != 0) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                            if (basDevps2.size()!=0){ | 
|---|
|  |  |  | //                                continue; | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int)staNo); | 
|---|
|  |  |  | if (wrkMasts2.size()!=0){ | 
|---|
|  |  |  | List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int) staNo); | 
|---|
|  |  |  | if (wrkMasts2.size() != 0) { | 
|---|
|  |  |  | boolean flag = false; | 
|---|
|  |  |  | for (WrkMast wrkMast1:wrkMasts2){ | 
|---|
|  |  |  | if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())){ | 
|---|
|  |  |  | for (WrkMast wrkMast1 : wrkMasts2) { | 
|---|
|  |  |  | if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())) { | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (flag)  { | 
|---|
|  |  |  | News.error("MainServiceImpl  346行"+"204站点存在货物,捡料盘点货物暂时不重新入库!!!"); | 
|---|
|  |  |  | if (flag && devpThread.getStation().get(204).isLoading()) { | 
|---|
|  |  |  | News.error("MainServiceImpl  346行" + "204站点存在货物,捡料盘点货物暂时不重新入库!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(staNo); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | if (staProtocol.getStaNo().equals(300)){ | 
|---|
|  |  |  | if (staProtocol.getStaNo().equals(300)) { | 
|---|
|  |  |  | BasDevp basDevp = basDevpMapper.selectByDevNo(300); | 
|---|
|  |  |  | basDevp.setWrkNo1(wrkMast.getWrkNo()); | 
|---|
|  |  |  | basDevpService.selectById(basDevp); | 
|---|
|  |  |  | 
|---|
|  |  |  | * 拣料、并板、盘点再入库【第2阶段】 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick1(){ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick1() { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickInSta()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | // 0 - 9990 或者 9996 | 
|---|
|  |  |  | && ((staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) || staProtocol.getWorkNo() == 9996) | 
|---|
|  |  |  | && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue()) | 
|---|
|  |  |  | && staProtocol.isPakMk()){ | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.getWorkNo() == 9996) { | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  | if(!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | News.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); | 
|---|
|  |  |  | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { | 
|---|
|  |  |  | if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9995); | 
|---|
|  |  |  | staProtocol.setStaNo(pickSta.getBackSta().shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) { | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | errorMsg = "当前拣料任务请移动至103站"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (ledThread != null) {MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));} | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 条码设备处理 | 
|---|
|  |  |  | barcodeThread.setBarcode(""); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(wrkMast.getIoType()>100){ | 
|---|
|  |  |  | if (wrkMast.getIoType() > 100) { | 
|---|
|  |  |  | throw new CoolException("再入库更新工作档失败,不能给PLC下发任务===>>" + wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新站点信息 且 下发plc命令 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | if (staProtocol.getStaNo().equals(300)){ | 
|---|
|  |  |  | if (staProtocol.getStaNo().equals(300)) { | 
|---|
|  |  |  | BasDevp basDevp = basDevpMapper.selectByDevNo(300); | 
|---|
|  |  |  | basDevp.setWrkNo1(wrkMast.getWrkNo()); | 
|---|
|  |  |  | basDevpService.selectById(basDevp); | 
|---|
|  |  |  | 
|---|
|  |  |  | //                        && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.getWorkNo() > 0 | 
|---|
|  |  |  | && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue()) | 
|---|
|  |  |  | && staProtocol.isPakMk()){ | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); | 
|---|
|  |  |  | if(Cools.isEmpty(wrkMast)){ | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast)) { | 
|---|
|  |  |  | News.error("拣料/盘点转全板,任务号工作档不存在===>>[任务号:{}]", staProtocol.getWorkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType() != 101) { continue; } | 
|---|
|  |  |  | if (wrkMast.getIoType() != 101) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //拣料转全板默认出库站100站,当100站有物时,目标改200站 | 
|---|
|  |  |  | Integer staNo = 100; | 
|---|
|  |  |  | 
|---|
|  |  |  | // 查询工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (crnSlave.getId()!=2){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (crnSlave.getId() != 2) { | 
|---|
|  |  |  | // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast onlyWrkNo = wrkMastMapper.selectByOnlyWrkNo(crnProtocol.getTaskNo().intValue()); | 
|---|
|  |  |  | if (Cools.isEmpty(onlyWrkNo) && (crnStn.getStaNo()  == 112 || crnStn.getStaNo() == 212)){ | 
|---|
|  |  |  | if (Cools.isEmpty(onlyWrkNo) && (crnStn.getStaNo() == 112 || crnStn.getStaNo() == 212)) { | 
|---|
|  |  |  | //  判断堆垛机状态等待确认 | 
|---|
|  |  |  | if (crnProtocol.modeType == CrnModeType.AUTO | 
|---|
|  |  |  | && crnProtocol.statusType == CrnStatusType.WAITING | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME | 
|---|
|  |  |  | && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,工作号:"+crnProtocol.getTaskNo()+";执行堆垛机号:"+crnSlave.getId()+";接驳放货位:"+crnStn.getStaNo()+";接驳行走目标站:"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo())); | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,工作号:" + crnProtocol.getTaskNo() + ";执行堆垛机号:" + crnSlave.getId() + ";接驳放货位:" + crnStn.getStaNo() + ";接驳行走目标站:" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo())); | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | News.error("new867===>"+crnProtocol.getTaskNo()); | 
|---|
|  |  |  | News.error("new867===>"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString()); | 
|---|
|  |  |  | News.error("new867===>" + crnProtocol.getTaskNo()); | 
|---|
|  |  |  | News.error("new867===>" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString()); | 
|---|
|  |  |  | staProtocol.setWorkNo(crnProtocol.getTaskNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(onlyWrkNo) || | 
|---|
|  |  |  | ((onlyWrkNo.getStaNo()!=114 && onlyWrkNo.getStaNo()!=214 && | 
|---|
|  |  |  | onlyWrkNo.getSourceStaNo()!=114 && onlyWrkNo.getSourceStaNo()!=214) | 
|---|
|  |  |  | ((onlyWrkNo.getStaNo() != 114 && onlyWrkNo.getStaNo() != 214 && | 
|---|
|  |  |  | onlyWrkNo.getSourceStaNo() != 114 && onlyWrkNo.getSourceStaNo() != 214) | 
|---|
|  |  |  | && | 
|---|
|  |  |  | (onlyWrkNo.getStaNo()!=113 && onlyWrkNo.getStaNo()!=213 && | 
|---|
|  |  |  | onlyWrkNo.getSourceStaNo()!=113 && onlyWrkNo.getSourceStaNo()!=213)) | 
|---|
|  |  |  | ){ | 
|---|
|  |  |  | (onlyWrkNo.getStaNo() != 113 && onlyWrkNo.getStaNo() != 213 && | 
|---|
|  |  |  | onlyWrkNo.getSourceStaNo() != 113 && onlyWrkNo.getSourceStaNo() != 213)) | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //  判断堆垛机状态等待确认 | 
|---|
|  |  |  | 
|---|
|  |  |  | && crnProtocol.statusType == CrnStatusType.WAITING | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME | 
|---|
|  |  |  | && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,工作号:"+crnProtocol.getTaskNo()+";执行堆垛机号:"+crnSlave.getId()+";接驳放货位:"+crnStn.getStaNo()+";接驳行走目标站:"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo())); | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,工作号:" + crnProtocol.getTaskNo() + ";执行堆垛机号:" + crnSlave.getId() + ";接驳放货位:" + crnStn.getStaNo() + ";接驳行走目标站:" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo())); | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | News.error("new867===>"+crnProtocol.getTaskNo()); | 
|---|
|  |  |  | News.error("new867===>"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString()); | 
|---|
|  |  |  | News.error("new867===>" + crnProtocol.getTaskNo()); | 
|---|
|  |  |  | News.error("new867===>" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString()); | 
|---|
|  |  |  | staProtocol.setWorkNo(crnProtocol.getTaskNo()); | 
|---|
|  |  |  | staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,异常:"+e.getMessage()); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务完成,异常:" + e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | News.error("new902===>"+crnProtocol.getCrnNo().toString()); | 
|---|
|  |  |  | News.error("new902===>"+wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).toString()); | 
|---|
|  |  |  | News.error("new902===>" + crnProtocol.getCrnNo().toString()); | 
|---|
|  |  |  | News.error("new902===>" + wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).toString()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).shortValue()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入出库  ===>>  堆垛机入出库作业下发 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnIoExecute(){ | 
|---|
|  |  |  | public synchronized void crnIoExecute() { | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { continue; } | 
|---|
|  |  |  | if (crnProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); | 
|---|
|  |  |  | if (basCrnp == null) { | 
|---|
|  |  |  | News.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入库  ===>>  堆垛机站到库位 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { | 
|---|
|  |  |  | boolean flag = false; | 
|---|
|  |  |  | // 获取堆垛机入库站信息 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取工作状态为 2,3,4,5,6 的入库工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); | 
|---|
|  |  |  | if(null == wrkMast){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | WrkMast onlyWrkNo = wrkMastMapper.selectByOnlyWrkNo(staProtocol.getWorkNo().intValue()); | 
|---|
|  |  |  | if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo()==2 && onlyWrkNo.getWrkSts()==2 && crnProtocol.getCrnNo()!=2 && (onlyWrkNo.getIoType()==1 || onlyWrkNo.getIoType()==10)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo() == 2 && onlyWrkNo.getWrkSts() == 2 && crnProtocol.getCrnNo() != 2 && (onlyWrkNo.getIoType() == 1 || onlyWrkNo.getIoType() == 10)) { | 
|---|
|  |  |  | //                News.error("{}站点查询无待入库数据 工作号={}", crnStn.getStaNo(), staProtocol.getWorkNo()); | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()){ | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //  判断堆垛机状态等待确认 | 
|---|
|  |  |  | if (crnProtocol.modeType == CrnModeType.AUTO | 
|---|
|  |  |  | && crnProtocol.statusType == CrnStatusType.IDLE | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay()!=(short)4) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,工作号:"+staProtocol.getWorkNo()+";执行堆垛机号:"+slave.getId()+";接驳取货位:"+crnStn.getStaNo()+";接驳放货位:"+staProtocol.getSiteId()); | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay() != (short) 4) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,工作号:" + staProtocol.getWorkNo() + ";执行堆垛机号:" + slave.getId() + ";接驳取货位:" + crnStn.getStaNo() + ";接驳放货位:" + staProtocol.getSiteId()); | 
|---|
|  |  |  | // 堆垛机接驳任务命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo()==2 && onlyWrkNo.getWrkSts()>16 && crnProtocol.getCrnNo()!=2 && onlyWrkNo.getIoType()>100){ | 
|---|
|  |  |  | } else if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo() == 2 && onlyWrkNo.getWrkSts() > 16 && crnProtocol.getCrnNo() != 2 && onlyWrkNo.getIoType() > 100) { | 
|---|
|  |  |  | //                News.error("{}站点查询无待入库数据 工作号={}", crnStn.getStaNo(), staProtocol.getWorkNo()); | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()){ | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //  判断堆垛机状态等待确认 | 
|---|
|  |  |  | if (crnProtocol.modeType == CrnModeType.AUTO | 
|---|
|  |  |  | && crnProtocol.statusType == CrnStatusType.IDLE | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay()==(short)4) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,工作号:"+staProtocol.getWorkNo()+";执行堆垛机号:"+slave.getId()+";接驳取货位:"+crnStn.getStaNo()+";接驳放货位:"+staProtocol.getSiteId()); | 
|---|
|  |  |  | && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay() == (short) 4) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,工作号:" + staProtocol.getWorkNo() + ";执行堆垛机号:" + slave.getId() + ";接驳取货位:" + crnStn.getStaNo() + ";接驳放货位:" + staProtocol.getSiteId()); | 
|---|
|  |  |  | // 堆垛机接驳任务命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
|---|
|  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,异常:"+e.getMessage()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.info("堆垛机接驳任务执行,异常:" + e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 入库深库位是否有非F、D、X库位进行校验 ( Q、P、R、S) | 
|---|
|  |  |  | if (wrkMastMapper.selectShallowLoc(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)),Integer.parseInt(wrkMast.getLocNo().substring(2, 5)),Integer.parseInt(wrkMast.getLocNo().substring(5, 7)))!=null){ | 
|---|
|  |  |  | if (wrkMastMapper.selectShallowLoc(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)), Integer.parseInt(wrkMast.getLocNo().substring(2, 5)), Integer.parseInt(wrkMast.getLocNo().substring(5, 7))) != null) { | 
|---|
|  |  |  | //检查入库库位是否是在堆垛机边库位 | 
|---|
|  |  |  | ArrayList<Integer> outLoc = new ArrayList<>(); | 
|---|
|  |  |  | outLoc.add(3);outLoc.add(4);outLoc.add(11);outLoc.add(12);outLoc.add(18);outLoc.add(19); | 
|---|
|  |  |  | outLoc.add(3); | 
|---|
|  |  |  | outLoc.add(4); | 
|---|
|  |  |  | outLoc.add(11); | 
|---|
|  |  |  | outLoc.add(12); | 
|---|
|  |  |  | outLoc.add(18); | 
|---|
|  |  |  | outLoc.add(19); | 
|---|
|  |  |  | if (!outLoc.contains(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //加强判断,只要存在移库任务,说明出库任务未完全结束,不执行入库任务 | 
|---|
|  |  |  | WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId()); | 
|---|
|  |  |  | if(!Cools.isEmpty(one)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(one)) { | 
|---|
|  |  |  | News.error("入库 ===>> 存在移库未完成任务,不能入库。移库任务号={},堆垛机号={}", one.getWrkNo(), slave.getId()); | 
|---|
|  |  |  | //                continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //入库库位不是最外层库位,判断最外层库位是否为空库位,如不是则进行移库任务 | 
|---|
|  |  |  | if(!locMastService.isOutMost(wrkMast.getLocNo())) { | 
|---|
|  |  |  | if (!locMastService.isOutMost(wrkMast.getLocNo())) { | 
|---|
|  |  |  | WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId()); | 
|---|
|  |  |  | if (wrkMastMove != null && wrkMast.getWrkNo() == 111) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否已存在小车绑定任务 | 
|---|
|  |  |  | BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo()); | 
|---|
|  |  |  | if(basSte == null) continue; | 
|---|
|  |  |  | if (basSte == null) continue; | 
|---|
|  |  |  | WrkMast one1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .eq("ste_no",basSte.getSteNo()) | 
|---|
|  |  |  | .eq("ste_no", basSte.getSteNo()) | 
|---|
|  |  |  | .last(" and wrk_sts > 10")); | 
|---|
|  |  |  | if(one1 != null){ | 
|---|
|  |  |  | if (one1 != null) { | 
|---|
|  |  |  | News.error("{}入库任务无法作业,因出库任务已绑定小车!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getWrkSts() < 3) { | 
|---|
|  |  |  | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() | 
|---|
|  |  |  | && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) { | 
|---|
|  |  |  | && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!flag) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 3L) { | 
|---|
|  |  |  | this.carMoveOut(wrkMast, steNo, crnProtocol); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 当前入库库位组没有小车 堆垛机则去站点取货入库 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 目标库位 ===>> 非最外层库位 | 
|---|
|  |  |  | // 目标库位 ===>> 非最外层库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 判断小车是否在当前组库位,如果是则将穿梭车移至最外层,等待堆垛机放货;如果不是,则堆垛机寻找穿梭车,并放置当前组最外层 | 
|---|
|  |  |  | Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 小车处于空闲 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 2L && (wrkMast.getSteNo() == null || wrkMast.getSteNo() == 0)) { | 
|---|
|  |  |  | // 寻找当前堆垛机对应的小车 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 堆垛机搬运小车 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 3L) { | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0){ | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号",wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) { | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 出库  ===>>  库位到堆垛机站 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | Collections.shuffle(slave.getCrnOutStn()); | 
|---|
|  |  |  | for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { | 
|---|
|  |  |  | // 获取工作状态为11,12,13,14,15, 16(生成出库ID)的出库工作档 | 
|---|
|  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | * 100、200存在进行中的盘点任务,则不执行盘点任务 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | if (wrkMast.getIoType().equals(107)){ | 
|---|
|  |  |  | Integer countPan = wrkMastMapper.selectWrkStsAndIoType107Count(wrkMast.getSourceStaNo(),wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (countPan > 0){ | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn 1271行"+"盘点出库跳过,存在进行中可能堵塞任务数{}个",countPan); | 
|---|
|  |  |  | if (wrkMast.getIoType().equals(107)) { | 
|---|
|  |  |  | Integer countPan = wrkMastMapper.selectWrkStsAndIoType107Count(wrkMast.getSourceStaNo(), wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (countPan > 0) { | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn 1271行" + "盘点出库跳过,存在进行中可能堵塞任务数{}个", countPan); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getCrnNo().equals(2)){ | 
|---|
|  |  |  | if (wrkMast.getCrnNo().equals(2)) { | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 103 && devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn"+"103非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn" + "103非出库模式,禁止出库。任务号:{}!!!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn"+"203非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn" + "203非出库模式,禁止出库。任务号:{}!!!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 113 && devpThread.ioModeOf3F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn"+"113非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn" + "113非出库模式,禁止出库。任务号:{}!!!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 213 && devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn"+"213非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); | 
|---|
|  |  |  | News.error("MainServiceImpl  locToCrnStn" + "213非出库模式,禁止出库。任务号:{}!!!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)){ | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)) { | 
|---|
|  |  |  | Integer sour = wrkMast.getSourceStaNo(); | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType0(sour); | 
|---|
|  |  |  | if (wrkMasts.size() > 0){ | 
|---|
|  |  |  | News.error("MainServiceImpl  1300行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); | 
|---|
|  |  |  | if (wrkMasts.size() > 0) { | 
|---|
|  |  |  | News.error("MainServiceImpl  1300行" + "存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //如果存在目标站300且正在执行的拣料/盘点任务,则2号堆垛机不允许做拣料/盘点出库 | 
|---|
|  |  |  | WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .eq("sta_no",300) | 
|---|
|  |  |  | .eq("sta_no", 300) | 
|---|
|  |  |  | .last(" and wrk_sts>11 and io_type in (103,107) ")); | 
|---|
|  |  |  | if(!Cools.isEmpty(one)){ | 
|---|
|  |  |  | News.error("MainServiceImpl  1309行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); | 
|---|
|  |  |  | if (!Cools.isEmpty(one)) { | 
|---|
|  |  |  | News.error("MainServiceImpl  1309行" + "存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101){ | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101) { | 
|---|
|  |  |  | Integer sour = wrkMast.getSourceStaNo(); | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour); | 
|---|
|  |  |  | if (wrkMasts.size() > 0){ | 
|---|
|  |  |  | for (WrkMast one : wrkMasts){ | 
|---|
|  |  |  | if(one.getWrkNo().equals(wrkMast.getWrkNo())){ | 
|---|
|  |  |  | News.error("MainServiceImpl  1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); | 
|---|
|  |  |  | if (wrkMasts.size() > 0) { | 
|---|
|  |  |  | for (WrkMast one : wrkMasts) { | 
|---|
|  |  |  | if (one.getWrkNo().equals(wrkMast.getWrkNo())) { | 
|---|
|  |  |  | News.error("MainServiceImpl  1028行" + "204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否已存在小车绑定任务 | 
|---|
|  |  |  | BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo()); | 
|---|
|  |  |  | if(basSte == null) continue; | 
|---|
|  |  |  | if (basSte == null) continue; | 
|---|
|  |  |  | WrkMast one1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .eq("ste_no",basSte.getSteNo()) | 
|---|
|  |  |  | .eq("ste_no", basSte.getSteNo()) | 
|---|
|  |  |  | .last(" and wrk_sts < 10")); | 
|---|
|  |  |  | if(one1 != null){ | 
|---|
|  |  |  | if (one1 != null) { | 
|---|
|  |  |  | News.error("{}出库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //加强判断,确保因出库导致的移库整套任务全部结束后,才能执行下一笔出库任务。只有库位完成移库回去全部任务后,才认为当组出库任务完成 | 
|---|
|  |  |  | WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId()); | 
|---|
|  |  |  | if(!Cools.isEmpty(one)){ | 
|---|
|  |  |  | if (!Cools.isEmpty(one)) { | 
|---|
|  |  |  | //存在移库任务,且在移出中,且移库源库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔 | 
|---|
|  |  |  | if(one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo()) | 
|---|
|  |  |  | if (one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo()) | 
|---|
|  |  |  | || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getSourceLocNo()) | 
|---|
|  |  |  | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))){ | 
|---|
|  |  |  | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //存在移库任务,且在移回中,且移库目标库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔 | 
|---|
|  |  |  | if(one.getWrkSts() < 11  && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo()) | 
|---|
|  |  |  | if (one.getWrkSts() < 11 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo()) | 
|---|
|  |  |  | || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getLocNo()) | 
|---|
|  |  |  | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))){ | 
|---|
|  |  |  | || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //出库库位不是最外层库位,判断最外层库位是否为空库位,如不是则进行移库任务 | 
|---|
|  |  |  | boolean flag = false; | 
|---|
|  |  |  | if(!locMastService.isOutMost(wrkMast.getSourceLocNo())) { | 
|---|
|  |  |  | if (!locMastService.isOutMost(wrkMast.getSourceLocNo())) { | 
|---|
|  |  |  | WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId()); | 
|---|
|  |  |  | if (wrkMastMove != null && wrkMast.getWrkNo() == 111) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | // 浅库位在作业中 | 
|---|
|  |  |  | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { | 
|---|
|  |  |  | if (Cools.isEmpty(waitWrkMast)){ | 
|---|
|  |  |  | if (Cools.isEmpty(waitWrkMast)) { | 
|---|
|  |  |  | News.error("库位异常"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | if (waitWrkMast.getIoType() != 11 || waitWrkMast.getWrkSts() != 17){ | 
|---|
|  |  |  | if(waitWrkMast.getIoPri()<=9980.0){ | 
|---|
|  |  |  | waitWrkMast.setIoPri(waitWrkMast.getIoPri()+10.0); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (waitWrkMast.getIoType() != 11 || waitWrkMast.getWrkSts() != 17) { | 
|---|
|  |  |  | if (waitWrkMast.getIoPri() <= 9980.0) { | 
|---|
|  |  |  | waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 10.0); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | waitWrkMast.setIoPri(9999d); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                                        if (wrkMast.getIoPri()>23.0){ | 
|---|
|  |  |  | //                                            wrkMast.setIoPri(wrkMast.getIoPri()-10.0); | 
|---|
|  |  |  | //                                        }else { | 
|---|
|  |  |  | wrkMast.setIoPri(15.0d); | 
|---|
|  |  |  | wrkMast.setIoPri(15.0d); | 
|---|
|  |  |  | //                                        } | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast)==0){ | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.error("调整优先级失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMastMapper.updateById(waitWrkMast)==0){ | 
|---|
|  |  |  | if (wrkMastMapper.updateById(waitWrkMast) == 0) { | 
|---|
|  |  |  | News.error("调整优先级失败"); | 
|---|
|  |  |  | }else if (waitWrkMast.getWrkSts() != 17){ | 
|---|
|  |  |  | } else if (waitWrkMast.getWrkSts() != 17) { | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 浅库位组有货,且没有在作业中 | 
|---|
|  |  |  | // 浅库位组有货,且没有在作业中 | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | if (null == waitWrkMast) { | 
|---|
|  |  |  | // 生成一笔移库任务工作档、改变浅库位的源库/目标库 库位状态 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 工作档状态判断 | 
|---|
|  |  |  | if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null){ | 
|---|
|  |  |  | if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { | 
|---|
|  |  |  | News.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取源库位信息 | 
|---|
|  |  |  | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) { | 
|---|
|  |  |  | if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) { | 
|---|
|  |  |  | News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断堆垛机出库站状态 | 
|---|
|  |  |  | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y") | 
|---|
|  |  |  | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") | 
|---|
|  |  |  | && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 不是最外层库位,需要使用穿梭车搬运后,再堆垛机出库 | 
|---|
|  |  |  | // 不是最外层库位,需要使用穿梭车搬运后,再堆垛机出库 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 当前组库位是否有穿梭车 | 
|---|
|  |  |  | Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 给穿梭车下发命令 让其将货物挪至堆垛机搬运点 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); | 
|---|
|  |  |  | steCommand.setBay(steProtocol.getBay()); | 
|---|
|  |  |  | steCommand.setLev(steProtocol.getLev()); | 
|---|
|  |  |  | steCommand.setMemo("11==>14小车搬出库任务,任务号"+wrkMast.getWrkNo()+""); | 
|---|
|  |  |  | steCommand.setMemo("11==>14小车搬出库任务,任务号" + wrkMast.getWrkNo() + ""); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { | 
|---|
|  |  |  | News.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand)); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | // 没有小车 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) { | 
|---|
|  |  |  | // 寻找最近的小车 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 堆垛机搬运小车 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 12L) { | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0) { | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号",wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) { | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库位移转 NEW | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void locToLoc1(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized void locToLoc1(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | // 获取工作档信息 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否已存在小车绑定任务 | 
|---|
|  |  |  | BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo()); | 
|---|
|  |  |  | if(basSte == null) return; | 
|---|
|  |  |  | if (basSte == null) return; | 
|---|
|  |  |  | WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .eq("ste_no",basSte.getSteNo()) | 
|---|
|  |  |  | .eq("ste_no", basSte.getSteNo()) | 
|---|
|  |  |  | .last(" and io_type != 11 and wrk_sts < 10")); | 
|---|
|  |  |  | if(one != null){ | 
|---|
|  |  |  | if (one != null) { | 
|---|
|  |  |  | News.error("{}移库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 给穿梭车下发命令 让其将货物挪至堆垛机搬运点 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库位移转(高频移库,io_type=111) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void locToLoc111(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized void locToLoc111(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | // 获取工作档信息 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectLocMove111(slave.getId()); | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 判断是否已存在小车绑定任务 | 
|---|
|  |  |  | BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo()); | 
|---|
|  |  |  | if(basSte == null) return; | 
|---|
|  |  |  | if (basSte == null) return; | 
|---|
|  |  |  | WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .eq("ste_no",basSte.getSteNo()) | 
|---|
|  |  |  | .eq("ste_no", basSte.getSteNo()) | 
|---|
|  |  |  | .last(" and io_type != 111 and wrk_sts < 10")); | 
|---|
|  |  |  | if(one != null){ | 
|---|
|  |  |  | if (one != null) { | 
|---|
|  |  |  | News.error("{}移库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库位移转,回原库位 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void locToLoc17(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized void locToLoc17(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | // 获取工作档信息 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectLocMove17(slave.getId()); | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer lev = Utils.getLev(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String locNo = Utils.append(row, bay, lev); | 
|---|
|  |  |  | String[] deeplocs  = Utils.getDeepLocs(locNo); | 
|---|
|  |  |  | if(!Cools.isEmpty(deeplocs)){ | 
|---|
|  |  |  | String[] deeplocs = Utils.getDeepLocs(locNo); | 
|---|
|  |  |  | if (!Cools.isEmpty(deeplocs)) { | 
|---|
|  |  |  | boolean ret = false; | 
|---|
|  |  |  | for(String deepLocNo : deeplocs) { | 
|---|
|  |  |  | for (String deepLocNo : deeplocs) { | 
|---|
|  |  |  | LocMast deepLoc = locMastService.selectById(deepLocNo); | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(deepLocNo); | 
|---|
|  |  |  | if(deepLoc != null && !deepLoc.getLocSts().equals("F") | 
|---|
|  |  |  | if (deepLoc != null && !deepLoc.getLocSts().equals("F") | 
|---|
|  |  |  | && !deepLoc.getLocSts().equals("D") | 
|---|
|  |  |  | && !deepLoc.getLocSts().equals("O") | 
|---|
|  |  |  | && (waitWrkMast!=null && waitWrkMast.getWrkSts()<18)){ | 
|---|
|  |  |  | && (waitWrkMast != null && waitWrkMast.getWrkSts() < 18)) { | 
|---|
|  |  |  | News.error("移库再回库时,深库位组深库位状态为作业中 ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts()); | 
|---|
|  |  |  | if(waitWrkMast.getIoPri()<9999) {//调高优先级 | 
|---|
|  |  |  | if (waitWrkMast.getIoPri() < 9999) {//调高优先级 | 
|---|
|  |  |  | waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 1); | 
|---|
|  |  |  | wrkMastService.updateById(waitWrkMast); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | flag = true; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(deepLoc != null && deepLoc.getLocSts().equals("O")){ | 
|---|
|  |  |  | if (deepLoc != null && deepLoc.getLocSts().equals("O")) { | 
|---|
|  |  |  | //修改移库工作档 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(wrkMast.getLocNo()); | 
|---|
|  |  |  | wrkMast.setIoPri((double)9999); | 
|---|
|  |  |  | wrkMast.setIoPri((double) 9999); | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); | 
|---|
|  |  |  | wrkMast.setLocNo(deepLocNo); | 
|---|
|  |  |  | wrkMast.setSteNo(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("修改工作档状态 17.移库完成 => 2.移库再入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(deepLoc.getLocSts().equals("O")){ | 
|---|
|  |  |  | if (deepLoc.getLocSts().equals("O")) { | 
|---|
|  |  |  | deepLoc.setLocSts("S"); // S.入库预约 | 
|---|
|  |  |  | deepLoc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(deepLoc)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | if(sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")){ | 
|---|
|  |  |  | if (sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | sourceLoc.setLocSts("R"); // R.出库预约 | 
|---|
|  |  |  | sourceLoc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(sourceLoc)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(ret == false && !flag){//深库位都不为O | 
|---|
|  |  |  | if (ret == false && !flag) {//深库位都不为O | 
|---|
|  |  |  | LocMast curLoc = locMastService.selectById(locNo); | 
|---|
|  |  |  | if(curLoc != null && curLoc.getLocSts().equals("O")){ | 
|---|
|  |  |  | if (curLoc != null && curLoc.getLocSts().equals("O")) { | 
|---|
|  |  |  | //修改移库工作档 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(wrkMast.getLocNo()); | 
|---|
|  |  |  | wrkMast.setIoPri((double)9999); | 
|---|
|  |  |  | wrkMast.setIoPri((double) 9999); | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); | 
|---|
|  |  |  | wrkMast.setLocNo(locNo); | 
|---|
|  |  |  | wrkMast.setSteNo(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("修改工作档状态 17.移库完成 => 2.移库再入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(curLoc.getLocSts().equals("O")){ | 
|---|
|  |  |  | if (curLoc.getLocSts().equals("O")) { | 
|---|
|  |  |  | curLoc.setLocSts("S"); // S.入库预约 | 
|---|
|  |  |  | curLoc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(curLoc)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | if(sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")){ | 
|---|
|  |  |  | if (sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | sourceLoc.setLocSts("R"); // R.出库预约 | 
|---|
|  |  |  | sourceLoc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(sourceLoc)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) { | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo()); | 
|---|
|  |  |  | //                            if(steProtocol.getLoca()==3 || steProtocol.getLoca()==4){ | 
|---|
|  |  |  | //                                //小车已经在待机位时,无需下发到待机位任务,直接更新状态微3,同时绑定小车 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 小车处于空闲 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 库位移转 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){ | 
|---|
|  |  |  | public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | // 获取工作档信息 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | 
|---|
|  |  |  | // 小车处于空闲 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 给穿梭车下发命令 让其将货物挪至堆垛机搬运点 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 小车处于空闲 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 已经存在吊车执行任务时,则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 堆垛机搬运小车 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 12L) { | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0) { | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号",wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) { | 
|---|
|  |  |  | News.error("工作号={}即将开始搬运小车但是工作档没有小车号", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol.loca))  continue; | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol.loca)) continue; | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) { | 
|---|
|  |  |  | return steProtocol.getSteNo().intValue(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol.loca)) continue; | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) { | 
|---|
|  |  |  | return steProtocol.getSteNo().intValue(); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!basSteService.updatePakMk(steNo, "Y")) { | 
|---|
|  |  |  | News.error("修改穿梭车作业状态 失败!!,穿梭车={}", steNo); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车只能绑定一笔作业中任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo); | 
|---|
|  |  |  | if(wrkMast1 != null){ | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if(steProtocol.getLoad() == 1){ | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.getLoad() == 1) { | 
|---|
|  |  |  | News.error("小车上方有货,无法下发任务===>>{}", steNo); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if( crnCommand.getSourcePosX() == crnCommand.getDestinationPosX() | 
|---|
|  |  |  | && crnCommand.getSourcePosY() == crnCommand.getDestinationPosY() | 
|---|
|  |  |  | && crnCommand.getSourcePosZ() == crnCommand.getDestinationPosZ()){ | 
|---|
|  |  |  | if (crnCommand.getSourcePosX() == crnCommand.getDestinationPosX() | 
|---|
|  |  |  | && crnCommand.getSourcePosY() == crnCommand.getDestinationPosY() | 
|---|
|  |  |  | && crnCommand.getSourcePosZ() == crnCommand.getDestinationPosZ()) { | 
|---|
|  |  |  | //打补丁,如果出现源排列层 和目标排列层完全相同时,不给堆垛机发任务,状态直接由3 ==>> 6 | 
|---|
|  |  |  | // 修改穿梭车运行中排列层 | 
|---|
|  |  |  | steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 出库搬 | 
|---|
|  |  |  | // 出库搬 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | locMast = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | // 堆垛机命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { return; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 穿梭车空闲 | 
|---|
|  |  |  | if (steProtocol.isIdle() && steProtocol.getLoad() == 0) { | 
|---|
|  |  |  | // 堆垛机空闲 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { continue; } | 
|---|
|  |  |  | if (crnProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //  状态:等待确认 并且  任务完成位 = 1 | 
|---|
|  |  |  | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | // 获取入库待确认工作档 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast == null) { continue; } | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType() != 11 && wrkMast.getIoType() != 111) { | 
|---|
|  |  |  | // 入库 ==>> 货物搬入库 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7){ | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7) { | 
|---|
|  |  |  | // 判断是否需要小车入库 | 
|---|
|  |  |  | if (locMastService.isOutMost(wrkMast.getLocNo())) { | 
|---|
|  |  |  | // ==> 9.入库完成 | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer steNo = wrkMast.getSteNo(); | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                            if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer steNo = wrkMast.getSteNo(); | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                        if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | // 穿梭车重新定位排列层 | 
|---|
|  |  |  | if (!steThread.confirmPos()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 移库 ===>> 堆垛机搬至目标库位组 完成 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 库位移转(高频io_type111) | 
|---|
|  |  |  | } else if(wrkMast.getIoType() == 111) { | 
|---|
|  |  |  | // 库位移转(高频io_type111) | 
|---|
|  |  |  | } else if (wrkMast.getIoType() == 111) { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 入库 ==>> 货物搬入库 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7){ | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7) { | 
|---|
|  |  |  | if (locMastService.isOutMost(wrkMast.getLocNo()) && locMastService.isOutMost(wrkMast.getSourceLocNo())) { | 
|---|
|  |  |  | // ==> 9.入库完成 | 
|---|
|  |  |  | wrkMast.setWrkSts(9L); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 库位移转 | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | // 库位移转 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 入库 ==>> 货物搬入库 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7){ | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 7) { | 
|---|
|  |  |  | // 判断是否需要小车入库 | 
|---|
|  |  |  | if (locMastService.isOutMost(wrkMast.getLocNo())) { | 
|---|
|  |  |  | // ==> 9.入库完成 | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer steNo = wrkMast.getSteNo(); | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                            if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | locSts = "D"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Cools.isEmpty(locSts)){ | 
|---|
|  |  |  | if (Cools.isEmpty(locSts)) { | 
|---|
|  |  |  | News.error("库位移转 ===>> 库存状态为空;[源库位={}],[目标库位={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("修改工作档状态 4.迁入小车 => 6.小车待入 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 入库 ===>> 迁出小车 完成 | 
|---|
|  |  |  | } else if (wrkMast.getWrkSts() == 7){ | 
|---|
|  |  |  | } else if (wrkMast.getWrkSts() == 7) { | 
|---|
|  |  |  | // 判断是否需要小车入库 | 
|---|
|  |  |  | if (locMastService.isOutMost(wrkMast.getLocNo())) { | 
|---|
|  |  |  | // ==> 9.入库完成 | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer steNo = wrkMast.getSteNo(); | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | SteCommand steCommand = new SteCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer steNo = wrkMast.getSteNo(); | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | // 穿梭车重新定位排列层 | 
|---|
|  |  |  | if (!steThread.confirmPos()) { | 
|---|
|  |  |  | News.error("{}号穿梭车重新定位失败!作业工作档任务号:{}", wrkMast.getSteNo(), wrkMast.getWrkNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取穿梭车信息 | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol.loca)) continue; | 
|---|
|  |  |  | if (steProtocol.loca==0) continue; | 
|---|
|  |  |  | if (steProtocol.getWaiting() && steProtocol.getTaskNo() == 0){ | 
|---|
|  |  |  | if (steProtocol.loca == 0) continue; | 
|---|
|  |  |  | if (steProtocol.getWaiting() && steProtocol.getTaskNo() == 0) { | 
|---|
|  |  |  | News.info("ste[id={}] 收到等待WCS确认信号,但是任务号(地址V824)为0", steProtocol.getSteNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | steThread.setResetFlag(true); | 
|---|
|  |  |  | News.info("ste[id={}]小车复位标记 25.小车去充电 ===>> 26.等待充电 成功!!,工作号={}", steProtocol.getSteNo(), wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }  else if (wrkCharge.getWrkSts() == 32) { | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 32) { | 
|---|
|  |  |  | // 32.小车走行 ===>> 33.小车待搬 | 
|---|
|  |  |  | wrkCharge.setWrkSts(33L); | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.info("ste[id={}] 执行工作档完成,任务号={}, 穿梭车状态={},工作档状态={}", | 
|---|
|  |  |  | steProtocol.getSteNo(), steProtocol.getTaskNo(), steProtocol.getStatus(), wrkMast.getWrkSts()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast == null) { continue; } | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | // 修改工作档状态 2.设备上走 => 3.小车待搬 | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0){ | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) { | 
|---|
|  |  |  | News.error("修改工作档状态 2.设备上走 => 3.小车待搬 失败!!,工作号={}   原因:工作号没小车", wrkMast.getWrkNo()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机异常信息记录 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private synchronized void recCrnErr(){ | 
|---|
|  |  |  | private synchronized void recCrnErr() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm()); | 
|---|
|  |  |  | String errName = crnError==null? "未知异常":crnError.getErrName(); | 
|---|
|  |  |  | String errName = crnError == null ? "未知异常" : crnError.getErrName(); | 
|---|
|  |  |  | BasErrLog basErrLog = new BasErrLog( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | wrkMast.getWrkNo(),    // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 无任务 | 
|---|
|  |  |  | // 无任务 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | BasErrLog latest = basErrLogService.findLatest(crn.getId()); | 
|---|
|  |  |  | // 有异常 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 记录新异常 | 
|---|
|  |  |  | if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) { | 
|---|
|  |  |  | BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm()); | 
|---|
|  |  |  | String errName = crnError==null? "未知异常":crnError.getErrName(); | 
|---|
|  |  |  | String errName = crnError == null ? "未知异常" : crnError.getErrName(); | 
|---|
|  |  |  | BasErrLog basErrLog = new BasErrLog( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | null,    // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | null,    // 源站 | 
|---|
|  |  |  | null,    // 源库位 | 
|---|
|  |  |  | null,    // 条码 | 
|---|
|  |  |  | (int)crnProtocol.getAlarm(),    // 异常码 | 
|---|
|  |  |  | (int) crnProtocol.getAlarm(),    // 异常码 | 
|---|
|  |  |  | errName,    // 异常 | 
|---|
|  |  |  | 1,    // 异常情况 | 
|---|
|  |  |  | now,    // 添加时间 | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 无异常 | 
|---|
|  |  |  | // 无异常 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 异常修复 | 
|---|
|  |  |  | if (latest != null && latest.getStatus() == 1) { | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 穿梭车异常信息记录 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void recSteErr(){ | 
|---|
|  |  |  | private void recSteErr() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | for (SteSlave ste : slaveProperties.getSte()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm()); | 
|---|
|  |  |  | String errName = steErr==null? "未知异常":steErr.getErrName(); | 
|---|
|  |  |  | String errName = steErr == null ? "未知异常" : steErr.getErrName(); | 
|---|
|  |  |  | BasSteErrLog basSteErrLog = new BasSteErrLog( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | wrkMast.getWrkNo(),    // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 记录新异常 | 
|---|
|  |  |  | if (latest == null || (latest.getErrCode() != steProtocol.getAlarm().intValue())) { | 
|---|
|  |  |  | BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm()); | 
|---|
|  |  |  | String errName = steErr==null? "未知异常":steErr.getErrName(); | 
|---|
|  |  |  | String errName = steErr == null ? "未知异常" : steErr.getErrName(); | 
|---|
|  |  |  | BasSteErrLog basSteErrLog = new BasSteErrLog( | 
|---|
|  |  |  | null,    // 编号 | 
|---|
|  |  |  | null,    // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | null,    // 源站 | 
|---|
|  |  |  | null,    // 源库位 | 
|---|
|  |  |  | null,    // 条码 | 
|---|
|  |  |  | (int)steProtocol.getAlarm(),    // 异常码 | 
|---|
|  |  |  | (int) steProtocol.getAlarm(),    // 异常码 | 
|---|
|  |  |  | errName,    // 异常 | 
|---|
|  |  |  | 1,    // 异常情况 | 
|---|
|  |  |  | now,    // 添加时间 | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 空栈板初始化入库,叉车入库站放货 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void storeEmptyPlt(){ | 
|---|
|  |  |  | public synchronized void storeEmptyPlt() { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历空板入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //20230201. 2号堆垛机有出库任务时,禁止新板入库 | 
|---|
|  |  |  | if (staProtocol.isLoading() && staProtocol.getWorkNo() == 9995) { | 
|---|
|  |  |  | if ( emptyInSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | if (emptyInSta.getStaNo() == 103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //有出库任务,退库到入库口 | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9999); | 
|---|
|  |  |  | staProtocol.setStaNo((short)100); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 100); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt"+"103为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt" + "103为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | if (emptyInSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //有出库任务,退库到入库口 | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9999); | 
|---|
|  |  |  | staProtocol.setStaNo((short)200); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 200); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt"+"203为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt" + "203为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ( emptyInSta.getStaNo()==113 && devpThread.ioModeOf3F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | if (emptyInSta.getStaNo() == 113 && devpThread.ioModeOf3F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //有出库任务,退库到入库口 | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9999); | 
|---|
|  |  |  | staProtocol.setStaNo((short)100); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 100); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt"+"113为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt" + "113为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ( emptyInSta.getStaNo()==213 && devpThread.ioModeOf4F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | if (emptyInSta.getStaNo() == 213 && devpThread.ioModeOf4F == IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | //有出库任务,退库到入库口 | 
|---|
|  |  |  | staProtocol.setWorkNo((short) 9999); | 
|---|
|  |  |  | staProtocol.setStaNo((short)200); | 
|---|
|  |  |  | staProtocol.setStaNo((short) 200); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt"+"213为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | News.error("MainServiceImpl  storeEmptyPlt" + "213为出库模式,禁止入库,退回入库口。!!!"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode()); | 
|---|
|  |  |  | if (barcodeThread != null) { | 
|---|
|  |  |  | String barcode0 = barcodeThread.getBarcode(); | 
|---|
|  |  |  | if(!Cools.isEmpty(barcode0)) { | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode0)) { | 
|---|
|  |  |  | //                            News.info("{}号条码扫描器检测条码信息:{}", emptyInSta.getBarcode(), barcode0); | 
|---|
|  |  |  | if(!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) { | 
|---|
|  |  |  | if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) { | 
|---|
|  |  |  | barcode = barcode0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void ledExecute() { | 
|---|
|  |  |  | for (LedSlave led : slaveProperties.getLed()) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 获取输送线plc线程 | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); | 
|---|
|  |  |  | // 命令集合 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取工作档数据 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); | 
|---|
|  |  |  | if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } | 
|---|
|  |  |  | if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMasts.add(wrkMast); | 
|---|
|  |  |  | // 组装命令 | 
|---|
|  |  |  | LedCommand ledCommand = new LedCommand(); | 
|---|
|  |  |  | 
|---|
|  |  |  | total = locDetl.getAnfme(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType() == 101) { | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (wrkMast.getIoType() == 107) { | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.error(e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void ledReset() { | 
|---|
|  |  |  | for (LedSlave led : slaveProperties.getLed()) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 获取输送线plc线程 | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); | 
|---|
|  |  |  | // 命令集合 | 
|---|
|  |  |  | 
|---|
|  |  |  | for (Integer staNo : led.getStaArr()) { | 
|---|
|  |  |  | // 获取叉车站点 | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (staProtocol == null) { continue; } | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (staProtocol.getWorkNo() != 0) { | 
|---|
|  |  |  | reset = false; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | //                        News.info("{}号LED复位命令下发成功!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | News.error("LED异常"+led.getId()); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.error("LED异常" + led.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | BasSte basSte = basSteService.selectById(ste.getId()); | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { continue; } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 在线 空闲   无作业标记   不在充电 | 
|---|
|  |  |  | if (steProtocol.getMode() == 0 | 
|---|
|  |  |  | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 24L) { | 
|---|
|  |  |  | // 小车行驶至充电位 | 
|---|
|  |  |  | if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) { | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 1) { continue; } | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 1) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | SteCommand steCommand = new SteCommand(); | 
|---|
|  |  |  | steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 26) { | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 0) { continue; } | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 0) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 给输送线下发充电任务 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
|---|
|  |  |  | SteChargeType steChargeType = SteChargeType.get(wrkCharge.getLocNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public List<String> crn1DemoLocs = new ArrayList<String>(); public String crn1LastLoc = ""; | 
|---|
|  |  |  | public List<String> crn2DemoLocs = new ArrayList<String>(); public String crn2LastLoc = ""; | 
|---|
|  |  |  | public List<String> crn3DemoLocs = new ArrayList<String>(); public String crn3LastLoc = ""; | 
|---|
|  |  |  | public List<String> crn1DemoLocs = new ArrayList<String>(); | 
|---|
|  |  |  | public String crn1LastLoc = ""; | 
|---|
|  |  |  | public List<String> crn2DemoLocs = new ArrayList<String>(); | 
|---|
|  |  |  | public String crn2LastLoc = ""; | 
|---|
|  |  |  | public List<String> crn3DemoLocs = new ArrayList<String>(); | 
|---|
|  |  |  | public String crn3LastLoc = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void demo() { | 
|---|
|  |  |  | if (Cools.isEmpty(crn1DemoLocs)) { | 
|---|
|  |  |  | crn1DemoLocs = locMastService.getDemoNextLoc(1); | 
|---|
|  |  |  | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | BasSte basSte = basSteService.selectById(steNo); | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { continue; } | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当穿梭车空闲 并且 无任务时才继续执行 | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | if (null == steProtocol) { return; } | 
|---|
|  |  |  | if (null == steProtocol) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (steProtocol.isIdle()) { | 
|---|
|  |  |  | // 31.生成演示ID | 
|---|
|  |  |  | if (wrkCharge.getWrkSts() == 31L) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!wrkChargeService.updateById(wrkCharge)) { | 
|---|
|  |  |  | News.error("修改演示任务{}工作档 31.生成演示ID ==>> 32.小车走行 失败!", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 33.小车待搬 | 
|---|
|  |  |  | // 33.小车待搬 | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 33L) { | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkCharge.getLocNo()); | 
|---|
|  |  |  | // 堆垛机命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("修改演示任务{}工作档 33.小车待搬 => 34.吊车搬运 失败!", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 35.小车就绪 | 
|---|
|  |  |  | // 35.小车就绪 | 
|---|
|  |  |  | } else if (wrkCharge.getWrkSts() == 35L) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int steNo = steProtocol.getSteNo().intValue(); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 因深库位阻塞,对浅库位进行移转 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){ | 
|---|
|  |  |  | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | String rows = ""; | 
|---|
|  |  |  | switch (crn.getId()){ | 
|---|
|  |  |  | switch (crn.getId()) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | rows = "3,4"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LocMast loc = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(shallowLoc.getLocType2() == 3 || shallowLoc.getLocType2() == 1){ | 
|---|
|  |  |  | if (shallowLoc.getLocType2() == 3 || shallowLoc.getLocType2() == 1) { | 
|---|
|  |  |  | //低频混直接出库 | 
|---|
|  |  |  | // 获取工作号 | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast.setIoPri((double) 9999); | 
|---|
|  |  |  | wrkMast.setCrnNo(crn.getId()); | 
|---|
|  |  |  | wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位 | 
|---|
|  |  |  | if (shallowLoc.getCrnNo()==1){ | 
|---|
|  |  |  | if (shallowLoc.getCrnNo() == 1) { | 
|---|
|  |  |  | wrkMast.setStaNo(100); | 
|---|
|  |  |  | wrkMast.setSourceStaNo(108); | 
|---|
|  |  |  | }else if (shallowLoc.getCrnNo()==2){ | 
|---|
|  |  |  | } else if (shallowLoc.getCrnNo() == 2) { | 
|---|
|  |  |  | wrkMast.setStaNo(100); | 
|---|
|  |  |  | wrkMast.setSourceStaNo(104); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | wrkMast.setStaNo(200); | 
|---|
|  |  |  | wrkMast.setSourceStaNo(208); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<LocMast> locs = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no",crn.getId()) | 
|---|
|  |  |  | .eq("loc_type1",shallowLoc.getLocType1()) | 
|---|
|  |  |  | .eq("loc_type2",shallowLoc.getLocType2()) | 
|---|
|  |  |  | .eq("loc_sts","O") | 
|---|
|  |  |  | .last(" and row1 in (" + rows + ") order by bay1,lev1")); | 
|---|
|  |  |  | for (LocMast one : locs){ | 
|---|
|  |  |  | if(Utils.getGroupRow(one.getLocNo()) != Utils.getGroupRow(shallowLoc.getLocNo()) | 
|---|
|  |  |  | || Utils.getBay(one.getLocNo()) != Utils.getBay(shallowLoc.getLocNo()) | 
|---|
|  |  |  | || Utils.getLev(one.getLocNo()) != Utils.getLev(shallowLoc.getLocNo())){ | 
|---|
|  |  |  | List<LocMast> locs = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", crn.getId()) | 
|---|
|  |  |  | .eq("loc_type1", shallowLoc.getLocType1()) | 
|---|
|  |  |  | .eq("loc_type2", shallowLoc.getLocType2()) | 
|---|
|  |  |  | .eq("loc_sts", "O") | 
|---|
|  |  |  | .last(" and row1 in (" + rows + ") order by bay1,lev1")); | 
|---|
|  |  |  | for (LocMast one : locs) { | 
|---|
|  |  |  | if (Utils.getGroupRow(one.getLocNo()) != Utils.getGroupRow(shallowLoc.getLocNo()) | 
|---|
|  |  |  | || Utils.getBay(one.getLocNo()) != Utils.getBay(shallowLoc.getLocNo()) | 
|---|
|  |  |  | || Utils.getLev(one.getLocNo()) != Utils.getLev(shallowLoc.getLocNo())) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer steNo = this.hasCar(one.getLocNo()); | 
|---|
|  |  |  | if (steNo != null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (DevpSlave.Sta inSta : devp.getInSta()) { | 
|---|
|  |  |  | Integer sourceStaNo = inSta.getStaNo()==103 ? 104 : inSta.getStaNo()==113 ? 104 : 204; | 
|---|
|  |  |  | Integer sourceStaNo = inSta.getStaNo() == 103 ? 104 : inSta.getStaNo() == 113 ? 104 : 204; | 
|---|
|  |  |  | WrkMast pakout = wrkMastMapper.selectWorkingPakout(sourceStaNo); | 
|---|
|  |  |  | switch (inSta.getStaNo()) { | 
|---|
|  |  |  | case 103://1F1 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                                            && !devpThread.getStation().get(inSta.getStaNo()+1).isLoading() | 
|---|
|  |  |  | //                                            && devpThread.getStation().get(inSta.getStaNo()+1).getWorkNo()==0) { | 
|---|
|  |  |  | //                                        // 出库模式 | 
|---|
|  |  |  | devpThread.ioModeOf1F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | devpThread.ioModeOf1F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | //                                    } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | //                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading() | 
|---|
|  |  |  | //                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) { | 
|---|
|  |  |  | //                                        // 出库模式 | 
|---|
|  |  |  | devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | //                                    } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void ioConvert2F() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 根据输送线plc遍历 | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | if (devp.getId() == 1){ | 
|---|
|  |  |  | if (devp.getId() == 1) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (DevpSlave.Sta inSta : devp.getInSta()) { | 
|---|
|  |  |  | Integer staNoEnd = inSta.getStaNo()==113 ? 114 : 214; | 
|---|
|  |  |  | Integer staNoEnd = inSta.getStaNo() == 113 ? 114 : 214; | 
|---|
|  |  |  | WrkMast pakout = wrkMastMapper.selectWorkingPakoutTwoF(staNoEnd); | 
|---|
|  |  |  | boolean sign = true; | 
|---|
|  |  |  | int[] staNos = new int[3]; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (inSta.getStaNo()) { | 
|---|
|  |  |  | case 113://2F1 | 
|---|
|  |  |  | staNos = new int[]{112,113,114}; | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | staNos = new int[]{112, 113, 114}; | 
|---|
|  |  |  | for (int staNo : staNos) { | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol)) continue; | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo()>0){ | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() > 0) { | 
|---|
|  |  |  | sign = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | if (sign) { | 
|---|
|  |  |  | if (pakout != null) { | 
|---|
|  |  |  | if (devpThread.ioModeOf3F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol != null) { | 
|---|
|  |  |  | if (crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | if (crnProtocol.isStatusEnd()){ | 
|---|
|  |  |  | if (crnProtocol.isStatusEnd()) { | 
|---|
|  |  |  | // 出库模式 | 
|---|
|  |  |  | devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | }  else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 入库模式 | 
|---|
|  |  |  | devpThread.ioModeOf3F = IoModeType.PAKIN_MODE; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 213://2F2 | 
|---|
|  |  |  | staNos = new int[]{212,213,214}; | 
|---|
|  |  |  | for (int staNo : staNos){ | 
|---|
|  |  |  | staNos = new int[]{212, 213, 214}; | 
|---|
|  |  |  | for (int staNo : staNos) { | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | if (Cools.isEmpty(staProtocol)) continue; | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || staProtocol.isLoading()){ | 
|---|
|  |  |  | if (!staProtocol.isAutoing() || staProtocol.isLoading()) { | 
|---|
|  |  |  | sign = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | if (sign) { | 
|---|
|  |  |  | if (pakout != null) { | 
|---|
|  |  |  | if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) { | 
|---|
|  |  |  | // 出库切换中 | 
|---|
|  |  |  | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol != null) { | 
|---|
|  |  |  | if (crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | if (crnProtocol.isStatusEnd()){ | 
|---|
|  |  |  | if (crnProtocol.isStatusEnd()) { | 
|---|
|  |  |  | // 出库模式 | 
|---|
|  |  |  | devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE; | 
|---|
|  |  |  | }  else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 入库模式 | 
|---|
|  |  |  | devpThread.ioModeOf3F = IoModeType.PAKIN_MODE; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone); | 
|---|
|  |  |  | calendar.setTime(date); | 
|---|
|  |  |  | int hour = calendar.get(java.util.Calendar.HOUR_OF_DAY); | 
|---|
|  |  |  | if (hour>8 && hour<18){ | 
|---|
|  |  |  | if (hour > 8 && hour < 18) { | 
|---|
|  |  |  | for (SteSlave ste : slaveProperties.getSte()) { | 
|---|
|  |  |  | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); | 
|---|
|  |  |  | SteProtocol steProtocol = steThread.getSteProtocol(); | 
|---|
|  |  |  | BasSte basSte = basSteService.selectById(ste.getId()); | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { continue; } | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (Cools.isEmpty(steProtocol, basSte)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 在线 空闲   无作业标记   不在充电 | 
|---|
|  |  |  | if (steProtocol.getMode() == 0 | 
|---|
|  |  |  | || !steProtocol.statusType.equals(SteStatusType.IDLE) | 
|---|
|  |  |  | 
|---|
|  |  |  | if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { | 
|---|
|  |  |  | WrkCharge wrkCharge = wrkChargeService.selectWorking(steProtocol.getSteNo().intValue()); | 
|---|
|  |  |  | if (wrkCharge == null) { | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 1){ | 
|---|
|  |  |  | if (steProtocol.getChargeStatus() == 1) { | 
|---|
|  |  |  | SteCommand steCommand = new SteCommand(); | 
|---|
|  |  |  | steCommand.setSteNo(ste.getId()); // 穿梭车编号 | 
|---|
|  |  |  | steCommand.setTaskNo(9999); // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Ste, ste.getId(), new Task(2, steCommand))) { | 
|---|
|  |  |  | News.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", ste.getId(), JSON.toJSON(steCommand)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | News.error("自动关闭充电出错,联系管理员!"+hour+"点;"+ste.getId()+"号小车;"); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.error("自动关闭充电出错,联系管理员!" + hour + "点;" + ste.getId() + "号小车;"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|