From b9927bd58cdc940069c7640f3cc04a60dd37ef87 Mon Sep 17 00:00:00 2001 From: lsh <1> Date: 星期四, 21 三月 2024 10:05:49 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 283 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 178 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index fc220a1..a4ea3e0 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -7,6 +7,7 @@ import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; import com.zy.asrs.controller.OpenController; +import com.zy.asrs.controller.SiteController; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.domain.param.CrnOperatorParam; @@ -101,6 +102,8 @@ private String taskStatusFeedbackPath; @Autowired private CrnController crnController; + @Autowired + private SiteController siteController; public void generateStoreWrkFile() throws IOException, InterruptedException { @@ -179,7 +182,7 @@ // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() - && !staProtocol.isEmptyMk() && (workNo >= 0) + && !staProtocol.isEmptyMk() && (workNo == 9991 ) && staProtocol.isPakMk()) { // 鑾峰彇鏉$爜鎵弿浠俊鎭� BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); @@ -187,13 +190,25 @@ continue; } String barcode = barcodeThread.getBarcode(); - if(!Cools.isEmpty(barcode)) { + if(!Cools.isEmpty(barcode) && !barcode.equals("99999999")) { // 璇锋眰wms鎺ュ彛锛岃幏鍙栧伐浣滃彿鍜岀洰鏍囧簱浣� ToWmsDTO toWmsDTO = new ToWmsDTO(barcode,staProtocol.getSiteId(),staProtocol.isHigh() ? 2 : 1); TaskWrk taskWrk1=taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode",barcode)); if(!Cools.isEmpty(taskWrk1)){ log.info("鎵樼洏鐮侊細"+barcode+"浠诲姟妗e瓨鍦�"); - continue; + if (taskWrk1.getIoType()==1 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())){ + StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() + .eq("crn_no", taskWrk1.getCrnNo()).eq("type_no",1).eq("stn_no",staProtocol.getSiteId())); + if (Cools.isEmpty(staDesc)){ + log.info("鎵樼洏鐮侊細"+barcode+"浠诲姟妗e瓨鍦�"); + return; + }else { + staProtocol.setWorkNo(taskWrk1.getWrkNo().shortValue()); + staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + } + } + return; } HashMap<String, Object> headParam = new HashMap<>(); headParam.put("Content-Type","application/json"); @@ -218,6 +233,41 @@ log.info("鍏ュ簱璇锋眰鍙傛暟{}" + JSON.toJSONString(toWmsDTO)); if (jsonObject.getInteger("code").equals(200) && !Cools.isEmpty(jsonObject.get("data").toString())) { GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class); + + //鏌ョ湅璇ュ簱浣嶆槸鍚︿负绌哄簱浣� + LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>() + .eq("loc_sts","O") + .eq("loc_no",getWmsDto.getLocNo())); + if(Cools.isEmpty(locMast)){ + try{ + HashMap<String, Object> headParam1 = new HashMap<>(); + headParam1.put("taskNo",getWmsDto.getTaskNo()); + headParam1.put("status",6); + headParam1.put("ioType",1); + headParam1.put("barcode",barcode); + String response2; + response2 = new HttpHandler.Builder() + // .setHeaders(headParam) + .setUri(wmsUrl) + .setPath(taskStatusFeedbackPath) + .setJson(JSON.toJSONString(headParam1)) + .build() + .doPost(); + JSONObject jsonObject1 = JSON.parseObject(response2); + apiLogService.save("wcs娲惧彂搴撲綅涓嶄负绌轰笂鎶ms" + ,wmsUrl+taskStatusFeedbackPath + ,null + ,"127.0.0.1" + ,JSON.toJSONString(headParam1) + ,response + ,true + ); + }catch (Exception e){ + log.error("wcs娲惧彂搴撲綅涓嶄负绌轰笂鎶ms", getWmsDto.getWrkNo()); + throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触"); + } + } + // 鍒涙柊涓�涓叆搴撳伐浣滄。 TaskWrk taskWrk = taskWrkService.selectByTaskNo(getWmsDto.getWrkNo()); if(Cools.isEmpty(taskWrk)) { @@ -311,6 +361,24 @@ // } // } + } else { + // 閫�鍥� + log.error("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg); +// staProtocol.setWorkNo((short)0); +// staProtocol.setStaNo(inSta.getStaNo().shortValue()); +// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// +// Thread.sleep(500); + + staProtocol.setWorkNo((short)9999); + staProtocol.setStaNo(inSta.getStaNo().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); + if (taskWrk != null) { + taskWrk.setMemo(errMsg);//灏嗛敊璇爜瀛樺叆澶囨敞瀛楁杩涜灞曠ず + taskWrkMapper.updateById(taskWrk); + } } } @@ -347,44 +415,10 @@ if (taskWrk == null) { continue; } - // 鍒ゆ柇宸ヤ綔妗f潯浠� - if (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2) { - // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗� - CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, taskWrk.getCrnNo()); - CrnProtocol crnProtocol = crnThread.getCrnProtocol(); - if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { - // 绉诲姩涓� - continue; - } - // 鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁� - if (crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED && crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue()) - && crnProtocol.getTaskFinish() == 0 - && crnProtocol.forkPosType == CrnForkPosType.HOME) { - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - - //鍙栧嚭杈撻�佺嚎鍛戒护 - List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo()); - if (commandInfos.isEmpty()) { - continue;//鍛戒护绌� - } - -// CommandPackage commandPackage = JSON.parseObject(commandInfo.getCommand(), CommandPackage.class);//鍙栧嚭鍛戒护鎶ユ枃 -// CrnCommand crnCommand = JSON.parseObject(commandPackage.getCommand().toString(), CrnCommand.class); - Integer commandStep = taskWrk.getCommandStep(); - CommandInfo commandInfo = commandInfos.get(commandStep); - CommandPackage commandPackage = JSON.parseObject(commandInfo.getCommand(), CommandPackage.class);//鍙栧嚭鍛戒护鎶ユ枃 - //StaProtocol staProtocol1 = JSON.parseObject(commandInfo.getCommand(), StaProtocol.class); - StaProtocol staProtocol1 = JSON.parseObject(commandPackage.getCommand().toString(), StaProtocol.class); - if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol1))) { - log.error("杈撻�佺嚎鍛戒护涓嬫柟澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", taskWrk.getWrkNo()); - continue;//鍛戒护涓嬪彂澶辫触 - } - - // 澶嶄綅鍫嗗灈鏈� - crnThread.setResetFlag(true); - - } - } + siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()),taskWrk.getWrkNo().shortValue(),(short)0,"Y",false,false); + taskWrk.setStatus(5); + taskWrk.setWrkSts(14); + taskWrkService.updateById(taskWrk); } } @@ -752,13 +786,13 @@ for (TaskWrk taskWrk : taskWrks){ // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� - if (Utils.isDeepLoc(slaveProperties, taskWrk.getStartPoint())) { - String shallowLocNo = Utils.getShallowLoc(slaveProperties, taskWrk.getStartPoint()); - TaskWrk hallowLocNoTask = taskWrkMapper.selectByStartPoint(shallowLocNo); - if (!Cools.isEmpty(hallowLocNoTask)){ - continue; - } - } +// if (Utils.isDeepLoc(slaveProperties, taskWrk.getStartPoint())) { +// String shallowLocNo = Utils.getShallowLoc(slaveProperties, taskWrk.getStartPoint()); +// TaskWrk hallowLocNoTask = taskWrkMapper.selectByStartPoint(shallowLocNo); +// if (!Cools.isEmpty(hallowLocNoTask)){ +// continue; +// } +// } // 鍫嗗灈鏈烘帶鍒惰繃婊� if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { continue; @@ -768,44 +802,7 @@ if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) { continue; } - if (Cools.isEmpty(taskWrk.getTargetPoint())){ - List<Integer> list = openServiceImpl.getInEnableRoadway(); - Map<String, Object> map = new HashMap<>(); - map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2"); - ToWmsDTO toWmsDTO = new ToWmsDTO(); - toWmsDTO.setWarehouseId("1688469798893297665"); - toWmsDTO.setContainerCode(taskWrk.getBarcode()); - toWmsDTO.setApplyType("TUNNEL_LOCATION"); - toWmsDTO.setTaskTunnel(taskWrk.getCrnNo()); - toWmsDTO.setCanInboundTunnels(list); - String response = null; - try { - response = new HttpHandler.Builder() - .setHeaders(map) - .setUri(wmsUrl) - .setPath("wcsManager/wcsInterface/inboundTaskApply") - .setJson(JSON.toJSONString(toWmsDTO)) - .build() - .doPost(); - }catch (Exception e){ - log.error("wms閫氳澶辫触,"+e.getMessage()); - continue; - } - JSONObject jsonObject = JSON.parseObject(response); - if (jsonObject.getInteger("code").equals(200)) { - GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class); - taskWrk.setOriginTargetPoint(getWmsDto.getTargetLocationCode()); - taskWrk.setTargetPoint(Utils.getWcsLocNo(getWmsDto.getTargetLocationCode())); - if (!taskWrkService.updateById(taskWrk)){ - log.error("淇濆瓨wms搴撲綅鍙峰け璐�"); - } - continue; - }else { - log.error("wms閫氳澶辫触,"+jsonObject.get("msg")); - continue; - } - } if (taskWrk == null || Cools.isEmpty(taskWrk.getTargetPoint()) || taskWrk.getTargetPoint().equals("") || taskWrk.getWrkNo() == null) { continue; } @@ -826,12 +823,12 @@ crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosZ(Utils.getRowShort(taskWrk.getStartPoint())); // 婧愬簱浣嶆帓 - crnCommand.setSourcePosX(Utils.getBayShort(taskWrk.getStartPoint())); // 婧愬簱浣嶅垪 - crnCommand.setSourcePosY(Utils.getLevShort(taskWrk.getStartPoint())); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鎺� - crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鍒� - crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅灞� + crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint())); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint())); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint())); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅灞� crnCommand.setCommand((short) 1); if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand),false)) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); @@ -839,20 +836,39 @@ // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� Date now = new Date(); taskWrk.setWrkSts(12); + taskWrk.setStatus(2); taskWrk.setModiTime(now); if (taskWrkMapper.updateById(taskWrk) == 0) { log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo()); } - //寮�濮嬭繍琛� - String response = CrnStartRunning(taskWrk); - JSONObject jsonObject = JSON.parseObject(response); - if (jsonObject.getInteger("code").equals(200)) { - - }else { - log.error("绉诲簱浠诲姟寮�濮嬭繍琛岄�氳澶辫触,"+jsonObject.get("msg")); - continue; + try{ + HashMap<String, Object> headParam = new HashMap<>(); + headParam.put("taskNo",taskWrk.getTaskNo()); + headParam.put("status",taskWrk.getStatus()); + headParam.put("ioType",taskWrk.getIoType()); + headParam.put("barcode",taskWrk.getBarcode()); + String response; + response = new HttpHandler.Builder() + // .setHeaders(headParam) + .setUri(wmsUrl) + .setPath(taskStatusFeedbackPath) + .setJson(JSON.toJSONString(headParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + apiLogService.save("wcs娲惧彂绉诲簱浠诲姟涓婃姤wms" + ,wmsUrl+taskStatusFeedbackPath + ,null + ,"127.0.0.1" + ,JSON.toJSONString(headParam) + ,response + ,true + ); + }catch (Exception e){ + log.error("wcs娲惧彂鍑哄簱浠诲姟涓婃姤wms澶辫触", taskWrk); + throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触"); } - break; + } return; } @@ -933,7 +949,7 @@ crnController.crnTaskComplete(crnOperatorParam); if(!Cools.isEmpty(taskWrk)){ - if(taskWrk.getIoType()==1){ + if(taskWrk.getIoType()==1&&taskWrk.getWrkSts()==3){ taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚 taskWrk.setStatus(5);//瀹岀粨 //鏇存柊搴撲綅鐘舵�� @@ -943,8 +959,8 @@ locMast.setModiTime(new Date()); locMast.setModiUser(9999L); locMastService.updateById(locMast); - }else if(taskWrk.getIoType()==2){ - taskWrk.setWrkSts(14);//鍑哄簱瀹屾垚 + }else if(taskWrk.getIoType()==2&&taskWrk.getWrkSts()==12){ + taskWrk.setWrkSts(13);//鍑哄簱瀹屾垚 taskWrk.setStatus(5);//瀹岀粨 //鏇存柊搴撲綅鐘舵�� LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); @@ -953,7 +969,7 @@ locMast.setModiTime(new Date()); locMast.setModiUser(9999L); locMastService.updateById(locMast); - }else if(taskWrk.getIoType()==3){ + }else if(taskWrk.getIoType()==3&&taskWrk.getWrkSts()==12){ taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚 taskWrk.setStatus(5);//瀹岀粨 //鏇存柊搴撲綅鐘舵�� @@ -1146,7 +1162,64 @@ } } - //鑷姩瀹屾垚浠诲姟 + //agv鍙栨斁璐т换鍔″畬鎴� + public synchronized void autoCompleteAGV() { + List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>()); + try{ + Thread.sleep(500); + }catch (Exception e){ + + } + + for (BasDevp basDevp:basDevps){ + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (basDevp.getWrkNo()!=0){ + if (basDevp.getAgvTargetPick()!=0){//鍙栬揣 + staProtocol.setAgvTypeSign((short)0); + staProtocol.setStaNo(basDevp.getDevNo().shortValue()); + MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); + } + boolean sign = true; + if (basDevp.getAgvTargetPlace()!=0){ + sign = false; + basDevp.setAgvTargetPlace(0); + basDevpService.updateById(basDevp); + staProtocol.setAgvTypeSign((short)3);//1 + staProtocol.setStaNo(basDevp.getDevNo().shortValue()); + MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); + } + }else { + if (basDevp.getAgvTargetPlace()!=0){ + if (basDevp.getLoading().equals("Y")){ + staProtocol.setAgvTypeSign((short)1); + staProtocol.setStaNo(basDevp.getDevNo().shortValue()); + MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); + }else { + log.error("AGV鏀捐揣瀹屾垚浣嗚緭閫佺嚎鏃犵墿锛屽浣嶄俊鍙� ===>> [staNo:{}] [basDevp:{}]", basDevp.getDevNo(), basDevp); + basDevp.setAgvTargetPlace(0); + basDevpService.updateById(basDevp); + staProtocol.setAgvTypeSign((short)3);//1 + staProtocol.setStaNo(basDevp.getDevNo().shortValue()); + MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); + } + + } + if (basDevp.getAgvTargetPick()!=0){ + basDevp.setAgvTargetPick(0); + basDevpService.updateById(basDevp); + staProtocol.setAgvTypeSign((short)2);//0 + staProtocol.setStaNo(basDevp.getDevNo().shortValue()); + MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); + } + } + } + } public synchronized void autoCompleteTask() { List<TaskWrk> taskWrks = taskWrkMapper.selectWorkingTask(); for (TaskWrk taskWrk : taskWrks) { -- Gitblit v1.9.1