From 58eaf5e73359f7164525d9c50f6e5bf82b247e32 Mon Sep 17 00:00:00 2001 From: zc <zc@123> Date: 星期四, 24 四月 2025 09:10:58 +0800 Subject: [PATCH] 初步调试 --- src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java | 15 + src/main/java/com/zy/asrs/domain/dto/WorkChartAxis.java | 31 ++ src/main/java/com/zy/asrs/domain/dto/AxisBean.java | 24 ++ src/main/java/com/zy/asrs/domain/dto/LocChartPie.java | 37 +++ src/main/java/com/zy/asrs/controller/TVController.java | 419 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/zy/asrs/domain/dto/MatDto.java | 80 +++++++ 6 files changed, 606 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/TVController.java b/src/main/java/com/zy/asrs/controller/TVController.java new file mode 100644 index 0000000..889d1c7 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/TVController.java @@ -0,0 +1,419 @@ +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.dto.LocChartPie; +import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.entity.BasShuttle; +import com.zy.asrs.entity.BasShuttleErr; +import com.zy.asrs.entity.WrkMast; +import com.zy.asrs.mapper.ReportQueryMapper; +import com.zy.asrs.service.BasDevpService; +import com.zy.asrs.service.BasShuttleErrService; +import com.zy.asrs.service.BasShuttleService; +import com.zy.asrs.service.WrkMastService; +import com.zy.common.service.CommonService; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.ShuttleSlave; +import com.zy.core.model.command.LedCommand; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.properties.SlaveProperties; +import com.zy.core.thread.ShuttleThread; +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.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by vincent on 2020/11/16 + */ +@RestController +@RequestMapping("/monitor") +public class TVController { + + private static final String[] WEEK = {"鏄熸湡鏃�", "鏄熸湡涓�", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�"}; + + @Autowired + private ReportQueryMapper reportQueryMapper; + @Autowired + private BasDevpService basDevpService; + @Autowired + private WrkMastService wrkMastService; + + @Autowired + private BasShuttleService shuttleService; + @Autowired + private SlaveProperties slaveProperties; + @Autowired + private BasShuttleErrService basShuttleErrService; + + /** + * 鑾峰彇褰撳墠鏃堕棿 + */ + @GetMapping("/date") + public R monitorDate() { + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + return R.ok( + Cools.add("year", calendar.get(Calendar.YEAR)) + .add("month", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MONTH) + 1), 2)) + .add("day", CommonService.zerofill(String.valueOf(calendar.get(Calendar.DATE)), 2)) + .add("hour", CommonService.zerofill(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)), 2)) + .add("minute", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MINUTE)), 2)) + .add("second", CommonService.zerofill(String.valueOf(calendar.get(Calendar.SECOND)), 2)) + .add("week", WEEK[calendar.get(Calendar.DAY_OF_WEEK) - 1]) + ); + } + + /** + * 鑾峰彇鍏朵粬淇℃伅 + */ + @GetMapping("/other") + public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer sta) { + return R.ok( + Cools.add("xSpeed", Arith.multiplys(1, 0, 1)) // 琛岃蛋閫熷害 + .add("ySpeed", Arith.multiplys(1, 60, 1)) // 鍗囬檷閫熷害 + .add("zSpeed", Arith.multiplys(1, 30, 1)) // 鍙夌墮閫熷害 + .add("forkPos", 25) // 鍙夌墮閫熷害 + .add("xDistance", Arith.multiplys(1, 0, 1)) // 绱璧拌璺濈km + .add("yDistance", Arith.multiplys(1, 5, 1)) // 绱鍗囬檷璺濈km + .add("xDuration", Arith.multiplys(1, 0, 1)) // 绱璧拌鏃堕暱h + .add("yDuration", Arith.multiplys(1, 2, 1)) // 绱鍗囬檷鏃堕暱h + .add("isShow", !Cools.isEmpty(1)) // 鏄惁鏄剧ず鍐呭 + .add("content", 1) // 鏄剧ず鍐呭 + ); + } + + /** + * 鍏ュ簱鎶ヨ〃 -- 鎶樼嚎鍥� + */ + @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(); + 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) { +// BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", ledId)); +// if (Cools.isEmpty(basDevp)) { +// return R.ok(); +// } +// WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo())); +// if (Cools.isEmpty(wrkMast)) { +// return R.ok(); +// } +// List<LedCommand> commands = new ArrayList<>(); +// +// // 缁勮鍛戒护 +// LedCommand ledCommand = new LedCommand(); +// ledCommand.setWorkNo(wrkMast.getWrkNo()); +// ledCommand.setIoType(wrkMast.getIoType()); +// // 鍑哄簱妯″紡 +// switch (wrkMast.getIoType()) { +// case 1: +// ledCommand.setTitle("鍏ㄦ澘鍏ュ簱"); +// break; +// case 10: +// ledCommand.setTitle("绌烘澘鍏ュ簱"); +// break; +// case 101: +// ledCommand.setTitle("鍏ㄦ澘鍑哄簱"); +// break; +// case 103: +// ledCommand.setTitle("鎷f枡鍑哄簱"); +// break; +// case 104: +// ledCommand.setTitle("骞舵澘鍑哄簱"); +// break; +// case 107: +// ledCommand.setTitle("鐩樼偣鍑哄簱"); +// break; +// case 110: +// ledCommand.setTitle("绌烘澘鍑哄簱"); +// ledCommand.setEmptyMk(true); +// break; +// case 53: +// ledCommand.setTitle("鎷f枡鍏ュ簱"); +// break; +// case 57: +// ledCommand.setTitle("鐩樼偣鍏ュ簱"); +// break; +// case 54: +// ledCommand.setTitle("骞舵澘鍏ュ簱"); +// break; +// default: +// break; +// } +// ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); +// ledCommand.setLocNo(wrkMast.getLocNo()); +// ledCommand.setStaNo(wrkMast.getStaNo()); +//// ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); +// if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { +// List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); +// try { +// if (wrkMast.getIoType() > 100) { +// for (WrkDetl wrkDetl : wrkDetls) { +// LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo()); +// wrkDetl.setWeight(locDetl.getAnfme()); +// } +// } else { +// for (WrkDetl wrkDetl : wrkDetls) { +// wrkDetl.setWeight(wrkDetl.getAnfme()); +// } +// } +// } catch (Exception e) { +//// log.error("宸ヤ綔妗f鏄庣粏杈撳叆鐢佃鏈哄け璐�1锛氬紓甯镐俊鎭�==銆�"+e); +// } +// wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getWeight(), wrkDetl.getSpecs(), wrkDetl.getModel()))); +// } +// commands.add(ledCommand); +// return R.ok().add(commands); +// } + + /** + * 寮傚父閫氱煡 + */ + @GetMapping("/led/error") + public R monitorLedError(@RequestParam("ledId") Integer ledId) { + BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", ledId)); + if (Cools.isEmpty(basDevp)) { + return R.ok(); + } + if (Cools.isEmpty(basDevp.getArea())) { + return R.ok(); + } + if (basDevp.getLoading().equals("N")) { + basDevp.setArea(""); + basDevpService.updateById(basDevp); + return R.ok(); + } + String errorMsg = basDevp.getArea(); + + return R.ok().add(errorMsg); + } + + /** + * 璁惧寮傚父閫氱煡 + */ + @GetMapping("/device/error") + public R monitorDeviceError() { + ArrayList<HashMap<String, Object>> list = new ArrayList<>(); + List<BasShuttle> basCrnpLiset = shuttleService.selectList(new EntityWrapper<BasShuttle>()); + + for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { + // 鑾峰彇鍥涘悜绌挎杞︿俊鎭� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + continue; + } + HashMap<String, Object> map = new HashMap<>(); + int i = Integer.parseInt(shuttleProtocol.getErrorCode()); + if (i > 0) { + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(i); + String errName = basShuttleErr == null ? "鏈煡寮傚父" : basShuttleErr.getErrName(); + //鏁呴殰涓� + map.put("deviceNo", shuttleProtocol.getShuttleNo());//璁惧鍙�-灏忚溅鍙� + map.put("errorMsg", errName);//寮傚父淇℃伅 + map.put("device", "鍥涘悜杞�");//寮傚父淇℃伅 + list.add(map); + } + } + return R.ok().add(list); + } + + /** + * 鑷姩琛ラ浂 + */ + 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绫诲瀷"); + } + + } +} diff --git a/src/main/java/com/zy/asrs/domain/dto/AxisBean.java b/src/main/java/com/zy/asrs/domain/dto/AxisBean.java new file mode 100644 index 0000000..4b86146 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/dto/AxisBean.java @@ -0,0 +1,24 @@ +package com.zy.asrs.domain.dto; + +/** + * 鏇茬嚎鍥捐〃json閿� + * @author admin + * + */ +public class AxisBean { + private String name; + private Integer[] data; + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Integer[] getData() { + return data; + } + public void setData(Integer[] data) { + this.data = data; + } + +} diff --git a/src/main/java/com/zy/asrs/domain/dto/LocChartPie.java b/src/main/java/com/zy/asrs/domain/dto/LocChartPie.java new file mode 100644 index 0000000..36c3e0c --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/dto/LocChartPie.java @@ -0,0 +1,37 @@ +package com.zy.asrs.domain.dto; + +/** + * 搴撲綅鍗犵敤鐧惧垎姣� + * @author admin + * @date 2018骞�12鏈�12鏃� + */ +public class LocChartPie { + private int fqty; + private int oqty; + private int uqty; + private int xqty; + public int getFqty() { + return fqty; + } + public void setFqty(int fqty) { + this.fqty = fqty; + } + public int getOqty() { + return oqty; + } + public void setOqty(int oqty) { + this.oqty = oqty; + } + public int getUqty() { + return uqty; + } + public void setUqty(int uqty) { + this.uqty = uqty; + } + public int getXqty() { + return xqty; + } + public void setXqty(int xqty) { + this.xqty = xqty; + } +} \ No newline at end of file diff --git a/src/main/java/com/zy/asrs/domain/dto/MatDto.java b/src/main/java/com/zy/asrs/domain/dto/MatDto.java new file mode 100644 index 0000000..3b296e8 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/dto/MatDto.java @@ -0,0 +1,80 @@ +package com.zy.asrs.domain.dto; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/6 + */ +@Data +public class MatDto { + + // 鐗╂枡缂栧彿 + private String matnr; + + // 鐗╂枡鍚嶇О + private String maknx; + + private String batch; + + private String specs; + + // 瀹㈡埛淇℃伅 + private String manu; + + // 澶囨敞 + private String memo; + + // 鐗╂枡鏁伴噺 + private Double count; + + private Double total; + + private String orderNo; + + private String customer; + + public MatDto() { + } + public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) { + this.matnr = matnr; + this.maknx = maknx; + this.batch = batch; + this.specs = specs; + this.manu = manu; + this.memo = memo; + this.count = count; + this.total = total; + } + + public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total, String orderNo, String customer) { + this.matnr = matnr; + this.maknx = maknx; + this.batch = batch; + this.specs = specs; + this.manu = manu; + this.memo = memo; + this.count = count; + this.total = total; + this.orderNo = orderNo; + this.customer = customer; + } + + public MatDto(String matNo, String maknx, Double count) { + this.matnr = matNo; + this.maknx = maknx; + this.count = count; + } + public MatDto(String matNo, String maknx, Double count, String specs) { + this.specs = specs; + this.matnr = matNo; + this.maknx = maknx; + this.count = count; + } + public MatDto(String matNo, String maknx, Double count, Double total, String specs) { + this.specs = specs; + this.matnr = matNo; + this.maknx = maknx; + this.count = count; + this.total = total; + } +} diff --git a/src/main/java/com/zy/asrs/domain/dto/WorkChartAxis.java b/src/main/java/com/zy/asrs/domain/dto/WorkChartAxis.java new file mode 100644 index 0000000..cbb46b7 --- /dev/null +++ b/src/main/java/com/zy/asrs/domain/dto/WorkChartAxis.java @@ -0,0 +1,31 @@ +package com.zy.asrs.domain.dto; + +/** + * 鍏ュ嚭搴撶粺璁℃洸绾垮浘 + * @author admin + * @date 2018骞�12鏈�12鏃� + */ +public class WorkChartAxis { + private String ymd; + private int inqty; + private int outqty; + + public String getYmd() { + return ymd; + } + public void setYmd(String ymd) { + this.ymd = ymd; + } + public int getInqty() { + return inqty; + } + public void setInqty(int inqty) { + this.inqty = inqty; + } + public int getOutqty() { + return outqty; + } + public void setOutqty(int outqty) { + this.outqty = outqty; + } +} \ No newline at end of file diff --git a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java index 01bb6ae..b8650f1 100644 --- a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java +++ b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java @@ -1,5 +1,7 @@ package com.zy.asrs.mapper; +import com.zy.asrs.domain.dto.LocChartPie; +import com.zy.asrs.domain.dto.WorkChartAxis; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; @@ -10,6 +12,7 @@ @Mapper @Repository public interface ReportQueryMapper { + @Select("select \n" + "Min(wm.io_time) as node,\n" + "isnull(count(1), 0) as val\n" + @@ -20,4 +23,16 @@ "group by datediff(day,wm.io_time,getdate())\n" + "order by Min(wm.io_time) asc\n") List<Map<String, Object>> queryPakinRep(); + + //楗肩姸鍥� + @Select("select * from asr_loc_use_view") + public LocChartPie getLocUseRate(); + + + //鏇茬嚎鍥� + @Select("select ymd,SUM(sto_qty) inqty,SUM(ret_qty) outqty from asr_sta_inout_view " + + "where ymd>CONVERT(char(10), DATEADD(DAY,-12,GETDATE()), 120) group by ymd order by ymd") + public List<WorkChartAxis> getChartAxis(); + + } -- Gitblit v1.9.1