Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
Conflicts:
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntkeCtrl.java
12个文件已添加
1 文件已重命名
26个文件已修改
| | |
| | | <artifactId>quartz</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- 获得系统信息 --> |
| | | <dependency> |
| | | <groupId>com.github.oshi</groupId> |
| | | <artifactId>oshi-core</artifactId> |
| | | <version>6.6.2</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna-platform</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | |
| | | <!-- Hutool是一个小而全的Java工具类库(https://github.com/dromara/hutool) --> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | |
| | | public static final String cd_95 = "95" ;//复位终端参数和状态(未实现) |
| | | public static final String cd_97 = "97" ;//APP远程开阀 |
| | | public static final String cd_98 = "98" ;//APP远程关阀 |
| | | public static final String cd_99 = "99" ;//定时关阀开阀 |
| | | public static final String cd_A0 = "A0" ;//定量关阀开阀 |
| | | public static final String cd_A1 = "A1" ;//定时关阀计划开阀 |
| | | public static final String cd_A2 = "A2" ;//定量关阀计划开阀 |
| | | public static final String cd_99 = "99" ;//定时关阀式开阀 |
| | | public static final String cd_A0 = "A0" ;//定量关阀式开阀 |
| | | public static final String cd_A1 = "A1" ;//定时关阀式计划开阀 |
| | | public static final String cd_A2 = "A2" ;//定量关阀式计划开阀 |
| | | public static final String cd_B0 = "B0" ;//查询实时数据(未实现) |
| | | public static final String cd_C0 = "C0" ;//遥测站整点上报实时数据 ok |
| | | |
| | |
| | | (code.equals(cd_95) ? "复位终端参数和状态" : |
| | | (code.equals(cd_97) ? "APP远程开阀" : |
| | | (code.equals(cd_98) ? "APP远程关阀" : |
| | | (code.equals(cd_99) ? "定时关阀开阀" : |
| | | (code.equals(cd_A0) ? "定量关阀开阀" : |
| | | (code.equals(cd_A1) ? "定时关阀计划开阀" : |
| | | (code.equals(cd_A2) ? "定量关阀计划开阀" : |
| | | (code.equals(cd_99) ? "定时关阀式开阀" : |
| | | (code.equals(cd_A0) ? "定量关阀式开阀" : |
| | | (code.equals(cd_A1) ? "定时关阀式计划开阀" : |
| | | (code.equals(cd_A2) ? "定量关阀式计划开阀" : |
| | | (code.equals(cd_B0) ? "查询实时数据" : |
| | | (code.equals(cd_C0) ? "自报(整点)实时数据" : |
| | | ""))))))))))))))))))))))))))))))))))))))))))) ; |
| | |
| | | |
| | | public String alarmContent(){ |
| | | String txt = "" ; |
| | | boolean hasTxt = false ; |
| | | if(batteryVolt != null && batteryVolt == 1){ |
| | | txt += "蓄电池电压报警" ; |
| | | txt += (hasTxt?"、":"") + "蓄电池电压报警" ; |
| | | hasTxt = true ; |
| | | } |
| | | if(meter != null && meter == 1){ |
| | | txt += ",流量计故障报警" ; |
| | | txt += (hasTxt?"、":"") + "流量计故障报警" ; |
| | | hasTxt = true ; |
| | | } |
| | | if(valve != null && valve == 1){ |
| | | txt += ",阀门故障报警" ; |
| | | txt += (hasTxt?"、":"") + "阀门故障报警" ; |
| | | hasTxt = true ; |
| | | } |
| | | if(loss != null && loss == 1){ |
| | | txt += ",漏损报警" ; |
| | | txt += (hasTxt?"、":"") + "漏损报警" ; |
| | | hasTxt = true ; |
| | | } |
| | | return txt ; |
| | | } |
| | |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 定时关阀开阀应答:\n"); |
| | | sb.append(" 定时关阀式开阀应答:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String comLog(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("定时关阀开阀命令回复:\n"); |
| | | sb.append("定时关阀式开阀命令回复:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 定量关阀开阀应答:\n"); |
| | | sb.append(" 定量关阀式开阀应答:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String comLog(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("定量关阀开阀命令回复:\n"); |
| | | sb.append("定量关阀式开阀命令回复:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 定时关阀开阀应答:\n"); |
| | | sb.append(" 定时关阀式开阀应答:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String comLog(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("定时关阀开阀命令回复:\n"); |
| | | sb.append("定时关阀式开阀命令回复:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 定量关阀开阀应答:\n"); |
| | | sb.append(" 定量关阀式开阀应答:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| | |
| | | |
| | | public String comLog(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("定量关阀开阀命令回复:\n"); |
| | | sb.append("定量关阀式开阀命令回复:\n"); |
| | | sb.append(" 虚拟卡号:"); |
| | | sb.append(cardNo); |
| | | sb.append("\n"); |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 13:58 |
| | | * @Description 精准的double计算 |
| | | */ |
| | | public class DoubleUtil { |
| | | /** 默认除法运算精度 */ |
| | | private static final int DEF_DIV_SCALE = 10; |
| | | |
| | | /** 这个类不能实例化 */ |
| | | private DoubleUtil() { |
| | | } |
| | | |
| | | /** |
| | | * 提供精确的加法运算。 |
| | | * @param v1 被加数 |
| | | * @param v2 加数 |
| | | * @return 两个参数的和 |
| | | */ |
| | | public static double add(double v1, double v2) { |
| | | BigDecimal b1 = new BigDecimal(Double.toString(v1)); |
| | | BigDecimal b2 = new BigDecimal(Double.toString(v2)); |
| | | return b1.add(b2).doubleValue(); |
| | | } |
| | | |
| | | /** |
| | | * 提供精确的减法运算。 |
| | | * @param v1 被减数 |
| | | * @param v2 减数 |
| | | * @return 两个参数的差 |
| | | */ |
| | | public static double sub(double v1, double v2) { |
| | | BigDecimal b1 = new BigDecimal(Double.toString(v1)); |
| | | BigDecimal b2 = new BigDecimal(Double.toString(v2)); |
| | | return b1.subtract(b2).doubleValue(); |
| | | } |
| | | |
| | | /** |
| | | * 提供精确的乘法运算。 |
| | | * @param v1 被乘数 |
| | | * @param v2 乘数 |
| | | * @return 两个参数的积 |
| | | */ |
| | | public static double mul(double v1, double v2) { |
| | | BigDecimal b1 = new BigDecimal(Double.toString(v1)); |
| | | BigDecimal b2 = new BigDecimal(Double.toString(v2)); |
| | | return b1.multiply(b2).doubleValue(); |
| | | } |
| | | |
| | | /** |
| | | * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 |
| | | * 小数点以后10位,以后的数字四舍五入。 |
| | | * @param v1 被除数 |
| | | * @param v2 除数 |
| | | * @return 两个参数的商 |
| | | */ |
| | | public static double div(double v1, double v2) |
| | | { |
| | | return div(v1, v2, DEF_DIV_SCALE); |
| | | } |
| | | |
| | | /** |
| | | * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 |
| | | * 定精度,以后的数字四舍五入。 |
| | | * @param v1 被除数 |
| | | * @param v2 除数 |
| | | * @param scale 表示表示需要精确到小数点以后几位。 |
| | | * @return 两个参数的商 |
| | | */ |
| | | public static double div(double v1, double v2, int scale) { |
| | | if (scale < 0) { |
| | | throw new IllegalArgumentException( |
| | | "The scale must be a positive integer or zero"); |
| | | } |
| | | BigDecimal b1 = new BigDecimal(Double.toString(v1)); |
| | | BigDecimal b2 = new BigDecimal(Double.toString(v2)); |
| | | if (b1.compareTo(BigDecimal.ZERO) == 0) { |
| | | return BigDecimal.ZERO.doubleValue(); |
| | | } |
| | | return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); |
| | | } |
| | | |
| | | /** |
| | | * 提供精确的小数位四舍五入处理。 |
| | | * @param v 需要四舍五入的数字 |
| | | * @param scale 小数点后保留几位 |
| | | * @return 四舍五入后的结果 |
| | | */ |
| | | public static double round(double v, int scale) { |
| | | if (scale < 0) { |
| | | throw new IllegalArgumentException( |
| | | "The scale must be a positive integer or zero"); |
| | | } |
| | | BigDecimal b = new BigDecimal(Double.toString(v)); |
| | | BigDecimal one = BigDecimal.ONE; |
| | | return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import jakarta.servlet.http.HttpServletRequest; |
| | | |
| | | import java.net.InetAddress; |
| | | import java.net.NetworkInterface; |
| | | import java.net.UnknownHostException; |
| | | import java.util.Enumeration; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * 获取IP方法 |
| | | * |
| | | * @author liurunyu |
| | | */ |
| | | public class IPUtils { |
| | | |
| | | /** |
| | | * 检查IP是否合法 |
| | | * |
| | | * @param ip |
| | | * @return |
| | | */ |
| | | public static boolean ipValid(String ip) { |
| | | String regex0 = "(2[0-4]\\d)" + "|(25[0-5])"; |
| | | String regex1 = "1\\d{2}"; |
| | | String regex2 = "[1-9]\\d"; |
| | | String regex3 = "\\d"; |
| | | String regex = "(" + regex0 + ")|(" + regex1 + ")|(" + regex2 + ")|(" + regex3 + ")"; |
| | | regex = "(" + regex + ").(" + regex + ").(" + regex + ").(" + regex + ")"; |
| | | Pattern p = Pattern.compile(regex); |
| | | Matcher m = p.matcher(ip); |
| | | return m.matches(); |
| | | } |
| | | |
| | | /** |
| | | * 获取本地ip 适合windows与linux |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getLocalIP() { |
| | | String localIP = "127.0.0.1"; |
| | | try { |
| | | Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); |
| | | while (netInterfaces.hasMoreElements()) { |
| | | NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement(); |
| | | InetAddress ip = ni.getInetAddresses().nextElement(); |
| | | if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { |
| | | localIP = ip.getHostAddress(); |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | try { |
| | | localIP = InetAddress.getLocalHost().getHostAddress(); |
| | | } catch (UnknownHostException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | return localIP; |
| | | } |
| | | /** |
| | | * 获取客户端IP |
| | | * |
| | | * @param request 请求对象 |
| | | * @return IP地址 |
| | | */ |
| | | public static String getClientIp(HttpServletRequest request) |
| | | { |
| | | if (request == null) |
| | | { |
| | | return "unknown"; |
| | | } |
| | | String ip = request.getHeader("x-forwarded-for"); |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) |
| | | { |
| | | ip = request.getHeader("Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) |
| | | { |
| | | ip = request.getHeader("X-Forwarded-For"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) |
| | | { |
| | | ip = request.getHeader("WL-Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) |
| | | { |
| | | ip = request.getHeader("X-Real-IP"); |
| | | } |
| | | |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) |
| | | { |
| | | ip = request.getRemoteAddr(); |
| | | } |
| | | |
| | | return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); |
| | | } |
| | | |
| | | /** |
| | | * 检查是否为内部IP地址 |
| | | * |
| | | * @param ip IP地址 |
| | | * @return 结果 |
| | | */ |
| | | public static boolean internalIp(String ip) |
| | | { |
| | | byte[] addr = textToNumericFormatV4(ip); |
| | | return internalIp(addr) || "127.0.0.1".equals(ip); |
| | | } |
| | | |
| | | /** |
| | | * 检查是否为内部IP地址 |
| | | * |
| | | * @param addr byte地址 |
| | | * @return 结果 |
| | | */ |
| | | private static boolean internalIp(byte[] addr) |
| | | { |
| | | if (addr == null || addr.length < 2) |
| | | { |
| | | return true; |
| | | } |
| | | final byte b0 = addr[0]; |
| | | final byte b1 = addr[1]; |
| | | // 10.x.x.x/8 |
| | | final byte SECTION_1 = 0x0A; |
| | | // 172.16.x.x/12 |
| | | final byte SECTION_2 = (byte) 0xAC; |
| | | final byte SECTION_3 = (byte) 0x10; |
| | | final byte SECTION_4 = (byte) 0x1F; |
| | | // 192.168.x.x/16 |
| | | final byte SECTION_5 = (byte) 0xC0; |
| | | final byte SECTION_6 = (byte) 0xA8; |
| | | switch (b0) |
| | | { |
| | | case SECTION_1: |
| | | return true; |
| | | case SECTION_2: |
| | | if (b1 >= SECTION_3 && b1 <= SECTION_4) |
| | | { |
| | | return true; |
| | | } |
| | | case SECTION_5: |
| | | switch (b1) |
| | | { |
| | | case SECTION_6: |
| | | return true; |
| | | } |
| | | default: |
| | | return false; |
| | | } |
| | | } |
| | | /** |
| | | * 把ip转化为整数 |
| | | * |
| | | * @param ip |
| | | * @return |
| | | */ |
| | | public static long translateIP2Int(String ip) { |
| | | String[] intArr = ip.split("\\."); |
| | | int[] ipInt = new int[intArr.length]; |
| | | for (int i = 0; i < intArr.length; i++) { |
| | | ipInt[i] = Integer.parseInt(intArr[i]) ; |
| | | } |
| | | return ipInt[0] * 256 * 256 * 256 + +ipInt[1] * 256 * 256 + ipInt[2] * 256 + ipInt[3]; |
| | | } |
| | | /** |
| | | * 将IPv4地址转换成字节 |
| | | * |
| | | * @param text IPv4地址 |
| | | * @return byte 字节 |
| | | */ |
| | | public static byte[] textToNumericFormatV4(String text) |
| | | { |
| | | if (text.length() == 0) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | byte[] bytes = new byte[4]; |
| | | String[] elements = text.split("\\.", -1); |
| | | try |
| | | { |
| | | long l; |
| | | int i; |
| | | switch (elements.length) |
| | | { |
| | | case 1: |
| | | l = Long.parseLong(elements[0]); |
| | | if ((l < 0L) || (l > 4294967295L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[0] = (byte) (int) (l >> 24 & 0xFF); |
| | | bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); |
| | | bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
| | | bytes[3] = (byte) (int) (l & 0xFF); |
| | | break; |
| | | case 2: |
| | | l = Integer.parseInt(elements[0]); |
| | | if ((l < 0L) || (l > 255L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[0] = (byte) (int) (l & 0xFF); |
| | | l = Integer.parseInt(elements[1]); |
| | | if ((l < 0L) || (l > 16777215L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[1] = (byte) (int) (l >> 16 & 0xFF); |
| | | bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); |
| | | bytes[3] = (byte) (int) (l & 0xFF); |
| | | break; |
| | | case 3: |
| | | for (i = 0; i < 2; ++i) |
| | | { |
| | | l = Integer.parseInt(elements[i]); |
| | | if ((l < 0L) || (l > 255L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[i] = (byte) (int) (l & 0xFF); |
| | | } |
| | | l = Integer.parseInt(elements[2]); |
| | | if ((l < 0L) || (l > 65535L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[2] = (byte) (int) (l >> 8 & 0xFF); |
| | | bytes[3] = (byte) (int) (l & 0xFF); |
| | | break; |
| | | case 4: |
| | | for (i = 0; i < 4; ++i) |
| | | { |
| | | l = Integer.parseInt(elements[i]); |
| | | if ((l < 0L) || (l > 255L)) |
| | | { |
| | | return null; |
| | | } |
| | | bytes[i] = (byte) (int) (l & 0xFF); |
| | | } |
| | | break; |
| | | default: |
| | | return null; |
| | | } |
| | | } |
| | | catch (NumberFormatException e) |
| | | { |
| | | return null; |
| | | } |
| | | return bytes; |
| | | } |
| | | |
| | | /** |
| | | * 获取IP地址 |
| | | * |
| | | * @return 本地IP地址 |
| | | */ |
| | | public static String getHostIp() |
| | | { |
| | | try |
| | | { |
| | | return InetAddress.getLocalHost().getHostAddress(); |
| | | } |
| | | catch (UnknownHostException e) |
| | | { |
| | | } |
| | | return "127.0.0.1"; |
| | | } |
| | | |
| | | /** |
| | | * 获取主机名 |
| | | * |
| | | * @return 本地主机名 |
| | | */ |
| | | public static String getHostName() |
| | | { |
| | | try |
| | | { |
| | | return InetAddress.getLocalHost().getHostName(); |
| | | } |
| | | catch (UnknownHostException e) |
| | | { |
| | | } |
| | | return "未知"; |
| | | } |
| | | |
| | | /** |
| | | * 从多级反向代理中获得第一个非unknown IP地址 |
| | | * |
| | | * @param ip 获得的IP地址 |
| | | * @return 第一个非unknown IP地址 |
| | | */ |
| | | public static String getMultistageReverseProxyIp(String ip) |
| | | { |
| | | // 多级反向代理检测 |
| | | if (ip != null && ip.indexOf(",") > 0) |
| | | { |
| | | final String[] ips = ip.trim().split(","); |
| | | for (String subIp : ips) |
| | | { |
| | | if (false == isUnknown(subIp)) |
| | | { |
| | | ip = subIp; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return ip; |
| | | } |
| | | |
| | | /** |
| | | * 检测给定字符串是否为未知,多用于检测HTTP请求相关 |
| | | * |
| | | * @param checkString 被检测的字符串 |
| | | * @return 是否未知 |
| | | */ |
| | | public static boolean isUnknown(String checkString) |
| | | { |
| | | return isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); |
| | | } |
| | | |
| | | private static boolean isBlank(final CharSequence cs) { |
| | | final int strLen = length(cs); |
| | | if (strLen == 0) { |
| | | return true; |
| | | } |
| | | for (int i = 0; i < strLen; i++) { |
| | | if (!Character.isWhitespace(cs.charAt(i))) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | public static int length(final CharSequence cs) { |
| | | return cs == null ? 0 : cs.length(); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | import oshi.hardware.CentralProcessor; |
| | | import oshi.util.Util; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 11:17 |
| | | * @Description |
| | | */ |
| | | public class SysCpuUtil { |
| | | |
| | | private static final int OSHI_WAIT_SECOND = 1000; |
| | | /** |
| | | * 得到CPU信息 |
| | | */ |
| | | public static CpuInfoVo info(CentralProcessor processor){ |
| | | /** |
| | | * 获取系统范围内的CPU负载计数器。返回一个包含八个元素的数组,表示在用户(0)、尼斯(1)、系统(2)、空闲(3)、 |
| | | * IOwait(4)、硬件中断(IRQ)(5)、软件中断/DPC(SoftIRQ))(6)或窃取(7)状态下花费的毫秒数。使用 |
| | | * {@link-shi.hardware.TickType#getIndex()}检索相应的索引。通过测量一个时间间 |
| | | * 隔内滴答声之间的差异,可以计算出该时间间隔内的CPU负载。 |
| | | * 在某些逻辑处理器数量可变的操作系统上,此阵列的大小可能会发生变化,并且可能与其他每处理器方法不一致。 |
| | | * 请注意,虽然滴答计数器以毫秒为单位,但它们可能会随着(依赖于平台的)时钟滴答声以更大的增量前进。例如,默认 |
| | | * 情况下,Windows时钟节拍为1/64秒(约15或16毫秒),Linux时钟节拍取决于分布和配置,但通常为1/100秒(10 |
| | | * 毫秒)。 |
| | | * Windows上没有Nice和IOWait信息,macOS上没有IOWait和IRQ信息,因此这些标记将始终为零。 |
| | | * 要使用此方法计算总空闲时间,请同时包括Idle和IOWait标记。同样,应将IRQ、SoftIRQ和Steal标记添加到系统值 |
| | | * 中以获得总和。系统计时还包括执行其他虚拟主机(窃取)的时间。 |
| | | * * |
| | | * @return一个由8个长值组成的数组,表示在User、Nice、System、Idle、IOwait、IRQ、SoftIRQ和Steal状态下花费的时间。 |
| | | */ |
| | | long[] prevTicks = processor.getSystemCpuLoadTicks(); |
| | | Util.sleep(OSHI_WAIT_SECOND); |
| | | long[] ticks = processor.getSystemCpuLoadTicks(); |
| | | long nice = ticks[1] - prevTicks[1]; |
| | | long irq = ticks[5] - prevTicks[5]; |
| | | long softIrq = ticks[6] - prevTicks[6]; |
| | | long steal = ticks[7] - prevTicks[7]; |
| | | long cSys = ticks[2] - prevTicks[2]; |
| | | long user = ticks[0] - prevTicks[0]; |
| | | long ioWait = ticks[4] - prevTicks[4]; |
| | | long idle = ticks[3] - prevTicks[3]; |
| | | |
| | | /* |
| | | long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; |
| | | long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; |
| | | long softIrq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; |
| | | long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; |
| | | long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; |
| | | long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; |
| | | long ioWait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; |
| | | long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; |
| | | */ |
| | | |
| | | long totalCpu = user + nice + cSys + idle + ioWait + irq + softIrq + steal; |
| | | |
| | | CpuInfoVo vo = new CpuInfoVo() ; |
| | | vo.cores = processor.getLogicalProcessorCount() ; |
| | | vo.totalRate = totalCpu ; |
| | | vo.sysRate = cSys ; |
| | | vo.userRate = user ; |
| | | vo.waitRate = ioWait ; |
| | | vo.freeRate = idle ; |
| | | return vo ; |
| | | } |
| | | |
| | | @Data |
| | | public static class CpuInfoVo{ |
| | | /** |
| | | * 核心数 |
| | | */ |
| | | public int cores; |
| | | /** |
| | | * CPU总的使用率 |
| | | */ |
| | | public double totalRate; |
| | | /** |
| | | * CPU系统使用率 |
| | | */ |
| | | public double sysRate; |
| | | /** |
| | | * CPU用户使用率 |
| | | */ |
| | | public double userRate; |
| | | /** |
| | | * CPU当前等待率 |
| | | */ |
| | | public double waitRate; |
| | | /** |
| | | * CPU当前空闲率 |
| | | */ |
| | | public double freeRate; |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" CPU信息:\n"); |
| | | sb.append(" 核心数:" + cores + "\n"); |
| | | sb.append(" CPU总的使用率:" + totalRate + "\n"); |
| | | sb.append(" CPU系统使用率:" + sysRate + "\n"); |
| | | sb.append(" CPU用户使用率:" + userRate + "\n"); |
| | | sb.append(" CPU当前等待率:" + waitRate + "\n"); |
| | | sb.append(" CPU当前空闲率:" + freeRate + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | import oshi.software.os.FileSystem; |
| | | import oshi.software.os.OSFileStore; |
| | | import oshi.software.os.OperatingSystem; |
| | | |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 13:54 |
| | | * @Description |
| | | */ |
| | | public class SysFileSysUtil { |
| | | /** |
| | | * 磁盘信息 |
| | | */ |
| | | public static LinkedList<SysFile> info(OperatingSystem os) { |
| | | LinkedList<SysFile> sysFiles = new LinkedList<SysFile>(); |
| | | FileSystem fileSystem = os.getFileSystem(); |
| | | List<OSFileStore> fsArray = fileSystem.getFileStores(); |
| | | for (OSFileStore fs : fsArray) { |
| | | long free = fs.getUsableSpace(); |
| | | long total = fs.getTotalSpace(); |
| | | long used = total - free; |
| | | SysFile sysFile = new SysFile(); |
| | | sysFile.setDirName(fs.getMount()); |
| | | sysFile.setSysTypeName(fs.getType()); |
| | | sysFile.setTypeName(fs.getName()); |
| | | sysFile.setTotal(convertFileSize(total)); |
| | | sysFile.setFree(convertFileSize(free)); |
| | | sysFile.setUsed(convertFileSize(used)); |
| | | sysFile.setUsage(DoubleUtil.mul(DoubleUtil.div(used, total, 4), 100)); |
| | | sysFiles.add(sysFile); |
| | | } |
| | | return sysFiles ; |
| | | } |
| | | |
| | | /** |
| | | * 字节转换 |
| | | * |
| | | * @param size 字节大小 |
| | | * @return 转换后值 |
| | | */ |
| | | public static String convertFileSize(long size) { |
| | | long kb = 1024; |
| | | long mb = kb * 1024; |
| | | long gb = mb * 1024; |
| | | if (size >= gb) { |
| | | return String.format("%.1f GB", (float) size / gb); |
| | | } else if (size >= mb) { |
| | | float f = (float) size / mb; |
| | | return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); |
| | | } else if (size >= kb) { |
| | | float f = (float) size / kb; |
| | | return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); |
| | | } else { |
| | | return String.format("%d B", size); |
| | | } |
| | | } |
| | | @Data |
| | | public static class SysFile{ |
| | | /** |
| | | * 盘符路径 |
| | | */ |
| | | public String dirName; |
| | | |
| | | /** |
| | | * 盘符类型 |
| | | */ |
| | | public String sysTypeName; |
| | | |
| | | /** |
| | | * 文件类型 |
| | | */ |
| | | public String typeName; |
| | | |
| | | /** |
| | | * 总大小 |
| | | */ |
| | | public String total; |
| | | |
| | | /** |
| | | * 剩余大小 |
| | | */ |
| | | public String free; |
| | | |
| | | /** |
| | | * 已经使用量 |
| | | */ |
| | | public String used; |
| | | |
| | | /** |
| | | * 资源的使用率 |
| | | */ |
| | | public double usage; |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 磁盘" + dirName + "\n"); |
| | | sb.append(" 盘符类型:" + sysTypeName + "\n"); |
| | | sb.append(" 文件类型:" + typeName + "\n"); |
| | | sb.append(" 总大小:" + total + "\n"); |
| | | sb.append(" 剩余大小:" + free + "\n"); |
| | | sb.append(" 已经使用量:" + used + "\n"); |
| | | sb.append(" 资源使用率:" + usage + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.net.UnknownHostException; |
| | | import java.text.DecimalFormat; |
| | | import java.util.Properties; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 13:52 |
| | | * @Description |
| | | */ |
| | | public class SysJvmUtil { |
| | | |
| | | /** |
| | | Java虚拟机信息 |
| | | */ |
| | | public static JvmInfoVo info() throws UnknownHostException { |
| | | JvmInfoVo vo = new JvmInfoVo() ; |
| | | Properties props = System.getProperties(); |
| | | vo.setTotal(toMbytes(Runtime.getRuntime().totalMemory())); |
| | | vo.setMax(toMbytes(Runtime.getRuntime().maxMemory())); |
| | | vo.setFree(toMbytes(Runtime.getRuntime().freeMemory())); |
| | | vo.setVersion(props.getProperty("java.version")); |
| | | vo.setHome(props.getProperty("java.home")); |
| | | return vo ; |
| | | } |
| | | |
| | | private static double toMbytes(double value){ |
| | | return value/1000000.0 ; |
| | | } |
| | | |
| | | @Data |
| | | public static class JvmInfoVo { |
| | | /** |
| | | 当前JVM占用的内存总数(M) |
| | | */ |
| | | public double total; |
| | | |
| | | /** |
| | | JVM最大可用内存总数(M) |
| | | */ |
| | | public double max; |
| | | |
| | | /** |
| | | JVM空闲内存(M) |
| | | */ |
| | | public double free; |
| | | |
| | | /** |
| | | JDK版本 |
| | | */ |
| | | public String version; |
| | | |
| | | /** |
| | | JDK路径 |
| | | */ |
| | | public String home; |
| | | |
| | | |
| | | public String toString(){ |
| | | DecimalFormat df = new DecimalFormat("#.####"); // 设定格式 |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" JVM信息:\n"); |
| | | sb.append(" JVM最大可用内存总数(M):" + df.format(max) + "\n"); |
| | | sb.append(" JVM占用的内存数(M):" + df.format(total) + "\n"); |
| | | sb.append(" JVM空闲内存数(M):" + df.format(free) + "\n"); |
| | | sb.append(" JDK版本:" + version + "\n"); |
| | | sb.append(" JDK路径:" + home + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | import oshi.hardware.GlobalMemory; |
| | | |
| | | import java.text.DecimalFormat; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 13:42 |
| | | * @Description |
| | | */ |
| | | public class SysMemoryUtil { |
| | | |
| | | /** |
| | | * 内存信息 |
| | | */ |
| | | public static MemInfoVo info(GlobalMemory memory) { |
| | | MemInfoVo vo = new MemInfoVo() ; |
| | | vo.setTotal(toGbytes(memory.getTotal())); |
| | | vo.setUsed(toGbytes(memory.getTotal() - memory.getAvailable())); |
| | | vo.setFree(toGbytes(memory.getAvailable())); |
| | | return vo ; |
| | | } |
| | | |
| | | private static double toGbytes(double value){ |
| | | return value/1000000000.0 ; |
| | | } |
| | | |
| | | @Data |
| | | public static class MemInfoVo { |
| | | /** |
| | | * 内存总量 |
| | | */ |
| | | public double total; |
| | | |
| | | /** |
| | | * 已用内存 |
| | | */ |
| | | public double used; |
| | | |
| | | /** |
| | | * 剩余内存 |
| | | */ |
| | | public double free; |
| | | |
| | | public String toString(){ |
| | | DecimalFormat df = new DecimalFormat("#.####"); // 设定格式 |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 内存信息:\n"); |
| | | sb.append(" 内存总量(G):" + df.format(total) + "\n"); |
| | | sb.append(" 已用内存(G):" + df.format(used) + "\n"); |
| | | sb.append(" 剩余内存(G):" + df.format(free) + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.Properties; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 13:46 |
| | | * @Description |
| | | */ |
| | | public class SysSysUtil { |
| | | |
| | | /** |
| | | * 设置服务器信息 |
| | | */ |
| | | public static SysInfoVo info() { |
| | | SysInfoVo vo = new SysInfoVo() ; |
| | | Properties props = System.getProperties(); |
| | | vo.setComputerName(IPUtils.getHostName()); |
| | | vo.setComputerIp(IPUtils.getHostIp()); |
| | | vo.setOsName(props.getProperty("os.name")); |
| | | vo.setOsArch(props.getProperty("os.arch")); |
| | | vo.setUserDir(props.getProperty("user.dir")); |
| | | return vo ; |
| | | } |
| | | |
| | | |
| | | @Data |
| | | public static class SysInfoVo{ |
| | | /** |
| | | * 服务器名称 |
| | | */ |
| | | public String computerName; |
| | | |
| | | /** |
| | | * 服务器Ip |
| | | */ |
| | | public String computerIp; |
| | | |
| | | /** |
| | | * 项目路径 |
| | | */ |
| | | public String userDir; |
| | | |
| | | /** |
| | | * 操作系统 |
| | | */ |
| | | public String osName; |
| | | |
| | | /** |
| | | * 系统架构 |
| | | */ |
| | | public String osArch; |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append(" 系统信息:\n"); |
| | | sb.append(" 主机名称:" + computerName + "\n"); |
| | | sb.append(" 主机IP:" + computerIp + "\n"); |
| | | sb.append(" 项目路径:" + userDir + "\n"); |
| | | sb.append(" 操作系统:" + osName + "\n"); |
| | | sb.append(" 系统架构:" + osArch + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dy.common.util; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import oshi.SystemInfo; |
| | | import oshi.hardware.HardwareAbstractionLayer; |
| | | |
| | | import java.util.LinkedList; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2024/8/2 15:37 |
| | | * @Description |
| | | */ |
| | | public class SysUtil { |
| | | |
| | | public static InfoVo info() throws Exception { |
| | | InfoVo vo = new InfoVo() ; |
| | | SystemInfo si = new SystemInfo(); |
| | | HardwareAbstractionLayer hal = si.getHardware(); |
| | | |
| | | vo.cpuInfoVo = SysCpuUtil.info(hal.getProcessor()); |
| | | |
| | | vo.memInfoVo = SysMemoryUtil.info(hal.getMemory()); |
| | | |
| | | vo.sysInfoVo = SysSysUtil.info(); |
| | | |
| | | vo.jvmInfoVo = SysJvmUtil.info(); |
| | | |
| | | vo.sysFiles = SysFileSysUtil.info(si.getOperatingSystem()); |
| | | |
| | | return vo ; |
| | | } |
| | | |
| | | @Data |
| | | public static class InfoVo { |
| | | public SysCpuUtil.CpuInfoVo cpuInfoVo ; |
| | | public SysJvmUtil.JvmInfoVo jvmInfoVo ; |
| | | public SysMemoryUtil.MemInfoVo memInfoVo ; |
| | | public LinkedList<SysFileSysUtil.SysFile> sysFiles ; |
| | | public SysSysUtil.SysInfoVo sysInfoVo ; |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("系统信息:\n"); |
| | | sb.append(" " + (cpuInfoVo != null?cpuInfoVo.toString():"") + "\n"); |
| | | sb.append(" " + (jvmInfoVo != null?jvmInfoVo.toString():"") + "\n"); |
| | | sb.append(" " + (memInfoVo != null?memInfoVo.toString():"") + "\n"); |
| | | if(sysFiles != null && sysFiles.size() > 0){ |
| | | for(SysFileSysUtil.SysFile f : sysFiles){ |
| | | sb.append(" " + f.toString() + "\n"); |
| | | } |
| | | } |
| | | sb.append(" " + (sysInfoVo != null?sysInfoVo.toString():"") + "\n"); |
| | | |
| | | return sb.toString() ; |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception{ |
| | | SysUtil.InfoVo vo = SysUtil.info() ; |
| | | System.out.println(vo.toString()); |
| | | } |
| | | } |
| | |
| | | <groupId>com.aliyun</groupId> |
| | | <artifactId>alibaba-dingtalk-service-sdk</artifactId> |
| | | <version>2.0.0</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>commons-logging</groupId> |
| | | <artifactId>commons-logging</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-codec</groupId> |
| | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.dy.pipIrrGlobal.pojoRm.RmOnHourReportHistory; |
| | | import com.dy.pipIrrGlobal.voRm.VoOnHour; |
| | | import com.dy.pipIrrGlobal.voSt.VoCumulativeFlow; |
| | | import com.dy.pipIrrGlobal.voSt.VoIntake; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | |
| | | */ |
| | | List<VoIntake> getNotOnlineIntakes(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量超过指定值的取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getLargeFlowIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量超过指定值的取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoCumulativeFlow> getLargeFlowIntakes(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量低于指定值的取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getSmallFlowIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量低于指定值的取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoCumulativeFlow> getSmallFlowIntakes(Map<?, ?> params); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.dy.pipIrrGlobal.pojoRm.RmOnHourReportLast; |
| | | import com.dy.pipIrrGlobal.voRm.VoOnHour; |
| | | import com.dy.pipIrrGlobal.voSt.VoBatteryVolt; |
| | | import com.dy.pipIrrGlobal.voSt.VoCumulativeFlow; |
| | | import com.dy.pipIrrGlobal.voSt.VoSignalIntensity; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | |
| | | * @return |
| | | */ |
| | | List<VoOnHour> getOnHourReports_last(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量超过指定值的取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getLargeFlowIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量超过指定值的取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoCumulativeFlow> getLargeFlowIntakes(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量低于指定值的取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getSmallFlowIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取累计流量低于指定值的取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoCumulativeFlow> getSmallFlowIntakes(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取欠压取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getUnderVoltIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取欠压取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoBatteryVolt> getUnderVoltIntakes(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取指定信号强度的取水口数量 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | Long getSpecifiedSignalIntakesCount(Map<?, ?> params); |
| | | |
| | | /** |
| | | * 获取指定信号强度的取水口 |
| | | * @param params |
| | | * @return |
| | | */ |
| | | List<VoSignalIntensity> getSpecifiedSignalIntakes(Map<?, ?> params); |
| | | } |
| | |
| | | package com.dy.pipIrrGlobal.voPr; |
| | | |
| | | import com.alibaba.excel.annotation.write.style.ColumnWidth; |
| | | import com.dy.common.po.BaseEntity; |
| | | import lombok.Data; |
| | | |
| | |
| | | private String intakeNum; |
| | | |
| | | /** |
| | | * 取水口经度 |
| | | */ |
| | | private Double lng; |
| | | |
| | | /** |
| | | * 取水口纬度 |
| | | */ |
| | | private Double lat; |
| | | |
| | | /** |
| | | * 累计流量 |
| | | */ |
| | | private Double totalAmount; |
| | | |
| | | /** |
| | | * 是否在线 |
| | | */ |
| | | private Boolean isOnLine; |
| | |
| | | * 是否绑定 |
| | | */ |
| | | private Boolean isBinded; |
| | | |
| | | |
| | | /** |
| | | * 报警信息Json数组 |
| | | */ |
| | | private String alarm; |
| | | } |
| New file |
| | |
| | | package com.dy.pipIrrGlobal.voSt; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author ZhuBaoMin |
| | | * @date 2024-08-03 10:10 |
| | | * @LastEditTime 2024-08-03 10:10 |
| | | * @Description 电池电压视图 |
| | | */ |
| | | |
| | | @Data |
| | | public class VoBatteryVolt extends VoIntake { |
| | | |
| | | /** |
| | | * 电池电压 |
| | | */ |
| | | private Double batteryVolt; |
| | | |
| | | /** |
| | | * 数据获取日期 |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date getDate; |
| | | } |
| | |
| | | /** |
| | | * 累计流量 |
| | | */ |
| | | private Float cumulativeFlow; |
| | | private Double cumulativeFlow; |
| | | |
| | | /** |
| | | * 数据获取日期 |
| New file |
| | |
| | | package com.dy.pipIrrGlobal.voSt; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author ZhuBaoMin |
| | | * @date 2024-08-05 8:39 |
| | | * @LastEditTime 2024-08-05 8:39 |
| | | * @Description 信号强度视图 |
| | | */ |
| | | |
| | | @Data |
| | | public class VoSignalIntensity extends VoIntake { |
| | | /** |
| | | * 信号强度 |
| | | */ |
| | | private Integer signValue; |
| | | |
| | | /** |
| | | * 数据获取日期 |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date getDate; |
| | | } |
| | |
| | | |
| | | pipIrr: |
| | | global: |
| | | dev: true #是否开发阶段,true或false |
| | | dev: flase #是否开发阶段,true或false |
| | | dsName: ym #开发阶段,设置临时的数据库名称 |
| | | mw: |
| | | webPort: 8070 |
| | |
| | | secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7 |
| | | at-all: true |
| | | mobile: 18602657034 |
| | | |
| | | #阀控器参数 |
| | | rtu: |
| | | batteryVolt: 17 |
| | | signalIntensity: |
| | | weak: 10 |
| | | ordinary: 20 |
| | | # strong: 20 |
| | |
| | | </resultMap> |
| | | <sql id="Base_Column_List"> |
| | | <!--@mbg.generated--> |
| | | id, countyId, townId, villageId, divideId, blockId, `name`, lng, lat, remarks, `operator`, |
| | | operateDt, deleted |
| | | id, |
| | | countyId, |
| | | townId, |
| | | villageId, |
| | | divideId, |
| | | blockId, |
| | | `name`, |
| | | lng, |
| | | lat, |
| | | remarks, |
| | | `operator`, |
| | | operateDt, |
| | | deleted |
| | | </sql> |
| | | <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> |
| | | <!--@mbg.generated--> |
| | | select |
| | | <include refid="Base_Column_List" /> |
| | | from pr_intake |
| | | where id = #{id,jdbcType=BIGINT} and deleted = 0 |
| | | where id = #{id,jdbcType=BIGINT} |
| | | and deleted = 0 |
| | | </select> |
| | | |
| | | <delete id="deleteLogicById" parameterType="java.lang.Long"> |
| | |
| | | </select> |
| | | <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> |
| | | <!--@mbg.generated--> |
| | | delete from pr_intake |
| | | delete |
| | | from pr_intake |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </delete> |
| | | <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> |
| | |
| | | insert into pr_intake (id, countyId, townId, |
| | | villageId, divideId, blockId, |
| | | `name`, lng, lat, remarks, |
| | | `operator`, operateDt, deleted |
| | | ) |
| | | `operator`, operateDt, deleted) |
| | | values (#{id,jdbcType=BIGINT}, #{countyId,jdbcType=BIGINT}, #{townId,jdbcType=BIGINT}, |
| | | #{villageId,jdbcType=BIGINT}, #{divideId,jdbcType=BIGINT}, #{blockId,jdbcType=BIGINT}, |
| | | #{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remarks,jdbcType=VARCHAR}, |
| | | #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT} |
| | | ) |
| | | #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT}) |
| | | </insert> |
| | | <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> |
| | | <!--@mbg.generated--> |
| | |
| | | AND ge.id IN(SELECT intakeId FROM pr_controller where deleted = 0) |
| | | </if> |
| | | <if test="isBinded == null"> |
| | | |
| | | </if> |
| | | <if test="address != null and address != ''"> |
| | | AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') |
| | |
| | | |
| | | <!--根据指定条件获取取水口记录--> |
| | | <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake"> |
| | | SELECT |
| | | CAST(ge.id AS char) AS intakeId, |
| | | SELECT CAST(ge.id AS char) AS intakeId, |
| | | ge.`name` AS intakeName, |
| | | CAST(divi.id AS char) AS divideId, |
| | | divi.`name` AS divideName, |
| | |
| | | ge.operator, |
| | | ge.operateDt As operateDt, |
| | | (CASE |
| | | WHEN ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0) THEN "未绑定" |
| | | WHEN ge.id IN(SELECT intakeId FROM pr_controller where deleted = 0) THEN "已绑定" |
| | | WHEN ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '未绑定' |
| | | WHEN ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '已绑定' |
| | | END) AS isBind, |
| | | CONCAT(country.`name`, town.`name`, village.`name`) AS address |
| | | FROM pr_intake ge |
| | |
| | | AND ge.id IN(SELECT intakeId FROM pr_controller where deleted = 0) |
| | | </if> |
| | | <if test="isBinded == null"> |
| | | |
| | | </if> |
| | | <if test="address != null and address != ''"> |
| | | AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') |
| | | </if> |
| | | </where> |
| | | ORDER BY ge.operateDt DESC |
| | | <if test="pageCurr != null and pageSize != null"> |
| | | LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--根据下级获取上一级地址--> |
| | |
| | | |
| | | <!--根据取水口编号获取未删除的取水口数量--> |
| | | <select id="getRecordCountOfIntake" resultType="java.lang.Integer"> |
| | | SELECT COUNT(*) AS recordCount FROM pr_intake WHERE deleted = 0 AND id = ${intakeId} |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake |
| | | WHERE deleted = 0 |
| | | AND id = #{intakeId} |
| | | </select> |
| | | |
| | | <!--根据村ID获取全部地址--> |
| | | <select id="getAddressByVillageId" parameterType="_long" resultType="java.lang.String"> |
| | | select |
| | | CONCAT(dis_province.`name`, dis_city.`name`, dis_county.`name`, dis_town.`name`, dis_village.`name`) AS address |
| | | select CONCAT(dis_province.`name`, dis_city.`name`, dis_county.`name`, dis_town.`name`, |
| | | dis_village.`name`) AS address |
| | | from ba_district dis_village |
| | | inner join ba_district dis_town on dis_village.supperId = dis_town.id |
| | | inner join ba_district dis_county on dis_town.supperId = dis_county.id |
| | |
| | | |
| | | <!--根据区域Id获取区域等级--> |
| | | <select id="getLevelByRegionId" parameterType="_long" resultType="java.lang.Integer"> |
| | | select |
| | | region.level |
| | | select region.level |
| | | from ba_district region |
| | | where region.id = #{regionId,jdbcType=BIGINT} |
| | | </select> |
| | | |
| | | <!--获取未绑控制器的取水口列表--> |
| | | <select id="getNoBindingIntakes" resultType="java.util.HashMap"> |
| | | SELECT |
| | | CAST(inta.id AS char)AS intakeId, |
| | | SELECT CAST(inta.id AS char) AS intakeId, |
| | | name AS intakeName |
| | | FROM pr_intake inta |
| | | WHERE id NOT IN(SELECT intakeId FROM pr_controller) AND deleted = 0 |
| | | WHERE id NOT IN (SELECT intakeId FROM pr_controller) |
| | | AND deleted = 0 |
| | | </select> |
| | | |
| | | <!--获取取水口数量(在线和不在先)--> |
| | | <select id="getOnLineIntakesCount" resultType="java.lang.Long"> |
| | | SELECT |
| | | COUNT(*) AS recordCount |
| | | FROM pr_controller con |
| | | INNER JOIN pr_intake inta ON con.intakeId = inta.id |
| | | left JOIN JSON_TABLE( |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | LEFT JOIN pr_controller con ON con.intakeId = inta.id |
| | | LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | LEFT JOIN( |
| | | SELECT intake_id AS intakeId, |
| | | CONCAT( |
| | | IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '流量计故障,', ''), |
| | | IF(alarm_water_meter_fault = 1, '流量计故障', '')), |
| | | IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''), |
| | | IF(alarm_loss = 1, '漏损(偷水)报警', '')), |
| | | IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''), |
| | | IF(alarm_battery_volt = 1, '蓄电池电压报警', '')), |
| | | IF(alarm_valve = 1, '阀门报警', '') |
| | | ) AS alarm |
| | | FROM rm_alarm_state_last |
| | | WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) |
| | | AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) |
| | | ) alarm ON alarm.intakeId = inta.id |
| | | LEFT JOIN JSON_TABLE( |
| | | <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> |
| | | #{onLineMap}, |
| | | '$[*]' COLUMNS( |
| | |
| | | <if test="intakeNum != null and intakeNum != ''"> |
| | | AND inta.name = #{intakeNum} |
| | | </if> |
| | | <if test="isBinded == 0"> |
| | | AND inta.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0) |
| | | <if test="isBinded == false"> |
| | | AND con.rtuAddr IS NULL |
| | | </if> |
| | | <if test="isBinded == 1"> |
| | | AND inta.id IN(SELECT intakeId FROM pr_controller where deleted = 0) |
| | | <if test="isBinded == true"> |
| | | AND con.rtuAddr IS NOT NULL |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | <!--获取取水口列表(在线和不在先)--> |
| | | <select id="getOnLineIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> |
| | | SELECT |
| | | inta.id AS intakeId, |
| | | SELECT inta.id AS intakeId, |
| | | con.rtuAddr, |
| | | inta.name AS intakeNum, |
| | | inta.lng, |
| | | inta.lat, |
| | | IFNULL(hou.total_amount, 0) AS totalAmount, |
| | | (CASE |
| | | WHEN con.rtuAddr IS NULL THEN "false" |
| | | WHEN con.rtuAddr IS NOT NULL THEN "true" |
| | | WHEN con.rtuAddr IS NULL THEN false |
| | | WHEN con.rtuAddr IS NOT NULL THEN true |
| | | END) AS isBinded, |
| | | rtus.isOnLine |
| | | rtus.isOnLine, |
| | | alarm.alarm |
| | | FROM pr_intake inta |
| | | LEFT JOIN pr_controller con ON con.intakeId = inta.id |
| | | LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | LEFT JOIN( |
| | | SELECT intake_id AS intakeId, |
| | | CONCAT( |
| | | IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '流量计故障,', ''), |
| | | IF(alarm_water_meter_fault = 1, '流量计故障', '')), |
| | | IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''), |
| | | IF(alarm_loss = 1, '漏损(偷水)报警', '')), |
| | | IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''), |
| | | IF(alarm_battery_volt = 1, '蓄电池电压报警', '')), |
| | | IF(alarm_valve = 1, '阀门报警', '') |
| | | ) AS alarm |
| | | FROM rm_alarm_state_last |
| | | WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) |
| | | AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) |
| | | ) alarm ON alarm.intakeId = inta.id |
| | | LEFT JOIN JSON_TABLE( |
| | | <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> |
| | | #{onLineMap}, |
| | |
| | | </if> |
| | | </where> |
| | | order by con.id ASC |
| | | <if test="pageCurr != null and pageSize != null"> |
| | | LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--根据取水口编号获取取水口对象--> |
| | | <select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> |
| | | SELECT |
| | | con.intakeId, |
| | | SELECT con.intakeId, |
| | | con.rtuAddr, |
| | | inta.name AS intakeNum, |
| | | rtus.isOnLine |
| | |
| | | </if> |
| | | </where> |
| | | LIMIT 0,1 |
| | | |
| | | </select> |
| | | |
| | | <!--根据操作员获取常用取水口--> |
| | | <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> |
| | | SELECT |
| | | DISTINCT con.intakeId, |
| | | SELECT DISTINCT con.intakeId, |
| | | con.rtuAddr, |
| | | inta.name AS intakeNum, |
| | | rtus.isOnLine |
| | |
| | | |
| | | <!--取水口名称换取水口ID,扫码开阀使用--> |
| | | <select id="getIntakeIdByName" resultType="java.lang.Long"> |
| | | SELECT id AS intakeId FROM pr_intake WHERE `name` = #{intakeName} |
| | | SELECT id AS intakeId |
| | | FROM pr_intake |
| | | WHERE `name` = #{intakeName} |
| | | </select> |
| | | |
| | | <!--取水口名称换取水口ID,验证是否重复名称使用--> |
| | | <select id="getIntakeIdsByName" resultType="java.lang.Long"> |
| | | SELECT id AS intakeId FROM pr_intake WHERE `name` = #{intakeName} |
| | | SELECT id AS intakeId |
| | | FROM pr_intake |
| | | WHERE `name` = #{intakeName} |
| | | </select> |
| | | |
| | | <!--取水口名称换取水口ID,验证是否重复名称使用--> |
| | | <select id="getIntakeIdByNameExcludeId" resultType="java.lang.Long"> |
| | | SELECT id AS intakeId FROM pr_intake WHERE id != #{id} and `name` = #{intakeName} |
| | | SELECT id AS intakeId |
| | | FROM pr_intake |
| | | WHERE id != #{id} |
| | | and `name` = #{intakeName} |
| | | </select> |
| | | |
| | | |
| | | |
| | | </mapper> |
| | |
| | | LEFT JOIN se_client cli ON cli.id = his.operator |
| | | LEFT JOIN ba_user user ON user.id = his.operator |
| | | <where> |
| | | <if test="intakeId != null"> |
| | | AND his.intake_id = #{intakeId} |
| | | </if> |
| | | <if test = "commandName != null and commandName !=''"> |
| | | AND his.command_name LIKE CONCAT('%',#{commandName},'%') |
| | | </if> |
| | |
| | | LEFT JOIN se_client cli ON cli.id = his.operator |
| | | LEFT JOIN ba_user user ON user.id = his.operator |
| | | <where> |
| | | <if test="intakeId != null"> |
| | | AND his.intake_id = #{intakeId} |
| | | </if> |
| | | <if test = "commandName != null and commandName !=''"> |
| | | AND his.command_name LIKE CONCAT('%',#{commandName},'%') |
| | | </if> |
| | |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取累计流量超过指定值的取水口数量--> |
| | | <select id="getLargeFlowIntakesCount" resultType="java.lang.Long"> |
| | | SELECT |
| | | COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 AND hou.total_amount > #{totalAmount} |
| | | </select> |
| | | |
| | | <!--获取累计流量超过指定值的取水口--> |
| | | <select id="getLargeFlowIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoCumulativeFlow"> |
| | | SELECT |
| | | inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | CAST(hou.total_amount AS DECIMAL(10, 2)) AS cumulativeFlow, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 AND hou.total_amount > #{totalAmount} |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit " > |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取累计流量低于指定值的取水口数量--> |
| | | <select id="getSmallFlowIntakesCount" resultType="java.lang.Long"> |
| | | SELECT |
| | | COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 AND hou.total_amount < #{totalAmount} |
| | | </select> |
| | | |
| | | <!--获取累计流量低于指定值的取水口--> |
| | | <select id="getSmallFlowIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoCumulativeFlow"> |
| | | SELECT |
| | | inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | <!-- FORMAT(hou.total_amount,2) AS cumulativeFlow,--> |
| | | CAST(hou.total_amount AS DECIMAL(10, 2)) AS cumulativeFlow, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 AND hou.total_amount < #{totalAmount} |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit " > |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | </mapper> |
| | |
| | | </resultMap> |
| | | <sql id="Base_Column_List"> |
| | | <!--@mbg.generated--> |
| | | id, controller_id, intake_id, rtu_addr, dt, rtu_dt, instant_amount, total_amount, |
| | | loss_amount, water_press, battery_volt, signal_value, water_price |
| | | id, |
| | | controller_id, |
| | | intake_id, |
| | | rtu_addr, |
| | | dt, |
| | | rtu_dt, |
| | | instant_amount, |
| | | total_amount, |
| | | loss_amount, |
| | | water_press, |
| | | battery_volt, |
| | | signal_value, |
| | | water_price |
| | | </sql> |
| | | <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> |
| | | <!--@mbg.generated--> |
| | |
| | | </select> |
| | | <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> |
| | | <!--@mbg.generated--> |
| | | delete from rm_on_hour_report_last |
| | | delete |
| | | from rm_on_hour_report_last |
| | | where id = #{id,jdbcType=BIGINT} |
| | | </delete> |
| | | <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOnHourReportLast"> |
| | |
| | | |
| | | <!--根据指定条件获取整点报最新记录数量--> |
| | | <select id="getOnHourReportsCount_last" resultType="java.lang.Long"> |
| | | SELECT |
| | | COUNT(*) AS recordCount |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM rm_on_hour_report_last oh |
| | | INNER JOIN pr_intake inta ON inta.id = oh.intake_id |
| | | <where> |
| | |
| | | |
| | | <!--根据指定条件获取整点报最新记录--> |
| | | <select id="getOnHourReports_last" resultType="com.dy.pipIrrGlobal.voRm.VoOnHour"> |
| | | SELECT |
| | | oh.intake_id AS intakeId, |
| | | SELECT oh.intake_id AS intakeId, |
| | | inta.`name` AS intakeNum, |
| | | oh.rtu_addr AS rtuAddr, |
| | | oh.dt AS receiveTime, |
| | |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取累计流量超过指定值的取水口数量--> |
| | | <select id="getLargeFlowIntakesCount" resultType="java.lang.Long"> |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.total_amount > #{totalAmount} |
| | | </select> |
| | | |
| | | <!--获取累计流量超过指定值的取水口--> |
| | | <select id="getLargeFlowIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoCumulativeFlow"> |
| | | SELECT inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | CAST(hou.total_amount AS DECIMAL(10, 2)) AS cumulativeFlow, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.total_amount > #{totalAmount} |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取累计流量低于指定值的取水口数量--> |
| | | <select id="getSmallFlowIntakesCount" resultType="java.lang.Long"> |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.total_amount < #{totalAmount} |
| | | </select> |
| | | |
| | | <!--获取累计流量低于指定值的取水口--> |
| | | <select id="getSmallFlowIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoCumulativeFlow"> |
| | | SELECT inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | <!-- FORMAT(hou.total_amount,2) AS cumulativeFlow,--> |
| | | CAST(hou.total_amount AS DECIMAL(10, 2)) AS cumulativeFlow, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.total_amount < #{totalAmount} |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取欠压取水口数量--> |
| | | <select id="getUnderVoltIntakesCount" resultType="java.lang.Long"> |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.battery_volt < #{batteryVolt} |
| | | </select> |
| | | |
| | | <!--获取欠压取水口--> |
| | | <select id="getUnderVoltIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoBatteryVolt"> |
| | | SELECT inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | hou.battery_volt AS batteryVolt, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | WHERE inta.deleted = 0 |
| | | AND hou.battery_volt < #{batteryVolt} |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | |
| | | <!--获取指定信号强度的取水口数量--> |
| | | <select id="getSpecifiedSignalIntakesCount" resultType="java.lang.Long"> |
| | | SELECT COUNT(*) AS recordCount |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | <where> |
| | | AND inta.deleted = 0 |
| | | <if test="signalIntensity != null and signalIntensity == 1"> |
| | | AND hou.signal_value > 0 |
| | | AND hou.signal_value <= #{weak} |
| | | </if> |
| | | <if test="signalIntensity != null and signalIntensity == 2"> |
| | | AND hou.signal_value > #{weak} |
| | | AND hou.signal_value <= #{ordinary} |
| | | </if> |
| | | <if test="signalIntensity != null and signalIntensity == 3"> |
| | | AND hou.signal_value > #{ordinary} |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | <!--获取指定信号强度的取水口--> |
| | | <select id="getSpecifiedSignalIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoSignalIntensity"> |
| | | SELECT inta.id AS intakeId, |
| | | inta.name AS intakeNum, |
| | | blo.name AS blockName, |
| | | hou.signal_value AS signValue, |
| | | hou.dt AS getDate |
| | | FROM pr_intake inta |
| | | INNER JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id |
| | | INNER JOIN ba_block blo ON blo.id = inta.blockId |
| | | <where> |
| | | AND inta.deleted = 0 |
| | | <if test="signalIntensity != null and signalIntensity == 1"> |
| | | AND hou.signal_value > 0 |
| | | AND hou.signal_value <= #{weak} |
| | | </if> |
| | | <if test="signalIntensity != null and signalIntensity == 2"> |
| | | AND hou.signal_value > #{weak} |
| | | AND hou.signal_value <= #{ordinary} |
| | | </if> |
| | | <if test="signalIntensity != null and signalIntensity == 3"> |
| | | AND hou.signal_value > #{ordinary} |
| | | </if> |
| | | </where> |
| | | ORDER BY hou.dt |
| | | <trim prefix="limit "> |
| | | <if test="start != null and count != null"> |
| | | #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} |
| | | </if> |
| | | </trim> |
| | | </select> |
| | | </mapper> |
| | |
| | | <groupId>com.aliyun</groupId> |
| | | <artifactId>alibaba-dingtalk-service-sdk</artifactId> |
| | | <version>2.0.0</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>commons-logging</groupId> |
| | | <artifactId>commons-logging</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-codec</groupId> |
| | |
| | | <version>1.15</version> |
| | | </dependency> |
| | | |
| | | <!-- 获得系统信息 --> |
| | | <dependency> |
| | | <groupId>com.github.oshi</groupId> |
| | | <artifactId>oshi-core</artifactId> |
| | | <version>6.6.2</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna-platform</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | <!-- 测试 --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | |
| | | // try { |
| | | // URL url = Server.class.getResource("/config/this.licence"); |
| | | // if(!new Lnp(null).parese(url.getPath())){ |
| | | // System.out.println("zhzc licence error!") ; |
| | | // System.out.println("licence error!") ; |
| | | // return ; |
| | | // } |
| | | // } catch (Exception e) { |
| | | // System.out.println("zhzc licence error!") ; |
| | | // System.out.println("licence error!") ; |
| | | // return ; |
| | | // } |
| | | //Server sv = new Server(); |
| | |
| | | |
| | | |
| | | ///////////////// |
| | | //RMI模块 |
| | | //RMI模块 暂时不应用 |
| | | /* |
| | | RmiConfigVo rmiVo = new RmiConfigVo(); |
| | | rmiVo.enable = conf.getSetAttrBoolean(doc, "config.rmi", "enable", null, null) ; |
| | | if(rmiVo.enable){ |
| | |
| | | RmiSvUrl = "[ip]:" + rmiVo.port + "/" + rmiVo.context ; |
| | | units.add(rmiUnit) ; |
| | | } |
| | | |
| | | */ |
| | | |
| | | ///////////////// |
| | | //RTU上行数据处理模块 |
| | |
| | | package com.dy.rtuMw.server.local.localProtocol; |
| | | |
| | | import com.dy.common.threadPool.TreadPoolFactory; |
| | | import com.dy.common.util.*; |
| | | import com.dy.rtuMw.server.forTcp.TcpDownCommandCache; |
| | | import com.dy.rtuMw.server.forTcp.TcpSessionCache; |
| | | import com.dy.rtuMw.server.rtuData.RtuDataCache; |
| | | import com.dy.rtuMw.server.rtuData.TaskPool; |
| | | import oshi.SystemInfo; |
| | | import oshi.hardware.HardwareAbstractionLayer; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | |
| | | */ |
| | | public class MwInfoDeal { |
| | | |
| | | public MwInfoVo deal(){ |
| | | public MwInfoVo deal() throws Exception{ |
| | | MwInfoVo vo = new MwInfoVo() ; |
| | | Integer[] info = TcpSessionCache.info() ; |
| | | vo.rtuTotalConnect = info[0] ; |
| | |
| | | |
| | | vo.taskTreePoolTotalInstance = TaskPool.totalTasks() ; |
| | | |
| | | SystemInfo si = new SystemInfo(); |
| | | HardwareAbstractionLayer hal = si.getHardware(); |
| | | vo.memInfoVo = SysMemoryUtil.info(hal.getMemory()); |
| | | vo.sysInfoVo = SysSysUtil.info(); |
| | | vo.jvmInfoVo = SysJvmUtil.info(); |
| | | |
| | | return vo ; |
| | | } |
| | | } |
| | |
| | | package com.dy.rtuMw.server.local.localProtocol; |
| | | |
| | | import com.dy.common.util.*; |
| | | import lombok.Data; |
| | | |
| | | import java.util.LinkedList; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | |
| | | |
| | | public Integer taskTreePoolTotalInstance = 0 ;//任务树池任务实例总数 |
| | | |
| | | public SysJvmUtil.JvmInfoVo jvmInfoVo ; |
| | | public SysMemoryUtil.MemInfoVo memInfoVo ; |
| | | public SysSysUtil.SysInfoVo sysInfoVo ; |
| | | |
| | | public String toString(){ |
| | | StringBuilder sb = new StringBuilder() ; |
| | | sb.append("通信中间件运行信息:\n"); |
| | |
| | | sb.append(" 长线程池配置最大线程数:" + longMaxThread + "\n"); |
| | | sb.append(" 长线程池配置最小线程数:" + longMinThread + "\n"); |
| | | sb.append(" 任务树池任务实例总数:" + taskTreePoolTotalInstance + "\n"); |
| | | if(jvmInfoVo != null){ |
| | | sb.append(jvmInfoVo.toString()) ; |
| | | } |
| | | if(memInfoVo != null){ |
| | | sb.append(memInfoVo.toString()) ; |
| | | } |
| | | if(sysInfoVo != null){ |
| | | sb.append(sysInfoVo.toString()) ; |
| | | } |
| | | sb.append("\n"); |
| | | |
| | | return sb.toString() ; |
| | |
| | | sv.saveRmAlarmStateLast(po) ; |
| | | }else{ |
| | | if(po.sendMsTime == null){ |
| | | if(alarmVo.hasAlarm()) { |
| | | po.sendMsTime = System.currentTimeMillis() ; |
| | | this.sendMessage(controller, alarmVo); |
| | | } |
| | | }else{ |
| | | if(alarmVo.hasAlarm()){ |
| | | Long now = System.currentTimeMillis() ; |
| | | if(((now - po.sendMsTime) / (1000 * 60)) > ServerProperties.sendDingDingAlarmMsInterval){ |
| | | //大于规定的间隔时间 |
| | |
| | | this.sendMessage(controller, alarmVo); |
| | | } |
| | | } |
| | | } |
| | | po = this.update(controller, po, rtuDt, dV1_0_1, alarmVo, stateVo) ; |
| | | sv.updateRmAlarmStateLast(po); |
| | | } |
| | |
| | | <artifactId>jdom2</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- 获得系统信息 --> |
| | | <dependency> |
| | | <groupId>com.github.oshi</groupId> |
| | | <artifactId>oshi-core</artifactId> |
| | | <version>6.6.2</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>net.java.dev.jna</groupId> |
| | | <artifactId>jna-platform</artifactId> |
| | | <version>5.12.1</version> |
| | | </dependency> |
| | | |
| | | <!-- 测试 --> |
| | | <dependency> |
| File was renamed from pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/java/com/dy/pipIrrOperation/PipIrrWebOperationApplication.java |
| | |
| | | } |
| | | ) |
| | | @MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm", "com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoSe", "com.dy.pipIrrGlobal.daoBa","com.dy.pipIrrGlobal.daoOp"}) |
| | | public class PipIrrWebOperationApplication { |
| | | public class PipIrrOperationApplication { |
| | | |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(PipIrrWebOperationApplication.class, args); |
| | | SpringApplication.run(PipIrrOperationApplication.class, args); |
| | | } |
| | | |
| | | } |
| | |
| | | public class QoCommand extends QueryConditionVo { |
| | | |
| | | /** |
| | | * 取水口ID |
| | | */ |
| | | private Long intakeId; |
| | | |
| | | /** |
| | | * 命令名称 |
| | | */ |
| | | private String commandName; |
| | |
| | | import com.dy.common.webUtil.QueryResultVo; |
| | | import com.dy.pipIrrGlobal.daoRm.RmOnHourReportHistoryMapper; |
| | | import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveHistoryMapper; |
| | | import com.dy.pipIrrGlobal.daoRm.RmOnHourReportLastMapper; |
| | | import com.dy.pipIrrGlobal.voSt.VoBatteryVolt; |
| | | import com.dy.pipIrrGlobal.voSt.VoCumulativeFlow; |
| | | import com.dy.pipIrrGlobal.voSt.VoIntake; |
| | | import com.dy.pipIrrGlobal.voSt.VoIntakeOpenCount; |
| | | import com.dy.pipIrrGlobal.voSt.VoSignalIntensity; |
| | | import com.dy.pipIrrStatistics.intake.qo.BatteryVoltQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.CumulativeFlowQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.IntakeQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.IntakeValueQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.SignalIntensityQO; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.dubbo.common.utils.PojoUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.text.DecimalFormat; |
| | |
| | | private RmOnHourReportHistoryMapper rmOnHourReportHistoryMapper; |
| | | @Autowired |
| | | private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapper; |
| | | @Autowired |
| | | private RmOnHourReportLastMapper rmOnHourReportLastMapper; |
| | | |
| | | @Value("${rtu.batteryVolt}") |
| | | private Double batteryVolt; |
| | | |
| | | @Value("${rtu.signalIntensity.weak}") |
| | | private Integer weak; |
| | | |
| | | @Value("${rtu.signalIntensity.ordinary}") |
| | | private Integer ordinary; |
| | | |
| | | /** |
| | | * 获取指定时间段内未上线的取水口 |
| | |
| | | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; |
| | | |
| | | // 获取符合条件的记录数 |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportHistoryMapper.getLargeFlowIntakesCount(params)).orElse(0L); |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getLargeFlowIntakesCount(params)).orElse(0L); |
| | | |
| | | QueryResultVo<List<VoCumulativeFlow>> rsVo = new QueryResultVo<>() ; |
| | | |
| | |
| | | rsVo.pageCurr = qo.pageCurr ; |
| | | |
| | | rsVo.calculateAndSet(itemTotal, params); |
| | | rsVo.obj = rmOnHourReportHistoryMapper.getLargeFlowIntakes(params); |
| | | rsVo.obj = rmOnHourReportLastMapper.getLargeFlowIntakes(params); |
| | | return rsVo ; |
| | | } |
| | | |
| | |
| | | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; |
| | | |
| | | // 获取符合条件的记录数 |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportHistoryMapper.getSmallFlowIntakesCount(params)).orElse(0L); |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getSmallFlowIntakesCount(params)).orElse(0L); |
| | | |
| | | QueryResultVo<List<VoCumulativeFlow>> rsVo = new QueryResultVo<>() ; |
| | | |
| | |
| | | rsVo.pageCurr = qo.pageCurr ; |
| | | |
| | | rsVo.calculateAndSet(itemTotal, params); |
| | | rsVo.obj = rmOnHourReportHistoryMapper.getSmallFlowIntakes(params); |
| | | rsVo.obj = rmOnHourReportLastMapper.getSmallFlowIntakes(params); |
| | | return rsVo ; |
| | | } |
| | | |
| | | /** |
| | | * 获取欠压取水口 |
| | | * @param qo |
| | | * @return |
| | | */ |
| | | public QueryResultVo<List<VoBatteryVolt>> getUnderVoltIntakes(BatteryVoltQO qo) { |
| | | qo.setBatteryVolt(batteryVolt); |
| | | // 生成查询参数 |
| | | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; |
| | | |
| | | // 获取符合条件的记录数 |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getUnderVoltIntakesCount(params)).orElse(0L); |
| | | |
| | | QueryResultVo<List<VoBatteryVolt>> rsVo = new QueryResultVo<>() ; |
| | | |
| | | rsVo.pageSize = qo.pageSize ; |
| | | rsVo.pageCurr = qo.pageCurr ; |
| | | |
| | | rsVo.calculateAndSet(itemTotal, params); |
| | | rsVo.obj = rmOnHourReportLastMapper.getUnderVoltIntakes(params); |
| | | return rsVo ; |
| | | } |
| | | |
| | | /** |
| | | * 获取指定信号强度的取水口 |
| | | * @param qo |
| | | * @return |
| | | */ |
| | | public QueryResultVo<List<VoSignalIntensity>> getSpecifiedSignalIntakes(SignalIntensityQO qo) { |
| | | qo.setWeak(weak); |
| | | qo.setOrdinary(ordinary); |
| | | |
| | | // 生成查询参数 |
| | | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; |
| | | |
| | | // 获取符合条件的记录数 |
| | | Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getSpecifiedSignalIntakesCount(params)).orElse(0L); |
| | | |
| | | QueryResultVo<List<VoSignalIntensity>> rsVo = new QueryResultVo<>() ; |
| | | |
| | | rsVo.pageSize = qo.pageSize ; |
| | | rsVo.pageCurr = qo.pageCurr ; |
| | | |
| | | rsVo.calculateAndSet(itemTotal, params); |
| | | rsVo.obj = rmOnHourReportLastMapper.getSpecifiedSignalIntakes(params); |
| | | return rsVo ; |
| | | } |
| | | |
| | |
| | | rsVo.obj = rmOpenCloseValveHistoryMapper.getOpenValveLtIntakes(params); |
| | | return rsVo ; |
| | | } |
| | | |
| | | } |
| | |
| | | import com.dy.common.webUtil.BaseResponse; |
| | | import com.dy.common.webUtil.BaseResponseUtils; |
| | | import com.dy.common.webUtil.QueryResultVo; |
| | | import com.dy.pipIrrGlobal.voSt.VoBatteryVolt; |
| | | import com.dy.pipIrrGlobal.voSt.VoCumulativeFlow; |
| | | import com.dy.pipIrrGlobal.voSt.VoIntake; |
| | | import com.dy.pipIrrGlobal.voSt.VoSignalIntensity; |
| | | import com.dy.pipIrrStatistics.intake.qo.BatteryVoltQO; |
| | | import com.dy.pipIrrGlobal.voSt.VoIntakeOpenCount; |
| | | import com.dy.pipIrrStatistics.intake.qo.CumulativeFlowQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.IntakeQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.SignalIntensityQO; |
| | | import com.dy.pipIrrStatistics.intake.qo.IntakeValueQO; |
| | | import com.dy.pipIrrStatistics.result.StatisticlResultCode; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | @SsoAop() |
| | | public BaseResponse<QueryResultVo<List<VoIntake>>> getNotOnlineIntakes(IntakeQO qo) { |
| | | try { |
| | | QueryResultVo<List<VoIntake>> res = intakeSv.getNotOnlineIntakes(qo); |
| | | if(res.itemTotal == 0) { |
| | | return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.NO_RECORDS.getMessage()); |
| | | } |
| | | return BaseResponseUtils.buildSuccess(res); |
| | | return BaseResponseUtils.buildSuccess(intakeSv.getNotOnlineIntakes(qo)); |
| | | } catch (Exception e) { |
| | | log.error("获取开卡记录异常", e); |
| | | return BaseResponseUtils.buildException(e.getMessage()) ; |
| | |
| | | @SsoAop() |
| | | public BaseResponse<QueryResultVo<List<VoCumulativeFlow>>> getLargeFlowIntakes(CumulativeFlowQO qo) { |
| | | try { |
| | | QueryResultVo<List<VoCumulativeFlow>> res = intakeSv.getLargeFlowIntakes(qo); |
| | | if(res.itemTotal == 0) { |
| | | return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.NO_RECORDS.getMessage()); |
| | | } |
| | | return BaseResponseUtils.buildSuccess(res); |
| | | return BaseResponseUtils.buildSuccess(intakeSv.getLargeFlowIntakes(qo)); |
| | | } catch (Exception e) { |
| | | log.error("获取开卡记录异常", e); |
| | | return BaseResponseUtils.buildException(e.getMessage()) ; |
| | |
| | | @SsoAop() |
| | | public BaseResponse<QueryResultVo<List<VoCumulativeFlow>>> getSmallFlowIntakes(CumulativeFlowQO qo) { |
| | | try { |
| | | QueryResultVo<List<VoCumulativeFlow>> res = intakeSv.getSmallFlowIntakes(qo); |
| | | if(res.itemTotal == 0) { |
| | | return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.NO_RECORDS.getMessage()); |
| | | return BaseResponseUtils.buildSuccess(intakeSv.getSmallFlowIntakes(qo)); |
| | | } catch (Exception e) { |
| | | log.error("获取开卡记录异常", e); |
| | | return BaseResponseUtils.buildException(e.getMessage()) ; |
| | | } |
| | | return BaseResponseUtils.buildSuccess(res); |
| | | } |
| | | |
| | | /** |
| | | * 获取欠压取水口 |
| | | * @param qo |
| | | * @return |
| | | */ |
| | | @GetMapping(path = "/getUnderVoltIntakes") |
| | | @SsoAop() |
| | | public BaseResponse<QueryResultVo<List<VoBatteryVolt>>> getUnderVoltIntakes(BatteryVoltQO qo) { |
| | | try { |
| | | return BaseResponseUtils.buildSuccess(intakeSv.getUnderVoltIntakes(qo)); |
| | | } catch (Exception e) { |
| | | log.error("获取开卡记录异常", e); |
| | | return BaseResponseUtils.buildException(e.getMessage()) ; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取指定信号强度的取水口 |
| | | * @param qo |
| | | * @return |
| | | */ |
| | | @GetMapping(path = "/getSpecifiedSignalIntakes") |
| | | @SsoAop() |
| | | public BaseResponse<QueryResultVo<List<VoSignalIntensity>>> getSpecifiedSignalIntakes(SignalIntensityQO qo) { |
| | | try { |
| | | return BaseResponseUtils.buildSuccess(intakeSv.getSpecifiedSignalIntakes(qo)); |
| | | } catch (Exception e) { |
| | | log.error("获取开卡记录异常", e); |
| | | return BaseResponseUtils.buildException(e.getMessage()) ; |
| New file |
| | |
| | | package com.dy.pipIrrStatistics.intake.qo; |
| | | |
| | | import com.dy.common.webUtil.QueryConditionVo; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author ZhuBaoMin |
| | | * @date 2024-08-03 10:47 |
| | | * @LastEditTime 2024-08-03 10:47 |
| | | * @Description |
| | | */ |
| | | |
| | | @Data |
| | | public class BatteryVoltQO extends QueryConditionVo { |
| | | |
| | | /** |
| | | * 电池电压 |
| | | */ |
| | | private Double batteryVolt; |
| | | } |
| New file |
| | |
| | | package com.dy.pipIrrStatistics.intake.qo; |
| | | |
| | | import com.dy.common.webUtil.QueryConditionVo; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author ZhuBaoMin |
| | | * @date 2024-08-05 8:42 |
| | | * @LastEditTime 2024-08-05 8:42 |
| | | * @Description 信号强度查询对象 |
| | | */ |
| | | |
| | | @Data |
| | | public class SignalIntensityQO extends QueryConditionVo { |
| | | |
| | | /** |
| | | * 信号强度:1-弱,2-一般,3-强 |
| | | */ |
| | | private Integer signalIntensity; |
| | | |
| | | /** |
| | | * 弱信号最大值 |
| | | */ |
| | | private Integer weak; |
| | | |
| | | /** |
| | | * 一般信号最大值 |
| | | */ |
| | | private Integer ordinary; |
| | | } |