Showing
1 changed file
with
107 additions
and
175 deletions
| ... | ... | @@ -2,17 +2,12 @@ package com.iot.scheduler.service.chizhou; |
| 2 | 2 | |
| 3 | 3 | import com.alibaba.fastjson.JSON; |
| 4 | 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 | 5 | import lombok.extern.slf4j.Slf4j; |
| 9 | 6 | import org.springframework.stereotype.Service; |
| 10 | 7 | |
| 11 | -import java.sql.*; | |
| 12 | 8 | import java.text.MessageFormat; |
| 13 | 9 | import java.text.SimpleDateFormat; |
| 14 | 10 | import java.util.*; |
| 15 | -import java.util.Date; | |
| 16 | 11 | |
| 17 | 12 | /** |
| 18 | 13 | * 池州经开区数据上传 |
| ... | ... | @@ -25,101 +20,80 @@ public class CzDeviceReportService { |
| 25 | 20 | String username = "admin"; |
| 26 | 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 | 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 | 54 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 103 | 55 | String formattedDate = sdf.format(new Date()); |
| 104 | 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 | 66 | int successCount = 0; |
| 108 | 67 | int failCount = 0; |
| 109 | 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 | 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 | 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 | 98 | Map<String, Object> properties = new HashMap<>(5); |
| 125 | 99 | properties.put("type", 1); |
| ... | ... | @@ -167,6 +141,8 @@ public class CzDeviceReportService { |
| 167 | 141 | |
| 168 | 142 | // 任务完成,输出统计信息 |
| 169 | 143 | log.info("========== 设备状态上报任务完成 =========="); |
| 144 | + log.info("任务完成时间: {}", new Date()); | |
| 145 | + log.info("设备总数: {}台", deviceIdList.size()); | |
| 170 | 146 | log.info("成功上报: {}台", successCount); |
| 171 | 147 | log.info("失败上报: {}台", failCount); |
| 172 | 148 | |
| ... | ... | @@ -174,104 +150,60 @@ public class CzDeviceReportService { |
| 174 | 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 | 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 | 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 | } |
| \ No newline at end of file | ... | ... |