Browse Source

四川肿瘤温控接口

huangws 8 tháng trước cách đây
mục cha
commit
5f8fafd5b3

+ 1 - 1
GetDataByRESTful/pom.xml

@@ -84,7 +84,7 @@
                 <version>${spring-boot.version}</version>
                 <configuration>
                     <mainClass>com.jyxt.getdatabyrestful.GetDataByRESTfulApplication</mainClass>
-                    <skip>true</skip>
+                    <skip>false</skip>
                 </configuration>
                 <executions>
                     <execution>

+ 2 - 2
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/GetDataByRESTfulApplication.java

@@ -1,6 +1,7 @@
 package com.jyxt.getdatabyrestful;
 
 import com.jyxt.getdatabyrestful.service.IBPSService;
+import com.jyxt.getdatabyrestful.service.PlatformService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,8 +32,7 @@ public class GetDataByRESTfulApplication implements CommandLineRunner {
     @Override
     public void run(String... args) throws Exception{
         log.info("<-------------new turn start...------------->");
-        handleData.getAllData();
-//        ibpsService.QryUndoData();
+        handleData.startHandleData();
         context.close(); // 直接关闭上下文
         log.info("<-------------this turn finish...------------->");
     }

+ 244 - 107
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/HandleData.java

@@ -1,142 +1,279 @@
 package com.jyxt.getdatabyrestful;
 
-import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jyxt.getdatabyrestful.service.ApiClientService;
-import com.jyxt.getdatabyrestful.view.repository.TemperatureEntityRepository;
+import com.jyxt.getdatabyrestful.service.IBPSService;
+import com.jyxt.getdatabyrestful.service.PlatformService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 @Component
 public class HandleData {
     private static final Logger log = LoggerFactory.getLogger(GetDataByRESTfulApplication.class);
 
-    private final ObjectMapper objectMapper = new ObjectMapper();  // 修复点:声明并初始化
+    private static final ObjectMapper mapper = new ObjectMapper();
 
     @Autowired
-    private ApiClientService apiClientService;
+    PlatformService platformService;
 
     @Autowired
-    private TemperatureEntityRepository temperatureEntityRepository;
-
-    @Value("${UrlAddr}")
-    private String UrlAddr;
-
-    @Value("${loginKey}")
-    private String loginKey;
-
-    public void startHandleData(String ID,String Bianzhishijian,String EntityName) {
-        log.info("ID: {}, Bianzhishijian: {}, EntityName: {}", ID, Bianzhishijian, EntityName);
-//        String retVal = apiClientService.sendGet("https://petstore-demo.apifox.com/pet/1");
-//        System.out.println(retVal);
-        System.out.println("---------------------------------------------------------------");
-        Map<String, Object> params = new HashMap<>();
-        params.put("loginName", "h241021fkj");  // 替换为实际值
-        params.put("password", "h241021fkj");    // 替换为实际值
-        String retVal2 = apiClientService.sendPost(UrlAddr+"/api/getToken",params);
-        System.out.println(retVal2);
-//        apiClientService.callThirdPartyApi(ID, Bianzhishijian, EntityName)
-//                .doOnNext(response -> {
-//                    if(response.isSuccess()) {
-//                        log.info("处理成功数据: {}", response.getData());
-//                        // 业务处理逻辑
-//                    } else {
-//                        log.warn("业务异常: {}", response.getMessage());
-//                    }
-//                })
-//                .doOnError(e -> log.error("处理失败", e))
-//                .subscribe(
-//                    response -> {}, // 成功处理(通常留空,因已用 doOnNext)
-//                    error -> log.error("全局捕获:", error) // 兜底异常处理
-//                );
+    IBPSService ibpsService;
 
+    public void startHandleData() {
+        log.info("---------------------------------------------------------------");
+        List<Map<String, String>> platformList = platformService.getAllData();
+        List<Map<String,Object>> configList = ibpsService.getConfList();
+        List<Map<String,Object>> undoList = ibpsService.getUndoList();
+        for(Map<String,Object> undoMap : undoList){
+            String areaName = undoMap.get("qu_yu_ming_cheng_").toString();
+            String RoomNo = undoMap.get("fang_jian_hao_").toString();
+            Map<String,Object> configMap = getConfMap(configList,areaName,RoomNo);
+            if (configMap.size() != 0){
+                String collectID = configMap.get("cai_ji_qi_id_").toString();
+                List<Map<String, String>> curPlatformList = getCurPlatformList(collectID,platformList);
+                if (curPlatformList.size() != 0){
+                    String id = undoMap.get("id_").toString();
+                    String JsonStr = undoMap.get("lie_biao_shu_ju_").toString();
+                    String timeSlot = getTimePeriod("1");
+                    String retJsonStr = handJsonStr(JsonStr,curPlatformList,timeSlot);
+                    String JsonFlag = checkJson(retJsonStr);
+                    String timeStr = getTimePeriod("0");
+                    String retStr = ibpsService.UpdateData("t_snwsdjkjlb",id,retJsonStr,JsonFlag, timeSlot, timeStr);
+                    if (retStr.equals("1")){
+                        log.info("update success");
+                    } else {
+                        log.info("update fail:"+retStr);
+                    }
+                }
+            }
+        }
     }
 
-    public void getAllData(){
-//        System.out.println("---------------------------------------------------------------");
-        String urlStr = UrlAddr+"api/getToken?"+loginKey;
-        log.info("1:url: {}", urlStr);
-        String retVal = apiClientService.sendGet(urlStr);
-        log.info("1:retVal: {}", retVal);
-        String token = "";
-        try {
-            // 解析JSON字符串
-            ObjectMapper mapper = new ObjectMapper();
-            Map<String, Object> response = mapper.readValue(retVal, new TypeReference<Map<String, Object>>() {});
+    public Map<String,Object> getConfMap(List<Map<String, Object>> configList, String areaName, String RoomNo){
+        Map<String,Object> configMap = new HashMap<>();
+        for(Map<String, Object> config : configList){
+            String curAreaName = config.get("qu_yu_").toString();
+            String curRoomNo = config.get("fang_jian_").toString();
+            if(areaName.equals(curAreaName) && RoomNo.equals(curRoomNo)){
+                configMap = config;
+            }
+        }
+        return configMap;
+    }
+
+    public List<Map<String, String>> getCurPlatformList(String collectID, List<Map<String, String>> platformList){
+        List<Map<String, String>> retList = new ArrayList<>();
+        for(Map<String, String> platformMap : platformList){
+            String curCollectID = platformMap.get("deviceAddr").toString();
+            if(curCollectID.equals(collectID)){
+                retList.add(platformMap);
+            }
+        }
+        return retList;
+    }
+
+    /**
+        * @ClassName HandleData
+        * @Author huangws
+        * @Description 模式0:返回当前时间(HH:mm格式)
+     * 模式1:返回时间段
+        * @Date 2025/8/11 16:46
+    **/
+    public static String getTimePeriod(String timeType) {
+        LocalTime now = LocalTime.now();
+
+        // 模式0:返回当前时间(HH:mm格式)
+        if ("0".equals(timeType)) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
+            return now.format(formatter);
+        }
+        // 模式1:返回时间段
+        else if ("1".equals(timeType)) {
+            LocalTime morningStart = LocalTime.of(6, 0);   // 6:00
+            LocalTime afternoonStart = LocalTime.of(12, 0); // 12:00
+            LocalTime eveningStart = LocalTime.of(18, 0);  // 18:00
 
-            // 提取data字段
-            Map<String, Object> data = (Map<String, Object>) response.get("data");
-            if (data != null) {
-                token = (String) data.get("token"); // 提取token值
-                log.info("Extracted token: {}", token);
+            if (now.isAfter(morningStart) && now.isBefore(afternoonStart)) {
+                return "上午";
+            } else if (now.equals(afternoonStart) ||
+                    (now.isAfter(afternoonStart) && now.isBefore(eveningStart))) {
+                return "下午";
             } else {
-                log.error("'data' field is missing in response");
+                return "其他时段";
             }
-        } catch (Exception e) {
-            log.error("JSON parsing failed", e);
         }
-        if (!token.isEmpty()) {
-            log.info("2: Requesting group list with token in header");
-            // 设置请求头
-            Map<String, String> headers = new HashMap<>();
-            headers.put("authorization", token);  // 关键修改:使用header传递token
-
-            // 发送带header的GET请求
-            retVal = apiClientService.sendGetWithHeaders(
-                    UrlAddr + "api/data/getRealTimeData",
-                    headers
-            );
-            log.info("2:retVal: {}", retVal);
-            try {
-                // 解析JSON响应
-                JsonNode rootNode = objectMapper.readTree(retVal);
-
-                // 检查状态码或message
-                if (rootNode.has("message") && "获取成功".equals(rootNode.get("message").asText())) {
-                    JsonNode dataNode = rootNode.get("data");
-
-                    if (dataNode.isArray()) {
-                        for (JsonNode groupNode : dataNode) {
-                            String deviceName = groupNode.has("deviceName")?groupNode.get("deviceName").asText() : "未知设备";
-                            String deviceAddr = groupNode.has("deviceAddr") ?String.valueOf(groupNode.get("deviceAddr").asInt()) : "未知地址";
-                            String deviceStatus = groupNode.has("deviceStatus")?groupNode.get("deviceStatus").asText() : "未知状态";
-                            JsonNode dataItem = groupNode.get("dataItem");
-
-                            if(!Objects.equals(dataItem.toString(), "null") && dataItem.isArray() && Objects.equals(deviceStatus, "normal")) {
-                                for (JsonNode registerItem : dataItem) {
-                                    if (registerItem.has("registerItem") && registerItem.get("registerItem").isArray()) {
-                                        for (JsonNode item : registerItem.get("registerItem")) {
-                                            String registerName = item.has("registerName")?item.get("registerName").asText() : "未命名寄存器";
-                                            String data = item.has("data")?item.get("data").asText() : "无数据";
-                                            log.info("deviceName: {}, deviceAddr: {}, registerName: {}, data: {}",deviceName, deviceAddr, registerName, data);
-
-
-                                        }
-                                    }
+        // 处理无效参数
+        else {
+            throw new IllegalArgumentException("无效参数: 只支持\"0\"或\"1\"");
+        }
+    }
+
+    /**
+     * 20250619 huangws
+     * 处理json串,将获得的实际结果填入json串再返回
+     * @param JsonStr
+     * @param curPlatformList
+     * @param timeSlot
+     * @return throws JsonProcessingException
+     * @throws JsonProcessingException
+     */
+    public String handJsonStr(String JsonStr, List<Map<String, String>> curPlatformList, String timeSlot) {
+        String retVal = JsonStr;
+        log.info("org json string:" + JsonStr);
+        log.info("curPlatformList size: " + (curPlatformList != null ? curPlatformList.size() : 0));
+
+        if (curPlatformList == null || curPlatformList.isEmpty()) {
+            log.warn("curPlatformList is empty, return original JSON");
+            return retVal;
+        }
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode rootNode = mapper.readTree(JsonStr);
+
+            if (rootNode.isArray()) {
+                ArrayNode arrayNode = (ArrayNode) rootNode;
+
+                // 遍历所有平台数据
+                for (Map<String, String> platformMap : curPlatformList) {
+                    String registerName = platformMap.get("registerName");
+                    String dataValue = platformMap.get("data");
+
+                    if (registerName == null || dataValue == null) {
+                        log.warn("Missing registerName or data in platformMap: " + platformMap);
+                        continue;
+                    }
+
+                    String targetLabel = timeSlot + registerName; // 如"上午温度"
+                    boolean found = false;
+
+                    // 在JSON数组中查找匹配项
+                    for (int i = 0; i < arrayNode.size(); i++) {
+                        JsonNode item = arrayNode.get(i);
+                        if (!item.isObject()) continue;
+
+                        ObjectNode objNode = (ObjectNode) item;
+                        String label = objNode.path("label").asText("");
+
+                        if (targetLabel.equals(label)) {
+                            found = true;
+
+                            // 更新value字段
+                            objNode.put("value", dataValue);
+
+                            // 处理fixValue和result
+                            String fixValueStr = objNode.path("fixValue").asText("");
+                            double dataVal = parseDoubleSafe(dataValue, 0.0);
+                            double resultVal = dataVal;
+
+                            if (!fixValueStr.isEmpty()) {
+                                double fixVal = parseDoubleSafe(fixValueStr, 0.0);
+                                resultVal = dataVal + fixVal;
+                            }
+
+                            // 更新result字段
+                            objNode.put("result", String.valueOf(resultVal));
+
+                            // 处理范围检查
+                            JsonNode rangeNode = objNode.path("range");
+                            if (rangeNode.isArray() && rangeNode.size() >= 2) {
+                                double min = parseDoubleSafe(rangeNode.get(0).asText(), Double.MIN_VALUE);
+                                double max = parseDoubleSafe(rangeNode.get(1).asText(), Double.MAX_VALUE);
+
+                                if (min != Double.MIN_VALUE && max != Double.MAX_VALUE) {
+                                    String status = (resultVal >= min && resultVal <= max) ? "正常" : "失控";
+                                    objNode.put("status", status);
+                                } else {
+                                    objNode.put("status", "范围数据错误");
+                                    log.warn("Invalid range data for label: " + label);
                                 }
+                            } else {
+                                objNode.put("status", "范围数据缺失");
+                                log.warn("Missing range data for label: " + label);
                             }
+
+                            break; // 找到匹配项后跳出内层循环
                         }
-                    } else {
-                        log.warn("Data field is not an array!");
                     }
-                } else {
-                    String errMsg = rootNode.has("message") ?
-                            rootNode.get("message").asText() : "Unknown error";
-                    log.error("API request failed: {}", errMsg);
+
+                    if (!found) {
+                        log.warn("No matching label found for: " + targetLabel);
+                    }
                 }
-            } catch (Exception e) {
-                log.error("JSON parsing failed", e);
+
+                retVal = mapper.writeValueAsString(rootNode);
             }
+        } catch (Exception e) {
+            log.error("处理JSON时发生错误: " + e.getMessage(), e);
         }
+
+        return retVal;
     }
 
+    private double parseDoubleSafe(String value, double defaultValue) {
+        if (value == null || value.isEmpty()) {
+            return defaultValue;
+        }
+        try {
+            return Double.parseDouble(value);
+        } catch (NumberFormatException e) {
+            log.warn("数值格式错误: " + value + ", 使用默认值: " + defaultValue);
+            return defaultValue;
+        }
+    }
+
+ /**
+     * @ClassName HandleData
+     * @Author huangws
+     * @Description 
+     * @Date 2025/8/11 14:57
+ **/
+    public String checkJson(String retJsonStr) {
+        boolean allResultsValid = true;
+        boolean hasOutOfControl = false;
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode rootNode = mapper.readTree(retJsonStr);
+
+            if (rootNode.isArray()) {
+                for (JsonNode item : rootNode) {
+                    // 检查result字段是否有效
+                    JsonNode resultNode = item.get("result");
+                    if (resultNode == null || !resultNode.isTextual() || resultNode.asText().isEmpty()) {
+                        allResultsValid = false;
+                    }
+
+                    // 检查status字段是否为"失控"
+                    JsonNode statusNode = item.get("status");
+                    if (statusNode != null && statusNode.isTextual()) {
+                        String status = statusNode.asText();
+                        if ("失控".equals(status)) {
+                            hasOutOfControl = true;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("校验JSON完成状态时发生错误: " + e.getMessage(), e);
+            allResultsValid = false;
+        }
+
+        // 构建返回结果
+        String completionStatus = allResultsValid ? "1" : "0";
+        String controlStatus = hasOutOfControl ? "1" : "0";
+        return completionStatus + "^" + controlStatus;
+    }
+
+
 }

+ 99 - 24
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/service/IBPSService.java

@@ -1,44 +1,119 @@
 package com.jyxt.getdatabyrestful.service;
 
-import com.jyxt.getdatabyrestful.HandleData;
-import com.jyxt.getdatabyrestful.view.TemperatureEntity;
-import com.jyxt.getdatabyrestful.view.repository.TemperatureEntityRepository;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
+import java.sql.Timestamp;
+import java.util.*;
 
 @Component
 public class IBPSService {
 
     private static final Logger log = LoggerFactory.getLogger(IBPSService.class);
 
-    @Autowired
-    private TemperatureEntityRepository temperatureEntityRepository;
+    @Value("${config.qrymode}")
+    private String qrymode;
 
     @Autowired
-    private HandleData handleDataService;
-
-//    public void   QryUndoData(){
-//        List<TemperatureEntity> qiList = temperatureEntityRepository.query();
-//        if(qiList != null){
-//            for (TemperatureEntity te : qiList) {
-//                try {
-//                    String Id = te.getId();
-//                    String Bianzhishijian = te.getBianzhishijian();
-//                    String EntityName = te.getEntityname();
-//                    handleDataService.startHandleData(Id,Bianzhishijian,EntityName);
-//                    break;
-//                }catch (Exception ex){
-//                    log.error(ex.getMessage());
-//                }
+    private JdbcTemplate jdbcTemplate;
+
+
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+
+    public List<Map<String,Object>> getUndoList(){
+        List<Map<String,Object>> undoList = new ArrayList<>();
+        String sqlQryUndo = "SELECT * from t_snwsdjkjlb where date(create_time_)=CURRENT_DATE and shi_fou_guo_shen_='待处理'";
+        log.info("excute sql:"+sqlQryUndo);
+        undoList = jdbcTemplate.queryForList(sqlQryUndo);
+        return undoList;
+    }
+
+    public List<Map<String,Object>> getConfList(){
+        List<Map<String,Object>> configList = new ArrayList<>();
+        String sqlQryConf = "select * from t_wsdcjpzb where shi_fou_qi_yong_='是'";
+        log.info("excute sql:"+sqlQryConf);
+        configList = jdbcTemplate.queryForList(sqlQryConf);
+        return configList;
+    }
+
+
+    public void saveMonitoredData(String undoMonitorID, String hasFinished, String contrlFlag, String newJsonStr){
+//        final String sql = hasFinished.equals("1")
+//                ? "update t_bxwdjkjlb set lie_biao_shu_ju_=?, update_time_=?, bei_zhu_='自动导入', shi_kong_zhuang_t =?, shi_fou_guo_shen_='已完成' where id_=?"
+//                : "update t_bxwdjkjlb set lie_biao_shu_ju_=?, update_time_=?, bei_zhu_='自动导入', shi_kong_zhuang_t =? where id_=?";
+//        jdbcTemplate.update(new PreparedStatementCreator() {
+//            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
+//                PreparedStatement prepareStatement = connection.prepareStatement(sql);
+//                prepareStatement.setString(1, newJsonStr);
+//                prepareStatement.setTimestamp(2, new Timestamp(System.currentTimeMillis()));  // 设置当前时间
+//                prepareStatement.setString(3, contrlFlag);
+//                prepareStatement.setString(4, undoMonitorID);
+//                return prepareStatement;
 //            }
-//        }
-//    };
+//        });
+    }
 
-    public void InsertUnControlRecord(){
+    public String UpdateData(String TableName, String id, String retJsonStr, String JsonFlag, String timeSlot, String timeStr){
+        // 解析状态标志
+        String[] flags = JsonFlag.split("\\^"); // 注意:^是正则表达式特殊字符,需要转义
+        String finishFlag = flags[0];
+        String contrlFlag = flags[1];
+        // 准备更新时间和失控状态
+//        String updateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+        Timestamp updateTime = new Timestamp(new Date().getTime());
+        String shiKongZhuangT = "0".equals(contrlFlag) ? "正常" : "失控";
 
+        String sqlTime = "";
+        if(timeSlot.equals("上午")){
+            sqlTime = "shang_wu_jian_kon";
+        }
+        if(timeSlot.equals("下午")){
+            sqlTime = "xia_wu_jian_kong_";
+        }
+        // 构建SQL语句
+        String sql;
+        Object[] params;
+
+        if ("1".equals(finishFlag)) {
+            // 已完成的情况
+            sql = "UPDATE " + TableName + " SET lie_biao_shu_ju_=?, update_time_=?, bei_zhu_='自动导入', "
+                    + "shi_kong_zhuang_t=?, shi_fou_guo_shen_='已完成',"+sqlTime+"=? WHERE id_=?";
+            params = new Object[]{retJsonStr, updateTime, shiKongZhuangT, timeStr, id};
+        } else {
+            // 未完成的情况
+            sql = "UPDATE " + TableName + " SET lie_biao_shu_ju_=?, update_time_=?, bei_zhu_='自动导入', "
+                    + "shi_kong_zhuang_t=?,"+sqlTime+"=? WHERE id_=?";
+            params = new Object[]{retJsonStr, updateTime, shiKongZhuangT, timeStr, id};
+        }
+        try {
+            // 执行更新操作
+            int affectedRows = 0;
+            if(qrymode.equals("0")){
+                log.info("Ready to update:TableName,{},id:{},retJsonStr:{},JsonFlag:{}",TableName,id,retJsonStr,JsonFlag);
+                affectedRows = jdbcTemplate.update(sql, params);
+            } else {
+                log.info("qry mode,TableName,{},id:{},retJsonStr:{},JsonFlag:{}",TableName,id,retJsonStr,JsonFlag);
+                affectedRows = 1;
+            }
+
+            if (affectedRows > 0) {
+                return "1"; // 更新成功
+            } else {
+                log.warn("更新失败,未找到匹配的记录。表: " + TableName + ", ID: " + id);
+                return "0"; // 更新失败
+            }
+        } catch (Exception e) {
+            log.error("数据库更新失败: " + e.getMessage(), e);
+            return "0"; // 更新失败
+        }
     }
+
+
 }

+ 127 - 0
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/service/PlatformService.java

@@ -0,0 +1,127 @@
+package com.jyxt.getdatabyrestful.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Component
+public class PlatformService {
+
+    private static final Logger log = LoggerFactory.getLogger(PlatformService.class);
+
+    private final ObjectMapper objectMapper = new ObjectMapper();  // 修复点:声明并初始化
+
+    @Autowired
+    private ApiClientService apiClientService;
+
+
+    @Value("${UrlAddr}")
+    private String UrlAddr;
+
+    @Value("${loginKey}")
+    private String loginKey;
+
+    public List<Map<String, String>> getAllData(){
+//        System.out.println("---------------------------------------------------------------");
+        List<Map<String, String>> outputList = new ArrayList<>();
+        String urlStr = UrlAddr+"api/getToken?"+loginKey;
+        log.info("1:url: {}", urlStr);
+        String retVal = apiClientService.sendGet(urlStr);
+        log.info("1:retVal: {}", retVal);
+        String token = "";
+        try {
+            // 解析JSON字符串
+            ObjectMapper mapper = new ObjectMapper();
+            Map<String, Object> response = mapper.readValue(retVal, new TypeReference<Map<String, Object>>() {});
+
+            // 提取data字段
+            Map<String, Object> data = (Map<String, Object>) response.get("data");
+            if (data != null) {
+                token = (String) data.get("token"); // 提取token值
+                log.info("Extracted token: {}", token);
+            } else {
+                log.error("'data' field is missing in response");
+            }
+        } catch (Exception e) {
+            log.error("JSON parsing failed", e);
+        }
+        if (!token.isEmpty()) {
+            log.info("2: Requesting RealTimeData with token in header");
+            // 设置请求头
+            Map<String, String> headers = new HashMap<>();
+            headers.put("authorization", token);  // 关键修改:使用header传递token
+
+            // 发送带header的GET请求
+            retVal = apiClientService.sendGetWithHeaders(
+                    UrlAddr + "api/data/getRealTimeData",
+                    headers
+            );
+            log.info("2:retVal: {}", retVal);
+            try {
+                // 解析JSON响应
+                JsonNode rootNode = objectMapper.readTree(retVal);
+
+                // 检查状态码或message
+                if (rootNode.has("message") && "获取成功".equals(rootNode.get("message").asText())) {
+                    JsonNode dataNode = rootNode.get("data");
+
+                    if (dataNode.isArray()) {
+                        for (JsonNode groupNode : dataNode) {
+                            String deviceName = groupNode.has("deviceName") ? groupNode.get("deviceName").asText() : "未知设备";
+                            String deviceAddr = groupNode.has("deviceAddr") ? String.valueOf(groupNode.get("deviceAddr").asInt()) : "未知地址";
+                            String deviceStatus = groupNode.has("deviceStatus") ? groupNode.get("deviceStatus").asText() : "未知状态";
+                            JsonNode dataItem = groupNode.get("dataItem");
+
+                            // 修复1: 安全检查 dataItem (防止 null 和 NullNode)
+                            if (dataItem != null && !dataItem.isNull() && dataItem.isArray() && "normal".equals(deviceStatus)) {
+                                for (JsonNode registerItem : dataItem) {
+                                    if (registerItem == null || !registerItem.has("registerItem")) {
+                                        log.warn("registerItem is null or missing registerItem field");
+                                        continue;
+                                    }
+                                    JsonNode registerItems = registerItem.get("registerItem");
+
+                                    // 修复2: 安全检查 registerItems 是否为有效数组
+                                    if (registerItems != null && registerItems.isArray()) {
+                                        // 修复3: 每个寄存器创建独立 Map (移入内层循环)
+                                        for (JsonNode item : registerItems) {  // 直接使用已获取的 registerItems
+                                            Map<String, String> sensor = new HashMap<>();  // 每次循环新建 Map
+                                            String registerName = item.has("registerName") ? item.get("registerName").asText() : "未命名寄存器";
+                                            String data = item.has("data") ? item.get("data").asText() : "无数据";
+                                            // 填充数据
+                                            sensor.put("deviceName", deviceName);
+                                            sensor.put("deviceAddr", deviceAddr);
+                                            sensor.put("registerName", registerName);
+                                            sensor.put("data", data);
+
+                                            log.info("deviceName: {}, deviceAddr: {}, registerName: {}, data: {}",
+                                                    deviceName, deviceAddr, registerName, data);
+                                            outputList.add(sensor);  // 添加独立寄存器数据
+                                        }
+                                        log.warn("Processed {} register items", registerItems.size());
+                                    }
+                                }
+                            }
+                        }
+                    } else {
+                        log.warn("Data field is not an array!");
+                    }
+                } else {
+                    String errMsg = rootNode.has("message") ?
+                            rootNode.get("message").asText() : "Unknown error";
+                    log.error("API request failed: {}", errMsg);
+                }
+            } catch (Exception e) {
+                log.error("JSON parsing failed", e);
+            }
+        }
+        return outputList;
+    }
+}

+ 0 - 94
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/view/TemperatureEntity.java

@@ -1,94 +0,0 @@
-package com.jyxt.getdatabyrestful.view;
-
-public class TemperatureEntity {
-    private String id;
-    private String bianzhishijian;
-    private String caijiqiid;
-    private String entitytype;
-    private String entityname;
-    private String entityname2;
-    private String entityid;
-    private String status;
-    private String monitordate;
-    private String monitordetail;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getBianzhishijian() {
-        return bianzhishijian;
-    }
-
-    public void setBianzhishijian(String bianzhishijian) {
-        this.bianzhishijian = bianzhishijian;
-    }
-
-    public String getCaijiqiid() {
-        return caijiqiid;
-    }
-
-    public void setCaijiqiid(String caijiqiid) {
-        this.caijiqiid = caijiqiid;
-    }
-
-    public String getEntitytype() {
-        return entitytype;
-    }
-
-    public void setEntitytype(String entitytype) {
-        this.entitytype = entitytype;
-    }
-
-    public String getEntityname() {
-        return entityname;
-    }
-
-    public void setEntityname(String entityname) {
-        this.entityname = entityname;
-    }
-
-    public String getEntityname2() {
-        return entityname2;
-    }
-
-    public void setEntityname2(String entityname2) {
-        this.entityname2 = entityname2;
-    }
-
-    public String getEntityid() {
-        return entityid;
-    }
-
-    public void setEntityid(String entityid) {
-        this.entityid = entityid;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getMonitordate() {
-        return monitordate;
-    }
-
-    public void setMonitordate(String monitordate) {
-        this.monitordate = monitordate;
-    }
-
-    public String getMonitordetail() {
-        return monitordetail;
-    }
-
-    public void setMonitordetail(String monitordetail) {
-        this.monitordetail = monitordetail;
-    }
-}

+ 0 - 49
GetDataByRESTful/src/main/java/com/jyxt/getdatabyrestful/view/repository/TemperatureEntityRepository.java

@@ -1,49 +0,0 @@
-package com.jyxt.getdatabyrestful.view.repository;
-
-import com.jyxt.getdatabyrestful.view.TemperatureEntity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.stereotype.Repository;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.List;
-
-@Repository
-public class TemperatureEntityRepository {
-    @Autowired
-    private JdbcTemplate jdbcTemplate;
-
-    private static final Logger log = LoggerFactory.getLogger(TemperatureEntityRepository.class);
-
-//    @Value("${fetch.sqlGetUndo}")
-//    private String sql;
-//
-//    @Value("${config.qrymode}")
-//    private String qryMode;
-//
-//    public List<TemperatureEntity> query(){
-//        log.info("excute sql:" + sql);
-//        List<TemperatureEntity> result = jdbcTemplate.query(
-//                sql,
-//                new RowMapper<TemperatureEntity>() {
-//                    public TemperatureEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
-//                        TemperatureEntity te = new TemperatureEntity();
-//                        te.setId(rs.getString("id_"));
-//                        te.setBianzhishijian(rs.getString("bian_zhi_shi_jian"));
-//                        te.setEntityname(rs.getString("bing_xiang_bian_h"));
-//                        return te;
-//                    }
-//                });
-//        if (result.isEmpty()) {
-//            log.info("-------------no data finded,nothing to do...-------------");
-//        }
-//        return result;
-//    }
-
-}

+ 2 - 3
GetDataByRESTful/src/main/resources/application.properties

@@ -1,15 +1,14 @@
 spring.application.name=GetDataByRESTful
 #spring.datasource.jdbc-url = jdbc:mysql://demo2.local:3306/klims-ibps3?characterEncoding=utf8&useSSL=false
-spring.datasource.jdbc-url = jdbc:mysql://192.168.2.201:3306/klims-ibps3?characterEncoding=utf8&useSSL=false
+spring.datasource.jdbc-url = jdbc:mysql://localhost:3306/klims-ibps3?characterEncoding=utf8&useSSL=false
 spring.datasource.username = root
 spring.datasource.password = test001
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-#fetch.sqlGetUndo=select id_,bian_zhi_shi_jian,zhi_liang_zhi_bia,yuan_shi_shu_ju_ from t_zlzbpjzb where zhuang_tai_='\u5f85\u5904\u7406'
 logging.file.name=logs/GetDataByRESTful.log
 # level:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
 logging.level.root=INFO
 #1 or 0,1 means only qry,0 means update
-config.qrymode=0
+config.qrymode=1
 UrlAddr=http://www.0531yun.com/
 loginKey=loginName=h241021fkj&password=h241021fkj
 api.resources.path=/ibps/platform/v3/auth/resources/getDefaultResources