| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Autowired |
| | | private BasDevpService basDevpService; |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | @Autowired |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private BasErrLogService basErrLogService; |
| | |
| | | private ApiLogService apiLogService; |
| | | @Autowired |
| | | private BasDevpOptService basDevpOptService; |
| | | @Autowired |
| | | private MatService matService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | if(!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | |
| | | if(!staProtocol.isAutoing()){ |
| | | continue; |
| | | } |
| | | |
| | |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | if(!staProtocol.isAutoing()){ |
| | | continue; |
| | | } |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); |
| | |
| | | && !staProtocol.isEmptyMk() |
| | | && staProtocol.isPakMk() |
| | | && staProtocol.getWorkNo() == 0 |
| | | && !barcode.equals("0") |
| | | && !Cools.isEmpty(barcode) |
| | | ) { |
| | | if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | // News.error(JSON.toJSONString(staProtocol)); |
| | | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | String errorMsg = "扫码失败,请重试"; |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setErrCode(errMsg); |
| | | News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | staProtocol.setBarcode(barcode); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta()); |
| | | continue; |
| | | } |
| | | |
| | | // if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | //// News.error(JSON.toJSONString(staProtocol)); |
| | | // News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | // // led 异常显示 |
| | | // if (ledThread != null) { |
| | | // String errorMsg = "扫码失败,请重试"; |
| | | // MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); |
| | | // } |
| | | // staProtocol.setWorkNo(wrkNo); |
| | | // staProtocol.setErrCode(errMsg); |
| | | // News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | // wrkNo++; |
| | | // staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | | // staProtocol.setBarcode(barcode); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | // log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta()); |
| | | // continue; |
| | | // } |
| | | // if (staProtocol.getSiteId()!= 159){ |
| | | // if( Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) { |
| | | // News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat); |
| | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | log.error("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo()); |
| | | if(staProtocol.getSiteId() == 1036){ //1036 |
| | | BasAgvMast basAgvMast = basAgvMastService.selectOne(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037)); |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(barcode); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | if (resultBind.getCode()!=200){ |
| | | agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | } |
| | | } |
| | | ledThread.errorReset(); |
| | | log.error("组托请求后LED错误清除"); |
| | | |
| | |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | // News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = ""; |
| | | if (staProtocol.isFrontErr()) { |
| | | errMsg = "前超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBackErr()) { |
| | | errMsg = "后超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isHighErr()) { |
| | | errMsg = "高超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isLeftErr()) { |
| | | errMsg = "左超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isRightErr()) { |
| | | errMsg = "右超限"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isWeightErr()) { |
| | | errMsg = "超重"; |
| | | back = true; |
| | | } |
| | | if (!back && staProtocol.isBarcodeErr()) { |
| | | errMsg = "扫码失败"; |
| | | log.error("物料码扫码失败"); |
| | | back = true; |
| | | } |
| | | // 退回 |
| | | if (back) { |
| | | News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", pickSta.getStaNo(), errMsg); |
| | | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errMsg)); |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errMsg)); |
| | | } |
| | | staProtocol.setWorkNo(wrkNo); |
| | | staProtocol.setErrCode(errMsg); |
| | | News.info("异常判断{}入库回退:{},任务号:{}", pickSta.getStaNo(), errMsg,wrkNo); |
| | | wrkNo++; |
| | | staProtocol.setStaNo(pickSta.getBackSta().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | staProtocol.setBarcode(barcode); |
| | | staProtocol.setPakMk(false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | System.out.println(staProtocol); |
| | | log.error("输送线下发1:"+wrkNo+","+pickSta.getBackSta()); |
| | | } |
| | | |
| | | |
| | | // // 入出库模式判断 |
| | | // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } |
| | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | //LED |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | | String errorMsg = "此为拣料、并板、盘点再入库.请放在"+pickSta.getBackSta().shortValue()+"站点"; |
| | |
| | | */ |
| | | public synchronized void connectWrk(Integer mark) { |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocolIn = devpThread.getStation().get(4001); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | |
| | | StaProtocol staProtocolIn = devpThread2.getStation().get(4001); |
| | | if (staProtocolIn == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolIn = staProtocolIn.clone(); |
| | | } |
| | | int[] outStaNos = {1015, 2016}; //衔接入库点 |
| | | int[] outStaNos = {1015,2016}; //衔接入库点 |
| | | for (int outStaNo : outStaNos) { |
| | | StaProtocol staProtocolOut = devpThread.getStation().get(outStaNo);// 盘点出库衔接站点(可能是 1015,也可能是 2016) |
| | | StaProtocol staProtocolOut =null; |
| | | if(outStaNo == 2016){ |
| | | staProtocolOut = devpThread2.getStation().get(outStaNo); |
| | | }else{ |
| | | staProtocolOut = devpThread.getStation().get(outStaNo); |
| | | } |
| | | if (staProtocolOut == null) { |
| | | continue; |
| | | } else { |
| | |
| | | //mark - 3 - .... |
| | | this.locToLoc(crn, crnProtocol,mark); |
| | | //预调度 |
| | | // this.crnRebackHp(crnProtocol, crnThread); |
| | | this.crnRebackHp(crn, crnProtocol, crnThread); |
| | | |
| | | } |
| | | // News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); |
| | |
| | | /** |
| | | * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点 |
| | | */ |
| | | public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) { |
| | | public synchronized void crnRebackHp(CrnSlave slave, CrnProtocol crnProtocol, CrnThread crnThread) { |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | if (crnProtocol.getBay() == 1) { |
| | | if (crnProtocol.getBay() == 52) { |
| | | return; |
| | | } |
| | | BasCrnp basCrnp = basCrnpService.selectOne( |
| | | new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo()) |
| | | ); |
| | | boolean result = true; |
| | | if(crnProtocol.getCrnNo() != 5){ |
| | | return; |
| | | } |
| | | for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo2()); |
| | | if (staProtocol == null) { |
| | | News.infoNoLog(" - 堆垛机入库站信息(staProtocol!=null继续执行):staProtocol="+staProtocol); |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 ){ |
| | | result =false; |
| | | } |
| | | } |
| | | int x=1; |
| | | switch (crnProtocol.getCrnNo()){ |
| | |
| | | case 4: x =14; break; |
| | | case 5: x =18; break; |
| | | } |
| | | |
| | | Date modiTime = basCrnp.getModiTime(); |
| | | Date now = new Date(); |
| | | // 当前时间 - 修改时间 > 1分钟(60000毫秒) |
| | | if(result){ |
| | | if (now.getTime() - modiTime.getTime() < 60 * 1000) { |
| | | return; |
| | | } |
| | | } |
| | | if(crnProtocol.getCrnNo() != 5){ |
| | | return; |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤3,12 |
| | | if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { |
| | | return; |
| | |
| | | } |
| | | crnThread.setBackHpFlag(true); |
| | | } |
| | | |
| | | // } |
| | | } |
| | | |
| | | /** |
| | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo()); |
| | | |
| | | |
| | | |
| | | // 堆垛机复位 |
| | | News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); |
| | | crnThread.setResetFlag(true); |
| | |
| | | case 57: |
| | | ledCommand.setTitle("盘点再入库"); |
| | | break; |
| | | case 53: |
| | | ledCommand.setTitle("拣料再入库"); |
| | | break; |
| | | case 101: |
| | | ledCommand.setTitle("全板出库"); |
| | | break; |
| | |
| | | } else { |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | }); |
| | | } |
| | | if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { |
| | |
| | | total = locDetl.getAnfme(); |
| | | } |
| | | if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | if (wrkMast.getIoType() == 107) { |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total)); |
| | | ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total)); |
| | | } |
| | | }); |
| | | } |
| | |
| | | |
| | | public synchronized void autoEmptyOut() { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | |
| | | List<Integer> list = new ArrayList<>(); |
| | | list.add(1108);list.add(2031); |
| | | for (Integer site:list){ |
| | | Integer emptyCount = wrkMastMapper.countPakOutEmpty(site); |
| | | StaProtocol staProtocol = null; |
| | | if(emptyCount >= 1 && site == 1108){ |
| | | if(emptyCount >= 2 && site == 1108){ |
| | | continue; |
| | | }else if(emptyCount == 1 && site == 2031){ |
| | | }else if(emptyCount > 1 && site == 2031){ |
| | | continue; |
| | | } |
| | | //如果站点可出禁用,则不生成空盘出库任务 |
| | | switch (site){ |
| | | case 1108:staProtocol = devpThread.getStation().get(site - 2);break; |
| | | case 2031:staProtocol = devpThread.getStation().get(site);break; |
| | | case 2031:staProtocol = devpThread2.getStation().get(site);break; |
| | | } |
| | | if (staProtocol == null) { |
| | | return; |
| | |
| | | } |
| | | |
| | | public synchronized void autoEmptyIn() { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | List<Integer> list = new ArrayList<>(); |
| | | List<WrkMast> wrkMast = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("source_sta_no",1038)); |
| | | if(wrkMast.size() >3){ |
| | | return; |
| | | } |
| | | list.add(1038); |
| | | for (Integer site:list){ |
| | | StaProtocol staProtocol = devpThread.getStation().get(site); |
| | |
| | | staProtocol.setStaNo(site.shortValue()); |
| | | devpThread.setPakMk(site,false); |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | Date now = new Date(); |
| | | System.out.println("小车下发命令时间:" + |
| | | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now)); |
| | | |
| | | |
| | | } else { |
| | | News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response); |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | // if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakIn() && rgvThread.isPakRgv()){ |
| | | // rgvPreScheduling();//若暂无下发任务预调度提前到取货点 |
| | | // } |
| | | |
| | | |
| | | if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && |
| | | rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk() |
| | | && rgvThread.isPaking() && basRgv.getPakAll().equals("1")){ |
| | | if(basRgv.getPakOut().equals("1") && basRgv.getPakIn().equals("1")){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | if (rgvProtocol.getLastIo().equals("I")) { |
| | | if (basRgv.getInEnable().equals("1") && basRgv.getPakIn().equals("1")) { |
| | | //mark - 1 - .... |
| | | if (rgvProtocol.getTaskNo1()==0){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | } else if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | //mark - 2 - .... |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | } |
| | | } |
| | | // 如果最近一次是出库模式 |
| | | else if (rgvProtocol.getLastIo().equals("O")) { |
| | | if (basRgv.getOutEnable().equals("1") && basRgv.getPakOut().equals("1")) { |
| | | if (rgvProtocol.getTaskNo2()==0){ |
| | | this.rgvPreSchedulingOut(rgv, rgvProtocol); // 出库 |
| | | } |
| | | } else if (basRgv.getInEnable().equals("1") && basRgv.getPakIn().equals("1")) { |
| | | if (rgvProtocol.getTaskNo1()==0){ |
| | | rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | |
| | | |
| | | continue; |
| | | } |
| | | if(wrkMastSta != null &&LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | if( LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocolSta == null) { |
| | | News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功"); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | /** |
| | | * 小车出库任务取货下发 |
| | | */ |
| | | public synchronized void rgvPreSchedulingOut(RgvSlave slave, RgvProtocol rgvProtocol){ |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutTStn()) {//rgv出库取货站点 |
| | | boolean flag = false; |
| | | //遍历rgv入库取货站点 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2()); |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); |
| | | BasRgv basRgv = basRgvService.selectById(slave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!4", slave.getId()); |
| | | continue; |
| | | } |
| | | if(staProtocol.getWorkNo() == 0){ |
| | | continue; |
| | | } |
| | | StaProtocol staProtocol2 = null; |
| | | WrkMastSta wrkMastSta3 = null; |
| | | |
| | | // if(rgvStn.getStaNo2()!= null ){ |
| | | // staProtocol2 = devpThread.getStation().get(rgvStn.getStaNo2()); |
| | | // if (staProtocol2 == null) { |
| | | // News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | // continue; |
| | | // } else { |
| | | // staProtocol2 = staProtocol2.clone(); |
| | | // } |
| | | // BasDevp staDetl2 = basDevpService.selectById(rgvStn.getStaNo2()); |
| | | // if (staDetl2 == null) { |
| | | // News.error( " - 出库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | // continue; |
| | | // } |
| | | // wrkMastSta3 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | // |
| | | // } |
| | | if (staProtocol == null) { |
| | | News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); |
| | | if (staDetl == null) { |
| | | News.error(" - 出库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 |
| | | && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | News.errorNoLog(" - Rgv出库取货站信息(以下需要全true):" |
| | | + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() |
| | | + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isOutEnable() |
| | | + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanouting()); |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = new ArrayList<>(); |
| | | switch (rgvProtocol.getRgvNo()){ |
| | | case 1: route = RouteUtils.getRouteOne();break; |
| | | case 2: route = RouteUtils.getRouteTwo();break; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号 |
| | | basRgvMapService.updateById(basRgvMap); |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1()); |
| | | if(basRgv.getPakToCrn().equals("0")){ |
| | | wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol2.getWorkNo()));//处理接驳任务时,连续只取接驳任务 |
| | | } |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog(" - 查询无待出库数据--wrk_sts0, 工作号={}", staProtocol2.getWorkNo()); |
| | | continue; |
| | | } |
| | | boolean result = false; |
| | | if( LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocolSta == null) { |
| | | News.infoNoLog(" - Rgv出库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocolSta = staProtocolSta.clone(); |
| | | } |
| | | if(staProtocolSta.isLoading()){ |
| | | continue; |
| | | } |
| | | } |
| | | wrkMastSta.setWorkSta(1);//若1号工位有任务给2号工位 |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | boolean sign = false; |
| | | |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | if(wrkMastSta.getMk() == 1){//若已执行 |
| | | basRgv.setPakAll("1"); |
| | | basRgvService.updateById(basRgv); |
| | | } |
| | | if(LEFT_POSITION.contains(wrkMastSta.getStaEnd())){ |
| | | basRgv.setPakToCrn("0"); |
| | | basRgvService.updateById(basRgv); |
| | | if(wrkMastSta3 != null){ |
| | | if(!LEFT_POSITION.contains(wrkMastSta3.getStaEnd())){ |
| | | wrkMastSta3 = null;//若接驳第二位不接驳时取消连续取货 |
| | | } |
| | | } |
| | | } |
| | | if(wrkMastSta3 != null ){ |
| | | List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart()); |
| | | if(wrkMastStaPaking.size() < 1){ |
| | | wrkMastSta3.setMk(1); |
| | | basRgv.setPakAll("0"); |
| | | basRgvService.updateById(basRgv); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta3); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | } |
| | | } |
| | | basRgv.setPakIn("0"); |
| | | basRgvService.updateById(basRgv); |
| | | rgvThread.setPaking(false); |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | |
| | | /** |
| | | * 小车预调度 |
| | | */ |
| | | // public synchronized void rgvPreScheduling(){ |
| | | // try{ |
| | | // List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); |
| | | // for (BasRgvMap rgvSlave:basRgvMaps) { |
| | | // RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getRgvNo()); |
| | | // RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | // if (rgvProtocol == null) { |
| | | // continue; |
| | | // }else { |
| | | // rgvProtocol = rgvProtocol.clone(); |
| | | // } |
| | | // BasRgv basRgv = basRgvService.selectById(rgvSlave.getRgvNo()); |
| | | // if (basRgv == null) { |
| | | // log.error("{}号RGV尚未在数据库进行维护!4", rgvSlave.getRgvNo()); |
| | | // continue; |
| | | // } |
| | | // |
| | | // // 只有当RGV空闲、自动,工位一无物//rgv可用 才进行预调度 |
| | | // if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | // && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && !rgvProtocol.isLoaded1ing() |
| | | // && rgvProtocol.getTaskNo1() == 0 |
| | | // && !rgvProtocol.isLoaded2ing() |
| | | // && rgvProtocol.getTaskNo2() == 0 |
| | | // && rgvThread.isPakMk() |
| | | // ) { |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // if (basRgvMap == null) { |
| | | // log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | // continue; |
| | | // } |
| | | // List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | // // 根据输送线plc遍历 |
| | | // for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // // 遍历入库口 入库预调度 |
| | | // List<Integer> staNos = Arrays.asList( 1043, 1104, 1029, 1022, 1019, 1008, 1005); |
| | | // for (Integer staNo : staNos) { |
| | | // SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | // if(staProtocol.isLoading()){ |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setRgvNo((int) rgvProtocol.getRgvNo()); // RGV编号 |
| | | // rgvCommand.setAckFinish1(false); // 工位1任务完成确认位 |
| | | // rgvCommand.setTaskNo(9999); // 工位1工作号 |
| | | // rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式: 移动 |
| | | // switch (staNo){ |
| | | // case 1043: rgvCommand.setTargetPosition1(1042);break; //工位1目标站点 |
| | | // case 1104: rgvCommand.setTargetPosition1(1105);break; |
| | | // case 1037: rgvCommand.setTargetPosition1(1036);break; |
| | | // |
| | | // } |
| | | // if(Objects.equals(basRgvMap.getNowRoute(), staNo)){ |
| | | // continue; |
| | | // } |
| | | // rgvCommand.setCommand(true); //工位1任务确认 |
| | | // if (!MessageQueue.offer(SlaveType.Rgv, (int) rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) { |
| | | // //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | // log.error("RGV命令下发失败,RGV号={},任务数据={}", (int) rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | // }catch (Exception e){ |
| | | // log.error("执行小车移动下发失败"); |
| | | // } |
| | | // } |
| | | public synchronized void rgvPreSchedulingIn(RgvSlave slave, RgvProtocol rgvProtocol){ |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvInTStn()) {//rgv入库取货站点 |
| | | boolean flag = false; |
| | | BasRgv basRgv = basRgvService.selectById(slave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!4", slave.getId()); |
| | | continue; |
| | | } |
| | | if(rgvStn.getStaNo2() == null){ |
| | | continue; |
| | | } |
| | | //遍历rgv入库取货站点 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2()); //倒数第二个 |
| | | StaProtocol staProtocol2 = null; //连续取货任务站点 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo()); |
| | | WrkMastSta wrkMastSta3 = null;//连取两个 |
| | | Integer staNo = null; //与调度 |
| | | switch (rgvStn.getStaNo2()){ |
| | | case 1043: staNo = 1044;break; |
| | | case 1104: staNo = 1103;break; |
| | | } |
| | | if(staNo != null ){ |
| | | staProtocol2 = devpThread.getStation().get(staNo); |
| | | if (staProtocol2 == null) { |
| | | News.infoNoLog(" - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocol2 = staProtocol2.clone(); |
| | | } |
| | | BasDevp staDetl2 = basDevpService.selectById(rgvStn.getStaNo2()); |
| | | if (staDetl2 == null) { |
| | | News.error(" - 入库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | if((staProtocol.getWorkNo()>9999 && staProtocol2.getWorkNo()>9999) || (staProtocol.getWorkNo()<10000 && staProtocol2.getWorkNo()<10000)){ |
| | | //当连续取货站点为相同类型时才能连续取 |
| | | wrkMastSta3 = wrkMastStaMapper.selectByWrkNo(staProtocol2.getWorkNo()); |
| | | } |
| | | |
| | | } |
| | | if(rgvProtocol.getTaskNo2() > 9999 && staProtocol.getWorkNo() < 10000){ |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol == null) { |
| | | News.infoNoLog( " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol); |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl = basDevpService.selectById(rgvStn.getStaNo()); |
| | | if (staDetl == null) { |
| | | News.error(" - 入库 ===>>Rgv站点在数据库不存在, 站点编号={}", rgvStn.getStaNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 |
| | | && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { |
| | | flag = true; |
| | | } |
| | | if (!flag) { |
| | | News.errorNoLog(" - 3" + " - Rgv入库取货站信息(以下需要全true):" |
| | | + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() |
| | | + "工作号>0" + staProtocol.getWorkNo() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining()); |
| | | continue; |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | List<Integer> route = new ArrayList<>(); |
| | | switch (rgvProtocol.getRgvNo()){ |
| | | case 1: route = RouteUtils.getRouteOne();break; |
| | | case 2: route = RouteUtils.getRouteTwo();break; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号 |
| | | basRgvMapService.updateById(basRgvMap); |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档 |
| | | if( null == wrkMastSta ) { |
| | | News.infoNoLog(" - 查询无待入库数据--wrk_sts0, 工作号={}", staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | WrkMastSta wrkMastSta2 = null; |
| | | if(rgvProtocol.getTaskNo2() != null){ |
| | | wrkMastSta2 = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2()); |
| | | } |
| | | boolean result = false; |
| | | if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算 2楼单入库口不需要计算 |
| | | result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点 |
| | | } |
| | | if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货 |
| | | basRgv.setPakRgv("0"); |
| | | basRgvService.updateById(basRgv); |
| | | |
| | | // rgvThread.setPakRgv(false); |
| | | continue; |
| | | } |
| | | wrkMastSta.setWorkSta(wrkMastSta2 !=null ? 1 : 2); |
| | | wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo()); |
| | | boolean sign = false; |
| | | sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | | if (sign){ |
| | | |
| | | if(wrkMastSta3 != null ){ |
| | | List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart()); |
| | | if(wrkMastStaPaking.size() < 1 && !wrkMastSta3.getWrkNo().equals(wrkMastSta.getWrkNo())){//已有标记不再标记 |
| | | wrkMastSta3.setMk(1); |
| | | basRgv.setPakAll("0"); |
| | | basRgvService.updateById(basRgv); |
| | | |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta3); |
| | | log.error("锁定相隔站点任务"); |
| | | }catch (Exception e){ |
| | | log.error("锁定相隔站点任务失败"); |
| | | } |
| | | } |
| | | } |
| | | basRgv.setPakOut("0");//出库不允许 |
| | | basRgvService.updateById(basRgv); |
| | | rgvThread.setPaking(false);//任务下发锁定 |
| | | |
| | | try{ |
| | | wrkMastSta.setWrkSts(1); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | log.error("更新小车任务成功{}",wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | } else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | type = RgvTaskStatusType.PUT; //放货 |
| | | targetPosition = wrkMastSta.getStaEnd(); |
| | | } |
| | | Date now = new Date(); |
| | | if (targetPosition == 1038) { |
| | | System.out.println("小车下发命令时间:" + |
| | | new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now)); |
| | | } |
| | | |
| | | rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号 |
| | | rgvCommand.setTaskStatus(type); // 工位任务模式: 取货 |
| | | rgvCommand.setTargetPosition(targetPosition); //工位目标站点 |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /* |
| | | * arm任务完成自动组托 |
| | | * */ |
| | |
| | | log.error("机械臂抓取任务完成组托失败"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * arm任务完成自动组托 |
| | | * */ |
| | | public synchronized void armMissionAccomplished1() { |
| | | try{ |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历拣料入库口 |
| | | for (DevpSlave.Sta armSta : devp.getArmStaTwo()) { |
| | | |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | String barcode = staProtocol.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode) || barcode.length()<5) { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | | String[] barcodeList = barcode.split(";"); |
| | | String[][] barcodeArr = new String[barcodeList.length / 2][2]; |
| | | int i = 0; |
| | | for (String[] barcodes : barcodeArr){ |
| | | barcodes[0]=barcodeList[i]; |
| | | i++; |
| | | barcodes[1]=barcodeList[i]; |
| | | i++; |
| | | } |
| | | ArmBarcodeTwoParam armBarcodeTwoParam = new ArmBarcodeTwoParam(barcodeArr); |
| | | if (!armBarcodeTwoParam.allBool()){ |
| | | continue; |
| | | } |
| | | |
| | | |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", armSta.getArmNo()) |
| | | .lt("status", 2) |
| | | ); |
| | | if (!basArmMastList.isEmpty()){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, armSta.getArmNo()+"号机械臂存在未完成任务", staProtocol.getSiteId()+"机械臂,===》存在未完成任务", false); |
| | | continue; |
| | | } |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().eq("arm_no",armSta.getArmNo())); |
| | | boolean sign = true; |
| | | for (BasArm basArm : basArmList){ |
| | | if (basArm.getStaNo()==2){//NG |
| | | continue; |
| | | } |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou())); |
| | | if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){ |
| | | continue; |
| | | } |
| | | List<BasArmMast> basArmMastList2 = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("sta_no", basArm.getStaNoSou()) |
| | | .eq("status", 2) |
| | | ); |
| | | if (!basArmMastList2.isEmpty()){ |
| | | BasArmMast basArmMast2 = basArmMastList2.get(0); |
| | | if (!armBarcodeTwoParam.allBool(basArmMast2)){ |
| | | continue; |
| | | } |
| | | } |
| | | BasArmMast basArmMast = new BasArmMast(armBarcodeTwoParam); |
| | | basArmMast.setArmNo(basArm.getArmNo()); |
| | | basArmMast.setStaNo(basArm.getStaNoSou()); |
| | | basArmMast.setSortingLine(basArm.getSortingLineSou()); |
| | | basArmMastService.insert(basArmMast); |
| | | sign = false; |
| | | break; |
| | | } |
| | | if (sign){ |
| | | for (BasArm basArm : basArmList){ |
| | | if (basArm.getStaNo()==2){//NG |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou())); |
| | | if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){ |
| | | continue; |
| | | } |
| | | BasArmMast basArmMast = new BasArmMast(armBarcodeTwoParam); |
| | | basArmMast.setArmNo(basArm.getArmNo()); |
| | | basArmMast.setStaNo(basArm.getStaNoSou()); |
| | | basArmMast.setSortingLine(basArm.getSortingLineSou()); |
| | | basArmMastService.insert(basArmMast); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("机械臂抓取任务完成组托失败"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * arm任务完成自动组托 |
| | | * */ |
| | | public synchronized void armMissionAccomplished2() { |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4)); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1){ |
| | | continue; |
| | | } |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou())); |
| | | if (Cools.isEmpty(locMast)){ |
| | | continue; |
| | | } |
| | | try{ |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("sta_no", basArm.getStaNoSou()) |
| | | .eq("status", 3) |
| | | ); |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | CombParam combParam = new CombParam(basArmMastList); |
| | | //arm任务完成自动组托 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("arm任务完成自动组托",wmsUrl, wmsComb, combParam); |
| | | if (result.getCode()==200){ |
| | | basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLineSou(),3,5); |
| | | locMast.setLocSts("R"); |
| | | locMastService.updateById(locMast); |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(locMast, "自动组托失败", basArm.getStaNoSou()+"码垛位置,===》自动组托失败,等待重试", false); |
| | | // log.error("机械臂抓取任务完成:"+JSON.toJSON(basArmMastList)+"===》自动组托失败,等待重试"); |
| | | } |
| | | } catch (Exception e){ |
| | | armTaskAssignmentCallApiLogSave(locMast, "自动组托失败", basArm.getStaNoSou()+"码垛位置,===》自动组托失败,等待重试", false); |
| | | // log.error("arm编号:"+basArm.getArmNo()+"====》机械臂抓取任务完成"+e.getMessage()); |
| | | } |
| | | break; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("机械臂抓取任务完成组托失败"+e.getMessage()); |
| | | } |
| | | } |
| | | public synchronized void armMissionAccomplishedScanToCheckIn() { |
| | | try{ |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | |
| | | * */ |
| | | public synchronized void armTaskAssignment() { |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<>()); |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().lt("arm_no",5)); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1){ |
| | | if (basArm.getStatus()!=1 || basArm.getArmNo()>4){ |
| | | continue; |
| | | } |
| | | try{ |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if(!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | String barcode = staProtocol.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | // log.error(staProtocol.getSiteId()+"码垛位置,===》托盘条码为空"); |
| | | continue; |
| | | } |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false); |
| | | |
| | | // log.error(staProtocol.getSiteId()+"码垛位置,===》托盘条码为空"); |
| | | continue; |
| | | } |
| | | |
| | | if(barcode.length()!=6){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码长度不是6位", staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode, false); |
| | | // log.error(staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode); |
| | | continue; |
| | | // throw new CoolException(staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode); |
| | | } |
| | | |
| | | int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode)); |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode)); |
| | | int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode)); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | // throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + barcode); |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在", staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false); |
| | | |
| | | // log.error(staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode); |
| | | continue; |
| | | } |
| | | |
| | |
| | | ); |
| | | if (!basArmMastListError.isEmpty()){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "存在异常机械臂任务", basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!", false); |
| | | |
| | | // log.error(basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!"); |
| | | continue; |
| | | } |
| | | List<BasArmMast> basArmMastListRuning = basArmMastService.selectList( |
| | |
| | | List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq( |
| | | |
| | | "sorting_line", basArm.getSortingLineSou()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 3) |
| | | ); |
| | | if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){ |
| | |
| | | } |
| | | if (basArmMastList.size()>1){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "任务待执行数量大于1,无法分辨待执行任务", "arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!", false); |
| | | |
| | | // log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!"); |
| | | continue; |
| | | } |
| | | BasArmMast basArmMast = basArmMastList.get(0); |
| | |
| | | if (basArmMastListOrder.size()==1){ |
| | | Thread.sleep(100); |
| | | |
| | | |
| | | List<BasArmMast> basArmMastListRuningBarCode2 = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("barcode", barcode) |
| | | new EntityWrapper<BasArmMast>().eq("barcode", barcode) |
| | | ); |
| | | if (!basArmMastListRuningBarCode2.isEmpty()){ |
| | | int binding_tags = basArmMastService.selectCount( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("status", 2) |
| | | .eq("binding_tags", basArmMast.getBindingTags()) |
| | | ); |
| | | |
| | | .eq("binding_tags", basArmMast.getBindingTags())); |
| | | if (binding_tags<2){ |
| | | BasArmMast basArmMastOne = basArmMastService.selectOne( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("status", 2) |
| | | .eq("binding_tags", basArmMast.getBindingTags()) |
| | | ); |
| | | .eq("binding_tags", basArmMast.getBindingTags())); |
| | | Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastOne.getOrderNo(), basArmMastOne.getMatnr(),basArmMastOne.getBindingTags()); |
| | | |
| | | if (anfmeSignOne>1D){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在!!!", staProtocol.getSiteId()+"码垛位置,条码数据正在自动组托===>>" + barcode, false); |
| | | continue; |
| | |
| | | |
| | | } |
| | | } |
| | | OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr()); |
| | | |
| | | if (Cools.isEmpty(orderDetlValueResultUtil)){ |
| | | continue; |
| | | } |
| | | // OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr()); |
| | | // if (Cools.isEmpty(orderDetlValueResultUtil)){ |
| | | // continue; |
| | | // } |
| | | OrderDetlValueResultUtil orderDetlValueResultUtil = new OrderDetlValueResultUtil(); |
| | | Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", basArmMast.getMatnr())); |
| | | orderDetlValueResultUtil.setHeight(mat.getHeight()); |
| | | orderDetlValueResultUtil.setWeight(mat.getWeight()); |
| | | orderDetlValueResultUtil.setLength(mat.getManLength()); |
| | | orderDetlValueResultUtil.setWidth(mat.getWidth()); |
| | | Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getMatnr(),basArmMast.getBindingTags()); |
| | | orderDetlValueResultUtil.setAnfme(anfmeSign); |
| | | //订单下发 |
| | | try{ |
| | | ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil); |
| | | ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArm,basArmMast,orderDetlValueResultUtil); |
| | | // 订单下发(SKU+订单) |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | // basArmMast.setStatus(1); |
| | | // basArmMast.setBarcode(barcode); |
| | | // basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | if (result.getCode()!=200){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false); |
| | | |
| | | // log.error("arm编号:"+basArm.getArmNo()+"机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单信息下发失败"); |
| | | continue; |
| | | } |
| | | } catch (Exception e){ |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false); |
| | | // log.error("arm编号:"+basArm.getArmNo()+"机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单下发订单信息下发失败"); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取任务信息下发失败", "arm编号:"+basArm.getArmNo()+"任务信息下发失败!!!", false); |
| | | // log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败"); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务下发失败"+e.getMessage()); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("arm任务下发失败"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * arm任务下发 |
| | | * */ |
| | | public synchronized void armTaskAssignment2() { |
| | | try{ |
| | | List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4)); |
| | | for (BasArm basArm : basArmList) { |
| | | if (basArm.getStatus()!=1 || basArm.getArmNo()<5){ |
| | | continue; |
| | | } |
| | | try{ |
| | | LocMast locMastEnd = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou())); |
| | | if(!locMastEnd.getLocSts().equals("D")){ |
| | | continue; |
| | | } |
| | | |
| | | String barcode = locMastEnd.getBarcode(); |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode)) { |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "托盘条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "托盘条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false); |
| | | continue; |
| | | } |
| | | |
| | | if(barcode.length()!=6){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码长度不是6位", basArm.getStaNoSou()+"码垛位置,条码长度不是6位===>>" + barcode, false); |
| | | continue; |
| | | } |
| | | |
| | | int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode)); |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode)); |
| | | int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode)); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在", basArm.getStaNoSou()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false); |
| | | continue; |
| | | } |
| | | |
| | | List<BasArmMast> basArmMastListRuningBarCode = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("barcode", barcode) |
| | | .eq("status", 3) |
| | | ); |
| | | if (!basArmMastListRuningBarCode.isEmpty()){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在,正在自动组托!!!", basArm.getStaNoSou()+"码垛位置,条码数据正在自动组托===>>" + barcode, false); |
| | | continue; |
| | | } |
| | | List<BasArmMast> basArmMastListError = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 9) |
| | | ); |
| | | if (!basArmMastListError.isEmpty()){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "存在异常机械臂任务", basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!", false); |
| | | continue; |
| | | } |
| | | List<BasArmMast> basArmMastListRuning = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 1) |
| | | ); |
| | | List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("status", 3) |
| | | ); |
| | | if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){ |
| | | List<BasArmMast> basArmMastList = basArmMastService.selectList( |
| | | new EntityWrapper<BasArmMast>() |
| | | .eq("arm_no", basArm.getArmNo()) |
| | | .eq("sorting_line", basArm.getSortingLineSou()) |
| | | .eq("sta_no", basArm.getStaNoSou()) |
| | | .eq("status", 0) |
| | | ); |
| | | if (basArmMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | if (basArmMastList.size()>1){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "任务待执行数量大于1,无法分辨待执行任务", "arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!", false); |
| | | continue; |
| | | } |
| | | BasArmMast basArmMast = basArmMastList.get(0); |
| | | // List<BasArmMast> basArmMastListOrder = basArmMastService.selectList( |
| | | // new EntityWrapper<BasArmMast>() |
| | | // .eq("arm_no", basArm.getArmNo()) |
| | | // .eq("sorting_line", basArm.getSortingLineSou()) |
| | | // .eq("matnr", basArmMast.getMatnr()) |
| | | // .eq("order_no", basArmMast.getOrderNo()) |
| | | // .eq("binding_tags", basArmMast.getBindingTags()) |
| | | // ); |
| | | // if (basArmMastListOrder.size()==1){ |
| | | // OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr()); |
| | | // |
| | | // if (Cools.isEmpty(orderDetlValueResultUtil)){ |
| | | // continue; |
| | | // } |
| | | |
| | | OrderDetlValueResultUtil orderDetlValueResultUtil = new OrderDetlValueResultUtil(); |
| | | Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", basArmMast.getMatnr())); |
| | | // Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getMatnr(),basArmMast.getBindingTags()); |
| | | orderDetlValueResultUtil.setAnfme(1D); |
| | | orderDetlValueResultUtil.setHeight(mat.getHeight()); |
| | | orderDetlValueResultUtil.setWeight(mat.getWeight()); |
| | | orderDetlValueResultUtil.setLength(mat.getManLength()); |
| | | orderDetlValueResultUtil.setWidth(mat.getWidth()); |
| | | //订单下发 |
| | | try{ |
| | | ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArm,basArmMast,orderDetlValueResultUtil); |
| | | // 订单下发(SKU+订单) |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam); |
| | | if (result.getCode()!=200){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false); |
| | | continue; |
| | | } |
| | | } catch (Exception e){ |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false); |
| | | continue; |
| | | } |
| | | // } |
| | | ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArm.getSortingLine()); |
| | | //设置工作空间就绪 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basArmMast.setStatus(1); |
| | | basArmMast.setBarcode(barcode); |
| | | basArmMastService.updateById(basArmMast); |
| | | } else { |
| | | armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取任务信息下发失败", "arm编号:"+basArm.getArmNo()+"任务信息下发失败!!!", false); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | |
| | | response, bool); |
| | | } |
| | | |
| | | public void armTaskAssignmentCallApiLogSave(LocMast locMast, String tableName, String response, Boolean bool) { |
| | | // 查询符合条件的所有 ApiLog |
| | | List<ApiLog> apiLogs = apiLogService.selectList(new EntityWrapper<ApiLog>() |
| | | .eq("namespace", "机械臂任务相关") |
| | | .eq("request", "站点号:" + locMast.getLocNo()) |
| | | .eq("response", response) |
| | | .eq("url", tableName) |
| | | .eq("client_ip", locMast.getBarcode()) |
| | | .eq("result", 0) |
| | | .orderBy("create_time", false) |
| | | ); |
| | | |
| | | // 遍历结果集,检查时间戳差值是否小于 5 分钟 |
| | | for (ApiLog apiLog : apiLogs) { |
| | | long parseLong = Long.parseLong(apiLog.getTimestamp()); |
| | | if (new Date().getTime() - parseLong < 5 * 1000 * 60) { |
| | | // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回 |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // 如果没有符合条件的记录,或者所有记录时间差大于 5 分钟,保存新的日志 |
| | | apiLogService.save("机械臂任务相关", tableName, "null", locMast.getBarcode(), |
| | | "站点号:" + locMast.getLocNo(), |
| | | response, bool); |
| | | } |
| | | |
| | | /* |
| | | * agv任务生成 Full |
| | | * */ |
| | |
| | | continue; |
| | | } |
| | | if (staProtocol.isAutoing() ) { |
| | | //staProtocol.getWorkNo()>10000 |
| | | if(staProtocol.getWorkNo()>10000){ |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("task_no", staProtocol.getWorkNo())); |
| | | if(!basAgvMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | | |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(staProtocol.getWorkNo().toString()); |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(outStaAgv.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/agv/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | basAgvMast.setFloorNo(1); |
| | | basAgvMast.setTaskNo(staProtocol.getWorkNo()); |
| | | basAgvMast.setSourceStaNo(outStaAgv.getStaNo()); |
| | | basAgvMast.setLocNo(dto.getLocNo()); |
| | | basAgvMast.setBarcode("1"); |
| | | basAgvMast.setSourceLocNo("1041"); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setIoType(2); |
| | | basAgvMastService.insert(basAgvMast); |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo())); |
| | | locMast.setLocSts("S"); |
| | | locMastService.updateById(locMast); |
| | | |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV出库容器解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | break; |
| | | } |
| | | }catch (Exception e){ |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | | |
| | | } |
| | | |
| | | } |
| | | WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | if(Cools.isEmpty(wrkMast)){ |
| | | continue; |
| | | } |
| | | if(wrkMast.getIoType() == 110 ){ |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("task_no", staProtocol.getWorkNo())); |
| | | if(!basAgvMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | |
| | | try { |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | | |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(staProtocol.getWorkNo().toString()); |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(outStaAgv.getStaNo()); |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/agv/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | basAgvMast.setFloorNo(1); |
| | | basAgvMast.setTaskNo(staProtocol.getWorkNo()); |
| | | basAgvMast.setSourceStaNo(outStaAgv.getStaNo()); |
| | | basAgvMast.setLocNo(dto.getLocNo()); |
| | | basAgvMast.setBarcode("1"); |
| | | basAgvMast.setSourceLocNo("1041"); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setIoType(2); |
| | | basAgvMastService.insert(basAgvMast); |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo())); |
| | | locMast.setLocSts("S"); |
| | | locMastService.updateById(locMast); |
| | | |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV出库容器解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | |
| | | } |
| | | }catch (Exception e){ |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | | |
| | | } |
| | | } |
| | | if (Cools.isEmpty(wrkMast) || Cools.isEmpty(wrkMast.getTakeNone()) || !wrkMast.getTakeNone().equals("1")){ |
| | | continue; |
| | | } |
| | |
| | | basAgvMast.setTaskNo(wrkMast.getWrkNo()); |
| | | basAgvMast.setSourceStaNo(outStaAgv.getStaNo()); |
| | | basAgvMast.setLocNo(dto.getLocNo()); |
| | | basAgvMast.setBarcode(wrkMast.getBarcode()); |
| | | basAgvMast.setSourceLocNo(wrkMast.getSourceLocNo()); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setIoType(2); |
| | | |
| | | basAgvMastService.insert(basAgvMast); |
| | | |
| | | |
| | | |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getBarcode()); |
| | | if(basAgvMast.getFloorNo() == 3){ |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",dto.getLocNo())); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | wrkMast.setTakeNone("2"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | } else { |
| | |
| | | // 获取入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(outStaAgv.getStaNo()); |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 6); |
| | | |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | |
| | | continue; |
| | | } |
| | | |
| | | String barcode = staProtocol.getBarcode(); |
| | | String barcode = barcodeThread.getBarcode();//2033 |
| | | if(!Cools.isEmpty(barcode)) { |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode); |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode)) { |
| | | // News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode); |
| | | continue; |
| | | } |
| | | } else { |
| | |
| | | if (staProtocol.isAutoing()) { |
| | | |
| | | // 判断重复工作档 |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("source_sta_no", outStaAgv.getStaNo())); |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("source_sta_no", outStaAgv.getStaNo()).eq("barcode",barcode)); |
| | | if (!basAgvMastList.isEmpty()) { |
| | | // News.info("{}号站点存在任务执行中,请等待任务执行完毕:{}", outStaAgv.getStaNo(), barcode); |
| | | continue; |
| | |
| | | if(barcode.equals("0")){ |
| | | continue; |
| | | } |
| | | List<LocMast> locMastListFull = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "O") |
| | | .ge("row1", 28) |
| | | .le("row1", 31) |
| | | ); |
| | | if(locMastListFull.isEmpty()){ |
| | | continue; |
| | | } |
| | | List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode)); |
| | | if (!locMastList.isEmpty()) { |
| | | News.info("{}号站点条码信息重复:{}", outStaAgv.getStaNo(), barcode); |
| | | // News.info("{}号站点条码信息重复:{}", outStaAgv.getStaNo(), barcode); |
| | | continue; |
| | | } |
| | | // 任务生成区 -------------------------------------------------------------------------- |
| | |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | basAgvMast.setTaskNo(outStaAgv.getStaNo()); |
| | | List<BasAgvMast> list = basAgvMastService.selectList( |
| | | new EntityWrapper<BasAgvMast>() |
| | | .eq("source_sta_no", outStaAgv.getStaNo()) |
| | | .in("task_no", 2033, 2031) |
| | | ); |
| | | boolean has2033 = false; |
| | | boolean has2034 = false; |
| | | for (BasAgvMast mast : list) { |
| | | if (mast.getTaskNo() == 2033) { |
| | | has2033 = true; |
| | | } |
| | | if (mast.getTaskNo() == 2031) { |
| | | has2034 = true; |
| | | } |
| | | } |
| | | |
| | | if (has2033 && has2034) { |
| | | return; |
| | | } else if (has2033) { |
| | | basAgvMast.setTaskNo(2031); |
| | | } else { |
| | | basAgvMast.setTaskNo(2033); |
| | | } |
| | | basAgvMast.setSourceStaNo(outStaAgv.getStaNo()); |
| | | basAgvMast.setLocNo(dto.getLocNo()); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setBarcode(barcode); |
| | | basAgvMast.setIoType(2); |
| | | basAgvMast.setFloorNo(2); |
| | | |
| | |
| | | News.error(JSON.toJSONString(staProtocol)); |
| | | } |
| | | } catch (Exception e) { |
| | | News.error(JSON.toJSONString(e.getMessage())); |
| | | News.error("AGV任务生成异常", e); |
| | | throw new CoolException("AGV任务生成异常"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | // 判断重复工作档 |
| | | List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", inStaAgv.getStaNo())); |
| | | if (!basAgvMastList.isEmpty()) { |
| | | News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", inStaAgv.getStaNo()); |
| | | // News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", inStaAgv.getStaNo()); |
| | | continue; |
| | | } |
| | | // 任务生成区 -------------------------------------------------------------------------- |
| | | |
| | | BasAgvMast basAgvMast = new BasAgvMast(); |
| | | try { |
| | | List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 23) |
| | | .le("row1", 32) |
| | | .orderBy("io_time",true) |
| | | ); |
| | | List<LocMast> locMastList = null; |
| | | Integer floorNo = 1; |
| | | if(inStaAgv.getStaNo() < 2000){ |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 21) |
| | | .le("row1", 26) |
| | | .orderBy("io_time",true) |
| | | ); |
| | | }else if(inStaAgv.getStaNo() < 4000){ |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 28) |
| | | .le("row1", 31) |
| | | .orderBy("io_time",true)); |
| | | floorNo = 2; |
| | | }else{ |
| | | locMastList = locMastService.selectList(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "R") |
| | | .ge("row1", 32) |
| | | .le("row1", 38) |
| | | .orderBy("io_time",true)); |
| | | floorNo = 3; |
| | | } |
| | | |
| | | for (LocMast locMast : locMastList){ |
| | | basAgvMast.setTaskNo(inStaAgv.getStaNo()); |
| | | basAgvMast.setSourceLocNo(locMast.getLocNo()); |
| | | basAgvMast.setStaNo(inStaAgv.getStaNo()); |
| | | basAgvMast.setDevpId(devp.getId()); |
| | | basAgvMast.setFloorNo(floorNo); |
| | | basAgvMast.setBarcode(locMast.getBarcode()); |
| | | basAgvMast.setIoType(0);//AGV库位==》输送线站点 0 |
| | | basAgvMastService.insert(basAgvMast); |
| | | break; |
| | |
| | | } |
| | | |
| | | if (staProtocol.isAutoing()){ |
| | | // |
| | | |
| | | AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast); |
| | | //任务下发 |
| | |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())) |
| | | || |
| | | (basAgvMast.getSourceStaNo().equals(2033))){ |
| | | |
| | | if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())) || basAgvMast.getSourceStaNo().equals(2033)){ |
| | | AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast); |
| | | if(basAgvMast.getFloorNo()==1) { |
| | | WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | agvBindCtnrAndBinParam.setCtnrCode(wrkMast.getBarcode()); |
| | | agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | if (resultBind.getCode()==200){ |
| | | //任务下发 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basAgvMast.setStatus(1); |
| | | basAgvMastService.updateById(basAgvMast); |
| | | } else { |
| | | agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | } |
| | | // WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | // AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast); |
| | | // agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString()); |
| | | // agvBindCtnrAndBinParam.setCtnrTyp("1"); |
| | | // ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam); |
| | | // if (resultBind.getCode()==200){ |
| | | // //任务下发 |
| | | // ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | // if (result.getCode()==200){ |
| | | // basAgvMast.setStatus(1); |
| | | // basAgvMastService.updateById(basAgvMast); |
| | | // } else { |
| | | // agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | // } |
| | | // } else { |
| | | // agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | // } |
| | | //任务下发 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | if (result.getCode()==200){ |
| | | basAgvMast.setStatus(1); |
| | | basAgvMastService.updateById(basAgvMast); |
| | | } else { |
| | | agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false); |
| | | } |
| | | }else{ |
| | | if (!Cools.isEmpty(basAgvMast.getSourceStaNo())){ |
| | | if (basAgvMast.getSourceStaNo().equals(4006)){ |
| | | |
| | | AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam(); |
| | | agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId())); |
| | | agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode()); |
| | | agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getSourceStaNo().toString()); |
| | | agvBindCtnrAndBinTwoParam.setIndBind("1");; |
| | | ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑", |
| | | AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam); |
| | | if (resultBind.getCode()!=200){ |
| | | basAgvMast.setStatus(4); |
| | | basAgvMastService.updateById(basAgvMast); |
| | | } |
| | | } |
| | | } |
| | | //任务下发 |
| | | ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam); |
| | | if (result.getCode()==200){ |