| | |
| | | * 演示模式启动 |
| | | */ |
| | | public boolean crnStnDEMOOpen1() { |
| | | int selectCount = taskWrkService.selectCount(new EntityWrapper<TaskWrk>()); |
| | | if (selectCount>0) { |
| | | return false; |
| | | } |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { |
| | | continue; |
| | | try{ |
| | | int selectCount = taskWrkService.selectCount(new EntityWrapper<TaskWrk>()); |
| | | if (selectCount>0) { |
| | | return false; |
| | | } |
| | | BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); |
| | | if (basCrnp == null) { |
| | | log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); |
| | | continue; |
| | | } |
| | | |
| | | if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "存在其它堆垛机开启演示模式!"); |
| | | continue; |
| | | } |
| | | |
| | | CrnSlave crnSlave = new CrnSlave(crn); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机巷道号异常!"); |
| | | continue; |
| | | } |
| | | |
| | | if (!crn.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | | if (crnOther.getId().equals(crnProtocol.getLaneNo())) { |
| | | crnSlave.updateCrnInStn(crnOther); |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | try{ |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | for (String locNo : crnProtocol.getLocMastDemoList()){ |
| | | LocMast locMast = locMastService.selectByLocNo(locNo); |
| | | TaskCreateParam taskCreateParam = new TaskCreateParam(crnSlave,locMast); |
| | | taskCreateParam.setStartPointSta(crnProtocol.getStaIntDemo()); |
| | | taskCreateParam.setTargetPointSta(crnProtocol.getStaOutDemo()); |
| | | openService.taskCreate(taskCreateParam); |
| | | } |
| | | BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); |
| | | if (basCrnp == null) { |
| | | log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); |
| | | continue; |
| | | } |
| | | |
| | | return true; |
| | | if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "存在其它堆垛机开启演示模式!"); |
| | | continue; |
| | | } |
| | | // |
| | | CrnSlave crnSlave = new CrnSlave(crn); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机巷道号异常!"); |
| | | continue; |
| | | } |
| | | |
| | | if (!crn.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | | if (crnOther.getId().equals(crnProtocol.getLaneNo())) { |
| | | crnSlave.updateCrnInStn(crnOther); |
| | | } |
| | | } |
| | | } |
| | | for (String locNo : crnProtocol.getLocMastDemoList()){ |
| | | LocMast locMast = locMastService.selectByLocNo(locNo); |
| | | TaskCreateParam taskCreateParam = new TaskCreateParam(crnSlave,locMast); |
| | | taskCreateParam.setStartPointSta(crnProtocol.getStaIntDemo()); |
| | | taskCreateParam.setTargetPointSta(crnProtocol.getStaOutDemo()); |
| | | openService.taskCreate(taskCreateParam); |
| | | } |
| | | } catch (Exception e) { |
| | | CrnErrCache.updateCrnErr(crn.getId(), "演示模式生成任务异常!"); |
| | | continue; |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | return false; |
| | | } |
| | |
| | | this.crnStnToLocDemo(crn, crnProtocol); // 入库 |
| | | crnProtocol.setLastIo("O"); |
| | | } else if (basCrnp.getOutEnable().equals("Y")) { |
| | | this.locToCrnStnDemo(crn, crnProtocol); // 出库 |
| | | if (!Cools.isEmpty(basCrnp.getHpMk()) && basCrnp.getHpMk().equals("Y")) { |
| | | this.locToCrnStnDemo(crn, crnProtocol); // 出库 |
| | | } |
| | | crnProtocol.setLastIo("I"); |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (crnProtocol.getLastIo().equals("O")) { |
| | | if (basCrnp.getOutEnable().equals("Y")) { |
| | | this.locToCrnStnDemo(crn, crnProtocol); // 出库 |
| | | if (!Cools.isEmpty(basCrnp.getHpMk()) && basCrnp.getHpMk().equals("Y")) { |
| | | this.locToCrnStnDemo(crn, crnProtocol); // 出库 |
| | | } |
| | | crnProtocol.setLastIo("I"); |
| | | } else if (basCrnp.getInEnable().equals("Y")) { |
| | | this.crnStnToLocDemo(crn, crnProtocol); // 入库 |
| | |
| | | continue; |
| | | } |
| | | log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); |
| | | // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); |
| | | staProtocol.setWorkNo(taskWrk.getWrkNo()); |
| | | staProtocol.setStaNo(BarcodeUtils.getStaNo(staProtocol.getSiteId())); |
| | | boolean offer = false; |
| | |
| | | log.error("下发输送线任务失败:异常:" + e); |
| | | log.error("下发输送线任务失败:异常:offer:" + offer); |
| | | } |
| | | // JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r)); |
| | | if (offer) { |
| | | log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); |
| | | Date now = new Date(); |
| | | // taskWrk.setStatus(TaskStatusType.OVER3.id); |
| | | taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id); |
| | | |
| | | taskWrk.setWrkSts(2); |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setCompleteTime(now); |
| | | taskWrkService.updateById(taskWrk); |
| | | } else { |
| | | log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); |
| | | // log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public synchronized void taskStartDemo() { |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | try { |
| | | if (rgvDetection(rgvSlave)) { |
| | | String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true)); |
| | | boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave); |
| | | if (basDevpPositions.isEmpty()) { |
| | | log.error("获取所有站点信息异常"); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常"); |
| | | } catch (Exception e2){ |
| | | } |
| | | continue; |
| | | } |
| | | List<TaskWrk> taskWrkList = new ArrayList<>(); |
| | | List<Integer> staList = new ArrayList<>(); |
| | | for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) { |
| | | TaskWrk taskWrk = deviceDetection(inSta); |
| | | if (taskWrk != null) { |
| | | if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue; |
| | | taskWrkList.add(taskWrk); |
| | | staList.add(inSta.getStaNo()); |
| | | } |
| | | } |
| | | |
| | | if (taskWrkList.isEmpty() || staList.isEmpty()) continue; |
| | | |
| | | boolean sign = false; |
| | | |
| | | if (!sign){ |
| | | //可用区域就近取货 |
| | | //就近排序 |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId()); |
| | | List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions); |
| | | // 半边区域内取货任务 |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败===》异常信息:{}", e.getMessage()); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败"); |
| | | } catch (Exception e2){ |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 执行对工作档的完成操作 |
| | | */ |
| | | public void storeFinishedDemo() throws InterruptedException { |
| | | for (CrnSlave crnSlave : slaveProperties.getCrn()) { |
| | | try{ |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { |
| | | continue; |
| | | } |
| | | |
| | | BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId()); |
| | | if (basCrnp == null) { |
| | | log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | |
| | | CrnSlave crn = new CrnSlave(crnSlave); |
| | | if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){ |
| | | CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "堆垛机巷道号异常!"); |
| | | continue; |
| | | } |
| | | |
| | | if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) { |
| | | for (CrnSlave crnOther : slaveProperties.getCrn()) { |
| | | if (crnOther.getId().equals(crnProtocol.getLaneNo())) { |
| | | crn.updateCrnInStn(crnOther); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | //获取入库待确认工作档 |
| | | TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorkingDemo(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue()); |
| | | if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) { |
| | | log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},巷道号={},工作号={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | |
| | | crnThread.setResetFlag(true); |
| | | |
| | | if (!Cools.isEmpty(taskWrk)) { |
| | | if (taskWrk.getIoType() == 4 && taskWrk.getWrkSts() == 3) { |
| | | taskWrk.setWrkSts(11);//入库完成 |
| | | taskWrk.setStatus(TaskStatusType.RECEIVE.id);//接收 |
| | | if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")) { |
| | | taskWrk.setWrkSts(4); |
| | | taskWrk.setStatus(TaskStatusType.OVER.id); |
| | | } |
| | | //更新库位状态 |
| | | LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint()); |
| | | locMast.setLocSts("R");//F.在库 |
| | | if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")) { |
| | | locMast.setLocSts("F");//F.在库 |
| | | } |
| | | locMast.setBarcode(taskWrk.getBarcode());//托盘码 |
| | | locMast.setModiTime(now); |
| | | locMast.setModiUser(9999L); |
| | | locMastService.updateById(locMast); |
| | | } else if (taskWrk.getIoType() == 4 && taskWrk.getWrkSts() == 12) { |
| | | taskWrk.setWrkSts(13);//出库完成 |
| | | taskWrk.setStatus(TaskStatusType.RECEIVE.id);//接收 |
| | | //更新库位状态 |
| | | LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); |
| | | locMast.setLocSts("S");//O.空库位 |
| | | locMast.setBarcode(taskWrk.getBarcode());//托盘码 |
| | | locMast.setModiTime(now); |
| | | locMast.setModiUser(9999L); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setCompleteTime(now); |
| | | taskWrkService.updateById(taskWrk); |
| | | |
| | | } |
| | | |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("堆垛机执行对工作档的完成操作失败 ===>> [id:{}] [error:{}]", crnSlave.getId(), e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |