已修改7个文件
已重命名1个文件
已添加4个文件
480 ■■■■■ 文件已修改
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/ArcDataApi.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/dto/ApiArcDataDTO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/dto/ApiArcValueQueryDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/arc/ArcDataApiImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/ArcDataService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/ArcSettingService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcDataServiceImpl.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcSettingServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/ArcDataApi.xml 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/ArcDataApi.java
对比新文件
@@ -0,0 +1,34 @@
package com.iailab.module.data.api.arc;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.arc.dto.ApiArcValueQueryDTO;
import com.iailab.module.data.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @description:
 * @author: dzd
 * @date: 2025/5/8 14:48
 **/
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "归档数据")
public interface ArcDataApi {
    String PREFIX = ApiConstants.PREFIX + "/arc";
    @GetMapping(PREFIX + "/arc/last-value")
    @Operation(summary = "查询指标默认值")
    ApiArcDataDTO queryArcLastValue(@RequestParam("code") String code);
    @PostMapping(PREFIX + "/arc/history-value")
    @Operation(summary = "查询指标历史值")
    List<ApiArcDataDTO> queryArcHistortValue(@RequestBody ApiArcValueQueryDTO dto);
}
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/dto/ApiArcDataDTO.java
对比新文件
@@ -0,0 +1,23 @@
package com.iailab.module.data.api.arc.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class ApiArcDataDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 值
     */
    private BigDecimal arcValue;
    /**
     * 归档时间
     */
    private String arcTime;
}
iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/arc/dto/ApiArcValueQueryDTO.java
对比新文件
@@ -0,0 +1,36 @@
package com.iailab.module.data.api.arc.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/30 11:09
 **/
@Data
@Tag(name = "归档值查询")
public class ApiArcValueQueryDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "code")
    @NotNull(message="code不能为空")
    private String code;
    @Schema(description = "开始时间")
    @NotNull(message="start不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date start;
    @Schema(description = "结束时间")
    @NotNull(message="end不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date end;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/arc/ArcDataApiImpl.java
对比新文件
@@ -0,0 +1,33 @@
package com.iailab.module.data.api.arc;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.arc.dto.ApiArcValueQueryDTO;
import com.iailab.module.data.arc.service.ArcDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * @description:
 * @author: dzd
 * @date: 2025/5/8 14:50
 **/
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class ArcDataApiImpl implements ArcDataApi {
    @Autowired
    private ArcDataService arcDataService;
    @Override
    public ApiArcDataDTO queryArcLastValue(String code) {
        return arcDataService.queryArcLastValue(code);
    }
    @Override
    public List<ApiArcDataDTO> queryArcHistortValue(ApiArcValueQueryDTO dto) {
        return arcDataService.queryHistoryValue(dto);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/ArcDataService.java
@@ -2,15 +2,23 @@
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.BaseService;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.arc.dto.ApiArcValueQueryDTO;
import com.iailab.module.data.arc.entity.ArcDataEntity;
import com.iailab.module.data.arc.vo.ArcDataPageReqVO;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public interface ArcDataService extends BaseService<ArcDataEntity> {
    //根据归档类型进行归档
    void archiving(String type, Calendar calendar);
    PageResult<ArcDataEntity> queryPage(ArcDataPageReqVO reqVO);
    List<ApiArcDataDTO> queryHistoryValue(ApiArcValueQueryDTO queryDTO);
    ApiArcDataDTO queryArcLastValue(String code);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/ArcSettingService.java
@@ -25,4 +25,6 @@
    ArcSettingEntity info(String id);
    PageResult<ArcSettingEntity> queryPage(ArcSettingPageReqVO reqVO);
    ArcSettingEntity selectByCode(String code);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcDataServiceImpl.java
@@ -1,7 +1,11 @@
package com.iailab.module.data.arc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.arc.dto.ApiArcValueQueryDTO;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.mybatis.core.query.QueryWrapperX;
import com.iailab.module.data.api.point.DataPointApiImpl;
@@ -15,6 +19,7 @@
import com.iailab.module.data.common.enums.ArcTypeEnum;
import com.iailab.module.data.arc.service.ArcSettingService;
import com.iailab.module.data.arc.vo.ArcDataPageReqVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,6 +29,7 @@
import java.util.stream.Collectors;
@Slf4j
@Service
public class ArcDataServiceImpl extends BaseServiceImpl<ArcDataDao, ArcDataEntity> implements ArcDataService {
@@ -39,189 +45,72 @@
    //根据归档类型进行归档
    @Override
    public void archiving(String type, Calendar calendar) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("type", type);
        switch (ArcTypeEnum.getEumByCode(type)) {
            case HOUR:
                //查询对应类型的归档设置列表
                List<ArcSettingEntity> arcHourList = arcPointSettingService.list(params);
                Date endTime1 = calendar.getTime();
                calendar.add(Calendar.HOUR_OF_DAY, -1);
                Date startTime1 = calendar.getTime();
                //遍历列表
                arcHourList.forEach(item -> {
                    log.debug("开始归档,point:"+item.getPoint());
                    //通过point编号查询数据
                    ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
                    queryDto.setPointNo(item.getPoint());
                    queryDto.setStart(startTime1);
                    queryDto.setEnd(endTime1);
                    List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
                    //判断根据计算类型计算
                    BigDecimal value = calculate(item.getCalculate(), valueList);
                    //归档
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
                    String arcTime = dateFormat.format(startTime1);
                    ArcDataEntity arcDataEntity = new ArcDataEntity();
                    arcDataEntity.setId(String.valueOf(new Date().getTime()));
                    arcDataEntity.setArcTime(arcTime);
                    arcDataEntity.setArcId(item.getId());
                    arcDataEntity.setArcValue(value);
                    arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                            .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                            .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
                    );
                    insert(arcDataEntity);
                    log.debug("归档完成,point:"+item.getPoint());
                });
        ArcTypeEnum arcType = ArcTypeEnum.getEumByCode(type);
        switch (arcType) {
            case MIN15:
                break;
            case HOUR:
            case SHIFT:
                //查询对应类型的归档设置列表
                List<ArcSettingEntity> arcShiftList = arcPointSettingService.list(params);
                Date endTime2 = calendar.getTime();
                calendar.add(Calendar.HOUR_OF_DAY, -1);
                Date startTime2 = calendar.getTime();
                //遍历列表
                arcShiftList.forEach(item -> {
                    log.debug("开始归档,point:"+item.getPoint());
                    //通过point编号查询数据
                    ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
                    queryDto.setPointNo(item.getPoint());
                    queryDto.setStart(startTime2);
                    queryDto.setEnd(endTime2);
                    List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
                    //判断根据计算类型计算
                    BigDecimal value = calculate(item.getCalculate(), valueList);
                    //归档
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
                    String arcTime = dateFormat.format(startTime2);
                    ArcDataEntity arcDataEntity = new ArcDataEntity();
                    arcDataEntity.setId(String.valueOf(new Date().getTime()));
                    arcDataEntity.setArcTime(arcTime);
                    arcDataEntity.setArcId(item.getId());
                    arcDataEntity.setArcValue(value);
                    arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                            .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                            .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
                    );
                    insert(arcDataEntity);
                    log.debug("归档完成,point:"+item.getPoint());
                });
                calendar.set(Calendar.MINUTE,0);
                break;
            case DAY:
                //查询对应类型的归档设置列表
                List<ArcSettingEntity> arcDayList = arcPointSettingService.list(params);
                Date endTime3 = calendar.getTime();
                calendar.add(Calendar.DAY_OF_YEAR, -1);
                Date startTime3 = calendar.getTime();
                //遍历列表
                arcDayList.forEach(item -> {
                    log.debug("开始归档,point:"+item.getPoint());
                    //通过point编号查询数据
                    ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
                    queryDto.setPointNo(item.getPoint());
                    queryDto.setStart(startTime3);
                    queryDto.setEnd(endTime3);
                    List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
                    //判断根据计算类型计算
                    BigDecimal value = calculate(item.getCalculate(), valueList);
                    //归档
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    String arcTime = dateFormat.format(startTime3);
                    ArcDataEntity arcDataEntity = new ArcDataEntity();
                    arcDataEntity.setId(String.valueOf(new Date().getTime()));
                    arcDataEntity.setArcTime(arcTime);
                    arcDataEntity.setArcId(item.getId());
                    arcDataEntity.setArcValue(value);
                    arcDataEntity.setCode(item.getCode());
                    arcDataEntity.setCreateTime(new Date());
                    arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                            .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                            .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
                    );
                    insert(arcDataEntity);
                    log.debug("归档完成,point:"+item.getPoint());
                });
                break;
            case MONTH:
                //查询对应类型的归档设置列表
                List<ArcSettingEntity> arcMonthList = arcPointSettingService.list(params);
                Date endTime4 = calendar.getTime();
                calendar.add(Calendar.MONTH, -1);
                Date startTime4 = calendar.getTime();
                //遍历列表
                arcMonthList.forEach(item -> {
                    log.debug("开始归档,point:"+item.getPoint());
                    //通过point编号查询数据
                    ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
                    queryDto.setPointNo(item.getPoint());
                    queryDto.setStart(startTime4);
                    queryDto.setEnd(endTime4);
                    List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
                    //判断根据计算类型计算
                    BigDecimal value = calculate(item.getCalculate(), valueList);
                    //归档
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
                    String arcTime = dateFormat.format(startTime4);
                    ArcDataEntity arcDataEntity = new ArcDataEntity();
                    arcDataEntity.setId(String.valueOf(new Date().getTime()));
                    arcDataEntity.setArcTime(arcTime);
                    arcDataEntity.setArcId(item.getId());
                    arcDataEntity.setArcValue(value);
                    arcDataEntity.setCode(item.getCode());
                    arcDataEntity.setCreateTime(new Date());
                    arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                            .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                            .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
                    );
                    insert(arcDataEntity);
                    log.debug("归档完成,point:"+item.getPoint());
                });
                break;
            case YEAR:
                //查询对应类型的归档设置列表
                List<ArcSettingEntity> arcYearList = arcPointSettingService.list(params);
                Date endTime5 = calendar.getTime();
                calendar.add(Calendar.YEAR, -1);
                Date startTime5 = calendar.getTime();
                //遍历列表
                arcYearList.forEach(item -> {
                    log.debug("开始归档,point:"+item.getPoint());
                    //通过point编号查询数据
                    ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
                    queryDto.setPointNo(item.getPoint());
                    queryDto.setStart(startTime5);
                    queryDto.setEnd(endTime5);
                    List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
                    //判断根据计算类型计算
                    BigDecimal value = calculate(item.getCalculate(), valueList);
                    //归档
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
                    String arcTime = dateFormat.format(startTime5);
                    ArcDataEntity arcDataEntity = new ArcDataEntity();
                    arcDataEntity.setId(String.valueOf(new Date().getTime()));
                    arcDataEntity.setArcTime(arcTime);
                    arcDataEntity.setArcId(item.getId());
                    arcDataEntity.setArcValue(value);
                    arcDataEntity.setCode(item.getCode());
                    arcDataEntity.setCreateTime(new Date());
                    arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                            .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                            .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
                    );
                    insert(arcDataEntity);
                    log.debug("归档完成,point:"+item.getPoint());
                });
                calendar.set(Calendar.MINUTE,0);
                calendar.set(Calendar.HOUR_OF_DAY,0);
                break;
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("type", type);
        // 时间格式
        SimpleDateFormat dateFormat = arcType.getDateFormat();
        int calendarType = arcType.getCalendarType();
        int calendarNum = arcType.getCalendarNum();
        //查询对应类型的归档设置列表
        List<ArcSettingEntity> arcSettingList = arcPointSettingService.list(params);
        Date endTime = calendar.getTime();
        calendar.add(calendarType, calendarNum);
        Date startTime = calendar.getTime();
        //遍历列表
        List<ArcDataEntity> result = new ArrayList<>(arcSettingList.size());
        arcSettingList.forEach(item -> {
            log.debug("开始归档,point:"+item.getPoint());
            //通过point编号查询数据
            ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
            queryDto.setPointNo(item.getPoint());
            queryDto.setStart(startTime);
            queryDto.setEnd(endTime);
            List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDto);
            //判断根据计算类型计算
            BigDecimal value = calculate(item.getCalculate(), valueList);
            //归档
            String arcTime = dateFormat.format(startTime);
            ArcDataEntity arcDataEntity = new ArcDataEntity();
            arcDataEntity.setId(UUID.randomUUID().toString());
            arcDataEntity.setArcTime(arcTime);
            arcDataEntity.setArcId(item.getId());
            arcDataEntity.setArcValue(value);
            arcDataEntity.setCode(item.getCode());
            arcDataEntity.setCreateTime(new Date());
            arcDataDao.delete(new LambdaQueryWrapperX<ArcDataEntity>()
                    .eq(ArcDataEntity::getArcId, arcDataEntity.getArcId())
                    .eq(ArcDataEntity::getArcTime, arcDataEntity.getArcTime())
            );
            result.add(arcDataEntity);
            log.debug("归档完成,point:"+item.getPoint() + ",value:" + value);
        });
        baseDao.insert(result);
    }
    private BigDecimal calculate(String calculate, List<ApiPointValueDTO> valueList) {
        List<ApiPointValueDTO> valueFilterList = valueList.stream().filter(e -> !Double.valueOf(e.getV()).equals(-2.0) ).collect(Collectors.toList());
        valueList = valueList.stream().filter(e -> !Double.valueOf(e.getV()).equals(-2.0) ).collect(Collectors.toList());
        log.debug("开始计算");
        if ( valueList.isEmpty() || valueFilterList.isEmpty()) {
            throw new IllegalArgumentException("valueList 为空");
        if ( valueList.isEmpty()) {
            log.error("valueList is empty,return zero!");
            return BigDecimal.ZERO;
        }
        BigDecimal value = BigDecimal.ZERO;
@@ -232,15 +121,16 @@
                value = BigDecimal.valueOf(valueList.get(valueList.size() - 1).getV());
                break;
            case SUM:
                value = BigDecimal.valueOf(valueFilterList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                value = BigDecimal.valueOf(valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                break;
            case DIFF:
                if (valueFilterList.size() < 2) {
                    throw new IllegalArgumentException("valueFilterList size小于2");
                if (valueList.size() < 2) {
                    log.error("valueFilterList size小于2");
                    return BigDecimal.ZERO;
                }
                BigDecimal prev = BigDecimal.valueOf(valueFilterList.get(0).getV());
                for (int i = 1; i < valueFilterList.size(); i++) {
                    BigDecimal curr = BigDecimal.valueOf(valueFilterList.get(i).getV());
                BigDecimal prev = BigDecimal.valueOf(valueList.get(0).getV());
                for (int i = 1; i < valueList.size(); i++) {
                    BigDecimal curr = BigDecimal.valueOf(valueList.get(i).getV());
                    if(curr.compareTo(prev) > 0 ) {
                        value = value.add(curr.subtract(prev));
                    }
@@ -248,11 +138,13 @@
                }
                break;
            case AVG:
                value = BigDecimal.valueOf(valueFilterList.stream().mapToDouble(ApiPointValueDTO::getV).sum());
                value = value.divide(BigDecimal.valueOf(valueFilterList.size()), 2, BigDecimal.ROUND_HALF_UP);
                value = BigDecimal.valueOf(valueList.stream().mapToDouble(ApiPointValueDTO::getV).average().orElse(0.0));
                break;
            case ZERO:
                value = BigDecimal.valueOf(valueList.stream().filter(e -> Double.valueOf(e.getV()).equals(0.0)).count());
                break;
            default:
                throw new IllegalArgumentException("没有对应计算方法");
                return BigDecimal.ZERO;
        }
        return value;
    }
@@ -261,4 +153,67 @@
    public PageResult<ArcDataEntity> queryPage(ArcDataPageReqVO reqVO) {
        return arcDataDao.selectPage(reqVO);
    }
    @Override
    public List<ApiArcDataDTO> queryHistoryValue(ApiArcValueQueryDTO queryDTO) {
        ArcSettingEntity settingEntity = arcPointSettingService.selectByCode(queryDTO.getCode());
        if (settingEntity == null) {
            log.error("arcPointSettingCode:" + queryDTO.getCode() + "不存在");
            return new ArrayList<>();
        }
        ArcTypeEnum arcType = ArcTypeEnum.getEumByCode(settingEntity.getType());
        // 时间格式
        SimpleDateFormat dateFormat = arcType.getDateFormat();
        Calendar calendar = Calendar.getInstance();
        if (queryDTO.getEnd() == null) {
            queryDTO.setEnd(calendar.getTime());
        }
        if (queryDTO.getStart() == null) {
            calendar.add(arcType.getCalendarType(),arcType.getCalendarNum());
            queryDTO.setStart(calendar.getTime());
        }
        QueryWrapper<ArcDataEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.between("arc_time",dateFormat.format(queryDTO.getStart()),dateFormat.format(queryDTO.getEnd()))
                .eq("code",queryDTO.getCode());
        return ConvertUtils.sourceToTarget(arcDataDao.selectList(queryWrapper),ApiArcDataDTO.class);
    }
    @Override
    public ApiArcDataDTO queryArcLastValue(String code) {
        ArcSettingEntity settingEntity = arcPointSettingService.selectByCode(code);
        if (settingEntity == null) {
            log.error("arcPointSettingCode:" + code + "不存在");
            return new ApiArcDataDTO();
        }
        ArcTypeEnum arcType = ArcTypeEnum.getEumByCode(settingEntity.getType());
        Calendar calendar = Calendar.getInstance();
        switch (arcType) {
            case MIN15:
                break;
            case HOUR:
            case SHIFT:
                calendar.set(Calendar.MINUTE,0);
                break;
            case DAY:
            case MONTH:
            case YEAR:
                calendar.set(Calendar.MINUTE,0);
                calendar.set(Calendar.HOUR_OF_DAY,0);
                break;
        }
        // 最后归档时间
        calendar.add(arcType.getCalendarType(), arcType.getCalendarNum());
        String arcTime = arcType.getDateFormat().format(calendar.getTime());
        QueryWrapper<ArcDataEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("arc_time",arcTime)
                .eq("code",code);
        ArcDataEntity arcDataEntity = baseDao.selectOne(queryWrapper);
        return ConvertUtils.sourceToTarget(arcDataEntity,ApiArcDataDTO.class);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/arc/service/impl/ArcSettingServiceImpl.java
@@ -69,4 +69,9 @@
    public PageResult<ArcSettingEntity> queryPage(ArcSettingPageReqVO reqVO) {
        return arcPointSettingDao.selectPage(reqVO);
    }
    @Override
    public ArcSettingEntity selectByCode(String code) {
        return  baseDao.selectOne("code",code);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcCalculateTypeEnum.java
@@ -18,7 +18,9 @@
    DIFF("DIFF", "差"),
    AVG("AVG", "平均");
    AVG("AVG", "平均"),
    ZERO("ZERO", "零值统计");
    private String code;
    private String desc;
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/ArcTypeEnum.java
@@ -3,6 +3,9 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
 * @author DongYukun
 * @Description
@@ -12,20 +15,23 @@
@AllArgsConstructor
public enum ArcTypeEnum {
    MIN15("MIN15","15分钟"),
    MIN15("MIN15","15分钟",new SimpleDateFormat("yyyy-MM-dd HH:mm"), Calendar.MINUTE,-15),
    HOUR("HOUR","时"),
    HOUR("HOUR","时",new SimpleDateFormat("yyyy-MM-dd HH"),Calendar.HOUR_OF_DAY,-1),
    SHIFT("SHIFT","班"),
    SHIFT("SHIFT","班",new SimpleDateFormat("yyyy-MM-dd HH"),Calendar.HOUR_OF_DAY,-8),
    DAY("DAY","日"),
    DAY("DAY","日",new SimpleDateFormat("yyyy-MM-dd"),Calendar.DAY_OF_YEAR,-1),
    MONTH("MONTH", "月"),
    MONTH("MONTH", "月",new SimpleDateFormat("yyyy-MM"),Calendar.MONTH,-1),
    YEAR("YEAR", "年");
    YEAR("YEAR", "年",new SimpleDateFormat("yyyy"),Calendar.YEAR,-1);
    private String code;
    private String desc;
    SimpleDateFormat dateFormat;
    int calendarType;
    int calendarNum;
    public static ArcTypeEnum getEumByCode(String code) {
        if (code == null) {
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java
@@ -164,7 +164,7 @@
        daPointEntity.setId(UUID.randomUUID().toString());
        switch (PointTypeEnum.getEumByCode(dataPoint.getPointType())) {
            case MEASURE_POINT:
                DaMeasurePointDTO measurePoint = new DaMeasurePointDTO();
                DaMeasurePointDTO measurePoint = dataPoint.getMeasurePoint();
                measurePoint.setSourceType(dataPoint.getSourceOption().get(0));
                measurePoint.setSourceId(dataPoint.getSourceOption().get(1));
                measurePoint.setTagNo(dataPoint.getSourceOption().get(2));
iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/ArcDataApi.xml