ansteel-biz/db/mysql.sql
@@ -808,7 +808,7 @@ CREATE TABLE `t_power_maxdemand_main` ( `id` varchar(36) NOT NULL COMMENT 'id', `occur_time` datetimeL COMMENT '发生时间', `occur_time` datetime COMMENT '发生时间', `code` varchar(50) NULL DEFAULT NULL COMMENT '编号', `name` varchar(50) NULL DEFAULT NULL COMMENT '名称', `max_demand` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大需量', ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -2,12 +2,21 @@ import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.framework.tenant.core.context.TenantContextHolder; import com.iailab.module.ansteel.api.dto.*; import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.common.utils.DecimalUtil; import com.iailab.module.ansteel.job.dto.ScheduleJobDTO; import com.iailab.module.ansteel.job.entity.ScheduleJobEntity; import com.iailab.module.ansteel.job.service.ScheduleJobService; import com.iailab.module.ansteel.job.vo.ScheduleJobReqVO; import com.iailab.module.ansteel.power.entity.*; import com.iailab.module.ansteel.power.service.*; import com.iailab.module.data.api.point.DataPointApi; @@ -20,7 +29,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -79,6 +90,11 @@ @Autowired private PowerVoltageStatusService powerVoltageStatusService; @Autowired private PowerMaxdemandMainService powerMaxDemandMainService; @Autowired private PowerMaxdemandDetService powerMaxdemandDetService; @GetMapping("/net-factor/list") @Operation(summary = "功率因数-电网拓扑") @@ -456,14 +472,14 @@ } @GetMapping("/control-main/list") @Operation(summary = "功率因数-管控变电站列表") @Operation(summary = "功率因数-管控变电站列表(已废弃)") public CommonResult<List<PowerControlMainDTO>> getPowerControlMainList(@RequestParam Map<String, Object> params) { List<PowerControlMainEntity> list = powerControlMainService.list(params); return success(ConvertUtils.sourceToTarget(list, PowerControlMainDTO.class)); } @PostMapping("/control-main/update") @Operation(summary = "功率因数-管控变电站修改上下限") @Operation(summary = "功率因数-管控变电站修改上下限(已废弃)") public CommonResult<Boolean> updatePowerControlMain(@RequestBody PowerControlMainDTO dto) { if (StringUtils.isBlank(dto.getId())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); @@ -477,7 +493,7 @@ } @GetMapping("/control-det/list") @Operation(summary = "功率因数-管控功率因数详情") @Operation(summary = "功率因数-管控功率因数详情(已废弃)") public CommonResult<List<PowerControlDetDTO>> getPowerControlDetList(@RequestParam Map<String, Object> params) { List<PowerControlDetDTO> result = new ArrayList<>(); String name = (String) params.get("name"); @@ -492,18 +508,13 @@ result = ConvertUtils.sourceToTarget(list, PowerControlDetDTO.class); result.forEach(item -> { // 设置随机数据,0.8左右 Random rand = new Random(); int min = 700; int max = 900; int randomNumber = rand.nextInt(max - min + 1) + min; BigDecimal rv = new BigDecimal(randomNumber * 0.001).setScale(4, BigDecimal.ROUND_HALF_UP); /*BigDecimal rv = new BigDecimal(randomNumber * 0.001).setScale(4, BigDecimal.ROUND_HALF_UP); item.setValue(rv); if (item.getLimitL() != null && rv.compareTo(item.getLimitL()) < 0) { item.setStatus(1); } else { item.setStatus(0); } }*/ }); return success(result); } @@ -1092,4 +1103,29 @@ } return success(result); } @PostMapping("/power-maxdemand/page") @Operation(summary = "负荷移植-最大需量发生记录分页") public CommonResult<PageResult<PowerMaxDemandMainDTO>> getPowerMaxDemandMainPage(@RequestBody PowerMaxDemandMainPageReqVO reqVO) { PageResult<PowerMaxdemandMainEntity> page = powerMaxDemandMainService.page(reqVO); PageResult<PowerMaxDemandMainDTO> result = BeanUtils.toBean(page, PowerMaxDemandMainDTO.class); /*List<String> parentIds = result.getList() .stream() .map(PowerMaxDemandMainDTO::getId) .collect(Collectors.toList()); List<PowerMaxdemandDetEntity> children = powerMaxdemandDetService.selectListByRelIds(parentIds); Map<String, List<PowerMaxdemandDetEntity>> childrenMap = children.stream() .collect(Collectors.groupingBy(PowerMaxdemandDetEntity::getRelId));*/ result.getList().forEach(dto0 -> { List<PowerMaxdemandDetEntity> detList0 = powerMaxdemandDetService.selectListByRelId(dto0.getId(), dto0.getOccurTime()); dto0.setChildren(ConvertUtils.sourceToTarget(detList0, PowerMaxdemandDetDTO.class)); if (!CollectionUtils.isEmpty(dto0.getChildren())) { dto0.getChildren().forEach(dto1 -> { List<PowerMaxdemandDetEntity> detList1 = powerMaxdemandDetService.selectListByRelId(dto1.getId(), dto1.getOccurTime()); dto1.setChildren(ConvertUtils.sourceToTarget(detList1, PowerMaxdemandDetDTO.class)); }); } }); return success(result); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerMaxDemandMainDTO.java
对比新文件 @@ -0,0 +1,37 @@ package com.iailab.module.ansteel.api.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @author dyk * @date 2025年04月18日 */ @Data public class PowerMaxDemandMainDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "id") private String id; @Schema(description = "发生时间") private Date occurTime; @Schema(description = "编号") private String code; @Schema(description = "名称") private String name; @Schema(description = "最大需量") private BigDecimal maxDemand; @Schema(description = "最大需量详情") private List<PowerMaxdemandDetDTO> children; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerMaxdemandDetDTO.java
对比新文件 @@ -0,0 +1,37 @@ package com.iailab.module.ansteel.api.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @author PanZhibao * @Description * @createTime 2025年05月12日 */ @Data public class PowerMaxdemandDetDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "id") private String id; @Schema(description = "发生时间") private Date occurTime; @Schema(description = "编号") private String code; @Schema(description = "名称") private String name; @Schema(description = "最大需量") private BigDecimal maxDemand; @Schema(description = "最大需量详情") private List<PowerMaxdemandDetDTO> children; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewDTO.java
@@ -80,4 +80,7 @@ @Schema(description = "历史预测值") private List<Object[]> preData; @Schema(description = "累积值") private List<Object[]> culData; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java
@@ -3,16 +3,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.ansteel.api.dao.*; import com.iailab.module.ansteel.api.dao.MainProcessIndexDayDao; import com.iailab.module.ansteel.api.dao.MainProcessIndexTeamDao; import com.iailab.module.ansteel.api.dto.*; import com.iailab.module.ansteel.api.service.DataService; import com.iailab.module.ansteel.common.constant.CommonConstant; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.power.dao.*; import com.iailab.module.ansteel.power.entity.PowerCapacitorStatusEntity; import com.iailab.module.ansteel.power.entity.PowerControlDetEntity; import com.iailab.module.ansteel.power.entity.PowerControlMainEntity; import com.iailab.module.ansteel.power.entity.PowerNetFactorEntity; import com.iailab.module.ansteel.api.service.DataService; import com.iailab.module.ansteel.common.constant.CommonConstant; 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; @@ -32,9 +33,8 @@ import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.iailab.framework.common.pojo.CommonResult.success; @Slf4j @Service @@ -180,6 +180,7 @@ int lengthRight = tMap.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(tMap.get(CommonConstant.LENGTH_RIGHT)).intValue(); String trendsDataH = tMap.get(CommonConstant.TRENDSDATA_H) == null ? null : tMap.get(CommonConstant.TRENDSDATA_H); String trendsDataL = tMap.get(CommonConstant.TRENDSDATA_L) == null ? null : tMap.get(CommonConstant.TRENDSDATA_L); String culIndex = tMap.get(CommonConstant.CUL_INDEX) == null ? null : tMap.get(CommonConstant.CUL_INDEX);//累计量 Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight); Date startTime = timeArray[1]; @@ -221,6 +222,19 @@ preDataView.setTrendsDataL(newList); } List<Object[]> culData = new ArrayList<>(); double leiji = 0; if (StringUtils.isNotBlank(culIndex) && !CollectionUtils.isEmpty(preDataView.getCurData())) { for(int i = 0; i < preDataView.getCurData().size(); i++) { Object[] item = preDataView.getCurData().get(i); Object[] dataItem = new Object[2]; dataItem[0] = item[0]; leiji = leiji + new BigDecimal(item[1].toString()).doubleValue(); dataItem[1] = new BigDecimal(leiji).divide(new BigDecimal(60), 2, BigDecimal.ROUND_HALF_UP) ; culData.add(dataItem); } } preDataView.setCulData(culData); preDataView.setPreData(resultOld.getDataView().getPreDataL()); result.setPreDataView(preDataView); return result; @@ -289,6 +303,9 @@ } result.put("planData", planData); result.put("predData", predData); result.put("predictTime", DateUtils.format(predictTime, "yyyy-MM-dd HH:mm:00")); result.put("startTime", DateUtils.format(startTime, "yyyy-MM-dd HH:mm:00")); result.put("endTime", DateUtils.format(endTime, "yyyy-MM-dd HH:mm:00")); return result; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerMaxDemandMainPageReqVO.java
对比新文件 @@ -0,0 +1,28 @@ package com.iailab.module.ansteel.api.vo; import com.iailab.framework.common.pojo.PageParam; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @author dyk * @date 2025年05月09日 */ @Data public class PowerMaxDemandMainPageReqVO extends PageParam { @Schema(description = "编号") private String name; @Schema(description = "名称") private String code; } ansteel-biz/src/main/java/com/iailab/module/ansteel/common/constant/CommonConstant.java
@@ -48,6 +48,8 @@ String RESULT_INDEX = "RESULT_INDEX"; String CUL_INDEX = "CUL_INDEX"; String LENGTH_LEFT = "LENGTH_LEFT"; String LENGTH_RIGHT = "LENGTH_RIGHT"; ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerMaxdemandTask.java
@@ -71,17 +71,18 @@ return; } for (PowerDemandEntity demand : demandList) { // 查询今天的最大需量 logger.info("查询今天的最大需量"); ApiPointValueQueryDTO pointValueQuery0 = new ApiPointValueQueryDTO(); pointValueQuery0.setStart(dayStart); pointValueQuery0.setEnd(nowTime); pointValueQuery0.setPointNo(demand.getCurDemand()); Map<String, Object> maxValue = dataPointApi.queryPointMaxValue(pointValueQuery0); BigDecimal todayMax = BigDecimal.ZERO; if (CollectionUtils.isEmpty(maxValue) && maxValue.containsKey(demand.getCurDemand())) { todayMax = new BigDecimal(maxValue.get(demand.getCurDemand()).toString()); if (CollectionUtils.isEmpty(maxValue)) { logger.info("maxValue is empty"); continue; } BigDecimal todayMax = new BigDecimal(maxValue.get(demand.getCurDemand()).toString()); logger.info("todayMax=" + todayMax); List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(pointValueQuery0); if (CollectionUtils.isEmpty(valueList)) { logger.info("valueList is empty"); @@ -95,7 +96,7 @@ } } // 查询本月需量发生记录 logger.info("查询本月需量发生记录"); BigDecimal monthMax = powerMaxdemandMainService.getMax(demand.getCode(), monStart, nowTime); // 保存记录 @@ -110,19 +111,22 @@ String mainId = powerMaxdemandMainService.add(mainEntity); Map<String, Object> params1 = new HashMap<>(); params1.put("pCode", demand.getCode()); params1.put("groupName", demand.getName()); List<PowerNetDropdownEntity> dropdownList = powerNetDropdownService.list(params1); if (CollectionUtils.isEmpty(dropdownList)) { logger.info("dropdownList is empty"); continue; } for (PowerNetDropdownEntity dropdown : dropdownList) { if (StringUtils.isBlank(dropdown.getExt1())) { continue; } Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(occurTime); calendar1.add(Calendar.MINUTE, 1); int sort = 0; for (PowerNetDropdownEntity dropdown : dropdownList) { if (StringUtils.isBlank(dropdown.getExt1())) { logger.info(dropdown.getNodeCode() + ":dropdown.getExt1() is empty"); continue; } logger.info(dropdown.getNodeCode() + ":dropdown.getExt1() = " + dropdown.getExt1()); ApiPointValueQueryDTO pointValueQuery1 = new ApiPointValueQueryDTO(); pointValueQuery1.setStart(occurTime); pointValueQuery1.setEnd(calendar1.getTime()); @@ -138,7 +142,9 @@ detEntity.setName(dropdown.getNodeName()); detEntity.setOccurTime(occurTime); detEntity.setMaxDemand(BigDecimal.valueOf(valueList1.get(0).getV())); detEntity.setSort(sort); powerMaxdemandDetService.add(detEntity); sort ++; } } logger.info("RunPowerMaxdemandTask end"); ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandMainDao.java
@@ -1,6 +1,9 @@ package com.iailab.module.ansteel.power.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import org.apache.ibatis.annotations.Mapper; @@ -10,5 +13,13 @@ * @createTime 2025年05月07日 */ @Mapper public interface PowerMaxdemandMainDao extends BaseDao<PowerMaxdemandMainEntity> { public interface PowerMaxdemandMainDao extends BaseMapperX<PowerMaxdemandMainEntity> { default PageResult<PowerMaxdemandMainEntity> selectPage(PowerMaxDemandMainPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX<PowerMaxdemandMainEntity>() .likeIfPresent(PowerMaxdemandMainEntity::getName, reqVO.getName()) .eqIfPresent(PowerMaxdemandMainEntity::getCode, reqVO.getCode()) .orderByDesc(PowerMaxdemandMainEntity::getOccurTime)); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandDetService.java
@@ -1,6 +1,10 @@ package com.iailab.module.ansteel.power.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import java.util.Date; import java.util.List; /** * @author PanZhibao @@ -10,4 +14,8 @@ public interface PowerMaxdemandDetService { void add(PowerMaxdemandDetEntity entity); List<PowerMaxdemandDetEntity> selectListByRelIds(List<String> relIds); List<PowerMaxdemandDetEntity> selectListByRelId(String relId, Date occurTime); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandMainService.java
@@ -1,9 +1,13 @@ package com.iailab.module.ansteel.power.service; import com.iailab.framework.common.pojo.PageResult; import com.iailab.module.ansteel.api.dto.PowerMaxDemandMainDTO; import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import java.math.BigDecimal; import java.util.Date; import java.util.Map; /** * @author PanZhibao @@ -12,7 +16,10 @@ */ public interface PowerMaxdemandMainService { PageResult<PowerMaxdemandMainEntity> page(PowerMaxDemandMainPageReqVO reqVO); String add(PowerMaxdemandMainEntity entity); BigDecimal getMax(String code, Date start, Date end); } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandDetServiceImpl.java
@@ -1,5 +1,6 @@ package com.iailab.module.ansteel.power.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.power.dao.PowerMaxdemandDetDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity; import com.iailab.module.ansteel.power.service.PowerMaxdemandDetService; @@ -7,6 +8,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.UUID; /** @@ -26,4 +30,18 @@ entity.setId(UUID.randomUUID().toString()); powerMaxdemandDetDao.insert(entity); } @Override public List<PowerMaxdemandDetEntity> selectListByRelIds(List<String> relIds) { return powerMaxdemandDetDao.selectList( new QueryWrapper<PowerMaxdemandDetEntity>().in("rel_id", relIds)); } @Override public List<PowerMaxdemandDetEntity> selectListByRelId(String relId, Date occurTime) { return powerMaxdemandDetDao.selectList( new QueryWrapper<PowerMaxdemandDetEntity>() .eq("rel_id", relId) .eq("occur_time", occurTime)); } } ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandMainServiceImpl.java
@@ -1,6 +1,8 @@ package com.iailab.module.ansteel.power.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.common.pojo.PageResult; import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.power.dao.PowerMaxdemandMainDao; import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity; import com.iailab.module.ansteel.power.service.PowerMaxdemandMainService; @@ -10,10 +12,7 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.*; import java.util.stream.Collectors; /** @@ -29,6 +28,11 @@ private PowerMaxdemandMainDao powerMaxdemandMainDao; @Override public PageResult<PowerMaxdemandMainEntity> page(PowerMaxDemandMainPageReqVO reqVO) { return powerMaxdemandMainDao.selectPage(reqVO); } @Override public String add(PowerMaxdemandMainEntity entity) { entity.setId(UUID.randomUUID().toString()); powerMaxdemandMainDao.insert(entity); ansteel-biz/src/main/resources/application.yaml
@@ -179,6 +179,8 @@ - t_power_adjusted_factor - t_power_net_dropdown - t_power_voltage_status - t_power_maxdemand_main - t_power_maxdemand_det - t_peak_valley_flat - t_coking_overview_ind - t_gas_pred_conf doc/鞍钢数据接口文档_master.docBinary files differ