Преглед на файлове

增加风机数据查询功能

wangb преди 16 часа
родител
ревизия
f001cfba5f

+ 51 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/controller/ProBasicOriginalCodeController.java

@@ -0,0 +1,51 @@
+package com.gyee.runeconomy.controller;
+
+import com.gyee.common.model.PointData;
+import com.gyee.runeconomy.model.ProBasicOriginalCode;
+import com.gyee.runeconomy.service.auto.IProBasicOriginalCodeService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2026-01-15
+ */
+@RestController
+@RequestMapping("/original")
+public class ProBasicOriginalCodeController {
+
+    @Resource
+    private IProBasicOriginalCodeService proBasicOriginalCodeService;
+
+    @GetMapping("/realData")
+    public Map<String, List<ProBasicOriginalCode>> getRealData(@RequestParam(value = "windturbineIds") String windturbineIds,
+                                                               @RequestParam(value = "uniformCodes") String uniformCodes,
+                                                               @RequestParam(value = "time") long time) throws Exception {
+        return proBasicOriginalCodeService.realData(windturbineIds, uniformCodes, time);
+    }
+
+
+    @GetMapping("/historyData")
+    public List<PointData> getHistoryData(@RequestParam(value = "startTs") long startTs,
+                                          @RequestParam(value = "endTs") long endTs,
+                                          @RequestParam(value = "code") String code,
+                                          @RequestParam(value = "interval", defaultValue = "60", required = false) int interval) throws Exception {
+        return proBasicOriginalCodeService.historyData(startTs, endTs, code, interval);
+    }
+
+
+    @GetMapping("/code")
+    private List<ProBasicOriginalCode> getData(@RequestParam(value = "modelId") String modelId,
+                                                            @RequestParam(value = "query") String query) {
+        return proBasicOriginalCodeService.getData(modelId,query);
+    }
+
+
+}

+ 32 - 1
runeconomy-xk/src/main/java/com/gyee/runeconomy/init/CacheContext.java

@@ -7,6 +7,7 @@ import com.gyee.common.model.StringUtils;
 import com.gyee.runeconomy.config.GyeeConfig;
 import com.gyee.runeconomy.controller.agc.AgcDeviateConfig;
 import com.gyee.runeconomy.controller.agc.FileService;
+import com.gyee.runeconomy.model.ProBasicOriginalCode;
 import com.gyee.runeconomy.model.TemperatureComponentInfo;
 import com.gyee.runeconomy.model.TemperatureInfo;
 import com.gyee.runeconomy.model.auto.*;
@@ -94,6 +95,9 @@ public class CacheContext implements CommandLineRunner {
     @Resource
     GyeeConfig config;
 
+    @Resource
+    private IProBasicOriginalCodeService proBasicOriginalCodeService;
+
     /**
      * 温度矩阵信息
      */
@@ -196,6 +200,10 @@ public class CacheContext implements CommandLineRunner {
 
     private final List<String> order = Arrays.asList("风机信息", "主轴", "发电机", "齿轮箱", "变桨", "液压", "其他");
 
+    public static Map<String, List<ProBasicOriginalCode>> oriMap = new HashMap<>();
+
+    public static List<ProBasicOriginalCode> oriLists = new ArrayList<>();
+
     @Override
     public void run(String... args) throws Exception {
         logger.info("缓存开始------------------------------------------------------------");
@@ -690,6 +698,7 @@ public class CacheContext implements CommandLineRunner {
         cacheNewPoints();
         cacheAGC();
         initTemperatureInfo();
+        initOriginalCode();
 
         logger.info("缓存结束------------------------------------------------------------");
     }
@@ -767,7 +776,7 @@ public class CacheContext implements CommandLineRunner {
                         int index2 = order.indexOf(info2.getName());
                         return Integer.compare(index1, index2);
                     };
-                   temperatureComponentInfos.sort(comparator);
+                    temperatureComponentInfos.sort(comparator);
                 }
 
             }
@@ -783,4 +792,26 @@ public class CacheContext implements CommandLineRunner {
         }
     }
 
+    private void initOriginalCode() {
+        List<ProBasicOriginalCode> orils = proBasicOriginalCodeService.list();
+        oriLists.addAll(orils);
+        // 按 getRank 排序后,再按 getWindturbineId 分组
+        oriMap = orils.stream()
+                .sorted(Comparator.comparing(ProBasicOriginalCode::getRank))
+                .collect(Collectors.toMap(
+                        item -> String.valueOf(item.getWindturbineId()),
+                        item -> {
+                            List<ProBasicOriginalCode> list = new ArrayList<>();
+                            list.add(item);
+                            return list;
+                        },
+                        (existing, replacement) -> {
+                            existing.addAll(replacement);
+                            return existing;
+                        },
+                        TreeMap::new
+                ));
+
+    }
+
 }

+ 16 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/mapper/ProBasicOriginalCodeMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.runeconomy.mapper;
+
+import com.gyee.runeconomy.model.ProBasicOriginalCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2026-01-15
+ */
+public interface ProBasicOriginalCodeMapper extends BaseMapper<ProBasicOriginalCode> {
+
+}

+ 89 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/model/ProBasicOriginalCode.java

@@ -0,0 +1,89 @@
+package com.gyee.runeconomy.model;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 原始数据测点表
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("pro_basic_original_code")
+public class ProBasicOriginalCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 风机id
+     */
+    @TableField("windturbine_id")
+    private Integer windturbineId;
+
+    /**
+     * 测点
+     */
+    @TableField("code")
+    private String code;
+
+    /**
+     * 描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 单位
+     */
+    @TableField("unit")
+    private String unit;
+
+    /**
+     * 机型id
+     */
+    @TableField("model_id")
+    private String modelId;
+
+    /**
+     * 机型名称
+     */
+    @TableField("model_name")
+    private String modelName;
+
+    /**
+     * 唯一编码
+     */
+    @TableField("uniform_code")
+    private String uniformCode;
+
+    /**
+     * 排序
+     */
+    @TableField("rank")
+    private BigDecimal rank;
+
+    /**
+     * 时间
+     */
+    @TableField(exist = false)
+    private long time;
+
+    /**
+     * 数据列表
+     */
+    @TableField(exist = false)
+    private String value;
+
+
+}

+ 26 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProBasicOriginalCodeService.java

@@ -0,0 +1,26 @@
+package com.gyee.runeconomy.service.auto;
+
+import com.gyee.common.model.PointData;
+import com.gyee.runeconomy.model.ProBasicOriginalCode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author
+ * @since 2026-01-15
+ */
+public interface IProBasicOriginalCodeService extends IService<ProBasicOriginalCode> {
+
+    List<PointData> historyData(long startTs, long endTs, String code, int interval) throws Exception;
+
+
+    Map<String, List<ProBasicOriginalCode>> realData(String windturbineIds, String uniformCodes, long time) throws Exception;
+
+    List<ProBasicOriginalCode> getData(String modelId, String query);
+}

+ 93 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProBasicOriginalCodeServiceImpl.java

@@ -0,0 +1,93 @@
+package com.gyee.runeconomy.service.auto.impl;
+
+import com.gyee.common.model.PointData;
+import com.gyee.runeconomy.init.CacheContext;
+import com.gyee.runeconomy.model.ProBasicOriginalCode;
+import com.gyee.runeconomy.mapper.ProBasicOriginalCodeMapper;
+import com.gyee.runeconomy.service.auto.IProBasicOriginalCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.runeconomy.util.realtimesource.IEdosUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2026-01-15
+ */
+@Service
+public class ProBasicOriginalCodeServiceImpl extends ServiceImpl<ProBasicOriginalCodeMapper, ProBasicOriginalCode> implements IProBasicOriginalCodeService {
+    @Resource
+    private IEdosUtil edosUtil;
+
+
+    @Override
+    public Map<String, List<ProBasicOriginalCode>> realData(String windturbineIds, String uniformCodes, long time) throws Exception {
+        Map<String, List<ProBasicOriginalCode>> map = new HashMap<>();
+        String[] windturbineId = windturbineIds.split(",");
+        String[] uniformCode = uniformCodes.split(",");
+        for (String wt : windturbineId) {
+            List<ProBasicOriginalCode> orils = CacheContext.oriMap.get(wt);
+            List<String> codes = orils.stream()
+                    .filter(ori -> ori.getUniformCode() != null &&
+                            Arrays.asList(uniformCode).contains(ori.getUniformCode()))
+                    .map(ProBasicOriginalCode::getCode)
+                    .collect(Collectors.toList());
+            List<PointData> histMatrix = edosUtil.getHistMatrix(codes, time);
+            List<ProBasicOriginalCode> oriList = new ArrayList<>();
+            for (PointData pointData : histMatrix) {
+                for (ProBasicOriginalCode ori : orils) {
+                    if (pointData.getEdnaId().equals(ori.getCode())) {
+                        ori.setValue(pointData.getPointValue());
+                        oriList.add(ori);
+                    }
+                }
+                map.put(wt, oriList);
+            }
+        }
+        return new TreeMap<>(map);
+    }
+
+
+    @Override
+    public List<PointData> historyData(long startTs, long endTs, String code, int interval) throws Exception {
+        return edosUtil.getHistoryDatasSnap(code, startTs, endTs, interval);
+    }
+
+
+    @Override
+    public List<ProBasicOriginalCode> getData(String modelId, String query) {
+        List<ProBasicOriginalCode> oriLists = CacheContext.oriLists;
+
+        List<ProBasicOriginalCode> description = new ArrayList<>(oriLists.stream()
+                .collect(Collectors.toMap(
+                        ProBasicOriginalCode::getDescription,
+                        item -> item,
+                        (existing, replacement) -> existing,
+                        LinkedHashMap::new
+                ))
+                .values());
+
+        if (null != modelId && !modelId.trim().isEmpty() && !"".equals(modelId)) {
+            description = description.stream()
+                    .filter(ori -> ori.getModelId().equals(modelId))
+                    .collect(Collectors.toList());
+        }
+
+        if (null != query && !query.trim().isEmpty() && !"".equals(query)) {
+            description = description.stream()
+                    .filter(ori -> ori.getDescription().contains(query))
+                    .collect(Collectors.toList());
+        }
+        return description;
+
+    }
+
+
+}