| | |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.iailab.framework.common.util.date.DateUtils; |
| | | import com.iailab.module.ansteel.coking.entity.CokingOverviewEntity; |
| | | import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity; |
| | | import com.iailab.module.ansteel.coking.entity.CokingTraceChartEntity; |
| | | import com.iailab.module.ansteel.coking.entity.CokingTraceReportEntity; |
| | | import com.iailab.module.ansteel.coking.service.CokingOverviewService; |
| | | import com.iailab.module.ansteel.coking.service.CokingProcessConfService; |
| | | import com.iailab.module.ansteel.coking.service.CokingTraceChartService; |
| | | import com.iailab.module.ansteel.coking.service.CokingTraceReportService; |
| | | import com.iailab.module.ansteel.coking.entity.*; |
| | | import com.iailab.module.ansteel.coking.service.*; |
| | | import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; |
| | | import com.iailab.module.ansteel.common.enums.ProcessTypeEnum; |
| | | import com.iailab.module.data.api.ind.IndItemApi; |
| | | import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO; |
| | | import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; |
| | | import com.iailab.module.data.api.point.DataPointApi; |
| | | import com.iailab.module.data.api.point.dto.ApiPointValueDTO; |
| | | import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * 备煤工序-概况 |
| | |
| | | private CokingTraceReportService cokingTraceReportService; |
| | | @Resource |
| | | private CokingTraceChartService cokingTraceChartService; |
| | | @Resource |
| | | private CokingTraceSuggestService cokingTraceSuggestService; |
| | | |
| | | @Override |
| | | public void run(String processTypes) { |
| | |
| | | reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName()); |
| | | reportEntity.setAnalyDate(clock); |
| | | reportEntity.setClock(clock); |
| | | reportEntity.setCreateDate(new Date()); |
| | | cokingTraceReportService.save(reportEntity); |
| | | |
| | | // 整体情况 |
| | |
| | | // 指标运行趋势 |
| | | List<CokingProcessConfEntity> indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList()); |
| | | List<CokingTraceChartEntity> cokingTraceChartEntityList = new ArrayList<>(indRunTrend.size()); |
| | | List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>(); |
| | | indRunTrend.forEach(e -> { |
| | | CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity(); |
| | | cokingTraceChartEntity.setRelId(relId); |
| | |
| | | cokingTraceChartEntity.setStartTime(clone.getTime()); |
| | | cokingTraceChartEntity.setCreateDate(new Date()); |
| | | cokingTraceChartEntityList.add(cokingTraceChartEntity); |
| | | |
| | | // 异常数据处理 |
| | | suggestEntitieList.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock)); |
| | | }); |
| | | cokingTraceChartService.insert(cokingTraceChartEntityList); |
| | | cokingTraceSuggestService.insert(suggestEntitieList); |
| | | |
| | | } |
| | | } catch (Exception ex) { |
| | | logger.error("runCokingOverviewTask运行异常"); |
| | | ex.printStackTrace(); |
| | | logger.error("runCokingOverviewTask运行异常",ex); |
| | | } |
| | | logger.info("runCokingOverviewTask运行完成"); |
| | | |
| | | } |
| | | |
| | | private List<CokingTraceSuggestEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) { |
| | | List<CokingTraceSuggestEntity> suggestEntities = new ArrayList<>(); |
| | | switch (ProcessConfDataTypeEnum.getEumByCode(e.getDataType())) { |
| | | case DATAPOINT: |
| | | ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); |
| | | queryDTO.setPointNo(e.getPointNo()); |
| | | queryDTO.setStart(startTime); |
| | | queryDTO.setEnd(endTime); |
| | | List<ApiPointValueDTO> pointValues = dataPointApi.queryPointHistoryValue(queryDTO); |
| | | Map<Date, Double> pointValueMap = pointValues.stream().collect(Collectors.toMap(ApiPointValueDTO::getT, ApiPointValueDTO::getV, (e1, e2) -> e1)); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(startTime); |
| | | while (!calendar.getTime().after(endTime)) { |
| | | String content = null; |
| | | if (pointValueMap.containsKey(calendar.getTime())) { |
| | | Double value = pointValueMap.get(calendar.getTime()); |
| | | if (value.equals(0.0)) { |
| | | content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(数据为0)"; |
| | | }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) { |
| | | content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超上限)"; |
| | | }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) { |
| | | content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超下限)"; |
| | | } |
| | | }else { |
| | | content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(无数据)"; |
| | | } |
| | | if (StringUtils.isNotBlank(content)) { |
| | | suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date())); |
| | | } |
| | | calendar.add(Calendar.DAY_OF_YEAR,1); |
| | | } |
| | | break; |
| | | case IND: |
| | | ApiIndItemQueryDTO query = new ApiIndItemQueryDTO(); |
| | | query.setItemNo(e.getPointNo()); |
| | | query.setStart(startTime); |
| | | query.setEnd(endTime); |
| | | List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemHistoryValue(query); |
| | | Map<String, Double> indValueMap = indValues.stream().collect(Collectors.toMap(ApiIndItemValueDTO::getDataTime, ind -> Double.valueOf(ind.getDataValue().toString()), (e1, e2) -> e1)); |
| | | Calendar intCalendar = Calendar.getInstance(); |
| | | intCalendar.setTime(startTime); |
| | | while (!intCalendar.getTime().after(endTime)) { |
| | | String content = null; |
| | | String time = DateUtils.format(intCalendar.getTime()); |
| | | if (indValueMap.containsKey(time)) { |
| | | Double value = indValueMap.get(time); |
| | | if (value.equals(0.0)) { |
| | | content = time + " " + e.getIndName() + "数据异常(数据为0)"; |
| | | }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) { |
| | | content = time + " " + e.getIndName() + "数据异常(超上限)"; |
| | | }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) { |
| | | content = time + " " + e.getIndName() + "数据异常(超下限)"; |
| | | } |
| | | }else { |
| | | content = time + " " + e.getIndName() + "数据异常(无数据)"; |
| | | } |
| | | if (StringUtils.isNotBlank(content)) { |
| | | suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date())); |
| | | } |
| | | intCalendar.add(Calendar.DAY_OF_YEAR,1); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | |
| | | } |
| | | return suggestEntities; |
| | | } |
| | | } |