From d835d1b51f832889929cdf69010034a30ef44d02 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期四, 17 十月 2024 13:57:29 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 224 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 161 insertions(+), 63 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 ed02346..1c69d07 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,17 +9,13 @@ 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; import com.zy.asrs.wcs.core.entity.*; import com.zy.asrs.wcs.core.kernel.AnalyzeService; 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.model.enums.*; import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; @@ -83,7 +79,13 @@ @Autowired private BasConveyorStaService basConveyorStaService; @Autowired + private BasConveyorPathService basConveyorPathService; + @Autowired private BasLedService basLedService; + @Autowired + private DeviceBarcodeService deviceBarcodeService; + @Autowired + private ShuttleChargeStaService shuttleChargeStaService; /** * 缁勬墭 @@ -99,6 +101,11 @@ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId())); // 閬嶅巻鍏ュ簱鍙� for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) { + BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString()); + if(basConveyorSta == null) { + continue; + } + // 鑾峰彇鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); @@ -156,13 +163,18 @@ ) { // 鑾峰彇鏉$爜鎵弿浠俊鎭� - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); + DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId()); + if(deviceBarcode == null) { + continue; + } + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId())); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); if (!Cools.isEmpty(barcode)) { - News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); + News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", deviceBarcode.getId(), barcode); + if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) { staProtocol.setWorkNo((short) 32002); staProtocol.setStaNo(inSta.getBackSta().shortValue()); @@ -208,10 +220,10 @@ param.setBarcode(barcode); param.setIoType(1); param.setSourceStaNo(inSta.getStaNo()); - param.setLocType1(staProtocol.getLocType1().shortValue()); + param.setLocType1((short)1); String response = new HttpHandler.Builder() .setUri(wmsUrl) - .setPath("/rpc/pakin/loc/v2") + .setPath("/rpc/pakin/loc/v1") .setJson(JSON.toJSONString(param)) .build() .doPost(); @@ -220,9 +232,18 @@ 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); + //鑾峰彇杈撻�佽矾寰� + 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"); @@ -297,6 +318,17 @@ mapNode.setNo(object.getString("row") + "-" + object.getString("bay")); mapNode.setXBase(object.getInteger("refx")); mapNode.setYBase(object.getInteger("refy")); + + if(mapNode.getValue() == MapNodeType.CONVEYOR.id) { + //杈撻�佺嚎,鍒ゆ柇灏忚溅鏄惁鍙蛋 + if (object.containsKey("conveyorHasGo")) { + if(object.getBoolean("conveyorHasGo")) { + //灏忚溅鍙蛋 + mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id); + } + } + } + nodes.add(mapNode); } @@ -319,7 +351,7 @@ //瀛樺湪绌虹己鑺傜偣锛岃嚜鍔ㄨˉ瓒� for (int i = defaultBay; i < node.getBay(); i++) { MapNode mapNode = new MapNode(); - mapNode.setValue(-1); + mapNode.setValue(MapNodeType.DISABLE.id); mapNode.setTop(1000); mapNode.setBottom(1000); mapNode.setLeft(1000); @@ -346,7 +378,7 @@ ArrayList<ArrayList<MapNode>> lists = entry.getValue();//鑾峰彇鍦板浘 MapNode mapNode = new MapNode(); - mapNode.setValue(-1); + mapNode.setValue(MapNodeType.DISABLE.id); mapNode.setTop(1000); mapNode.setBottom(1000); mapNode.setLeft(1000); @@ -411,6 +443,46 @@ // 瑙f瀽鍏ュ簱宸ヤ綔妗� public synchronized void analyzeInBoundTask() { for (Task task : taskService.selectWaitAnalyzeInBoundTask()) { + BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, task.getDestSite())); + if (basConveyorSta == null) { + continue; + } + BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId()); + if (basConveyor == null) { + continue; + } +// DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId()); +// if (deviceBarcode == null) { +// continue; +// } +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId())); +// if (barcodeThread == null) { +// continue; +// } +// if (!barcodeThread.getBarcode().equals(task.getZpallet())) { +// continue; +// } + if (Cools.isEmpty(basConveyorSta.getTaskNo())){ + continue; + } + if (!basConveyorSta.getTaskNo().toString().equals(task.getWmsTaskNo())){ + continue; + } + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); + if (devpThread == null) { + continue; + } + StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo()); + if (staProtocol == null) { + continue; + } + if (!(staProtocol.isAutoing() + && staProtocol.isLoading() + && staProtocol.isInEnable())) { + continue; + } + + if (Cools.isEmpty(task.getShuttleNo())) { //鍒嗛厤灏忚溅 //鎼滅储绌洪棽杞� @@ -433,7 +505,7 @@ 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); // 宸ヤ綔鐘舵�� @@ -459,21 +531,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()); @@ -506,7 +583,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); // 宸ヤ綔鐘舵�� @@ -540,11 +617,11 @@ } // 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); // 宸ヤ綔鐘舵�� @@ -559,14 +636,6 @@ * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數 */ public synchronized void loopShuttleCharge() { - // 鑾峰彇鍏呯數妗╁簱浣嶇被鍨� - LocCtg locCtg = locCtgService.getOne(new LambdaQueryWrapper<LocCtg>() - .eq(LocCtg::getFlag, "CHARGE") - .eq(LocCtg::getStatus, 1)); - if (locCtg == null) { - return; - } - //鑾峰彇鍏呯數浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.CHARGE)) @@ -601,20 +670,19 @@ String currentLocNo = shuttleProtocol.getCurrentLocNo(); int lev = Utils.getLev(currentLocNo);//鑾峰彇灏忚溅妤煎眰 //鎼滅储灏忚溅褰撳墠妤煎眰鍏呯數妗� - ArrayList<Loc> allChargeLoc = new ArrayList<>(); - List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>() - .eq(Loc::getLocCtg, locCtg.getId()) - .eq(Loc::getStatus, 1) - .eq(Loc::getLev, lev)); + ArrayList<ShuttleChargeSta> allChargeLoc = new ArrayList<>(); + + List<ShuttleChargeSta> list1 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>() + .eq(ShuttleChargeSta::getDeviceLev, lev) + .eq(ShuttleChargeSta::getStatus, 1)); if (!list1.isEmpty()) { allChargeLoc.addAll(list1); } //鎼滅储鍏朵粬妤煎眰鍏呯數妗� - List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>() - .eq(Loc::getLocCtg, locCtg.getId()) - .eq(Loc::getStatus, 1) - .notIn(Loc::getLev, lev)); + List<ShuttleChargeSta> list2 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>() + .notIn(ShuttleChargeSta::getDeviceLev, lev) + .eq(ShuttleChargeSta::getStatus, 1)); if (!list2.isEmpty()) { allChargeLoc.addAll(list2); } @@ -625,24 +693,34 @@ } //閫夋嫨绌洪棽鍏呯數妗� - Loc chargeLoc = null; - for (Loc loc : allChargeLoc) { + ShuttleChargeSta chargeSta = null; + for (ShuttleChargeSta shuttleChargeSta : allChargeLoc) { // 鍒ゆ柇鍏呯數浣嶆槸鍚﹁鍗犵敤(杞﹁締浣嶇疆) - if (Utils.hasShuttleInLoc(loc.getLocNo(), device.getId())) { + if (Utils.hasShuttleInLoc(shuttleChargeSta.getDeviceLoc(), device.getId())) { continue; } // 鐩樼偣鍏呯數浣嶆槸鍚﹀瓨鍦ㄤ换鍔℃。 - List<Task> tasks = taskService.hasChargeInLoc(loc.getLocNo()); + List<Task> tasks = taskService.hasChargeInLoc(shuttleChargeSta.getDeviceLoc()); if (!tasks.isEmpty()) { continue; } - chargeLoc = loc; + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() + .eq(Loc::getLocNo, shuttleChargeSta.getDeviceLoc())); + if (loc == null) { + continue; + } + + if (!loc.getLocSts().equals(LocStsType.C.val())) { + continue;//搴撲綅涓嶆槸鍏呯數妗� + } + + chargeSta = shuttleChargeSta; break; } - if (chargeLoc == null) { + if (chargeSta == null) { continue;//鏈壘鍒板厖鐢垫々 } @@ -663,7 +741,7 @@ continue; } - String chargeLocNo = chargeLoc.getLocNo(); + String chargeLocNo = chargeSta.getDeviceLoc(); Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); task.setTaskNo(String.valueOf(Utils.getTaskNo("CHARGE"))); @@ -687,7 +765,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)) { @@ -703,14 +781,6 @@ * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 婊$數鍚庡洖鍒板緟鏈轰綅 */ public synchronized void loopShuttleToStandbyCauseCharge() { - Integer enoughPower = 90; - Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>() - .eq(Dict::getFlag, "chargeMaxValue") - .eq(Dict::getStatus, 1)); - if (dict != null) { - enoughPower = Integer.parseInt(dict.getValue()); - } - //鑾峰彇杩佺Щ浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE)) @@ -756,8 +826,21 @@ continue; } + ShuttleChargeSta chargeSta = shuttleChargeStaService.getOne(new LambdaQueryWrapper<ShuttleChargeSta>() + .eq(ShuttleChargeSta::getDeviceLoc, chargeTask.getDestLoc()) + .eq(ShuttleChargeSta::getStatus, 1)); + if (chargeSta == null) { + continue;//鍏呯數妗╀笉瀛樺湪锛屽紓甯� + } + + String standbyLoc = chargeSta.getStandbyLoc(); + if (standbyLoc == null) { + continue;//閬胯浣嶇疆鏁版嵁涓嶅瓨鍦� + } + List<String> availableLoc = JSON.parseArray(standbyLoc, String.class); + //鑾峰彇閬胯浣嶇疆 - String standByLocNo = shuttleDispatcher.searchStandByLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo()); + String standByLocNo = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), availableLoc); Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); @@ -782,7 +865,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); @@ -811,8 +894,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泦鍚� @@ -892,8 +980,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) { @@ -922,8 +1015,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