From b4b4596887770a34f80c31ab849068893094dab5 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 24 二月 2025 10:47:08 +0800 Subject: [PATCH] Merge branch 'master' of http://dlindusit.com:53929/r/iailab-plat --- iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/ArcPointDataServiceImpl.java | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 231 insertions(+), 0 deletions(-) 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..03907c8 --- /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,231 @@ +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.*; + + +@Service +public class ArcPointDataServiceImpl extends BaseServiceImpl<ArcPointDataDao, ArcPointDataEntity> implements ArcPointDataService { + + @Autowired + private ArcPointSettingService arcPointSettingService; + + @Autowired + private DataPointApiImpl dataPointApi; + + //根据归档类型进行归档 + @Override + public void archiving(String type) { + Map<String, Object> params = new HashMap<String, Object>(); + params.put("type", type); + switch (ArcTypeEnum.getEumByCode(type)) { + case HOUR: + //查询对应类型的归档设置列表 + List<ArcPointSettingEntity> arcHourList = arcPointSettingService.list(params); + //遍历列表 + 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.list(params); + //遍历列表 + 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.list(params); + //遍历列表 + 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.list(params); + //遍历列表 + 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.list(params); + //遍历列表 + 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; + } +} -- Gitblit v1.9.3