From ab08f2e28057e226ba42b3268ed36ac489cef34e Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期二, 24 三月 2026 00:59:59 +0800
Subject: [PATCH] 大屏接口
---
src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java | 13 +
src/main/java/com/zy/asrs/task/ClearMonitorLocMapCacheScheduler.java | 72 ++++++
src/main/java/com/zy/common/config/RedisConfig.java | 18 +
src/main/java/com/zy/asrs/service/impl/MonitorReportServiceImpl.java | 192 ++++++++++++++++
src/main/java/com/zy/asrs/entity/ViewLocMapDto.java | 125 ++++++++++
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 25 +-
src/main/java/com/zy/asrs/controller/MonitorController.java | 133 ++--------
src/main/resources/mapper/ReportQueryMapper.xml | 54 ++++
src/main/java/com/zy/asrs/service/MonitorReportService.java | 20 +
src/main/java/com/zy/core/thread/SiemensDevpThread.java | 22 +
10 files changed, 556 insertions(+), 118 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/MonitorController.java b/src/main/java/com/zy/asrs/controller/MonitorController.java
index 39bfd98..fd1e43a 100644
--- a/src/main/java/com/zy/asrs/controller/MonitorController.java
+++ b/src/main/java/com/zy/asrs/controller/MonitorController.java
@@ -1,17 +1,11 @@
package com.zy.asrs.controller;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Arith;
import com.core.common.Cools;
import com.core.common.R;
-import com.zy.asrs.domain.dto.AxisBean;
-import com.zy.asrs.domain.dto.WorkChartAxis;
-import com.zy.asrs.domain.vo.LocChartPie;
import com.zy.asrs.entity.BasCrnError;
-import com.zy.asrs.entity.LocMast;
import com.zy.asrs.mapper.BasCrnErrorMapper;
-import com.zy.asrs.mapper.ReportQueryMapper;
-import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.MonitorReportService;
import com.zy.common.model.annotations.RateLimit;
import com.zy.common.service.CommonService;
import com.zy.core.CrnThread;
@@ -30,8 +24,13 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* Created by vincent on 2020/11/16
@@ -43,13 +42,11 @@
private static final String[] WEEK = {"鏄熸湡鏃�","鏄熸湡涓�","鏄熸湡浜�","鏄熸湡涓�","鏄熸湡鍥�","鏄熸湡浜�","鏄熸湡鍏�"};
@Autowired
- private ReportQueryMapper reportQueryMapper;
+ private MonitorReportService monitorReportService;
@Autowired
private SlaveProperties slaveProperties;
@Autowired
private BasCrnErrorMapper basCrnErrorMapper;
- @Autowired
- private LocMastService locMastService;
/**
* 鑾峰彇褰撳墠鏃堕棿
@@ -149,114 +146,38 @@
// @RateLimit(2)
@GetMapping("/pakin/rep")
public R monitorPakinRep(){
- // 鍏ュ簱
- List<Map<String, Object>> pakinRep = reportQueryMapper.queryPakinRep();
- for (Map<String, Object> map : pakinRep) {
- if (map.get("node")!=null) {
- map.put("node", String.valueOf(map.get("node")).substring(5, 10));
- }
- }
- // 鍑哄簱
- List<Map<String, Object>> pakoutRep = reportQueryMapper.queryPakinRep();
- return R.ok(pakinRep);
+ return R.ok(monitorReportService.getPakinRepData());
}
@GetMapping("/line/charts")
public R locIoLineCharts(){
- Map<String,Object> map=new HashMap<String, Object>();
- List<AxisBean> list = new ArrayList<AxisBean>();
-
- List<WorkChartAxis> listChart = reportQueryMapper.getChartAxis();
-
- if(listChart!=null) {
- ArrayList<Integer> data1 = new ArrayList<Integer>();
- ArrayList<Integer> data2 = new ArrayList<Integer>();
-
- SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.DATE, -12);
- for(int i=0;i<12;i++) {
- boolean flag = true;
- calendar.add(Calendar.DATE, 1);
- String str = sf.format(calendar.getTime());
- for(WorkChartAxis workChart : listChart) {
- if(str.equals(workChart.getYmd())) {
- data1.add(workChart.getInqty());
- data2.add(workChart.getOutqty());
- flag = false;
- break;
- }
- }
- if(flag) {
- data1.add(0);
- data2.add(0);
- }
- }
- AxisBean inqty = new AxisBean();
- inqty.setName("鍏ュ簱鏁伴噺");
- Integer[] array1 = new Integer[data1.size()];
- inqty.setData(data1.toArray(array1));
- list.add(inqty);
- AxisBean outqty = new AxisBean();
- outqty.setName("鍑哄簱鏁伴噺");
- Integer[] array2 = new Integer[data2.size()];
- outqty.setData(data2.toArray(array2));
- list.add(outqty);
- }
- map.put("rows",list);
- return R.ok(map);
+ return R.ok(monitorReportService.getLocIoLineChartsData());
}
/**
* 搴撲綅浣跨敤鎯呭喌缁熻
*/
-// @RateLimit(60)
+// 棰勭暀闄愭祦閰嶇疆锛�60锛�
@GetMapping("/loc/rep")
public R monitorLocRep(){
- List<Map<String, Object>> pie = new ArrayList<>();
+ return R.ok(monitorReportService.getLocRepData());
+ }
- LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
- int i = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", "D"));
- if(locUseRate!=null) {
- Map<String, Object> map = new HashMap<>();
- map.put("name", "鍦ㄥ簱");
- map.put("value", locUseRate.getFqty());
- pie.add(map);
+ /**
+ * 搴撲綅鐑姏鍥炬帓鍙峰垪琛�
+ */
+ @GetMapping("/loc/map/rows")
+ public R monitorLocMapRows() {
+ return R.ok(monitorReportService.getLocMapRows());
+ }
- Map<String, Object> map1 = new HashMap<>();
- map1.put("name", "绌�");
- map1.put("value", locUseRate.getOqty());
- pie.add(map1);
-
- Map<String, Object> map2 = new HashMap<>();
- map2.put("name", "浣跨敤");
- map2.put("value", locUseRate.getUqty());
- pie.add(map2);
-
- Map<String, Object> map3 = new HashMap<>();
- map3.put("name", "绌烘澘");
- map3.put("value", i);
- pie.add(map3);
- }
-
- // 鎬诲簱浣嶆暟
- Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
- // 浣跨敤涓�
- Integer used = locUseRate.getFqty() + locUseRate.getUqty();
- // 搴撲綅浣跨敤鐜�
- double usedDivides = Arith.divides(3, used, total);
- double usedPr = Arith.multiplys(1, usedDivides, 100);
-
- return R.ok(
- Cools.add("pie", pie)
- .add("stockCunt", locUseRate.getFqty() - i)
- .add("emptyCount", locUseRate.getOqty())
- .add("noneCount", i)
- .add("total", total)
- .add("used", used)
- .add("usedPr", usedPr)
- );
+ /**
+ * 搴撲綅鐑姏鍥惧崟鎺掓暟鎹�
+ */
+ @GetMapping("/loc/map")
+ public R monitorLocMap(@RequestParam(defaultValue = "1") Integer row) {
+ return R.ok(monitorReportService.getLocMapData(row));
}
/**
diff --git a/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java b/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java
new file mode 100644
index 0000000..84a7071
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java
@@ -0,0 +1,125 @@
+package com.zy.asrs.entity;
+
+/**
+ * 搴撲綅鐑姏鍥惧崟鍏�
+ */
+public class ViewLocMapDto {
+
+ private String locNo;
+ private Integer bay1;
+ private String locSts;
+ private String maktx;
+ private String itemBarcodes;
+ private String pltBarcodes;
+ private String bgc = "#fff";
+ private String color = "#666";
+
+ public ViewLocMapDto() {
+ }
+
+ public ViewLocMapDto(String locNo, Integer bay1, String locSts) {
+ this.locNo = locNo;
+ this.bay1 = bay1;
+ this.locSts = locSts;
+ }
+
+ public String getLocNo() {
+ return locNo;
+ }
+
+ public void setLocNo(String locNo) {
+ this.locNo = locNo;
+ }
+
+ public Integer getBay1() {
+ return bay1;
+ }
+
+ public void setBay1(Integer bay1) {
+ this.bay1 = bay1;
+ }
+
+ public String getLocSts() {
+ return locSts;
+ }
+
+ public String getMaktx() {
+ return maktx;
+ }
+
+ public void setMaktx(String maktx) {
+ this.maktx = maktx;
+ }
+
+ public String getItemBarcodes() {
+ return itemBarcodes;
+ }
+
+ public void setItemBarcodes(String itemBarcodes) {
+ this.itemBarcodes = itemBarcodes;
+ }
+
+ public String getPltBarcodes() {
+ return pltBarcodes;
+ }
+
+ public void setPltBarcodes(String pltBarcodes) {
+ this.pltBarcodes = pltBarcodes;
+ }
+
+ public void setLocSts(String locSts) {
+ this.locSts = locSts;
+ switch (locSts) {
+ case "D":
+ this.bgc = "#00B271";
+ this.color = "#fff";
+ break;
+ case "F":
+ this.bgc = "#479AC7";
+ this.color = "#fff";
+ break;
+ case "O":
+ this.bgc = "#B45B3E";
+ this.color = "#fff";
+ break;
+ case "P":
+ this.bgc = "#66CCCC";
+ this.color = "#fff";
+ break;
+ case "Q":
+ this.bgc = "#5172ef";
+ this.color = "#fff";
+ break;
+ case "R":
+ this.bgc = "#D7FFF0";
+ this.color = "#000";
+ break;
+ case "S":
+ this.bgc = "#F0DAD2";
+ this.color = "#000";
+ break;
+ case "X":
+ this.bgc = "#bac296";
+ this.color = "#fff";
+ break;
+ default:
+ break;
+ }
+ }
+
+ public String getBgc() {
+ return bgc;
+ }
+
+ public void setBgc(String bgc) {
+ this.bgc = bgc;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
index bd14d54..15030c3 100644
--- a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
@@ -2,7 +2,9 @@
import com.zy.asrs.domain.dto.WorkChartAxis;
import com.zy.asrs.domain.vo.LocChartPie;
+import com.zy.asrs.entity.ViewLocMapDto;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@@ -50,4 +52,15 @@
@Select("select count(1) as totalLoc from asr_loc_mast")
Integer getTotalLocByCrnId();
+ @Select("select distinct row1 from asr_loc_mast order by row1 asc")
+ List<Integer> getViewLocRowTotal();
+
+ @Select("select distinct lev1 from asr_loc_mast where row1=#{row1} order by lev1 desc")
+ List<String> getViewLocLevCount(@Param("row1") int row1);
+
+ @Select("select distinct bay1 from asr_loc_mast where row1=#{row1} order by bay1")
+ List<String> getViewLocBayCount(@Param("row1") int row1);
+
+ List<ViewLocMapDto> getViewLocBays(@Param("row1") int row1, @Param("lev1") int lev1);
+
}
diff --git a/src/main/java/com/zy/asrs/service/MonitorReportService.java b/src/main/java/com/zy/asrs/service/MonitorReportService.java
new file mode 100644
index 0000000..7f66667
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/MonitorReportService.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐩戞帶澶у睆鎶ヨ〃鏌ヨ
+ */
+public interface MonitorReportService {
+
+ List<Map<String, Object>> getPakinRepData();
+
+ Map<String, Object> getLocIoLineChartsData();
+
+ Map<String, Object> getLocRepData();
+
+ List<Integer> getLocMapRows();
+
+ Map<String, Object> getLocMapData(Integer row);
+}
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 783bca5..f842c6b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -561,24 +561,25 @@
if (waitPakinNotIn > 0) {
return;
}
- // 瀛樺湪杩涜涓�/鍦ㄩ�斾换鍔�(2,3,12,13,14)鍒欎笉涓嬪彂鍑哄簱锛岄伩鍏嶅啿绐�
- // 2 寰呮墽琛岋紙鍏ュ簱锛�
- //3 璁惧鎵ц涓紙鍏ュ簱锛�
- //12 璁惧鎵ц涓紙鍑哄簱锛�
- //13 鍑哄簱鍒扮珯鐐逛笂
- //14 鍑哄簱绛夊緟纭
- int activeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
- .in("wrk_sts", 2, 3, 12, 13, 14));
- if (activeCount > 0) {
- return;
- }
-
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 11).orderBy("create_time"));
if (wrkMasts.isEmpty()) {
return;
}
WrkMast wrkMast = wrkMasts.get(0);
+ // 瀛樺湪杩涜涓�/鍦ㄩ�斾换鍔�(2,3,12,13,14)鍒欎笉涓嬪彂鍑哄簱锛岄伩鍏嶅啿绐侊紙鎺掗櫎褰撳墠浠诲姟锛�
+ // 2 寰呮墽琛岋紙鍏ュ簱锛�
+ // 3 璁惧鎵ц涓紙鍏ュ簱锛�
+ // 12 璁惧鎵ц涓紙鍑哄簱锛�
+ // 13 鍑哄簱鍒扮珯鐐逛笂
+ // 14 鍑哄簱绛夊緟纭
+ int activeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
+ .in("wrk_sts", 2, 3, 12, 13, 14)
+ .ne("wrk_no", wrkMast.getWrkNo()));
+ if (activeCount > 0) {
+ return;
+ }
+
Integer sourceStaNo = Utils.getStaNoByLocNo(wrkMast.getSourceLocNo());
LiftCommand command = new LiftCommand();
diff --git a/src/main/java/com/zy/asrs/service/impl/MonitorReportServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MonitorReportServiceImpl.java
new file mode 100644
index 0000000..1a193bb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/MonitorReportServiceImpl.java
@@ -0,0 +1,192 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Arith;
+import com.zy.asrs.domain.dto.AxisBean;
+import com.zy.asrs.domain.dto.WorkChartAxis;
+import com.zy.asrs.domain.vo.LocChartPie;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.ViewLocMapDto;
+import com.zy.asrs.mapper.ReportQueryMapper;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.MonitorReportService;
+import com.zy.common.utils.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class MonitorReportServiceImpl implements MonitorReportService {
+
+ private static final String LOC_MAP_CACHE_KEY_PREFIX = "monitor:loc:map:row:";
+ private static final long LOC_MAP_CACHE_SECONDS = 1800L;
+
+ @Autowired
+ private ReportQueryMapper reportQueryMapper;
+ @Autowired
+ private LocMastService locMastService;
+ @Autowired(required = false)
+ private RedisUtil redisUtil;
+
+ @Override
+ public List<Map<String, Object>> getPakinRepData() {
+ List<Map<String, Object>> pakinRep = reportQueryMapper.queryPakinRep();
+ for (Map<String, Object> map : pakinRep) {
+ if (map.get("node") != null) {
+ map.put("node", String.valueOf(map.get("node")).substring(5, 10));
+ }
+ }
+ return pakinRep;
+ }
+
+ @Override
+ public Map<String, Object> getLocIoLineChartsData() {
+ Map<String, Object> map = new HashMap<>();
+ List<AxisBean> list = new ArrayList<>();
+ List<WorkChartAxis> listChart = reportQueryMapper.getChartAxis();
+
+ if (listChart != null) {
+ ArrayList<Integer> data1 = new ArrayList<>();
+ ArrayList<Integer> data2 = new ArrayList<>();
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DATE, -12);
+ for (int i = 0; i < 12; i++) {
+ boolean flag = true;
+ calendar.add(Calendar.DATE, 1);
+ String str = sf.format(calendar.getTime());
+ for (WorkChartAxis workChart : listChart) {
+ if (str.equals(workChart.getYmd())) {
+ data1.add(workChart.getInqty());
+ data2.add(workChart.getOutqty());
+ flag = false;
+ break;
+ }
+ }
+ if (flag) {
+ data1.add(0);
+ data2.add(0);
+ }
+ }
+ AxisBean inqty = new AxisBean();
+ inqty.setName("鍏ュ簱鏁伴噺");
+ Integer[] array1 = new Integer[data1.size()];
+ inqty.setData(data1.toArray(array1));
+ list.add(inqty);
+ AxisBean outqty = new AxisBean();
+ outqty.setName("鍑哄簱鏁伴噺");
+ Integer[] array2 = new Integer[data2.size()];
+ outqty.setData(data2.toArray(array2));
+ list.add(outqty);
+ }
+ map.put("rows", list);
+ return map;
+ }
+
+ @Override
+ public Map<String, Object> getLocRepData() {
+ List<Map<String, Object>> pie = new ArrayList<>();
+ LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
+ int i = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", "D"));
+ if (locUseRate != null) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("name", "鍦ㄥ簱");
+ map.put("value", locUseRate.getFqty());
+ pie.add(map);
+
+ Map<String, Object> map1 = new HashMap<>();
+ map1.put("name", "绌�");
+ map1.put("value", locUseRate.getOqty());
+ pie.add(map1);
+
+ Map<String, Object> map2 = new HashMap<>();
+ map2.put("name", "浣跨敤");
+ map2.put("value", locUseRate.getUqty());
+ pie.add(map2);
+
+ Map<String, Object> map3 = new HashMap<>();
+ map3.put("name", "绌烘澘");
+ map3.put("value", i);
+ pie.add(map3);
+ }
+
+ Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
+ Integer used = locUseRate.getFqty() + locUseRate.getUqty();
+ double usedDivides = Arith.divides(3, used, total);
+ double usedPr = Arith.multiplys(1, usedDivides, 100);
+
+ Map<String, Object> result = new HashMap<>();
+ result.put("pie", pie);
+ result.put("stockCunt", locUseRate.getFqty() - i);
+ result.put("emptyCount", locUseRate.getOqty());
+ result.put("noneCount", i);
+ result.put("total", total);
+ result.put("used", used);
+ result.put("usedPr", usedPr);
+ return result;
+ }
+
+ @Override
+ public List<Integer> getLocMapRows() {
+ List<Integer> rows = reportQueryMapper.getViewLocRowTotal();
+ if (rows == null) {
+ rows = new ArrayList<>();
+ }
+ return rows;
+ }
+
+ @Override
+ public Map<String, Object> getLocMapData(Integer row) {
+ String cacheDataKey = LOC_MAP_CACHE_KEY_PREFIX + row;
+ if (redisUtil != null) {
+ try {
+ Object redisData = redisUtil.get(cacheDataKey);
+ if (redisData instanceof Map) {
+ return (Map<String, Object>) redisData;
+ }
+ } catch (Exception e) {
+ log.warn("Redis璇荤紦瀛樺け璐ワ紝鏀规煡鏁版嵁搴擄紝key={}", cacheDataKey, e);
+ }
+ }
+
+ List<String> bays = reportQueryMapper.getViewLocBayCount(row);
+ if (bays == null) {
+ bays = new ArrayList<>();
+ }
+ bays.add(0, "");
+ List<String> levs = reportQueryMapper.getViewLocLevCount(row);
+ if (levs == null) {
+ levs = new ArrayList<>();
+ }
+ List<Map<String, Object>> body = new ArrayList<>();
+ for (String lev : levs) {
+ List<ViewLocMapDto> dtos = reportQueryMapper.getViewLocBays(row, Integer.parseInt(lev.trim()));
+ if (dtos == null) {
+ dtos = new ArrayList<>();
+ }
+ dtos.add(0, new ViewLocMapDto(null, null, lev));
+ Map<String, Object> map = new HashMap<>();
+ map.put("loc", dtos);
+ body.add(map);
+ }
+ Map<String, Object> result = new HashMap<>();
+ result.put("title", bays);
+ result.put("body", body);
+ if (redisUtil != null) {
+ try {
+ redisUtil.set(cacheDataKey, result, LOC_MAP_CACHE_SECONDS);
+ } catch (Exception e) {
+ log.warn("Redis鍐欑紦瀛樺け璐ワ紝key={}", cacheDataKey, e);
+ }
+ }
+ return result;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/task/ClearMonitorLocMapCacheScheduler.java b/src/main/java/com/zy/asrs/task/ClearMonitorLocMapCacheScheduler.java
new file mode 100644
index 0000000..a3fdf48
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/ClearMonitorLocMapCacheScheduler.java
@@ -0,0 +1,72 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.mapper.ReportQueryMapper;
+import com.zy.common.utils.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Component
+@Slf4j
+public class ClearMonitorLocMapCacheScheduler {
+
+ private static final String LOC_MAP_CACHE_KEY_PREFIX = "monitor:loc:map:row:";
+
+ private static final String[] LOC_MAP_CACHE_PATTERNS = {
+ "monitor:loc:map:*",
+ "*monitor:loc:map:*",
+ };
+
+ @Autowired(required = false)
+ private RedisUtil redisUtil;
+ @Autowired(required = false)
+ private ReportQueryMapper reportQueryMapper;
+
+ /**
+ * 姣忓皬鏃舵竻鐞嗕竴娆$儹鍔涘浘缂撳瓨
+ */
+ @Scheduled(cron = "0 0 * * * ?")
+ public void clearLocMapCache() {
+ if (redisUtil == null) {
+ return;
+ }
+ try {
+ Set<String> toDelete = new HashSet<>();
+ for (String pattern : LOC_MAP_CACHE_PATTERNS) {
+ Set<?> keys = redisUtil.keys(pattern);
+ if (keys == null || keys.isEmpty()) {
+ continue;
+ }
+ for (Object key : keys) {
+ if (key != null) {
+ toDelete.add(String.valueOf(key));
+ }
+ }
+ }
+ toDelete.add(LOC_MAP_CACHE_KEY_PREFIX + "1");
+ if (reportQueryMapper != null) {
+ List<Integer> rows = reportQueryMapper.getViewLocRowTotal();
+ if (rows != null) {
+ for (Integer row : rows) {
+ if (row != null) {
+ toDelete.add(LOC_MAP_CACHE_KEY_PREFIX + row);
+ }
+ }
+ }
+ }
+ if (toDelete.isEmpty()) {
+ return;
+ }
+ String[] cacheKeys = toDelete.toArray(new String[0]);
+ redisUtil.del(cacheKeys);
+ log.info("娓呯悊搴撲綅鐑姏鍥剧紦瀛樻暟閲�={}", cacheKeys.length);
+ } catch (Exception e) {
+ log.error("娓呯悊搴撲綅鐑姏鍥剧紦瀛樺け璐�", e);
+ }
+ }
+}
diff --git a/src/main/java/com/zy/common/config/RedisConfig.java b/src/main/java/com/zy/common/config/RedisConfig.java
index cf99252..31b50d6 100644
--- a/src/main/java/com/zy/common/config/RedisConfig.java
+++ b/src/main/java/com/zy/common/config/RedisConfig.java
@@ -3,11 +3,17 @@
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.RedisPassword;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.*;
+import org.springframework.util.StringUtils;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@@ -19,6 +25,18 @@
//@EnableCaching // 寮�鍚暟鎹紦瀛樻満鍒�
public class RedisConfig extends CachingConfigurerSupport {
+ @Bean
+ @Primary
+ public LettuceConnectionFactory redisConnectionFactory(RedisProperties redisProperties) {
+ RedisStandaloneConfiguration standalone = new RedisStandaloneConfiguration();
+ standalone.setHostName(redisProperties.getHost());
+ standalone.setPort(redisProperties.getPort());
+ standalone.setDatabase(redisProperties.getDatabase());
+ if (StringUtils.hasText(redisProperties.getPassword())) {
+ standalone.setPassword(RedisPassword.of(redisProperties.getPassword()));
+ }
+ return new LettuceConnectionFactory(standalone);
+ }
/**
* RedisTemplate鐩稿叧閰嶇疆
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 64d0eee..d702696 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -238,6 +238,28 @@
staProtocol.setPakMk(true);
}
}
+ // 100銆�101銆�122 绔欑偣 StaProtocol 鍏ㄩ噺鐩戞祴鏃ュ織锛�2026-03-25 涔嬪悗涓嶅啀鎵撳嵃锛�
+ if (result.IsSuccess) {
+ try {
+ Calendar cutoff = Calendar.getInstance();
+ cutoff.set(2026, Calendar.MARCH, 25, 0, 0, 0);
+ cutoff.set(Calendar.MILLISECOND, 0);
+ if (System.currentTimeMillis() < cutoff.getTimeInMillis()) {
+ String time = DateUtils.convert(new Date());
+ for (int staNo : new int[]{100, 101, 122}) {
+ StaProtocol p = station.get(staNo);
+ if (p != null) {
+ String msg = String.format("[%s] %s 绔欑偣缂栧彿=%s 宸ヤ綔鍙�=%s 鐩爣绔�=%s 鑷姩=%s 鏈夌墿=%s 鍙叆=%s 鍙嚭=%s 绌烘澘淇″彿=%s 婊℃墭鐩�=%s 楂樺害=%s 閿佸畾鏍囪=%s 鎶ヨ=%s",
+ staNo, time, p.getSiteId(), p.getWorkNo(), p.getStaNo(), p.isAutoing(), p.isLoading(), p.isInEnable(), p.isOutEnable(),
+ p.isEmptyMk(), p.isFullPlt(), p.getLocHeight(), p.isPakMk(), p.getError());
+ log.info("绔欑偣鐩戞祴 {}", msg);
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.warn("绔欑偣鐩戞祴鏃ュ織鎵撳嵃寮傚父", e);
+ }
+ }
}
//浠诲姟淇℃伅鍙嶉
diff --git a/src/main/resources/mapper/ReportQueryMapper.xml b/src/main/resources/mapper/ReportQueryMapper.xml
new file mode 100644
index 0000000..543353d
--- /dev/null
+++ b/src/main/resources/mapper/ReportQueryMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.ReportQueryMapper">
+
+ <select id="getViewLocBays" resultType="com.zy.asrs.entity.ViewLocMapDto">
+ SELECT m.loc_no AS locNo,
+ m.bay1 AS bay1,
+ m.loc_sts AS locSts,
+ STUFF((
+ SELECT ',' + t.maktx
+ FROM (
+ SELECT DISTINCT LTRIM(RTRIM(ISNULL(d.maktx, ''))) AS maktx
+ FROM asr_loc_detl d
+ WHERE d.loc_no = m.loc_no
+ AND LTRIM(RTRIM(ISNULL(d.maktx, ''))) <> ''
+ ) t
+ FOR XML PATH(''), TYPE
+ ).value('.', 'nvarchar(max)'), 1, 1, '') AS maktx,
+ CASE WHEN m.loc_sts = 'D'
+ THEN NULLIF(LTRIM(RTRIM(ISNULL(m.barcode, ''))), '')
+ ELSE STUFF((
+ SELECT ',' + t.code
+ FROM (
+ SELECT DISTINCT LTRIM(RTRIM(ISNULL(d.barcode, ''))) AS code
+ FROM asr_loc_detl d
+ WHERE d.loc_no = m.loc_no
+ AND LTRIM(RTRIM(ISNULL(d.barcode, ''))) <> ''
+ AND NOT (LEN(LTRIM(RTRIM(ISNULL(d.barcode, '')))) = 6
+ AND LTRIM(RTRIM(d.barcode)) LIKE 'Z__-__')
+ ) t
+ FOR XML PATH(''), TYPE
+ ).value('.', 'nvarchar(max)'), 1, 1, '')
+ END AS itemBarcodes,
+ CASE WHEN m.loc_sts = 'D'
+ THEN NULL
+ ELSE STUFF((
+ SELECT ',' + t.code
+ FROM (
+ SELECT DISTINCT LTRIM(RTRIM(ISNULL(d.zpallet, ''))) AS code
+ FROM asr_loc_detl d
+ WHERE d.loc_no = m.loc_no
+ AND LTRIM(RTRIM(ISNULL(d.zpallet, ''))) <> ''
+ AND NOT (LEN(LTRIM(RTRIM(ISNULL(d.zpallet, '')))) = 6
+ AND LTRIM(RTRIM(d.zpallet)) LIKE 'Z__-__')
+ ) t
+ FOR XML PATH(''), TYPE
+ ).value('.', 'nvarchar(max)'), 1, 1, '')
+ END AS pltBarcodes
+ FROM asr_loc_mast m
+ WHERE m.row1 = #{row1}
+ AND m.lev1 = #{lev1}
+ ORDER BY m.bay1
+ </select>
+</mapper>
--
Gitblit v1.9.1