From de67dab661ba22ec22e5db1022962470f351e03e Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 22 五月 2025 14:02:20 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/task/ClearWatchDataScheduler.java | 22 ++++
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 33 +++--
src/main/webapp/views/watch/watch.html | 90 ++++++++++++++++++
src/main/java/com/zy/common/utils/News.java | 25 +++++
src/main/java/com/zy/common/model/WatchModel.java | 21 ++++
src/main/java/com/zy/common/service/WatchService.java | 43 ++++++++
src/main/java/com/zy/asrs/controller/WatchController.java | 31 ++++++
7 files changed, 251 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/WatchController.java b/src/main/java/com/zy/asrs/controller/WatchController.java
new file mode 100644
index 0000000..76b2d44
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WatchController.java
@@ -0,0 +1,31 @@
+package com.zy.asrs.controller;
+
+import com.core.common.R;
+import com.zy.common.model.WatchModel;
+import com.zy.common.service.WatchService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
+@RestController
+public class WatchController {
+
+ @Autowired
+ private WatchService watchService;
+
+ @GetMapping("/watch/findAll")
+ public R findAll() {
+ List<WatchModel> list = watchService.getList();
+ return R.ok().add(list);
+ }
+
+ @GetMapping("/watch/fake")
+ public R fake() {
+ watchService.push("101绔欑偣", "鍏ュ簱淇″彿婊¤冻锛屾墭鐩樼爜涓虹┖");
+ watchService.push("102绔欑偣", "娴嬭瘯鏁版嵁");
+ watchService.push("103绔欑偣", "娴嬭瘯鏁版嵁2");
+ return R.ok();
+ }
+
+}
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 50c9145..f46ce75 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -19,6 +19,7 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.News;
import com.zy.common.utils.RedisUtil;
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
@@ -161,13 +162,13 @@
String barcode = barcodeThread.getBarcode();
if (Cools.isEmpty(barcode)) {
- log.info("鍏ュ簱淇″彿婊¤冻锛屾墭鐩樼爜涓虹┖");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "鍏ュ簱淇″彿婊¤冻锛屾墭鐩樼爜涓虹┖");
continue;
}
TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
if (taskWrk1 != null) {
- log.info("鎵樼洏鐮侊細" + barcode + "浠诲姟妗e瓨鍦�");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "鎵樼洏鐮侊細" + barcode + "浠诲姟妗e瓨鍦�");
continue;
}
@@ -177,6 +178,7 @@
if (back) {
requestParam.put("wcsStatus", 1);//澶辫触
requestParam.put("wcsErrorMessage", errMsg);//澶辫触鍘熷洜
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), errMsg);
}else {
requestParam.put("wcsStatus", 0);//鎴愬姛
}
@@ -200,14 +202,14 @@
if (jsonObject.getInteger("code") == 200) {
} else if (jsonObject.getInteger("code") == 500) {
- log.info("鏉$爜锛�" + barcode + "鐢宠WMS澶辫触,绯荤粺鍥為��,response=" + JSON.toJSONString(jsonObject));
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "鏉$爜锛�" + barcode + "鐢宠WMS澶辫触,绯荤粺鍥為��,response=" + JSON.toJSONString(jsonObject));
staProtocol.setWorkNo(9997);
staProtocol.setStaNo(inSta.getBackSta().shortValue());
MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
continue;
}else {
- log.info("鏉$爜锛�" + barcode + "鐢宠WMS澶辫触,response=" + JSON.toJSONString(jsonObject));
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "鏉$爜锛�" + barcode + "鐢宠WMS澶辫触,response=" + JSON.toJSONString(jsonObject));
continue;
}
@@ -219,18 +221,18 @@
// 鍒涙柊涓�涓叆搴撳伐浣滄。
TaskWrk taskWrk = taskWrkService.selectByTaskNo(String.valueOf(resultWrkNo));
if(taskWrk != null) {
- log.info("浠诲姟锛�" + resultWrkNo + "宸茬粡瀛樺湪");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "浠诲姟锛�" + resultWrkNo + "宸茬粡瀛樺湪");
continue;
}
LocMast locMast = locMastService.selectByLocNo(resultLocNo);
if (locMast == null) {
- log.info(resultLocNo + "搴撲綅涓嶅瓨鍦�");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), resultLocNo + "搴撲綅涓嶅瓨鍦�");
continue;
}
if (!locMast.getLocSts().equals("O")) {
- log.info(resultLocNo + "搴撲綅涓嶅浜庣┖搴撲綅");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), resultLocNo + "搴撲綅涓嶅浜庣┖搴撲綅");
continue;
}
@@ -252,7 +254,7 @@
}
if (!taskWrkService.insert(taskWrk)) {
- log.info("浠诲姟锛�" + resultWrkNo + "浠诲姟鍒涘缓澶辫触");
+ News.watchInfo(String.valueOf(staProtocol.getSiteId()), "浠诲姟锛�" + resultWrkNo + "浠诲姟鍒涘缓澶辫触");
continue;
}
@@ -390,7 +392,7 @@
}
BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
if (basCrnp == null) {
- log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+ News.watchInfo(crn.getId() + "鍙峰爢鍨涙満", "{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
continue;
}
@@ -445,7 +447,7 @@
// 鏌ヨ绔欑偣璇︾粏淇℃伅
BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
if (staDetl == null) {
- log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+ News.watchError(crnStn.getStaNo() + "绔欑偣", "鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
continue;
}
@@ -454,18 +456,21 @@
flag = true;
}
if (!flag) {
+ News.watchError(crnStn.getStaNo() + "绔欑偣", "鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐圭姸鎬佹娴嬪け璐ワ紝绔欑偣闇�瑕佹弧瓒筹細鑷姩銆佹湁鐗┿�佹湁宸ヤ綔鍙枫�佺珯鐐瑰彲鍏�");
continue;
}
// 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
- TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
+ TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo(), staDesc.getStnNo().toString());
if (null == taskWrk) {
+ News.watchError(crnStn.getStaNo() + "绔欑偣", "鍏ュ簱 ===>> 宸ヤ綔妗d笉瀛樺湪锛屾鏌ヤ换鍔℃槸鍚︾敓鎴�");
continue;
}
// 鍫嗗灈鏈烘帶鍒惰繃婊�
if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+ News.watchError(slave.getId() + "鍙峰爢鍨涙満", "鍫嗗灈鏈哄繖纰屼腑");
continue;
}
@@ -529,7 +534,7 @@
}
// 宸ヤ綔妗g姸鎬佸垽鏂�
if (taskWrk.getIoType() != 2 || taskWrk.getTargetPoint() == null || taskWrk.getStartPoint() == null) {
- log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", taskWrk.getWrkNo(), taskWrk.getStartPoint(), taskWrk.getIoType());
+ News.watchError(taskWrk.getWrkNo() + "浠诲姟", "鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", taskWrk.getWrkNo(), taskWrk.getStartPoint(), taskWrk.getIoType());
continue;
}
@@ -545,7 +550,7 @@
// 鏌ヨ绔欑偣璇︾粏淇℃伅
BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
if (staDetl == null) {
- log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+ News.watchError(taskWrk.getWrkNo() + "浠诲姟", "鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
break;
}
@@ -560,7 +565,7 @@
}
int storeCount = basDevpService.getStoreCount();
if(storeCount >= maxCount){
- log.error("杈撻�佺嚎鏆傚瓨鏁拌揪鍒颁笂闄恵}",storeCount);
+ News.watchError(taskWrk.getWrkNo() + "浠诲姟", "杈撻�佺嚎鏆傚瓨鏁拌揪鍒颁笂闄恵}", storeCount);
break;
}
diff --git a/src/main/java/com/zy/asrs/task/ClearWatchDataScheduler.java b/src/main/java/com/zy/asrs/task/ClearWatchDataScheduler.java
new file mode 100644
index 0000000..21790cc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/ClearWatchDataScheduler.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.task;
+
+import com.zy.common.service.WatchService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class ClearWatchDataScheduler {
+
+ @Autowired
+ private WatchService watchService;
+
+ @Scheduled(cron = "0/5 * * * * ? ")
+ public void clear() {
+ watchService.clearTimeOutData();
+ }
+
+
+}
diff --git a/src/main/java/com/zy/common/model/WatchModel.java b/src/main/java/com/zy/common/model/WatchModel.java
new file mode 100644
index 0000000..47a5612
--- /dev/null
+++ b/src/main/java/com/zy/common/model/WatchModel.java
@@ -0,0 +1,21 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class WatchModel {
+
+ private String key;
+
+ private String msg;
+
+ private Long time;
+
+ public WatchModel(String key, String msg) {
+ this.key = key;
+ this.msg = msg;
+ this.time = System.currentTimeMillis();
+ }
+}
diff --git a/src/main/java/com/zy/common/service/WatchService.java b/src/main/java/com/zy/common/service/WatchService.java
new file mode 100644
index 0000000..f6b30fd
--- /dev/null
+++ b/src/main/java/com/zy/common/service/WatchService.java
@@ -0,0 +1,43 @@
+package com.zy.common.service;
+
+import com.zy.common.model.WatchModel;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class WatchService {
+
+ private HashMap<String, WatchModel> map = new HashMap<>();
+
+ public boolean push(String key, String msg) {
+ map.put(key, new WatchModel(key, msg));
+ return true;
+ }
+
+ public HashMap<String, WatchModel> getMap() {
+ return map;
+ }
+
+ public List<WatchModel> getList() {
+ return new ArrayList<>(map.values());
+ }
+
+ public synchronized void clearTimeOutData() {
+ ArrayList<String> removeKey = new ArrayList<>();
+ for (Map.Entry<String, WatchModel> entry : this.map.entrySet()) {
+ WatchModel watchModel = entry.getValue();
+ if (System.currentTimeMillis() - watchModel.getTime() > 1000 * 10) {
+ removeKey.add(entry.getKey());
+ }
+ }
+
+ for (String key : removeKey) {
+ map.remove(key);
+ }
+ }
+
+}
diff --git a/src/main/java/com/zy/common/utils/News.java b/src/main/java/com/zy/common/utils/News.java
index 3ee8ad0..2923676 100644
--- a/src/main/java/com/zy/common/utils/News.java
+++ b/src/main/java/com/zy/common/utils/News.java
@@ -1,5 +1,7 @@
package com.zy.common.utils;
+import com.core.common.SpringUtils;
+import com.zy.common.service.WatchService;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Array;
@@ -108,6 +110,21 @@
offer(NewsLevel.ERROR, format, arguments);
}
+ public static void watchInfo(String key, String format, Object... arguments) {
+ info(format, arguments);
+ watchOffer(key, replace(format, arguments));
+ }
+
+ public static void watchWarn(String key, String format, Object... arguments) {
+ warn(format, arguments);
+ watchOffer(key, replace(format, arguments));
+ }
+
+ public static void watchError(String key, String format, Object... arguments) {
+ error(format, arguments);
+ watchOffer(key, replace(format, arguments));
+ }
+
public static void infoNoLog(String format, Object... arguments) {
offer(NewsLevel.INFO, format, arguments);
}
@@ -154,6 +171,14 @@
return NEWS_QUEUE.offer(new NewsDomain(level, replace(msg, args), (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date())));
}
+ private static boolean watchOffer(String key, String msg) {
+ WatchService watchService = SpringUtils.getBean(WatchService.class);
+ if(watchService != null) {
+ return watchService.push(key, msg);
+ }
+ return false;
+ }
+
private static String replace(String str, Object[] objs){
if (null == objs || objs.length == 0 || null == str || "".equals(str.trim())) {
return str;
diff --git a/src/main/webapp/views/watch/watch.html b/src/main/webapp/views/watch/watch.html
new file mode 100644
index 0000000..e1476c2
--- /dev/null
+++ b/src/main/webapp/views/watch/watch.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <title>绯荤粺鐩戣</title>
+ <link rel="stylesheet" href="../../static/wcs/css/element.css">
+ <script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
+ <script type="text/javascript" src="../../static/wcs/js/common.js"></script>
+ <script type="text/javascript" src="../../static/wcs/js/vue.min.js"></script>
+ <script type="text/javascript" src="../../static/wcs/js/element.js"></script>
+ <style>
+ .container {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+ }
+
+ .box-card {
+ width: 480px;
+ margin: 10px;
+ }
+ </style>
+ </head>
+
+ <body>
+ <div id="app">
+ <div class="container" v-if="watchData.length > 0">
+ <el-card class="box-card" v-for="item in watchData" :key="item">
+ <div>
+ {{ item.key }}
+ </div>
+ <div>
+ {{ item.msg }}
+ </div>
+ </el-card>
+ </div>
+ <div v-else>
+ <el-empty description="鏃犲紓甯�"></el-empty>
+ </div>
+ </div>
+ <script>
+ var app = new Vue({
+ el: '#app',
+ data: {
+ watchData: [],
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ let that = this;
+ this.getWatchData()
+
+ setInterval(() => {
+ that.getWatchData()
+ }, 1000);
+ },
+ getWatchData() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/watch/findAll",
+ headers: {
+ 'token': localStorage.getItem('token')
+ },
+ data: {},
+ dataType: 'json',
+ contentType: 'application/json;charset=UTF-8',
+ method: 'GET',
+ success: function(res) {
+ if (res.code == 200) {
+ that.watchData = res.data;
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
+ } else {
+ that.$message({
+ message: res.msg,
+ type: 'error'
+ });
+ }
+ }
+ });
+ },
+ }
+ })
+ </script>
+ </body>
+
+</html>
--
Gitblit v1.9.1