| | |
| | | continue; |
| | | } |
| | | short staNo; |
| | | List<BasDevp> basDevps1 = basDevpMapper.getLoading(103); |
| | | List<BasDevp> basDevps2 = basDevpMapper.getLoading(203); |
| | | |
| | | switch (wrkMast.getSourceStaNo()) { |
| | | case 104: |
| | | case 108: |
| | | staNo = 103; |
| | | List<BasDevp> basDevps1 = basDevpMapper.getLoading(103); |
| | | if (basDevps1.size()!=0){ |
| | | if (basDevps1.size()!=0 && basDevps2.size()!=0){ |
| | | continue; |
| | | } else if (basDevps1.size()!=0){ |
| | | staNo = 203; |
| | | } |
| | | List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType(103); |
| | | |
| | | List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int)staNo); |
| | | if (wrkMasts1.size()!=0){ |
| | | boolean flag = false; |
| | | for (WrkMast wrkMast1:wrkMasts1){ |
| | |
| | | case 204: |
| | | case 208: |
| | | staNo = 203; |
| | | List<BasDevp> basDevps2 = basDevpMapper.getLoading(203); |
| | | if (basDevps2.size()!=0){ |
| | | if (basDevps1.size()!=0 && basDevps2.size()!=0){ |
| | | continue; |
| | | } else if (basDevps2.size()!=0){ |
| | | staNo = 103; |
| | | } |
| | | List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType(203); |
| | | |
| | | // if (basDevps2.size()!=0){ |
| | | // continue; |
| | | // } |
| | | List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int)staNo); |
| | | if (wrkMasts2.size()!=0){ |
| | | boolean flag = false; |
| | | for (WrkMast wrkMast1:wrkMasts2){ |
| | |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | |
| | | News.info("再入库获取新库位成功,返回数据===>>", JSON.toJSON(dto)); |
| | | // // 获取目标站 |
| | | // Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | // .eq("type_no", wrkMast.getIoType() - 50) |
| | |
| | | // 更新工作档数据状态 |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 |
| | | wrkMast.setIoPri(13D); |
| | | wrkMast.setSourceStaNo(pickSta.getStaNo()); // 源站 |
| | | wrkMast.setStaNo(dto.getStaNo()); // 目标站 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | |
| | | |
| | | ledThread.errorReset(); |
| | | |
| | | if(wrkMast.getIoType()>100){ |
| | | throw new CoolException("再入库更新工作档失败,不能给PLC下发任务===>>" + wrkMast.getWrkNo()); |
| | | } |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); |
| | |
| | | // 更新工作档状态为 17.出库完成 |
| | | wrkMast.setWrkSts(17L); |
| | | wrkMast.setSteNo(0); |
| | | wrkMast.setIoPri(15D); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | | // 复位堆垛机 |
| | |
| | | if (wrkMast.getCrnNo().equals(2)){ |
| | | if (wrkMast.getStaNo() == 103 && devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) { |
| | | News.error("MainServiceImpl locToCrnStn"+"103非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | if (wrkMast.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { |
| | | News.error("MainServiceImpl locToCrnStn"+"203非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)){ |
| | |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType0(sour); |
| | | if (wrkMasts.size() > 0){ |
| | | News.error("MainServiceImpl 1028行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | //如果存在目标站300且正在执行的拣料/盘点任务,则2号堆垛机不允许做拣料/盘点出库 |
| | | WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("sta_no",300) |
| | | .last(" and wrk_sts>11 and io_type in (103,107) ")); |
| | | if(!Cools.isEmpty(one)){ |
| | | News.error("MainServiceImpl 1099行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | |
| | | Integer sour = wrkMast.getSourceStaNo(); |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour); |
| | | if (wrkMasts.size() > 0){ |
| | | News.error("MainServiceImpl 1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); |
| | | continue; |
| | | for (WrkMast one : wrkMasts){ |
| | | if(one.getWrkNo().equals(wrkMast.getWrkNo())){ |
| | | News.error("MainServiceImpl 1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | .last(" and wrk_sts < 10")); |
| | | if(one1 != null){ |
| | | News.error("{}出库任务无法作业,因入库任务已绑定小车!", wrkMast.getWrkNo()); |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | //加强判断,确保因出库导致的移库整套任务全部结束后,才能执行下一笔出库任务。只有库位完成移库回去全部任务后,才认为当组出库任务完成 |
| | |
| | | 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()))){ |
| | | continue; |
| | | return false; |
| | | } |
| | | //存在移库任务,且在移回中,且移库目标库位与待出库库位不在同一库位组,时跳出,确保移库/出库全套任务完成后,再执行下一笔 |
| | | 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()))){ |
| | | continue; |
| | | return false; |
| | | } |
| | | } |
| | | |
| | |
| | | .last(" and wrk_sts in (12,13,14,15,16)")); |
| | | if(one2==null) { |
| | | moveLocForDeepLoc(slave, shallowLoc); |
| | | } else { |
| | | News.error("浅库位阻塞时,且浅库位存在作业中出库任务!工作号={}", one2.getWrkNo()); |
| | | } |
| | | flag = true; |
| | | break; |
| | |
| | | break; |
| | | } |
| | | |
| | | //20230307 ADD,再加一次判断,当浅库位状态不为O时,不执行当前出库任务 |
| | | if(shallowLoc!=null && !shallowLoc.getLocSts().equals("O")){ |
| | | News.error("做了浅库位阻塞处理后反复判断,浅库位状态不为O ===>> 浅库位库位状态为入库预约!出库库位={},浅库位号={}", wrkMast.getSourceLocNo(), shallowLoc.getLocNo()); |
| | | flag = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if(flag){ |
| | | continue; |
| | | return false; |
| | | } |
| | | |
| | | // 工作档状态判断 |
| | |
| | | && !deepLoc.getLocSts().equals("O") |
| | | && (waitWrkMast!=null && waitWrkMast.getWrkSts()<18)){ |
| | | News.error("移库再回库时,深库位组深库位状态为作业中 ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts()); |
| | | if(waitWrkMast.getIoPri()<9999) {//调高优先级 |
| | | waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 1); |
| | | wrkMastService.updateById(waitWrkMast); |
| | | } |
| | | flag = true; |
| | | break; |
| | | } |
| | |
| | | } |
| | | } |
| | | break; |
| | | // } else { |
| | | // LocMast curLoc = locMastService.selectById(locNo); |
| | | // if(curLoc != null && curLoc.getLocSts().equals("O")){ |
| | | // |
| | | // } |
| | | } |
| | | } |
| | | } |
| | |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { return; } |
| | | if(steProtocol.getLoad() == 1){ |
| | | News.error("小车上方有货,无法下发任务===>>{}", steNo); |
| | | return; |
| | | } |
| | | if (steProtocol.isIdle() && steProtocol.getLoad() == 0) { |
| | | // 堆垛机空闲 |
| | | if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) { |
| | |
| | | crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | |
| | | 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()); |
| | | // 修改工作档状态 3.小车待搬 => 4.迁入小车 |
| | | // 修改工作档状态 3.小车待搬 => 6.小车待入 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setWrkSts(6L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | News.error("修改工作档状态 3.小车待搬 => 4.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | News.error("修改工作档状态 3.小车待搬 => 6.小车待入 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } else { |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改穿梭车运行中排列层 |
| | | steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); |
| | | // 修改工作档状态 3.小车待搬 => 4.迁入小车 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | News.error("修改工作档状态 3.小车待搬 => 4.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | } |
| | | } |
| | | // 出库搬 |
| | |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setSteNo(wrkMast.getSteNo()); // 穿梭车编号 |
| | | steCommand.setTaskNo(9999); // 工作号 |
| | | steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 任务模式: 去近点 等待堆垛机叉取 |
| | | steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 任务模式: 去待机位避让 |
| | | // steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); |
| | | // steCommand.setBay(steProtocol.getBay()); |
| | | // steCommand.setLev(steProtocol.getLev()); |
| | |
| | | String locSts = ""; |
| | | // 库位移转判断是否为空板移转 |
| | | if (wrkMast.getEmptyMk().equals("N")) { |
| | | locSts = "F"; |
| | | locSts = "R"; |
| | | // 转移库存明细数据: 库存号 由工作档源库位变为目标库位 |
| | | if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { |
| | | News.error("库位移转 ===>> 转移库存明细数据失败;[源库位={}],[目标库位={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); |
| | |
| | | } |
| | | ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); |
| | | ledCommand.setStaNo(wrkMast.getStaNo()); |
| | | ledCommand.setBarcode(wrkMast.getBarcode()); |
| | | if (wrkMast.getIoType() != 110) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); |
| | | wrkDetls.forEach(wrkDetl -> { |
| | |
| | | boolean success = true; |
| | | List<String> insideLoc = Utils.getGroupInsideLoc(one.getLocNo()); |
| | | for (String inside : insideLoc) { |
| | | if (locMastService.selectById(inside).getLocSts().equals("P") |
| | | LocMast locMast = locMastService.selectById(inside); |
| | | if(Cools.isEmpty(locMast)){ |
| | | continue; |
| | | } |
| | | if (locMast.getLocSts().equals("P") |
| | | || locMastService.selectById(inside).getLocSts().equals("R") |
| | | || locMastService.selectById(inside).getLocSts().equals("S") |
| | | || locMastService.selectById(inside).getLocSts().equals("Q")) { |