package com.dingzhuo.energy.project.govReports; import cn.hutool.core.date.DateUtil; import com.dingzhuo.energy.project.govReports.domain.DataItemPub; import com.dingzhuo.energy.project.govReports.service.IDataItemPubService; import com.dingzhuo.energy.project.reportForm.domain.reportSet; import com.dingzhuo.energy.project.reportForm.mapper.reportSetMapper; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.MessageFormat; import java.util.Date; import java.util.List; @Configuration @Component public class GovReportsTask { private static final String DATE_TYPE_DAY = "DAY"; private static final String DATE_TYPE_MONTH = "MONTH"; /** * 被处理的表的数据 **/ final IDataItemPubService dataItemPubService; final reportSetMapper reportSetMapper; public GovReportsTask(IDataItemPubService dataItemPubService, reportSetMapper reportSetMapper) { this.dataItemPubService = dataItemPubService; this.reportSetMapper = reportSetMapper; } @Scheduled(cron = "${govReport.cronDay}") private void handleDayDataTask() { Date yesterday = DateUtil.yesterday(); String timeCode = MessageFormat.format("D{0}", DateUtil.format(yesterday, "yyyyMMdd")); List reportSetList = reportSetMapper.getAllEnableSetByDateType(DATE_TYPE_DAY); List data = dataItemPubService.getReportData(timeCode, DATE_TYPE_DAY); compareData(data, reportSetList); // 插入或者更新数据 dataItemPubService.insertOrUpdateDateItemPub(data); } @Scheduled(cron = "${govReport.cronMonth}") private void handleMonthDataTask() { Date lastMonth = DateUtil.lastMonth(); String timeCode = MessageFormat.format("M{0}", DateUtil.format(lastMonth, "yyyyMM")); List reportSetList = reportSetMapper.getAllEnableSetByDateType(DATE_TYPE_MONTH); List data = dataItemPubService.getReportData(timeCode, DATE_TYPE_MONTH); compareData(data, reportSetList); // 插入或者更新数据 dataItemPubService.insertOrUpdateDateItemPub(data); } /** * 比较并且处理数据 * * @param itemPubList 原始数据 **/ private List compareData(List itemPubList, List mReportSet) { // 取出来的是空,则直接返回数据 if (mReportSet.isEmpty()) { return itemPubList; } itemPubList.forEach(m -> { m.setOriginValue(m.getValue()); // 获取此点位的设置 reportSet current = mReportSet.stream().filter(n -> n.getIndexId().equals(m.getIndexId())).findFirst().orElse(null); if (current != null) { // id m.setReportSetId(current.getId()); // 下限值 m.setReportLowerLimit(Double.valueOf(current.getLimitValDown())); // 下限替换 m.setReportLowerReplace(Double.valueOf(current.getLimitReplaceValDown())); // 上限值 m.setReportUpperLimit(Double.valueOf(current.getLimitValUp())); // 上限替换 m.setReportLowerLimit(Double.valueOf(current.getLimitReplaceValUp())); if (m.getOriginValue() > m.getReportUpperLimit()) { m.setValue(m.getReportUpperReplace()); } if (m.getOriginValue() < m.getReportLowerLimit()) { m.setValue(m.getReportLowerReplace()); } } }); return itemPubList; } }