From 3be5c88fbc583d17a932ca937d8e293d28b5c974 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期六, 12 四月 2025 15:11:25 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | 16 +
src/main/java/com/zy/core/thread/LiftThread.java | 2
src/main/resources/mapper/WrkMastLogMapper.xml | 1
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 397 +++++++++++++++++++++++++++++++++++++++++++
src/main/java/com/zy/core/cache/MessageQueue.java | 4
src/main/resources/mapper/WrkMastMapper.xml | 1
src/main/java/com/zy/asrs/entity/WrkMastLog.java | 3
src/main/java/com/zy/asrs/task/WrkMastScheduler.java | 4
src/main/resources/sql/20250412151056.nb3 | 0
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java | 4
src/main/java/com/zy/core/thread/impl/FyDevpThread.java | 51 +----
src/main/java/com/zy/core/ServerBootstrap.java | 4
src/main/java/com/zy/core/action/LiftAction.java | 31 +--
src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java | 2
src/main/java/com/zy/core/MainProcess.java | 14 +
src/main/java/com/zy/common/service/CommonService.java | 1
src/main/java/com/zy/core/thread/impl/NyLiftThread.java | 5
17 files changed, 460 insertions(+), 80 deletions(-)
diff --git a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
index b1fadc2..bef55f7 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
@@ -17,4 +17,6 @@
//鐩爣搴撲綅
private String locNo;
+ private String barcode;
+
}
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index b84f77c..b65aa29 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -174,6 +174,9 @@
@TableField(value = "system_msg")
private String systemMsg;
+ @ApiModelProperty(value= "")
+ private Integer mainWrkNo;
+
public WrkMastLog() {}
public String getWrkSts$(){
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 c60f1f9..448f885 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -13,6 +13,7 @@
import com.zy.common.service.CommonService;
import com.zy.common.utils.*;
import com.zy.core.News;
+import com.zy.core.action.LiftAction;
import com.zy.core.action.ShuttleAction;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
@@ -22,11 +23,14 @@
import com.zy.core.model.LiftSlave;
import com.zy.core.model.ShuttleSlave;
import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftAssignCommand;
+import com.zy.core.model.command.LiftCommand;
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.protocol.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
+import com.zy.core.thread.impl.FyDevpThread;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
@@ -36,6 +40,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Map;
/**
* 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -87,6 +92,8 @@
private NoLiftInServiceImpl noLiftInService;
@Autowired
private NoLiftOutServiceImpl noLiftOutService;
+ @Autowired
+ private LiftAction liftAction;
public static List<Integer> staNosIn = new ArrayList<Integer>() {{
@@ -449,7 +456,7 @@
}
if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
- boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+ boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, liftSta.getLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
return false;
}
@@ -628,7 +635,7 @@
return false;
}
}
- boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+ boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
return false;
}
@@ -697,6 +704,390 @@
}
return false;
}
+ return true;
+ }
+
+ public synchronized void liftInExecute() {
+ try {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.INBOUND_DEVICE_RUN.sts, WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts)
+ .in("source_sta_no", 1012, 1022)
+ );
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean step0 = this.liftInExecuteStep0(wrkMast);//璁惧涓婅蛋
+ if (!step0) {
+ return;
+ }
+
+ boolean step1 = this.liftInExecuteStep1(wrkMast);//鎻愬崌鏈烘惉杩�
+ if (!step1) {
+ return;
+ }
+
+ boolean step2 = this.liftInExecuteStep2(wrkMast);//瑙﹀彂鎼繍浠诲姟
+ if (!step2) {
+ return;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private boolean liftInExecuteStep0(WrkMast wrkMast) {
+ Date now = new Date();
+ if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
+ FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ if(devpThread == null) {
+ return false;
+ }
+
+ Map<Integer, StaProtocol> station = devpThread.getStation();
+ StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
+ if (staProtocol == null) {
+ return false;
+ }
+
+ if (!staProtocol.isAutoing()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (!staProtocol.isLoading()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
+ return false;
+ }
+
+ short staNo = 1012;
+ if (wrkMast.getSourceStaNo() == 1022) {
+ staNo = 1023;
+ }
+
+ staProtocol = staProtocol.clone();
+ staProtocol.setStaNo(staNo);
+ staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+ boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ return false;
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean liftInExecuteStep1(WrkMast wrkMast) {
+ Date now = new Date();
+ if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+ //鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (!liftThread.isIdle()) {
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+ WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
+ if (liftWrkMast != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+ if (liftProtocol.getHasCar()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+ if (liftProtocol.getHasTray()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ if(devpThread == null) {
+ return false;
+ }
+
+ Map<Integer, StaProtocol> station = devpThread.getStation();
+
+ Integer sourceStaNo = wrkMast.getSourceStaNo();
+ if (wrkMast.getSourceStaNo() == 1022) {
+ sourceStaNo = 1023;
+ }
+
+ StaProtocol staProtocol = station.get(sourceStaNo);
+ if (staProtocol == null) {
+ return false;
+ }
+
+ if (!staProtocol.isAutoing()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (!staProtocol.isLoading()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
+ return false;
+ }
+
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ List<LiftCommand> liftCommands = liftThread.getPalletInCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), 101);
+ LiftCommand liftCommand = liftCommands.get(0);
+
+ int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
+ liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙�
+
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+ commands.add(liftCommand);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue());
+ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+ assignCommand.setTaskMode(LiftCommandModeType.PALLET_IN.id.shortValue());
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);
+ wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ return false;
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean liftInExecuteStep2(WrkMast wrkMast) {
+ Date now = new Date();
+ if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
+ //鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (!liftThread.isIdle()) {
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+ if (liftProtocol.getHasCar()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+ if (!liftProtocol.getHasTray()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), "0200301", wrkMast.getLocNo(), "TRANSPORT_LIFT");
+ if(!dispatchShuttle) {
+ News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts);
+ wrkMast.setLiftNo(null);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ return false;
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ public synchronized void liftOutExecute() {
+ 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)
+ );
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟
+ if (!step1) {
+ return;
+ }
+
+ boolean step2 = this.liftOutExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩�
+ if (!step2) {
+ return;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private boolean liftOutExecuteStep1(WrkMast wrkMast) {
+ Date now = new Date();
+ if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
+ FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ if(devpThread == null) {
+ return false;
+ }
+
+ Map<Integer, StaProtocol> station = devpThread.getStation();
+ StaProtocol staProtocol = station.get(wrkMast.getStaNo());
+ if (staProtocol == null) {
+ return false;
+ }
+
+ if (!staProtocol.isAutoing()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ if (!staProtocol.isOutEnable()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+
+ boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), "0200301", "TRANSPORT_LIFT");
+ if(!dispatchShuttle) {
+ News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ return false;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ private boolean liftOutExecuteStep2(WrkMast wrkMast) {
+ Date now = new Date();
+ if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) {
+ //鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (!liftThread.isIdle()) {
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+ WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
+ if (liftWrkMast != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+ if (liftProtocol.getHasCar()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+ if (!liftProtocol.getHasTray()) {
+ News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+ return false;
+ }
+
+ FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ if(devpThread == null) {
+ return false;
+ }
+
+ Map<Integer, StaProtocol> station = devpThread.getStation();
+ StaProtocol staProtocol = station.get(wrkMast.getStaNo());
+ if (staProtocol == null) {
+ return false;
+ }
+
+ if (!staProtocol.isAutoing()) {
+ News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+ return false;
+ }
+
+ Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo()));
+
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ 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);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue());
+ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+ assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue());
+
+ wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);
+ wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ return false;
+ }
+ return false;
+ }
+
return true;
}
@@ -900,7 +1291,7 @@
//灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓�
if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
- boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
+ boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
if (result) {
diff --git a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
index a55af16..30d926f 100644
--- a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
@@ -537,8 +537,10 @@
//鑾峰彇鎻愬崌鏈哄緟鏈轰綅
String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo()), false);
+ //鍘诲緟鏈轰綅
+ String locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
//鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満琛岃蛋鍛戒护
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, NavigationMapType.DFX.id, assignCommand, shuttleThread);
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), locNo, NavigationMapType.DFX.id, assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
index 5c4a431..b947c3e 100644
--- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -203,9 +203,9 @@
WrkMast main = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo());
if (main != null) {
if (main.getIoType() == WrkIoType.IN.id) {
- main.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts);
+ main.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
} else if (main.getIoType() == WrkIoType.OUT.id) {
- main.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts);
+ main.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
}
main.setModiTime(new Date());
if (wrkMastService.updateById(main)) {
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 008db5a..467b794 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -193,6 +193,7 @@
wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
wrkMast.setWmsWrkNo(param.getTaskNo());
+ wrkMast.setBarcode(param.getBarcode());
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
boolean res = wrkMastService.insert(wrkMast);
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 084bd25..b83b885 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -44,16 +44,20 @@
//杈撻�佺嚎
// 鍏ュ簱
mainService.generateInboundWrk();
- mainService.generateInboundWrk2();
+// mainService.generateInboundWrk2();
// 鍑哄簱
mainService.stnToOutStn();
//鍒濆鍖栧疄鏃跺湴鍥�
mainService.initRealtimeBasMap();
- // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
- mainService.shuttleInExecute();
- // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
- mainService.shuttleOutExecute();
+// // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
+// mainService.shuttleInExecute();
+// // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
+// mainService.shuttleOutExecute();
+ //鎻愬崌鏈哄叆搴撲换鍔�
+ mainService.liftInExecute();
+ //鎻愬崌鏈哄嚭搴撲换鍔�
+ mainService.liftOutExecute();
//鍥涘悜绌挎杞︿换鍔″畬鎴�
mainService.shuttleFinished();
//鎵ц绉诲簱浠诲姟
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 5461319..c824e07 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -58,6 +58,10 @@
for (Slave shuttle : slaveProperties.getShuttle()) {
MessageQueue.init(SlaveType.Shuttle, shuttle);
}
+ // 鍒濆鍖栬緭閫佺嚎mq
+ for (Slave devp : slaveProperties.getDevp()) {
+ MessageQueue.init(SlaveType.Devp, devp);
+ }
}
private void initThread() {
diff --git a/src/main/java/com/zy/core/action/LiftAction.java b/src/main/java/com/zy/core/action/LiftAction.java
index e0b7d2a..d4c177b 100644
--- a/src/main/java/com/zy/core/action/LiftAction.java
+++ b/src/main/java/com/zy/core/action/LiftAction.java
@@ -132,28 +132,17 @@
command.setComplete(true);
}
} else if (command.getMode() == LiftCommandModeType.PALLET_IN.id) {
-// //鎵樼洏鍏�
-// Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev());
-// if (liftProtocol.getLev() == target) {
-// command.setComplete(true);
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
-// if (!liftProtocol.getHasTray()) {
-// return false;
-// }
-
+ //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
+ if (!liftProtocol.getHasTray()) {
+ return false;
+ }
+ command.setComplete(true);
} else if (command.getMode() == LiftCommandModeType.PALLET_OUT.id) {
-// //鎵樼洏鍑�
-// Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev());
-// if (liftProtocol.getLev() == target) {
-// command.setComplete(true);
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
-// if (liftProtocol.getHasTray()) {
-// return false;
-// }
+ //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
+ if (liftProtocol.getHasTray()) {
+ return false;
+ }
+ command.setComplete(true);
} else if (command.getMode() == LiftCommandModeType.RESET.id) {
//澶嶄綅
command.setComplete(true);
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index d5c4d08..0c6cf02 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -93,10 +93,6 @@
case Lift:
return LIFT_EXCHANGE.get(id).poll();
case Devp:
- ConcurrentLinkedQueue<Task> tasks = DEVP_EXCHANGE.get(id);
- if (tasks == null) {
- return null;
- }
return DEVP_EXCHANGE.get(id).poll();
case Led:
ConcurrentLinkedQueue<Task> task2 = LED_EXCHANGE.get(id);
diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
index c5e2346..34dcb90 100644
--- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -68,7 +68,7 @@
/**
* 璋冨害杞﹁締
*/
- public boolean dispatchShuttle(Integer wrkNo, String locNo) {
+ public boolean searchDispatchShuttle(Integer wrkNo, String sourceLocNo, String locNo, String flag) {
ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅
ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅
@@ -128,6 +128,11 @@
Integer shuttleNo = shuttleProtocol.getShuttleNo();
//褰撳墠绌挎杞﹀簱浣嶅彿
String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ if (currentLocNo.equals(locNo)) {
+ sameShuttles.put(-1, shuttleThread);
+ continue;
+ }
+
//褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
if (currentShuttlePath == null) {
@@ -143,7 +148,7 @@
ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
Integer shuttleNo = shuttleProtocol.getShuttleNo();
//灏濊瘯璋冨害灏忚溅
- boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo);
+ boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false);
if (result) {
return true;//璋冨害鎴愬姛
}
@@ -190,7 +195,7 @@
ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
Integer shuttleNo = shuttleProtocol.getShuttleNo();
//灏濊瘯璋冨害灏忚溅
- boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo);
+ boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false);
if (result) {
return true;//璋冨害鎴愬姛
}
@@ -279,6 +284,11 @@
wrkMast.setAppeTime(now);
wrkMast.setModiTime(now);
wrkMast.setMainWrkNo(mainWrkMast.getWrkNo());
+
+ if ("TRANSPORT_LIFT".equals(flag)) {
+ wrkMast.setMainWrkNo(wrkNo);
+ }
+
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
News.error("灏忚溅杩佺Щ --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 绌挎杞﹀彿锛�" + shuttleNo);
diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java
index cdfb73c..23f189c 100644
--- a/src/main/java/com/zy/core/thread/LiftThread.java
+++ b/src/main/java/com/zy/core/thread/LiftThread.java
@@ -51,6 +51,8 @@
List<NavigateNode> getLiftStaNodes(int lev);
+ Integer getLevToStaNo(int lev);
+
//***************鑾峰彇鍛戒护*****************
List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode);//鎻愬崌鏈虹Щ鍔�
diff --git a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
index 6ec89a1..9c4ea1b 100644
--- a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
+++ b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
@@ -227,50 +227,19 @@
index += 1;
short[] array = new short[2];
- array[0] = staProtocol.getWorkNo();
- array[1] = staProtocol.getStaNo();
+ array[0] = staProtocol.getStaNo();
+ array[1] = staProtocol.getWorkNo();
String staNoAddress = "DB83." + (index * 8 + 4);
String workNoAddress = "DB83." + (index * 8 + 6);
- OperateResult write1 = null; // 宸ヤ綔鍙�
- OperateResult write2 = null; // 鐩爣绔�
-
- //浠诲姟涓嬪彂娆℃暟
- int writeCount = 0;
- do {
- write1 = siemensS7Net.Write(workNoAddress, array[0]); // 宸ヤ綔鍙�
- write2 = siemensS7Net.Write(staNoAddress, array[1]);
- if ((write1.IsSuccess && write2.IsSuccess)) {
- log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", staProtocol.getSiteId(), JSON.toJSON(staProtocol.getWorkNo()), JSON.toJSON(staProtocol.getStaNo()), writeCount);
-// OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26));
-// //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8);
-// if (readResult.IsSuccess) {
-// int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); // 宸ヤ綔鍙�
-// int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // 鐩爣绔�
-// // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-// //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-// if (workNo == workNo2 && staNo == staNo2) {
-// //浠诲姟鍛戒护鍐欏叆鎴愬姛
-// log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-// return true;
-// } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
-// writeCount++;
-// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-// }
-// } else {
-// writeCount++;
-// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},{},鍐欏叆娆℃暟={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-// }
- } else {
- writeCount++;
- }
- } while (writeCount < 5);
-// StaProtocol staProtocol = station.get(siteId);
-// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
-// staProtocol.setPakMk(true);
-// }
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
- log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
+ OperateResult write1 = siemensS7Net.Write(staNoAddress, array);
+ if (!write1.IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
+ log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
+ return;
+ }
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
+ log.info("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
}
/**
diff --git a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
index 24eac5e..845085e 100644
--- a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
@@ -460,6 +460,11 @@
}
@Override
+ public Integer getLevToStaNo(int lev) {
+ return liftLevMap.get(lev);
+ }
+
+ @Override
public List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
/**
* 浠诲姟绫诲瀷
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index cdb4eb7..e6730fa 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -27,6 +27,7 @@
<result column="shuttle_no" property="shuttleNo" />
<result column="wms_wrk_no" property="wmsWrkNo" />
<result column="system_msg" property="systemMsg" />
+ <result column="main_wrk_no" property="mainWrkNo" />
</resultMap>
</mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 4025668..6e38f40 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -26,6 +26,7 @@
<result column="lift_no" property="liftNo" />
<result column="wms_wrk_no" property="wmsWrkNo" />
<result column="system_msg" property="systemMsg" />
+ <result column="main_wrk_no" property="mainWrkNo" />
</resultMap>
diff --git a/src/main/resources/sql/20250412151056.nb3 b/src/main/resources/sql/20250412151056.nb3
new file mode 100644
index 0000000..1875780
--- /dev/null
+++ b/src/main/resources/sql/20250412151056.nb3
Binary files differ
--
Gitblit v1.9.1