From ffab129aed13b91ae1f57bc6f07f47878271a633 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 21 九月 2022 15:01:20 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 179 +++++++++++++++++++++++++++++++++++
src/main/java/com/zy/core/enums/SteChargeType.java | 34 ++++++
src/main/java/com/zy/core/enums/SteTaskModeType.java | 30 ++++++
src/main/java/com/zy/common/service/CommonService.java | 37 +++++++
4 files changed, 277 insertions(+), 3 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 3a6b082..f8da24a 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -15,6 +15,7 @@
import com.zy.common.model.MatDto;
import com.zy.common.model.SearchLocParam;
import com.zy.common.model.StartupDto;
+import com.zy.common.service.CommonService;
import com.zy.common.utils.CollectionUtils;
import com.zy.common.utils.HttpHandler;
import com.zy.core.CrnThread;
@@ -32,6 +33,7 @@
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
+import com.zy.core.thread.SiemensDevpThread;
import com.zy.core.thread.SteThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -78,6 +80,10 @@
private BasCrnErrorMapper basCrnErrorMapper;
@Autowired
private BasSteService basSteService;
+ @Autowired
+ private WrkChargeService wrkChargeService;
+ @Autowired
+ private CommonService commonService;
/**
* 缁勬墭
@@ -1138,6 +1144,36 @@
}
}
+ public void letCarBeWaiting(WrkCharge wrkCharge, Integer steNo) {
+ // 鑾峰彇绌挎杞︿俊鎭�
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
+ SteProtocol steProtocol = steThread.getSteProtocol();
+ if (steProtocol == null) { return; }
+ if (steProtocol.isIdle()) {
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ SteCommand steCommand = new SteCommand();
+ steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
+ steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
+ steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
+
+ steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
+ steCommand.setBay(steProtocol.getBay());
+ steCommand.setLev(steProtocol.getLev());
+
+ if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
+ log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
+ wrkCharge.setSteNo(steNo);
+ wrkCharge.setModiTime(new Date());
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ }
+ }
+ }
+ }
+
/**
* 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐�
* 绛夊緟鍫嗗灈鏈烘惉杩�
@@ -1315,9 +1351,33 @@
// 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
WrkMast wrkMast = wrkMastMapper.selectCrnWaiting(crnProtocol.getTaskNo().intValue());
if (wrkMast == null) {
- log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
- continue;
+
+ // 鍏呯數浠诲姟
+ WrkCharge wrkCharge = wrkChargeService.selectById(crnProtocol.getTaskNo());
+ if (wrkCharge == null) {
+ log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+ continue;
+ } else {
+ // 灏忚溅鎼嚦鎸囧畾搴撲綅瀹屾垚
+ if (wrkCharge.getWrkSts() == 4) {
+ // 4.杩佸叆灏忚溅 ===>> 6.灏忚溅寰呭叆
+ wrkCharge.setWrkSts(6L);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼鍏呯數浠诲姟鐘舵�� 4.杩佸叆灏忚溅 ===>> 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ } else {
+ // 鍫嗗灈鏈哄浣�
+ crnThread.setResetFlag(true);
+ // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
+ if (!steThread.confirmPos()) {
+ log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo());
+ }
+ }
+ }
+ }
+
}
+ if (wrkMast == null) { continue; }
if (wrkMast.getIoType() != 11) {
// 鍏ュ簱 ==>> 璐х墿鎼叆搴�
if (wrkMast.getWrkSts() == 7){
@@ -1577,8 +1637,33 @@
} else {
// 鏌ヨ鏄惁鏈夊緟鍏ュ簱鐨勪换鍔�
WrkMast wrkMast = wrkMastMapper.selectCarWaiting(steProtocol.getTaskNo().intValue());
- if (wrkMast == null) { continue; }
+ if (wrkMast == null) {
+ // 鍏呯數浠诲姟
+ WrkCharge wrkCharge = wrkChargeService.selectById(steProtocol.getTaskNo());
+ if (wrkCharge == null) {
+ continue;
+ } else {
+ if (wrkCharge.getWrkSts() == 11) {
+ // 11.鐢熸垚鍑哄簱ID ===>> 12.灏忚溅寰呮惉
+ wrkCharge.setWrkSts(12L);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼鍏呯數浠诲姟鐘舵�� 11.鐢熸垚鍑哄簱ID ===>> 12.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ } else {
+ steThread.setResetFlag(true);
+ }
+ } else if (wrkCharge.getWrkSts() == 8) {
+ // 8.灏忚溅鎼叆搴� ===>> 9.鍏ュ簱瀹屾垚
+ wrkCharge.setWrkSts(9L);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼鍏呯數浠诲姟鐘舵�� 8.灏忚溅鎼叆搴� ===>> 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ } else {
+ steThread.setResetFlag(true);
+ }
+ }
+ }
+ }
+ if (wrkMast == null) { continue; }
switch (wrkMast.getWrkSts().intValue()) {
case 2:
// 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉
@@ -1969,9 +2054,97 @@
BasSte basSte = basSteService.selectById(ste.getId());
if (Cools.isEmpty(steProtocol, basSte)) { continue; }
try {
+ if (!steProtocol.statusType.equals(SteStatusType.IDLE)) {
+ continue;
+ }
if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) {
continue;
}
+ WrkCharge wrkCharge = wrkChargeService.selectById(steProtocol.getTaskNo());
+
+ if (wrkCharge == null) {
+ wrkCharge = new WrkCharge();
+ wrkCharge.setSteNo(ste.getId());
+ wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
+ wrkCharge.setWrkSts(11L);
+ wrkCharge.setCrnNo(basSte.getCrnNo());
+ wrkCharge.setIoPri((double) 10);
+ wrkCharge.setLocNo(basSte.getIdleLoc());
+ if (wrkChargeService.insert(wrkCharge)) {
+ log.error("淇濆瓨{}鍙风┛姊溅鍏呯數浠诲姟澶辫触!!!", ste.getId());
+ }
+ this.letCarBeWaiting(wrkCharge, ste.getId());
+ } else {
+ // 12.灏忚溅寰呮惉
+ if (wrkCharge.getWrkSts() == 12) {
+ // 鎼皬杞﹁嚦鍏呯數搴撲綅
+ LocMast locMast = locMastService.selectById(basSte.getIdleLoc());
+
+ // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+ CrnCommand crnCommand = new CrnCommand();
+ crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+ crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+ crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+ crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰
+ crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞�
+ if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) {
+ log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand));
+ } else {
+ // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
+ steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
+ // 淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅
+ Date now = new Date();
+ wrkCharge.setWrkSts(4L);
+ wrkCharge.setCrnStrTime(now);
+ wrkCharge.setModiTime(now);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ }
+ }
+
+ } else if (wrkCharge.getWrkSts() == 6L) {
+ // 灏忚溅琛岄┒鑷冲厖鐢典綅
+ if (steProtocol.isIdle()) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ SteCommand steCommand = new SteCommand();
+ steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
+ steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
+ steCommand.setTaskMode(SteTaskModeType.findChargeByLoc(steProtocol.getRow().intValue()));
+ if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
+ log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 6.灏忚溅寰呭叆 ===> 8.灏忚溅鎼叆搴�
+ wrkCharge.setWrkSts(8L);
+ Date now = new Date();
+ wrkCharge.setCrnEndTime(now);
+ wrkCharge.setModiTime(now);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 6.灏忚溅寰呭叆 ===> 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ }
+ }
+ }
+ } else if (wrkCharge.getWrkSts() == 9L) {
+ // 缁欒緭閫佺嚎涓嬪彂鍏呯數浠诲姟
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ SteChargeType steChargeType = SteChargeType.get(wrkCharge.getLocNo());
+ if (null != steChargeType) {
+ if (devpThread.charge(steChargeType.ssbm - 1, true)) {
+ // 淇敼宸ヤ綔妗g姸鎬� 9.鍏ュ簱瀹屾垚 ===> 10.搴撳瓨鏇存柊瀹屾垚
+ wrkCharge.setWrkSts(10L);
+ if (!wrkChargeService.updateById(wrkCharge)) {
+ log.error("淇敼鍏呯數浠诲姟鐘舵�� 9.鍏ュ簱瀹屾垚 ===> 10.搴撳瓨鏇存柊瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+ }
+ }
+ } else {
+ log.error("鑾峰彇鍏呯數妗╁彿澶辫触锛岃В鏋愬簱浣嶏細{}", wrkCharge.getLocNo());
+ }
+ }
+ }
} catch (Exception e) {
log.error("fail", e);
}
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index f568cb7..9fb0b29 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -47,6 +47,9 @@
private SlaveProperties slaveProperties;
@Autowired
private LocDetlService locDetlService;
+ @Autowired
+ private WrkChargeService wrkChargeService;
+
/**
* 鐢熸垚宸ヤ綔鍙�
@@ -86,6 +89,40 @@
return workNo;
}
+ public int getChargeWorkNo(Integer wrkMk) {
+ WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
+ if (Cools.isEmpty(wrkLastno)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+ }
+
+ int workNo = wrkLastno.getWrkNo();
+ int sNo = wrkLastno.getSNo();
+ int eNo = wrkLastno.getENo();
+ workNo = workNo>=eNo ? sNo : workNo+1;
+ while (true) {
+ WrkCharge wrkCharge = wrkChargeService.selectById(workNo);
+ if (null != wrkCharge) {
+ workNo = workNo>=eNo ? sNo : workNo+1;
+ } else {
+ break;
+ }
+ }
+ // 淇敼搴忓彿璁板綍
+ if (workNo > 0){
+ wrkLastno.setWrkNo(workNo);
+ wrkLastnoService.updateById(wrkLastno);
+ }
+ // 妫�楠�
+ if (workNo == 0) {
+ throw new CoolException("鐢熸垚鍏呯數宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
+ } else {
+ if (wrkChargeService.selectById(workNo)!=null) {
+ throw new CoolException("鐢熸垚宸ヤ綔鍙�" + workNo + "鍦ㄥ厖鐢靛伐浣滄。涓凡瀛樺湪");
+ }
+ }
+ return workNo;
+ }
+
/**
* 妫�绱㈠簱浣嶅彿
diff --git a/src/main/java/com/zy/core/enums/SteChargeType.java b/src/main/java/com/zy/core/enums/SteChargeType.java
new file mode 100644
index 0000000..fd7436b
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/SteChargeType.java
@@ -0,0 +1,34 @@
+package com.zy.core.enums;
+
+import com.core.common.Cools;
+
+public enum SteChargeType {
+
+ FIRST(1, "0100101"),
+ SECOND(2, "1400701"),
+ THIRD(3, "2100401"),
+ ;
+
+ SteChargeType(int ssbm, String locNo) {
+ this.ssbm = ssbm;
+ this.locNo = locNo;
+ }
+
+ public int ssbm;
+
+ public String locNo;
+
+ public static SteChargeType get(String locNo) {
+ if (Cools.isEmpty(locNo)) {
+ return null;
+ }
+ SteChargeType[] values = SteChargeType.values();
+ for (SteChargeType value : values) {
+ if (value.locNo.equals(locNo)) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/SteTaskModeType.java b/src/main/java/com/zy/core/enums/SteTaskModeType.java
index 8f1ea3b..509b553 100644
--- a/src/main/java/com/zy/core/enums/SteTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/SteTaskModeType.java
@@ -208,4 +208,34 @@
}
}
+ public static SteTaskModeType findChargeByLoc(Integer row) {
+ switch (row) {
+ case 1:
+ case 2:
+ case 3:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ return SteTaskModeType.BACK_ORIGIN;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 12:
+ case 13:
+ case 14:
+ case 19:
+ case 20:
+ case 21:
+ return SteTaskModeType.GO_ORIGIN;
+ default:
+ throw new CoolException("瑙f瀽绌挎杞﹀師鐐瑰畾浣嶅け璐�");
+ }
+ }
+
}
--
Gitblit v1.9.1