| | |
| | | // 遍历入库口 |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | // 获取入库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | Short workNo = staProtocol.getWorkNo(); |
| | | |
| | | //20230201. 2号堆垛机有出库任务时,禁止新板入库 |
| | | if (staProtocol.isLoading() && staProtocol.getWorkNo() == 9995) { |
| | | if ( inSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) { |
| | | //有出库任务,退库到入库口 |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo((short)100); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | News.error("MainServiceImpl generateStoreWrkFile"+"103为出库模式,禁止入库,退回入库口。!!!"); |
| | | continue; |
| | | } |
| | | if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | | //有出库任务,退库到入库口 |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo((short)200); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | News.error("MainServiceImpl generateStoreWrkFile"+"203为出库模式,禁止入库,退回入库口。!!!"); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | |
| | | break; |
| | | } |
| | | } |
| | | if (flag) continue; |
| | | if (flag) { |
| | | News.error("MainServiceImpl 324行"+"104站点存在货物,捡料盘点货物暂时不重新入库!!!"); |
| | | continue; |
| | | } |
| | | } |
| | | break; |
| | | case 204: |
| | |
| | | break; |
| | | } |
| | | } |
| | | if (flag) continue; |
| | | if (flag) { |
| | | News.error("MainServiceImpl 346行"+"204站点存在货物,捡料盘点货物暂时不重新入库!!!"); |
| | | continue; |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | |
| | | continue; |
| | | } |
| | | |
| | | //加强判断,只要存在移库任务,说明出库任务未完全结束,不执行入库任务 |
| | | WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId()); |
| | | if(!Cools.isEmpty(one)){ |
| | | News.error("入库 ===>> 存在移库未完成任务,不能入库。移库任务号={},堆垛机号={}", one.getWrkNo(), slave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 获取工作状态为 2,3,4,5,6 的入库工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); |
| | | if(null == wrkMast) { |
| | | // News.error("{}站点查询无待入库数据 工作号={}", crnStn.getStaNo(), staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | |
| | | //加强判断,只要存在移库任务,说明出库任务未完全结束,不执行入库任务 |
| | | WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId()); |
| | | if(!Cools.isEmpty(one)){ |
| | | News.error("入库 ===>> 存在移库未完成任务,不能入库。移库任务号={},堆垛机号={}", one.getWrkNo(), slave.getId()); |
| | | // continue; |
| | | } |
| | | |
| | | // 判断是否已存在小车绑定任务 |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 获取堆垛机出库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (wrkMast.getCrnNo().equals(2)){ |
| | | if (wrkMast.getStaNo() == 103 && devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) { |
| | | News.error("MainServiceImpl locToCrnStn"+"103非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); |
| | | continue; |
| | | } |
| | | if (wrkMast.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { |
| | | News.error("MainServiceImpl locToCrnStn"+"203非出库模式,禁止出库。任务号:{}!!!",wrkMast.getWrkNo()); |
| | | continue; |
| | | } |
| | | |
| | | 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 1028行"+"存在捡料、盘点未入库货物,2号堆垛机暂时禁止出库!!!"); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101){ |
| | | Integer sour = wrkMast.getSourceStaNo(); |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour); |
| | | if (wrkMasts.size() > 0){ |
| | | News.error("MainServiceImpl 1028行"+"204存在全板出库中货物,2号堆垛机暂时禁止全板出库!!!"); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | if (wrkMastMapper.updateById(waitWrkMast) == 0) { |
| | | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | | } |
| | | flag = true; |
| | | if (waitWrkMast.getWrkSts() != 17) { |
| | | flag = true; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | |
| | | // 获取源库位信息 |
| | | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) { |
| | | News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts()); |
| | | News.error("出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts()); |
| | | continue; |
| | | } |
| | | // 获取堆垛机出库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); |
| | | if (staDetl == null) { |
| | |
| | | if(deepLoc != null && !deepLoc.getLocSts().equals("F") |
| | | && !deepLoc.getLocSts().equals("D") |
| | | && !deepLoc.getLocSts().equals("O") |
| | | && (waitWrkMast!=null && waitWrkMast.getWrkSts()<17)){ |
| | | && (waitWrkMast!=null && waitWrkMast.getWrkSts()<18)){ |
| | | News.error("移库再回库时,深库位组深库位状态为作业中 ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts()); |
| | | flag = true; |
| | | break; |
| | |
| | | } |
| | | } |
| | | LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if(sourceLoc.getLocSts().equals("F") || 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)) { |
| | |
| | | String locSts = ""; |
| | | // 库位移转判断是否为空板移转 |
| | | if (wrkMast.getEmptyMk().equals("N")) { |
| | | locSts = "F"; |
| | | locSts = "R"; |
| | | // 转移库存明细数据: 库存号 由工作档源库位变为目标库位 |
| | | if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { |
| | | News.error("库位移转 ===>> 转移库存明细数据失败;[源库位={}],[目标库位={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); |
| | |
| | | // 遍历空板入库口 |
| | | for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { |
| | | // 获取空板入库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | //20230201. 2号堆垛机有出库任务时,禁止新板入库 |
| | | if (staProtocol.isLoading() && staProtocol.getWorkNo() == 9995) { |
| | | if ( emptyInSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) { |
| | | //有出库任务,退库到入库口 |
| | | staProtocol.setWorkNo((short) 9999); |
| | | 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为出库模式,禁止入库,退回入库口。!!!"); |
| | | continue; |
| | | } |
| | | if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | | //有出库任务,退库到入库口 |
| | | staProtocol.setWorkNo((short) 9999); |
| | | 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为出库模式,禁止入库,退回入库口。!!!"); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | // 站点条件判断 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | |
| | | 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())){ |
| | | loc = one; |
| | | break; |
| | | |
| | | boolean success = true; |
| | | List<String> insideLoc = Utils.getGroupInsideLoc(one.getLocNo()); |
| | | for (String inside : insideLoc) { |
| | | if (locMastService.selectById(inside).getLocSts().equals("P") |
| | | || locMastService.selectById(inside).getLocSts().equals("R") |
| | | || locMastService.selectById(inside).getLocSts().equals("S") |
| | | || locMastService.selectById(inside).getLocSts().equals("Q")) { |
| | | success = false; break; |
| | | } |
| | | } |
| | | |
| | | Integer steNo = this.hasCar(one.getLocNo()); |
| | | if (steNo != null) { |
| | | continue; |
| | | } |
| | | |
| | | if (success) { |
| | | loc = one; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库模式切换函数 |
| | | */ |
| | | public synchronized void ioConvert() { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | Integer sourceStaNo = inSta.getStaNo()==103 ? 104 : 204; |
| | | WrkMast pakout = wrkMastMapper.selectWorkingPakout(sourceStaNo); |
| | | switch (inSta.getStaNo()) { |
| | | case 103://1F |
| | | if (pakout != null) { |
| | | if (devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) { |
| | | // 出库切换中 |
| | | // devpThread.ioModeOf1F = IoModeType.PAKOUT_BOOTING; |
| | | // WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); |
| | | // if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() |
| | | // && !devpThread.getStation().get(inSta.getStaNo()+1).isLoading() |
| | | // && devpThread.getStation().get(inSta.getStaNo()+1).getWorkNo()==0) { |
| | | // // 出库模式 |
| | | devpThread.ioModeOf1F = IoModeType.PAKOUT_MODE; |
| | | // } |
| | | } |
| | | } else { |
| | | // 入库模式 |
| | | devpThread.ioModeOf1F = IoModeType.PAKIN_MODE; |
| | | } |
| | | break; |
| | | case 203://2F |
| | | if (pakout != null) { |
| | | if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { |
| | | // 出库切换中 |
| | | // devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING; |
| | | // WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); |
| | | // if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() |
| | | // && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading() |
| | | // && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) { |
| | | // // 出库模式 |
| | | devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; |
| | | // } |
| | | } |
| | | } else { |
| | | // 入库模式 |
| | | devpThread.ioModeOf2F = IoModeType.PAKIN_MODE; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | } |