| | |
| | | } |
| | | |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | //过滤判断,防止拣料再入库货物,经过入库站再入库时,被退回到退库站 |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (wrkMast1 != null) { |
| | | if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104) { |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (wrkMast != null && wrkMast.getWrkSts() == 2) { |
| | | int wrkNo1 = basDevpService.count(new QueryWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkNo1 != 0) { |
| | | News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast.getWrkNo()); |
| | | if (ledThread != null) { |
| | | News.error(":扫码失败,请重试"); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo())); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | if (wrkMast != null) { |
| | | News.error("" + mark + " - 4" + " - 工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(Short.parseShort(wrkMast.getWrkNo() + "")); |
| | | staProtocol.setStaNo(Short.parseShort(wrkMast.getStaNo() + "")); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.info("输送线下发(存在设备上走的工作档,直接下发!)):" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); |
| | | |
| | | ledThread.errorReset(); |
| | | log.info("组托请求后LED错误清除"); |
| | | |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | News.error(":更新plc站点信息失败"); |
| | | log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败"); |
| | | // throw new CoolException("更新plc站点信息失败"); |
| | | continue; |
| | | } |
| | | |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | String errorMsg = "工作档已存在该条码号===>>" + barcode; |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); |
| | | } |
| | | } |
| | | WrkMast checkPick = wrkMastMapper.selectOne(new QueryWrapper<WrkMast>() |
| | | .eq("barcode", barcode) |
| | | .in("io_type", 107, 103, 57)); |
| | | if (!Cools.isEmpty(checkPick)) { |
| | | continue; |
| | | } |
| | | |
| | |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | if (inSta.getStaNo() == 102) { |
| | | param.setLocType2((short) 3); |
| | | } else if (inSta.getStaNo() == 211) { |
| | | } else if (inSta.getStaNo() == 211 || inSta.getStaNo() == 104) { |
| | | param.setLocType1((short) 5); |
| | | param.setLocType2((short) 4); |
| | | } else if (inSta.getStaNo() == 201) { |
| | |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | String errorMsg = jsonObject.getString("msg"); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); |
| | | } |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (barcodeThread == null) { |
| | | String barcode = ""; |
| | | if (barcodeThread == null && staProtocol.getSiteId() != 104) { |
| | | continue; |
| | | } else if (staProtocol.getSiteId() == 104) { |
| | | if (staProtocol.getWorkNo() == 9996) { |
| | | // 获取到拣料任务的托盘码 |
| | | WrkMast wrkMast = wrkMastMapper.selectOne(new QueryWrapper<WrkMast>().eq("wrk_sts", 14).eq("io_type", 103).eq("source_sta_no", 104)); |
| | | if (wrkMast != null) { |
| | | barcode = wrkMast.getBarcode(); |
| | | } |
| | | } |
| | | } else { |
| | | barcode = barcodeThread.getBarcode(); |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | |
| | | wrkMast = wrkMast1; |
| | | } |
| | | } |
| | | if (( wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | continue; |
| | | } |
| | | |
| | |
| | | StaDesc staDesc = staDescService.getOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); |
| | | staProtocol.setWorkNo((short) 9989); |
| | | staProtocol.setWorkNo((short) 9999); |
| | | staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1)); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | |
| | | crnThread.setResetFlag(true); |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) { |
| | | crnThread.setResetFlagTwo(true); |
| | | } else { |
| | | } else if (statusTypeTwo == CrnStatusType.WAITING_All) { |
| | | crnThread.setResetFlag(true); |
| | | crnThread.setResetFlagTwo(true); |
| | | } |
| | |
| | | wrkMast.setIoPri(14D); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档,将浅库位移转到新的库位中 |
| | | moveLocForDeepLoc(slave, shallowLoc, mark); |
| | | moveLocForDeepLoc(slave, shallowLoc, mark, wrkMast.getTenant()); |
| | | // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) |
| | | // moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); |
| | | } |
| | |
| | | crnCommand.setDestinationPosXTwo(locMast.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosYTwo(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZTwo(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (crnStn.getStaNo() == 202) { |
| | | crnCommand.setSourcePosYTwo((short) 6); // 源库位列 |
| | | } |
| | | } else { |
| | | if (workMode == 1) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKIN); |
| | |
| | | crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (workMode == 1 && crnStn.getStaNo() == 202) { |
| | | crnCommand.setSourcePosY((short) 6); // 源库位列 |
| | | } |
| | | } |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | |
| | |
| | | wrkMast.setUpdMk("Y"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档,将浅库位移转到新的库位中 |
| | | moveLocForDeepLoc(slave, shallowLoc, mark); |
| | | moveLocForDeepLoc(slave, shallowLoc, mark, wrkMast.getTenant()); |
| | | } |
| | | News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo); |
| | | continue; |
| | |
| | | crnCommand.setDestinationPosXTwo(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosYTwo(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZTwo(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (crnStn.getStaNo() == 202) { |
| | | crnCommand.setDestinationPosYTwo((short) 6); // 源库位列 |
| | | } |
| | | } else { |
| | | if (workMode == 1) { |
| | | crnCommand.setTaskMode(CrnTaskModeType.PAKIN); |
| | |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (workMode == 1 && crnStn.getStaNo() == 202) { |
| | | crnCommand.setDestinationPosY((short) 6); // 源库位列 |
| | | } |
| | | } |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | |
| | | if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { |
| | | wrkMast.setWrkSts(4L); |
| | | } else { |
| | | //TODO |
| | | News.info("状态不对,状态={},工作号={}", wrkMast.getWrkSts(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | Date now = new Date(); |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // if (barcodeThread == null) { |
| | | // continue; |
| | | // } |
| | | // String barcode = barcodeThread.getBarcode(); |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | |
| | | if (!staProtocol.isLoading()) { |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | // if (!staProtocol.isPakMk()) { |
| | | // continue; |
| | | // } |
| | | staProtocol.setWorkNo((short) 9999); |
| | | News.info("{}入库回退:{},任务号:{}", emptyInSta.getStaNo(), errMsg, (short) 9999); |
| | | staProtocol.setStaNo(emptyInSta.getBackSta().shortValue()); |
| | |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | if (emptyInSta.getStaNo() == 102) { |
| | | param.setLocType2((short) 3); |
| | | } else if (emptyInSta.getStaNo() == 211) { |
| | | } else if (emptyInSta.getStaNo() == 211 || emptyInSta.getStaNo() == 104) { |
| | | param.setLocType1((short) 5); |
| | | param.setLocType2((short) 4); |
| | | } else if (emptyInSta.getStaNo() == 201) { |
| | |
| | | * 因双深库位阻塞,对浅库位进行移转(立即执行版) |
| | | * tip:同步 |
| | | */ |
| | | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark) { |
| | | private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark, Long tenant) { |
| | | |
| | | try { |
| | | News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 开始执行:因双深库位阻塞,对浅库位进行移转(立即执行版)"); |
| | |
| | | wrkMast.setCrnNo(crn.getId()); |
| | | wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位 |
| | | wrkMast.setLocNo(loc.getLocNo()); // 目标库位 |
| | | wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 满板 |
| | | wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板 |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板 |
| | |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeTime(new Date()); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMast.setTenant(tenant); |
| | | int res = wrkMastMapper.insert(wrkMast); |
| | | if (res == 0) { |
| | | News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 保存工作档失败"); |
| | |
| | | VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 |
| | | wrkDetl.setAppeTime(new Date()); |
| | | wrkDetl.setModiTime(new Date()); |
| | | wrkDetl.setTenant(tenant); |
| | | if (!wrkDetlService.save(wrkDetl)) { |
| | | News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 保存工作档明细失败"); |
| | | throw new CoolException("保存工作档明细失败"); |
| | |
| | | |
| | | public synchronized void autoEmptyOut() { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | Integer autoOutSite = 12; |
| | | Integer autoOutSite = 103; |
| | | //如果站点可出禁用,则不生成空盘出库任务 |
| | | StaProtocol staProtocol = devpThread.getStation().get(autoOutSite); |
| | | if (staProtocol == null) { |
| | |
| | | } |
| | | if (staProtocol.isAutoing() //自动 |
| | | && !staProtocol.isLoading() //无物 |
| | | && staProtocol.isOutEnable() //可出信号 |
| | | // && staProtocol.isOutEnable() //可出信号 |
| | | && staProtocol.getWorkNo() == 0) { |
| | | WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite); |
| | | if (null != pakoutEmpty) { |
| | | return; |
| | | // WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite); |
| | | // if (null != pakoutEmpty) { |
| | | // return; |
| | | // } |
| | | |
| | | LocMast byId = locMastService.getById("0200405"); |
| | | if (byId != null&&byId.getLocSts().equalsIgnoreCase("D")){ |
| | | |
| | | } |
| | | try { |
| | | String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyOut/v1").build().doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | JSONObject data = (JSONObject) jsonObject.get("data"); |
| | | News.info((String) data.get("msg")); |
| | | } else { |
| | | News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1", "", response); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | |
| | | public synchronized void autoEmptyIn() { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | Integer autoInSite = 12; |
| | | StaProtocol staProtocol = devpThread.getStation().get(autoInSite); |
| | | StaProtocol staProtocol = devpThread.getStation().get(103); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | |
| | | } |
| | | if (staProtocol.isAutoing() //自动 |
| | | && staProtocol.isLoading() //有物 |
| | | && staProtocol.isInEnable() //可入信号 |
| | | // && staProtocol.isInEnable() //可入信号 |
| | | && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() >= 9990) //工作号为0或者工作号是9991~9999(输送机留用) |
| | | ) { |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | int workNo = commonService.getWorkNo(0); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(2L); |
| | | wrkMast.setIoPri(13D); |
| | | wrkMast.setIoType(10); |
| | | wrkMast.setCrnNo(1); |
| | | wrkMast.setSourceStaNo(101); |
| | | wrkMast.setStaNo(103); |
| | | wrkMast.setLocNo("0200405"); |
| | | wrkMast.setFullPlt("N"); // 满板:N |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | wrkMast.setMemo("自动空托入库"); |
| | | boolean res = wrkMastService.save(wrkMast); |
| | | |
| | | |
| | | String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyIn/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | News.info((String) jsonObject.get("msg")); |
| | | } else { |
| | | News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response); |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.getById("0200405"); |
| | | if (locMast.getLocSts().equals("O")) { |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiUser(789L); |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |