diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java index 884110d7e..1fe5c5541 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java @@ -48,6 +48,7 @@ import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; +import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -733,7 +734,7 @@ public class EventRelevantAnalysisServiceImpl extends ServiceImpl advanceEventDetailVOLsit = querySagEventsAll(startTime, endTime); - + advanceEventDetailVOLsit = advanceEventDetailVOLsit.stream().filter(temp-> StringUtils.isNotEmpty(temp.getAdvanceType())).collect(Collectors.toList()); for (AdvanceEventDetailVO advanceEventDetailVO : advanceEventDetailVOLsit) { // 获取监测点线路序号 //母线id String nodePhysics = advanceEventDetailVO.getVoltageId(); diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/NodeDeviceServiceImpl.java b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/NodeDeviceServiceImpl.java index f8abcd045..864ef67a0 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/NodeDeviceServiceImpl.java +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/NodeDeviceServiceImpl.java @@ -1,7 +1,9 @@ package com.njcn.device.device.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.device.service.DeviceProcessService; import com.njcn.device.device.service.IDeviceService; @@ -28,10 +30,7 @@ import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -73,31 +72,59 @@ public class NodeDeviceServiceImpl implements NodeDeviceService { Integer nodeDevNum = node.getNodeDevNum(); Integer maxProcessNum = node.getMaxProcessNum(); List list = iDeviceService.lambdaQuery().eq(Device::getNodeId, nodeId).list(); - if(CollectionUtils.isEmpty(list)){ + if(CollectionUtils.isEmpty(list)){ throw new BusinessException(PvDeviceResponseEnum.NO_DEVICE); - } - List deviceIdList = list.stream().map(Device::getId).collect(Collectors.toList()); - List deviceProcessList = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list(); - Integer devNum = list.size(); - if(nodeDevNum> partition = ListUtils.partition(deviceProcessList, maxProcessNum); - for (int i = 0; i < partition.size(); i++) { - int processNo = i+1; - partition.get(i).forEach(temp->{ - temp.setProcessNo(processNo); - }); + List deviceIdList = list.stream().map(Device::getId).collect(Collectors.toList()); + List existingProcesses = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list(); + if(existingProcesses.size() >= nodeDevNum){ + throw new BusinessException(PvDeviceResponseEnum.OVER_LIMIT); + } + List hasProcess = existingProcesses.stream().map(DeviceProcess::getId).distinct().collect(Collectors.toList()); + + //过滤掉已经分配的装置 + List needDevice = deviceIdList.stream().filter(it->!hasProcess.contains(it)).collect(Collectors.toList()); + // 无待分配设备直接抛出异常(保留你的原判断) + if (CollUtil.isEmpty(needDevice)) { + throw new BusinessException(CommonResponseEnum.FAIL, "不存在未分配的进程的装置"); + } + //单个进程支持最大装置数 + int maxDevNumPerProcess = (int) Math.ceil((double) nodeDevNum / maxProcessNum); + Map mapCount = existingProcesses.stream().collect(Collectors.groupingBy(DeviceProcess::getProcessNo,Collectors.counting())); + List poList = new ArrayList<>(); + Iterator deviceIterator = needDevice.iterator(); + + for (int processNo = 1; processNo <= maxProcessNum && deviceIterator.hasNext(); processNo++) { + Long usedCount = mapCount.getOrDefault(processNo, 0L); + int remainingCapacity = (int) (maxDevNumPerProcess - usedCount); + + if (remainingCapacity <= 0) { + continue; + } + // 分配设备给当前进程 + for (int i = 0; i < remainingCapacity && deviceIterator.hasNext(); i++) { + String deviceId = deviceIterator.next(); + DeviceProcess deviceProcess = buildDeviceProcess(deviceId, processNo); + poList.add(deviceProcess); + } + } + if(CollUtil.isEmpty(poList)){ + throw new BusinessException(CommonResponseEnum.FAIL,"不存在可以分配的进程或装置"); } - List collect = partition.stream().flatMap(List::stream).collect(Collectors.toList()); //更新进程号 - deviceProcessService.updateBatchById(collect); + deviceProcessService.saveBatch(poList,100); + } + + private DeviceProcess buildDeviceProcess(String deviceId, Integer processNo) { + DeviceProcess deviceProcess = new DeviceProcess(); + deviceProcess.setId(deviceId); // 核心修复:设置设备关联字段,而非主键id + deviceProcess.setProcessNo(processNo); + return deviceProcess; } @Override diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java index 7e983d17f..a7bb89340 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java @@ -291,7 +291,14 @@ public class ReportServiceImpl implements ReportService { .le(StrUtil.isNotBlank(businessParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime()))) .orderByDesc(RmpEventDetailPO::getSeverity).last(" limit 20") ); - info = BeanUtil.copyToList(eventDetails, EventDetailNew.class); + info = eventDetails.stream().map(temp->{ + EventDetailNew eventDetailNew = new EventDetailNew(); + BeanUtils.copyProperties(temp,eventDetailNew); + eventDetailNew.setStartTime(LocalDateTimeUtil.format(temp.getStartTime(),DatePattern.NORM_DATETIME_MS_PATTERN)); + return eventDetailNew; + }).collect(Collectors.toList()); + +// info = BeanUtil.copyToList(eventDetails, EventDetailNew.class); } else { throw new BusinessException(DeviceResponseEnum.DEPT_LINE_EMPTY); } @@ -309,6 +316,7 @@ public class ReportServiceImpl implements ReportService { if (detail.getLineId().equals(vo.getLineId())) { BeanUtils.copyProperties(detail, waveTypeVO); BeanUtils.copyProperties(vo, waveTypeVO); + waveTypeVO.setStartTime(LocalDateTimeUtil.parse(detail.getStartTime(),DatePattern.NORM_DATETIME_MS_PATTERN)); result.add(waveTypeVO); } } @@ -343,7 +351,7 @@ public class ReportServiceImpl implements ReportService { count.put(datum.getName(), 0); } //过滤掉原因的是空的 - info = info.stream().filter(temp->Objects.nonNull(temp.getAdvanceReason())).collect(Collectors.toList()); + info = info.stream().filter(temp->StringUtils.isNotEmpty(temp.getAdvanceReason())).collect(Collectors.toList()); //替值 for (EventDetail eventDetail : info) { // if (dictData.getId().equals(eventDetail.getEventType())) { @@ -978,7 +986,7 @@ public class ReportServiceImpl implements ReportService { cell9.setCellStyle(bodyStyle); cell0.setCellValue(i + 1); - cell1.setCellValue(vo.getStartTime()); + cell1.setCellValue(LocalDateTimeUtil.format(vo.getStartTime(),DatePattern.NORM_DATETIME_MS_PATTERN)); cell2.setCellValue(vo.getGdName()); cell3.setCellValue(vo.getSubName()); cell4.setCellValue(vo.getLineName()); @@ -1101,7 +1109,7 @@ public class ReportServiceImpl implements ReportService { } public void sheet4(HSSFWorkbook sheets, HSSFCellStyle cellStyle, HSSFCellStyle bodyStyle, DeviceInfoParam.BusinessParam businessParam) { - sheets.createSheet("详细事件列表"); + sheets.createSheet("暂降事件列表"); HSSFSheet sheetAt = sheets.getSheetAt(3); sheetAt.setColumnWidth(0, 24 * 256); sheetAt.setColumnWidth(1, 24 * 256); diff --git a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java index a7771253a..083200af6 100644 --- a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java +++ b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java @@ -949,7 +949,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { Map reasonMap = new LinkedHashMap<>(); Map typeMap = new LinkedHashMap<>(); - info = info.stream().filter(temp->Objects.nonNull(temp.getAdvanceReason())||Objects.nonNull(temp.getAdvanceType())).collect(Collectors.toList()); + info = info.stream().filter(temp->StringUtils.isNotEmpty(temp.getAdvanceReason())||StringUtils.isNotEmpty(temp.getAdvanceType())).collect(Collectors.toList()); //添加detail for (RmpEventDetailPO detail : info) { EventDetail details = null; @@ -975,13 +975,13 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { //添加reason到map for (EventDetail data : list) { - if (Objects.nonNull(data.getAdvanceReason())&&reasonMap.get(data.getAdvanceReason()) != null) { + if (StringUtils.isNotEmpty(data.getAdvanceReason())&&reasonMap.get(data.getAdvanceReason()) != null) { reasonMap.put(data.getAdvanceReason(), reasonMap.get(data.getAdvanceReason()) + 1); } } //添加type到map for (EventDetail data : list) { - if (Objects.nonNull(data.getAdvanceType())&&typeMap.get(data.getAdvanceType()) != null) { + if (StringUtils.isNotEmpty(data.getAdvanceType())&&typeMap.get(data.getAdvanceType()) != null) { typeMap.put(data.getAdvanceType(), typeMap.get(data.getAdvanceType()) + 1); } } @@ -995,7 +995,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { } result.setTypes(typesVOS); result.setReason(reasonsVOS); - //result.setDetail(list); + result.setDetail(list); return result; } diff --git a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventDetailServiceImpl.java b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventDetailServiceImpl.java index 2ed52a256..7c2f68217 100644 --- a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventDetailServiceImpl.java +++ b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventDetailServiceImpl.java @@ -191,6 +191,11 @@ public class EventDetailServiceImpl extends ServiceImpl eventDetailList = influxDBResultMapper.toPOJO(monitorQuery, EventDetailNew.class); - Map> map = eventDetailList.stream().filter(x -> x.getEventType() == "1").collect(Collectors.groupingBy(s -> s.getStartTime().substring(0, 10))); + Map> map = eventDetailList.stream().filter(x -> x.getEventType() == "1").collect(Collectors.groupingBy(s ->s.getStartTime().substring(0, 10))); Set keySet = map.keySet(); LocalDate parse1 = LocalDate.parse(startTime); diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/excel/ExcelParam.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/excel/ExcelParam.java new file mode 100644 index 000000000..d2a547d8e --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/excel/ExcelParam.java @@ -0,0 +1,50 @@ +package com.njcn.harmonic.pojo.param.excel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * @author xy + * + */ +@Data +public class ExcelParam implements Serializable { + + @ApiModelProperty("模板分类名称") + @NotBlank(message = "模板分类名称不可为空") + private String modelTypeName; + + @ApiModelProperty("模板分类类型") + private String modelType; + + @ApiModelProperty("排序") + private Integer sort; + + + @Data + public static class ListExcelParam implements Serializable { + + @ApiModelProperty("模板分类id") + private String id; + + @ApiModelProperty("模板id") + private List modelIds; + } + + @Data + @EqualsAndHashCode(callSuper = true) + public static class UpdateExcelParam extends ExcelParam implements Serializable { + + @ApiModelProperty("模板id") + private String id; + + } + + + +} diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/ExcelRptTemp.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/ExcelRptTemp.java index fc388204a..d12ef6050 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/ExcelRptTemp.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/ExcelRptTemp.java @@ -34,4 +34,6 @@ public class ExcelRptTemp extends BaseEntity { private Integer sort; + private String wiringMethod; + } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcel.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcel.java new file mode 100644 index 000000000..e7efee86d --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcel.java @@ -0,0 +1,37 @@ +package com.njcn.harmonic.pojo.po.excel; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author xy + * @since 2026-01-27 + */ +@Getter +@Setter +@TableName("sys_excel") +public class SysExcel extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * 报表类型名称 + */ + private String excelName; + + private String excelType; + + private Integer sort; +} diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcelRelation.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcelRelation.java new file mode 100644 index 000000000..32d3e3b3d --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/excel/SysExcelRelation.java @@ -0,0 +1,35 @@ +package com.njcn.harmonic.pojo.po.excel; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author xy + * @since 2026-01-27 + */ +@Getter +@Setter +@TableName("sys_excel_relation") +public class SysExcelRelation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * sys_excel的主键id + */ + private String sysExcelId; + + /** + * sys_excel_rpt_temp的主键id + */ + private String sysExcelRptTempId; + + +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/ExcelRptTempMapper.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/ExcelRptTempMapper.java index dfd65fc87..61818e0f5 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/ExcelRptTempMapper.java +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/ExcelRptTempMapper.java @@ -27,6 +27,7 @@ public interface ExcelRptTempMapper extends BaseMapper { List getReportTemplateByDept(@Param("ids") List ids); + List getReportTemplateByIds(@Param("ids") List ids); @Select("${sqlStr}") StatisticalDataDTO dynamicSql(@Param("sqlStr")String sql); diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelMapper.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelMapper.java new file mode 100644 index 000000000..bc84e2784 --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelMapper.java @@ -0,0 +1,16 @@ +package com.njcn.harmonic.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.harmonic.pojo.po.excel.SysExcel; + +/** + *

+ * Mapper 接口 + *

+ * + * @author xy + * @since 2026-01-27 + */ +public interface SysExcelMapper extends BaseMapper { + +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelRelationMapper.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelRelationMapper.java new file mode 100644 index 000000000..45c4dc865 --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/SysExcelRelationMapper.java @@ -0,0 +1,16 @@ +package com.njcn.harmonic.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.harmonic.pojo.po.excel.SysExcelRelation; + +/** + *

+ * Mapper 接口 + *

+ * + * @author xy + * @since 2026-01-27 + */ +public interface SysExcelRelationMapper extends BaseMapper { + +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/mapping/ExcelRptTempMapper.xml b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/mapping/ExcelRptTempMapper.xml index 006870d63..432c1e70b 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/mapping/ExcelRptTempMapper.xml +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/mapper/mapping/ExcelRptTempMapper.xml @@ -8,9 +8,11 @@ a.name, a.dept_id, b.name deptName, - a.activation, + a.activation,, + a.wiring_method wiringMethod a.update_time, - c.name updateBy + c.name updateBy, + a.sort sort from sys_excel_rpt_temp a left join sys_dept b on a.dept_id = b.id left join sys_user c on a.update_by = c.id @@ -21,6 +23,7 @@ b.name like CONCAT('%', #{baseParam.searchValue},'%') ) + order by a.sort asc + + diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/ReportTemplateVO.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/ReportTemplateVO.java index d3ec1d4f9..b9657b7be 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/ReportTemplateVO.java +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/ReportTemplateVO.java @@ -31,4 +31,7 @@ public class ReportTemplateVO extends BaseEntity { private String reportForm; + private String wiringMethod; + + private Integer sort; } diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/SysExcelRelationVO.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/SysExcelRelationVO.java new file mode 100644 index 000000000..a10ddc09e --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/pojo/vo/SysExcelRelationVO.java @@ -0,0 +1,18 @@ +package com.njcn.harmonic.common.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author xy + */ +@Data +public class SysExcelRelationVO implements Serializable { + + private String sysExcelId; + + private List relationIds; + +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelRelationService.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelRelationService.java new file mode 100644 index 000000000..19f148330 --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelRelationService.java @@ -0,0 +1,23 @@ +package com.njcn.harmonic.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.harmonic.common.pojo.vo.SysExcelRelationVO; +import com.njcn.harmonic.pojo.param.excel.ExcelParam; +import com.njcn.harmonic.pojo.po.excel.SysExcelRelation; + +/** + *

+ * 服务类 + *

+ * + * @author xy + * @since 2026-01-27 + */ +public interface ISysExcelRelationService extends IService { + + //查询已绑定的关系 + SysExcelRelationVO getRelation(String id); + + //重新绑定模板 + boolean bandRelation(ExcelParam.ListExcelParam param); +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelService.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelService.java new file mode 100644 index 000000000..b9e6be14e --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/ISysExcelService.java @@ -0,0 +1,32 @@ +package com.njcn.harmonic.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.pq.pojo.vo.LineStateVO; +import com.njcn.harmonic.pojo.param.excel.ExcelParam; +import com.njcn.harmonic.pojo.po.excel.SysExcel; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author xy + * @since 2026-01-27 + */ +public interface ISysExcelService extends IService { + + //新增 + boolean addSysExcel(ExcelParam param); + + //删除 + boolean deleteSysExcel(String id); + + //修改 + boolean updateSysExcel(ExcelParam.UpdateExcelParam param); + + //查询 + List querySysExcel(); + +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java index 45976e1f3..40e35fdab 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java @@ -19,14 +19,13 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.api.CsCommTerminalFeignClient; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; -import com.njcn.device.biz.pojo.po.PqsDeviceUnit; +import com.njcn.harmonic.common.mapper.ExcelRptTempMapper; import com.njcn.harmonic.common.pojo.dto.DeviceUnitCommDTO; +import com.njcn.harmonic.common.service.CustomReportTableService; import com.njcn.harmonic.enums.HarmonicResponseEnum; import com.njcn.harmonic.pojo.dto.ReportTemplateDTO; import com.njcn.harmonic.pojo.param.ReportSearchParam; import com.njcn.harmonic.pojo.po.ExcelRptTemp; -import com.njcn.harmonic.common.mapper.ExcelRptTempMapper; -import com.njcn.harmonic.common.service.CustomReportTableService; import com.njcn.influx.constant.InfluxDbSqlConstant; import com.njcn.influx.pojo.constant.InfluxDBTableConstant; import com.njcn.oss.enums.OssResponseEnum; @@ -91,6 +90,12 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { private final String STR_FOUR = "%"; private final String UVOLTAGE_DEV = "UVOLTAGE_DEV"; private final String VOLTAGE_DEV = "VOLTAGE_DEV"; + private static final Map PHASE_MAPPING = new HashMap() {{ + put("AB", "A"); + put("BC", "B"); + put("CA", "C"); + put("M", "T"); + }}; @Override public void getCustomReport(ReportSearchParam reportSearchParam,Map newMap,DeviceUnitCommDTO deviceUnitCommDTO, HttpServletResponse response) { @@ -141,9 +146,20 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { throw new BusinessException(CommonResponseEnum.FAIL,"字典类型模板缺少!"); } - DictData epdDic = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.EPD.getCode(),DicDataTypeEnum.CS_DATA_TYPE.getCode()).getData(); List eleEpdPqdList= epdFeignClient.dictMarkByDataType(epdDic.getId()).getData(); + + Map tMap = new HashMap<>(); + eleEpdPqdList.forEach(item->{ + String phase; + if (Objects.isNull(PHASE_MAPPING.get(item.getPhase()))) { + phase = item.getPhase(); + } else { + phase = PHASE_MAPPING.get(item.getPhase()); + } + tMap.put((item.getOtherName() + phase + item.getResourcesId()).toUpperCase(), item.getPrimaryFormula()); + }); + eleEpdPqdList = eleEpdPqdList.stream().filter(it->"T".equals(it.getPhase())||"M".equals(it.getPhase())).collect(Collectors.toList()); List noPhaseList = eleEpdPqdList.stream().filter(it->StrUtil.isNotBlank(it.getOtherName())).map(it->it.getOtherName().toUpperCase()).collect(Collectors.toList()); @@ -173,13 +189,13 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { phaseMap.forEach((phaseKey, phaseVal) -> { StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT); if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) { - assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); + assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); } else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) { - assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); + assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); } else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) { - assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); + assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); } else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) { - assSqlByMysql(phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); + assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList); } }); @@ -453,6 +469,37 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { } + public Double getData(String data) { + double ratio = 1.0; + String[] parts = data.split(":"); + if (parts.length == 2) { + try { + int num1 = Integer.parseInt(parts[0]); + int num2 = Integer.parseInt(parts[1]); + // 如果需要计算比值 + ratio = (double) num1 / num2; + } catch (NumberFormatException e) { + System.out.println("字符串格式错误"); + } + } + return ratio; + } + + public String appendData(Map tMap,String name, double pt, double ct) { + String result; + String format = tMap.get(name); + if (Objects.equals(format, "*PT")) { + result = "*"+pt+"/1000"; + } else if (Objects.equals(format, "*CT")) { + result = "*"+ct; + } else if (Objects.equals(format, "*PT*CT")) { + result = "*"+pt+"*"+ct+"/1000"; + } else { + result = ""; + } + return result; + } + /** * @param data 同类型的cell模板 * @param sql 单个cell模板 @@ -461,8 +508,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { * @param assNoPassMap 用于存储不合格的指标 * @date 2023/10/20 */ - - private void assSqlByMysql(List data, StringBuilder sql, List endList, String method, ReportSearchParam reportSearchParam, Map limitMap, Map overLimitMap, Map assNoPassMap,List noPhaseList) { + private void assSqlByMysql(Map tMap, String dataLevel, String pt, String ct, List data, StringBuilder sql, List endList, String method, ReportSearchParam reportSearchParam, Map limitMap, Map overLimitMap, Map assNoPassMap,List noPhaseList) { //sql拼接示例:select MAX(IHA2) as IHA2 from power_quality_data where Phase = 'A' and LineId='1324564568' and Stat_Method='max' tz('Asia/Shanghai') if (InfluxDbSqlConstant.CP95.equals(method)) { for (int i = 0; i < data.size(); i++) { @@ -471,6 +517,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { .append(InfluxDbSqlConstant.LBK) .append(data.get(i).getTemplateName()) .append(InfluxDbSqlConstant.RBK) + .append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName()+data.get(i).getPhase()+data.get(0).getResourceId(), getData(pt), getData(ct)) : "") .append(InfluxDbSqlConstant.AS) .append("\""+data.get(i).getItemName()+"\""); } else { @@ -478,6 +525,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { .append(InfluxDbSqlConstant.LBK) .append(data.get(i).getTemplateName()) .append(InfluxDbSqlConstant.RBK) + .append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName()+data.get(i).getPhase()+data.get(0).getResourceId(), getData(pt), getData(ct)) : "") .append(InfluxDbSqlConstant.AS) .append("\""+data.get(i).getItemName()+"\"").append(StrUtil.COMMA); } @@ -489,6 +537,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { .append(InfluxDbSqlConstant.LBK) .append(data.get(i).getTemplateName()) .append(InfluxDbSqlConstant.RBK) + .append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName()+data.get(i).getPhase()+data.get(0).getResourceId(), getData(pt), getData(ct)) : "") .append(InfluxDbSqlConstant.AS) .append("\""+data.get(i).getItemName()+"\""); } else { @@ -496,6 +545,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { .append(InfluxDbSqlConstant.LBK) .append(data.get(i).getTemplateName()) .append(InfluxDbSqlConstant.RBK) + .append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName()+data.get(i).getPhase()+data.get(0).getResourceId(), getData(pt), getData(ct)) : "") .append(InfluxDbSqlConstant.AS) .append("\""+data.get(i).getItemName()+"\"").append(StrUtil.COMMA); } diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelRelationServiceImpl.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelRelationServiceImpl.java new file mode 100644 index 000000000..f0569af94 --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelRelationServiceImpl.java @@ -0,0 +1,65 @@ +package com.njcn.harmonic.common.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.harmonic.common.mapper.SysExcelRelationMapper; +import com.njcn.harmonic.common.pojo.vo.SysExcelRelationVO; +import com.njcn.harmonic.common.service.ISysExcelRelationService; +import com.njcn.harmonic.pojo.param.excel.ExcelParam; +import com.njcn.harmonic.pojo.po.excel.SysExcelRelation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author xy + * @since 2026-01-27 + */ +@Service +@Slf4j +@RequiredArgsConstructor +@DS("sjzx") +public class SysExcelRelationServiceImpl extends ServiceImpl implements ISysExcelRelationService { + + @Override + public SysExcelRelationVO getRelation(String id) { + SysExcelRelationVO vo = new SysExcelRelationVO(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysExcelRelation::getSysExcelId, id); + List list = this.list(queryWrapper); + vo.setSysExcelId(id); + if (!list.isEmpty()) { + vo.setRelationIds(list.stream().map(SysExcelRelation::getSysExcelRptTempId).collect(Collectors.toList())); + } + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean bandRelation(ExcelParam.ListExcelParam param) { + //先删除 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysExcelRelation::getSysExcelId, param.getId()); + this.remove(queryWrapper); + //再绑定 + if (!param.getModelIds().isEmpty()) { + List list = param.getModelIds().stream().map(id -> { + SysExcelRelation relation = new SysExcelRelation(); + relation.setSysExcelId(param.getId()); + relation.setSysExcelRptTempId(id); + return relation; + }).collect(Collectors.toList()); + this.saveBatch(list); + } + return true; + } +} diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelServiceImpl.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelServiceImpl.java new file mode 100644 index 000000000..91d0ce7f5 --- /dev/null +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/SysExcelServiceImpl.java @@ -0,0 +1,83 @@ +package com.njcn.harmonic.common.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.harmonic.common.mapper.SysExcelMapper; +import com.njcn.harmonic.common.mapper.SysExcelRelationMapper; +import com.njcn.harmonic.common.service.ISysExcelService; +import com.njcn.harmonic.pojo.param.excel.ExcelParam; +import com.njcn.harmonic.pojo.po.excel.SysExcel; +import com.njcn.harmonic.pojo.po.excel.SysExcelRelation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author xy + * @since 2026-01-27 + */ +@Service +@Slf4j +@RequiredArgsConstructor +@DS("sjzx") +public class SysExcelServiceImpl extends ServiceImpl implements ISysExcelService { + + private final SysExcelRelationMapper sysExcelRelationMapper; + + @Override + public boolean addSysExcel(ExcelParam param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysExcel::getExcelName, param.getModelTypeName()); + if (this.count(queryWrapper) > 0) { + throw new BusinessException("名称重复"); + } + + SysExcel sysExcel = new SysExcel(); + sysExcel.setExcelName(param.getModelTypeName()); + sysExcel.setExcelType(param.getModelType()); + sysExcel.setSort(param.getSort()); + return this.save(sysExcel); + } + + @Override + public boolean deleteSysExcel(String id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysExcelRelation::getSysExcelId, id); + if (sysExcelRelationMapper.selectCount(queryWrapper) > 0) { + throw new BusinessException("请先删除关联关系"); + } + return this.removeById(id); + } + + @Override + public boolean updateSysExcel(ExcelParam.UpdateExcelParam param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysExcel::getExcelName, param.getModelTypeName()).ne(SysExcel::getId, param.getId()); + if (this.count(queryWrapper) > 0) { + throw new BusinessException("名称重复"); + } + SysExcel sysExcel = new SysExcel(); + sysExcel.setId(param.getId()); + sysExcel.setExcelName(param.getModelTypeName()); + sysExcel.setExcelType(param.getModelType()); + sysExcel.setSort(param.getSort()); + return this.updateById(sysExcel); + } + + @Override + public List querySysExcel() { + return this.list().stream().sorted(Comparator.comparing(SysExcel::getSort)).collect(Collectors.toList()); + } + + +}