From 15161de49e7f35e2fc926a20577905621f30554c Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 28 十二月 2025 14:57:24 +0800
Subject: [PATCH] 输送线和CTU安全交互
---
src/main/java/com/zy/service/impl/RcsServiceImpl.java | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 215 insertions(+), 17 deletions(-)
diff --git a/src/main/java/com/zy/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/service/impl/RcsServiceImpl.java
index 0b67aef..c6a3c36 100644
--- a/src/main/java/com/zy/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/RcsServiceImpl.java
@@ -1,5 +1,6 @@
package com.zy.service.impl;
+import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -13,10 +14,8 @@
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
-import com.zy.entity.RcsReporterTask;
-import com.zy.entity.RcsReturn;
-import com.zy.entity.WrkDetl;
-import com.zy.entity.WrkMast;
+import com.zy.core.thread.SiemensDevpThread;
+import com.zy.entity.*;
import com.zy.enums.RcsRetMethodEnum;
import com.zy.service.ApiLogService;
import com.zy.service.RcsService;
@@ -29,11 +28,21 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
+
+import static com.zy.enums.RcsRetMethodEnum.APPLY_FROM_AGV;
@Slf4j
@Service
@@ -41,6 +50,9 @@
@Value("${dj.url}")
public String DJ_URL;
+
+ @Value("${hik.url}")
+ private String HIK_URL;
@Resource
private WrkMastService wrkMastService;
@@ -74,19 +86,86 @@
if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 涓ゅ彴CTU搴撴満鍣ㄤ汉缂栧彿
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode));
if (wrkMast != null) {
- Integer ioType = wrkMast.getIoType();
- if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) {
- if ((ioType == 101 || ioType == 110 || ioType == 103) && wrkMast.getWrkSts() == 12) {
+ if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_START) {
+ // 寮�濮�
+ wrkMast.setModiTime(now);
+ wrkMastService.updateById(wrkMast);
+ } else if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.PICK_COMPLETE) {
+ // 鍙栬揣瀹屾垚锛屾竻闄よ緭閫佺嚎浠诲姟鍙�
+ SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = siemensDevpThread.getStation().get(106).clone();
+ // 鍙栬揣瀹屾垚娓呴櫎杈撻�佺嚎浠诲姟鍙�
+ if (Objects.equals(staProtocol.getWorkNo(), wrkMast.getWrkNo())) {
+ staProtocol.setWorkNo(0);
+ staProtocol.setStaNo((short) 0);
+ boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+ News.info("CTU鍙栬揣瀹屾垚锛岀粰绔欑偣鍐�0宸ヤ綔鍙�,涓嬪彂浠诲姟:{},绔欑偣:{},agv浠诲姟鍙�:{}", result, 106, robotTaskCode);
+ if (!result) {
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("娓呴櫎杈撻�佺嚎浠诲姟鍙峰懡浠や笅鍙戝け璐�");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } else {
+ News.warn("CTU鍙栬揣瀹屾垚浠诲姟鍙穥},娓呴櫎杈撻�佺嚎浠诲姟鍙凤細{}锛屼换鍔″彿涓嶅悓", wrkMast.getWrkNo(), staProtocol.getWorkNo());
+ }
+ } else if (method.equals(APPLY_FROM_AGV.getCode())) {
+ // 鏀捐揣鐢宠
+ SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = siemensDevpThread.getStation().get(101).clone();
+ if (staProtocol == null) {
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("101绔欑偣绾跨▼涓虹┖");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ if (staProtocol.isOutEnable() && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { // 鍙嚭
+ RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+ rcsTaskContinue.setRobotTaskCode(robotTaskCode);
+ rcsTaskContinue.setTriggerType("TASK");
+ rcsTaskContinue.setTriggerCode(robotTaskCode);
+
+ String url = HIK_URL + "api/robot/controller/task/extend/continue";
+ String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
+ if (!StringUtils.isEmpty(response) && response.contains("code")) {
+ RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
+ if (!"SUCCESS".equals(rcsReturn1.getCode())) {
+ // 杩斿洖RCS
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("杩斿洖缁х画鎵ц澶辫触");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ }
+ } else {
+ News.warn("绔欑偣{}涓嶆弧瓒虫斁璐ф潯浠讹紝鑷姩锛歿}锛屾棤鐗╋細{}锛屽彲鍑猴細{}锛屼换鍔″彿锛歿}",
+ 101, staProtocol.isAutoing(), staProtocol.isLoading(), staProtocol.isOutEnable(), staProtocol.getWorkNo());
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } else if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) {
+ // 浠诲姟瀹屾垚
+ Integer ioType = wrkMast.getIoType();
+ if (ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) {
+ wrkMast.setWrkSts(4L);
+ wrkMast.setCrnEndTime(now);
+ wrkMast.setModiTime(now);
+ wrkMastService.updateById(wrkMast);
+ } else if ((ioType == 101 || ioType == 110 || ioType == 103 || ioType == 107) && wrkMast.getWrkSts() == 12) {
// 缁欒緭閫佺嚎涓嬪彂鍛戒护
for (DevpSlave devp : slaveProperties.getDevp()) {
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
- Map<Integer, StaProtocol> station = devpThread.getStation();
- StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
- if (staProtocol == null) {
- continue;
- } else {
- staProtocol = staProtocol.clone();
- }
+ StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo()).clone();
staProtocol.setWorkNo(wrkMast.getWrkNo());
staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -113,7 +192,7 @@
if (!Cools.isEmpty(orderNo)) {
// 鏋勯�犺姹傚弬鏁�
JSONObject jsonObject = new JSONObject();
- jsonObject.put("billType",wrkDetl.getThreeCode());
+ jsonObject.put("billType", wrkDetl.getThreeCode());
jsonObject.put("orderNo", wrkDetl.getOrderNo());
jsonObject.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
JSONArray jsonArray = new JSONArray();
@@ -144,7 +223,7 @@
log.error("鍑哄簱瀹屾垚涓婃姤TMS澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, request, response);
}
} catch (Exception e) {
- log.error("鍑哄簱瀹屾垚涓婃姤TMS寮傚父,request:{}",request);
+ log.error("鍑哄簱瀹屾垚涓婃姤TMS寮傚父,request:{}", request);
e.printStackTrace();
} finally {
try {
@@ -188,4 +267,123 @@
return rcsReturn;
}
+ @Override
+ public RcsReturn reporterEqpt(ReporterEqpt param) {
+ String robotTaskCode = param.getTaskCode();
+ String method = param.getMethod();
+ RcsReturn rcsReturn = new RcsReturn();
+ if (method.equals(APPLY_FROM_AGV.getCode())) {
+ SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol = siemensDevpThread.getStation().get(101).clone();
+ if (staProtocol == null) {
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("101绔欑偣绾跨▼涓虹┖");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ if (staProtocol.isOutEnable() && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { // 鍙嚭
+ EqptNotify eqptNotify = new EqptNotify(param.getEqptCode(), robotTaskCode, "6", "101");
+ String url = HIK_URL + "spi/wcs/robot/eqpt/notify";
+ String response = sendPost(url, JSONObject.toJSONString(eqptNotify));
+ if (!StringUtils.isEmpty(response) && response.contains("code")) {
+ RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
+ if (!"0".equals(rcsReturn1.getCode())) {
+ // 杩斿洖RCS
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("閫氱煡RCS缁х画鏀捐揣澶辫触");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } else {
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("璇锋眰url" + url + "澶辫触");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ } else {
+ News.warn("绔欑偣{}涓嶆弧瓒虫斁璐ф潯浠讹紝鑷姩锛歿}锛屾棤鐗╋細{}锛屽彲鍑猴細{}锛屼换鍔″彿锛歿}",
+ 101, staProtocol.isAutoing(), staProtocol.isLoading(), staProtocol.isOutEnable(), staProtocol.getWorkNo());
+ rcsReturn.setCode("Err_Internal");
+ rcsReturn.setMessage("绔欑偣涓嶆弧瓒虫斁璐ф潯浠�");
+ JSONObject data = new JSONObject();
+ data.put("robotTaskCode", robotTaskCode);
+ rcsReturn.setData(data);
+ return rcsReturn;
+ }
+ }
+ rcsReturn.setCode("SUCCESS");
+ rcsReturn.setMessage("鎴愬姛!");
+ JSONObject data = new JSONObject();
+ data.put("extra", "null");
+ rcsReturn.setData(data);
+ log.info("agv鏀捐揣璇锋眰杩斿洖锛歿}", JSONObject.toJSONString(rcsReturn));
+ return rcsReturn;
+ }
+
+ /**
+ * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
+ *
+ * @param url 鍙戦�佽姹傜殑 URL
+ * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+ * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+ */
+ public static String sendPost(String url, String param) {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ StringBuilder result = new StringBuilder();
+ try {
+ log.info("sendPost - {} - {}", url, param);
+ URL realUrl = new URL(url);
+ URLConnection conn = realUrl.openConnection();
+ conn.setRequestProperty("Content-Type", "application/json");
+ conn.setRequestProperty("Content-Length", "<calculated when request is sent>");
+ conn.setRequestProperty("Host", "<calculated when request is sent>");
+ conn.setRequestProperty("Accept", "*/*");
+ conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
+ conn.setRequestProperty("Connection", "keep-alive");
+
+ conn.setRequestProperty("X-lr-request-id", String.valueOf(new Date().getTime()));
+ conn.setRequestProperty("X-lr-version", "4.3");
+ conn.setConnectTimeout(5000);
+ conn.setReadTimeout(5000);
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ out = new PrintWriter(conn.getOutputStream());
+ out.print(param);
+ out.flush();
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+ String line;
+ while ((line = in.readLine()) != null) {
+ result.append(line);
+ }
+ log.info("recv - {}", result);
+ } catch (ConnectException e) {
+ log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+ } catch (SocketTimeoutException e) {
+ log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+ } catch (IOException e) {
+ log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+ } catch (Exception e) {
+ log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+ } finally {
+ try {
+ if (out != null) {
+ out.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException ex) {
+ log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
+ }
+ }
+ return result.toString();
+ }
+
}
--
Gitblit v1.9.1