| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | import springfox.documentation.spring.web.json.Json; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // barcode="ILY0127 0001"; |
| | | if(!Cools.isEmpty(barcode)) { |
| | | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | continue; |
| | | } |
| | |
| | | // } |
| | | |
| | | } catch (Exception e) { |
| | | News.error("扫码入库报错,错误信息",e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | |
| | | continue; |
| | | } |
| | | |
| | | |
| | | // 判断堆垛机出库站状态 |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y") |
| | | && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | //测试库位出库必须要按启动按钮才能出库 |
| | | if((wrkMast.getStaNo()==206 || wrkMast.getStaNo()==1000)&& locMast.getCtnKind()==0){ |
| | | News.error("出库 ===>> 等待启动出库按钮",wrkMast); |
| | | continue; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | //消防报警出库 |
| | | if(wrkMast.getStaNo()==1000&& locMast.getCtnKind()==1){ |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | | break; |
| | | } |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); |
| | | LocMast shallowLoc = locMastService.selectById(shallowLocNo); |
| | | // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! |
| | | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | if (null == waitWrkMast) { |
| | | News.error("{}库位异常,未检索到相应工作档!", shallowLocNo); |
| | | } else { |
| | | if(waitWrkMast.getWrkSts() == 11) { |
| | | waitWrkMast.setIoPri(15D); |
| | | waitWrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(waitWrkMast) == 0) { |
| | | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | | } |
| | | continue; |
| | | } else { |
| | | |
| | | } |
| | | } |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | // 此标记避免多次执行移库任务 |
| | | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) |
| | | || Cools.isEmpty(waitWrkMast)) { |
| | | wrkMast.setUpdMk("Y"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档,将浅库位移转到新的库位中 |
| | | moveLocForDeepLoc(slave, shallowLoc); |
| | | } |
| | | News.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo()); |
| | | continue; |
| | | } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){ |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) { |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | |
| | | break; |
| | | // return; |
| | | } |
| | | |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | |
| | | News.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | }else { |
| | | // 判断堆垛机出库站状态 |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y") |
| | | && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | //测试库位出库必须要按启动按钮才能出库 |
| | | if((wrkMast.getStaNo()==206 || wrkMast.getStaNo()==1000)&& locMast.getCtnKind()==0){ |
| | | News.error("出库 ===>> 等待启动出库按钮",wrkMast); |
| | | continue; |
| | | } |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | |
| | | // 堆垛机控制过滤 |
| | | if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { |
| | | // continue; |
| | | break; |
| | | } |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); |
| | | LocMast shallowLoc = locMastService.selectById(shallowLocNo); |
| | | // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! |
| | | if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | if (null == waitWrkMast) { |
| | | News.error("{}库位异常,未检索到相应工作档!", shallowLocNo); |
| | | } else { |
| | | if(waitWrkMast.getWrkSts() == 11) { |
| | | waitWrkMast.setIoPri(15D); |
| | | waitWrkMast.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(waitWrkMast) == 0) { |
| | | News.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); |
| | | } |
| | | continue; |
| | | } else { |
| | | |
| | | } |
| | | } |
| | | } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | // 此标记避免多次执行移库任务 |
| | | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) |
| | | || Cools.isEmpty(waitWrkMast)) { |
| | | wrkMast.setUpdMk("Y"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | // 生成工作档,将浅库位移转到新的库位中 |
| | | moveLocForDeepLoc(slave, shallowLoc); |
| | | } |
| | | News.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo()); |
| | | continue; |
| | | } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){ |
| | | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); |
| | | if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) { |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | | break; |
| | | // return; |
| | | } |
| | | |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | crnCommand.setBarcode(wrkMast.getBarcode()); |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | News.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | //获取所有移库任务 |
| | | List<WrkMast> wrkMasts=wrkMastMapper.selectLocMoves(slave.getId()); |
| | | // 获取工作档信息 |
| | | WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); |
| | | WrkMast wrkMast =null; |
| | | if(Cools.isEmpty(wrkMasts)){ |
| | | return; |
| | | } |
| | | if (null == wrkMast) { |
| | | return; |
| | | } |
| | | //先查测试库位转OK或者NG库位按了按钮的 |
| | | for (WrkMast wm: wrkMasts) { |
| | | LocMast sourceSta1 = locMastService.selectById(wm.getSourceLocNo()); |
| | | LocMast sourceSta1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",wm.getSourceLocNo())); |
| | | if (!Cools.isEmpty(sourceSta1.getCtnKind())){ |
| | | if(sourceSta1.getCtnKind()==1){ |
| | | wrkMast=wm; |
| | |
| | | } |
| | | } |
| | | } |
| | | //后查等待库位转测试库位 |
| | | if(Cools.isEmpty(wrkMast)){ |
| | | for (WrkMast wm: wrkMasts) { |
| | | LocMast sourceSta1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",wm.getSourceLocNo())); |
| | | if (sourceSta1.getLocType1()==3){ |
| | | wrkMast=wm; |
| | | } |
| | | } |
| | | } |
| | | //都没有满足条件的,跳过移库 |
| | | if(Cools.isEmpty(wrkMast)){ |
| | | return; |
| | | } |
| | | |
| | | // 获取源库位信息 |
| | | LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | if (null == sourceSta) { |
| | |
| | | //testMast.setStatus |
| | | //"状态 0: 待申请 1: 申请中 2: 已复核 3:测试中 4:完成 5:移库 6:火警" |
| | | if(devpThread.startSignal[i][0]==8){ |
| | | News.info("2390行程序开始运行,修改测试档状态为 1、申请中,开始修改前:"+testMast); |
| | | News.info("2390行程序开始运行,修改测试档状态为 1、申请中,开始修改前:"+ JSON.toJSONString(testMast)); |
| | | testMast.setStatus(1); |
| | | locMast.setPackStatus(1); |
| | | testMast.setModiTime(new Date()); |
| | | log.info("2394行程序开始运行,修改测试档状态为 1、申请中,修改数据后、未更新"+testMast); |
| | | log.info("2394行程序开始运行,修改测试档状态为 1、申请中,修改数据后、未更新"+JSON.toJSONString(testMast)); |
| | | }else if(devpThread.startSignal[i][0]==2 && locMast.getPackStatus()!=2){ |
| | | News.info("2396行程序开始运行,修改测试档状态为 3、测试中,开始修改前:"+testMast); |
| | | News.info("2396行程序开始运行,修改测试档状态为 3、测试中,开始修改前:"+JSON.toJSONString(testMast)); |
| | | testMast.setStatus(3); |
| | | locMast.setPackStatus(2); |
| | | testMast.setModiTime(new Date()); |
| | | log.info("2400,修改测试档状态为 3、测试中,修改数据后、未更新"+testMast); |
| | | log.info("2400,修改测试档状态为 3、测试中,修改数据后、未更新"+JSON.toJSONString(testMast)); |
| | | //NG转OK需要还原源库位和目标库位状态,OK转NG 删除任务档 |
| | | WrkMast wrkMast=wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("source_loc_no",locMast.getLocNo()) |
| | | .eq("wrk_sts",11)); |
| | | News.info("2405,查询状态为生成出库id的测试完成(NG或OK)任务档,"+wrkMast); |
| | | News.info("2405,查询状态为生成出库id的测试完成(NG或OK)任务档,"+JSON.toJSONString(wrkMast)); |
| | | if(!Cools.isEmpty(wrkMast)){ |
| | | if(wrkMast.getWrkSts()==11){ |
| | | if(wrkMast.getIoType()==11){ |
| | | log.info("2409,删除任务档为移库的,"+wrkMast); |
| | | log.info("2409,删除任务档为移库的,"+JSON.toJSONString(wrkMast)); |
| | | LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",wrkMast.getLocNo())); |
| | | locMast1.setLocSts("O"); |
| | | locMastService.update(locMast1,new EntityWrapper<LocMast>().eq("loc_no",wrkMast.getLocNo())); |
| | | } |
| | | wrkMastMapper.deleteById(wrkMast); |
| | | log.info("2415,删除工作档"+wrkMast); |
| | | log.info("2415,删除工作档"+JSON.toJSONString(wrkMast)+JSON.toJSONString(locMast)); |
| | | locMast.setLocSts("F"); |
| | | log.info("2417,删除工作档"+wrkMast); |
| | | log.info("2417,删除工作档"+JSON.toJSONString(wrkMast)+JSON.toJSONString(locMast)); |
| | | wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no",wrkMast.getWrkNo())); |
| | | log.info("2419,删除工作明细"+wrkMast.getWrkNo()); |
| | | if(!locMastService.update(locMast,new EntityWrapper<LocMast>() |
| | | .eq("channel",i+1))){ |
| | | log.error("2422修改测试库位状态失败"+locMast.getLocNo(),locMast); |
| | | log.error("2422修改测试库位状态失败"+locMast.getLocNo()+JSON.toJSONString(locMast)); |
| | | }else{ |
| | | log.error("2424"+locMast.getLocNo(),locMast); |
| | | log.error("2424修改测试库位状态成功"+locMast.getLocNo()+JSON.toJSONString(locMast)); |
| | | fig=true; |
| | | } |
| | | } |