Procházet zdrojové kódy

增加报表pro_econ_equipment_info_js查询-修改接口

wangb před 1 měsícem
rodič
revize
1896c590c1

+ 5 - 4
runeconomy-xk/src/main/java/com/gyee/runeconomy/controller/ProBasicOriginalCodeController.java

@@ -35,16 +35,17 @@ public class ProBasicOriginalCodeController {
     @GetMapping("/historyData")
     public List<PointData> getHistoryData(@RequestParam(value = "startTs") long startTs,
                                           @RequestParam(value = "endTs") long endTs,
-                                          @RequestParam(value = "code") String code,
+                                          @RequestParam(value = "windturbineId") String windturbineId,
+                                          @RequestParam(value = "uniformCode") String uniformCode,
                                           @RequestParam(value = "interval", defaultValue = "60", required = false) int interval) throws Exception {
-        return proBasicOriginalCodeService.historyData(startTs, endTs, code, interval);
+        return proBasicOriginalCodeService.historyData(startTs, endTs, windturbineId, uniformCode, interval);
     }
 
 
     @GetMapping("/code")
     private List<ProBasicOriginalCode> getData(@RequestParam(value = "modelId") String modelId,
-                                                            @RequestParam(value = "query") String query) {
-        return proBasicOriginalCodeService.getData(modelId,query);
+                                               @RequestParam(value = "query") String query) {
+        return proBasicOriginalCodeService.getData(modelId, query);
     }
 
 

+ 30 - 4
runeconomy-xk/src/main/java/com/gyee/runeconomy/controller/ProEconEquipmentInfoJsController.java

@@ -1,21 +1,47 @@
 package com.gyee.runeconomy.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.gyee.runeconomy.model.ProEconEquipmentInfoJs;
+import com.gyee.runeconomy.service.ProEconEquipmentInfoJsService;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author wang
  * @since 2026-01-21
  */
 @RestController
-@RequestMapping("/proEconEquipmentInfoJs")
+@RequestMapping("/equipmentInfoJs")
 public class ProEconEquipmentInfoJsController {
 
+    @Resource
+    private ProEconEquipmentInfoJsService proEconEquipmentInfoJsService;
+
+    /**
+     * 查询单个记录
+     */
+    @PostMapping("/query")
+    public  List<ProEconEquipmentInfoJs> query(@RequestBody Map<String, List<String>> name) {
+
+        return proEconEquipmentInfoJsService.query(name);
+
+    }
+
+    /**
+     * 更新记录
+     */
+    @PutMapping
+    public boolean update(@RequestBody List<ProEconEquipmentInfoJs> jsls) {
+        return proEconEquipmentInfoJsService.update(jsls);
+    }
+
+
 }
 

+ 1 - 10
runeconomy-xk/src/main/java/com/gyee/runeconomy/model/ProEconEquipmentInfoJs.java

@@ -8,10 +8,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * <p>
- * 
- * </p>
- *
  * @author wang
  * @since 2026-01-21
  */
@@ -50,7 +46,7 @@ public class ProEconEquipmentInfoJs extends Model<ProEconEquipmentInfoJs> {
     /**
      * 测点数值
      */
-    private String stopCode;
+    private Double stopCode;
 
     /**
      * 参考值
@@ -63,9 +59,4 @@ public class ProEconEquipmentInfoJs extends Model<ProEconEquipmentInfoJs> {
     private String backCode;
 
 
-    @Override
-    protected Serializable pkVal() {
-        return this.id;
-    }
-
 }

+ 7 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/ProEconEquipmentInfoJsService.java

@@ -3,6 +3,9 @@ package com.gyee.runeconomy.service;
 import com.gyee.runeconomy.model.ProEconEquipmentInfoJs;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +16,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ProEconEquipmentInfoJsService extends IService<ProEconEquipmentInfoJs> {
 
+    List<ProEconEquipmentInfoJs>  query(Map<String, List<String>> name);
+
+    boolean update(List<ProEconEquipmentInfoJs> jsls);
+
 }

+ 2 - 1
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/IProBasicOriginalCodeService.java

@@ -17,10 +17,11 @@ import java.util.Map;
  */
 public interface IProBasicOriginalCodeService extends IService<ProBasicOriginalCode> {
 
-    List<PointData> historyData(long startTs, long endTs, String code, int interval) throws Exception;
+    List<PointData> historyData(long startTs, long endTs, String windturbineId, String uniformCode, int interval) throws Exception;
 
 
     Map<String, List<ProBasicOriginalCode>> realData(String windturbineIds, String uniformCodes, long time) throws Exception;
 
+
     List<ProBasicOriginalCode> getData(String modelId, String query);
 }

+ 91 - 13
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProBasicOriginalCodeServiceImpl.java

@@ -27,23 +27,34 @@ public class ProBasicOriginalCodeServiceImpl extends ServiceImpl<ProBasicOrigina
     private IEdosUtil edosUtil;
 
 
-    @Override
-    public Map<String, List<ProBasicOriginalCode>> realData(String windturbineIds, String uniformCodes, long time) throws Exception {
+    //        @Override
+    public Map<String, List<ProBasicOriginalCode>> realData2(String windturbineIds, String uniformCodes, long time) throws Exception {
         Map<String, List<ProBasicOriginalCode>> map = new HashMap<>();
         String[] windturbineId = windturbineIds.split(",");
         String[] uniformCode = uniformCodes.split(",");
+        Set<String> uniformCodeSet = new HashSet<>(Arrays.asList(uniformCode));
         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())) {
+            if (orils == null || orils.isEmpty()) {
+                continue;
+            }
+            Map<String, ProBasicOriginalCode> codeToOriMap = orils.stream()
+                    .filter(ori -> ori.getUniformCode() != null && uniformCodeSet.contains(ori.getUniformCode()))
+                    .collect(Collectors.toMap(
+                            ProBasicOriginalCode::getCode,
+                            item -> item,
+                            (existing, replacement) -> existing,
+                            HashMap::new
+                    ));
+            List<String> codes = new ArrayList<>(codeToOriMap.keySet());
+            if (!codes.isEmpty()) {
+                //get请求
+                List<PointData> histMatrix = edosUtil.getHistMatrix(codes, time);
+
+                List<ProBasicOriginalCode> oriList = new ArrayList<>();
+                for (PointData pointData : histMatrix) {
+                    ProBasicOriginalCode ori = codeToOriMap.get(pointData.getEdnaId());
+                    if (ori != null) {
                         ori.setValue(pointData.getPointValue());
                         oriList.add(ori);
                     }
@@ -54,9 +65,76 @@ public class ProBasicOriginalCodeServiceImpl extends ServiceImpl<ProBasicOrigina
         return new TreeMap<>(map);
     }
 
+    @Override
+    public Map<String, List<ProBasicOriginalCode>> realData(String windturbineIds, String uniformCodes, long time) throws Exception {
+        Map<String, List<ProBasicOriginalCode>> result = new HashMap<>();
+
+        if (windturbineIds == null || windturbineIds.trim().isEmpty() ||
+                uniformCodes == null || uniformCodes.trim().isEmpty()) {
+            return result;
+        }
+
+        String[] windturbineIdArray = windturbineIds.split(",");
+        String[] uniformCodeArray = uniformCodes.split(",");
+        Set<String> uniformCodeSet = new HashSet<>(Arrays.asList(uniformCodeArray));
+
+        List<String> allCodes = new ArrayList<>();
+        Map<String, ProBasicOriginalCode> codeToOriMap = new HashMap<>();
+
+        for (String wt : windturbineIdArray) {
+            List<ProBasicOriginalCode> orils = CacheContext.oriMap.get(wt);
+            if (orils == null || orils.isEmpty()) {
+                continue;
+            }
+            Map<String, ProBasicOriginalCode> filteredMap = orils.stream()
+                    .filter(ori -> ori.getUniformCode() != null && uniformCodeSet.contains(ori.getUniformCode()))
+                    .collect(Collectors.toMap(
+                            ProBasicOriginalCode::getCode,
+                            item -> item,
+                            (existing, replacement) -> existing,
+                            HashMap::new
+                    ));
+
+            allCodes.addAll(filteredMap.keySet());
+            codeToOriMap.putAll(filteredMap);
+        }
+
+        if (allCodes.isEmpty()) {
+            return result;
+        }
+        //post请求
+        List<PointData> histMatrix = edosUtil.getHistMatrixPost(allCodes, time);
+
+        // 将数据填充回对应的ProBasicOriginalCode对象
+        List<ProBasicOriginalCode> allOriList = new ArrayList<>();
+        for (PointData pointData : histMatrix) {
+            ProBasicOriginalCode ori = codeToOriMap.get(pointData.getEdnaId());
+            if (ori != null) {
+                ori.setValue(pointData.getPointValue());
+                allOriList.add(ori);
+            }
+        }
+
+        Map<String, List<ProBasicOriginalCode>> groupedMap = allOriList.stream()
+                .collect(Collectors.groupingBy(ori -> ori.getWindturbineId().toString()));
+
+        result.putAll(groupedMap);
+
+        return new TreeMap<>(result);
+    }
+
 
     @Override
-    public List<PointData> historyData(long startTs, long endTs, String code, int interval) throws Exception {
+    public List<PointData> historyData(long startTs, long endTs, String windturbineId, String uniformCode, int interval) throws Exception {
+        List<ProBasicOriginalCode> proBasicOriginalCodes = CacheContext.oriMap.get(windturbineId);
+        String code = proBasicOriginalCodes.stream()
+                .filter(ori -> ori.getUniformCode().equals(uniformCode))
+                .map(ProBasicOriginalCode::getCode)
+                .findFirst()
+                .orElse(null);
+        if (code == null) {
+            return Collections.emptyList();
+        }
         return edosUtil.getHistoryDatasSnap(code, startTs, endTs, interval);
     }
 

+ 58 - 1
runeconomy-xk/src/main/java/com/gyee/runeconomy/service/impl/ProEconEquipmentInfoJsServiceImpl.java

@@ -1,14 +1,18 @@
 package com.gyee.runeconomy.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.runeconomy.model.ProEconEquipmentInfoJs;
 import com.gyee.runeconomy.mapper.ProEconEquipmentInfoJsMapper;
 import com.gyee.runeconomy.service.ProEconEquipmentInfoJsService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.util.*;
+
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author wang
@@ -17,4 +21,57 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProEconEquipmentInfoJsServiceImpl extends ServiceImpl<ProEconEquipmentInfoJsMapper, ProEconEquipmentInfoJs> implements ProEconEquipmentInfoJsService {
 
+    @Override
+    public List<ProEconEquipmentInfoJs> query(Map<String, List<String>> name) {
+        if (name == null || name.isEmpty()) {
+            return new ArrayList<>();
+        }
+        Map<String, List<ProEconEquipmentInfoJs>> map = new HashMap<>();
+        QueryWrapper<ProEconEquipmentInfoJs> qw = new QueryWrapper<>();
+        String record = name.keySet().iterator().next();
+        LocalDate recordDate = LocalDate.parse(record);
+        qw.lambda().eq(ProEconEquipmentInfoJs::getRecordDate, recordDate)
+                .in(ProEconEquipmentInfoJs::getMeterName, name.get(record));
+        return list(qw);
+    }
+
+
+    @Override
+    public boolean update(List<ProEconEquipmentInfoJs> jsls) {
+        if (jsls == null || jsls.isEmpty()) {
+            return false;
+        }
+        List<String> meterNames = jsls.stream()
+                .map(ProEconEquipmentInfoJs::getMeterName)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
+
+        if (meterNames.isEmpty()) {
+            return false;
+        }
+
+        QueryWrapper<ProEconEquipmentInfoJs> qw = new QueryWrapper<>();
+        qw.lambda().eq(ProEconEquipmentInfoJs::getRecordDate, jsls.get(0).getRecordDate())
+                .in(ProEconEquipmentInfoJs::getMeterName, meterNames);
+        List<ProEconEquipmentInfoJs> list = list(qw);
+        if (null != list && !list.isEmpty()) {
+            for (ProEconEquipmentInfoJs js1 : list) {
+                for (ProEconEquipmentInfoJs js2 : jsls) {
+                    if (js1.getMeterName().equals(js2.getMeterName())) {
+                        js1.setStopCode(js2.getStopCode());
+                    }
+                }
+            }
+        }
+        boolean b = false;
+        try {
+            b = updateBatchById(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return b;
+    }
+
+
 }

+ 94 - 58
runeconomy-xk/src/main/java/com/gyee/runeconomy/util/realtimesource/EdosUtil.java

@@ -1,6 +1,7 @@
 package com.gyee.runeconomy.util.realtimesource;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.common.model.DNAStatVal;
@@ -18,6 +19,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 /**
@@ -101,8 +103,8 @@ public class EdosUtil implements IEdosUtil {
 
                 List<String> ls = new ArrayList<>();
                 ls.add(point.getNemCode());
-                HttpEntity<List<String>> requestEntity = new HttpEntity<>(ls,headers);
-                ResponseEntity<JSONObject> resp = restTemplate.exchange(url,HttpMethod.POST,requestEntity,JSONObject.class);
+                HttpEntity<List<String>> requestEntity = new HttpEntity<>(ls, headers);
+                ResponseEntity<JSONObject> resp = restTemplate.exchange(url, HttpMethod.POST, requestEntity, JSONObject.class);
 
                 JSONObject jsonArray = resp.getBody();
                 if (StringUtils.isNotEmpty(jsonArray)) {
@@ -359,39 +361,39 @@ public class EdosUtil implements IEdosUtil {
 
     @Override
     public List<PointData> getHistoryDatasSnap(String pointid, Long beginDate, Long endDate, Integer pried) throws Exception {
-            if (StringUtils.notEmp(pointid) && !initialcode.equals(pointid)) {
-                Optional<String> tagName = Optional.ofNullable(pointid);
-                Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
-                Optional<Long> endTs = Optional.ofNullable(endDate * 1000);
-
-                //通过时间区间和时间间隔获取点数
-                int finalInterval;
-                if (pried != null)
-                    finalInterval = pried;
-                else
-                    return ErrorRequest.RequestListError(pointid);
-                Optional<Integer> interval = Optional.ofNullable(finalInterval);
+        if (StringUtils.notEmp(pointid) && !initialcode.equals(pointid)) {
+            Optional<String> tagName = Optional.ofNullable(pointid);
+            Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
+            Optional<Long> endTs = Optional.ofNullable(endDate * 1000);
 
-                try {
-                    String url = baseURL + "/history/snap?null=0";
-                    if (pointid.startsWith("GF-")) {
-                        url = baseURL2 + "/history/snap?null=0";
-                    }
-                    //tagName 或thingType,thingId,uniformCode可以确定一个标签点
-                    if (tagName.isPresent())
-                        url = url + "&tagName=" + tagName.get();
-
-                    if (startTs.isPresent())
-                        url = url + "&startTs=" + startTs.get();
-                    if (endTs.isPresent())
-                        url = url + "&endTs=" + endTs.get();
-                    if (interval.isPresent())
-                        url = url + "&interval=" + interval.get();
-
-                    ResponseEntity<JSONArray> resp = restTemplate.getForEntity(url, JSONArray.class);
-                    JSONArray jsonArray = resp.getBody();
-                    if (jsonArray != null) {
-                        List<PointData> list = JsonObjectHelper.phrasePointData(jsonArray, tagName.get());
+            //通过时间区间和时间间隔获取点数
+            int finalInterval;
+            if (pried != null)
+                finalInterval = pried;
+            else
+                return ErrorRequest.RequestListError(pointid);
+            Optional<Integer> interval = Optional.ofNullable(finalInterval);
+
+            try {
+                String url = baseURL + "/history/snap?null=0";
+                if (pointid.startsWith("GF-")) {
+                    url = baseURL2 + "/history/snap?null=0";
+                }
+                //tagName 或thingType,thingId,uniformCode可以确定一个标签点
+                if (tagName.isPresent())
+                    url = url + "&tagName=" + tagName.get();
+
+                if (startTs.isPresent())
+                    url = url + "&startTs=" + startTs.get();
+                if (endTs.isPresent())
+                    url = url + "&endTs=" + endTs.get();
+                if (interval.isPresent())
+                    url = url + "&interval=" + interval.get();
+
+                ResponseEntity<JSONArray> resp = restTemplate.getForEntity(url, JSONArray.class);
+                JSONArray jsonArray = resp.getBody();
+                if (jsonArray != null) {
+                    List<PointData> list = JsonObjectHelper.phrasePointData(jsonArray, tagName.get());
 //                        List<PointData> resultList = new ArrayList<>();
 //
 //                        if (list.isEmpty()) {
@@ -445,31 +447,31 @@ public class EdosUtil implements IEdosUtil {
 //                            }
 //                        }
 
-                        return list;
-                    } else {
-                        return ErrorRequest.RequestListError(pointid);
-                    }
+                    return list;
+                } else {
+                    return ErrorRequest.RequestListError(pointid);
+                }
 
-                } catch (HttpClientErrorException exception) {
-                    if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
-                        //System.out.println("404请求错误");
-                        return ErrorRequest.RequestListError(pointid);
-                    } else {
-                        throw exception;
-                    }
+            } catch (HttpClientErrorException exception) {
+                if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
+                    //System.out.println("404请求错误");
+                    return ErrorRequest.RequestListError(pointid);
+                } else {
+                    throw exception;
                 }
-            } else {
-                List<PointData> pols = new ArrayList<>();
-                PointData po = new PointData();
-                po.setEdnaId(pointid);
-                po.setPointValueInDouble(0.0);
-                po.setPointTime(0l);
-                pols.add(po);
-                return pols;
             }
-
+        } else {
+            List<PointData> pols = new ArrayList<>();
+            PointData po = new PointData();
+            po.setEdnaId(pointid);
+            po.setPointValueInDouble(0.0);
+            po.setPointTime(0l);
+            pols.add(po);
+            return pols;
         }
 
+    }
+
 
     private void getHistsnapSameTiem(String pointid, Long beginDate, Long pried,
                                      List<PointData> resultList) {
@@ -974,13 +976,13 @@ public class EdosUtil implements IEdosUtil {
 
             // 将请求体和头部信息整合到HttpEntity中
 //            HttpEntity<List<String>> requestEntity = new HttpEntity<>(pointids,headers);
-            HttpEntity<String> requestEntity = new HttpEntity<>(join,headers);
+            HttpEntity<String> requestEntity = new HttpEntity<>(join, headers);
 
             // 发起POST请求
-            ResponseEntity<JSONObject> resp = restTemplate.exchange(url,HttpMethod.POST,requestEntity,JSONObject.class);
+            ResponseEntity<JSONObject> resp = restTemplate.exchange(url, HttpMethod.POST, requestEntity, JSONObject.class);
             JSONObject jsonObject = resp.getBody();
 
-            if (jsonObject != null&&!jsonObject.isEmpty()) {
+            if (jsonObject != null && !jsonObject.isEmpty()) {
                 //对结果进行有序返回
                 int len = pointids.size();
                 List<PointData> result = new ArrayList<>();
@@ -1049,7 +1051,6 @@ public class EdosUtil implements IEdosUtil {
     }
 
 
-
 //    @Override
 //    public List<PointData> getRealData(List<String> pointids) throws Exception {
 //
@@ -2103,6 +2104,41 @@ public class EdosUtil implements IEdosUtil {
     }
 
     @Override
+    public List<PointData> getHistMatrixPost(List<String> nameList, long tTime) {
+        if (nameList == null || nameList.isEmpty()) {
+            return Collections.emptyList();
+        }
+        String url = baseURL + "/history/section?ts=" + tTime * 1000;
+        String tagNamesString = String.join(",", nameList);
+
+        try {
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            headers.set("Content-Type", "application/json;charset=UTF-8"); // 明确指定
+
+            HttpEntity<String> requestEntity = new HttpEntity<>(tagNamesString, headers);
+
+            ResponseEntity<String> response = restTemplate.exchange(
+                    url,
+                    HttpMethod.POST,
+                    requestEntity,
+                    String.class
+            );
+
+            if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) {
+                String responseBody = response.getBody();
+
+                JSONObject jsonObject = JSON.parseObject(responseBody);
+                return JsonObjectHelper.phrasePointData(jsonObject, nameList);
+            }
+
+        } catch (Exception e) {
+        }
+
+        return Collections.emptyList();
+    }
+
+    @Override
     public PointData getHistMatrix(String id, long tTime) throws Exception {
 
         if (StringUtils.notEmp(id) && !id.equals(initialcode)) {

+ 2 - 0
runeconomy-xk/src/main/java/com/gyee/runeconomy/util/realtimesource/IEdosUtil.java

@@ -304,6 +304,8 @@ public interface IEdosUtil {
      */
     public List<PointData> getHistMatrix(List<String> nameList, long tTime) throws Exception;
 
+    List<PointData> getHistMatrixPost(List<String> nameList, long tTime) throws Exception;
+
     public PointData getHistMatrix(String id, long tTime) throws Exception;
 
 }