Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

wwh 1 kuukausi sitten
vanhempi
commit
5108dff471

+ 28 - 5
get-data/src/main/java/com/huimv/getdata/test/TestConnection.java

@@ -31,7 +31,7 @@ public class TestConnection {
             // 创建 Statement
             Statement stmt = conn.createStatement();
             // 创建 PreparedStatement(推荐)
-            String sql = "select * from T_Standard order by F_StdNo desc";
+            String sql = "select * from T_Standard order by F_StdNo asc";
             PreparedStatement pstmt = conn.prepareStatement(sql);
             // 执行查询...
             ResultSet resultSet = pstmt.executeQuery();
@@ -48,10 +48,33 @@ public class TestConnection {
 //                System.out.println(s + ":"+ mapOfColumnValues.get(s));
 //            }
             while (resultSet.next()) {
-                String F_CarNo = resultSet.getString("F_CarNo");
-                String F_ProName = resultSet.getString("F_ProName");
-                String F_Model = resultSet.getString("F_Model");
-                System.out.printf("ID: %s, Name: %s, Salary: %s", F_CarNo, F_ProName, F_Model);
+                TestWeight testWeight = new TestWeight(resultSet.getString("F_StdNo")
+                        ,resultSet.getString("F_CarNo")
+                        ,resultSet.getString("F_ProName")
+                        ,resultSet.getString("F_Model")
+                        ,resultSet.getString("F_unitFrom")
+                        ,resultSet.getString("F_Load")
+                        ,resultSet.getString("F_UnitTo")
+                        ,resultSet.getString("F_UnLoad")
+                        ,resultSet.getString("F_Transport")
+                        ,resultSet.getString("F_Driver")
+                        ,resultSet.getString("F_Memo")
+                        ,resultSet.getString("F_Type")
+                        ,resultSet.getDouble("F_Number")
+                        ,resultSet.getDouble("F_Gross")
+                        ,resultSet.getDouble("F_Tare")
+                        ,resultSet.getDouble("F_Net")
+                        ,resultSet.getDouble("F_Deduct")
+                        ,resultSet.getDouble("F_Fact")
+                        ,resultSet.getDouble("F_Deduct2")
+                        ,resultSet.getDouble("F_Fact2")
+                        ,resultSet.getDouble("F_Price")
+                        ,resultSet.getDouble("F_Money")
+
+                );
+
+                System.out.println(testWeight.toString());
+                System.out.println();
             }
 
         } catch (Exception  e) {

+ 54 - 0
get-data/src/main/java/com/huimv/getdata/test/TestWeight.java

@@ -1,5 +1,7 @@
 package com.huimv.getdata.test;
 
+import lombok.Data;
+
 /**
  * @Project : huimv.shiwan
  * @Package : com.huimv.getdata.test
@@ -7,5 +9,57 @@ package com.huimv.getdata.test;
  * @Author : yuxuexuan
  * @Create : 2025-04-01 16:22
  **/
+@Data
 public class TestWeight {
+    public TestWeight() {
+    }
+
+    public TestWeight(String FStdNo, String FCarNo, String FProName, String FModel, String funitFrom, String FLoad, String FUnitTo, String FUnLoad, String FTransport, String FDriver, String FMemo, String FType, Double number, Double gross, Double tare, Double net, Double deduct, Double fact, Double deduct2, Double fact2, Double price, Double money) {
+        this.FStdNo = FStdNo;
+        this.FCarNo = FCarNo;
+        this.FProName = FProName;
+        this.FModel = FModel;
+        this.FunitFrom = funitFrom;
+        this.FLoad = FLoad;
+        this.FUnitTo = FUnitTo;
+        this.FUnLoad = FUnLoad;
+        this.FTransport = FTransport;
+        this.FDriver = FDriver;
+        this.FMemo = FMemo;
+        this.FType = FType;
+        this.Number = number;
+        this.Gross = gross;
+        this.Tare = tare;
+        this.Net = net;
+        this.Deduct = deduct;
+        this.Fact = fact;
+        this.Deduct2 = deduct2;
+        this.Fact2 = fact2;
+        this.Price = price;
+        this.Money = money;
+    }
+
+    private String FStdNo ;
+   private String FCarNo ;
+   private String FProName ;
+   private String FModel ;
+   private String FunitFrom  ;
+   private String FLoad  ;
+   private String FUnitTo  ;
+   private String FUnLoad  ;
+   private String FTransport  ;
+   private String FDriver  ;
+   private String FMemo  ;
+   private String FType  ;
+     private Double Number;
+     private Double Gross ;
+     private Double Tare ;
+     private Double Net ;
+     private Double Deduct ;
+     private Double Fact ;
+     private Double Deduct2;
+     private Double Fact2 ;
+     private Double Price ;
+     private Double Money ;
+
 }

+ 19 - 0
huimv-admin/src/main/java/com/huimv/admin/server/CPData.java

@@ -0,0 +1,19 @@
+
+package com.huimv.admin.server;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+class CPData {
+    private String dataTime; // 数据时间
+    private Map<String, Parameter> parameters = new HashMap<>();
+
+    public void addParameter(String code, Parameter param) {
+        parameters.put(code, param);
+    }
+
+    // 构造方法、getter/setter省略
+}

+ 51 - 0
huimv-admin/src/main/java/com/huimv/admin/server/EnvInputServerHandler.java

@@ -1,16 +1,20 @@
 package com.huimv.admin.server;
 
 import com.alibaba.fastjson.JSONArray;
+import com.huimv.admin.entity.ProtData;
+import com.huimv.admin.mapper.ProtDataMapper;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.util.CharsetUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.text.ParseException;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -30,6 +34,8 @@ import java.util.regex.Pattern;
 @Slf4j
 public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
     private StringBuilder askTextSb = null;
+    @Autowired
+    private ProtDataMapper protDataMapper;
 
     //
     public void appendClientAsk(String text) {
@@ -82,9 +88,54 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
     private void handleClientAskCmd(String clientAskText, ChannelHandlerContext ctx) throws ParseException, IOException {
 
         System.out.println("接收到消息: " + clientAskText + "  时间: " + System.currentTimeMillis());
+        EnvironmentalData parse = HJ212Parser.parse(clientAskText.replace("##", ""));
+        ProtData protData = new ProtData();
+        protData.setPh(parse.getCpData().getParameters().get("w01001").getAvg());
+        protData.setOther1(parse.getCpData().getParameters().get("w01010").getAvg());
+        protData.setCod(parse.getCpData().getParameters().get("w01018").getAvg());
+        protData.setNh3n(parse.getCpData().getParameters().get("w21003").getAvg());
+        protData.setOther2(parse.getCpData().getParameters().get("w00000").getAvg());
+        protData.setLoctionType(1);
+        String mn = parse.getHeader().getMn();
+        if ("01523162079470".equals(mn)){
+            protData.setFarmId(30);
+        }else {
+            protData.setFarmId(28);
+        }
+        protData.setOther3(clientAskText);
+        protData.setCreateDate(new Date());
 
+        protDataMapper.insert(protData);
         askTextSb.delete(0, askTextSb.length());
     }
+    //QN	20250412142007184	请求编号(21位时间戳:2025-04-12 14:20:07.184)
+    //ST	32	系统类型(32表示污水处理设施)
+    //CN	2051	命令编号(2051表示实时数据上报)
+    //PW	123456	密码(默认密码)
+    //MN	01523162079470	设备唯一标识(015为厂商代码,后续为设备编号)
+    //Flag	4	数据包标志位(4表示数据需要应答)
+    //w01001	pH值	-	水质酸碱度指标
+    //w01010	水温	℃	水体温度
+    //w01018	溶解氧	mg/L	水体中氧气含量
+    //w21003	总磷	mg/L	水体富营养化指标
+    //w00000	自定义/扩展参数	-	需结合具体设备文档确认含义
+    //Min:周期内最小值
+    //Max:周期内最大值
+    //Avg:周期内平均值
+    //Cou:累计值(如流量累计)
+
+//    public static void main(String[] args) {
+//        String rawData = "##QN=20250412142007184;ST=32;CN=2051;PW=123456;MN=01523162079470;Flag=4;" +
+//                "CP=&&DataTime=20250412141900;w01018-Min=78.9,w01018-Max=78.9,w01018-Avg=78.9," +
+//                "w01018-Cou=0.026,w01018-Flag=N;w00000-Min=5.497,w00000-Max=5.728,w00000-Avg=5.597," +
+//                "w00000-Cou=0.336,w00000-Flag=N;w01001-Min=7.33,w01001-Max=7.34,w01001-Avg=7.336," +
+//                "w01001-Flag=N;w01010-Min=23,w01010-Max=23,w01010-Avg=23,w01010-Flag=N;" +
+//                "w21003-Min=0.455,w21003-Max=0.455,w21003-Avg=0.455,w21003-Cou=0,w21003-Flag=N&&7200";
+//
+//        EnvironmentalData data = HJ212Parser.parse(rawData.replace("##",""));
+//        System.out.println("DataTime: " + data.getCpData().getDataTime());
+//        System.out.println("pH值: " + data.getCpData().getParameters().get("w01001").getAvg());
+//    }
 
     /**
      * @Method : askCmdActuator

+ 17 - 0
huimv-admin/src/main/java/com/huimv/admin/server/EnvironmentalData.java

@@ -0,0 +1,17 @@
+package com.huimv.admin.server;
+
+
+import lombok.Data;
+
+// 主实体类
+@Data
+
+public class EnvironmentalData {
+    private Header header;
+    private CPData cpData;
+    private int ttl; // 有效期(秒)
+
+    // 构造方法、getter/setter省略
+}
+
+

+ 76 - 0
huimv-admin/src/main/java/com/huimv/admin/server/HJ212Parser.java

@@ -0,0 +1,76 @@
+package com.huimv.admin.server;
+
+// ---------------------- 解析工具类 ----------------------
+class HJ212Parser {
+    
+    public static EnvironmentalData parse(String rawData) {
+        EnvironmentalData result = new EnvironmentalData();
+        String[] parts = rawData.split(";");
+
+        // 1. 解析基础头信息
+        Header header = new Header();
+        for (String part : parts) {
+            if (part.contains("=")) {
+                String[] kv = part.split("=", 2);
+                String key = kv[0].trim();
+                String value = kv[1].trim();
+                switch (key) {
+                    case "QN": header.setQn(value); break;
+                    case "ST": header.setSt(value); break;
+                    case "CN": header.setCn(value); break;
+                    case "PW": header.setPw(value); break;
+                    case "MN": header.setMn(value); break;
+                    case "Flag": header.setFlag(value); break;
+                }
+            }
+        }
+        result.setHeader(header);
+
+        // 2. 解析CP段
+        CPData cpData = new CPData();
+        String cpContent = rawData.split("CP=&&")[1].split("&&")[0];
+        String[] cpItems = cpContent.split(";");
+        
+        for (String item : cpItems) {
+            if (item.startsWith("DataTime=")) {
+                cpData.setDataTime(item.split("=")[1]);
+            } else {
+                parseParameter(item, cpData);
+            }
+        }
+        result.setCpData(cpData);
+
+        // 3. 解析TTL
+        String ttlPart = rawData.split("&&")[2].trim();
+        result.setTtl(Integer.parseInt(ttlPart.split(" ")[0]));
+        
+        return result;
+    }
+    private static void parseParameter(String item, CPData cpData) {
+        String[] pairs = item.split(",");
+        Parameter param = new Parameter();
+        String code = null;
+
+        for (String pair : pairs) {
+            String[] kv = pair.split("=");
+            String key = kv[0].trim();
+            String value = kv[1].trim();
+
+            if (key.contains("-")) {
+                code = key.split("-")[0];
+                String field = key.split("-")[1];
+                switch (field) {
+                    case "Min": param.setMin(value); break;
+                    case "Max": param.setMax(value); break;
+                    case "Avg": param.setAvg(value); break;
+                    case "Cou": param.setCou(value); break;
+                    case "Flag": param.setFlag(value); break;
+                }
+            }
+        }
+
+        if (code != null) {
+            cpData.addParameter(code, param);
+        }
+    }
+}

+ 15 - 0
huimv-admin/src/main/java/com/huimv/admin/server/Header.java

@@ -0,0 +1,15 @@
+package com.huimv.admin.server;
+
+import lombok.Data;
+
+@Data
+class Header {
+    private String qn;       // 请求编号
+    private String st;       // 系统类型
+    private String cn;       // 命令编号
+    private String pw;       // 密码
+    private String mn;       // 设备标识
+    private String flag;     // 标志位
+
+    // 构造方法、getter/setter省略
+}

+ 14 - 0
huimv-admin/src/main/java/com/huimv/admin/server/Parameter.java

@@ -0,0 +1,14 @@
+package com.huimv.admin.server;
+
+import lombok.Data;
+
+@Data
+class Parameter {
+    private String min;
+    private String max;
+    private String avg;
+    private String cou;
+    private String flag;
+
+    // 构造方法、getter/setter省略
+}

+ 11 - 0
huimv-receive/pom.xml

@@ -26,6 +26,17 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+        <dependency>
+            <groupId>net.sourceforge.jtds</groupId>
+            <artifactId>jtds</artifactId>
+            <version>1.2.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+            <version>2.12.0</version>
+        </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>

+ 5 - 0
huimv-receive/src/main/java/com/huimv/receive/entity/BillGate.java

@@ -68,5 +68,10 @@ public class BillGate implements Serializable {
 
     private String carUrl;
 
+    private String gross;
+    private String tare;
+    private String net;
+    private String stdno;
+
 
 }

+ 0 - 1
huimv-receive/src/main/java/com/huimv/receive/service/impl/BillPersonnelAdmissionServiceImpl.java

@@ -982,7 +982,6 @@ public class BillPersonnelAdmissionServiceImpl extends ServiceImpl<BillPersonnel
             if ("21".equals(farmId)) {
                 queryWrapper.eq("farm_id", 26).orderByDesc("check_date");
             } else {
-
                 queryWrapper.eq("farm_id", Integer.parseInt(farmId)).orderByDesc("check_date");
             }
             if ("1".equals(status)) {

+ 93 - 0
huimv-receive/src/main/java/com/huimv/receive/timer/DiBangimer.java

@@ -0,0 +1,93 @@
+package com.huimv.receive.timer;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.receive.entity.BillGate;
+import com.huimv.receive.mapper.BillGateMapper;
+import com.huimv.receive.timer.test.TestWeight;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.sql.*;
+import java.util.List;
+
+
+@Configuration
+@EnableScheduling
+public class DiBangimer {
+
+    @Autowired
+    private BillGateMapper billGateMapper;
+
+    //多利托地磅
+    @Scheduled(cron = "0 * * * * ? ")
+    private void getShenChan() throws Exception {
+        String url = "jdbc:jtds:sqlserver://218.76.168.4:1433/CMTWeight"; // 使用 jTDS 连接字符串
+        String user = "sa";
+        String password = "jh@123";
+        Class.forName("net.sourceforge.jtds.jdbc.Driver");
+        try (Connection conn = DriverManager.getConnection(url, user, password)) {
+            // 创建 Statement
+            Statement stmt = conn.createStatement();
+            // 创建 PreparedStatement(推荐)
+            String sql = "select * from T_Standard ";
+            PreparedStatement pstmt = conn.prepareStatement(sql);
+            // 执行查询...
+            ResultSet resultSet = pstmt.executeQuery();
+
+            while (resultSet.next()) {
+                BillGate billGate = billGateMapper.selectOne(new QueryWrapper<BillGate>().eq("stdno", resultSet.getString("F_StdNo")));
+                if (ObjectUtil.isEmpty(billGate)){
+                    List<BillGate> billGate1 = billGateMapper.selectList(new QueryWrapper<BillGate>().eq("car_num", resultSet.getString("F_CarNo"))
+                            .between("check_date", resultSet.getString("F_BeginTime"), resultSet.getString("F_EndTime")));
+
+                    if (ObjectUtil.isNotEmpty(billGate1)){
+                        billGate = billGate1.get(0);
+                        billGate.setGross(resultSet.getDouble("F_Gross")+"");
+                        billGate.setTare(resultSet.getDouble("F_Money")+"");
+                        billGate.setNet(resultSet.getDouble("F_Net")+"");
+                        billGate.setStdno(resultSet.getString("F_StdNo"));
+                        billGateMapper.insert(billGate);
+                    }
+                }
+
+
+
+//                TestWeight testWeight = new TestWeight(resultSet.getString("F_StdNo")
+//                        ,resultSet.getString("F_CarNo")
+//                        ,resultSet.getString("F_ProName")
+//                        ,resultSet.getString("F_Model")
+//                        ,resultSet.getString("F_unitFrom")
+//                        ,resultSet.getString("F_Load")
+//                        ,resultSet.getString("F_UnitTo")
+//                        ,resultSet.getString("F_UnLoad")
+//                        ,resultSet.getString("F_Transport")
+//                        ,resultSet.getString("F_Driver")
+//                        ,resultSet.getString("F_Memo")
+//                        ,resultSet.getString("F_Type")
+//                        ,resultSet.getDouble("F_Number")
+//                        ,resultSet.getDouble("F_Gross")
+//                        ,resultSet.getDouble("F_Tare")
+//                        ,resultSet.getDouble("F_Net")
+//                        ,resultSet.getDouble("F_Deduct")
+//                        ,resultSet.getDouble("F_Fact")
+//                        ,resultSet.getDouble("F_Deduct2")
+//                        ,resultSet.getDouble("F_Fact2")
+//                        ,resultSet.getDouble("F_Price")
+//                        ,resultSet.getDouble("F_Money")
+//                        ,resultSet.getString("F_BeginTime")
+//                        ,resultSet.getString("F_EndTime")
+//
+//                );
+//                System.out.println(resultSet.getDate("F_BeginTime"));
+            }
+
+        } catch (Exception  e) {
+            e.printStackTrace();
+        }
+    }
+
+}

+ 65 - 0
huimv-receive/src/main/java/com/huimv/receive/timer/test/TestConnection.java

@@ -0,0 +1,65 @@
+package com.huimv.receive.timer.test;
+
+import java.sql.*;
+
+public class TestConnection {
+    public static void main(String[] args) throws ClassNotFoundException {
+
+        String url = "jdbc:jtds:sqlserver://218.76.168.4:1433/CMTWeight"; // 使用 jTDS 连接字符串
+        String user = "sa";
+        String password = "jh@123";
+        Class.forName("net.sourceforge.jtds.jdbc.Driver");
+        try (Connection conn = DriverManager.getConnection(url, user, password)) {
+            // 创建 Statement
+            Statement stmt = conn.createStatement();
+            // 创建 PreparedStatement(推荐)
+            String sql = "select * from T_Standard ";
+            PreparedStatement pstmt = conn.prepareStatement(sql);
+            // 执行查询...
+            ResultSet resultSet = pstmt.executeQuery();
+
+            while (resultSet.next()) {
+
+                TestWeight testWeight = new TestWeight(resultSet.getString("F_StdNo")
+                        ,resultSet.getString("F_CarNo")
+                        ,resultSet.getString("F_ProName")
+                        ,resultSet.getString("F_Model")
+                        ,resultSet.getString("F_unitFrom")
+                        ,resultSet.getString("F_Load")
+                        ,resultSet.getString("F_UnitTo")
+                        ,resultSet.getString("F_UnLoad")
+                        ,resultSet.getString("F_Transport")
+                        ,resultSet.getString("F_Driver")
+                        ,resultSet.getString("F_Memo")
+                        ,resultSet.getString("F_Type")
+                        ,resultSet.getDouble("F_Number")
+                        ,resultSet.getDouble("F_Gross")
+                        ,resultSet.getDouble("F_Tare")
+                        ,resultSet.getDouble("F_Net")
+                        ,resultSet.getDouble("F_Deduct")
+                        ,resultSet.getDouble("F_Fact")
+                        ,resultSet.getDouble("F_Deduct2")
+                        ,resultSet.getDouble("F_Fact2")
+                        ,resultSet.getDouble("F_Price")
+                        ,resultSet.getDouble("F_Money")
+                        ,resultSet.getString("F_BeginTime")
+                        ,resultSet.getString("F_EndTime")
+
+                );
+//                System.out.println(resultSet.getDate("F_BeginTime"));
+
+                System.out.println(testWeight.toString());
+                System.out.println();
+            }
+
+        } catch (Exception  e) {
+            e.printStackTrace();
+        }
+    }
+
+    //  url: jdbc:jtds:sqlserver://218.76.168.4:1433/CMTWeight
+    //    username: sa
+    //    password: jh@123
+    //#    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    //    driver-class-name: net.sourceforge.jtds.jdbc.Driver
+}

+ 70 - 0
huimv-receive/src/main/java/com/huimv/receive/timer/test/TestWeight.java

@@ -0,0 +1,70 @@
+package com.huimv.receive.timer.test;
+
+import lombok.Data;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.getdata.test
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2025-04-01 16:22
+ **/
+@Data
+public class TestWeight {
+    public TestWeight() {
+    }
+
+    public TestWeight(String FStdNo, String FCarNo, String FProName, String FModel, String funitFrom, String FLoad, String FUnitTo, String FUnLoad, String FTransport, String FDriver, String FMemo, String FType, Double number, Double gross, Double tare, Double net, Double deduct, Double fact, Double deduct2, Double fact2, Double price, Double money, String beginTime
+            , String endTime) {
+        this.FStdNo = FStdNo;
+        this.FCarNo = FCarNo;
+        this.FProName = FProName;
+        this.FModel = FModel;
+        this.FunitFrom = funitFrom;
+        this.FLoad = FLoad;
+        this.FUnitTo = FUnitTo;
+        this.FUnLoad = FUnLoad;
+        this.FTransport = FTransport;
+        this.FDriver = FDriver;
+        this.FMemo = FMemo;
+        this.FType = FType;
+        this.Number = number;
+        this.Gross = gross;
+        this.Tare = tare;
+        this.Net = net;
+        this.Deduct = deduct;
+        this.Fact = fact;
+        this.Deduct2 = deduct2;
+        this.Fact2 = fact2;
+        this.Price = price;
+        this.Money = money;
+        this.BeginTime = beginTime;
+        this.EndTime = endTime;
+    }
+
+    private String FStdNo ;
+   private String FCarNo ;
+   private String FProName ;
+   private String FModel ;
+   private String FunitFrom  ;
+   private String FLoad  ;
+   private String FUnitTo  ;
+   private String FUnLoad  ;
+   private String FTransport  ;
+   private String FDriver  ;
+   private String FMemo  ;
+   private String FType  ;
+     private Double Number;
+     private Double Gross ;
+     private Double Tare ;
+     private Double Net ;
+     private Double Deduct ;
+     private Double Fact ;
+     private Double Deduct2;
+     private Double Fact2 ;
+     private Double Price ;
+     private Double Money ;
+     private String  BeginTime;
+     private String  EndTime;
+
+}