package com.iailab.module.ansteel.api.controller.admin; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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.excel.core.util.ExcelUtils; import com.iailab.module.ansteel.api.dto.*; import com.iailab.module.ansteel.api.vo.PowerCapacitorHisPageReqVO; import com.iailab.module.ansteel.api.vo.PowerExportCosVO; import com.iailab.module.ansteel.api.vo.PowerExportPqVO; import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.common.constant.CommonConstant; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.common.utils.CalendarUtil; import com.iailab.module.ansteel.common.utils.DecimalUtil; import com.iailab.module.ansteel.common.utils.PowerUtil; import com.iailab.module.ansteel.power.entity.*; import com.iailab.module.ansteel.power.service.*; 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 com.iailab.module.data.api.point.dto.ApiPointsValueQueryDTO; import com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.ChartParamDTO; import com.iailab.module.model.api.mcs.dto.PredictLastValueReqVO; import com.iailab.module.model.api.mdk.MdkApi; import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO; 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.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import static com.iailab.framework.common.pojo.CommonResult.error; import static com.iailab.framework.common.pojo.CommonResult.success; /** * 电力接口 * * @author PanZhibao * @Description * @createTime 2025年04月11日 */ @Slf4j @RestController @RequestMapping("/ansteel/api/power") public class PowerController { @Autowired private PowerNetFactorService powerNetFactorService; @Autowired private PowerCapacitorStatusService powerCapacitorStatusService; @Autowired private PowerControlMainService powerControlMainService; @Autowired private PowerControlDetService powerControlDetService; @Autowired private PowerGenStatusDaoService powerGenStatusDaoService; @Autowired private PowerDemandService powerDemandService; @Autowired private PowerAdjustedFactorService powerAdjustedFactorService; @Autowired private DataPointApi dataPointApi; @Autowired private McsApi mcsApi; @Autowired private MdkApi mdkApi; @Autowired private PowerCapacitorHisService powerCapacitorHisService; @Autowired private PowerCapacitorDetService powerCapacitorDetService; @Autowired private PowerNetDropdownService powerNetDropdownService; @Autowired private PowerVoltageStatusService powerVoltageStatusService; @Autowired private PowerMaxdemandMainService powerMaxDemandMainService; @Autowired private PowerMaxdemandDetService powerMaxdemandDetService; @Autowired private PowerPriceMainService powerPriceMainService; @Autowired private PowerFactorControlService powerFactorControlService; public static final String VALUE = "value"; public static final String TIME = "time"; //private String pointNo = "F0000201825"; @GetMapping("/net-factor/list") @Operation(summary = "功率因数-电网拓扑列表") public CommonResult> getPowerNetFactorList(@RequestParam Map params) { log.info("功率因数电网拓扑"); List result = new ArrayList<>(); List list = powerNetFactorService.list(params); if (CollectionUtils.isEmpty(list)) { log.info("list is empty"); return success(result); } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); for (PowerNetFactorEntity entity : list) { PowerNetFactorDTO powerNetFactorDTO = new PowerNetFactorDTO(); powerNetFactorDTO.setId(entity.getId()); powerNetFactorDTO.setGroupName(entity.getGroupName()); powerNetFactorDTO.setNodeCode(entity.getNodeCode()); powerNetFactorDTO.setNodeName(entity.getNodeName()); boolean cosFlag = false; try { List points = new ArrayList<>(); if (StringUtils.isNotBlank(entity.getCurA())) { points.add(entity.getCurA()); } if (StringUtils.isNotBlank(entity.getCurP())) { points.add(entity.getCurP()); } if (StringUtils.isNotBlank(entity.getCurQ())) { points.add(entity.getCurQ()); } if (StringUtils.isNotBlank(entity.getCurCos())) { points.add(entity.getCurCos()); } log.info("points=" + points); if (!CollectionUtils.isEmpty(points)) { Map pointsRealValue = dataPointApi.queryPointsRealValue(points); log.info("pointsRealValue=" + pointsRealValue); if (pointsRealValue.get(entity.getCurA()) != null) { powerNetFactorDTO.setCurA(new BigDecimal(pointsRealValue.get(entity.getCurA()).toString())); } if (pointsRealValue.get(entity.getCurP()) != null) { powerNetFactorDTO.setCurP(new BigDecimal(pointsRealValue.get(entity.getCurP()).toString())); } if (pointsRealValue.get(entity.getCurQ()) != null) { powerNetFactorDTO.setCurQ(new BigDecimal(pointsRealValue.get(entity.getCurQ()).toString())); } if (pointsRealValue.get(entity.getCurCos()) != null) { powerNetFactorDTO.setCurCos(new BigDecimal(pointsRealValue.get(entity.getCurCos()).toString())); cosFlag = true; } } } catch (Exception ex) { log.info(entity.getNodeName() + "获取当前值异常" + ex.getMessage()); ex.printStackTrace(); } try { PredictLastValueReqVO reqVO = new PredictLastValueReqVO(); reqVO.setPredictTime(calendar.getTime()); List itemNos = new ArrayList<>(); if (StringUtils.isNotBlank(entity.getPreP())) { itemNos.add(entity.getPreP().split(",")); } if (StringUtils.isNotBlank(entity.getPreQ())) { itemNos.add(entity.getPreQ().split(",")); } if (StringUtils.isNotBlank(entity.getPreCos())) { itemNos.add(entity.getPreCos().split(",")); } if (!CollectionUtils.isEmpty(itemNos)) { reqVO.setItemNos(itemNos); log.info("reqVO=" + JSONObject.toJSONString(reqVO)); Map preValues = mcsApi.getPredictValueByTime(reqVO); if (StringUtils.isNotBlank(entity.getPreP()) && preValues.get(entity.getPreP()) != null) { powerNetFactorDTO.setPreP(new BigDecimal(preValues.get(entity.getPreP()).toString())); } if (StringUtils.isNotBlank(entity.getPreQ()) && preValues.get(entity.getPreQ()) != null) { powerNetFactorDTO.setPreQ(new BigDecimal(preValues.get(entity.getPreQ()).toString())); } if (StringUtils.isNotBlank(entity.getPreCos()) && preValues.get(entity.getPreCos()) != null) { powerNetFactorDTO.setPreCos(new BigDecimal(preValues.get(entity.getPreCos()).toString())); } } } catch (Exception ex) { log.info(entity.getNodeName() + "获取预测值异常," + ex.getMessage()); ex.printStackTrace(); } // 设置电流状态 powerNetFactorDTO.setStatus(0); if (powerNetFactorDTO.getCurA() != null) { BigDecimal curA = powerNetFactorDTO.getCurA(); if (entity.getLimitL() != null && curA.compareTo(entity.getLimitL()) < 0) { powerNetFactorDTO.setStatus(1); } else if (entity.getLimitH() != null && curA.compareTo(entity.getLimitH()) > 0) { powerNetFactorDTO.setStatus(1); } } // 设置功率因数状态 powerNetFactorDTO.setQstatus(0); if (cosFlag && powerNetFactorDTO.getCurCos() != null) { BigDecimal curCos = powerNetFactorDTO.getCurCos(); if (entity.getCosLimitL() != null && curCos.compareTo(entity.getCosLimitL()) < 0) { powerNetFactorDTO.setQstatus(1); } else if (entity.getCosLimitH() != null && curCos.compareTo(entity.getCosLimitH()) > 0) { powerNetFactorDTO.setQstatus(1); } } // 设置有功预警状态 powerNetFactorDTO.setPstatus(0); if (powerNetFactorDTO.getCurP() != null) { BigDecimal curP = powerNetFactorDTO.getCurP(); if (entity.getPLimitL() != null && curP.compareTo(entity.getPLimitL()) < 0) { powerNetFactorDTO.setPstatus(1); } else if (entity.getPLimitH() != null && curP.compareTo(entity.getPLimitH()) > 0) { powerNetFactorDTO.setPstatus(1); } } // 设置无功预警状态 powerNetFactorDTO.setQstatus(0); if (powerNetFactorDTO.getCurQ() != null) { BigDecimal curQ = powerNetFactorDTO.getCurQ(); if (entity.getQLimitL() != null && curQ.compareTo(entity.getQLimitL()) < 0) { powerNetFactorDTO.setQstatus(1); } else if (entity.getQLimitH() != null && curQ.compareTo(entity.getQLimitH()) > 0) { powerNetFactorDTO.setQstatus(1); } } // 日功率因数 if (StringUtils.isNotBlank(entity.getPDay()) && StringUtils.isNotBlank(entity.getQDay())) { List pointNos = new ArrayList<>(); pointNos.add(entity.getPDay()); pointNos.add(entity.getQDay()); Map pointsRealValue = dataPointApi.queryPointsRealValue(pointNos); if (!CollectionUtils.isEmpty(pointsRealValue)) { double pValue = new BigDecimal(pointsRealValue.get(entity.getPDay()).toString()).doubleValue(); double qValue = new BigDecimal(pointsRealValue.get(entity.getQDay()).toString()).doubleValue(); powerNetFactorDTO.setDayCos(new BigDecimal(PowerUtil.calculateCos(pValue, qValue)).setScale(2, BigDecimal.ROUND_HALF_UP)); } } // 月功率因数 if (StringUtils.isNotBlank(entity.getPMon()) && StringUtils.isNotBlank(entity.getQMon())) { List pointNos = new ArrayList<>(); pointNos.add(entity.getPMon()); pointNos.add(entity.getQMon()); Map pointsRealValue = dataPointApi.queryPointsRealValue(pointNos); if (!CollectionUtils.isEmpty(pointsRealValue)) { double pValue = new BigDecimal(pointsRealValue.get(entity.getPMon()).toString()).doubleValue(); double qValue = new BigDecimal(pointsRealValue.get(entity.getQMon()).toString()).doubleValue(); powerNetFactorDTO.setMonthCos(new BigDecimal(PowerUtil.calculateCos(pValue, qValue)).setScale(2, BigDecimal.ROUND_HALF_UP)); } } result.add(powerNetFactorDTO); } return success(result); } @GetMapping("/net-factor-dropdown/list") @Operation(summary = "功率因数-电网拓扑下拉列表") public CommonResult> getPowerNetFactorDropdownList(@RequestParam String nodeCode) { log.info("nodeCode=" + nodeCode); List result = new ArrayList<>(); PowerNetFactorEntity entity = powerNetFactorService.getByNodeCode(nodeCode); if (entity == null) { return success(result); } List list = new ArrayList<>(); Map params = new HashMap<>(); if ("望铁关口".equals(entity.getGroupName())) { params.put("groupName", entity.getGroupName()); params.put("neNodeName", entity.getNodeName()); } else { params.put("groupName", entity.getNodeName()); } list = powerNetDropdownService.list(params); // 追加公共 2025-06-18 Map paramsCom = new HashMap<>(); paramsCom.put("groupName", "COMMON1"); List comList = powerNetDropdownService.list(paramsCom); list.addAll(comList); List points = list.stream().map(item -> { return item.getCurCos(); }).collect(Collectors.toList()); Map pointsRealValue = new HashMap<>(); if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } for (PowerNetDropdownEntity netDropdown : list) { PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); BigDecimal curCos = BigDecimal.ZERO; if (pointsRealValue.get(netDropdown.getCurCos()) != null) { curCos = new BigDecimal(pointsRealValue.get(netDropdown.getCurCos()).toString()); } dto.setCurCos(curCos); result.add(dto); } return success(result); } /** * 判断 curCos 是否超上下限 * {nodeName}功率因数超上限/下限。 *

* 判断 curQ * {nodeName}发生无功返送 */ @GetMapping("/net-factor/alarm") @Operation(summary = "功率因数-电网拓扑预警信息") public CommonResult> getPowerNetFactorAlarm(@RequestParam Map params) { List result = new ArrayList<>(); List list = powerNetFactorService.list(params); List dtoList = ConvertUtils.sourceToTarget(list, PowerNetFactorDTO.class); if (CollectionUtils.isEmpty(dtoList)) { return success(result); } for (PowerNetFactorEntity entity : list) { List points = new ArrayList<>(); String message = ""; if (StringUtils.isNotBlank(entity.getCurQ())) { points.add(entity.getCurQ()); } if (StringUtils.isNotBlank(entity.getCurCos())) { points.add(entity.getCurCos()); } if (CollectionUtils.isEmpty(points)) { continue; } Map pointsRealValue = dataPointApi.queryPointsRealValue(points); if (pointsRealValue.get(entity.getCurQ()) != null) { BigDecimal curQ = new BigDecimal(pointsRealValue.get(entity.getCurQ()).toString()); if (entity.getCurFlag() != null && curQ.compareTo(BigDecimal.ZERO) == entity.getCurFlag()) { message = entity.getNodeName() + "发生无功返送;"; } } if (pointsRealValue.get(entity.getCurCos()) != null) { BigDecimal curCos = new BigDecimal(pointsRealValue.get(entity.getCurCos()).toString()); if (entity.getLimitH() != null && curCos.compareTo(entity.getLimitH()) > 0) { message += entity.getNodeName() + "功率因数超上限"; } else if (entity.getLimitL() != null && curCos.compareTo(entity.getLimitL()) < 0) { message += entity.getNodeName() + "功率因数超下限"; } } if (!message.isEmpty()) { result.add(message); } } return success(result); } @GetMapping("/gen-status/list") @Operation(summary = "功率因数-发电机组实时状态") public CommonResult> getPowerGenStatusList(@RequestParam Map params) { List result = new ArrayList<>(); List list = powerGenStatusDaoService.list(params); if (CollectionUtils.isEmpty(list)) { return success(result); } for (PowerGenStatusEntity entity : list) { PowerGenStatusDTO dto = new PowerGenStatusDTO(); dto.setId(entity.getId()); dto.setName(entity.getName()); dto.setSort(entity.getSort()); List points = new ArrayList<>(); if (StringUtils.isNotBlank(entity.getCurP())) { points.add(entity.getCurP()); } if (StringUtils.isNotBlank(entity.getCurQ())) { points.add(entity.getCurQ()); } if (StringUtils.isNotBlank(entity.getCurCos())) { points.add(entity.getCurCos()); } if (!CollectionUtils.isEmpty(points)) { Map pointsRealValue = dataPointApi.queryPointsRealValue(points); if (pointsRealValue.get(entity.getCurP()) != null) { dto.setCurP(new BigDecimal(pointsRealValue.get(entity.getCurP()).toString())); } if (pointsRealValue.get(entity.getCurQ()) != null) { dto.setCurQ(new BigDecimal(pointsRealValue.get(entity.getCurQ()).toString())); } if (pointsRealValue.get(entity.getCurCos()) != null) { dto.setCurCos(new BigDecimal(pointsRealValue.get(entity.getCurCos()).toString())); } } result.add(dto); } return success(result); } @PostMapping("/gen-status/history") @Operation(summary = "功率因数-发电机组功率历史") public CommonResult 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不能为空"); } log.info("id={}", dto.getId()); PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId()); if (powerGenStatus == null) { log.info("未找到code对应的数据: {}", dto.getId()); return success(new PowerHistoryDTO()); } String queryType = dto.getQueryType().toUpperCase(); log.info("queryType={}", queryType); String pointNo; switch (queryType.toUpperCase()) { case "P": pointNo = powerGenStatus.getCurP(); break; case "Q": pointNo = powerGenStatus.getCurQ(); break; case "COS": pointNo = powerGenStatus.getCurCos(); break; default: throw new IllegalArgumentException("不支持的queryType: " + queryType); } log.info("开始查询,pointNo={}", pointNo); // 默认查最近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 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 = "功率因数-电容器投退状态") public CommonResult> getPowerCapacitorStatusList(@RequestParam Map params) { List result = new ArrayList<>(); List list = powerCapacitorStatusService.list(params); for (PowerCapacitorStatusEntity entity : list) { PowerCapacitorStatusDTO dto = new PowerCapacitorStatusDTO(); dto.setId(entity.getId()); dto.setName(entity.getName()); dto.setRemark(entity.getRemark()); dto.setMainCount(DecimalUtil.toBigDecimal(entity.getMainCount()).intValue()); dto.setChildCount(DecimalUtil.toBigDecimal(entity.getChildCount()).intValue()); int onCount = 0; Map params1 = new HashMap<>(); params1.put("statusId", entity.getId()); List detList = powerCapacitorDetService.list(params1); if (CollectionUtils.isEmpty(detList)) { dto.setOnCount(onCount); continue; } List points = new ArrayList<>(); Map pointsRealValue = new HashMap<>(); for (PowerCapacitorDetEntity det : detList) { if (StringUtils.isNotBlank(det.getPointNo())) { points.add(det.getPointNo()); } } if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } for (PowerCapacitorDetEntity det : detList) { if (StringUtils.isBlank(det.getId())) { continue; } Object obj = pointsRealValue.get(det.getPointNo()); if (obj == null) { continue; } BigDecimal pv = new BigDecimal(obj.toString()); if (pv.compareTo(BigDecimal.ZERO) <= 0) { continue; } onCount++; } dto.setOnCount(onCount); String remark = String.format("共%d台,在投%d台", DecimalUtil.toBigDecimal(entity.getMainCount()).intValue(), onCount); dto.setRemark(remark); result.add(dto); } return success(result); } @GetMapping("/capacitor-det/list") @Operation(summary = "功率因数-电容器投退指示灯") public CommonResult> getPowerCapacitorDetList(@RequestParam Map params) { List list = powerCapacitorDetService.list(params); log.info("list.size=" + list.size()); List points = new ArrayList<>(); Map pointsRealValue = new HashMap<>(); for (PowerCapacitorDetEntity det : list) { if (StringUtils.isNotBlank(det.getPointNo())) { points.add(det.getPointNo()); } } if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } List result = new ArrayList<>(); for (PowerCapacitorDetEntity entity : list) { PowerCapacitorDetDTO dto = ConvertUtils.sourceToTarget(entity, PowerCapacitorDetDTO.class); result.add(dto); 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); } } return success(result); } @GetMapping("/capacitor-his/list") @Operation(summary = "功率因数-电容器投退历史") public CommonResult> getPowerCapacitorHisList(@RequestParam Map params) { String statusId = (String) params.get("statusId"); if (StringUtils.isBlank(statusId)) { return success(new ArrayList<>()); } List detList = powerCapacitorDetService.list(statusId); List detIds = detList.stream().map(PowerCapacitorDetEntity::getId).collect(Collectors.toList()); List list = powerCapacitorHisService.list(detIds); return success(ConvertUtils.sourceToTarget(list, PowerCapacitorHisDTO.class)); } @PostMapping("/capacitor-his/page") @Operation(summary = "功率因数-电容器投退历史(分页)") public CommonResult> getPowerCapacitorHisPage(@RequestBody PowerCapacitorHisPageReqVO reqVO) { if (StringUtils.isBlank(reqVO.getStatusId())) { return error(GlobalErrorCodeConstants.BAD_REQUEST); } List detList = powerCapacitorDetService.list(reqVO.getStatusId()); List detIds = detList.stream().map(PowerCapacitorDetEntity::getId).collect(Collectors.toList()); reqVO.setDetIdList(detIds); PageResult data = powerCapacitorHisService.page(reqVO); return success(BeanUtils.toBean(data, PowerCapacitorHisDTO.class)); } @GetMapping("/control-main/list") @Operation(summary = "功率因数-管控变电站列表(已废弃)") public CommonResult> getPowerControlMainList(@RequestParam Map params) { List list = powerControlMainService.list(params); return success(ConvertUtils.sourceToTarget(list, PowerControlMainDTO.class)); } @PostMapping("/control-main/update") @Operation(summary = "功率因数-管控变电站修改上下限(已废弃)") public CommonResult updatePowerControlMain(@RequestBody PowerControlMainDTO dto) { if (StringUtils.isBlank(dto.getId())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } PowerControlMainEntity entity = new PowerControlMainEntity(); entity.setId(dto.getId()); entity.setLimitH(dto.getLimitH()); entity.setLimitL(dto.getLimitL()); powerControlMainService.update(entity); return success(true); } @GetMapping("/control-det/list") @Operation(summary = "功率因数-管控功率因数详情(已废弃)") public CommonResult> getPowerControlDetList(@RequestParam Map params) { List result = new ArrayList<>(); String name = (String) params.get("name"); if (StringUtils.isBlank(name)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } PowerControlMainEntity main = powerControlMainService.getByName(name); if (main == null) { return CommonResult.error(GlobalErrorCodeConstants.NOT_FOUND); } List list = powerControlDetService.list(main.getId()); result = ConvertUtils.sourceToTarget(list, PowerControlDetDTO.class); result.forEach(item -> { /*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); } @GetMapping("/demand/list") @Operation(summary = "负荷移植-月最大需量,实测需量,有功功率") public CommonResult> getPowerDemandList(@RequestParam Map params) { log.info("负荷移植-月最大需量,实测需量,有功功率"); List result = new ArrayList<>(); List list = powerDemandService.list(params); if (CollectionUtils.isEmpty(list)) { log.info("list.size=" + list.size()); return success(result); } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); Date start = calendar.getTime(); Date end = new Date(); for (PowerDemandEntity entity : list) { PowerDemandDTO demandDTO = new PowerDemandDTO(); demandDTO.setId(entity.getId()); demandDTO.setCode(entity.getCode()); demandDTO.setName(entity.getName()); List points = new ArrayList<>(); if (StringUtils.isNotBlank(entity.getCurDemand())) { points.add(entity.getCurDemand()); } if (StringUtils.isNotBlank(entity.getActivePower())) { points.add(entity.getActivePower()); } if (!CollectionUtils.isEmpty(points)) { Map pointsRealValue = dataPointApi.queryPointsRealValue(points); if (pointsRealValue.get(entity.getCurDemand()) != null) { demandDTO.setCurDemand(new BigDecimal(pointsRealValue.get(entity.getCurDemand()).toString())); } if (pointsRealValue.get(entity.getActivePower()) != null) { demandDTO.setActivePower(new BigDecimal(pointsRealValue.get(entity.getActivePower()).toString())); } } if (!StringUtils.isEmpty(entity.getMaxDemand())) { /*ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); apiPointValueQueryDTO.setStart(start); apiPointValueQueryDTO.setEnd(end); apiPointValueQueryDTO.setPointNo(entity.getMaxDemand()); Map maxValue = dataPointApi.queryPointMaxTimeValue(apiPointValueQueryDTO); if (maxValue != null) { demandDTO.setMaxDemand(new BigDecimal(maxValue.get(VALUE).toString())); demandDTO.setOccurTime(DateUtils.parse( maxValue.get(TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); }*/ PowerMaxdemandMainEntity maxdemandMainEntity = powerMaxDemandMainService.getMonthMax(entity.getCode(), start); if (maxdemandMainEntity != null) { demandDTO.setMaxDemand(maxdemandMainEntity.getMaxDemand()); demandDTO.setOccurTime(maxdemandMainEntity.getOccurTime()); } else { demandDTO.setMaxDemand(BigDecimal.ZERO); } } result.add(demandDTO); } return success(result); } @GetMapping("/demand-dropdown/list") @Operation(summary = "负荷移植-功率因数下拉列表") public CommonResult> getDemandDropdownList(@RequestParam String code) { if (StringUtils.isBlank(code)) { log.info("code isBlank"); return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } log.info("code=" + code); List result = new ArrayList<>(); PowerDemandEntity entity = powerDemandService.getByCode(code); if (entity == null) { log.info("PowerDemandEntity is null"); return success(result); } List list = new ArrayList<>(); Map params0 = new HashMap<>(); params0.put("groupName", entity.getName()); List list0 = powerNetDropdownService.list(params0); if (!CollectionUtils.isEmpty(list0)) { list.addAll(list0); } // 所有关口进线的二级界面(表格/曲线)均增加(CCPP/135/CDQ/TRT/余热)的选项。 Map params1 = new HashMap<>(); params1.put("groupName", "COMMON1"); List list1 = powerNetDropdownService.list(params1); if (!CollectionUtils.isEmpty(list1)) { list.addAll(list1); } Map params2 = new HashMap<>(); params2.put("groupName", "COMMON2"); List list2 = powerNetDropdownService.list(params2); if (!CollectionUtils.isEmpty(list2)) { list.addAll(list2); } List points = list.stream().map(item -> { return item.getCurCos(); }).collect(Collectors.toList()); Map pointsRealValue = new HashMap<>(); if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } for (PowerNetDropdownEntity netDropdown : list) { PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); BigDecimal curCos = BigDecimal.ZERO; if (pointsRealValue.get(netDropdown.getCurCos()) != null) { curCos = new BigDecimal(pointsRealValue.get(netDropdown.getCurCos()).toString()); } dto.setCurCos(curCos); result.add(dto); } return success(result); } @PostMapping("/demand-query/list") @Operation(summary = "负荷移植-需量值查询") public CommonResult> getDemandQueryList(@RequestBody PowerDemandQueryDTO queryDto) { List result = new ArrayList<>(); if (StringUtils.isBlank(queryDto.getCode())) { log.info("code isBlank"); return success(result); } PowerDemandEntity entity = powerDemandService.getByCode(queryDto.getCode()); if (entity == null) { log.info("PowerDemandEntity is null"); return success(result); } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); Date startTime = queryDto.getStartTime(); Date endTime = queryDto.getEndTime(); if (endTime == null) { endTime = calendar.getTime(); } if (startTime == null) { calendar.add(Calendar.DAY_OF_YEAR, -1); startTime = calendar.getTime(); } Map params0 = new HashMap<>(); params0.put("groupName", entity.getName()); List dropdownList = powerNetDropdownService.list(params0); List pointNos = new ArrayList<>(); Map demandPointMap = new HashMap<>(); for (PowerNetDropdownEntity netDropdown : dropdownList) { demandPointMap.put(netDropdown.getNodeCode(), netDropdown.getExt1()); if (StringUtils.isNotBlank(netDropdown.getExt1())) { pointNos.add(netDropdown.getExt1()); } } for (PowerNetDropdownEntity netDropdown : dropdownList) { PowerDemandQueryRespDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerDemandQueryRespDTO.class); dto.setCurDemand(null); result.add(dto); } if (queryDto.getCurDemand() == null) { log.info("查询值为空,显示空白"); return success(result); } ApiPointValueQueryDTO queryCodeValue = new ApiPointValueQueryDTO(); queryCodeValue.setStart(startTime); queryCodeValue.setEnd(endTime); queryCodeValue.setPointNo(entity.getCurDemand()); List codeValueList = dataPointApi.queryPointHistoryValue(queryCodeValue); if (CollectionUtils.isEmpty(codeValueList)) { return success(result); } ApiPointValueDTO curValue = new ApiPointValueDTO(); for (ApiPointValueDTO valueDTO : codeValueList) { if (Math.abs(queryDto.getCurDemand().doubleValue() - valueDTO.getV()) <= 0.0001) { log.info("curValue is find"); curValue = valueDTO; break; } } log.info("curValue={}", curValue); if (curValue.getT() == null) { log.info("curValue is not find"); return success(result); } Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(curValue.getT()); ApiPointsValueQueryDTO valueQueryDTO = new ApiPointsValueQueryDTO(); valueQueryDTO.setPointNos(pointNos); valueQueryDTO.setEnd(calendar1.getTime()); calendar1.add(Calendar.MINUTE, -1); valueQueryDTO.setStart(calendar1.getTime()); Map>> pointsHisValues = dataPointApi.queryPointsHistoryValue(valueQueryDTO); if (CollectionUtils.isEmpty(pointsHisValues)) { log.info("pointsHisValues is null"); return success(result); } for (PowerDemandQueryRespDTO respDTO : result) { if (StringUtils.isBlank(demandPointMap.get(respDTO.getNodeCode()))) { continue; } List> hisList = pointsHisValues.get(demandPointMap.get(respDTO.getNodeCode())); if (CollectionUtils.isEmpty(hisList)) { continue; } Map valueMap = hisList.get(hisList.size() - 1); respDTO.setDataTime(DateUtils.parse(valueMap.get("time").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); respDTO.setCurDemand(DecimalUtil.toBigDecimal(valueMap.get("value"))); } return success(result); } /** * 导出功率日累计 * 月报表导出:最大值、最小值、平均值、受电累计、返送累计 * 日功率因数二级界面:最大值、最小值、平均值、日功率因数 * 月功率因数二级界面:最大值、最小值、平均值、月功率因数 * * @param response * @param request * @param dto */ @PostMapping("/net-factor/export-day") @Operation(summary = "功率因数-电网拓扑功率导出(功率日累计)") public void getPowerFactorExportDay(HttpServletResponse response, HttpServletRequest request, @RequestBody PowerFactorExcelReqDTO dto) throws IOException { List exportPqList = new ArrayList<>(); List exportCos = new ArrayList<>(); if (dto.getStartTime() == null) { dto.setStartTime(new Date()); } if (dto.getEndTime() == null) { dto.setEndTime(new Date()); } Calendar calendar = Calendar.getInstance(); calendar.setTime(dto.getStartTime()); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); Date startTime = calendar.getTime(); calendar.setTime(dto.getEndTime()); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.HOUR_OF_DAY, 23); Date endTime = calendar.getTime(); String pointNo = "="; String[] pointNoArr = new String[2]; String queryType = dto.getQueryType(); PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(dto.getNodeCode()); Calendar curDay = Calendar.getInstance(); curDay.setTime(startTime); do { log.info("do excel"); PowerFactorExcelDTO excelDTO = new PowerFactorExcelDTO(); switch (queryType.toUpperCase()) { case "P": pointNo = powerNetFactorEntity.getCurP(); break; case "Q": pointNo = powerNetFactorEntity.getCurQ(); break; case "DAYCOS": pointNoArr[0] = powerNetFactorEntity.getPDay(); pointNoArr[1] = powerNetFactorEntity.getQDay(); break; case "MONTHCOS": pointNoArr[0] = powerNetFactorEntity.getPMon(); pointNoArr[1] = powerNetFactorEntity.getQMon(); break; default: return; } ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); apiPointValueQueryDTO.setStart(curDay.getTime()); curDay.add(Calendar.DAY_OF_YEAR, 1); apiPointValueQueryDTO.setEnd(curDay.getTime()); List valueList = new ArrayList<>(); Double lastValue = null; if (StringUtils.isNotBlank(pointNo)) { // 单点 apiPointValueQueryDTO.setPointNo(pointNo); List chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); for (ApiPointValueDTO pv : chartData) { Object[] data = new Object[2]; data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); data[1] = pv.getV(); valueList.add(pv.getV()); } } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { List categories = new ArrayList<>(); // P/Q apiPointValueQueryDTO.setPointNo(pointNoArr[0]); List chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapP = new HashMap<>(); for (ApiPointValueDTO pv : chartDataP) { categories.add(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } apiPointValueQueryDTO.setPointNo(pointNoArr[1]); List chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapQ = new HashMap<>(); for (ApiPointValueDTO pv : chartDataQ) { dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } for (String cate : categories) { Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); valueList.add(cos); } } double max = 0; double min = 0; double avg = 0; if (!CollectionUtils.isEmpty(valueList)) { max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); } if ("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) { PowerExportPqVO evo = new PowerExportPqVO(); double sdl = 0; double fsl = 0; if (!CollectionUtils.isEmpty(valueList)) { if (powerNetFactorEntity.getCurFlag() != null && powerNetFactorEntity.getCurFlag().intValue() != 0) { for ( Double val : valueList) { if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorEntity.getCurFlag()) { // 未发生返送 sdl += val; } else { // 发生返送 fsl += val; } } } } evo.setSdl(new BigDecimal(sdl).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setDate(DateUtils.format(apiPointValueQueryDTO.getStart())); exportPqList.add(evo); } else if ("DAYCOS".equals(queryType.toUpperCase()) || "MONTHCOS".equals(queryType.toUpperCase())) { double dayLast = 0; if (!CollectionUtils.isEmpty(valueList)) { dayLast = valueList.get(valueList.size() - 1); } PowerExportCosVO evo = new PowerExportCosVO(); evo.setCos(new BigDecimal(dayLast).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); evo.setDate(DateUtils.format(apiPointValueQueryDTO.getStart())); exportCos.add(evo); } } while (curDay.getTime().getTime() <= endTime.getTime()); if ("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) { String name = powerNetFactorEntity.getNodeName() + queryType.toUpperCase().replace("P", "有功").replace("Q", "无功") + "功率报表.xls"; ExcelUtils.write(response, name, "功率数据", PowerExportPqVO.class, exportPqList); } else if ("DAYCOS".equals(queryType.toUpperCase()) || "MONTHCOS".equals(queryType.toUpperCase())) { String name = powerNetFactorEntity.getNodeName() + queryType.toUpperCase().replace("DAYCOS", "日").replace("MONTHCOS", "月") + "功率因数报表.xls"; ExcelUtils.write(response, name, "功率数据", PowerExportPqVO.class, exportPqList); } } @PostMapping("/net-factor/history") @Operation(summary = "功率因数-电网拓扑功率历史") public CommonResult getPowerHistoryData(@RequestBody PowerNetFactorHisReqDTO dto) { log.info("PowerNetFactorHisReqDTO=" + JSONObject.toJSONString(dto)); PowerHistoryDTO result = new PowerHistoryDTO(); String nodeCode = dto.getNodeCode(); if (StringUtils.isBlank(nodeCode)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } String queryType = dto.getQueryType(); if (StringUtils.isBlank(queryType)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } PowerNetFactorQuery powerNetFactorQuery = null; PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(nodeCode); PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode); if (powerNetFactorEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetFactorEntity, PowerNetFactorQuery.class); } else if (powerNetDropdownEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetDropdownEntity, PowerNetFactorQuery.class); } if (powerNetFactorQuery == null) { log.info("powerNetFactor is null"); return success(result); } log.info("开始查询,"); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; String[] pointNoArr = new String[2]; switch (queryType.toUpperCase()) { case "P": pointNo = powerNetFactorQuery.getCurP(); break; case "Q": pointNo = powerNetFactorQuery.getCurQ(); break; case "COS": pointNo = powerNetFactorQuery.getCurCos(); break; case "DAYCOS": pointNoArr[0] = powerNetFactorEntity.getPDay(); pointNoArr[1] = powerNetFactorEntity.getQDay(); break; case "MONTHCOS": pointNoArr[0] = powerNetFactorEntity.getPMon(); pointNoArr[1] = powerNetFactorEntity.getQMon(); break; default: break; } //查询图表 List dataList = new ArrayList<>(); Calendar calendar0 = Calendar.getInstance(); calendar0.set(Calendar.MILLISECOND, 0); 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(); apiPointValueQueryDTO.setEnd(end); apiPointValueQueryDTO.setStart(start); List categories = DateUtils.getTimeScale(start, end, 60); result.setCategories(categories); if (StringUtils.isNotBlank(pointNo)) { apiPointValueQueryDTO.setPointNo(pointNo); List chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); for (ApiPointValueDTO pv : chartData) { Object[] data = new Object[2]; data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); data[1] = pv.getV(); dataList.add(data); } } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { apiPointValueQueryDTO.setPointNo(pointNoArr[0]); List chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapP = new HashMap<>(); for (ApiPointValueDTO pv : chartDataP) { dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } apiPointValueQueryDTO.setPointNo(pointNoArr[1]); List chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapQ = new HashMap<>(); for (ApiPointValueDTO pv : chartDataQ) { dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } for (String cate : categories) { Object[] data = new Object[2]; data[0] = cate; data[1] = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); dataList.add(data); } } result.setDataList(dataList); //查询月最大最小值 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); start = calendar.getTime(); apiPointValueQueryDTO.setStart(start); apiPointValueQueryDTO.setEnd(new Date()); Map maxV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO); Map minV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO); if (maxV != null && maxV.containsKey(pointNo)) { result.setMax(new BigDecimal(maxV.get(pointNo).toString())); } if (minV != null && minV.containsKey(pointNo)) { result.setMin(new BigDecimal(minV.get(pointNo).toString())); } return success(result); } @PostMapping("/net-factor/export-history") @Operation(summary = "功率因数-电网拓扑功率历史导出(多code)") public void exportPowerHistoryList(HttpServletResponse response, HttpServletRequest request, @RequestBody PowerNetFactorHisReqDTO dto) throws IOException { log.info("exportPowerHistoryList开始"); String firstCol = "时间"; List column = new ArrayList<>(); column.add(firstCol); List> exportData = new ArrayList<>(); List nodeCodeList = dto.getNodeCodeList(); if (CollectionUtils.isEmpty(nodeCodeList)) { return; } String queryType = dto.getQueryType(); if (StringUtils.isBlank(queryType)) { return; } Calendar calendar0 = Calendar.getInstance(); calendar0.set(Calendar.MILLISECOND, 0); calendar0.set(Calendar.SECOND, 0); Date end0 = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime(); calendar0.set(Calendar.MINUTE, 0); calendar0.set(Calendar.HOUR_OF_DAY, 0); Date start0 = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); Map> dataAll = new HashMap<>(); List categories = DateUtils.getTimeScale(start0, end0, 60); for (String nodeCode : nodeCodeList) { PowerNetFactorQuery powerNetFactorQuery = null; PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(nodeCode); PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode); if (powerNetFactorEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetFactorEntity, PowerNetFactorQuery.class); } else if (powerNetDropdownEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetDropdownEntity, PowerNetFactorQuery.class); } if (powerNetFactorQuery == null) { log.info("powerNetFactor is null"); continue; } column.add(powerNetFactorQuery.getNodeName()); log.info("开始查询,"); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; String[] pointNoArr = new String[2]; switch (queryType.toUpperCase()) { case "P": if (StringUtils.isBlank(powerNetFactorQuery.getCurP())) { continue; } pointNo = powerNetFactorQuery.getCurP(); break; case "Q": if (StringUtils.isBlank(powerNetFactorQuery.getCurQ())) { continue; } pointNo = powerNetFactorQuery.getCurQ(); break; case "COS": if (StringUtils.isBlank(powerNetFactorQuery.getCurCos())) { continue; } pointNo = powerNetFactorQuery.getCurCos(); break; case "DAYCOS": if (powerNetFactorEntity == null || StringUtils.isBlank(powerNetFactorEntity.getPDay()) || StringUtils.isBlank(powerNetFactorEntity.getQDay())) { continue; } pointNoArr[0] = powerNetFactorEntity.getPDay(); pointNoArr[1] = powerNetFactorEntity.getQDay(); break; case "MONTHCOS": if (powerNetFactorEntity == null || StringUtils.isBlank(powerNetFactorEntity.getPMon()) || StringUtils.isBlank(powerNetFactorEntity.getQMon())) { continue; } pointNoArr[0] = powerNetFactorEntity.getPMon(); pointNoArr[1] = powerNetFactorEntity.getQMon(); break; default: break; } //查询图表 apiPointValueQueryDTO.setEnd(end0); apiPointValueQueryDTO.setStart(start0); Map dataMap = new HashMap<>(); if (StringUtils.isNotBlank(pointNo)) { log.info("查询功率"); apiPointValueQueryDTO.setPointNo(pointNo); List chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); for (ApiPointValueDTO pv : chartData) { String key = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); Object val = pv.getV(); dataMap.put(key, val); } } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { log.info("查询累计功率"); apiPointValueQueryDTO.setPointNo(pointNoArr[0]); List chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapP = new HashMap<>(); for (ApiPointValueDTO pv : chartDataP) { dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } apiPointValueQueryDTO.setPointNo(pointNoArr[1]); List chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapQ = new HashMap<>(); for (ApiPointValueDTO pv : chartDataQ) { dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } for (String cate : categories) { Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); Object val = cos == null ? 0 : new BigDecimal(cos).setScale(2, BigDecimal.ROUND_HALF_UP); dataMap.put(cate, val); } } dataAll.put(powerNetFactorQuery.getNodeName(), dataMap); } log.info("column=" + JSONArray.toJSONString(column)); for (String cate : categories) { List row = new ArrayList<>(); for (String col : column) { if (firstCol.equals(col)) { row.add(cate); } else if (dataAll.get(col) == null) { log.info(col + " is null"); row.add(""); } else if (dataAll.get(col).get(cate) == null) { log.info(col + cate + " is null"); row.add(""); } else { row.add(dataAll.get(col).get(cate)); } } exportData.add(row); } log.info("exportData.size=" + exportData.size()); ExcelUtils.write(response, "历史.xlsx", "历史数据", column, exportData); } @PostMapping("/net-factor/history-list") @Operation(summary = "功率因数-电网拓扑功率历史(多code)") public CommonResult> getPowerHistoryList(@RequestBody PowerNetFactorHisReqDTO dto) { log.info("PowerNetFactorHisReqDTO=" + JSONObject.toJSONString(dto)); LinkedHashMap result = new LinkedHashMap<>(); List nodeCodeList = dto.getNodeCodeList(); if (CollectionUtils.isEmpty(nodeCodeList)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } String queryType = dto.getQueryType(); if (StringUtils.isBlank(queryType)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } Calendar calendar0 = Calendar.getInstance(); calendar0.set(Calendar.MILLISECOND, 0); calendar0.set(Calendar.SECOND, 0); Date end0 = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime(); calendar0.set(Calendar.MINUTE, 0); calendar0.set(Calendar.HOUR_OF_DAY, 0); Date start0 = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); List categories = DateUtils.getTimeScale(start0, end0, 60); for (String nodeCode : nodeCodeList) { PowerHistoryDTO powerHistoryDTO = new PowerHistoryDTO(); PowerNetFactorQuery powerNetFactorQuery = null; PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(nodeCode); PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode); if (powerNetFactorEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetFactorEntity, PowerNetFactorQuery.class); } else if (powerNetDropdownEntity != null) { powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetDropdownEntity, PowerNetFactorQuery.class); } if (powerNetFactorQuery == null) { log.info("powerNetFactor is null"); continue; } log.info("开始查询,"); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; String[] pointNoArr = new String[2]; switch (queryType.toUpperCase()) { case "P": if (StringUtils.isBlank(powerNetFactorQuery.getCurP())) { continue; } pointNo = powerNetFactorQuery.getCurP(); break; case "Q": if (StringUtils.isBlank(powerNetFactorQuery.getCurQ())) { continue; } pointNo = powerNetFactorQuery.getCurQ(); break; case "COS": if (StringUtils.isBlank(powerNetFactorQuery.getCurCos())) { continue; } pointNo = powerNetFactorQuery.getCurCos(); break; case "DAYCOS": if (powerNetFactorEntity == null || StringUtils.isBlank(powerNetFactorEntity.getPDay()) || StringUtils.isBlank(powerNetFactorEntity.getQDay())) { continue; } pointNoArr[0] = powerNetFactorEntity.getPDay(); pointNoArr[1] = powerNetFactorEntity.getQDay(); break; case "MONTHCOS": if (powerNetFactorEntity == null || StringUtils.isBlank(powerNetFactorEntity.getPMon()) || StringUtils.isBlank(powerNetFactorEntity.getQMon())) { continue; } pointNoArr[0] = powerNetFactorEntity.getPMon(); pointNoArr[1] = powerNetFactorEntity.getQMon(); break; default: break; } //查询图表 apiPointValueQueryDTO.setEnd(end0); apiPointValueQueryDTO.setStart(start0); List dataList = new ArrayList<>(); List valueList = new ArrayList<>(); double max = 0; double min = 0; double avg = 0; String maxTime = ""; String minTime = ""; if (StringUtils.isNotBlank(pointNo)) { apiPointValueQueryDTO.setPointNo(pointNo); List chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); for (ApiPointValueDTO pv : chartData) { Object[] data = new Object[2]; data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); data[1] = pv.getV(); dataList.add(data); valueList.add(pv.getV()); } // 返送累计 double fsl = 0; if (!CollectionUtils.isEmpty(valueList)) { if (powerNetFactorQuery.getCurFlag() != null && powerNetFactorQuery.getCurFlag().intValue() != 0) { for ( Double val : valueList) { if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorQuery.getCurFlag()) { // 未发生返送 continue; } fsl += val; } } } powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { apiPointValueQueryDTO.setPointNo(pointNoArr[0]); List chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapP = new HashMap<>(); for (ApiPointValueDTO pv : chartDataP) { dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } apiPointValueQueryDTO.setPointNo(pointNoArr[1]); List chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); Map dataMapQ = new HashMap<>(); for (ApiPointValueDTO pv : chartDataQ) { dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); } for (String cate : categories) { Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); if (cos == null) { continue; } Object[] data = new Object[2]; data[0] = cate; data[1] = cos; dataList.add(data); valueList.add(cos); } } if (!CollectionUtils.isEmpty(valueList)) { // max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); // min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); max = valueList.get(0).doubleValue(); min = valueList.get(0).doubleValue(); for (Object[] dataItem : dataList) { String time = (String) dataItem[0]; double value = (double)dataItem[1]; if (value > max) { max = value; maxTime = time; } if (value < min) { min = value; minTime = time; } } } powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setMaxTime(maxTime); powerHistoryDTO.setMinTime(minTime); powerHistoryDTO.setDataList(dataList); result.put(nodeCode, powerHistoryDTO); } return success(result); } @GetMapping("/adjust-factor") @Operation(summary = "功率因数-调整后的功率因数与无功倒送量") public CommonResult> getPowerAdjustFactor(@RequestParam Map params) { List list = powerAdjustedFactorService.list(params); List dtoList = ConvertUtils.sourceToTarget(list, PowerAdjustedFactorDTO.class); Map result = new HashMap<>(); if (CollectionUtils.isEmpty(list)) { log.info("PowerAdjustedFactor List is empty"); return success(result); } List points = new ArrayList<>(); Map dataMap = new HashMap<>(); for (PowerAdjustedFactorDTO dto : dtoList) { if (StringUtils.isNotBlank(dto.getPointNo())) { points.add(dto.getPointNo()); } } if (!CollectionUtils.isEmpty(points)) { dataMap = dataPointApi.queryPointsRealValue(points); } for (PowerAdjustedFactorDTO powerAdjustedFactorDTO : dtoList) { Double value = dataMap.get(powerAdjustedFactorDTO.getPointNo()) == null ? 0 : Double.parseDouble(dataMap.get(powerAdjustedFactorDTO.getPointNo()).toString()); result.put(powerAdjustedFactorDTO.getName(), value); } return success(result); } @PostMapping("/demand/history") @Operation(summary = "负荷移植-实测需量有功功率历史") public CommonResult 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 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); } @PostMapping("/demand/history-list") @Operation(summary = "负荷移植-实测需量有功功率历史(多code)") public CommonResult> getPowerDemandHistoryList(@RequestBody PowerDemandHisReqDTO dto) { log.info("请求参数: {}", JSONObject.toJSONString(dto)); LinkedHashMap result = new LinkedHashMap<>(); // 参数校验 if (CollectionUtils.isEmpty(dto.getCodeList())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "codeList不能为空"); } if (StringUtils.isBlank(dto.getQueryType())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空"); } Calendar cal = Calendar.getInstance(); cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); Date endTime = dto.getEndTime() == null ? cal.getTime() : dto.getEndTime(); Date startTime = dto.getStartTime(); if (dto.getStartTime() == null) { cal.add(Calendar.DAY_OF_YEAR, -1); startTime = cal.getTime(); } Calendar calendar1 = Calendar.getInstance(); calendar1.set(Calendar.DAY_OF_MONTH, 1); calendar1.set(Calendar.HOUR_OF_DAY, 0); calendar1.set(Calendar.MINUTE, 0); calendar1.set(Calendar.SECOND, 0); calendar1.set(Calendar.MILLISECOND, 0); Date start1 = calendar1.getTime(); for (String code : dto.getCodeList()) { PowerHistoryDTO powerHistoryDTO = new PowerHistoryDTO(); PowerNetFactorQuery powerNetFactorQuery = new PowerNetFactorQuery(); PowerDemandEntity powerDemandEntity = powerDemandService.getByCode(code); PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(code); if (powerDemandEntity != null) { powerNetFactorQuery.setCurP(powerDemandEntity.getActivePower()); powerNetFactorQuery.setCurDem(powerDemandEntity.getCurDemand()); } else if (powerNetDropdownEntity != null) { powerNetFactorQuery.setCurP(powerNetDropdownEntity.getCurP()); powerNetFactorQuery.setCurDem(powerNetDropdownEntity.getExt1()); } else { log.info("未找到code对应的数据: {}", dto.getCode()); continue; } String queryType = dto.getQueryType().toUpperCase(); String pointNo; switch (queryType.toUpperCase()) { case "D": pointNo = powerNetFactorQuery.getCurDem(); break; case "P": pointNo = powerNetFactorQuery.getCurP(); break; default: throw new IllegalArgumentException("不支持的queryType: " + queryType); } // 查询历史数据 ApiPointValueQueryDTO query = new ApiPointValueQueryDTO(); query.setPointNo(pointNo); query.setStart(startTime); query.setEnd(endTime); log.info("开始查询实测需量有功功率历史数据,测点: {}", pointNo); List chartData = dataPointApi.queryPointHistoryValue(query); List dataList = chartData.stream() .map(pv -> new Object[]{ DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV() }) .collect(Collectors.toList()); List valueList = chartData.stream().map(pv -> { return pv.getV(); }).collect(Collectors.toList()); powerHistoryDTO.setDataList(dataList); //查询月最大最小值 /*ApiPointValueQueryDTO apiPointValueQueryDTO1 = new ApiPointValueQueryDTO(); apiPointValueQueryDTO1.setStart(start1); apiPointValueQueryDTO1.setEnd(new Date()); apiPointValueQueryDTO1.setPointNo(pointNo); Map maxV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO1); Map minV = dataPointApi.queryPointMinValueRange(apiPointValueQueryDTO1); if (maxV != null && maxV.containsKey(pointNo)) { powerHistoryDTO.setMax(new BigDecimal(maxV.get(pointNo).toString())); } if (minV != null && minV.containsKey(pointNo)) { powerHistoryDTO.setMin(new BigDecimal(minV.get(pointNo).toString())); }*/ double max = 0; double min = 0; double avg = 0; String maxTime = ""; String minTime = ""; if (!CollectionUtils.isEmpty(valueList)) { // max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); // min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); max = valueList.get(0).doubleValue(); min = valueList.get(0).doubleValue(); for (Object[] dataItem : dataList) { String time = (String) dataItem[0]; double value = (double)dataItem[1]; if (value > max) { max = value; maxTime = time; } if (value < min) { min = value; minTime = time; } } } powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); powerHistoryDTO.setMaxTime(maxTime); powerHistoryDTO.setMinTime(minTime); powerHistoryDTO.setDataList(dataList); result.put(code, powerHistoryDTO); } return success(result); } @GetMapping("/voltage/status-list") @Operation(summary = "功率因数-母线电压状态") public CommonResult> getPowerVoltageStatusList(@RequestParam Map params) { List result = new ArrayList<>(); List list = powerVoltageStatusService.list(params); if (CollectionUtils.isEmpty(list)) { return success(result); } List points = new ArrayList<>(); for (PowerVoltageStatusEntity entity : list) { if (StringUtils.isBlank(entity.getPoint())) { continue; } points.add(entity.getPoint()); } Map pointsRealValue = new HashMap<>(); if (!CollectionUtils.isEmpty(points)) { pointsRealValue = dataPointApi.queryPointsRealValue(points); } for (PowerVoltageStatusEntity entity : list) { PowerVoltageStatusDTO dto = ConvertUtils.sourceToTarget(entity, PowerVoltageStatusDTO.class); dto.setStatus(0); BigDecimal value = new BigDecimal(pointsRealValue.get(entity.getPoint()).toString()); if (value.compareTo(entity.getLimitH()) > 0) { dto.setStatus(1); } dto.setVoltage(value); result.add(dto); } return success(result); } @PostMapping("/power-maxdemand/page") @Operation(summary = "负荷移植-最大需量发生记录分页") public CommonResult> getPowerMaxDemandMainPage(@RequestBody PowerMaxDemandMainPageReqVO reqVO) { if (StringUtils.isBlank(reqVO.getCode())) { log.info("code is blank"); return error(GlobalErrorCodeConstants.BAD_REQUEST); } // 默认只展示当月 if(reqVO.getStartTime() == null) { reqVO.setStartTime(CalendarUtil.getMonthFirstDay()); } PageResult page = powerMaxDemandMainService.page(reqVO); PageResult result = BeanUtils.toBean(page, PowerMaxDemandMainDTO.class); result.getList().forEach(dto0 -> { List detList0 = powerMaxdemandDetService.selectListByRelId(dto0.getId(), dto0.getOccurTime()); dto0.setChildren(ConvertUtils.sourceToTarget(detList0, PowerMaxdemandDetDTO.class)); if (!CollectionUtils.isEmpty(dto0.getChildren())) { dto0.getChildren().forEach(dto1 -> { List detList1 = powerMaxdemandDetService.selectListByRelId(dto1.getId(), dto1.getOccurTime()); dto1.setChildren(ConvertUtils.sourceToTarget(detList1, PowerMaxdemandDetDTO.class)); }); } }); return success(result); } @PostMapping("/power-maxdemand/det-list") @Operation(summary = "负荷移植-最大需量发生记录详情") public CommonResult> getPowerMaxDemandDetList(@RequestBody Map params) { String relId = (String) params.get("relId"); if (StringUtils.isBlank(relId)) { return error(GlobalErrorCodeConstants.BAD_REQUEST); } List list = powerMaxdemandDetService.selectListByRelId(relId); return success(ConvertUtils.sourceToTarget(list, PowerMaxdemandDetDTO.class)); } @GetMapping("/power-price/list") @Operation(summary = "获取峰谷平电价信息") public CommonResult> getPowerPriceList(@RequestParam Map params) { List result = powerPriceMainService.list(params); return success(result); } @PostMapping("/power-price/save") @Operation(summary = "保存峰谷平电价信息") public CommonResult savePowerPriceList(@RequestBody PowerPriceMainDTO mainDTO) { return success(powerPriceMainService.save(mainDTO)); } @PostMapping("/power-price/update") @Operation(summary = "修改峰谷平电价信息") public CommonResult updatePowerPriceList(@RequestBody PowerPriceMainDTO mainDTO) { if (StringUtils.isBlank(mainDTO.getId())) { return error(GlobalErrorCodeConstants.BAD_REQUEST); } return success(powerPriceMainService.update(mainDTO)); } @PostMapping("/factor-control/list") @Operation(summary = "功率因数调整结果查询") public CommonResult> powerFactorControlList(@RequestBody PowerFactorReqVO powerFactorReqVO) { List result = new ArrayList<>(); Map chartMap = new HashMap<>(); List chartList = mcsApi.getChartParamList(CommonConstant.POWER_CODE); chartList.forEach(item -> { chartMap.put(item.getParamName(), item.getParamCode()); }); List contentList = powerFactorReqVO.getContentList(); if (CollectionUtils.isEmpty(contentList)) { log.info("contentList为空"); return new CommonResult<>(); } List contentListNew = new ArrayList<>(); contentList.forEach(item -> { chartMap.forEach((key, value) -> { if (item.contains(key)) { contentListNew.add(Integer.parseInt(value.toString())); } }); }); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); MdkScheduleReqDTO dto = new MdkScheduleReqDTO(); dto.setScheduleTime(calendar.getTime()); dto.setScheduleCode("AnsteelOffPowerAC"); Map dynamicSettings = new HashMap<>(); dynamicSettings.put("option_param", JSONArray.toJSONString(contentListNew.stream().toArray(Integer[]::new))); List cosParam = new ArrayList<>(); cosParam.add(powerFactorReqVO.getAdjustValueCcpp().toString()); cosParam.add(powerFactorReqVO.getAdjustValue135().toString()); cosParam.add(powerFactorReqVO.getAdjustValueTrt().toString()); dynamicSettings.put("cos_param", JSONArray.toJSONString(cosParam)); dto.setDynamicSettings(dynamicSettings); log.info("调度方案开始执行," + JSONObject.toJSONString(dto)); // MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto); //log.info("调度方案执行完成," + mdkScheduleRespDTO); /*String statusCode = mdkScheduleRespDTO.getStatusCode(); if (!CommonConstant.MDK_STATUS_100.equals(statusCode)) { log.info("statusCode=" + statusCode); return CommonResult.error(GlobalErrorCodeConstants.UNKNOWN.getCode(), "工序异常,无计算结果"); } Map data = mdkScheduleRespDTO.getResult();*/ // 调整后的功率因数 // List adjustCosList = Arrays.asList(data.get("adjust_cos").toString().split(",")); String fakeData = "[0.39,0.98,0.98,0 91,1.0,0.93,0.86,0.89,0.98,0.9,0.97,0.89,0.84,0.91]"; List adjustCosList = JSONArray.parseArray(fakeData, BigDecimal.class); // 无功管控结果 BigDecimal back_wugong_buchang = new BigDecimal(36.92); adjustCosList.add(back_wugong_buchang); Map adjustCosMap = new HashMap<>(); for (int i = 0; i < adjustCosList.size(); i++) { adjustCosMap.put(i, adjustCosList.get(i)); } List list = powerFactorControlService.list(); if (CollectionUtils.isEmpty(list)) { log.info("list is empty"); return success(result); } for (int i = 0; i < list.size(); i++) { PowerFactorControlEntity entity = list.get(i); PowerFactorControlDTO controlDTO = new PowerFactorControlDTO(); controlDTO.setName(entity.getName()); controlDTO.setSort(entity.getSort()); try { // 预测结果 switch (ProcessConfDataTypeEnum.getEumByCode(entity.getDataType())) { case DATAPOINT: List params1 = new ArrayList<>(); params1.add(entity.getPredResult()); Map pointValues = dataPointApi.queryPointsRealValue(params1); if (!CollectionUtils.isEmpty(pointValues)) { controlDTO.setPredResult(DecimalUtil.toBigDecimal(pointValues.get(entity.getPredResult()))); } break; case PREDICTVALUE: PredictLastValueReqVO reqVO = new PredictLastValueReqVO(); calendar.set(calendar.HOUR_OF_DAY, 0); reqVO.setPredictTime(calendar.getTime()); List itemNos = new ArrayList<>(); if (StringUtils.isNotBlank(entity.getPredResult())) { itemNos.add(entity.getPredResult().split(",")); } reqVO.setItemNos(itemNos); Map preValues = mcsApi.getPredictValueByTime(reqVO); if (preValues.get(entity.getPredResult()) != null) { controlDTO.setPredResult(new BigDecimal(preValues.get(entity.getPredResult()).toString())); } break; default: break; } // 管控结果 if (adjustCosMap.containsKey(entity.getCosIndex())) { controlDTO.setAdjustCos(adjustCosMap.get(entity.getCosIndex())); } } catch (Exception ex) { log.info(controlDTO.getName() + "获取预测值异常," + ex.getMessage()); ex.printStackTrace(); } result.add(controlDTO); } log.info("result===" + JSONObject.toJSONString(result)); return success(result); } }