From 6ba157825d34078a75fee36cb66ead17327f5b32 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期二, 29 四月 2025 14:32:55 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/controller/MonitorController.java | 411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 409 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/MonitorController.java b/src/main/java/com/zy/asrs/controller/MonitorController.java index f46ffea..84604dd 100644 --- a/src/main/java/com/zy/asrs/controller/MonitorController.java +++ b/src/main/java/com/zy/asrs/controller/MonitorController.java @@ -1,14 +1,29 @@ package com.zy.asrs.controller; +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.mapper.ReportQueryMapper; import com.zy.common.service.CommonService; +import com.zy.core.CrnThread; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.LedSlave; +import com.zy.core.model.command.LedCommand; +import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.properties.SlaveProperties; +import com.zy.core.thread.LedThread; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.Calendar; -import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.*; /** * Created by vincent on 2020/11/16 @@ -18,6 +33,11 @@ public class MonitorController { private static final String[] WEEK = {"鏄熸湡鏃�","鏄熸湡涓�","鏄熸湡浜�","鏄熸湡涓�","鏄熸湡鍥�","鏄熸湡浜�","鏄熸湡鍏�"}; + + @Autowired + private ReportQueryMapper reportQueryMapper; + @Autowired + private SlaveProperties slaveProperties; /** * 鑾峰彇褰撳墠鏃堕棿 @@ -38,6 +58,393 @@ ); } + /** + * 鑾峰彇鍏朵粬淇℃伅 + */ + @GetMapping("/other") + public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer sta) { + Integer ledId = 0; + for (LedSlave led : slaveProperties.getLed()) { + for (Integer staNo : led.getStaArr()) { + if (staNo.equals(sta)) { + ledId = led.getId(); + break; + } + } + } + + Double xSpeed = 0.0D; + Double ySpeed = 0.0D; + Double zSpeed = 0.0D; + Short forkPos = 1; + Double xDistance = 0.0D; + Double yDistance = 0.0D; + Double xDuration = 0.0D; + Double yDuration = 0.0D; + + if (null != crnId) { + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnId); + if (crnThread != null) { + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol != null) { + xSpeed = Double.valueOf(crnProtocol.getXSpeed()); + ySpeed = Double.valueOf(crnProtocol.getYSpeed()); + zSpeed = Double.valueOf(crnProtocol.getZSpeed()); + switch (crnProtocol.getForkPos()) { + case 0: + forkPos = 1; + break; + case 1: + forkPos = 2; + break; + case 2: + forkPos = 0; + break; + default: + forkPos = 1; + break; + } + xDistance = Double.valueOf(crnProtocol.getXDistance()); + yDistance = Double.valueOf(crnProtocol.getYDistance()); + xDuration = Double.valueOf(crnProtocol.getXDuration()); + yDuration = Double.valueOf(crnProtocol.getYDuration()); + } + } + } + + // 鑾峰彇杈撻�佺嚎plc绾跨▼ + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledId); + String ledContent = Cools.isEmpty(ledThread) ? "" : ledThread.getWorkNos().toString(); +// ledContent = "ask鐨勬ā鍧楄惃婊″ぇ绠椾簡钀ㄦ弧澶т簡\n 鏄獦澧冨埌鍩冨強鍡插鍡瞈n 钀ㄨ揪濮嗘墦寮�钀ㄦ弧澶у嚡鎾掗害褰撳姵钀ㄦ弧澶ц�佸笀"; + + return R.ok( + Cools.add("xSpeed", Arith.multiplys(1, Math.abs(xSpeed), 1)) // 琛岃蛋閫熷害 + .add("ySpeed", Arith.multiplys(1, Math.abs(ySpeed), 1)) // 鍗囬檷閫熷害 + .add("zSpeed", Arith.multiplys(1, Math.abs(zSpeed), 1)) // 鍙夌墮閫熷害 + .add("forkPos", forkPos) // 鍙夌墮閫熷害 + .add("xDistance", Arith.multiplys(1, Math.abs(xDistance), 1)) // 绱璧拌璺濈km + .add("yDistance", Arith.multiplys(1, Math.abs(yDistance), 1)) // 绱鍗囬檷璺濈km + .add("xDuration", Arith.multiplys(1, Math.abs(xDuration), 1)) // 绱璧拌鏃堕暱h + .add("yDuration", Arith.multiplys(1, Math.abs(yDuration), 1)) // 绱鍗囬檷鏃堕暱h + .add("isShow", !Cools.isEmpty(ledContent)) // 鏄惁鏄剧ず鍐呭 + .add("content", ledContent) // 鏄剧ず鍐呭 + ); + } + + /** + * 鍏ュ簱鎶ヨ〃 -- 鎶樼嚎鍥� + */ + @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); + } + + @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); + } + + + + + @GetMapping("/loc/rep") + public R monitorLocRep(){ + List<Map<String, Object>> pie = new ArrayList<>(); + + + LocChartPie locUseRate = reportQueryMapper.getLocUseRate(); + // 鎬诲簱浣嶆暟 + Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty()); + // 浣跨敤涓� + Integer used = locUseRate.getFqty() + locUseRate.getUqty(); + 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", 11200-used); + 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", locUseRate.getXqty()); + pie.add(map3); + } + + + // 搴撲綅浣跨敤鐜� + double usedDivides = Arith.divides(3, used, 11200); + double usedPr = Arith.multiplys(1, usedDivides, 100); + + return R.ok( + Cools.add("pie", pie) + .add("stockCunt", locUseRate.getFqty()) + .add("emptyCount", 11200-used) + .add("noneCount", locUseRate.getXqty()) + .add("total", 11200) + .add("used", used) + .add("usedPr", usedPr) + ); + } + + + /** + * 搴撲綅浣跨敤鎯呭喌缁熻 + */ +// @GetMapping("/loc/rep") +// public R monitorLocRep(){ +// List<Map<String, Object>> pie = new ArrayList<>(); +// +// LocChartPie locUseRate = reportQueryMapper.getLocUseRate(); +// 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", locUseRate.getXqty()); +// 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()) +// .add("emptyCount", locUseRate.getOqty()) +// .add("noneCount", locUseRate.getXqty()) +// .add("total", total) +// .add("used", used) +// .add("usedPr", usedPr) +// ); +// } + + /** + * 鑾峰彇鍏朵粬淇℃伅 + */ + @GetMapping("/led") + public R monitorLed(@RequestParam("ledId") Integer ledId) { + String ledContent = ""; + List<LedCommand> commandList = null; + for (LedSlave slave : slaveProperties.getLed()) { + if (slave.getStaArr().contains(ledId)) { + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId()); + if (null != ledThread) { + ledContent = ledThread.getStringBuffer().toString(); + commandList = ledThread.getCommandList(); + } + } + } + return R.ok().add(commandList); + } + + /** + * 寮傚父閫氱煡 + */ + @GetMapping("/led/error") + public R monitorLedError(@RequestParam("ledId") Integer ledId) { + String errorMsg = ""; + for (LedSlave slave : slaveProperties.getLed()) { + if (slave.getStaArr().contains(ledId)) { + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId()); + if (null != ledThread) { + errorMsg = ledThread.getErrorMsg().toString(); + } + } + } + return R.ok().add(errorMsg); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** + * 鑷姩琛ラ浂 + */ + private List<Map<String, Object>> fill(List<Map<String, Object>> list, int start, int end){ + for (int i = start ; i <= end; i++){ + boolean exist = false; + for (Map seq : list){ + if (Integer.parseInt(String.valueOf(seq.get("node"))) == i){ + exist = true; + } + } + if (!exist){ + HashMap<String, Object> map = new HashMap<>(); + map.put("node", i); + map.put("val", 0); + list.add(map); + } + } + list.sort(Comparator.comparingInt(o -> (int) o.get("node"))); + return list; + } + + /** + * x杞村崟浣嶈浆鎹� + * @param dot y杞存暟鍊间繚鐣欏皬鏁颁綅 + */ + private List<Map<String, Object>> convert(List<Map<String, Object>> list, StatsType statsType, int dot){ + for (Map<String, Object> map : list){ + Object val = map.get("val"); + map.put("val", Arith.multiplys(dot, 1, (Number) val)); + Object node = map.get("node"); + switch (statsType){ + case MONTH: + map.put("node", node + "鍙�"); + break; + case YEAR: + map.put("node", node + "鏈�"); + break; + default: + break; + } + } + return list; + } + + enum StatsType{ + + YEAR(1,1, 12), + MONTH(2,1, 30), + ; + + int id; + int start; + int end; + StatsType(int id, int start, int end) { + this.id = id; + this.start = start; + this.end = end; + } + + static StatsType get(int id) { + StatsType[] values = StatsType.values(); + for (StatsType statsType : values){ + if (statsType.id == id){ + return statsType; + } + } + throw new RuntimeException("鎵句笉鍒癝tatsType绫诲瀷"); + } + + } + + } -- Gitblit v1.9.1