Przeglądaj źródła

feat(ucp): 新增报表回填功能

- 添加 ProBaseBackfill 相关实体、Mapper 和 Service
- 实现报表回填相关的接口和方法
- 新增计算测点功能,包括 ProEconEquipmentInfoJs 相关实体、Mapper 和 Service
-优化 LineInfoDay 和 TurbineInfoDay 的查询方法
-调整应用配置,增加静态资源路径
- 修改 AdapterApi 接口,增加新的数据查询方法
xushili 5 miesięcy temu
rodzic
commit
a1f15227b6
33 zmienionych plików z 1767 dodań i 164 usunięć
  1. 982 104
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/JavaFunctionJobHandler.java
  2. 9 3
      ruoyi-admin/src/main/resources/application.yml
  3. 82 36
      ruoyi-admin/src/test/java/com/ruoyi/NewTests.java
  4. 1 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
  5. 1 1
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java
  6. 1 1
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java
  7. 1 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/LineInfoDay.java
  8. 56 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/MeterInfoDay.java
  9. 137 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/ProBaseBackfill.java
  10. 65 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/ProEconEquipmentInfoJs.java
  11. 12 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/StationInfoDay.java
  12. 8 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/TurbineInfoDay.java
  13. 20 6
      universal-computing-platform/src/main/java/com/ruoyi/ucp/feign/AdapterApi.java
  14. 16 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/MeterInfoDayMapper.java
  15. 16 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/ProBaseBackfillMapper.java
  16. 16 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/ProEconEquipmentInfoJsMapper.java
  17. 7 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/ILineInfoDayService.java
  18. 23 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IMeterInfoDayService.java
  19. 16 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProBaseBackfillService.java
  20. 6 1
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProBasicProjectPlanService.java
  21. 16 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProEconEquipmentInfoJsService.java
  22. 6 2
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IStationInfoDayService.java
  23. 8 1
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/ITurbineInfoDayService.java
  24. 26 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/LineInfoDayServiceImpl.java
  25. 43 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/MeterInfoDayServiceImpl.java
  26. 20 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProBaseBackfillServiceImpl.java
  27. 30 2
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProBasicProjectPlanServiceImpl.java
  28. 20 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProEconEquipmentInfoJsServiceImpl.java
  29. 23 1
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/StationInfoDayServiceImpl.java
  30. 0 1
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/StationInfoMinServiceImpl.java
  31. 29 3
      universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/TurbineInfoDayServiceImpl.java
  32. 18 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/util/DatePart.java
  33. 53 0
      universal-computing-platform/src/main/java/com/ruoyi/ucp/util/SqlUtil.java

Plik diff jest za duży
+ 982 - 104
ruoyi-admin/src/main/java/com/ruoyi/web/controller/JavaFunctionJobHandler.java


+ 9 - 3
ruoyi-admin/src/main/resources/application.yml

@@ -10,7 +10,7 @@ ruoyi:
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
 #  profile: /home/ruoyi
-  profile: D:/ruoyi/
+  profile: C:/ruoyi/
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
@@ -57,12 +57,18 @@ spring:
   mvc:
     pathmatch:
       matching-strategy: ant-path-matcher
+#    static-path-pattern: /**
+  web:
+    resources:
+      static-locations: classpath:/static-bd/
+#  resource:
+#    static-locations: classpath:/static-bd/
   # 资源信息
   messages:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: druid
+    active: druid3
   # 文件上传
   servlet:
     multipart:
@@ -110,7 +116,7 @@ token:
   # 令牌密钥
   secret: abcdefghijklmnopqrstuvwxyz
   # 令牌有效期(默认30分钟)
-  expireTime: 60
+  expireTime: 36000
 
 # MyBatis配置
 #mybatis:

+ 82 - 36
ruoyi-admin/src/test/java/com/ruoyi/NewTests.java

@@ -4,26 +4,26 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateRange;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.text.StrBuilder;
 import cn.hutool.core.thread.ThreadUtil;
-import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ruoyi.ucp.entity.*;
-import com.ruoyi.ucp.feign.AdapterApi;
-import com.ruoyi.ucp.service.*;
-import com.ruoyi.ucp.util.CalcCache;
+import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
+import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.ruoyi.ucp.entity.StationInfoMin;
+import com.ruoyi.ucp.entity.TurbineInfoDay;
+import com.ruoyi.ucp.service.IStationInfoMinService;
 import com.ruoyi.web.controller.JavaFunctionJobHandler;
+import org.apache.ibatis.reflection.property.PropertyNamer;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import javax.annotation.Resource;
-import java.net.URI;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @SpringBootTest//classes = RuoYiApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
@@ -139,10 +139,6 @@ public class NewTests {
 //        writeReportPool(date);
 
 //        task.calcStationSspjfs();
-        /*while (true) {
-            task.calcRealtimeTurbineZt();
-            ThreadUtil.sleep(1000);
-        }*/
 //        task.calcRealtimeTurbineZt();
     }
 
@@ -186,6 +182,19 @@ public class NewTests {
         }
     }
 
+    public static void main(String[] args) {
+        QueryWrapper<TurbineInfoDay> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().select(TurbineInfoDay::getRecordDate);
+        System.out.println();
+    }
+
+    private static void aadd(SFunction<TurbineInfoDay,String> a) {
+        LambdaMeta meta = LambdaUtils.extract(a);
+        String fieldName = PropertyNamer.methodToProperty(meta.getImplMethodName());
+        String string = a.toString();
+        System.out.println(a);
+    }
+
     @Test
     public void test4() {
 //        while (true){
@@ -204,7 +213,7 @@ public class NewTests {
         stIds.add("GJNY_SXGS_LJS_FDC_STA");
         for (DateTime date : range) {
 //            task.calcTurbineStateMin(date);
-            task.predictExaminBc(stIds,date);
+            task.predictExaminBc(stIds, date);
         }
 //        task.calcGlqxnhSurplus(start, end);
 
@@ -223,28 +232,16 @@ public class NewTests {
         task.calcTurbineStateMin(date);
         task.writeReportPool5SPjfsLlfdlZtsj(date);
         //风机日切入
-        task.cutInWindSpeed();
+        task.cutInWindSpeed(date);
         //风机日额定风速
-        task.calcGlqxnh_edfs();
+        task.calcGlqxnh_edfs(date);
         task.calcPredictExamin2(date);
     }
 
-    public static void main(String[] args) {
-        long value1 = 10L;
-        long value2 = 3L;
-
-        double result = (double) value1 / value2;
-        System.out.println();
-    }
-
     @Test
     public void test6() {
-        DateTime begin = DateUtil.parse("2024-12-04 00:00:00");
-        DateTime end = DateUtil.parse("2024-12-05 00:00:00");
-//        DateTime date = DateUtil.date();
-//        DateTime begin = DateUtil.beginOfDay(date);
-//        begin = DateUtil.offsetMinute(begin, 15);
-//        DateTime end = date;
+        DateTime begin = DateUtil.parse("2024-09-20 19:00:00");
+        DateTime end = DateUtil.parse("2024-12-25 09:00:00");
         DateTime minEnd = begin;
         while (minEnd.isBefore(end)) {
             minEnd = DateUtil.offsetMinute(begin, 15);
@@ -254,6 +251,7 @@ public class NewTests {
             begin = minEnd;
         }
     }
+
     @Test
     public void test7() {
         DateTime begin = DateUtil.parse("2024-01-01");
@@ -267,8 +265,8 @@ public class NewTests {
         stIds.add("GJNY_SXGS_ZZ_FDC_STA");
         stIds.add("GJNY_SXGS_XZ_FDC_STA");
         stIds.add("GJNY_SXGS_LJS_FDC_STA");
-        QueryWrapper<StationInfoMin> wrapper=new QueryWrapper<>();
-        wrapper.lambda().between(StationInfoMin::getRecordDate,begin,end);
+        QueryWrapper<StationInfoMin> wrapper = new QueryWrapper<>();
+        wrapper.lambda().between(StationInfoMin::getRecordDate, begin, end);
         List<StationInfoMin> list = stationInfoMinService.list(wrapper);
         Map<String, List<StationInfoMin>> collect = list.stream().collect(Collectors.groupingBy(m -> DateUtil.date(m.getRecordDate()).toString()));
         while (minEnd.isBefore(end)) {
@@ -279,6 +277,7 @@ public class NewTests {
             minBegin = minEnd;
         }
     }
+
     @Test
     public void test8() {
         DateTime begin = DateUtil.parse("2024-11-05 14:30:00");
@@ -292,8 +291,8 @@ public class NewTests {
         stIds.add("GJNY_SXGS_ZZ_FDC_STA");
         stIds.add("GJNY_SXGS_XZ_FDC_STA");
         stIds.add("GJNY_SXGS_LJS_FDC_STA");
-        QueryWrapper<StationInfoMin> wrapper=new QueryWrapper<>();
-        wrapper.lambda().between(StationInfoMin::getRecordDate,begin,end);
+        QueryWrapper<StationInfoMin> wrapper = new QueryWrapper<>();
+        wrapper.lambda().between(StationInfoMin::getRecordDate, begin, end);
         List<StationInfoMin> list = stationInfoMinService.list(wrapper);
         Map<String, List<StationInfoMin>> collect = list.stream().collect(Collectors.groupingBy(m -> DateUtil.date(m.getRecordDate()).toString()));
         while (minEnd.isBefore(end)) {
@@ -304,4 +303,51 @@ public class NewTests {
             minBegin = minEnd;
         }
     }
+
+    @Test
+    public void test9() {
+        DateTime date = DateUtil.date();
+        task.calcLineRfdlSameDay();
+        task.calcStationSwGwCyDlSameDay();
+        task.calcStationZhcyRfDlSameDay();
+        task.calcLineSwGWCyDlSameDay();
+    }
+
+    @Test
+    public void test10() {
+//        DateTime date = DateUtil.date();
+        // 创建日期范围生成器
+        DateTime start = DateUtil.parse("2024-12-12");
+        DateTime end = DateUtil.parse("2024-12-25");
+        DateRange range = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
+        for (DateTime date : range) {
+            System.out.println(DateUtil.date() + ":" + date);
+            task.calcTurbineRFDL_ha(date);
+            task.calcLineRfdl_ha(date);
+            //上网购网厂用电量
+            task.calcStationSwGwCyRdl_ha(date);
+            //计算综合厂用电量
+            task.calcStationZhcyRfDl(date);
+            //风机日环境温度
+            task.ambientTemperature();
+            //计算日发电量--风机汇总方式
+            task.calcStationRfdlFj(date);
+            task.calcLineSwGWCyDl(date);
+            task.calcTurbine5s2(date);
+            //风机状态时间
+            task.calcTurbineStateMin(date);
+            //风机日切入
+            task.cutInWindSpeed(date);
+            //风机日额定风速
+            task.calcGlqxnh_edfs(date);
+        }
+    }
+
+    @Test
+    public void test11() {
+        while (true) {
+            task.calcRealtimeTurbineZt();
+            ThreadUtil.sleep(1000);
+        }
+    }
 }

+ 1 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java

@@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
 import java.util.List;
 
 /**
@@ -34,7 +33,7 @@ public class SysJobServiceImpl implements ISysJobService {
     /**
      * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
      */
-    @PostConstruct
+//    @PostConstruct
     public void init() throws SchedulerException, TaskException {
         scheduler.clear();
         List<SysJob> jobList = jobMapper.selectJobAll();

+ 1 - 1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java

@@ -13,6 +13,6 @@ import org.quartz.JobExecutionContext;
 public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob {
     @Override
     protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception {
-        JobInvokeUtil.invokeMethod2(sysJob);
+//        JobInvokeUtil.invokeMethod2(sysJob);
     }
 }

+ 1 - 1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java

@@ -11,6 +11,6 @@ import org.quartz.JobExecutionContext;
 public class QuartzJobExecution extends AbstractQuartzJob {
     @Override
     protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception {
-        JobInvokeUtil.invokeMethod2(sysJob);
+//        JobInvokeUtil.invokeMethod2(sysJob);
     }
 }

+ 1 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/LineInfoDay.java

@@ -38,5 +38,6 @@ public class LineInfoDay implements Serializable {
     private double  gwdl;
     private double  cydl;
     private double  zyb;
+    private double  hdl;
 
 }

+ 56 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/MeterInfoDay.java

@@ -0,0 +1,56 @@
+package com.ruoyi.ucp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-19
+ */
+@Data
+@TableName("meter_info_day")
+public class MeterInfoDay implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场站
+     */
+    private String meterId;
+
+    private String parentId;
+
+    private String stationId;
+
+    private String boosterId;
+
+    /**
+     * 时间
+     */
+    private Date recordDate;
+
+    /**
+     * 发电量
+     */
+    private Double fdl;
+
+    /**
+     * 耗电量
+     */
+    private Double hdl;
+}

+ 137 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/ProBaseBackfill.java

@@ -0,0 +1,137 @@
+package com.ruoyi.ucp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 报表回填
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+@TableName("pro_base_backfill")
+public class ProBaseBackfill implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private String id;
+
+    /**
+     * 测点
+     */
+    private String code;
+
+    /**
+     * 场站
+     */
+    private String station;
+
+    /**
+     * 推送/自建
+     */
+    private String type;
+
+    /**
+     * 定时推送
+     */
+    private Boolean scheduledPush;
+
+    /**
+     * 推送时间
+     */
+    private String pushTime;
+
+    /**
+     * 任务描述
+     */
+    private String taskDescription;
+
+    /**
+     * 运行模式
+     */
+    private String operatingMode;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStation() {
+        return station;
+    }
+
+    public void setStation(String station) {
+        this.station = station;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Boolean getScheduledPush() {
+        return scheduledPush;
+    }
+
+    public void setScheduledPush(Boolean scheduledPush) {
+        this.scheduledPush = scheduledPush;
+    }
+
+    public String getPushTime() {
+        return pushTime;
+    }
+
+    public void setPushTime(String pushTime) {
+        this.pushTime = pushTime;
+    }
+
+    public String getTaskDescription() {
+        return taskDescription;
+    }
+
+    public void setTaskDescription(String taskDescription) {
+        this.taskDescription = taskDescription;
+    }
+
+    public String getOperatingMode() {
+        return operatingMode;
+    }
+
+    public void setOperatingMode(String operatingMode) {
+        this.operatingMode = operatingMode;
+    }
+
+    @Override
+    public String toString() {
+        return "ProBaseBackfill{" +
+            "id = " + id +
+            ", code = " + code +
+            ", station = " + station +
+            ", type = " + type +
+            ", scheduledPush = " + scheduledPush +
+            ", pushTime = " + pushTime +
+            ", taskDescription = " + taskDescription +
+            ", operatingMode = " + operatingMode +
+        "}";
+    }
+}

+ 65 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/ProEconEquipmentInfoJs.java

@@ -0,0 +1,65 @@
+package com.ruoyi.ucp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 计算测点
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+@Data
+@TableName("pro_econ_equipment_info_js")
+public class ProEconEquipmentInfoJs implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    @TableId(type=IdType.ASSIGN_ID)
+    private String id;
+
+    /**
+     * 日期
+     */
+    private Date recordDate;
+
+    /**
+     * 风场编号
+     */
+    private String wpid;
+
+    /**
+     * 测点
+     */
+    private String meterId;
+
+    /**
+     * 测点描述
+     */
+    private String meterName;
+
+    /**
+     * 测点数值
+     */
+    private Double stopCode;
+
+    /**
+     * 参考值
+     */
+    private Double stopCodeModify;
+
+    /**
+     * 回填测点
+     */
+    private String backCode;
+}

+ 12 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/StationInfoDay.java

@@ -48,4 +48,16 @@ public class StationInfoDay implements Serializable {
     private Integer zyb;
 
     private Double jhfdl;
+
+    private Double yxfss;
+
+    private Double cftfs;
+
+    private Double cftfx;
+
+    private Double kydlzql;
+
+    private Double qfxdl;
+
+    private Double kqmd;
 }

+ 8 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/TurbineInfoDay.java

@@ -56,4 +56,12 @@ public class TurbineInfoDay implements Serializable {
     private Long jxcs;
     private Long xdcs;
     private Long lxcs;
+    private Double jfpl;
+    private Double glyzxxs;
+    private Double fx;
+    private Double yxfss;
+    private Double lyxs;
+    private Double klyl;
+    private Double fnlyl;
+    private Double bll;
 }

+ 20 - 6
universal-computing-platform/src/main/java/com/ruoyi/ucp/feign/AdapterApi.java

@@ -17,8 +17,12 @@ public interface AdapterApi {
     @GetMapping("/latest2")
     List<PointData> getLatest2(URI baseUri, @RequestParam("keys") String keys);
 
-    @GetMapping("/latest")
-    Map<String, PointData> getLatest(URI baseUri, @RequestParam("keys") String keys);
+//    @GetMapping("/latest")
+//    Map<String, PointData> getLatest(URI baseUri, @RequestParam("keys") String keys);
+
+    @PostMapping("/latests")
+//    @Headers("Content-Type: application/json; charset=UTF-8")
+    Map<String, PointData> getLatest(URI baseUri, @RequestBody String keys);
 
     @GetMapping("/history/snap")
     List<PointData> getHistorySnap(URI baseUri, @RequestParam("tagName") String tagName,
@@ -43,17 +47,27 @@ public interface AdapterApi {
                                          @RequestParam("endTs") long endTs,
                                          @RequestParam("interval") int interval);
 
-    @GetMapping("/history/section")
-    Map<String, PointData> getHistorySection(URI baseUri, @RequestParam("tagNames") String tagNames,
+//    @GetMapping("/history/section")
+//    Map<String, PointData> getHistorySection(URI baseUri, @RequestParam("tagNames") String tagNames,
+//                                             @RequestParam("ts") long ts);
+
+    @PostMapping("/history/section")
+    Map<String, PointData> getHistorySection(URI baseUri, @RequestBody String tagNames,
                                              @RequestParam("ts") long ts);
 
     @GetMapping("/history/section2")
     List<PointData> getHistorySection2(URI baseUri, @RequestParam("tagName") String tagName,
                                        @RequestParam("ts") long ts);
 
-    @PostMapping("/latest2")
+//    @PostMapping("/latest2")
+//    Boolean writeHistory(URI baseUri, @RequestBody PointData tsData);
+//
+//    @PostMapping("/latest2/batch")
+//    Boolean writeHistoryBatch(URI baseUri, @RequestBody List<PointData> tsData);
+
+    @PostMapping("/save")
     Boolean writeHistory(URI baseUri, @RequestBody PointData tsData);
 
-    @PostMapping("/latest2/batch")
+    @PostMapping("/save/batch")
     Boolean writeHistoryBatch(URI baseUri, @RequestBody List<PointData> tsData);
 }

+ 16 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/MeterInfoDayMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.ucp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ucp.entity.MeterInfoDay;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-19
+ */
+public interface MeterInfoDayMapper extends BaseMapper<MeterInfoDay> {
+
+}

+ 16 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/ProBaseBackfillMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.ucp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ucp.entity.ProBaseBackfill;
+
+/**
+ * <p>
+ * 报表回填 Mapper 接口
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+public interface ProBaseBackfillMapper extends BaseMapper<ProBaseBackfill> {
+
+}

+ 16 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/mapper/ProEconEquipmentInfoJsMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.ucp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ucp.entity.ProEconEquipmentInfoJs;
+
+/**
+ * <p>
+ * 计算测点 Mapper 接口
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+public interface ProEconEquipmentInfoJsMapper extends BaseMapper<ProEconEquipmentInfoJs> {
+
+}

+ 7 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/ILineInfoDayService.java

@@ -1,9 +1,13 @@
 package com.ruoyi.ucp.service;
 
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.ucp.entity.LineInfoDay;
 import com.ruoyi.ucp.entity.PointInfo;
+import com.ruoyi.ucp.util.DatePart;
 
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,4 +21,7 @@ import java.util.Map;
 public interface ILineInfoDayService extends IService<LineInfoDay> {
 
     public Map<String, LineInfoDay> getByEntity(PointInfo pointInfo);
+
+    Map<String, LineInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<LineInfoDay,String> groupId);
+    List<LineInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<LineInfoDay,String>... groupIds);
 }

+ 23 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IMeterInfoDayService.java

@@ -0,0 +1,23 @@
+package com.ruoyi.ucp.service;
+
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ucp.entity.MeterInfoDay;
+import com.ruoyi.ucp.util.DatePart;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-19
+ */
+public interface IMeterInfoDayService extends IService<MeterInfoDay> {
+
+
+    List<MeterInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<MeterInfoDay,String>... groupIds);
+}

+ 16 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProBaseBackfillService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.ucp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ucp.entity.ProBaseBackfill;
+
+/**
+ * <p>
+ * 报表回填 服务类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+public interface IProBaseBackfillService extends IService<ProBaseBackfill> {
+
+}

+ 6 - 1
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProBasicProjectPlanService.java

@@ -1,7 +1,11 @@
 package com.ruoyi.ucp.service;
 
-import com.ruoyi.ucp.entity.ProBasicProjectPlan;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ucp.entity.ProBasicProjectPlan;
+import com.ruoyi.ucp.util.DatePart;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProBasicProjectPlanService extends IService<ProBasicProjectPlan> {
 
+    List<ProBasicProjectPlan> getDatasByPartSelect(Date date, DatePart datePart, String groupId);
 }

+ 16 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IProEconEquipmentInfoJsService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.ucp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ucp.entity.ProEconEquipmentInfoJs;
+
+/**
+ * <p>
+ * 计算测点 服务类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+public interface IProEconEquipmentInfoJsService extends IService<ProEconEquipmentInfoJs> {
+
+}

+ 6 - 2
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/IStationInfoDayService.java

@@ -1,9 +1,12 @@
 package com.ruoyi.ucp.service;
 
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.ucp.entity.PointInfo;
 import com.ruoyi.ucp.entity.StationInfoDay;
+import com.ruoyi.ucp.util.DatePart;
 
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -15,5 +18,6 @@ import java.util.Map;
  * @since 2024-03-05
  */
 public interface IStationInfoDayService extends IService<StationInfoDay> {
-    Map<String, StationInfoDay> getByEntity(PointInfo pointInfo);
+    Map<String, StationInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<StationInfoDay,String> groupId);
+    List<StationInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<StationInfoDay,String> groupId);
 }

+ 8 - 1
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/ITurbineInfoDayService.java

@@ -1,7 +1,13 @@
 package com.ruoyi.ucp.service;
 
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.ucp.entity.TurbineInfoDay;
+import com.ruoyi.ucp.util.DatePart;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -12,5 +18,6 @@ import com.ruoyi.ucp.entity.TurbineInfoDay;
  * @since 2024-05-29
  */
 public interface ITurbineInfoDayService extends IService<TurbineInfoDay> {
-
+    List<TurbineInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<TurbineInfoDay,String>... groupIds);
+    Map<String, TurbineInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<TurbineInfoDay,String> groupId);
 }

+ 26 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/LineInfoDayServiceImpl.java

@@ -1,7 +1,10 @@
 package com.ruoyi.ucp.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.enums.DataSourceType;
@@ -9,9 +12,12 @@ import com.ruoyi.ucp.entity.LineInfoDay;
 import com.ruoyi.ucp.entity.PointInfo;
 import com.ruoyi.ucp.mapper.LineInfoDayMapper;
 import com.ruoyi.ucp.service.ILineInfoDayService;
+import com.ruoyi.ucp.util.DatePart;
+import com.ruoyi.ucp.util.SqlUtil;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -64,4 +70,24 @@ public class LineInfoDayServiceImpl extends ServiceImpl<LineInfoDayMapper, LineI
     public List<LineInfoDay> list(Wrapper<LineInfoDay> queryWrapper) {
         return super.list(queryWrapper);
     }
+
+    public Map<String, LineInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<LineInfoDay,String> groupId) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<LineInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        wrapper.lambda().between(LineInfoDay::getRecordDate, beginEnd[0], beginEnd[1])
+                .select(groupId).groupBy(groupId);
+        List<LineInfoDay> days = baseMapper.selectList(wrapper);
+        return days.stream().collect(Collectors.toMap(groupId, Function.identity()));
+    }
+    public List<LineInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<LineInfoDay,String>... groupIds) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<LineInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        for (SFunction<LineInfoDay, String> groupId : groupIds) {
+            wrapper.lambda().select(groupId).groupBy(groupId);
+        }
+        wrapper.lambda().between(LineInfoDay::getRecordDate, beginEnd[0], beginEnd[1]);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 43 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/MeterInfoDayServiceImpl.java

@@ -0,0 +1,43 @@
+package com.ruoyi.ucp.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.ucp.entity.MeterInfoDay;
+import com.ruoyi.ucp.mapper.MeterInfoDayMapper;
+import com.ruoyi.ucp.service.IMeterInfoDayService;
+import com.ruoyi.ucp.util.DatePart;
+import com.ruoyi.ucp.util.SqlUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-19
+ */
+@Service
+public class MeterInfoDayServiceImpl extends ServiceImpl<MeterInfoDayMapper, MeterInfoDay> implements IMeterInfoDayService {
+    @Override
+    public boolean saveOrUpdateBatch(Collection<MeterInfoDay> entityList) {
+        return super.saveOrUpdateBatch(entityList);
+    }
+
+    public List<MeterInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<MeterInfoDay,String>... groupIds) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<MeterInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        for (SFunction<MeterInfoDay, String> groupId : groupIds) {
+            wrapper.lambda().select(groupId).groupBy(groupId);
+        }
+        wrapper.lambda().between(MeterInfoDay::getRecordDate, beginEnd[0], beginEnd[1]);
+        return baseMapper.selectList(wrapper);
+    }
+}

+ 20 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProBaseBackfillServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ruoyi.ucp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.ucp.entity.ProBaseBackfill;
+import com.ruoyi.ucp.mapper.ProBaseBackfillMapper;
+import com.ruoyi.ucp.service.IProBaseBackfillService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 报表回填 服务实现类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+@Service
+public class ProBaseBackfillServiceImpl extends ServiceImpl<ProBaseBackfillMapper, ProBaseBackfill> implements IProBaseBackfillService {
+
+}

+ 30 - 2
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProBasicProjectPlanServiceImpl.java

@@ -1,15 +1,19 @@
 package com.ruoyi.ucp.service.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.ucp.entity.ProBasicProjectPlan;
 import com.ruoyi.ucp.mapper.ProBasicProjectPlanMapper;
 import com.ruoyi.ucp.service.IProBasicProjectPlanService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.ucp.util.DatePart;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -32,4 +36,28 @@ public class ProBasicProjectPlanServiceImpl extends ServiceImpl<ProBasicProjectP
     public List<ProBasicProjectPlan> list() {
         return super.list();
     }
+
+    @Override
+    public List<ProBasicProjectPlan> getDatasByPartSelect(Date date, DatePart datePart, String groupId) {
+        DateTime begin = DateUtil.beginOfDay(date);
+        QueryWrapper<ProBasicProjectPlan> wrapperPlan = new QueryWrapper<>();
+        wrapperPlan.select("sum(generating_capacity) generating_capacity,"+groupId).groupBy(groupId)
+                .eq("year", String.valueOf(begin.year()));
+        switch (groupId){
+            case "station":
+                wrapperPlan.likeRight("project_id","_EG");
+                break;
+            case "project":
+                wrapperPlan.likeRight("project_id","_STA");
+                break;
+        }
+        switch (datePart){
+            case MONTH:
+                wrapperPlan.eq("month", String.valueOf(begin.month() + 1));
+                break;
+            case YEAR:
+                break;
+        }
+        return baseMapper.selectList(wrapperPlan);
+    }
 }

+ 20 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/ProEconEquipmentInfoJsServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ruoyi.ucp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.ucp.entity.ProEconEquipmentInfoJs;
+import com.ruoyi.ucp.mapper.ProEconEquipmentInfoJsMapper;
+import com.ruoyi.ucp.service.IProEconEquipmentInfoJsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 计算测点 服务实现类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-12-24
+ */
+@Service
+public class ProEconEquipmentInfoJsServiceImpl extends ServiceImpl<ProEconEquipmentInfoJsMapper, ProEconEquipmentInfoJs> implements IProEconEquipmentInfoJsService {
+
+}

+ 23 - 1
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/StationInfoDayServiceImpl.java

@@ -1,7 +1,10 @@
 package com.ruoyi.ucp.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.enums.DataSourceType;
@@ -9,10 +12,13 @@ import com.ruoyi.ucp.entity.PointInfo;
 import com.ruoyi.ucp.entity.StationInfoDay;
 import com.ruoyi.ucp.mapper.StationInfoDayMapper;
 import com.ruoyi.ucp.service.IStationInfoDayService;
+import com.ruoyi.ucp.util.DatePart;
+import com.ruoyi.ucp.util.SqlUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -30,7 +36,6 @@ import java.util.stream.Collectors;
 @DataSource(DataSourceType.SLAVE)
 public class StationInfoDayServiceImpl extends ServiceImpl<StationInfoDayMapper, StationInfoDay> implements IStationInfoDayService {
 
-    @Override
     public Map<String, StationInfoDay> getByEntity(PointInfo pointInfo) {
         LambdaQueryWrapper<StationInfoDay> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(pointInfo.getStationId() != null, StationInfoDay::getStationId, pointInfo.getStationId());
@@ -55,4 +60,21 @@ public class StationInfoDayServiceImpl extends ServiceImpl<StationInfoDayMapper,
     public List<StationInfoDay> list(Wrapper<StationInfoDay> queryWrapper) {
         return super.list(queryWrapper);
     }
+
+    public Map<String, StationInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<StationInfoDay,String> groupId) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<StationInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        wrapper.lambda().between(StationInfoDay::getRecordDate, beginEnd[0], beginEnd[1])
+                .select(groupId).groupBy(groupId);
+        List<StationInfoDay> days = baseMapper.selectList(wrapper);
+        return days.stream().collect(Collectors.toMap(groupId, Function.identity()));
+    }
+    public List<StationInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<StationInfoDay,String> groupId) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<StationInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        wrapper.lambda().select(groupId).between(StationInfoDay::getRecordDate, beginEnd[0], beginEnd[1]).groupBy(groupId);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 0 - 1
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/StationInfoMinServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ruoyi.ucp.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.enums.DataSourceType;

+ 29 - 3
universal-computing-platform/src/main/java/com/ruoyi/ucp/service/impl/TurbineInfoDayServiceImpl.java

@@ -1,17 +1,25 @@
 package com.ruoyi.ucp.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.ucp.entity.TurbineInfoDay;
 import com.ruoyi.ucp.mapper.TurbineInfoDayMapper;
 import com.ruoyi.ucp.service.ITurbineInfoDayService;
+import com.ruoyi.ucp.util.DatePart;
+import com.ruoyi.ucp.util.SqlUtil;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -47,11 +55,29 @@ public class TurbineInfoDayServiceImpl extends ServiceImpl<TurbineInfoDayMapper,
         return super.updateById(entity);
     }
 
-
-
-
     @Override
     public boolean saveOrUpdateBatch(Collection<TurbineInfoDay> entityList) {
         return super.saveOrUpdateBatch(entityList);
     }
+
+    public List<TurbineInfoDay> getDatasByPartSelects(Date date, DatePart datePart, String selects, SFunction<TurbineInfoDay,String>... groupIds) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<TurbineInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        for (SFunction<TurbineInfoDay, String> groupId : groupIds) {
+            wrapper.lambda().select(groupId).groupBy(groupId);
+        }
+        wrapper.lambda().between(TurbineInfoDay::getRecordDate, beginEnd[0], beginEnd[1]);
+        return baseMapper.selectList(wrapper);
+    }
+
+    public Map<String, TurbineInfoDay> getDatasByPartSelect(Date date, DatePart datePart, String selects, SFunction<TurbineInfoDay,String> groupId) {
+        DateTime[] beginEnd = SqlUtil.getBeginEnd(date, datePart);
+        QueryWrapper<TurbineInfoDay> wrapper = new QueryWrapper<>();
+        wrapper.select(selects);
+        wrapper.lambda().between(TurbineInfoDay::getRecordDate, beginEnd[0], beginEnd[1])
+                .select(groupId).groupBy(groupId);
+        List<TurbineInfoDay> days = baseMapper.selectList(wrapper);
+        return days.stream().collect(Collectors.toMap(groupId, Function.identity()));
+    }
 }

+ 18 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/util/DatePart.java

@@ -0,0 +1,18 @@
+package com.ruoyi.ucp.util;
+
+public enum DatePart {
+    DAY("日"),
+    MONTH("月"),
+    YEAR("年"),
+    CURRENT("本期");
+
+    private final String label;
+
+    DatePart(String label) {
+        this.label = label;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+}

+ 53 - 0
universal-computing-platform/src/main/java/com/ruoyi/ucp/util/SqlUtil.java

@@ -0,0 +1,53 @@
+package com.ruoyi.ucp.util;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Date;
+
+public class SqlUtil {
+    public static String getSelectSum(String selects) {
+        String[] split = selects.split(",");
+        StringBuilder sb = new StringBuilder();
+        for (String s : split) {
+            sb.append("sum(").append(s).append(") ").append(s).append(",");
+        }
+        sb.deleteCharAt(sb.length()-1);
+        return sb.toString();
+    }
+
+    public static String getSelectAvg(String selects) {
+        String[] split = selects.split(",");
+        StringBuilder sb = new StringBuilder();
+        for (String s : split) {
+            sb.append("avg(").append(s).append(") ").append(s).append(",");
+        }
+        sb.deleteCharAt(sb.length()-1);
+        return sb.toString();
+    }
+    public static DateTime[] getBeginEnd(Date date, DatePart datePart) {
+        DateTime[] split = new DateTime[2];
+        DateTime begin = null,end = null;
+        switch (datePart){
+            case DAY:
+                begin = DateUtil.beginOfDay(date);
+                end = DateUtil.endOfDay(date);
+                break;
+            case MONTH:
+                begin = DateUtil.beginOfMonth(date);
+                end = DateUtil.endOfMonth(date);
+                break;
+            case YEAR:
+                begin = DateUtil.beginOfYear(date);
+                end = DateUtil.endOfYear(date);
+                break;
+            case CURRENT:
+                begin = DateUtil.beginOfDay(date);
+                end = DateUtil.date(date);
+                break;
+        }
+        split[0]=begin;
+        split[1]=end;
+        return split;
+    }
+}