From 50435a81915932eda06b7f1afd48f9ff1ae84f19 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期四, 10 四月 2025 17:50:28 +0800
Subject: [PATCH] 1
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 281 +++++++++++++++++++++++++++++++++----------------------
1 files changed, 169 insertions(+), 112 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 cbc2831..e5efb23 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
@@ -28,13 +28,17 @@
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
import com.zy.asrs.wcs.rcs.service.DeviceService;
-import com.zy.asrs.wcs.rcs.thread.*;
+import com.zy.asrs.wcs.rcs.thread.DevpThread;
+import com.zy.asrs.wcs.rcs.thread.LedThread;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+
import java.util.*;
/**
@@ -89,6 +93,71 @@
@Autowired
private ShuttleStandbyService shuttleStandbyService;
+
+ private boolean isInEnable(DevpThread devpThread, Integer staNo) {
+ if (staNo == null) {
+ return false;
+ }
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ switch (staNo) {
+ case 1011:
+ case 1012:
+ devpThread.getStation().get(1012).isInEnable();
+ break;
+ case 1021:
+ case 1022:
+ case 1023:
+ devpThread.getStation().get(1022).isInEnable();
+ break;
+ case 1031:
+ case 1032:
+ devpThread.getStation().get(1032).isInEnable();
+ break;
+ case 1025:
+ case 1026:
+ devpThread.getStation().get(1025).isInEnable();
+ break;
+ case 1013:
+ case 1014:
+ case 1015:
+ devpThread.getStation().get(1014).isInEnable();
+ break;
+ }
+ return false;
+ }
+
+ private boolean isOutEnable(DevpThread devpThread, Integer staNo) {
+ if (staNo == null) {
+ return false;
+ }
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ switch (staNo) {
+ case 1011:
+ case 1012:
+ devpThread.getStation().get(1012).isOutEnable();
+ break;
+ case 1021:
+ case 1022:
+ case 1023:
+ devpThread.getStation().get(1022).isOutEnable();
+ break;
+ case 1031:
+ case 1032:
+ devpThread.getStation().get(1032).isOutEnable();
+ break;
+ case 1025:
+ case 1026:
+ devpThread.getStation().get(1025).isOutEnable();
+ break;
+ case 1013:
+ case 1014:
+ case 1015:
+ devpThread.getStation().get(1014).isOutEnable();
+ break;
+ }
+ return false;
+ }
+
/**
* 缁勬墭
* 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
@@ -104,7 +173,7 @@
// 閬嶅巻鍏ュ簱鍙�
for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
- if(basConveyorSta == null) {
+ if (basConveyorSta == null) {
continue;
}
@@ -160,7 +229,7 @@
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
if (staProtocol.isAutoing() && staProtocol.isLoading()
- && staProtocol.isInEnable()
+ && isInEnable(devpThread, inSta.getStaNo())
&& !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
&& staProtocol.isPakMk()
) {
@@ -197,7 +266,7 @@
if (task1 != null) {
News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", task1.getTaskNo());
if (staProtocol.getWorkNo().intValue() != Integer.parseInt(task1.getTaskNo())) {
- devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getOriginSite()));
+ devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getDestSite()));
devpThread.setPakMk(staProtocol.getSiteId(), false);
News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(task1));
}
@@ -262,7 +331,7 @@
// }
redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + inSta.getStaNo(), "in", 10);
- }else {
+ } else {
String msg = jsonObject.getString("msg");
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("msg", msg);
@@ -339,10 +408,10 @@
mapNode.setXBase(object.getInteger("refx"));
mapNode.setYBase(object.getInteger("refy"));
- if(mapNode.getValue() == MapNodeType.CONVEYOR.id) {
+ if (mapNode.getValue() == MapNodeType.CONVEYOR.id) {
//杈撻�佺嚎,鍒ゆ柇灏忚溅鏄惁鍙蛋
if (object.containsKey("conveyorHasGo")) {
- if(object.getBoolean("conveyorHasGo")) {
+ if (object.getBoolean("conveyorHasGo")) {
//灏忚溅鍙蛋
mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id);
}
@@ -436,7 +505,7 @@
ArrayList<MapNode> headNodes = new ArrayList<>();
ArrayList<MapNode> footerNodes = new ArrayList<>();
- for (int i = 0; i < row+2; i++) {
+ for (int i = 0; i < row + 2; i++) {
headNodes.add(mapNode.clone());
footerNodes.add(mapNode.clone());
}
@@ -473,7 +542,7 @@
// 閬嶅巻鍏ュ簱鍙�
for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) {
BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
- if(basConveyorSta == null) {
+ if (basConveyorSta == null) {
continue;
}
@@ -485,93 +554,93 @@
} else {
staProtocol = staProtocol.clone();
}
- int workNo = staProtocol.getWorkNo().intValue();
-
+ int workNo = 0;
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
- if (staProtocol.isAutoing()
- && staProtocol.isInEnable()
- && (workNo >= 0)
- && staProtocol.isPakMk()
- ) {
+ if ((staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1023 || staProtocol.getSiteId() == 1026 || staProtocol.getSiteId() == 1032) &&
+ staProtocol.isAutoing() && staProtocol.isLoading()) {
+ workNo = staProtocol.getFinishWorkNo().intValue();
+ } else if ((staProtocol.getSiteId() == 1012) && staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
+ workNo = staProtocol.getWorkNo().intValue();
+ } else {
+ continue;
+ }
- Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
- .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
- .eq(Task::getTaskNo, workNo));
- if (task != null) {
- if (!Cools.isEmpty(task.getLiftNo())) {
- if (task.getLiftNo() > 0) {
- task.setLiftNo(0);
- task.setUpdateTime(new Date());
- if (!taskService.updateById(task)) {
- News.info("{}浠诲姟鏇存柊閲婃斁鎻愬崌鏈哄け璐�", task.getTaskNo());
- }
- }
- }
-
- //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑鍙崲灞傛彁鍗囨満(鍙兘涓嶇┖闂�)
- LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
- if (liftThread == null) {
- continue;
- }
- Device transferLiftDevice = liftThread.getDevice();
- //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満
- ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
- .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
- .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
- .eq(ShuttleStandby::getStatus, 1));
- //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿
- String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
- //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� 杈撻�佺嚎浣嶇疆
- String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
-
- //涓嶈蛋鎻愬崌鏈�
- if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
- standbyLocNoTo = staProtocol.getLocNo();
- }
-
- if (Cools.isEmpty(task.getShuttleNo())) {
- //鍒嗛厤灏忚溅
- //璋冨害绌洪棽杞﹀幓鍙栬揣寰呮満浣�
- Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
- if (shuttleDevice == null) {
- News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
- continue;
- }
-
- task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+ .eq(Task::getTaskNo, workNo));
+ if (task != null) {
+ if (!Cools.isEmpty(task.getLiftNo())) {
+ if (task.getLiftNo() > 0) {
+ task.setLiftNo(0);
task.setUpdateTime(new Date());
if (!taskService.updateById(task)) {
- News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ News.info("{}浠诲姟鏇存柊閲婃斁鎻愬崌鏈哄け璐�", task.getTaskNo());
}
- continue;
}
-
- //鍒ゆ柇灏忚溅鏄惁鍒拌揪鍙栬揣寰呮満浣嶇疆
- String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
- if (shuttleLocNo == null) {
- continue;
- }
-
- if (!standbyLocNoTo.equals(shuttleLocNo)) {
- continue;
- }
-
- // generate motion list
- List<Motion> motionList = analyzeService.generateMotion(task);
- if (motionList.isEmpty()) {
- continue;
- }
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
-
- // 鏇存柊宸ヤ綔涓绘。
- task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
- task.setUpdateTime(new Date());
- if (!taskService.updateById(task)) {
- News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
- }
- break;
}
+ //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑鍙崲灞傛彁鍗囨満(鍙兘涓嶇┖闂�)
+ LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
+ if (liftThread == null) {
+ continue;
+ }
+ Device transferLiftDevice = liftThread.getDevice();
+ //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満
+ ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
+ .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
+ .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
+ .eq(ShuttleStandby::getStatus, 1));
+ //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿
+ String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
+ //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� 杈撻�佺嚎浣嶇疆
+ String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
+
+ //涓嶈蛋鎻愬崌鏈�
+ if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
+ standbyLocNoTo = staProtocol.getLocNo();
+ }
+
+ if (Cools.isEmpty(task.getShuttleNo())) {
+ //鍒嗛厤灏忚溅
+ //璋冨害绌洪棽杞﹀幓鍙栬揣寰呮満浣�
+ Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
+ if (shuttleDevice == null) {
+ News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+ continue;
+ }
+
+ task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ }
+ continue;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍒拌揪鍙栬揣寰呮満浣嶇疆
+ String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
+ if (shuttleLocNo == null) {
+ continue;
+ }
+
+ if (!standbyLocNoTo.equals(shuttleLocNo)) {
+ continue;
+ }
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateMotion(task);
+ if (motionList.isEmpty()) {
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+
+ // 鏇存柊宸ヤ綔涓绘。
+ task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+ }
+ break;
}
}
}
@@ -671,40 +740,26 @@
}
for (Task task : tasks) {
- BasConveyorSta originStaObj = basConveyorStaService.selectBySiteNo(task.getOriginSite());//鑾峰彇婧愮珯
- if (originStaObj == null) {
+ BasConveyorSta destStaObj = basConveyorStaService.selectBySiteNo(task.getDestSite());//鑾峰彇鐩爣绔�
+ if (destStaObj == null) {
continue;
}
- BasConveyor basConveyor = basConveyorService.getById(originStaObj.getConveyorId());
- if(basConveyor == null) {
+ BasConveyor basConveyor = basConveyorService.getById(destStaObj.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()));//鐩爣绔�
+ StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
if (staProtocol == null) {
continue;
} else {
staProtocol = staProtocol.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;
-// }
-
-// //鍚屽簱浣嶇粍鏍¢獙
-// List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
-// List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
-// if (!outerLocMasts.isEmpty()) {
-// News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo());
-// continue;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
-// }
-
if (Cools.isEmpty(task.getShuttleNo())) {
//鍒嗛厤灏忚溅
//鎼滅储绌洪棽杞�
@@ -725,7 +780,7 @@
// generate motion list
List<Motion> motionList = analyzeService.generateMotion(task);
if (Cools.isEmpty(motionList)) {
- log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo());
+ log.error("鍑哄簱 ===>> 浠诲姟瑙f瀽澶辫触, 浠诲姟鍙�={}", task.getTaskNo());
continue;
}
motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
@@ -1082,8 +1137,8 @@
staProtocol = staProtocol.clone();
}
String taskNo = "0";
- if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001 ){
- if (0 != staProtocol.getWorkNo()){
+ if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001) {
+ if (0 != staProtocol.getWorkNo()) {
Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, 9).eq(Motion::getTemp, staProtocol.getWorkNo()));
// 鑾峰彇宸ヤ綔妗f暟鎹�
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
@@ -1105,7 +1160,7 @@
HashMap<String, Object> param = new HashMap<>();
param.put("taskNo", taskNo);
- param.put("sta",staNo);
+ param.put("sta", staNo);
String response = new HttpHandler.Builder()
.setUri(wmsUrl)
.setPath("/rpc/led/getTask")
@@ -1187,7 +1242,9 @@
for (Integer staNo : staArr) {
// 鑾峰彇鍙夎溅绔欑偣
StaProtocol staProtocol = devpThread.getStation().get(staNo);
- if (staProtocol == null) { continue; }
+ if (staProtocol == null) {
+ continue;
+ }
if (staProtocol.getWorkNo() != 0) {
reset = false;
break;
--
Gitblit v1.9.1