From 19b3cd8d64af08e5c0b3bd680c699e46a07e13d3 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 18 七月 2025 15:50:44 +0800
Subject: [PATCH] #预调度生成任务
---
src/main/java/com/zy/core/model/protocol/StaProtocol.java | 2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 106 ++++++++++++++++++++------
src/main/java/com/zy/core/thread/SiemensDevpThread.java | 77 ++++++++++++++++++
3 files changed, 155 insertions(+), 30 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 fc27a46..0c9f582 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -49,6 +49,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -125,16 +126,90 @@
LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+ StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1);
+ if (staProtocolIn == null) {
+ continue;
+ } else {
+ staProtocolIn = staProtocolIn.clone();
+ }
+ if (barcodeThread == null) {
+ continue;
+ }
+ String barcode = barcodeThread.getBarcode();
+ if(staProtocolIn.getStamp() == 1) {
+ WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+ .eq("barcode", barcode)
+ .in("io_type", 107, 103, 57));
+ if (!Cools.isEmpty(checkPick)) {
+ continue;
+ }
+ try {
+ LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+ SearchLocParam param = new SearchLocParam();
+ locTypeDto.setLocType1((short) 1);
+ param.setBarcode(barcode);
+ param.setIoType(1);
+ param.setSourceStaNo(inSta.getStaNo());
+ param.setLocType1(locTypeDto.getLocType1());
+ param.setWeight(staProtocol.getWeight());
+ String response = new HttpHandler.Builder()
+ .setTimeout(30, TimeUnit.SECONDS)
+ .setUri(wmsUrl)
+ .setPath("/rpc/pakin/loc/v1")
+ .setJson(JSON.toJSONString(param))
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ if (jsonObject.getInteger("code").equals(200)) {
+ StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+ barcodeThread.setBarcode("");
+ staProtocol.setWorkNo(dto.getWorkNo());
+ //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
+ staProtocol.setStaNo(dto.getStaNo().shortValue());
+ devpThread.setPakMk(staProtocol.getSiteId(), false);
+ boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
+ log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+
+ ledThread.errorReset();
+ log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+
+ if (!result) {
+ News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+
+ throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+ }
+ } else {
+ if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
+ continue;
+ }
+ staProtocol.setWorkNo(wrkNo);
+ wrkNo++;
+ staProtocol.setStaNo(inSta.getBackSta().shortValue());
+ devpThread.setPakMk(staProtocol.getSiteId(), false);
+ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+ log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+
+// if (ledThread != null) {
+ String errorMsg = jsonObject.getString("msg");
+ if (!Cools.isEmpty(errorMsg)) {
+ MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+ }
+// }
+// News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ }
+ }
+
if (staProtocol == null) {
continue;
} else {
staProtocol = staProtocol.clone();
}
- if (barcodeThread == null) {
- continue;
- }
- String barcode = barcodeThread.getBarcode();
// 灏哄妫�娴嬪紓甯�
boolean back = false;
String errMsg = "";
@@ -226,7 +301,7 @@
//
// }
News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
- MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
+// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
continue;
// barcodeThread.setBarcode("");
// staProtocol.setWorkNo(wrkMast.getWrkNo());
@@ -291,27 +366,6 @@
}
} else {
if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
-
- //宸ヤ綔妗e凡瀛樺湪 鍐嶆杩涘幓
-// wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode);
-// if (wrkMast != null) {
-// barcodeThread.setBarcode("");
-// staProtocol.setWorkNo(9999);
-// //staProtocol.setWorkNo(wrkMast.getWrkNo());
-// //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
-// staProtocol.setStaNo(inSta.getBackSta().shortValue());
-// devpThread.setPakMk(staProtocol.getSiteId(), false);
-// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-// log.error("杈撻�佺嚎涓嬪彂2锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
-// ledThread.errorReset();
-// log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
-// if (!result) {
-// News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
-//
-// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-// }
-// }
-
continue;
}
staProtocol.setWorkNo(wrkNo);
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 090619e..5395af5 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -58,7 +58,7 @@
// 闅斿绔欑偣锛堝彴杞︿綅缃級
private String nearbySta;
- //lfd鍏ュ簱鍗拌 褰搒tamp>=2鏃舵墠鍏ュ簱
+ //gl蹇�熺敓鎴愪换鍔� stamp=1鏃剁洿鎺ョ敓鎴愪换鍔�
private Integer stamp = 0;
// 澶栧舰妫�娴� ------------------------------------------------------------------------
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 4055c3b..627bb17 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -95,6 +95,16 @@
add(203);add(205);add(208);add(211);
}};
+ public static final ArrayList<Integer> staNosInList1 = new ArrayList<Integer>() {{
+ add(122);
+ add(222);add(224);add(227);add(230);
+ }};
+
+ public static final ArrayList<Integer> staNosInList2 = new ArrayList<Integer>() {{
+ add(101); add(104);add(106);add(108);
+ add(202);add(204);add(207);add(210);
+ }};
+
private Integer count=0;
/**
@@ -117,6 +127,17 @@
public SiemensDevpThread(DevpSlave slave) {
this.slave = slave;
+ }
+
+ private ArrayList<Integer> getStaNoIn() {
+ switch (slave.getId()) {
+ case 1:
+ return staNosInList1;
+ case 2:
+ return staNosInList2;
+ default:
+ throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+ }
}
private ArrayList<Integer> getStaNoErr() {
@@ -182,6 +203,9 @@
case 2:
write((StaProtocol)task.getData());
log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
+ break;
+ case 3:
+ write2((StaProtocol)task.getData());
break;
default:
break;
@@ -271,6 +295,7 @@
ArrayList<Integer> staNos = getStaNo();
ArrayList<Integer> staNosErrList = getStaNoErr();
ArrayList<Integer> staNoWeight = getStaNoWeight();
+ ArrayList<Integer> staNosInList = getStaNoIn();
int staNoSize = staNos.size();
OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
OperateResultExOne<byte[]> resultWeight = null;
@@ -355,6 +380,20 @@
}
}
+ //鍏ュ簱婊¤冻
+ ArrayList<Integer> staNosIns = staNosInList;
+ int staNosInSize = staNosIns.size();
+ OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
+ if(resultIn.IsSuccess){
+ for (int i = 0; i < staNosInSize; i++) {
+ Integer siteId = staNosIns.get(i);
+ StaProtocol staProtocol = station.get(siteId);
+ staProtocol.setStamp(siemensS7Net.getByteTransform().TransInt32(result.Content, i*6));
+ }
+ }
+
+
+
// //plc鏁呴殰
// OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
// if (resultErr2.IsSuccess) {
@@ -432,9 +471,41 @@
}
- /**
- * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
- */
+
+ private void write2(StaProtocol staProtocol) throws InterruptedException {
+ OperateResult write = null;
+ int writeCount = 0;
+ ArrayList<Integer> staNosInList = getStaNoIn();
+
+ ArrayList<Integer> staNosIns = staNosInList;
+ int staNosInSize = staNosIns.size();
+ OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
+ int offset = 0;
+ if(resultIn.IsSuccess){
+ for (int i = 0; i < staNosInSize; i++) {
+ Integer siteId = staNosIns.get(i);
+ if(staProtocol.getSiteId() == siteId){
+ offset = i;
+ }
+ }
+ }
+ do {
+ write = siemensS7Net.Write("DB1000." + offset*6 + 2,staProtocol.getWorkNo()); // 宸ヤ綔鍙�
+
+ if(write.IsSuccess ){
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ break;
+ }
+ else {
+ writeCount++;
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ }
+ }while (writeCount<5);
+ }
+
+ /**
+ * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+ */
private void write(StaProtocol staProtocol) throws InterruptedException {
if (null == staProtocol) {
return;
--
Gitblit v1.9.1