src/main/java/com/zy/asrs/controller/TVController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/domain/dto/AxisBean.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/RateLimit.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/bit.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/expr.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/flag.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/little.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/annotations/size.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/TVController.java
New file @@ -0,0 +1,278 @@ 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.model.annotations.RateLimit; import com.zy.common.properties.SlaveProperties; import com.zy.common.service.CommonService; 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 SlaveProperties slaveProperties; /** * 获取当前时间 */ @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) // 显示内容 ); } /** * 入库报表 -- 折线图 */ @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); } @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); } /** * 库位使用情况统计 */ @RateLimit(2) @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) { return R.ok(); } /** * 异常通知 */ @GetMapping("/led/error") public R monitorLedError(@RequestParam("ledId") Integer ledId) { return R.ok(); } /** * 自动补零 */ 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("找不到StatsType类型"); } } } src/main/java/com/zy/asrs/domain/dto/AxisBean.java
New file @@ -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; } } src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
@@ -1,83 +1,53 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.*; import com.zy.asrs.domain.dto.WorkChartAxis; import com.zy.asrs.domain.vo.LocChartPie; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; @Mapper @Repository public interface ReportQueryMapper { //分页查询库位使用率 List<ViewStockUseBean> queryViewStockUseList(ViewStockUseBean viewStockUse); int getViewStockUseCount(ViewStockUseBean viewStockUse); List<ViewStockUseBean> getViewStockUseAll(ViewStockUseBean viewStockUse); //分页查询库存滞留时间 public List<ViewStayTimeBean> queryViewStayTimeList(ViewStayTimeBean viewStayTime); public int getViewStayTimeCount(ViewStayTimeBean viewStayTime); //不分页查询所有信息,用于excel导出 public List<ViewStayTimeBean> getViewStayTimeAll(ViewStayTimeBean viewStayTime); // // 库位Map @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") public List<String> getViewLocLevCount(@Param("row1") int row1); // @Select("select loc_no as locNo, bay1,loc_sts as locSts from asr_loc_mast where row1=#{row1} and lev1=#{lev1} order by bay1") public List<ViewLocMapDto> getViewLocBays(@Param("row1") int row1, @Param("lev1") int lev1); // 库位Map @Select("select distinct bay1 from asr_loc_mast where row1=#{row1} order by bay1") public List<String> getViewLocBayCount(@Param("row1") int row1); @Select("select lev1,loc_sts as locSts from asr_loc_mast where row1=#{row1} and bay1=#{bay1} order by bay1") public List<ViewLocMapDto> getViewLocLevs(@Param("row1") int row1, @Param("bay1") int bay1); //分页查询站点入出库次数统计 public List<ViewInOutBean> queryViewInOutList(ViewInOutBean viewInOut); public int getViewInOutCount(ViewInOutBean viewInOut); //不分页查询所有信息,用于excel导出 public List<ViewInOutBean> getViewInOutAll(ViewInOutBean viewInOut); @Select("select \n" + "Min(wm.io_time) as node,\n" + "isnull(count(1), 0) as val\n" + "from asr_wrk_mast_log wm\n" + "where wm.wrk_sts = 5 \n" + "and (wm.io_type = 1 OR wm.io_type = 54)\n" + "and datediff(d, wm.io_time, getdate())<=7 \n" + "group by datediff(day,wm.io_time,getdate())\n" + "order by Min(wm.io_time) asc\n") List<Map<String, Object>> queryPakinRep(); //分页查询日入库记录 public List<ViewWorkInBean> queryViewWorkInList(ViewWorkInBean viewWorkIn); public int getViewWorkInCount(ViewWorkInBean viewWorkIn); //不分页查询所有信息,用于excel导出 public List<ViewWorkInBean> getViewWorkInAll(ViewWorkInBean viewWorkIn); @Select("select\n" + "Min(wm.io_time) as node,\n" + "isnull(count(1), 0) as val\n" + "from asr_wrk_mast_log wm\n" + "where 1=1\n" + "and ((wm.wrk_sts = 15 AND wm.io_type = 101) OR (wm.wrk_sts = 14 AND wm.io_type = 103))\n" + "and datediff(d, wm.io_time, getdate())<=7\n" + "group by datediff(day,wm.io_time,getdate())\n" + "order by Min(wm.io_time) asc") List<Map<String, Object>> queryPakOutRep(); //分页查询日出库记录 public List<ViewWorkInBean> queryViewWorkOutList(ViewWorkInBean viewWorkOut); public int getViewWorkOutCount(ViewWorkInBean viewWorkOut); //不分页查询所有信息,用于excel导出 public List<ViewWorkInBean> getViewWorkOutAll(ViewWorkInBean viewWorkOut); //曲线图 @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(); @Select("select * from asr_loc_use_view") LocChartPie getLocUseRate(); // ------图表 //饼状图 @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(); @Select("select count(1) as totalWrk from asr_wrk_mast_log where crn_no = #{crnNo}") Integer getTotalWrkByCrnId(Integer crnNo); List<ViewWorkCountInView> selectWorkCountIn(@Param("curr") Integer curr, @Param("limit") Integer limit, @Param("matnr")String matnr, @Param("start") String startTime, @Param("end") String endTime); @Select("select count(1) as totalLoc from asr_loc_mast") Integer getTotalLocByCrnId(); Integer selectWorkCountInTotal(String matnr, @Param("start") String startTime, @Param("end") String endTime); List<ViewWorkCountInView> selectWorkCountOut(@Param("curr") Integer pageNumber, @Param("limit") Integer pageSize, String matnr, @Param("start") String startTime, @Param("end") String endTime); Integer selectWorkCountOutTotal(String matnr, @Param("start") String startTime, @Param("end") String endTime); Integer selectWorkCountInSum(String matnr, @Param("start") String startTime, @Param("end") String endTime); Integer selectWorkCountOutSum(String matnr, @Param("start") String startTime, @Param("end") String endTime); } src/main/java/com/zy/common/model/annotations/RateLimit.java
New file @@ -0,0 +1,15 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //接口频率限制 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface RateLimit { int value();//接口频率 } src/main/java/com/zy/common/model/annotations/bit.java
New file @@ -0,0 +1,16 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标识注解类 * @author vincent */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) public @interface bit { int value(); } src/main/java/com/zy/common/model/annotations/expr.java
New file @@ -0,0 +1,16 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标识注解类 * @author vincent */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) public @interface expr { String value(); } src/main/java/com/zy/common/model/annotations/flag.java
New file @@ -0,0 +1,16 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标识注解类 * @author vincent */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) public @interface flag { String value(); } src/main/java/com/zy/common/model/annotations/little.java
New file @@ -0,0 +1,14 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 小端模式注解类 * @author vincent */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) public @interface little {} src/main/java/com/zy/common/model/annotations/size.java
New file @@ -0,0 +1,16 @@ package com.zy.common.model.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标识注解类 * @author vincent */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) public @interface size { int value(); }