| | |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | private WrkMastStaMapper wrkMastStaMapper; |
| | | @Autowired |
| | | private BasRgvMapMapper basRgvMapMapper; |
| | | @Autowired |
| | | private RgvOneSignMapper rgvOneSignMapper; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = "异常:"; |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = errMsg+"前超限;"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isBackErr()) { |
| | | errMsg = errMsg+"后超限"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isHighErr()) { |
| | | errMsg = errMsg+"高超限"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isLeftErr()) { |
| | | errMsg = errMsg+"左超限"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isRightErr()) { |
| | | errMsg = errMsg+"右超限"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isWeightErr()) { |
| | | errMsg = errMsg+"超重"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isBarcodeErr()) { |
| | | errMsg = errMsg+"扫码失败"; |
| | | back = true; |
| | | } |
| | | // 退回 |
| | | if (back) { |
| | | // led 异常显示 |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errMsg)); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | // 入出库模式判断 |
| | |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { |
| | | // WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo()); |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"7"); |
| | | if (wrkMast == null) { |
| | | // 无拣料数据 |
| | | continue; |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", wrkMast.getIoType() - 50) |
| | | .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | continue; |
| | | } |
| | | |
| | | // 获取库位号 |
| | | try { |
| | | // 保存工作明细档历史档 |
| | | if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { |
| | | throw new CoolException("保存工作明细档历史档失败"); |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(wrkMast.getBarcode()); |
| | | param.setIoType(wrkMast.getIoType()); |
| | | param.setSourceStaNo(pickSta.getStaNo()); //作业站点 |
| | | param.setLocType1((short)1); |
| | | String response = ""; |
| | | log.info("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin2/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .setTimeout(15, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | } catch(Exception e){ |
| | | log.error("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | log.error("stnToCrnStnPick2===>>盘点查库位入库接口失败", e); |
| | | e.printStackTrace(); |
| | | continue; |
| | | } |
| | | // 保存工作主档历史档 |
| | | if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { |
| | | throw new CoolException("保存工作主档历史档失败"); |
| | | log.info("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | log.info("入库作业站"+pickSta.getStaNo()+"下发盘点再入库任务请求WMS返回结果===>>" + response); |
| | | if(response.equals("")) { |
| | | continue; |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // 堆垛机站点(目标站) |
| | | Integer staNo = staDesc.getCrnStn(); |
| | | // 更新工作档数据状态 |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | throw new CoolException("更新工作档数据状态失败"); |
| | | } |
| | | // 更新明细档io_time (历史档关联使用) |
| | | wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); |
| | | // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | locMast.setLocSts("Q"); |
| | | locMast.setModiTime(new Date()); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("修改库位状态失败"); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code == 200) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getStaNo())) { |
| | | log.error("任务号"+wrkMast.getWrkNo()+"盘点再入库查询库位失败===>>" + jsonObject.toJSONString()); |
| | | } else { |
| | | log.info("任务号"+wrkMast.getWrkNo()+"盘点再入库查询库位成功===>>" + jsonObject.toJSONString()); |
| | | try { |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(dto.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // ledThread.errorReset(); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | log.info("任务号"+wrkMast.getWrkNo()+"盘点/拣料再入库任务下发成功===>>" + staProtocol); |
| | | } catch (Exception e) { |
| | | log.error("盘点再入库失败===>>" + e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin2/loc/v1", JSON.toJSONString(param), response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("stnToCrnStnPick2===>>fail", e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | continue; |
| | | } |
| | | |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | |
| | | } |
| | |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3"); |
| | | |
| | | if (wrkMast == null) { |
| | | // WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); |
| | | // if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ |
| | | // WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L); |
| | | // if (Cools.isEmpty(wrkMastSta)){ |
| | | // WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); |
| | | // wrkMastSta1.setType(2); |
| | | // wrkMastSta1.setWrkType(1); |
| | | // wrkMastStaMapper.insert(wrkMastSta1); |
| | | // } |
| | | // continue; |
| | | // } |
| | | // log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); |
| | | // 无拣料数据 |
| | | continue; |
| | | } |
| | | if (staProtocol.isEmptyMk()){ |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", wrkMast.getIoType() - 50) |
| | | .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | String barcode = wrkMast.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | // 获取库位号 |
| | | try { |
| | | // 保存工作明细档历史档 |
| | | if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { |
| | | throw new CoolException("保存工作明细档历史档失败"); |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(barcode); |
| | | param.setIoType(wrkMast.getIoType()); |
| | | param.setSourceStaNo(pickSta.getStaNo()); //作业站点 |
| | | param.setLocType1((short)1); |
| | | String response = ""; |
| | | log.info("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin2/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .setTimeout(15, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | } catch(Exception e){ |
| | | log.error("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | log.error("stnToCrnStnPick2===>>盘点查库位入库接口失败", e); |
| | | e.printStackTrace(); |
| | | continue; |
| | | } |
| | | // 保存工作主档历史档 |
| | | if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { |
| | | throw new CoolException("保存工作主档历史档失败"); |
| | | log.info("入库作业站"+pickSta.getStaNo()+"盘点再入库任务请求WMS===>>参数:" + param); |
| | | log.info("入库作业站"+pickSta.getStaNo()+"下发盘点再入库任务请求WMS返回结果===>>" + response); |
| | | if(response.equals("")) { |
| | | continue; |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // 堆垛机站点(目标站) |
| | | Integer staNo = staDesc.getCrnStn(); |
| | | // 更新工作档数据状态 |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | throw new CoolException("更新工作档数据状态失败"); |
| | | } |
| | | // 更新明细档io_time (历史档关联使用) |
| | | wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); |
| | | // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | locMast.setLocSts("Q"); |
| | | locMast.setModiTime(new Date()); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("修改库位状态失败"); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code == 200) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getStaNo())) { |
| | | log.error("任务号"+wrkMast.getWrkNo()+"盘点再入库查询库位失败===>>" + jsonObject.toJSONString()); |
| | | } else { |
| | | log.info("任务号"+wrkMast.getWrkNo()+"盘点再入库查询库位成功===>>" + jsonObject.toJSONString()); |
| | | try { |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(dto.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // ledThread.errorReset(); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | log.info("任务号"+wrkMast.getWrkNo()+"盘点/拣料再入库任务下发成功===>>" + staProtocol); |
| | | } catch (Exception e) { |
| | | log.error("盘点再入库失败===>>" + e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin2/loc/v1", JSON.toJSONString(param), response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("stnToCrnStnPick2===>>fail", e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | continue; |
| | | } |
| | | |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | // // 获取目标站 |
| | | // Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | // .eq("type_no", wrkMast.getIoType() - 50) |
| | | // .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | // .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | // StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | // if (Cools.isEmpty(staDesc)) { |
| | | // log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | // continue; |
| | | // } |
| | | // |
| | | // try { |
| | | // // 保存工作明细档历史档 |
| | | // if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { |
| | | // throw new CoolException("保存工作明细档历史档失败"); |
| | | // } |
| | | // // 保存工作主档历史档 |
| | | // if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { |
| | | // throw new CoolException("保存工作主档历史档失败"); |
| | | // } |
| | | // |
| | | // Date now = new Date(); |
| | | // // 堆垛机站点(目标站) |
| | | // Integer staNo = staDesc.getCrnStn(); |
| | | // // 更新工作档数据状态 |
| | | // wrkMast.setIoTime(now); |
| | | // wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | // wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 |
| | | // wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | // wrkMast.setStaNo(staNo); // 目标站 |
| | | // wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | // wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | // wrkMast.setModiTime(now); |
| | | // if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | // throw new CoolException("更新工作档数据状态失败"); |
| | | // } |
| | | // // 更新明细档io_time (历史档关联使用) |
| | | // wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); |
| | | // // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | // LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | // locMast.setLocSts("Q"); |
| | | // locMast.setModiTime(new Date()); |
| | | // if (!locMastService.updateById(locMast)) { |
| | | // throw new CoolException("修改库位状态失败"); |
| | | // } |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // continue; |
| | | // } |
| | | // |
| | | // // 更新站点信息 且 下发plc命令 |
| | | // staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | // staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | // if (!result) { |
| | | // log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | // } |
| | | |
| | | } |
| | | |
| | |
| | | log.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); |
| | | continue; |
| | | } |
| | | //退库模式跳过118、119出库任务 |
| | | if (wrkMast.getStaNo()==118 || wrkMast.getStaNo()==119){ |
| | | RgvOneSign rgvOneSign = rgvOneSignMapper.selectOneSign(); |
| | | if (Cools.isEmpty(rgvOneSign) || rgvOneSign.getRgvOneSign()==1){ |
| | | continue; |
| | | } |
| | | } |
| | | // 获取源库位信息 |
| | | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) { |
| | |
| | | */ |
| | | public synchronized void storeEmptyPlt3() { |
| | | try{ |
| | | RgvOneSign rgvOneSign = rgvOneSignMapper.selectOneSign(); |
| | | if (Cools.isEmpty(rgvOneSign) || rgvOneSign.getRgvOneSign()==1){ |
| | | return; |
| | | } |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | // && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | && rgvProtocol.getLoaded2()==3 ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | try { |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep3(122); |
| | |
| | | */ |
| | | public synchronized void stackingCompletionDriveTray() { |
| | | try { |
| | | int[] staNos=new int[]{216,220,123};//(3个入库站点,1楼1个退货码垛站,2楼两个入库码垛站) |
| | | int[] staNos=new int[]{215,219};//(2楼两个入库码垛站) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp.getWrkNo()!=9992 || Cools.isEmpty(basDevp.getBarcode())){ |
| | | if ((basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)) || Cools.isEmpty(basDevp.getBarcode())){ |
| | | continue; |
| | | } |
| | | Integer zpallet = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", basDevp.getBarcode()).eq("status","N")); |
| | |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | | && !staProtocol.isEmptyMk() |
| | | && staProtocol.getWorkNo() == 9992 |
| | | && (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()>=9900 && basDevp.getWrkNo()<=9999)) |
| | | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { |
| | | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(staNo + 1); |
| | | int workNo = commonService.getWorkNo(5); |
| | | staProtocol.setWorkNo(workNo); |
| | | staProtocol.setStaNo(staNo + 2); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | |
| | | // 无拣料数据 |
| | | continue; |
| | | } |
| | | if (!wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){ |
| | | if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){ |
| | | continue; |
| | | } |
| | | if (wrkMast.getIoType()==101){ |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | StaProtocol staProtocol147 = devpThread.getStation().get(147); |
| | | if (staProtocol147 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol147 = staProtocol147.clone(); |
| | | } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,异常!",staNo); |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol147.isLoading()){ |
| | | log.info("{}站点有物!",staProtocol147.getSiteId()); |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | |
| | | && staProtocol.isLoading() |
| | | && !staProtocol.isEmptyMk() |
| | | ) { |
| | | |
| | | boolean result3 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | |
| | | wrkMast.setSheetNo("5"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | boolean result4 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | |
| | | }catch (Exception e){ } |
| | | basDevp135.setReportSign(2); |
| | | basDevpService.updateById(basDevp135); |
| | | staProtocol135.setWorkNo(32222); |
| | | int workNo = commonService.getWorkNo(5); |
| | | staProtocol135.setWorkNo(workNo); |
| | | staProtocol135.setStaNo(144); |
| | | devpThread.setPakMk(staProtocol135.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol135)); |
| | |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ |
| | | Thread.sleep(200); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast)){ |
| | | if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ |
| | | Thread.sleep(200); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | |
| | | /** |
| | | * 入出库 ===>> 小车作业下发 |
| | | */ |
| | | public synchronized void rgvIoExecute(Integer sign) { |
| | | public synchronized boolean rgvIoExecute(Integer sign) { |
| | | boolean rgvIoExecuteSign = false; |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // 获取小车信息 |
| | |
| | | switch (sign){ |
| | | //执行小车货物搬运任务 |
| | | case 1: |
| | | signWork = rgvRunWrkMastFullSta(); |
| | | signWork = rgvRunWrkMastFullSta(rgvSlave); |
| | | break; |
| | | //执行小车空板搬运任务 |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(); |
| | | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(); |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(); |
| | | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(); |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = qwe(); |
| | |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | for (int signCount = 1;!signWork && signCount<8;signCount++){ |
| | | switch (signCount){ |
| | | case 1://执行小车货物搬运任务 |
| | | signWork = rgvRunWrkMastFullSta(); |
| | | break; |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(); |
| | | break; |
| | | case 6:////提升 |
| | | for (int signCount = 1;!signWork && signCount<7;signCount++){ |
| | | switch (signCount){ |
| | | case 1://执行小车货物搬运任务 |
| | | signWork = rgvRunWrkMastFullSta(rgvSlave); |
| | | break; |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | default: |
| | | if (sign>6){ |
| | | rgvRunWrkMastEmptyStaAvoidance();//避让 |
| | | signWork = true; |
| | | } |
| | | break; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | }else { |
| | | continue; |
| | | } |
| | | |
| | | if (!rgvIoExecuteSign){ |
| | | rgvIoExecuteSign = signWork; |
| | | } |
| | | } |
| | | // if (!rgvIoExecuteSign){ |
| | | // if (sign>6){ |
| | | // |
| | | // } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("RGV小车任务下发报错"+e); |
| | | } |
| | | return rgvIoExecuteSign; |
| | | } |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastFullSta() { |
| | | public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) { |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3875行执行小车搬运任务下发失败"); |
| | | log.error("3875行"+e); |
| | |
| | | /** |
| | | * 执行小车搬运任务//拆盘 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPut() {//拆盘 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//拆盘 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPutFull() {//满放 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//满放 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用 |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTake() {//叠盘 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//叠盘 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTakeFull() {//满取 |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//满取 |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |