Merge branch 'master' of http://dlindusit.com:53929/r/ansteel
| | |
| | | ( |
| | | `id` varchar(36) NOT NULL COMMENT 'id', |
| | | `rel_id` varchar(36) NULL DEFAULT NULL COMMENT '关联ID', |
| | | `process` varchar(20) NULL DEFAULT NULL COMMENT '工序名称', |
| | | `ex_obj` varchar(20) NULL DEFAULT NULL COMMENT '异常对象', |
| | | `clock` varchar(20) NULL DEFAULT NULL COMMENT '查询时间', |
| | | `data_type` varchar(20) NULL DEFAULT NULL COMMENT '数据类型', |
| | | `point_no` varchar(20) NULL DEFAULT NULL COMMENT '异常点位编号', |
| | | `point_name` varchar(20) NULL DEFAULT NULL COMMENT '异常点位名称', |
| | | `ex_date` datetime NULL DEFAULT NULL COMMENT '异常时间', |
| | | `ex_type` varchar(20) NULL DEFAULT NULL COMMENT '异常原因', |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | `ex_time` datetime NULL DEFAULT NULL COMMENT '异常时间', |
| | | `ex_type` varchar(200) NULL DEFAULT NULL COMMENT '异常原因', |
| | | `create_date` datetime COMMENT '创建时间', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | key idx_rel_id (rel_id) |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '焦化工序数据异常'; |
| | | |
| | | -- ---------------------------- |
| | |
| | | import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | |
| | | @Autowired |
| | | private CokingTraceChartService cokingTraceChartService; |
| | | |
| | | @Autowired |
| | | private CokingTraceDataService cokingTraceDataService; |
| | | |
| | | @Resource |
| | | private DataPointApi dataPointApi; |
| | | |
| | |
| | | private IndItemApi indItemApi; |
| | | |
| | | @GetMapping("/analy-ind/list") |
| | | @Operation(summary = "焦化工序-指标分析") |
| | | @Operation(summary = "焦化总图-指标分析") |
| | | public CommonResult<List<CokingAnalyIndDTO>> getCokingAnalyIndList(@RequestParam Map<String, Object> params) { |
| | | List<CokingAnalyIndEntity> list = cokingAnalyIndService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingAnalyIndDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/analy-trend/list") |
| | | @Operation(summary = "焦化工序-趋势分析") |
| | | @Operation(summary = "焦化工序-趋势分析(废弃)") |
| | | public CommonResult<List<CokingAnalyTrendDTO>> getCokingAnalyTrendList(@RequestParam Map<String, Object> params) { |
| | | List<CokingAnalyTrendEntity> list = cokingAnalyTrendService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingAnalyTrendDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/process-child/list") |
| | | @Operation(summary = "焦化工序-子工序指标") |
| | | @Operation(summary = "焦化总图-子工序指标") |
| | | public CommonResult<List<CokingProcessChildDTO>> getCokingProcessChildList(@RequestParam Map<String, Object> params) { |
| | | List<CokingProcessChildEntity> list = cokingProcessChildService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingProcessChildDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/process-main/list") |
| | | @Operation(summary = "焦化工序-主工序指标") |
| | | @Operation(summary = "焦化总图-主工序指标") |
| | | public CommonResult<List<CokingProcessMainDTO>> getCokingProcessMainList(@RequestParam Map<String, Object> params) { |
| | | List<CokingProcessMainEntity> list = cokingProcessMainService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingProcessMainDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/prod-day/list") |
| | | @Operation(summary = "焦化工序-日生产信息") |
| | | @Operation(summary = "焦化总图-日生产信息") |
| | | public CommonResult<List<CokingProdDayDTO>> getCokingProdDayList(@RequestParam Map<String, Object> params) { |
| | | List<CokingProdDayEntity> list = cokingProdDayService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingProdDayDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/ex-data/list") |
| | | @Operation(summary = "焦化总图-异常数据") |
| | | public CommonResult<List<CokingTraceDataDTO>> getExDataList(@RequestParam Map<String, Object> params) { |
| | | String clock = (String) params.get("clock"); |
| | | if (StringUtils.isBlank(clock)) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, -1); |
| | | clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd"); |
| | | params.put("clock", clock); |
| | | } |
| | | |
| | | List<CokingTraceDataEntity> list = cokingTraceDataService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingTraceDataDTO.class)); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | @GetMapping("/overview/abnormal-data") |
| | | @Operation(summary = "各工序-异常数据") |
| | | public CommonResult<List<CokingTraceSuggestEntity>> getAbnormalData(@RequestParam Map<String, Object> params) { |
| | | List<CokingTraceSuggestEntity> result = cokingTraceSuggestService.getAbnormalData(params); |
| | | return success(result); |
| | | public CommonResult<List<CokingTraceDataDTO>> getAbnormalData(@RequestParam Map<String, Object> params) { |
| | | String processType = (String) params.get("processType"); |
| | | if (StringUtils.isBlank(processType)) { |
| | | return success(new ArrayList<>()); |
| | | } |
| | | |
| | | String clock = (String) params.get("clock"); |
| | | if (StringUtils.isBlank(clock)) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, -1); |
| | | clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd"); |
| | | params.put("clock", clock); |
| | | } |
| | | List<CokingTraceDataEntity> list = cokingTraceDataService.list(params); |
| | | return success(ConvertUtils.sourceToTarget(list, CokingTraceDataDTO.class)); |
| | | } |
| | | |
| | | @GetMapping("/trace-suggest/list") |
| | |
| | | List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); |
| | | List<Double> monthValues = new ArrayList<>(); |
| | | if (CollectionUtils.isEmpty(monthChartData)) { |
| | | monthValues = monthChartData.stream().map(item -> { |
| | | return item.getV(); |
| | | }).collect(Collectors.toList()); |
| | | |
| | | monthValues = monthChartData.stream().map(item -> item.getV()).collect(Collectors.toList()); |
| | | result.setMax(monthValues.stream().max(Double::compareTo).get()); |
| | | result.setMin(monthValues.stream().min(Double::compareTo).get()); |
| | | } |
| | |
| | | } |
| | | return success(result); |
| | | } |
| | | |
| | | @GetMapping("/demand/history") |
| | | @Operation(summary = "负荷移植-实测需量,有功功率 历史") |
| | | public CommonResult<PowerHistoryDTO> getPowerDemandHistory(@RequestBody PowerDemandHisReqDTO dto) { |
| | | log.info("请求参数: {}", JSONObject.toJSONString(dto)); |
| | | |
| | | // 参数校验 |
| | | if (StringUtils.isBlank(dto.getCode())) { |
| | | return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "code不能为空"); |
| | | } |
| | | if (StringUtils.isBlank(dto.getQueryType())) { |
| | | return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空"); |
| | | } |
| | | |
| | | PowerDemandEntity powerDemand = powerDemandService.getByCode(dto.getCode()); |
| | | if (powerDemand == null) { |
| | | log.info("未找到code对应的数据: {}", dto.getCode()); |
| | | return success(new PowerHistoryDTO()); |
| | | } |
| | | |
| | | String queryType = dto.getQueryType().toUpperCase(); |
| | | String pointNo; |
| | | switch (queryType.toUpperCase()) { |
| | | case "D": |
| | | pointNo = powerDemand.getCurDemand(); |
| | | break; |
| | | case "P": |
| | | pointNo = powerDemand.getActivePower(); |
| | | break; |
| | | default: |
| | | throw new IllegalArgumentException("不支持的queryType: " + queryType); |
| | | } |
| | | |
| | | // 默认查最近24小时 |
| | | Date end = Optional.ofNullable(dto.getEndTime()).orElseGet(() -> { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | cal.set(Calendar.SECOND, 0); |
| | | return cal.getTime(); |
| | | }); |
| | | |
| | | Date start = Optional.ofNullable(dto.getStartTime()).orElseGet(() -> { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(end); |
| | | cal.add(Calendar.MINUTE, -1440); // 24小时前 |
| | | return cal.getTime(); |
| | | }); |
| | | |
| | | // 查询历史数据 |
| | | ApiPointValueQueryDTO query = new ApiPointValueQueryDTO(); |
| | | query.setPointNo(pointNo); |
| | | query.setStart(start); |
| | | query.setEnd(end); |
| | | |
| | | log.info("开始查询实测需量/有功功率历史数据,测点: {}", pointNo); |
| | | List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(query); |
| | | |
| | | // 构建返回结果 |
| | | PowerHistoryDTO result = new PowerHistoryDTO(); |
| | | result.setCategories(DateUtils.getTimeScale(start, end, 60)); |
| | | result.setDataList(chartData.stream() |
| | | .map(pv -> new Object[]{ |
| | | DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), |
| | | pv.getV() |
| | | }) |
| | | .collect(Collectors.toList())); |
| | | |
| | | return success(result); |
| | | } |
| | | } |
| | |
| | | @Schema(description = "机组名称") |
| | | private String name; |
| | | |
| | | @Schema(description = "编码") |
| | | private String code; |
| | | |
| | | @Schema(description = "月最大需量") |
| | | private String maxDemand; |
| | | |
对比新文件 |
| | |
| | | package com.iailab.module.ansteel.api.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author dyk |
| | | * @Description |
| | | * @createTime 2025年04月23日 |
| | | */ |
| | | @Data |
| | | public class PowerDemandHisReqDTO implements Serializable { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private String code; |
| | | |
| | | private String queryType; |
| | | |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date startTime; |
| | | |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date endTime; |
| | | } |
| | |
| | | @Schema(description = "关联ID") |
| | | private String relId; |
| | | |
| | | @Schema(description = "工序名称") |
| | | private String process; |
| | | |
| | | @Schema(description = "异常对象") |
| | | private String exObj; |
| | | |
| | | @Schema(description = "查询时间") |
| | | private String clock; |
| | | |
| | | @Schema(description = "数据类型") |
| | | private String dataType; |
| | | |
| | |
| | | private String pointName; |
| | | |
| | | @Schema(description = "异常时间") |
| | | private Date exDate; |
| | | private Date exTime; |
| | | |
| | | @Schema(description = "异常原因") |
| | | private String exType; |
| | |
| | | * 关联ID |
| | | */ |
| | | private String relId; |
| | | |
| | | /** |
| | | * 工序名称 |
| | | */ |
| | | private String process; |
| | | |
| | | /** |
| | | * 异常对象 |
| | | */ |
| | | private String exObj; |
| | | |
| | | /** |
| | | * 查询时间 |
| | | */ |
| | | private String clock; |
| | | /** |
| | | * 数据类型 |
| | | */ |
| | |
| | | /** |
| | | * 异常时间 |
| | | */ |
| | | private Date exDate; |
| | | private Date exTime; |
| | | /** |
| | | * 异常原因 |
| | | */ |
| | | private String exType; |
| | | |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | private Date createDate; |
| | | } |
| | |
| | | Map<String,List<CokingOverviewDTO>> list(Map<String, Object> params); |
| | | |
| | | void insert(List<CokingOverviewEntity> result); |
| | | |
| | | void deleteByProcessType(String processType, String clock); |
| | | } |
| | |
| | | */ |
| | | public interface CokingTraceDataService { |
| | | List<CokingTraceDataEntity> list(Map<String, Object> params); |
| | | |
| | | void insertList(List<CokingTraceDataEntity> list); |
| | | |
| | | void deleteByExObj(String exObj, String clock); |
| | | } |
| | |
| | | public void insert(List<CokingOverviewEntity> result) { |
| | | cokingOverviewDao.insert(result); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByProcessType(String processType, String clock) { |
| | | QueryWrapper<CokingOverviewEntity> queryWrapperDay = new QueryWrapper<>(); |
| | | queryWrapperDay.eq("process_type", processType); |
| | | queryWrapperDay.eq("clock", clock); |
| | | cokingOverviewDao.delete(queryWrapperDay); |
| | | } |
| | | } |
| | |
| | | import com.iailab.module.ansteel.coking.dao.CokingTraceDataDao; |
| | | import com.iailab.module.ansteel.coking.entity.CokingTraceDataEntity; |
| | | import com.iailab.module.ansteel.coking.service.CokingTraceDataService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | |
| | | |
| | | @Override |
| | | public List<CokingTraceDataEntity> list(Map<String, Object> params) { |
| | | return cokingTraceDataDao.selectList(new QueryWrapper<>()); |
| | | String processType = (String) params.get("processType"); |
| | | String clock = (String) params.get("clock"); |
| | | QueryWrapper<CokingTraceDataEntity> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.eq(StringUtils.isNotBlank(processType), "ex_obj", processType) |
| | | .eq(StringUtils.isNotBlank(clock), "clock", clock) |
| | | .orderByAsc("create_date"); |
| | | |
| | | return cokingTraceDataDao.selectList(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public void insertList(List<CokingTraceDataEntity> list) { |
| | | cokingTraceDataDao.insert(list); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByExObj(String exObj, String clock) { |
| | | QueryWrapper<CokingTraceDataEntity> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.eq("ex_obj", exObj) |
| | | .eq("clock", clock); |
| | | cokingTraceDataDao.delete(queryWrapper); |
| | | } |
| | | } |
| | |
| | | private CokingTraceChartService cokingTraceChartService; |
| | | @Resource |
| | | private CokingTraceSuggestService cokingTraceSuggestService; |
| | | @Resource |
| | | private CokingTraceDataService cokingTraceDataService; |
| | | |
| | | @Override |
| | | public void run(String processTypes) { |
| | |
| | | overviewEntity.setSubProcessType(entry.getKey()); |
| | | overviewEntity.setClock(clock); |
| | | result.add(overviewEntity); |
| | | |
| | | // 清理旧数据 |
| | | cokingOverviewService.deleteByProcessType(processType, clock); |
| | | cokingTraceDataService.deleteByExObj(processType, clock); |
| | | } |
| | | cokingOverviewService.insert(result); |
| | | |
| | | // 指标运行趋势 |
| | | 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<>(); |
| | | // List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>(); |
| | | List<CokingTraceDataEntity> exDatalist = new ArrayList<>(indRunTrend.size()); |
| | | indRunTrend.forEach(e -> { |
| | | CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity(); |
| | | cokingTraceChartEntity.setRelId(relId); |
| | |
| | | cokingTraceChartEntityList.add(cokingTraceChartEntity); |
| | | |
| | | // 异常数据处理 |
| | | suggestEntitieList.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock)); |
| | | exDatalist.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock)); |
| | | }); |
| | | cokingTraceChartService.insert(cokingTraceChartEntityList); |
| | | cokingTraceSuggestService.insert(suggestEntitieList); |
| | | // cokingTraceSuggestService.insert(suggestEntitieList); |
| | | cokingTraceDataService.insertList(exDatalist); |
| | | |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | |
| | | } |
| | | |
| | | private List<CokingTraceSuggestEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) { |
| | | List<CokingTraceSuggestEntity> suggestEntities = new ArrayList<>(); |
| | | private List<CokingTraceDataEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) { |
| | | List<CokingTraceDataEntity> suggestEntities = new ArrayList<>(); |
| | | switch (ProcessConfDataTypeEnum.getEumByCode(e.getDataType())) { |
| | | case DATAPOINT: |
| | | ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); |
| | |
| | | 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())); |
| | | CokingTraceDataEntity ctd = new CokingTraceDataEntity(); |
| | | ctd.setId(UUID.randomUUID().toString()); |
| | | ctd.setRelId(relId); |
| | | ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName()); |
| | | ctd.setClock(clock); |
| | | ctd.setExObj(e.getIndType()+"_AD"); |
| | | ctd.setExTime(calendar.getTime()); |
| | | ctd.setExType(content); |
| | | suggestEntities.add(ctd); |
| | | } |
| | | calendar.add(Calendar.DAY_OF_YEAR,1); |
| | | } |
| | |
| | | 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())); |
| | | CokingTraceDataEntity ctd = new CokingTraceDataEntity(); |
| | | ctd.setId(UUID.randomUUID().toString()); |
| | | ctd.setRelId(relId); |
| | | ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName()); |
| | | ctd.setClock(clock); |
| | | ctd.setExObj(e.getIndType()+"_AD"); |
| | | ctd.setExTime(intCalendar.getTime()); |
| | | ctd.setExType(content); |
| | | suggestEntities.add(ctd); |
| | | // 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); |
| | | } |
| | |
| | | public interface PowerDemandService { |
| | | |
| | | List<PowerDemandEntity> list(Map<String, Object> params); |
| | | |
| | | PowerDemandEntity getByCode(String code); |
| | | } |
| | |
| | | import com.iailab.module.ansteel.power.entity.PowerDemandEntity; |
| | | import com.iailab.module.ansteel.power.service.PowerDemandService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | |
| | | @Override |
| | | public List<PowerDemandEntity> list(Map<String, Object> params) { |
| | | QueryWrapper<PowerDemandEntity> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.eq("code", params.get("code")); |
| | | queryWrapper.orderByAsc("sort"); |
| | | return PowerDemandDao.selectList(queryWrapper); |
| | | |
| | | } |
| | | |
| | | public PowerDemandEntity getByCode(String code) { |
| | | QueryWrapper<PowerDemandEntity> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.eq("code", code); |
| | | return PowerDemandDao.selectOne(queryWrapper); |
| | | |
| | | } |
| | | } |