From 3205a2e89a90739848f8fa68f58185e876d4d577 Mon Sep 17 00:00:00 2001 From: dongyukun <1208714201@qq.com> Date: 星期四, 20 二月 2025 16:02:24 +0800 Subject: [PATCH] 时序数据归档 --- iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointSettingService.java | 14 + iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql | 23 ++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointSettingDao.java | 11 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointDataServiceImpl.java | 232 +++++++++++++++++++++++++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java | 38 ++++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointSettingServiceImpl.java | 5 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointDataService.java | 9 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointDataEntity.java | 42 ++++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/ArcPointController.java | 34 +++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java | 40 ++++ iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointDataDao.java | 11 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointSettingEntity.java | 56 ++++++ 12 files changed, 514 insertions(+), 1 deletions(-) diff --git a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql index 11158d6..67722df 100644 --- a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql +++ b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql @@ -409,4 +409,25 @@ `collect_time` DATETIME COMMENT '采集时间' , PRIMARY KEY (id) USING BTREE, UNIQUE KEY `uk_point_no` (`point_no`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT = '测点采集状态表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT = '测点采集状态表'; + +CREATE TABLE `t_arc_data` ( + `id` varchar(255) NOT NULL COMMENT 'id', + `arc_id` varchar(255) DEFAULT NULL COMMENT '归档id', + `arc_time` varchar(255) DEFAULT NULL COMMENT '归档时间', + `value` varchar(255) DEFAULT NULL COMMENT '归档时间', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='归档数据表'; + +CREATE TABLE `t_arc_setting` ( + `id` varchar(255) NOT NULL COMMENT 'id', + `name` varchar(255) DEFAULT NULL COMMENT '名称', + `type` varchar(255) DEFAULT NULL COMMENT '归档周期(shift、day、month、year)', + `point` varchar(255) DEFAULT NULL COMMENT '归档点位', + `calculate` varchar(255) DEFAULT NULL COMMENT '计算方法(none、sum、diff、avg)', + `is_enable` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '是否启用', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='定时归档设置表'; \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java new file mode 100644 index 0000000..a286a87 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java @@ -0,0 +1,38 @@ +package com.iailab.module.data.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author DongYukun + * @Description + * @createTime 2025年02月20日 + */ +@Getter +@AllArgsConstructor +public enum ArcCalculateTypeEnum { + + NONE("NONE","不计算"), + + SUM("SUM","累计"), + + DIFF("DIFF", "差"), + + AVG("AVG", "平均"); + + private String code; + private String desc; + + public static ArcCalculateTypeEnum getEumByCode(String code) { + if (code == null) { + return null; + } + + for (ArcCalculateTypeEnum statusEnum : ArcCalculateTypeEnum.values()) { + if (statusEnum.getCode().equals(code)) { + return statusEnum; + } + } + return null; + } +} \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java new file mode 100644 index 0000000..5fc70d7 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java @@ -0,0 +1,40 @@ +package com.iailab.module.data.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author DongYukun + * @Description + * @createTime 2025年02月20日 + */ +@Getter +@AllArgsConstructor +public enum ArcTypeEnum { + + HOUR("HOUR","时"), + + SHIFT("SHIFT","班"), + + DAY("DAY","日"), + + MONTH("MONTH", "月"), + + YEAR("YEAR", "年"); + + private String code; + private String desc; + + public static ArcTypeEnum getEumByCode(String code) { + if (code == null) { + return null; + } + + for (ArcTypeEnum statusEnum : ArcTypeEnum.values()) { + if (statusEnum.getCode().equals(code)) { + return statusEnum; + } + } + return null; + } +} \ No newline at end of file diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/ArcPointController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/ArcPointController.java new file mode 100644 index 0000000..29ccd1c --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/ArcPointController.java @@ -0,0 +1,34 @@ +package com.iailab.module.data.point.controller.admin; + +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.module.data.point.dto.DaPointDTO; +import com.iailab.module.data.point.service.ArcPointDataService; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +import static com.iailab.framework.common.pojo.CommonResult.success; + +@Tag(name = "数据归档,测点") +@RestController +@RequestMapping("/data/da/point") +@Validated +public class ArcPointController { + + @Autowired + private ArcPointDataService arcPointDataService; + + + @PostMapping("archiving") + public CommonResult<Boolean> archiving(@RequestBody String type) { + arcPointDataService.archiving(type); + return success(true); + } +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointDataDao.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointDataDao.java new file mode 100644 index 0000000..83dc064 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointDataDao.java @@ -0,0 +1,11 @@ +package com.iailab.module.data.point.dao; + +import com.iailab.framework.common.dao.BaseDao; +import com.iailab.framework.tenant.core.db.dynamic.TenantDS; +import com.iailab.module.data.point.entity.ArcPointDataEntity; +import org.apache.ibatis.annotations.Mapper; + +@TenantDS +@Mapper +public interface ArcPointDataDao extends BaseDao<ArcPointDataEntity> { +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointSettingDao.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointSettingDao.java new file mode 100644 index 0000000..6c2d62e --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/dao/ArcPointSettingDao.java @@ -0,0 +1,11 @@ +package com.iailab.module.data.point.dao; + +import com.iailab.framework.common.dao.BaseDao; +import com.iailab.framework.tenant.core.db.dynamic.TenantDS; +import com.iailab.module.data.point.entity.ArcPointSettingEntity; +import org.apache.ibatis.annotations.Mapper; + +@TenantDS +@Mapper +public interface ArcPointSettingDao extends BaseDao<ArcPointSettingEntity> { +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointDataEntity.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointDataEntity.java new file mode 100644 index 0000000..3600a36 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointDataEntity.java @@ -0,0 +1,42 @@ +package com.iailab.module.data.point.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; + +@Data +@TableName("t_arc_data") +public class ArcPointDataEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** + * 归档id + */ + private String arcId; + + /** + * 值 + */ + private String value; + + /** + * 归档时间 + */ + private String arcTime; + + /** + * 创建时间 + */ + private String createTime; + +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointSettingEntity.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointSettingEntity.java new file mode 100644 index 0000000..02f61d7 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/entity/ArcPointSettingEntity.java @@ -0,0 +1,56 @@ +package com.iailab.module.data.point.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; + +@Data +@TableName("t_arc_setting") +public class ArcPointSettingEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 归档周期(shift、day、month、year) + */ + private String type; + + /** + * 归档点位 + */ + private String point; + + /** + * 计算方法(none、sum、diff、avg) + */ + private String calculate; + + /** + * 是否启用 + */ + private String isEnable; + + /** + * 创建时间 + */ + private String createTime; + + /** + * 更新时间 + */ + private String updateTime; +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointDataService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointDataService.java new file mode 100644 index 0000000..cdec3bb --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointDataService.java @@ -0,0 +1,9 @@ +package com.iailab.module.data.point.service; + +import com.iailab.framework.common.service.BaseService; +import com.iailab.module.data.point.entity.ArcPointDataEntity; + +public interface ArcPointDataService extends BaseService<ArcPointDataEntity> { + //根据归档类型进行归档 + void archiving(String type); +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointSettingService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointSettingService.java new file mode 100644 index 0000000..5c0e67b --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/ArcPointSettingService.java @@ -0,0 +1,14 @@ +package com.iailab.module.data.point.service; + +import com.iailab.framework.common.service.BaseService; +import com.iailab.module.data.point.entity.ArcPointSettingEntity; +import com.iailab.module.data.point.entity.DaCumulatePointEntity; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public interface ArcPointSettingService extends BaseService<ArcPointSettingEntity> { + + List<ArcPointSettingEntity> getListByType(String code); +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointDataServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointDataServiceImpl.java new file mode 100644 index 0000000..c695f29 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointDataServiceImpl.java @@ -0,0 +1,232 @@ +package com.iailab.module.data.point.service.impl; + +import com.iailab.framework.common.service.impl.BaseServiceImpl; +import com.iailab.module.data.api.point.DataPointApiImpl; +import com.iailab.module.data.api.point.dto.ApiPointValueDTO; +import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; +import com.iailab.module.data.common.enums.ArcCalculateTypeEnum; +import com.iailab.module.data.point.dao.ArcPointDataDao; +import com.iailab.module.data.point.entity.ArcPointDataEntity; +import com.iailab.module.data.point.entity.ArcPointSettingEntity; +import com.iailab.module.data.point.service.ArcPointDataService; +import com.iailab.module.data.common.enums.ArcTypeEnum; +import com.iailab.module.data.point.service.ArcPointSettingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +@Service +public class ArcPointDataServiceImpl extends BaseServiceImpl<ArcPointDataDao, ArcPointDataEntity> implements ArcPointDataService { + + @Autowired + private ArcPointSettingService arcPointSettingService; + + @Autowired + private DataPointApiImpl dataPointApi; + + //根据归档类型进行归档 + @Override + public void archiving(String type) { + switch (ArcTypeEnum.getEumByCode(type)) { + case HOUR: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcHourList = arcPointSettingService.getListByType(ArcTypeEnum.HOUR.getCode()); + //遍历列表 + arcHourList.forEach(item -> { + log.debug("开始归档,point:"+item.getPoint()); + //获取开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.HOUR_OF_DAY, -1); + Date startTime = calendar.getTime(); + //通过point编号查询数据 + ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO(); + queryDto.setPointNo(item.getPoint()); + queryDto.setStart(startTime); + queryDto.setEnd(new Date()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto); + //判断根据计算类型计算 + BigDecimal value = calculate(item.getCalculate(), valueList); + //归档 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH"); + String arcTime = dateFormat.format(startTime); + ArcPointDataEntity arcPointDataEntity = new ArcPointDataEntity(); + arcPointDataEntity.setId(String.valueOf(new Date().getTime())); + arcPointDataEntity.setArcTime(arcTime); + arcPointDataEntity.setArcId(item.getId()); + arcPointDataEntity.setValue(String.valueOf(value)); + insert(arcPointDataEntity); + log.debug("归档完成,point:"+item.getPoint()); + }); + break; + case SHIFT: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcShiftList = arcPointSettingService.getListByType(ArcTypeEnum.SHIFT.getCode()); + //遍历列表 + arcShiftList.forEach(item -> { + log.debug("开始归档,point:"+item.getPoint()); + //获取开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.HOUR_OF_DAY, -12); + Date startTime = calendar.getTime(); + //通过point编号查询数据 + ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO(); + queryDto.setPointNo(item.getPoint()); + queryDto.setStart(startTime); + queryDto.setEnd(new Date()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto); + //判断根据计算类型计算 + BigDecimal value = calculate(item.getCalculate(), valueList); + //归档 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH"); + String arcTime = dateFormat.format(startTime); + ArcPointDataEntity arcPointDataEntity = new ArcPointDataEntity(); + arcPointDataEntity.setId(String.valueOf(new Date().getTime())); + arcPointDataEntity.setArcTime(arcTime); + arcPointDataEntity.setArcId(item.getId()); + arcPointDataEntity.setValue(String.valueOf(value)); + insert(arcPointDataEntity); + log.debug("归档完成,point:"+item.getPoint()); + }); + break; + case DAY: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcDayList = arcPointSettingService.getListByType(ArcTypeEnum.DAY.getCode()); + //遍历列表 + arcDayList.forEach(item -> { + log.debug("开始归档,point:"+item.getPoint()); + //获取开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -1); + Date startTime = calendar.getTime(); + //通过point编号查询数据 + ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO(); + queryDto.setPointNo(item.getPoint()); + queryDto.setStart(startTime); + queryDto.setEnd(new Date()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto); + //判断根据计算类型计算 + BigDecimal value = calculate(item.getCalculate(), valueList); + //归档 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String arcTime = dateFormat.format(startTime); + ArcPointDataEntity arcPointDataEntity = new ArcPointDataEntity(); + arcPointDataEntity.setId(String.valueOf(new Date().getTime())); + arcPointDataEntity.setArcTime(arcTime); + arcPointDataEntity.setArcId(item.getId()); + arcPointDataEntity.setValue(String.valueOf(value)); + insert(arcPointDataEntity); + log.debug("归档完成,point:"+item.getPoint()); + }); + break; + case MONTH: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcMonthList = arcPointSettingService.getListByType(ArcTypeEnum.MONTH.getCode()); + //遍历列表 + arcMonthList.forEach(item -> { + log.debug("开始归档,point:"+item.getPoint()); + //获取开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); + Date startTime = calendar.getTime(); + //通过point编号查询数据 + ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO(); + queryDto.setPointNo(item.getPoint()); + queryDto.setStart(startTime); + queryDto.setEnd(new Date()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto); + //判断根据计算类型计算 + BigDecimal value = calculate(item.getCalculate(), valueList); + //归档 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM"); + String arcTime = dateFormat.format(startTime); + ArcPointDataEntity arcPointDataEntity = new ArcPointDataEntity(); + arcPointDataEntity.setId(String.valueOf(new Date().getTime())); + arcPointDataEntity.setArcTime(arcTime); + arcPointDataEntity.setArcId(item.getId()); + arcPointDataEntity.setValue(String.valueOf(value)); + insert(arcPointDataEntity); + log.debug("归档完成,point:"+item.getPoint()); + }); + break; + case YEAR: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcYearList = arcPointSettingService.getListByType(ArcTypeEnum.YEAR.getCode()); + //遍历列表 + arcYearList.forEach(item -> { + log.debug("开始归档,point:"+item.getPoint()); + //获取开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, -1); + Date startTime = calendar.getTime(); + //通过point编号查询数据 + ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO(); + queryDto.setPointNo(item.getPoint()); + queryDto.setStart(startTime); + queryDto.setEnd(new Date()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto); + //判断根据计算类型计算 + BigDecimal value = calculate(item.getCalculate(), valueList); + //归档 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy"); + String arcTime = dateFormat.format(startTime); + ArcPointDataEntity arcPointDataEntity = new ArcPointDataEntity(); + arcPointDataEntity.setId(String.valueOf(new Date().getTime())); + arcPointDataEntity.setArcTime(arcTime); + arcPointDataEntity.setArcId(item.getId()); + arcPointDataEntity.setValue(String.valueOf(value)); + insert(arcPointDataEntity); + log.debug("归档完成,point:"+item.getPoint()); + }); + break; + + } + } + + private BigDecimal calculate(String calculate, List<ApiPointValueDTO> valueList) { + log.debug("开始计算"); + if (valueList == null || valueList.isEmpty()) { + throw new IllegalArgumentException("valueList 为空"); + } + + BigDecimal value = BigDecimal.ZERO; + ArcCalculateTypeEnum calculateType = ArcCalculateTypeEnum.getEumByCode(calculate); + + switch (calculateType) { + case NONE: + value = BigDecimal.valueOf(valueList.get(valueList.size() - 1).getV()); + break; + case SUM: + for (ApiPointValueDTO dto : valueList) { + value = value.add(BigDecimal.valueOf(dto.getV())); + } + break; + case DIFF: + if (valueList.size() < 2) { + throw new IllegalArgumentException("valueList size小于2"); + } + BigDecimal prev = BigDecimal.valueOf(valueList.get(0).getV()); + for (int i = 1; i < valueList.size(); i++) { + BigDecimal curr = BigDecimal.valueOf(valueList.get(i).getV()); + value = value.add(curr.subtract(prev)); + prev = curr; + } + break; + case AVG: + for (ApiPointValueDTO dto : valueList) { + value = value.add(BigDecimal.valueOf(dto.getV())); + } + value = value.divide(BigDecimal.valueOf(valueList.size()), 2, BigDecimal.ROUND_HALF_UP); + break; + default: + throw new IllegalArgumentException("没有对应计算方法"); + } + return value; + } +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointSettingServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointSettingServiceImpl.java new file mode 100644 index 0000000..ac4248b --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointSettingServiceImpl.java @@ -0,0 +1,5 @@ +package com.iailab.module.data.point.service.impl; + +public class ArcPointSettingServiceImpl { + +} -- Gitblit v1.9.3