Commit a3c2a14d0259f742f1eb03b6391edbac9412abd6

Authored by 杨鸣坤
1 parent 22cf9ad2

代码还原

@@ -2,17 +2,12 @@ package com.iot.scheduler.service.chizhou; @@ -2,17 +2,12 @@ package com.iot.scheduler.service.chizhou;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.iot.scheduler.utils.MqttUtils; 4 import com.iot.scheduler.utils.MqttUtils;
5 -import com.iot.scheduler.utils.SqlTypedValueUtils;  
6 -import com.zaxxer.hikari.HikariConfig;  
7 -import com.zaxxer.hikari.HikariDataSource;  
8 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
9 import org.springframework.stereotype.Service; 6 import org.springframework.stereotype.Service;
10 7
11 -import java.sql.*;  
12 import java.text.MessageFormat; 8 import java.text.MessageFormat;
13 import java.text.SimpleDateFormat; 9 import java.text.SimpleDateFormat;
14 import java.util.*; 10 import java.util.*;
15 -import java.util.Date;  
16 11
17 /** 12 /**
18 * 池州经开区数据上传 13 * 池州经开区数据上传
@@ -25,101 +20,80 @@ public class CzDeviceReportService { @@ -25,101 +20,80 @@ public class CzDeviceReportService {
25 String username = "admin"; 20 String username = "admin";
26 String password = "ly@666yc"; 21 String password = "ly@666yc";
27 22
28 - String jdbcUrl = "postgresql://106.15.73.210:5433/thingskit";  
29 - String jdbcUserName = "postgres";  
30 - String jdbcPassword = "postgres";  
31 - String selectSql = "SELECT\n" +  
32 - "dc.credentials_id AS sn,\n" +  
33 - "CASE\n" +  
34 - " WHEN ak2.long_v IS NULL OR (ak.bool_v = FALSE AND ak2.long_v IS NOT NULL) THEN 'OFF'\n" +  
35 - " WHEN tkl.long_v = 1 THEN 'ERROR'\n" +  
36 - " WHEN tkl2.long_v = 1 THEN 'STAND'\n" +  
37 - " WHEN tkl3.long_v = 1 THEN 'RUN'\n" +  
38 - " ELSE 'OFF'\n" +  
39 - " END AS status,\n" +  
40 - " de.organization_id\n" +  
41 - " FROM device de \n" +  
42 - "LEFT JOIN ts_kv_latest tkl on de.id = tkl.entity_id AND tkl.key = '64'\n" +  
43 - "LEFT JOIN ts_kv_latest tkl2 on de.id = tkl2.entity_id AND tkl2.key = '535'\n" +  
44 - "LEFT JOIN ts_kv_latest tkl3 on de.id = tkl3.entity_id AND tkl3.key = '534'\n" +  
45 - "LEFT JOIN attribute_kv ak ON de.id = ak.entity_id AND ak.entity_type = 'DEVICE' AND ak.attribute_key = 'active'\n" +  
46 - "LEFT JOIN attribute_kv ak2 ON de.id = ak2.entity_id AND ak2.entity_type = 'DEVICE' AND ak2.attribute_key = 'lastActivityTime'\n" +  
47 - "LEFT JOIN device_credentials dc ON de.id = dc.device_id\n" +  
48 - "WHERE (de.organization_id = '63934b6f-1e02-4d29-ac14-1a64649e2231' or de.organization_id = '35bcdb94-31ec-4750-9ee9-cc855aa66e17')\n" +  
49 - "AND de.device_profile_id = 'b2071bd0-df0b-11f0-9cb8-e3376d1e7978'\n" +  
50 - "union ALL\n" +  
51 - "SELECT \n" +  
52 - "dc.credentials_id AS sn,\n" +  
53 - "CASE\n" +  
54 - " WHEN ak2.long_v IS NULL OR (ak.bool_v = FALSE AND ak2.long_v IS NOT NULL) THEN 'OFF'\n" +  
55 - " ELSE 'RUN'\n" +  
56 - " END AS status,\n" +  
57 - " de.organization_id\n" +  
58 - "FROM device de \n" +  
59 - "LEFT JOIN attribute_kv ak ON de.id = ak.entity_id AND ak.entity_type = 'DEVICE' AND ak.attribute_key = 'active'\n" +  
60 - "LEFT JOIN attribute_kv ak2 ON de.id = ak2.entity_id AND ak2.entity_type = 'DEVICE' AND ak2.attribute_key = 'lastActivityTime'\n" +  
61 - "LEFT JOIN device_credentials dc ON de.id = dc.device_id\n" +  
62 - "WHERE (de.organization_id = '63934b6f-1e02-4d29-ac14-1a64649e2231' or de.organization_id = '35bcdb94-31ec-4750-9ee9-cc855aa66e17')\n" +  
63 - "AND (de.device_profile_id = 'fdf70e30-0272-11f1-9cb8-e3376d1e7978' OR de.device_profile_id = '6c1f9650-0298-11f1-9cb8-e3376d1e7978')\n";  
64 -  
65 public void deviceReport() { 23 public void deviceReport() {
66 -// List<String> deviceIdList = Arrays.asList("TCKJ-001", "TCKJ-002", "TCKJ-003", "TCKJ-004", "TCKJ-005", "TCKJ-006",  
67 -// "TCKJ-007", "TCKJ-008", "TCKJ-009", "TCKJ-010", "TCKJ-011", "TCKJ-012", "TCKJ-013", "TCKJ-014", "TCKJ-015",  
68 -// "TCKJ-016", "TCKJ-017", "TCKJ-018", "TCKJ-019", "TCKJ-020", "TCKJ-021", "TCKJ-022", "TCKJ-023", "TCKJ-024",  
69 -// "TCKJ-025", "TCKJ-026", "TCKJ-027", "TCKJ-028", "TCKJ-029", "TCKJ-030", "TCKJ-031", "TCKJ-032", "TCKJ-033",  
70 -// "TCKJ-034", "TCKJ-035", "TCKJ-036", "TCKJ-037", "TCKJ-038", "TCKJ-039", "TCKJ-040", "TCKJ-041",  
71 -// "vJAzZWk1Q2I8cdq7kx3z", "LmiW3ljI4KP487CeMmol", "ceK7YSNLrTjVSSPaFmn3", "6KePBYyCiEgo10iJXIrF",  
72 -// "9vrxIQhbaZ542DvCVne0", "XMLN-001", "XMLN-002", "XMLN-003", "XMLN-004", "XMLN-005", "XMLN-006", "XMLN-007",  
73 -// "XMLN-008", "XMLN-009", "XMLN-010", "XMLN-011", "XMLN-012", "XMLN-013", "XMLN-014", "XMLN-015", "XMLN-016",  
74 -// "XMLN-017", "XMLN-018", "XMLN-019", "XMLN-020", "XMLN-021", "XMLN-022", "XMLN-023", "XMLN-024", "XMLN-025",  
75 -// "XMLN-026", "XMLN-027", "XMLN-028", "XMLN-029", "XMLN-030", "XMLN-031", "XMLN-032", "XMLN-033", "XMLN-034",  
76 -// "XMLN-035", "XMLN-036", "XMLN-037", "XMLN-038", "XMLN-039", "XMLN-040", "XMLN-041", "XMLN-042", "XMLN-043",  
77 -// "XMLN-044", "XMLN-045", "XMLN-046", "XMLN-047", "XMLN-048", "XMLN-049", "XMLN-050", "XMLN-051", "XMLN-052",  
78 -// "GYDPF-014", "GYDPF-006", "KBS-1-1", "KBS-1-2", "KBS-3-1", "KBS-3-5", "KBS-3-3", "CS-001", "uzGf4mjzkOPwGO4aCOf3",  
79 -// "GYDPF-001", "GYDPF-010", "KBS-1-5", "KBS-2-2", "KBS-3-7", "CS-003", "LBKXrYxLQN9W7qmmqzp5", "rba7VggnqGdNyPvVNs1n",  
80 -// "GYDPF-002", "GYDPF-016", "GYDPF-017", "KBS-1-6", "EqFMlJarb2aDwpwvUi6J", "x2173A2HKOiPqeRsKtWY", "GYDPF-005",  
81 -// "KBS-1-3", "KBS-2-1", "KBS-3-4", "1fzR6X57k2aafbbkH4po", "lbqMr5pmkNJLWEPSa0yp", "mYz1kUajPOROg0Ewcfhr",  
82 -// "6TLlfKBbTMaUZGgHtvuH", "XTE8PKwLSYp29gE1umfW", "MqYu4y0OycHQkzZhothe", "IFeN0lAXlAVQ1fD7gwk1", "hZb9NsRCqtVBSagFqnPS",  
83 -// "r22r53PNgY7TeqCK5y14", "KCGSwfTvGCtBfd0qsH63", "4KzFQCncmwFh7UT4vbHp", "GYDPF-007", "KBS-3-2", "t2kkUTZYqxmKLN4X4VPB",  
84 -// "9vWKALGoat3XalEtQaRB", "vYtwLMkppPbM3CtB3U9U", "4vwTfMqi8oEtWxdEUrE8", "vVvK2cTLvjYtZX1dksyd", "GYDPF-003",  
85 -// "KBS-3-8", "2E6eUu66qxl5Llr6ib5v", "iWbeBfwg36lIpBRMDnvO", "GYDPF-015", "KBS-2-4", "OSbA7X7FGETF0TXub4OS",  
86 -// "GYDPF-008", "KBS-2-3", "KBS-2-7", "pRhGGECbXu6FBshyg2yg", "zrVVNRo8QIbjeYjdoCUq", "fjPj3oHW7cL5m0AE1t3y",  
87 -// "8dJsgqjmxIIduP4Sr2rL", "GYDPF-012", "KBS-1-4", "JZ8Tbzye8rKotYTbHUJw", "dwToSYEWr04sPtBUxaOH", "GYDPF-009",  
88 -// "oe3OmagW5Wi9yw9LfUr3", "2mDiH94D7uSh4CtD2bi0", "ceGyDxlK7xzMoUacIwCv", "gxECiKjMEsVkYyowKIMd", "irAqF3fmzaM5GIo8ZLAx",  
89 -// "GYDPF-013", "KBS-2-5", "KBS-3-6", "dxPdbg2UqqYADPMy9TVe", "cjFUpeVPTOh4Uf6wnVH1", "VR5XgpqhFWGMcwdy8yPQ",  
90 -// "GYDPF-004", "KBS-1-7", "KBS-2-8", "HEXmiSz0sXsahRHV2bQm", "0lIIGWP49Xuo91TnTvVx", "C99WsNGFSGQSV4n3YmrW",  
91 -// "3paJSiHK32wvVM6f1tO8", "GYDPF-011", "KBS-1-8", "KBS-2-6", "yrk5Cxa6EJncWX2kTywa", "xOxHHscmrEBhLTlmyRrF",  
92 -// "e3HzLoIl0p3iEM860EdK");  
93 -  
94 - List<Object> needSyncDataList = initConnectAndSelectData();  
95 - log.info("总设备数量: {}台", needSyncDataList.size());  
96 -  
97 - Map<String, String> organizeIdAndClientIdMap = new HashMap<>(3);  
98 - organizeIdAndClientIdMap.put("63934b6f-1e02-4d29-ac14-1a64649e2231", "2020672119054331904"); // 安徽鑫米兰电子科技有限公司  
99 - organizeIdAndClientIdMap.put("35bcdb94-31ec-4750-9ee9-cc855aa66e17", "2020672015207559169"); // 安徽同池科技有限公司  
100 - organizeIdAndClientIdMap.put("365c477a-3e7b-4c4d-b80d-3c05379d5fda", "2020672228886376448"); // 凯盛信息显示材料(池州)有限公司 24 + List<String> deviceIdList = Arrays.asList("TCKJ-001", "TCKJ-002", "TCKJ-003", "TCKJ-004", "TCKJ-005", "TCKJ-006",
  25 + "TCKJ-007", "TCKJ-008", "TCKJ-009", "TCKJ-010", "TCKJ-011", "TCKJ-012", "TCKJ-013", "TCKJ-014", "TCKJ-015",
  26 + "TCKJ-016", "TCKJ-017", "TCKJ-018", "TCKJ-019", "TCKJ-020", "TCKJ-021", "TCKJ-022", "TCKJ-023", "TCKJ-024",
  27 + "TCKJ-025", "TCKJ-026", "TCKJ-027", "TCKJ-028", "TCKJ-029", "TCKJ-030", "TCKJ-031", "TCKJ-032", "TCKJ-033",
  28 + "TCKJ-034", "TCKJ-035", "TCKJ-036", "TCKJ-037", "TCKJ-038", "TCKJ-039", "TCKJ-040", "TCKJ-041",
  29 + "vJAzZWk1Q2I8cdq7kx3z", "LmiW3ljI4KP487CeMmol", "ceK7YSNLrTjVSSPaFmn3", "6KePBYyCiEgo10iJXIrF",
  30 + "9vrxIQhbaZ542DvCVne0", "XMLN-001", "XMLN-002", "XMLN-003", "XMLN-004", "XMLN-005", "XMLN-006", "XMLN-007",
  31 + "XMLN-008", "XMLN-009", "XMLN-010", "XMLN-011", "XMLN-012", "XMLN-013", "XMLN-014", "XMLN-015", "XMLN-016",
  32 + "XMLN-017", "XMLN-018", "XMLN-019", "XMLN-020", "XMLN-021", "XMLN-022", "XMLN-023", "XMLN-024", "XMLN-025",
  33 + "XMLN-026", "XMLN-027", "XMLN-028", "XMLN-029", "XMLN-030", "XMLN-031", "XMLN-032", "XMLN-033", "XMLN-034",
  34 + "XMLN-035", "XMLN-036", "XMLN-037", "XMLN-038", "XMLN-039", "XMLN-040", "XMLN-041", "XMLN-042", "XMLN-043",
  35 + "XMLN-044", "XMLN-045", "XMLN-046", "XMLN-047", "XMLN-048", "XMLN-049", "XMLN-050", "XMLN-051", "XMLN-052",
  36 + "GYDPF-014", "GYDPF-006", "KBS-1-1", "KBS-1-2", "KBS-3-1", "KBS-3-5", "KBS-3-3", "CS-001", "uzGf4mjzkOPwGO4aCOf3",
  37 + "GYDPF-001", "GYDPF-010", "KBS-1-5", "KBS-2-2", "KBS-3-7", "CS-003", "LBKXrYxLQN9W7qmmqzp5", "rba7VggnqGdNyPvVNs1n",
  38 + "GYDPF-002", "GYDPF-016", "GYDPF-017", "KBS-1-6", "EqFMlJarb2aDwpwvUi6J", "x2173A2HKOiPqeRsKtWY", "GYDPF-005",
  39 + "KBS-1-3", "KBS-2-1", "KBS-3-4", "1fzR6X57k2aafbbkH4po", "lbqMr5pmkNJLWEPSa0yp", "mYz1kUajPOROg0Ewcfhr",
  40 + "6TLlfKBbTMaUZGgHtvuH", "XTE8PKwLSYp29gE1umfW", "MqYu4y0OycHQkzZhothe", "IFeN0lAXlAVQ1fD7gwk1", "hZb9NsRCqtVBSagFqnPS",
  41 + "r22r53PNgY7TeqCK5y14", "KCGSwfTvGCtBfd0qsH63", "4KzFQCncmwFh7UT4vbHp", "GYDPF-007", "KBS-3-2", "t2kkUTZYqxmKLN4X4VPB",
  42 + "9vWKALGoat3XalEtQaRB", "vYtwLMkppPbM3CtB3U9U", "4vwTfMqi8oEtWxdEUrE8", "vVvK2cTLvjYtZX1dksyd", "GYDPF-003",
  43 + "KBS-3-8", "2E6eUu66qxl5Llr6ib5v", "iWbeBfwg36lIpBRMDnvO", "GYDPF-015", "KBS-2-4", "OSbA7X7FGETF0TXub4OS",
  44 + "GYDPF-008", "KBS-2-3", "KBS-2-7", "pRhGGECbXu6FBshyg2yg", "zrVVNRo8QIbjeYjdoCUq", "fjPj3oHW7cL5m0AE1t3y",
  45 + "8dJsgqjmxIIduP4Sr2rL", "GYDPF-012", "KBS-1-4", "JZ8Tbzye8rKotYTbHUJw", "dwToSYEWr04sPtBUxaOH", "GYDPF-009",
  46 + "oe3OmagW5Wi9yw9LfUr3", "2mDiH94D7uSh4CtD2bi0", "ceGyDxlK7xzMoUacIwCv", "gxECiKjMEsVkYyowKIMd", "irAqF3fmzaM5GIo8ZLAx",
  47 + "GYDPF-013", "KBS-2-5", "KBS-3-6", "dxPdbg2UqqYADPMy9TVe", "cjFUpeVPTOh4Uf6wnVH1", "VR5XgpqhFWGMcwdy8yPQ",
  48 + "GYDPF-004", "KBS-1-7", "KBS-2-8", "HEXmiSz0sXsahRHV2bQm", "0lIIGWP49Xuo91TnTvVx", "C99WsNGFSGQSV4n3YmrW",
  49 + "3paJSiHK32wvVM6f1tO8", "GYDPF-011", "KBS-1-8", "KBS-2-6", "yrk5Cxa6EJncWX2kTywa", "xOxHHscmrEBhLTlmyRrF",
  50 + "e3HzLoIl0p3iEM860EdK");
  51 +
  52 + log.info("总设备数量: {}台", deviceIdList.size());
101 53
102 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 54 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
103 String formattedDate = sdf.format(new Date()); 55 String formattedDate = sdf.format(new Date());
104 log.info("上报时间统一为: {}", formattedDate); 56 log.info("上报时间统一为: {}", formattedDate);
105 57
  58 + // 用于统计状态分布
  59 + Map<Integer, Integer> statusCountMap = new HashMap<>();
  60 + statusCountMap.put(1, 0);
  61 + statusCountMap.put(2, 0);
  62 + statusCountMap.put(3, 0);
  63 + statusCountMap.put(4, 0);
  64 +
106 // 用于统计上报结果 65 // 用于统计上报结果
107 int successCount = 0; 66 int successCount = 0;
108 int failCount = 0; 67 int failCount = 0;
109 List<String> failedDevices = new ArrayList<>(); 68 List<String> failedDevices = new ArrayList<>();
110 - for (int index = 0; index < needSyncDataList.size(); index++) {  
111 - Object needSyncData = needSyncDataList.get(index);  
112 - List<Object> dataList = (ArrayList) needSyncData;  
113 - String deviceId = dataList.get(0).toString();  
114 - String status = dataList.get(1).toString();  
115 - String organizeId = dataList.get(2).toString(); 69 +
  70 + // 用于记录不同clientId的设备数量
  71 + int clientId1Count = 0;
  72 + int clientId2Count = 0;
  73 + int clientId3Count = 0;
  74 +
  75 + for (int index = 0; index < deviceIdList.size(); index++) {
  76 + String deviceId = deviceIdList.get(index);
116 77
117 // 根据index确定clientId 78 // 根据index确定clientId
118 - String clientId = organizeIdAndClientIdMap.get(organizeId); 79 + String clientId = "2020672015207559169";
  80 + if (index > 45 && index <= 97) {
  81 + clientId = "2020672119054331904";
  82 + clientId2Count++;
  83 + } else if (index > 97) {
  84 + clientId = "2020672228886376448";
  85 + clientId3Count++;
  86 + } else {
  87 + clientId1Count++;
  88 + }
  89 +
119 String topic = MessageFormat.format("/{0}/{1}/properties/report", clientId, deviceId); 90 String topic = MessageFormat.format("/{0}/{1}/properties/report", clientId, deviceId);
120 91
121 // 获取设备状态 92 // 获取设备状态
122 - int deviceState = getDeviceState(status); 93 + int deviceState = getDeviceState();
  94 +
  95 + // 统计状态分布
  96 + statusCountMap.put(deviceState, statusCountMap.get(deviceState) + 1);
123 97
124 Map<String, Object> properties = new HashMap<>(5); 98 Map<String, Object> properties = new HashMap<>(5);
125 properties.put("type", 1); 99 properties.put("type", 1);
@@ -167,6 +141,8 @@ public class CzDeviceReportService { @@ -167,6 +141,8 @@ public class CzDeviceReportService {
167 141
168 // 任务完成,输出统计信息 142 // 任务完成,输出统计信息
169 log.info("========== 设备状态上报任务完成 =========="); 143 log.info("========== 设备状态上报任务完成 ==========");
  144 + log.info("任务完成时间: {}", new Date());
  145 + log.info("设备总数: {}台", deviceIdList.size());
170 log.info("成功上报: {}台", successCount); 146 log.info("成功上报: {}台", successCount);
171 log.info("失败上报: {}台", failCount); 147 log.info("失败上报: {}台", failCount);
172 148
@@ -174,104 +150,60 @@ public class CzDeviceReportService { @@ -174,104 +150,60 @@ public class CzDeviceReportService {
174 log.warn("失败设备列表: {}", failedDevices); 150 log.warn("失败设备列表: {}", failedDevices);
175 } 151 }
176 152
  153 + // 输出clientId分布
  154 + log.info("clientId分布统计:");
  155 + log.info(" clientId-2020672015207559169: {}台", clientId1Count);
  156 + log.info(" clientId-2020672119054331904: {}台", clientId2Count);
  157 + log.info(" clientId-2020672228886376448: {}台", clientId3Count);
  158 +
  159 + // 输出状态分布统计
  160 + log.info("设备状态分布统计 (按8:1:0.5:0.5比例):");
  161 + log.info(" 状态1(80%): {}台 (占比: {}%)",
  162 + statusCountMap.get(1),
  163 + String.format("%.1f", statusCountMap.get(1) * 100.0 / deviceIdList.size()));
  164 + log.info(" 状态2(10%): {}台 (占比: {}%)",
  165 + statusCountMap.get(2),
  166 + String.format("%.1f", statusCountMap.get(2) * 100.0 / deviceIdList.size()));
  167 + log.info(" 状态3(5%): {}台 (占比: {}%)",
  168 + statusCountMap.get(3),
  169 + String.format("%.1f", statusCountMap.get(3) * 100.0 / deviceIdList.size()));
  170 + log.info(" 状态4(5%): {}台 (占比: {}%)",
  171 + statusCountMap.get(4),
  172 + String.format("%.1f", statusCountMap.get(4) * 100.0 / deviceIdList.size()));
  173 +
  174 + // 计算实际比例
  175 + double ratio1 = statusCountMap.get(1) / (double) statusCountMap.get(2);
  176 + double ratio3 = statusCountMap.get(3) / (double) statusCountMap.get(2);
  177 + double ratio4 = statusCountMap.get(4) / (double) statusCountMap.get(2);
  178 + log.info("实际比例: {} : 1 : {} : {}",
  179 + String.format("%.1f", ratio1),
  180 + String.format("%.1f", ratio3),
  181 + String.format("%.1f", ratio4));
  182 +
177 // 任务执行耗时 183 // 任务执行耗时
178 log.info("========== 任务执行结束 =========="); 184 log.info("========== 任务执行结束 ==========");
179 } 185 }
180 186
181 - private int getDeviceState(String status) {  
182 - int deviceState;  
183 - if ("RUN".equals(status)) {  
184 - deviceState = 1;  
185 - } else if ("STAND".equals(status)) {  
186 - deviceState = 2;  
187 - } else if ("OFF".equals(status)) {  
188 - deviceState = 3; 187 + private int getDeviceState() {
  188 + Random random = new Random();
  189 + double rand = random.nextDouble();
  190 + int status;
  191 +
  192 + if (rand < 0.8) {
  193 + status = 1; // 80%概率
  194 + } else if (rand < 0.9) {
  195 + status = 2; // 10%概率
  196 + } else if (rand < 0.95) {
  197 + status = 3; // 5%概率
189 } else { 198 } else {
190 - deviceState = 4; 199 + status = 4; // 5%概率
191 } 200 }
192 201
193 - return deviceState;  
194 - }  
195 -  
196 - private List<Object> initConnectAndSelectData() {  
197 - Connection connection = null;  
198 - PreparedStatement statement = null;  
199 - ResultSet resultSet = null;  
200 - HikariDataSource dataSource = null;  
201 - List<Object> resultList = new ArrayList<>();  
202 -  
203 - log.info("开始连接数据库,URL: {}", jdbcUrl);  
204 -  
205 - try {  
206 - HikariConfig config = new HikariConfig();  
207 - config.setJdbcUrl(jdbcUrl);  
208 - config.setUsername(jdbcUserName);  
209 - config.setPassword(jdbcPassword);  
210 - config.setDriverClassName("org.postgresql.Driver");  
211 - config.setMaximumPoolSize(5);  
212 - config.setMinimumIdle(5);  
213 - config.setConnectionTimeout(60000);  
214 - config.setConnectionTestQuery("SELECT 1");  
215 -  
216 - dataSource = new HikariDataSource(config);  
217 - log.info("Hikari连接池配置完成");  
218 -  
219 - connection = dataSource.getConnection();  
220 - log.info("数据库连接成功");  
221 -  
222 - statement = connection.prepareStatement(selectSql);  
223 - log.info("执行SQL查询: {}", selectSql);  
224 -  
225 - resultSet = statement.executeQuery();  
226 - ResultSetMetaData metaData = resultSet.getMetaData();  
227 - int columnCount = metaData.getColumnCount();  
228 - log.info("查询结果集元数据获取成功,共{}列", columnCount);  
229 -  
230 - int rowCount = 0;  
231 - while (resultSet.next()) {  
232 - List<Object> result = new ArrayList<>(columnCount);  
233 - for (int index = 1; index <= columnCount; index++) {  
234 - int columnType = metaData.getColumnType(index);  
235 - Object value = SqlTypedValueUtils.getTypedValue(resultSet, index, columnType);  
236 - result.add(value);  
237 - }  
238 - resultList.add(result);  
239 - rowCount++;  
240 -  
241 - // 每处理1000行记录一次日志  
242 - if (rowCount % 1000 == 0) {  
243 - log.info("已处理{}行数据", rowCount);  
244 - }  
245 - }  
246 -  
247 - log.info("数据查询完成,共获取{}行数据", rowCount);  
248 -  
249 - } catch (SQLException e) {  
250 - log.error("数据库操作异常,URL: {}, 用户名: {}", jdbcUrl, jdbcUserName, e);  
251 - } catch (Exception e) {  
252 - log.error("初始化数据库连接或查询数据时发生异常", e);  
253 - } finally {  
254 - // 释放资源  
255 - try {  
256 - if (resultSet != null) resultSet.close();  
257 - if (statement != null) statement.close();  
258 - if (connection != null) connection.close();  
259 - log.info("数据库连接资源已释放");  
260 - } catch (SQLException e) {  
261 - log.error("关闭数据库资源时发生异常", e);  
262 - }  
263 -  
264 - if (dataSource != null) {  
265 - try {  
266 - dataSource.close();  
267 - log.info("HikariDataSource连接池已关闭");  
268 - } catch (Exception e) {  
269 - log.error("关闭HikariDataSource连接池时发生异常", e);  
270 - }  
271 - } 202 + // 调试日志
  203 + if (log.isTraceEnabled()) {
  204 + log.trace("生成设备状态: random={}, status={}", rand, status);
272 } 205 }
273 206
274 - log.info("数据库操作完成,返回{}条记录", resultList.size());  
275 - return resultList; 207 + return status;
276 } 208 }
277 } 209 }