From c6ac196d7207e64b8591f84932439214561fc446 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期五, 29 八月 2025 15:56:52 +0800
Subject: [PATCH] 1
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 208 insertions(+), 20 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 8ce3dc2..a9f0dbf 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -163,6 +163,13 @@
*/
public synchronized void generateInboundWrk() {
try {
+// //妫�娴嬫槸鍚﹀瓨鍦ㄨ皟鎷ㄤ换鍔★紝涓嶆墽琛屽叆搴�
+// boolean checkTransferWrkMast = wrkMastService.checkTransferWrkMast();
+// if (checkTransferWrkMast) {
+// News.error("瀛樺湪璋冩嫧浠诲姟锛屼笉鎵ц鍏ュ簱");
+// return;
+// }
+
// 閬嶅巻鍏ュ簱鍙�
for (DevpSlave.Sta inSta : slaveProperties.getDevp().get(0).getInSta()) {
if (inSta.getStaNo() == 1014 || inSta.getStaNo() == 1025) {
@@ -217,6 +224,22 @@
if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
continue;
}
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔�
+ List<WrkMast> wrkMastOutList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("sta_no", 1024, 1013)
+ .eq("io_type", 101));
+ if (!wrkMastOutList.isEmpty()) {
+ Object o = redisUtil.get(RedisKeyType.DEVP_ERROR_FLAG.key + staProtocol.getSiteId());
+ if (o == null) {
+ redisUtil.set(RedisKeyType.DEVP_ERROR_FLAG.key + staProtocol.getSiteId(), "lock", 15);
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol.getSiteId()));
+ setLedErrorData(staProtocol.getSiteId(), "浠诲姟鍐茬獊");
+ }
+ News.error("绔欑偣瀛樺湪鍑哄簱浠诲姟,绂佹鍏ュ簱,绔欑偣={}", staProtocol.getSiteId());
+ continue;
+ }
+
// 鍒ゆ柇閲嶅宸ヤ綔妗�
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode));
if (wrkMast != null && wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
@@ -346,6 +369,22 @@
Short workNo = staProtocol.getWorkNo();
if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
String barcode = staProtocol.getBarcode();
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔�
+ List<WrkMast> wrkMastOutList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("sta_no", 1011, 1021)
+ .eq("io_type", 101));
+ if (!wrkMastOutList.isEmpty()) {
+ Object o = redisUtil.get(RedisKeyType.DEVP_ERROR_FLAG.key + staProtocol.getSiteId());
+ if (o == null) {
+ redisUtil.set(RedisKeyType.DEVP_ERROR_FLAG.key + staProtocol.getSiteId(), "lock", 15);
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol.getSiteId()));
+ setLedErrorData(staProtocol.getSiteId(), "浠诲姟鍐茬獊");
+ }
+ News.error("绔欑偣瀛樺湪鍑哄簱浠诲姟,绂佹鍏ュ簱,绔欑偣={}", staProtocol.getSiteId());
+ continue;
+ }
+
// 鍒ゆ柇閲嶅宸ヤ綔妗�
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode));
if (wrkMast == null) {
@@ -470,6 +509,13 @@
public void outFirst() {
+// //妫�娴嬫槸鍚﹀瓨鍦ㄨ皟鎷ㄤ换鍔★紝瀛樺湪涓嶆墽琛屽嚭搴�
+// boolean checkTransferWrkMast = wrkMastService.checkTransferWrkMast();
+// if (checkTransferWrkMast) {
+// News.error("瀛樺湪璋冩嫧浠诲姟锛屼笉鎵ц鍑哄簱");
+// return;
+// }
+
DevpSlave devpSlave = slaveProperties.getDevp().get(0);
// 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
Date now = new Date();
@@ -479,6 +525,31 @@
if (devpThread == null) {
continue;
}
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄥ叆搴撲换鍔�
+ Integer checkInSourceStaNo = null;
+ if (wrkMast.getStaNo() == 1013) {
+ checkInSourceStaNo = 1014;
+ } else if (wrkMast.getStaNo() == 1024) {
+ checkInSourceStaNo = 1025;
+ } else {
+ continue;
+ }
+ List<WrkMast> wrkMastInList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("source_sta_no", checkInSourceStaNo)
+ .eq("io_type", 1));
+ if (!wrkMastInList.isEmpty()) {
+ Object o = redisUtil.get(RedisKeyType.DEVP_ERROR_FLAG.key + wrkMast.getStaNo());
+ if (o == null) {
+ redisUtil.set(RedisKeyType.DEVP_ERROR_FLAG.key + wrkMast.getStaNo(), "lock", 15);
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, wrkMast.getStaNo()));
+ setLedErrorData(wrkMast.getStaNo(), "浠诲姟鍐茬獊");
+ }
+ News.error("绔欑偣瀛樺湪鍏ュ簱浠诲姟,绂佹鍑哄簱,绔欑偣={}", wrkMast.getStaNo());
+ continue;
+ }
+
+
Map<Integer, StaProtocol> station = devpThread.getStation();
StaProtocol staProtocol = station.get(wrkMast.getStaNo());
if (staProtocol == null) {
@@ -531,7 +602,7 @@
/**
* 鍑哄簱鍒板嚭搴撳彛
*/
- public synchronized void stnToOutStn() {
+ public synchronized void stnToOutStn(int i) {
ShuttleThread shuttleThread1 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 1);
ShuttleThread shuttleThread2 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 2);
ShuttleProtocol status1 = shuttleThread1.getStatus();
@@ -562,19 +633,35 @@
if (wrkMast == null) {
continue;
}
-
String sourceLocNo = "1200305";
- String locNo = "1300105";
- if (wrkMast.getStaNo() == 1013) {
- sourceLocNo = "1200301";
- locNo = "1300101";
- if (loc.contains(locNo)) {
+ String locNo = "1100105";
+ if (wrkMast.getShuttleNo() == 1) {
+ if (wrkMast.getStaNo() == 1013) {
+ sourceLocNo = "1200301";
locNo = "1100101";
+ if (loc.contains(locNo)) {
+ locNo = "1100101";
+ }
+ } else {
+ if (loc.contains(locNo)) {
+ locNo = "1100105";
+ }
}
} else {
- if (loc.contains(locNo)) {
- locNo = "1100105";
+ if (wrkMast.getStaNo() == 1013) {
+ sourceLocNo = "1200301";
+ locNo = "1000101";
+ if (loc.contains(locNo)) {
+ locNo = "1000101";
+ }
+ } else {
+ if (loc.contains(locNo)) {
+ locNo = "1000105";
+ }
}
+ }
+ if (loc.contains(locNo)) {
+ locNo = "0900105";
}
boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), sourceLocNo, locNo, wrkMast.getShuttleNo(), null, false);
@@ -619,6 +706,33 @@
log.info("鐢佃鏈烘暟鎹缃細{},{}", staNo, data);
} else {
log.info("鐢佃鏈烘暟鎹缃紓甯革細{},{}", wrkNo, response);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void setLedErrorData(Integer staNo, String msg) {
+ try {
+ HashMap<String, String> hashMap = new HashMap<>();
+ hashMap.put("msg", msg);
+ hashMap.put("sta", String.valueOf(staNo));
+ String response = null;
+ response = new HttpHandler.Builder()
+ .setUri(wmsUrl)
+ .setPath("/rpc/led/getError")
+ .setJson(JSON.toJSONString(hashMap))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ Integer code = jsonObject.getInteger("code");
+ if (code.equals(200)) {
+ String data = jsonObject.getString("data");
+ List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class);
+ redisUtil.set("LED_" + staNo, wrkDetls, 30);
+ log.info("鐢佃鏈烘暟鎹缃細{},{}", staNo, data);
+ } else {
+ log.info("鐢佃鏈烘暟鎹缃紓甯革細{},{}", staNo, response);
}
} catch (Exception e) {
e.printStackTrace();
@@ -994,6 +1108,11 @@
if (wrkMast.getSourceStaNo() == 1022) {
led = 3;
} else if (wrkMast.getSourceStaNo() == 1031) {
+ //宸ヤ綔鍙蜂竴鑷村垽鏂�
+ if (!String.valueOf(staProtocol.getFinishWorkNo()).equals(wrkMast.getWmsWrkNo2())) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}宸ヤ綔鍙�1锛寋}宸ヤ綔鍙�2锛�1135杩囨潵鐨勬墭鐩橈紝涓哄皢宸ヤ綔鍙峰啓鍒拌嚦1031", staProtocol.getFinishWorkNo(), wrkMast.getWmsWrkNo2());
+ return false;
+ }
}
// 灏哄妫�娴嬪紓甯�
boolean back = false;
@@ -1066,6 +1185,12 @@
staNo = 1023;
} else if (wrkMast.getSourceStaNo() == 1031) {
staNo = 1032;
+ //妫�娴�1135璐х墿鏄惁鍒拌揪1031锛屽埌杈炬墠鍏佽璧板埌1032
+ if (!(staProtocol.isAutoing()
+ && staProtocol.isLoading())
+ ) {
+ return false;
+ }
}
staProtocol = staProtocol.clone();
@@ -1167,6 +1292,14 @@
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId());
return false;
}
+
+ //璋冩嫧浠诲姟鎵ц鏃讹紝涓嶅厑璁告湁鍏朵粬鍏ュ嚭搴撲换鍔″伐浣�
+ boolean checkNoTransferWorking = wrkMastService.checkNoTransferWorking();
+ if (checkNoTransferWorking) {
+ News.error("璋冩嫧浠诲姟鎵ц鏃讹紝涓嶅厑璁告湁鍏朵粬鍏ュ嚭搴撲换鍔″伐浣�");
+ return false;
+ }
+
}
//鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
@@ -1286,6 +1419,31 @@
try {
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021, 1031));
for (WrkMast wrkMast : wrkMasts) {
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄥ叆搴撲换鍔�
+ Integer checkInSourceStaNo = null;
+ if (wrkMast.getStaNo() == 1011) {
+ checkInSourceStaNo = 1012;
+ } else if (wrkMast.getStaNo() == 1021) {
+ checkInSourceStaNo = 1022;
+ }
+
+ if (checkInSourceStaNo != null) {
+ List<WrkMast> wrkMastInList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("source_sta_no", checkInSourceStaNo)
+ .eq("io_type", 1));
+ if (!wrkMastInList.isEmpty()) {
+ Object o = redisUtil.get(RedisKeyType.DEVP_ERROR_FLAG.key + wrkMast.getStaNo());
+ if (o == null) {
+ redisUtil.set(RedisKeyType.DEVP_ERROR_FLAG.key + wrkMast.getStaNo(), "lock", 15);
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, wrkMast.getStaNo()));
+ setLedErrorData(wrkMast.getStaNo(), "浠诲姟鍐茬獊");
+ }
+ News.error("绔欑偣瀛樺湪鍏ュ簱浠诲姟,绂佹鍑哄簱,绔欑偣={}", wrkMast.getStaNo());
+ continue;
+ }
+ }
+
boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟
if (!step1) {
continue;
@@ -1321,11 +1479,25 @@
}
if (wrkMast.getStaNo() == 1031) {
+ //璋冩嫧浠诲姟鎵ц鏃讹紝涓嶅厑璁告湁鍏朵粬鍏ュ嚭搴撲换鍔″伐浣�
+ boolean checkNoTransferWorking = wrkMastService.checkNoTransferWorking();
+ if (checkNoTransferWorking) {
+ News.error("璋冩嫧浠诲姟鎵ц鏃讹紝涓嶅厑璁告湁鍏朵粬鍏ュ嚭搴撲换鍔″伐浣�-鍑哄簱");
+ return false;
+ }
+
} else {
if (!isOutEnable(devpThread, wrkMast.getStaNo())) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId());
return false;
}
+
+// //妫�娴嬫槸鍚﹀瓨鍦ㄨ皟鎷ㄤ换鍔★紝瀛樺湪涓嶆墽琛屽嚭搴�
+// boolean checkTransferWrkMast = wrkMastService.checkTransferWrkMast();
+// if (checkTransferWrkMast) {
+// News.error("瀛樺湪璋冩嫧浠诲姟锛屼笉鎵ц鍑哄簱");
+// return false;
+// }
}
String locNo = "0200305";
@@ -1411,8 +1583,6 @@
//鑾峰彇鎻愬崌鏈哄懡浠�
List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo());
LiftCommand liftCommand = liftCommands.get(0);
- int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
- liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙�
ArrayList<LiftCommand> commands = new ArrayList<>();
commands.add(liftCommand);
@@ -1847,16 +2017,18 @@
} else if (staProtocol.getSiteId() == 1031 && staProtocol.isLoading()) {
wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getFinishWorkNo()).eq("wrk_sts", WrkStsType.OUTBOUND_DEVP_RUN_2.sts));
if (wrkMast != null) {
- staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo())));
+ staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWmsWrkNo())));
staProtocol.setStaNo(Short.parseShort(String.valueOf(1135)));
- MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
- News.taskInfo(wrkMast.getWrkNo(), "杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
- wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
- wrkMast.setModiTime(new Date());
- if (wrkMastService.updateById(wrkMast)) {
- News.taskInfo(wrkMast.getWrkNo(), "杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵�併�傝緭閫佺嚎鍙�={},瀹岀粨宸ヤ綔鍙�={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo());
- } else {
- News.error("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傝緭閫佺嚎鍙�={}锛屽畬缁撳伐浣滃彿={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo());
+ boolean offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+ if (offer) {
+ News.taskInfo(wrkMast.getWrkNo(), "杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
+ wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
+ wrkMast.setModiTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ News.taskInfo(wrkMast.getWrkNo(), "杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵�併�傝緭閫佺嚎鍙�={},瀹岀粨宸ヤ綔鍙�={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo());
+ } else {
+ News.error("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傝緭閫佺嚎鍙�={}锛屽畬缁撳伐浣滃彿={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo());
+ }
}
}
}
@@ -2328,6 +2500,22 @@
if (basShuttleCharge == null) {
return false;
}
+ try {
+ ShuttleThread shuttleThread2 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo() == 1 ? 2 : 1);
+ if (shuttleThread2 == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol2 = shuttleThread2.getStatus();
+ if (shuttleProtocol2 == null) {
+ return false;
+ }
+ if (shuttleProtocol2.getCurrentLocNo().equals(basShuttleCharge.getWaitLocNo())) {
+ String locNo = Utils.getLocNo(Utils.getRow(basShuttleCharge.getWaitLocNo()) + 1, Utils.getBay(basShuttleCharge.getWaitLocNo()), Utils.getLev(basShuttleCharge.getWaitLocNo()));
+ basShuttleCharge.setWaitLocNo(locNo);
+ }
+ } catch (Exception e) {
+ log.error("瀵绘壘鏂扮殑寰呮満浣�,{}", e);
+ }
//璋冨害灏忚溅鍘诲緟鏈轰綅
boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
--
Gitblit v1.9.1