ansteel-biz/db/mysql.sql
@@ -296,6 +296,7 @@ `status_id` varchar(36) NULL DEFAULT NULL COMMENT '投运状态父ID', `type` varchar(50) NULL DEFAULT NULL COMMENT '类型', `name` varchar(50) NULL DEFAULT NULL COMMENT '电容器名称', `point_no` varchar(50) NULL DEFAULT NULL COMMENT '下属测点编码', `remark` varchar(50) NULL DEFAULT NULL COMMENT '备注', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) USING BTREE ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -64,11 +64,17 @@ @Autowired private PowerAdjustedFactorService powerAdjustedFactorService; @Resource @Autowired private DataPointApi dataPointApi; @Resource @Autowired private McsApi mcsApi; @Autowired private PowerCapacitorHisService powerCapacitorHisService; @Autowired private PowerCapacitorDetService powerCapacitorDetService; @GetMapping("/net-factor/list") @Operation(summary = "功率因数-电网拓扑") @@ -245,11 +251,118 @@ return success(result); } @PostMapping("/gen-status/history") @Operation(summary = "功率因数-发电机组功率历史") public CommonResult<PowerHistoryDTO> getPowerGenStatusHistory(@RequestBody PowerGenStatusHisReqDTO dto) { log.info("请求参数: {}", JSONObject.toJSONString(dto)); // 参数校验 if (StringUtils.isBlank(dto.getId())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "id不能为空"); } if (StringUtils.isBlank(dto.getQueryType())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空"); } PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId()); if (powerGenStatus == null) { log.info("未找到code对应的数据: {}", dto.getId()); return success(new PowerHistoryDTO()); } String queryType = dto.getQueryType().toUpperCase(); String pointNo; switch (queryType.toUpperCase()) { case "D": pointNo = powerGenStatus.getCurP(); break; case "P": pointNo = powerGenStatus.getCurQ(); break; case "COS": pointNo = powerGenStatus.getCurCOS(); 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); } @GetMapping("/capacitor-status/list") @Operation(summary = "功率因数-电容器投运状态") @Operation(summary = "功率因数-电容器投退状态") public CommonResult<List<PowerCapacitorStatusDTO>> getPowerCapacitorStatusList(@RequestParam Map<String, Object> params) { List<PowerCapacitorStatusEntity> list = powerCapacitorStatusService.list(params); return success(ConvertUtils.sourceToTarget(list, PowerCapacitorStatusDTO.class)); } @GetMapping("/capacitor-det/list") @Operation(summary = "功率因数-电容器投退指示灯") public CommonResult<List<PowerCapacitorDetDTO>> getPowerCapacitorDetList(@RequestParam Map<String, Object> params) { List<PowerCapacitorDetEntity> list = powerCapacitorDetService.list(params); List<String> points = list.stream().map(item -> { return item.getPointNo(); }).collect(Collectors.toList()); Map<String, Object> pointsRealValue = new HashMap<>(); if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } List<PowerCapacitorDetDTO> result = new ArrayList<>(); for (PowerCapacitorDetEntity entity : list) { PowerCapacitorDetDTO dto = ConvertUtils.sourceToTarget(entity, PowerCapacitorDetDTO.class); dto.setStatus(0); if (!pointsRealValue.containsKey(entity.getPointNo()) || pointsRealValue.get(entity.getPointNo()) == null) { continue; } BigDecimal val = new BigDecimal(pointsRealValue.get(entity.getPointNo()).toString()); if (val.compareTo(BigDecimal.ZERO) >= 0.1) { dto.setStatus(1); } result.add(dto); } return success(result); } @GetMapping("/capacitor-det/list") @Operation(summary = "功率因数-电容器投退历史") public CommonResult<List<PowerCapacitorHisDTO>> getPowerCapacitorHisList(@RequestParam Map<String, Object> params) { List<PowerCapacitorHisEntity> list = powerCapacitorHisService.list(params); return success(ConvertUtils.sourceToTarget(list, PowerCapacitorHisDTO.class)); } @GetMapping("/control-main/list") @@ -405,7 +518,7 @@ calendar0.set(Calendar.SECOND, 0); Date end = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime(); calendar0.add(Calendar.MINUTE, -1440); Date start = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); Date start = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); apiPointValueQueryDTO.setEnd(end); apiPointValueQueryDTO.setStart(start); List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); @@ -433,31 +546,11 @@ List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); List<Double> monthValues = new ArrayList<>(); if (CollectionUtils.isEmpty(monthChartData)) { monthValues = monthChartData.stream().map(item -> 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); } private double getMin(List<List<Object>> dataList) { double result = Double.parseDouble(dataList.get(0).get(1).toString()); for (int i = 0; i < dataList.size() - 1; i++) { if (result > Double.parseDouble(dataList.get(i).get(1).toString())) { result = Double.parseDouble(dataList.get(i).get(1).toString()); } } return result; } private double getMax(List<List<Object>> dataList) { double result = 0; for (int i = 0; i < dataList.size() - 1; i++) { if (result < Double.parseDouble(dataList.get(i).get(1).toString())) { result = Double.parseDouble(dataList.get(i).get(1).toString()); } } return result; } @GetMapping("/adjust-factor") @@ -556,75 +649,5 @@ return success(result); } @PostMapping("/gen/history") @Operation(summary = "功率因数-发电机组功率历史") public CommonResult<PowerHistoryDTO> getPowerGenStatusHistory(@RequestBody PowerGenStatusHisReqDTO dto) { log.info("请求参数: {}", JSONObject.toJSONString(dto)); // 参数校验 if (StringUtils.isBlank(dto.getId())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "id不能为空"); } if (StringUtils.isBlank(dto.getQueryType())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空"); } PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId()); if (powerGenStatus == null) { log.info("未找到code对应的数据: {}", dto.getId()); return success(new PowerHistoryDTO()); } String queryType = dto.getQueryType().toUpperCase(); String pointNo; switch (queryType.toUpperCase()) { case "D": pointNo = powerGenStatus.getCurP(); break; case "P": pointNo = powerGenStatus.getCurQ(); break; case "COS": pointNo = powerGenStatus.getCurCOS(); 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); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorDetDTO.java
对比新文件 @@ -0,0 +1,28 @@ package com.iailab.module.ansteel.api.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Data public class PowerCapacitorDetDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "id") private String id; @Schema(description = "类型") private String type; @Schema(description = "电容器名称") private String name; @Schema(description = "投退指示灯") private Integer status; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorHisDTO.java
对比新文件 @@ -0,0 +1,35 @@ package com.iailab.module.ansteel.api.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Data public class PowerCapacitorHisDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "id") private String id; @Schema(description = "电容器名称") private String name; @Schema(description = "状态") private String status; @Schema(description = "内容") private String content; @Schema(description = "备注") private String remark; @Schema(description = "i创建时间d") private String createDate; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorDropdownDTO.java
@@ -22,4 +22,8 @@ @Schema(description = "节点名称") private String nodeName; @Schema(description = "当前功率因数") private String curCos; } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorDetDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.power.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity; import org.apache.ibatis.annotations.Mapper; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Mapper public interface PowerCapacitorDetDao extends BaseDao<PowerCapacitorDetEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorHisDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.power.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.power.entity.PowerCapacitorHisEntity; import org.apache.ibatis.annotations.Mapper; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Mapper public interface PowerCapacitorHisDao extends BaseDao<PowerCapacitorHisEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorDetEntity.java
@@ -12,7 +12,7 @@ * @createTime 2025年04月27日 */ @Data @TableName("t_power_adjusted_factor") @TableName("t_power_capacitor_det") public class PowerCapacitorDetEntity implements Serializable { private static final long serialVersionUID = 1L; @@ -21,4 +21,34 @@ */ @TableId private String id; /** * 投运状态父ID */ private String statusId; /** * 类型 */ private String type; /** * 电容器名称 */ private String name; /** * 测点编码 */ private String pointNo; /** * 备注 */ private String remark; /** * 排序 */ private Integer sort; } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java
@@ -21,4 +21,34 @@ */ @TableId private String id; /** * 详情ID */ private String detId; /** * 电容器名称 */ private String name; /** * 状态 */ private String status; /** * 内容 */ private String content; /** * 备注 */ private String remark; /** * 创建时间 */ private String createDate; } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorDetService.java
对比新文件 @@ -0,0 +1,16 @@ package com.iailab.module.ansteel.power.service; import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ public interface PowerCapacitorDetService { List<PowerCapacitorDetEntity> list(Map<String, Object> params); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java
对比新文件 @@ -0,0 +1,16 @@ package com.iailab.module.ansteel.power.service; import com.iailab.module.ansteel.power.entity.PowerCapacitorHisEntity; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ public interface PowerCapacitorHisService { List<PowerCapacitorHisEntity> list(Map<String, Object> params); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorDetServiceImpl.java
对比新文件 @@ -0,0 +1,35 @@ package com.iailab.module.ansteel.power.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.power.dao.PowerCapacitorDetDao; import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity; import com.iailab.module.ansteel.power.service.PowerCapacitorDetService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Slf4j @Service public class PowerCapacitorDetServiceImpl implements PowerCapacitorDetService { @Resource private PowerCapacitorDetDao powerCapacitorDetDao; @Override public List<PowerCapacitorDetEntity> list(Map<String, Object> params) { String statusId = (String) params.get("statusId"); QueryWrapper<PowerCapacitorDetEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(statusId), "status_id", statusId) .orderByAsc("sort"); return powerCapacitorDetDao.selectList(queryWrapper); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java
对比新文件 @@ -0,0 +1,34 @@ package com.iailab.module.ansteel.power.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.power.dao.PowerCapacitorHisDao; import com.iailab.module.ansteel.power.entity.PowerCapacitorHisEntity; import com.iailab.module.ansteel.power.service.PowerCapacitorHisService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2025年04月27日 */ @Slf4j @Service public class PowerCapacitorHisServiceImpl implements PowerCapacitorHisService { @Resource private PowerCapacitorHisDao powerCapacitorHisDao; @Override public List<PowerCapacitorHisEntity> list(Map<String, Object> params) { String detId = (String) params.get("detId"); QueryWrapper<PowerCapacitorHisEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("det_id", detId) .orderByDesc("create_date"); return powerCapacitorHisDao.selectList(queryWrapper); } }