From 8a830f3e5f9ff3bca3161b5bf800abeb1a64e866 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期六, 22 六月 2024 16:30:35 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 123 +++++++++++++++++++++++++++++----------- 1 files changed, 88 insertions(+), 35 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java index e3860e7..1791776 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java @@ -9,7 +9,6 @@ import com.zy.asrs.common.utils.HttpHandler; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.SnowflakeIdWorker; -import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.core.domain.dto.MatDto; import com.zy.asrs.wcs.core.domain.dto.RedisMapDto; import com.zy.asrs.wcs.core.domain.dto.StaDto; @@ -18,6 +17,7 @@ import com.zy.asrs.wcs.core.model.MapNode; import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; import com.zy.asrs.wcs.core.model.enums.MotionStsType; +import com.zy.asrs.wcs.core.model.enums.TaskCtgType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.core.utils.RedisUtil; @@ -81,6 +81,8 @@ private BasConveyorService basConveyorService; @Autowired private BasConveyorStaService basConveyorStaService; + @Autowired + private BasConveyorPathService basConveyorPathService; @Autowired private BasLedService basLedService; @@ -180,7 +182,7 @@ //鑾峰彇鍏ュ簱浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "IN") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.IN)) .eq(TaskCtg::getStatus, 1)); // 鍒ゆ柇閲嶅宸ヤ綔妗� @@ -219,10 +221,19 @@ Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { StartupDto dto = jsonObject.getObject("data", StartupDto.class); - devpThread.writeWorkSta(staProtocol.getSiteId(), dto.getWorkNo().shortValue(), dto.getStaNo().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - } else if (code == 500) { + //鑾峰彇杈撻�佽矾寰� + BasConveyorPath conveyorPath = basConveyorPathService.getOne(new LambdaQueryWrapper<BasConveyorPath>() + .eq(BasConveyorPath::getTypeNo, TaskCtgType.IN.val()) + .eq(BasConveyorPath::getDeviceId, devp.getId()) + .eq(BasConveyorPath::getStnNo, staProtocol.getSiteId())); + if (conveyorPath == null) { + News.error("杈撻�佽矾寰勪笉瀛樺湪"); + }else { + devpThread.writeWorkSta(staProtocol.getSiteId(), dto.getWorkNo().shortValue(), conveyorPath.getDeviceStn().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + } + }else { if (ledThread != null) { String errorMsg = jsonObject.getString("msg"); if (!Cools.isEmpty(errorMsg)) { @@ -231,18 +242,6 @@ } } News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); - } else if (code == 700) { -// staProtocol.setWorkNo((short) 32002); -// staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿 -// devpThread.setPakMk(staProtocol.getSiteId(), false); -// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol)); - - // led 寮傚父鏄剧ず - if (ledThread != null) { - String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒"; - ledThread.error(errorMsg); - ledThread.setLedMk(false); - } } } catch (Exception e) { e.printStackTrace(); @@ -422,12 +421,29 @@ // 瑙f瀽鍏ュ簱宸ヤ綔妗� public synchronized void analyzeInBoundTask() { for (Task task : taskService.selectWaitAnalyzeInBoundTask()) { + if (Cools.isEmpty(task.getShuttleNo())) { + //鍒嗛厤灏忚溅 + //鎼滅储绌洪棽杞� + ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task); + if (shuttleThread == null) { + News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo()); + continue; + } + + task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿 + task.setUpdateTime(new Date()); + if (!taskService.updateById(task)) { + News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo()); + } + continue; + } + // generate motion list List<Motion> motionList = analyzeService.generateMotion(task); if (motionList.isEmpty()) { continue; } - motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo())); + motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); // 鏇存柊宸ヤ綔涓绘。 task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵�� @@ -453,21 +469,26 @@ continue; } - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, originStaObj.getConveyorId().intValue()); + BasConveyor basConveyor = basConveyorService.getById(originStaObj.getConveyorId()); + if(basConveyor == null) { + continue; + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getOriginSite()));//婧愮珯 - StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔� - if (staProtocol == null || staProtocol1 == null) { +// StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔� + if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); - staProtocol1 = staProtocol1.clone(); +// staProtocol1 = staProtocol1.clone(); } // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵�� if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { - if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) { - continue; - } +// if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) { +// continue; +// } // //鍚屽簱浣嶇粍鏍¢獙 // List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo()); @@ -500,7 +521,7 @@ log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo()); continue; } - motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo())); + motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); // 鏇存柊宸ヤ綔涓绘。 task.setTaskSts(TaskStsType.ANALYZE_OUTBOUND.sts); // 宸ヤ綔鐘舵�� @@ -516,12 +537,29 @@ // 瑙f瀽灏忚溅绉诲姩宸ヤ綔妗� public synchronized void analyzeMoveTask() { for (Task task : taskService.selectWaitAnalyzeMoveTask()) { + if (Cools.isEmpty(task.getShuttleNo())) { + //鍒嗛厤灏忚溅 + //鎼滅储绌洪棽杞� + ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task); + if (shuttleThread == null) { + News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo()); + continue; + } + + task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿 + task.setUpdateTime(new Date()); + if (!taskService.updateById(task)) { + News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo()); + } + continue; + } + // generate motion list - List<Motion> motionList = analyzeService.generateMotion(task); + List<Motion> motionList = analyzeService.generateShuttleMoveMotion(task); if (motionList.isEmpty()) { continue; } - motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo())); + motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); // 鏇存柊宸ヤ綔涓绘。 task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts); // 宸ヤ綔鐘舵�� @@ -546,7 +584,7 @@ //鑾峰彇鍏呯數浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "CHARGE") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.CHARGE)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return; @@ -664,7 +702,7 @@ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo()); continue; } - motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo())); + motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); task.setTaskSts(TaskStsType.ANALYZE_CHARGE.sts); if (!taskService.save(task)) { @@ -690,7 +728,7 @@ //鑾峰彇杩佺Щ浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "MOVE") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return; @@ -759,7 +797,7 @@ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo()); continue; } - motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo())); + motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts); @@ -788,8 +826,13 @@ .eq(BasLed::getDeviceId, ledDevice.getId())); List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class); + BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId().intValue()); + if (basConveyor == null) { + continue; + } + // 鑾峰彇杈撻�佺嚎plc绾跨▼ - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue()); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); // 鍛戒护闆嗗悎 List<LedCommand> commands = new ArrayList<>(); // 宸ヤ綔妗i泦鍚� @@ -869,8 +912,13 @@ .eq(BasLed::getDeviceId, ledDevice.getId())); List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class); + BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId().intValue()); + if (basConveyor == null) { + continue; + } + // 鑾峰彇杈撻�佺嚎plc绾跨▼ - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue()); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); // 鍛戒护闆嗗悎 boolean reset = true; for (Integer staNo : staArr) { @@ -899,8 +947,13 @@ .eq(BasLed::getDeviceId, ledDevice.getId())); List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class); + BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId()); + if (basConveyor == null) { + continue; + } + // 鑾峰彇杈撻�佺嚎plc绾跨▼ - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue()); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); // 鍛戒护闆嗗悎 boolean reset = true; for (Integer staNo : staArr) { -- Gitblit v1.9.1