lixing 3 rokov pred
commit
1046bf5b63
36 zmenil súbory, kde vykonal 1729 pridanie a 0 odobranie
  1. 9 0
      .gitignore
  2. 109 0
      pom.xml
  3. 46 0
      src/main/java/com/persagy/apm/diagnose/config/PoemsWebConfigurer.java
  4. 92 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java
  5. 15 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/dao/MonitorIndicatorRecordMapper.java
  6. 73 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/ConvertMonitorIndicatorRecordTool.java
  7. 40 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/MonitorIndicatorRecord.java
  8. 32 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/AddMonitorIndicatorRecordDTO.java
  9. 19 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/DeleteMonitorIndicatorRecordDTO.java
  10. 33 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/PageQueryMonitorIndicatorRecordDTO.java
  11. 27 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java
  12. 19 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDetailDTO.java
  13. 36 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/UpdateMonitorIndicatorRecordDTO.java
  14. 44 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/vo/MonitorIndicatorRecordItemVO.java
  15. 44 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/vo/MonitorIndicatorRecordListItemVO.java
  16. 75 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java
  17. 209 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java
  18. 92 0
      src/main/java/com/persagy/apm/diagnose/timerecord/controller/CalculateTimeRecordController.java
  19. 15 0
      src/main/java/com/persagy/apm/diagnose/timerecord/dao/CalculateTimeRecordMapper.java
  20. 36 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/CalculateTimeRecord.java
  21. 73 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/ConvertCalculateTimeRecordTool.java
  22. 28 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/AddCalculateTimeRecordDTO.java
  23. 19 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/DeleteCalculateTimeRecordDTO.java
  24. 30 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/PageQueryCalculateTimeRecordDTO.java
  25. 24 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/QueryCalculateTimeRecordDTO.java
  26. 19 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/QueryCalculateTimeRecordDetailDTO.java
  27. 32 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/UpdateCalculateTimeRecordDTO.java
  28. 41 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/vo/CalculateTimeRecordItemVO.java
  29. 41 0
      src/main/java/com/persagy/apm/diagnose/timerecord/model/vo/CalculateTimeRecordListItemVO.java
  30. 75 0
      src/main/java/com/persagy/apm/diagnose/timerecord/service/ICalculateTimeRecordService.java
  31. 199 0
      src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java
  32. 47 0
      src/main/resources/bootstrap.yml
  33. 0 0
      src/main/resources/db/init/data.sql
  34. 1 0
      src/main/resources/db/init/table.sql
  35. 17 0
      src/main/resources/mapper/CalculateTimeRecordMapper.xml
  36. 18 0
      src/main/resources/mapper/MonitorIndicatorRecordMapper.xml

+ 9 - 0
.gitignore

@@ -0,0 +1,9 @@
+target/
+.settings/
+.project
+.classpath
+*.iml
+*.log
+*.versionsBackup
+.idea/
+/bin/

+ 109 - 0
pom.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>com.persagy</groupId>
+        <artifactId>apm-package</artifactId>
+        <version>3.0.0</version>
+    </parent>
+
+    <artifactId>energy-eq-run-diagnose</artifactId>
+    <version>v1.0.0</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <repositories>
+        <repository>
+            <id>integrated</id>
+            <name>releases Repository</name>
+            <url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
+        </repository>
+        <repository>
+            <id>persagy</id>
+            <name>persagy Repository</name>
+            <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <!-- 项目启动 -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>apm-server</artifactId>
+        </dependency>
+        <!-- apm 工具包 -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>apm-common</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.persagy</groupId>
+                    <artifactId>integrated-redis-spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- lang -->
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+
+        <!-- gson json,java对象互转 -->
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <!-- 配置中心(包含注册中心) -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-config-client</artifactId>
+        </dependency>
+
+        <!-- 日志 -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-log-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- feign -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-ribbon-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- swagger -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-swagger2-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!--jep 公式解析-->
+        <dependency>
+            <groupId>org.scijava</groupId>
+            <artifactId>jep</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>apm-mybatis</artifactId>
+        </dependency>
+
+        <!-- actuator:查询项目状态;项目上线需要把这个包注释掉,不然会有安全风险 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 46 - 0
src/main/java/com/persagy/apm/diagnose/config/PoemsWebConfigurer.java

@@ -0,0 +1,46 @@
+package com.persagy.apm.diagnose.config;
+
+import com.persagy.apm.common.handler.PoemsContextFilter;
+import com.persagy.apm.mybatis.handler.DynamicDataSourceHandler;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.servlet.Filter;
+
+/**
+ * web拦截器配置
+ *
+ * @author lixing
+ * @version V1.0 2021/5/19 7:42 下午
+ */
+@Configuration
+public class PoemsWebConfigurer implements WebMvcConfigurer {
+
+    @Bean
+    public DynamicDataSourceHandler dynamicDataSourceHandler() {
+        return new DynamicDataSourceHandler();
+    }
+
+    @Bean
+    public Filter poemsContextFilter() {
+        return new PoemsContextFilter();
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        // 设置拦截的路径、不拦截的路径、优先级等等
+        registry.addInterceptor(dynamicDataSourceHandler()).addPathPatterns("/**");
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/swagger-resources/**").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/img/**").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+}

+ 92 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java

@@ -0,0 +1,92 @@
+package com.persagy.apm.diagnose.indicatorrecord.controller;
+
+import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.persagy.apm.diagnose.indicatorrecord.model.*;
+import com.persagy.apm.diagnose.indicatorrecord.model.vo.*;
+import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
+import com.persagy.apm.common.response.*;
+import com.persagy.apm.common.utils.ResultHelper;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 监测指标历史记录控制层
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:26
+ */
+@Api(tags = "监测指标历史记录") 
+@Validated
+@RestController
+@RequestMapping("monitorIndicatorRecords")
+public class MonitorIndicatorRecordController {
+    @Autowired
+    private IMonitorIndicatorRecordService monitorIndicatorRecordService;
+
+	@ApiOperation(value = "创建监测指标历史记录")
+	@PostMapping("/create")
+	public CommonResult<ApmResponseUpsertVO> createMonitorIndicatorRecord(
+	        @Valid @RequestBody AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO) {
+        String id = monitorIndicatorRecordService.createMonitorIndicatorRecord(addMonitorIndicatorRecordDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(id));
+	}
+	
+	@ApiOperation(value = "监测指标历史记录详情")
+    @PostMapping("/get")
+    public CommonResult<MonitorIndicatorRecordItemVO> queryMonitorIndicatorRecordDetail(
+            @Valid @RequestBody QueryMonitorIndicatorRecordDetailDTO queryMonitorIndicatorRecordDetailDTO) {
+        MonitorIndicatorRecord monitorIndicatorRecord = monitorIndicatorRecordService.queryMonitorIndicatorRecordDetail(queryMonitorIndicatorRecordDetailDTO.getId());
+        MonitorIndicatorRecordItemVO monitorIndicatorRecordItemVO = ConvertMonitorIndicatorRecordTool.INSTANCE.convert2ResponseItemDTO(monitorIndicatorRecord);
+        return ResultHelper.single(monitorIndicatorRecordItemVO);
+    }
+
+
+    @ApiOperation(value = "更新监测指标历史记录")
+    @PostMapping("/update")
+    public CommonResult<ApmResponseUpsertVO> updateMonitorIndicatorRecord(
+            @Valid @RequestBody UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO) {
+        monitorIndicatorRecordService.updateMonitorIndicatorRecord(updateMonitorIndicatorRecordDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(updateMonitorIndicatorRecordDTO.getId()));
+    }
+
+
+    @ApiOperation(value = "删除监测指标历史记录")
+    @PostMapping("/delete")
+    public CommonResult deleteMonitorIndicatorRecord(
+            @RequestBody @Valid DeleteMonitorIndicatorRecordDTO deleteMonitorIndicatorRecordDTO) {
+        monitorIndicatorRecordService.deleteMonitorIndicatorRecord(deleteMonitorIndicatorRecordDTO.getId());
+        return ResultHelper.success();
+    }
+
+
+    @ApiOperation(value = "监测指标历史记录列表")
+    @PostMapping("/query")
+    public CommonResult<PageList<MonitorIndicatorRecordListItemVO>> queryMonitorIndicatorRecord(
+            @Valid @RequestBody QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) {
+        List<MonitorIndicatorRecord> monitorIndicatorRecordList = monitorIndicatorRecordService.queryMonitorIndicatorRecordList(queryMonitorIndicatorRecordDTO);
+        List<MonitorIndicatorRecordListItemVO> resultList = ConvertMonitorIndicatorRecordTool.INSTANCE.convert2List(monitorIndicatorRecordList);
+        return ResultHelper.multi(resultList);
+    }
+    
+    //@ApiOperation(value = "监测指标历史记录列表, 分页查询")
+    //@PostMapping("/query")
+    //public CommonResult<PageList<MonitorIndicatorRecordListItemVO>> queryMonitorIndicatorRecord(
+    //        @Valid @RequestBody PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO) {
+    //    IPage<MonitorIndicatorRecord> pagedList = monitorIndicatorRecordService.pageQueryMonitorIndicatorRecord(pageQueryMonitorIndicatorRecordDTO);
+    //    IPage<MonitorIndicatorRecordListItemVO> pagedResultList = pagedList.convert(item -> {
+    //        try {
+    //           return ConvertMonitorIndicatorRecordTool.INSTANCE.convert2ResponseListItemDTO(item);
+    //        } catch (Exception e) {
+    //            throw new IllegalArgumentException("分页查询,MonitorIndicatorRecord实体类转换为列表对象发生异常", e);
+    //        }
+    //    });
+    //    return ResultHelper.multi(pagedResultList);
+    //}
+}
+

+ 15 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/dao/MonitorIndicatorRecordMapper.java

@@ -0,0 +1,15 @@
+package com.persagy.apm.diagnose.indicatorrecord.dao;
+
+import com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 监测指标历史记录(MonitorIndicatorRecord)dao层
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Mapper
+public interface MonitorIndicatorRecordMapper extends BaseMapper<MonitorIndicatorRecord>{
+
+}

+ 73 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/ConvertMonitorIndicatorRecordTool.java

@@ -0,0 +1,73 @@
+package com.persagy.apm.diagnose.indicatorrecord.model;
+
+import org.mapstruct.*;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+import com.persagy.apm.diagnose.indicatorrecord.model.vo.*;
+import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
+
+import java.util.List;
+
+/**
+ * 监测指标历史记录(MonitorIndicatorRecord) dto、vo、do转换工具类
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
+        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface ConvertMonitorIndicatorRecordTool {
+
+    ConvertMonitorIndicatorRecordTool INSTANCE = Mappers.getMapper(ConvertMonitorIndicatorRecordTool.class);
+    
+    /**
+    * do转换为ResponseItemVO
+    *
+    * @param monitorIndicatorRecord do对象
+    * @return ResponseItemVO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    MonitorIndicatorRecordItemVO convert2ResponseItemDTO(MonitorIndicatorRecord monitorIndicatorRecord);
+    
+    /**
+    * do转换为ResponseListItemVO
+    *
+    * @param monitorIndicatorRecord do对象
+    * @return ResponseListItemVO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    MonitorIndicatorRecordListItemVO convert2ResponseListItemDTO(MonitorIndicatorRecord monitorIndicatorRecord);
+
+    /**
+    * do列表转换为ResponseListItemVO列表
+    *
+    * @param monitorIndicatorRecordList do列表
+    * @return ResponseListItemVO列表
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    List<MonitorIndicatorRecordListItemVO> convert2List(List<MonitorIndicatorRecord> monitorIndicatorRecordList);
+    
+    /**
+    * addDTO转换为do
+    *
+    * @param addMonitorIndicatorRecordDTO addDTO
+    * @return 要创建的do对象 
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    MonitorIndicatorRecord convertAddDto2Entity(AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO);
+    
+    /**
+    * updateDTO转换为实体
+    *
+    * @param monitorIndicatorRecord 更新前的do对象
+    * @param updateMonitorIndicatorRecordDTO updateDTO
+    * @return 更新后的do对象
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    MonitorIndicatorRecord convertUpdateDto2Entity(@MappingTarget MonitorIndicatorRecord monitorIndicatorRecord, UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO);
+}
+

+ 40 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/MonitorIndicatorRecord.java

@@ -0,0 +1,40 @@
+package com.persagy.apm.diagnose.indicatorrecord.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.persagy.apm.common.model.entity.AuditableEntity;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 监测指标历史记录(MonitorIndicatorRecord)实体类
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(description = "监测指标历史记录")
+public class MonitorIndicatorRecord extends AuditableEntity<MonitorIndicatorRecord> implements Serializable {
+    private static final long serialVersionUID = -42365400485581158L;
+
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("时间")
+    private Date date;
+    
+    @ApiModelProperty("值")
+    private String value;
+    
+
+    public static String PROP_OBJ_ID = "obj_id";
+    public static String PROP_MONITOR_INDICATOR_ID = "monitor_indicator_id";
+    public static String PROP_DATE = "date";
+    public static String PROP_VALUE = "value";
+
+}

+ 32 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/AddMonitorIndicatorRecordDTO.java

@@ -0,0 +1,32 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "创建监测指标历史记录入参")
+public class AddMonitorIndicatorRecordDTO {
+    @ApiModelProperty(value = "对象id", required = true)
+    @NotNull(message = "对象id不能为空") // todo 更新校验规则
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "时间", required = true)
+    @NotNull(message = "时间不能为空") // todo 更新校验规则
+    private Date date;
+    
+    @ApiModelProperty(value = "值", required = true)
+    @NotNull(message = "值不能为空") // todo 更新校验规则
+    private String value;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/DeleteMonitorIndicatorRecordDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "删除监测指标历史记录入参")
+public class DeleteMonitorIndicatorRecordDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 33 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/PageQueryMonitorIndicatorRecordDTO.java

@@ -0,0 +1,33 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import com.persagy.apm.common.model.dto.PageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(value = "分页查询监测指标历史记录入参")
+public class PageQueryMonitorIndicatorRecordDTO extends PageDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+    @ApiModelProperty(value = "对象id", required = true)
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "时间", required = true)
+    private Date date;
+    
+    @ApiModelProperty(value = "值", required = true)
+    private String value;
+    
+}

+ 27 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java

@@ -0,0 +1,27 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "查询监测指标历史记录入参")
+public class QueryMonitorIndicatorRecordDTO {
+    @ApiModelProperty(value = "对象id", required = true)
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "时间", required = true)
+    private Date date;
+    
+    @ApiModelProperty(value = "值", required = true)
+    private String value;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDetailDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "获取监测指标历史记录详情入参")
+public class QueryMonitorIndicatorRecordDetailDTO {
+    @NotNull(message = "主键不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 36 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/UpdateMonitorIndicatorRecordDTO.java

@@ -0,0 +1,36 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "更新监测指标历史记录入参")
+public class UpdateMonitorIndicatorRecordDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    @NotNull(message = "主键不能为空") // todo 更新校验规则
+    private String id;
+    
+    @ApiModelProperty(value = "对象id", required = true)
+    @NotNull(message = "对象id不能为空") // todo 更新校验规则
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "时间", required = true)
+    @NotNull(message = "时间不能为空") // todo 更新校验规则
+    private Date date;
+    
+    @ApiModelProperty(value = "值", required = true)
+    @NotNull(message = "值不能为空") // todo 更新校验规则
+    private String value;
+    
+}

+ 44 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/vo/MonitorIndicatorRecordItemVO.java

@@ -0,0 +1,44 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "监测指标历史记录返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class MonitorIndicatorRecordItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("时间")
+    private Date date;
+    
+    @ApiModelProperty("值")
+    private String value;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 44 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/vo/MonitorIndicatorRecordListItemVO.java

@@ -0,0 +1,44 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "监测指标历史记录列表返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class MonitorIndicatorRecordListItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("时间")
+    private Date date;
+    
+    @ApiModelProperty("值")
+    private String value;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 75 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java

@@ -0,0 +1,75 @@
+package com.persagy.apm.diagnose.indicatorrecord.service;
+
+import com.persagy.apm.diagnose.indicatorrecord.model.*;
+import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
+import java.util.List;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 监测指标历史记录(MonitorIndicatorRecord) service接口
+ *
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+public interface IMonitorIndicatorRecordService  {
+    
+    /**
+    * 创建监测指标历史记录
+    *
+    * @param addMonitorIndicatorRecordDTO addDTO
+    * @return 监测指标历史记录主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public String createMonitorIndicatorRecord(AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO);
+    
+    /**
+    * 监测指标历史记录详情
+    *
+    * @param id 主键
+    * @return 监测指标历史记录do对象
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public MonitorIndicatorRecord queryMonitorIndicatorRecordDetail(String id);
+    
+    /**
+    * 更新监测指标历史记录
+    *
+    * @param updateMonitorIndicatorRecordDTO updateDTO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public void updateMonitorIndicatorRecord(UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO);
+    
+    /**
+    * 删除监测指标历史记录
+    *
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public void deleteMonitorIndicatorRecord(String id);
+    
+    /**
+    * 查询监测指标历史记录
+    *
+    * @param queryMonitorIndicatorRecordDTO queryDTO
+    * @return List<MonitorIndicatorRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO);
+    
+    /**
+    * 分页查询监测指标历史记录
+    * 
+    * @param pageQueryMonitorIndicatorRecordDTO pageQueryDTO
+    * @return IPage<MonitorIndicatorRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    public IPage<MonitorIndicatorRecord> pageQueryMonitorIndicatorRecord(PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO);
+}

+ 209 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java

@@ -0,0 +1,209 @@
+package com.persagy.apm.diagnose.indicatorrecord.service.impl;
+
+import com.persagy.apm.common.context.AppContext;
+import com.persagy.apm.diagnose.indicatorrecord.dao.MonitorIndicatorRecordMapper;
+import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.apache.commons.lang.StringUtils;
+import com.persagy.apm.common.constant.enums.ValidEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.apm.diagnose.indicatorrecord.model.*;
+import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
+import java.util.List;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.base.CaseFormat;
+import com.persagy.apm.common.model.dto.Sort;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 监测指标历史记录(MonitorIndicatorRecord) service层
+ *
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Service
+public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndicatorRecordMapper, MonitorIndicatorRecord> 
+    implements IMonitorIndicatorRecordService {
+    
+    /**
+    * 创建监测指标历史记录
+    * @return 监测指标历史记录主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public String createMonitorIndicatorRecord(AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO) {
+        MonitorIndicatorRecord monitorIndicatorRecord = ConvertMonitorIndicatorRecordTool.INSTANCE.convertAddDto2Entity(addMonitorIndicatorRecordDTO);
+        // 设置默认值
+        setDefaultValue(monitorIndicatorRecord);
+        save(monitorIndicatorRecord);
+        return monitorIndicatorRecord.getId();
+    }
+    
+    /**
+     * 如果某些字段没有赋值,使用默认的值
+     *
+     * @param monitorIndicatorRecord 监测指标历史记录实体
+     * @author lixing
+     * @version V1.0 2021/3/12 12:29 下午
+     */
+    private void setDefaultValue(MonitorIndicatorRecord monitorIndicatorRecord) {
+        monitorIndicatorRecord.setCreator(AppContext.getContext().getAccountId());
+        // todo 其他默认的属性
+        
+    }
+    
+    /**
+    * 监测指标历史记录详情
+    * @param id 主键
+    * @return 部门do类
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public MonitorIndicatorRecord queryMonitorIndicatorRecordDetail(String id) {
+        MonitorIndicatorRecord monitorIndicatorRecord = getById(id);
+        if (monitorIndicatorRecord == null) {
+            throw new IllegalArgumentException("查看MonitorIndicatorRecord详情时发生异常,找不到要查看的记录,id=" + id);
+        }
+        return monitorIndicatorRecord;
+    }
+    
+    /**
+    * 更新监测指标历史记录
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public void updateMonitorIndicatorRecord(UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO) {
+        MonitorIndicatorRecord monitorIndicatorRecord = getById(updateMonitorIndicatorRecordDTO.getId());
+        monitorIndicatorRecord = ConvertMonitorIndicatorRecordTool.INSTANCE.convertUpdateDto2Entity(monitorIndicatorRecord, updateMonitorIndicatorRecordDTO);
+        monitorIndicatorRecord.setModifier(AppContext.getContext().getAccountId());
+        updateById(monitorIndicatorRecord);
+    }
+    
+    /**
+     * 校验监测指标历史记录是否可删除
+     *
+     * @param id 监测指标历史记录主键
+     * @return 监测指标历史记录do类
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:27
+     */
+    public MonitorIndicatorRecord checkDeletable(String id) {
+        if (id == null) {
+            throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,主键为空");
+        }
+
+        MonitorIndicatorRecord monitorIndicatorRecord = getById(id);
+
+        if (monitorIndicatorRecord == null) {
+            throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,找不到要删除的数据,id:" + id);
+        }
+
+        return monitorIndicatorRecord;
+    }
+    
+    /**
+    * 删除监测指标历史记录
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public void deleteMonitorIndicatorRecord(String id) {
+        // 校验是否可删除
+        MonitorIndicatorRecord monitorIndicatorRecord = checkDeletable(id);
+
+        monitorIndicatorRecord.setValid(ValidEnum.FALSE.getType());
+        updateById(monitorIndicatorRecord);
+    }
+    
+    /**
+    * 查询监测指标历史记录
+    * @return List<MonitorIndicatorRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) {
+        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(MonitorIndicatorRecord.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, MonitorIndicatorRecord.PROP_CREATIONTIME);
+        
+        if (queryMonitorIndicatorRecordDTO != null) {
+                                
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getObjId())) {
+                queryWrapper.like(MonitorIndicatorRecord.PROP_OBJ_ID, queryMonitorIndicatorRecordDTO.getObjId());
+            }
+                                        
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getMonitorIndicatorId())) {
+                queryWrapper.like(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, queryMonitorIndicatorRecordDTO.getMonitorIndicatorId());
+            }
+                                            
+            if (queryMonitorIndicatorRecordDTO.getDate() != null) {
+                queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, queryMonitorIndicatorRecordDTO.getDate());
+            }
+                                        
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getValue())) {
+                queryWrapper.like(MonitorIndicatorRecord.PROP_VALUE, queryMonitorIndicatorRecordDTO.getValue());
+            }
+                                            
+        }
+        
+        return list(queryWrapper);
+    }
+    
+    /**
+    * 分页查询监测指标历史记录
+    * @return IPage<MonitorIndicatorRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:27
+    */
+    @Override
+    public IPage<MonitorIndicatorRecord> pageQueryMonitorIndicatorRecord(PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO) {
+        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(MonitorIndicatorRecord.PROP_VALID, ValidEnum.TRUE.getType());
+        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
+        IPage<MonitorIndicatorRecord> pageParam = new Page<>(pageQueryMonitorIndicatorRecordDTO.getPage(), pageQueryMonitorIndicatorRecordDTO.getSize(),true);
+        // 排序信息
+        if(CollectionUtils.isEmpty(pageQueryMonitorIndicatorRecordDTO.getOrders())){
+            // 默认按创建时间倒序排序
+            queryWrapper.orderBy(true, false, MonitorIndicatorRecord.PROP_CREATIONTIME);
+        }else {
+            List<Sort> orders = pageQueryMonitorIndicatorRecordDTO.getOrders();
+            for(Sort sort: orders) {
+                // 将驼峰转换为下划线格式
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+            }
+        }
+                
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getObjId())) {
+            queryWrapper.like(MonitorIndicatorRecord.PROP_OBJ_ID, pageQueryMonitorIndicatorRecordDTO.getObjId());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getMonitorIndicatorId())) {
+            queryWrapper.like(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, pageQueryMonitorIndicatorRecordDTO.getMonitorIndicatorId());
+        }
+                            
+        if (pageQueryMonitorIndicatorRecordDTO.getDate() != null) {
+            queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, pageQueryMonitorIndicatorRecordDTO.getDate());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getValue())) {
+            queryWrapper.like(MonitorIndicatorRecord.PROP_VALUE, pageQueryMonitorIndicatorRecordDTO.getValue());
+        }
+                                    
+        return getBaseMapper().selectPage(pageParam, queryWrapper);
+    }
+}

+ 92 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/controller/CalculateTimeRecordController.java

@@ -0,0 +1,92 @@
+package com.persagy.apm.diagnose.timerecord.controller;
+
+import com.persagy.apm.diagnose.timerecord.service.ICalculateTimeRecordService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.persagy.apm.diagnose.timerecord.model.*;
+import com.persagy.apm.diagnose.timerecord.model.vo.*;
+import com.persagy.apm.diagnose.timerecord.model.dto.*;
+import com.persagy.apm.common.response.*;
+import com.persagy.apm.common.utils.ResultHelper;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 监测指标计算时间控制层
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Api(tags = "监测指标计算时间") 
+@Validated
+@RestController
+@RequestMapping("calculateTimeRecords")
+public class CalculateTimeRecordController {
+    @Autowired
+    private ICalculateTimeRecordService calculateTimeRecordService;
+
+	@ApiOperation(value = "创建监测指标计算时间")
+	@PostMapping("/create")
+	public CommonResult<ApmResponseUpsertVO> createCalculateTimeRecord(
+	        @Valid @RequestBody AddCalculateTimeRecordDTO addCalculateTimeRecordDTO) {
+        String id = calculateTimeRecordService.createCalculateTimeRecord(addCalculateTimeRecordDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(id));
+	}
+	
+	@ApiOperation(value = "监测指标计算时间详情")
+    @PostMapping("/get")
+    public CommonResult<CalculateTimeRecordItemVO> queryCalculateTimeRecordDetail(
+            @Valid @RequestBody QueryCalculateTimeRecordDetailDTO queryCalculateTimeRecordDetailDTO) {
+        CalculateTimeRecord calculateTimeRecord = calculateTimeRecordService.queryCalculateTimeRecordDetail(queryCalculateTimeRecordDetailDTO.getId());
+        CalculateTimeRecordItemVO calculateTimeRecordItemVO = ConvertCalculateTimeRecordTool.INSTANCE.convert2ResponseItemDTO(calculateTimeRecord);
+        return ResultHelper.single(calculateTimeRecordItemVO);
+    }
+
+
+    @ApiOperation(value = "更新监测指标计算时间")
+    @PostMapping("/update")
+    public CommonResult<ApmResponseUpsertVO> updateCalculateTimeRecord(
+            @Valid @RequestBody UpdateCalculateTimeRecordDTO updateCalculateTimeRecordDTO) {
+        calculateTimeRecordService.updateCalculateTimeRecord(updateCalculateTimeRecordDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(updateCalculateTimeRecordDTO.getId()));
+    }
+
+
+    @ApiOperation(value = "删除监测指标计算时间")
+    @PostMapping("/delete")
+    public CommonResult deleteCalculateTimeRecord(
+            @RequestBody @Valid DeleteCalculateTimeRecordDTO deleteCalculateTimeRecordDTO) {
+        calculateTimeRecordService.deleteCalculateTimeRecord(deleteCalculateTimeRecordDTO.getId());
+        return ResultHelper.success();
+    }
+
+
+    @ApiOperation(value = "监测指标计算时间列表")
+    @PostMapping("/query")
+    public CommonResult<PageList<CalculateTimeRecordListItemVO>> queryCalculateTimeRecord(
+            @Valid @RequestBody QueryCalculateTimeRecordDTO queryCalculateTimeRecordDTO) {
+        List<CalculateTimeRecord> calculateTimeRecordList = calculateTimeRecordService.queryCalculateTimeRecordList(queryCalculateTimeRecordDTO);
+        List<CalculateTimeRecordListItemVO> resultList = ConvertCalculateTimeRecordTool.INSTANCE.convert2List(calculateTimeRecordList);
+        return ResultHelper.multi(resultList);
+    }
+    
+    //@ApiOperation(value = "监测指标计算时间列表, 分页查询")
+    //@PostMapping("/query")
+    //public CommonResult<PageList<CalculateTimeRecordListItemVO>> queryCalculateTimeRecord(
+    //        @Valid @RequestBody PageQueryCalculateTimeRecordDTO pageQueryCalculateTimeRecordDTO) {
+    //    IPage<CalculateTimeRecord> pagedList = calculateTimeRecordService.pageQueryCalculateTimeRecord(pageQueryCalculateTimeRecordDTO);
+    //    IPage<CalculateTimeRecordListItemVO> pagedResultList = pagedList.convert(item -> {
+    //        try {
+    //           return ConvertCalculateTimeRecordTool.INSTANCE.convert2ResponseListItemDTO(item);
+    //        } catch (Exception e) {
+    //            throw new IllegalArgumentException("分页查询,CalculateTimeRecord实体类转换为列表对象发生异常", e);
+    //        }
+    //    });
+    //    return ResultHelper.multi(pagedResultList);
+    //}
+}
+

+ 15 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/dao/CalculateTimeRecordMapper.java

@@ -0,0 +1,15 @@
+package com.persagy.apm.diagnose.timerecord.dao;
+
+import com.persagy.apm.diagnose.timerecord.model.CalculateTimeRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 监测指标计算时间(CalculateTimeRecord)dao层
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Mapper
+public interface CalculateTimeRecordMapper extends BaseMapper<CalculateTimeRecord>{
+
+}

+ 36 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/CalculateTimeRecord.java

@@ -0,0 +1,36 @@
+package com.persagy.apm.diagnose.timerecord.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.persagy.apm.common.model.entity.AuditableEntity;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 监测指标计算时间(CalculateTimeRecord)实体类
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(description = "监测指标计算时间")
+public class CalculateTimeRecord extends AuditableEntity<CalculateTimeRecord> implements Serializable {
+    private static final long serialVersionUID = -77453694266690779L;
+
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("上次计算时间")
+    private Date calculateLastTime;
+    
+
+    public static String PROP_OBJ_ID = "obj_id";
+    public static String PROP_MONITOR_INDICATOR_ID = "monitor_indicator_id";
+    public static String PROP_CALCULATE_LAST_TIME = "calculate_last_time";
+
+}

+ 73 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/ConvertCalculateTimeRecordTool.java

@@ -0,0 +1,73 @@
+package com.persagy.apm.diagnose.timerecord.model;
+
+import org.mapstruct.*;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+import com.persagy.apm.diagnose.timerecord.model.vo.*;
+import com.persagy.apm.diagnose.timerecord.model.dto.*;
+
+import java.util.List;
+
+/**
+ * 监测指标计算时间(CalculateTimeRecord) dto、vo、do转换工具类
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
+        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface ConvertCalculateTimeRecordTool {
+
+    ConvertCalculateTimeRecordTool INSTANCE = Mappers.getMapper(ConvertCalculateTimeRecordTool.class);
+    
+    /**
+    * do转换为ResponseItemVO
+    *
+    * @param calculateTimeRecord do对象
+    * @return ResponseItemVO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    CalculateTimeRecordItemVO convert2ResponseItemDTO(CalculateTimeRecord calculateTimeRecord);
+    
+    /**
+    * do转换为ResponseListItemVO
+    *
+    * @param calculateTimeRecord do对象
+    * @return ResponseListItemVO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    CalculateTimeRecordListItemVO convert2ResponseListItemDTO(CalculateTimeRecord calculateTimeRecord);
+
+    /**
+    * do列表转换为ResponseListItemVO列表
+    *
+    * @param calculateTimeRecordList do列表
+    * @return ResponseListItemVO列表
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    List<CalculateTimeRecordListItemVO> convert2List(List<CalculateTimeRecord> calculateTimeRecordList);
+    
+    /**
+    * addDTO转换为do
+    *
+    * @param addCalculateTimeRecordDTO addDTO
+    * @return 要创建的do对象 
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    CalculateTimeRecord convertAddDto2Entity(AddCalculateTimeRecordDTO addCalculateTimeRecordDTO);
+    
+    /**
+    * updateDTO转换为实体
+    *
+    * @param calculateTimeRecord 更新前的do对象
+    * @param updateCalculateTimeRecordDTO updateDTO
+    * @return 更新后的do对象
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    CalculateTimeRecord convertUpdateDto2Entity(@MappingTarget CalculateTimeRecord calculateTimeRecord, UpdateCalculateTimeRecordDTO updateCalculateTimeRecordDTO);
+}
+

+ 28 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/AddCalculateTimeRecordDTO.java

@@ -0,0 +1,28 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "创建监测指标计算时间入参")
+public class AddCalculateTimeRecordDTO {
+    @ApiModelProperty(value = "对象id", required = true)
+    @NotNull(message = "对象id不能为空") // todo 更新校验规则
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "上次计算时间", required = true)
+    @NotNull(message = "上次计算时间不能为空") // todo 更新校验规则
+    private Date calculateLastTime;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/DeleteCalculateTimeRecordDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "删除监测指标计算时间入参")
+public class DeleteCalculateTimeRecordDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 30 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/PageQueryCalculateTimeRecordDTO.java

@@ -0,0 +1,30 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import com.persagy.apm.common.model.dto.PageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(value = "分页查询监测指标计算时间入参")
+public class PageQueryCalculateTimeRecordDTO extends PageDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+    @ApiModelProperty(value = "对象id", required = true)
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "上次计算时间", required = true)
+    private Date calculateLastTime;
+    
+}

+ 24 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/QueryCalculateTimeRecordDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "查询监测指标计算时间入参")
+public class QueryCalculateTimeRecordDTO {
+    @ApiModelProperty(value = "对象id", required = true)
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "上次计算时间", required = true)
+    private Date calculateLastTime;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/QueryCalculateTimeRecordDetailDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "获取监测指标计算时间详情入参")
+public class QueryCalculateTimeRecordDetailDTO {
+    @NotNull(message = "主键不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 32 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/dto/UpdateCalculateTimeRecordDTO.java

@@ -0,0 +1,32 @@
+package com.persagy.apm.diagnose.timerecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "更新监测指标计算时间入参")
+public class UpdateCalculateTimeRecordDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    @NotNull(message = "主键不能为空") // todo 更新校验规则
+    private String id;
+    
+    @ApiModelProperty(value = "对象id", required = true)
+    @NotNull(message = "对象id不能为空") // todo 更新校验规则
+    private String objId;
+    
+    @ApiModelProperty(value = "监测指标id", required = true)
+    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty(value = "上次计算时间", required = true)
+    @NotNull(message = "上次计算时间不能为空") // todo 更新校验规则
+    private Date calculateLastTime;
+    
+}

+ 41 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/vo/CalculateTimeRecordItemVO.java

@@ -0,0 +1,41 @@
+package com.persagy.apm.diagnose.timerecord.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "监测指标计算时间返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CalculateTimeRecordItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("上次计算时间")
+    private Date calculateLastTime;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 41 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/model/vo/CalculateTimeRecordListItemVO.java

@@ -0,0 +1,41 @@
+package com.persagy.apm.diagnose.timerecord.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Data
+@ApiModel(value = "监测指标计算时间列表返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CalculateTimeRecordListItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("对象id")
+    private String objId;
+    
+    @ApiModelProperty("监测指标id")
+    private String monitorIndicatorId;
+    
+    @ApiModelProperty("上次计算时间")
+    private Date calculateLastTime;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 75 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/service/ICalculateTimeRecordService.java

@@ -0,0 +1,75 @@
+package com.persagy.apm.diagnose.timerecord.service;
+
+import com.persagy.apm.diagnose.timerecord.model.*;
+import com.persagy.apm.diagnose.timerecord.model.dto.*;
+import java.util.List;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 监测指标计算时间(CalculateTimeRecord) service接口
+ *
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+public interface ICalculateTimeRecordService  {
+    
+    /**
+    * 创建监测指标计算时间
+    *
+    * @param addCalculateTimeRecordDTO addDTO
+    * @return 监测指标计算时间主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public String createCalculateTimeRecord(AddCalculateTimeRecordDTO addCalculateTimeRecordDTO);
+    
+    /**
+    * 监测指标计算时间详情
+    *
+    * @param id 主键
+    * @return 监测指标计算时间do对象
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public CalculateTimeRecord queryCalculateTimeRecordDetail(String id);
+    
+    /**
+    * 更新监测指标计算时间
+    *
+    * @param updateCalculateTimeRecordDTO updateDTO
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public void updateCalculateTimeRecord(UpdateCalculateTimeRecordDTO updateCalculateTimeRecordDTO);
+    
+    /**
+    * 删除监测指标计算时间
+    *
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public void deleteCalculateTimeRecord(String id);
+    
+    /**
+    * 查询监测指标计算时间
+    *
+    * @param queryCalculateTimeRecordDTO queryDTO
+    * @return List<CalculateTimeRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public List<CalculateTimeRecord> queryCalculateTimeRecordList(QueryCalculateTimeRecordDTO queryCalculateTimeRecordDTO);
+    
+    /**
+    * 分页查询监测指标计算时间
+    * 
+    * @param pageQueryCalculateTimeRecordDTO pageQueryDTO
+    * @return IPage<CalculateTimeRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    public IPage<CalculateTimeRecord> pageQueryCalculateTimeRecord(PageQueryCalculateTimeRecordDTO pageQueryCalculateTimeRecordDTO);
+}

+ 199 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java

@@ -0,0 +1,199 @@
+package com.persagy.apm.diagnose.timerecord.service.impl;
+
+import com.persagy.apm.common.context.AppContext;
+import com.persagy.apm.diagnose.timerecord.dao.CalculateTimeRecordMapper;
+import com.persagy.apm.diagnose.timerecord.service.ICalculateTimeRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.apache.commons.lang.StringUtils;
+import com.persagy.apm.common.constant.enums.ValidEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.apm.diagnose.timerecord.model.*;
+import com.persagy.apm.diagnose.timerecord.model.dto.*;
+import java.util.List;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.base.CaseFormat;
+import com.persagy.apm.common.model.dto.Sort;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 监测指标计算时间(CalculateTimeRecord) service层
+ *
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:10
+ */
+@Service
+public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRecordMapper, CalculateTimeRecord> 
+    implements ICalculateTimeRecordService {
+    
+    /**
+    * 创建监测指标计算时间
+    * @return 监测指标计算时间主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public String createCalculateTimeRecord(AddCalculateTimeRecordDTO addCalculateTimeRecordDTO) {
+        CalculateTimeRecord calculateTimeRecord = ConvertCalculateTimeRecordTool.INSTANCE.convertAddDto2Entity(addCalculateTimeRecordDTO);
+        // 设置默认值
+        setDefaultValue(calculateTimeRecord);
+        save(calculateTimeRecord);
+        return calculateTimeRecord.getId();
+    }
+    
+    /**
+     * 如果某些字段没有赋值,使用默认的值
+     *
+     * @param calculateTimeRecord 监测指标计算时间实体
+     * @author lixing
+     * @version V1.0 2021/3/12 12:29 下午
+     */
+    private void setDefaultValue(CalculateTimeRecord calculateTimeRecord) {
+        calculateTimeRecord.setCreator(AppContext.getContext().getAccountId());
+        // todo 其他默认的属性
+        
+    }
+    
+    /**
+    * 监测指标计算时间详情
+    * @param id 主键
+    * @return 部门do类
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public CalculateTimeRecord queryCalculateTimeRecordDetail(String id) {
+        CalculateTimeRecord calculateTimeRecord = getById(id);
+        if (calculateTimeRecord == null) {
+            throw new IllegalArgumentException("查看CalculateTimeRecord详情时发生异常,找不到要查看的记录,id=" + id);
+        }
+        return calculateTimeRecord;
+    }
+    
+    /**
+    * 更新监测指标计算时间
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public void updateCalculateTimeRecord(UpdateCalculateTimeRecordDTO updateCalculateTimeRecordDTO) {
+        CalculateTimeRecord calculateTimeRecord = getById(updateCalculateTimeRecordDTO.getId());
+        calculateTimeRecord = ConvertCalculateTimeRecordTool.INSTANCE.convertUpdateDto2Entity(calculateTimeRecord, updateCalculateTimeRecordDTO);
+        calculateTimeRecord.setModifier(AppContext.getContext().getAccountId());
+        updateById(calculateTimeRecord);
+    }
+    
+    /**
+     * 校验监测指标计算时间是否可删除
+     *
+     * @param id 监测指标计算时间主键
+     * @return 监测指标计算时间do类
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
+    public CalculateTimeRecord checkDeletable(String id) {
+        if (id == null) {
+            throw new IllegalArgumentException("删除CalculateTimeRecord时发生异常,主键为空");
+        }
+
+        CalculateTimeRecord calculateTimeRecord = getById(id);
+
+        if (calculateTimeRecord == null) {
+            throw new IllegalArgumentException("删除CalculateTimeRecord时发生异常,找不到要删除的数据,id:" + id);
+        }
+
+        return calculateTimeRecord;
+    }
+    
+    /**
+    * 删除监测指标计算时间
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public void deleteCalculateTimeRecord(String id) {
+        // 校验是否可删除
+        CalculateTimeRecord calculateTimeRecord = checkDeletable(id);
+
+        calculateTimeRecord.setValid(ValidEnum.FALSE.getType());
+        updateById(calculateTimeRecord);
+    }
+    
+    /**
+    * 查询监测指标计算时间
+    * @return List<CalculateTimeRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public List<CalculateTimeRecord> queryCalculateTimeRecordList(QueryCalculateTimeRecordDTO queryCalculateTimeRecordDTO) {
+        QueryWrapper<CalculateTimeRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CalculateTimeRecord.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, CalculateTimeRecord.PROP_CREATIONTIME);
+        
+        if (queryCalculateTimeRecordDTO != null) {
+                                
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryCalculateTimeRecordDTO.getObjId())) {
+                queryWrapper.like(CalculateTimeRecord.PROP_OBJ_ID, queryCalculateTimeRecordDTO.getObjId());
+            }
+                                        
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryCalculateTimeRecordDTO.getMonitorIndicatorId())) {
+                queryWrapper.like(CalculateTimeRecord.PROP_MONITOR_INDICATOR_ID, queryCalculateTimeRecordDTO.getMonitorIndicatorId());
+            }
+                                            
+            if (queryCalculateTimeRecordDTO.getCalculateLastTime() != null) {
+                queryWrapper.eq(CalculateTimeRecord.PROP_CALCULATE_LAST_TIME, queryCalculateTimeRecordDTO.getCalculateLastTime());
+            }
+                                            
+        }
+        
+        return list(queryWrapper);
+    }
+    
+    /**
+    * 分页查询监测指标计算时间
+    * @return IPage<CalculateTimeRecord>
+    * @author lixing
+    * @version V1.0 2021-09-10 00:13:10
+    */
+    @Override
+    public IPage<CalculateTimeRecord> pageQueryCalculateTimeRecord(PageQueryCalculateTimeRecordDTO pageQueryCalculateTimeRecordDTO) {
+        QueryWrapper<CalculateTimeRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CalculateTimeRecord.PROP_VALID, ValidEnum.TRUE.getType());
+        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
+        IPage<CalculateTimeRecord> pageParam = new Page<>(pageQueryCalculateTimeRecordDTO.getPage(), pageQueryCalculateTimeRecordDTO.getSize(),true);
+        // 排序信息
+        if(CollectionUtils.isEmpty(pageQueryCalculateTimeRecordDTO.getOrders())){
+            // 默认按创建时间倒序排序
+            queryWrapper.orderBy(true, false, CalculateTimeRecord.PROP_CREATIONTIME);
+        }else {
+            List<Sort> orders = pageQueryCalculateTimeRecordDTO.getOrders();
+            for(Sort sort: orders) {
+                // 将驼峰转换为下划线格式
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+            }
+        }
+                
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryCalculateTimeRecordDTO.getObjId())) {
+            queryWrapper.like(CalculateTimeRecord.PROP_OBJ_ID, pageQueryCalculateTimeRecordDTO.getObjId());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryCalculateTimeRecordDTO.getMonitorIndicatorId())) {
+            queryWrapper.like(CalculateTimeRecord.PROP_MONITOR_INDICATOR_ID, pageQueryCalculateTimeRecordDTO.getMonitorIndicatorId());
+        }
+                            
+        if (pageQueryCalculateTimeRecordDTO.getCalculateLastTime() != null) {
+            queryWrapper.eq(CalculateTimeRecord.PROP_CALCULATE_LAST_TIME, pageQueryCalculateTimeRecordDTO.getCalculateLastTime());
+        }
+                                    
+        return getBaseMapper().selectPage(pageParam, queryWrapper);
+    }
+}

+ 47 - 0
src/main/resources/bootstrap.yml

@@ -0,0 +1,47 @@
+server:
+  port:
+    9978
+spring:
+  application:
+    name: energy_eq_run_diagnose
+  datasource:
+    dynamic:
+      enabled: true
+      primary: master #设置默认的数据源或者数据源组,默认值即为master
+      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+      datasource:
+        master:
+          url: ${spring.datasource.url}
+          username: ${spring.datasource.username}
+          password: ${spring.datasource.password}
+          driver-class-name: ${spring.datasource.driver-class-name}
+          continue-on-error: true
+          separator: ";"
+          schema: classpath*:db/init/table.sql
+#          data: classpath*:db/init/data.sql
+  data:
+    elasticsearch:
+      repositories:
+        enabled: true
+      client:
+        reactive:
+          connection-timeout: 5000
+
+EUREKA_CLIENT_DEFAULT_ZONE: http://frame:123456@develop.persagy.com/integrated-eureka/eureka/
+#EUREKA_CLIENT_DEFAULT_ZONE: http://frame:Hv7MpxJ5pBckigB@47.117.93.148/integrated-eureka/eureka/
+#CONFIG_SERVER_ID: poems-config
+
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+integrated:
+  swagger:
+    title: energy_eq_run_diagnose 接口文档
+    description: --
+    version: v1.0.0
+    termsOfServiceUrl: v1.0.0
+    contact:
+      name: lixing
+    # 只展示com.persagy包下的接口
+    basePackage: "com.persagy"

+ 0 - 0
src/main/resources/db/init/data.sql


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
src/main/resources/db/init/table.sql


+ 17 - 0
src/main/resources/mapper/CalculateTimeRecordMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.diagnose.timerecord.dao.CalculateTimeRecordMapper">
+    <resultMap id="CalculateTimeRecordMap" type="com.persagy.apm.diagnose.timerecord.model.CalculateTimeRecord">
+		<result column="id" property="id" />
+		<result column="obj_id" property="objId" />
+		<result column="monitor_indicator_id" property="monitorIndicatorId" />
+		<result column="calculate_last_time" property="calculateLastTime" />
+		<result column="ts" property="ts" />
+		<result column="creator" property="creator" />
+		<result column="creation_time" property="creationTime" />
+		<result column="modifier" property="modifier" />
+		<result column="modified_time" property="modifiedTime" />
+		<result column="valid" property="valid" />
+	</resultMap>
+</mapper>
+

+ 18 - 0
src/main/resources/mapper/MonitorIndicatorRecordMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.diagnose.indicatorrecord.dao.MonitorIndicatorRecordMapper">
+    <resultMap id="MonitorIndicatorRecordMap" type="com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord">
+		<result column="id" property="id" />
+		<result column="obj_id" property="objId" />
+		<result column="monitor_indicator_id" property="monitorIndicatorId" />
+		<result column="date" property="date" />
+		<result column="value" property="value" />
+		<result column="ts" property="ts" />
+		<result column="creator" property="creator" />
+		<result column="creation_time" property="creationTime" />
+		<result column="modifier" property="modifier" />
+		<result column="modified_time" property="modifiedTime" />
+		<result column="valid" property="valid" />
+	</resultMap>
+</mapper>
+