feat(ledger): 添加缺失台账信息的相关接口
This commit is contained in:
@@ -10,15 +10,18 @@ import com.njcn.common.pojo.enums.common.LogEnum;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.response.HttpResult;
|
||||
import com.njcn.common.utils.HttpResultUtil;
|
||||
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.api.EquipmentFeignClient;
|
||||
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
|
||||
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||
import com.njcn.csharmonic.pojo.param.PqSensitiveUserParam;
|
||||
import com.njcn.csharmonic.pojo.vo.PqSensitiveUserVo;
|
||||
import com.njcn.csharmonic.service.IPqSensitiveUserService;
|
||||
import com.njcn.device.biz.pojo.po.PqSensitiveUser;
|
||||
import com.njcn.web.controller.BaseController;
|
||||
import com.njcn.web.pojo.param.BaseParam;
|
||||
import com.njcn.web.utils.RequestUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -50,6 +53,8 @@ public class PqSensitiveUserController extends BaseController {
|
||||
|
||||
private final IPqSensitiveUserService pqSensitiveUserService;
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
private final CsCommTerminalFeignClient csCommTerminalFeignClient;
|
||||
private final EquipmentFeignClient equipmentFeignClient;
|
||||
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/getList")
|
||||
@@ -81,9 +86,10 @@ public class PqSensitiveUserController extends BaseController {
|
||||
List<PqSensitiveUser> list;
|
||||
//获取用户监测点
|
||||
List<String> keywordsLineIds = new ArrayList<>();
|
||||
List<CsLinePO> poList = csLineFeignClient.getSimpleLine().getData();
|
||||
if (CollUtil.isNotEmpty(poList)) {
|
||||
keywordsLineIds = poList.stream().map(CsLinePO::getMonitorUser).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
||||
List<String> devIds = csCommTerminalFeignClient.getDevIdsByUser(RequestUtil.getUserIndex()).getData();
|
||||
if (CollUtil.isNotEmpty(devIds)) {
|
||||
List<CsEquipmentDeliveryDTO> devList = equipmentFeignClient.queryDeviceById(devIds).getData();
|
||||
keywordsLineIds = devList.stream().map(CsEquipmentDeliveryDTO::getMonitorUser).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
||||
}
|
||||
if (CollUtil.isEmpty(keywordsLineIds)) {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||
|
||||
@@ -279,9 +279,8 @@ public class CustomReportServiceImpl implements CustomReportService {
|
||||
|
||||
@Override
|
||||
public void getSensitiveUserReport(SensitiveUserReportQueryParam queryParam, HttpServletResponse response) {
|
||||
|
||||
String sensitiveUserId = queryParam.getSensitiveUserId();
|
||||
List<CsLinePO> linePOList = csLineFeignClient.getLineBySensitiveUser(Collections.singletonList(sensitiveUserId)).getData();
|
||||
String devId = queryParam.getSensitiveUserId();
|
||||
List<CsLinePO> linePOList = csLineFeignClient.getLinesByDevList(Collections.singletonList(devId)).getData();
|
||||
DictData loadSideDictData = dicDataFeignClient.getDicDataByCode(LOAD_SIDE_DICT_CODE).getData();
|
||||
DictData gridSideDictData = dicDataFeignClient.getDicDataByCode(GRID_SIDE_DICT_CODE).getData();
|
||||
CsLinePO gridSideLine = linePOList.stream().filter(linePO -> linePO.getPosition().equals(gridSideDictData.getId())).findFirst().orElse(null);
|
||||
@@ -332,17 +331,16 @@ public class CustomReportServiceImpl implements CustomReportService {
|
||||
indexDataList = new LinkedHashSet<>(indexDataList).stream().sorted(Comparator.comparing(ReportTemplateDataVO::getItemName)).collect(Collectors.toList());
|
||||
Map<String, List<ReportTemplateDataVO>> classMap = indexDataList.stream().collect(Collectors.groupingBy(ReportTemplateDataVO::getResourceId));
|
||||
//定义存放指标的map
|
||||
if (gridSideLine != null) {
|
||||
lineName2 = gridSideLine.getName();
|
||||
List<ReportTemplateDataVO> afterDataList = fetchDataList(gridSideLine, classMap, queryParam);
|
||||
afterFinalDataList.addAll(afterDataList);
|
||||
}
|
||||
|
||||
if (loadSideLine != null) {
|
||||
lineName1 = loadSideLine.getName();
|
||||
List<ReportTemplateDataVO> beforeDataList = fetchDataList(loadSideLine, classMap, queryParam);
|
||||
beforeFinalDataList.addAll(beforeDataList);
|
||||
}
|
||||
if (gridSideLine != null) {
|
||||
lineName2 = gridSideLine.getName();
|
||||
List<ReportTemplateDataVO> afterDataList = fetchDataList(gridSideLine, classMap, queryParam);
|
||||
afterFinalDataList.addAll(afterDataList);
|
||||
}
|
||||
}
|
||||
//进行反向赋值到模板
|
||||
//1、根据itemName分组
|
||||
@@ -2241,18 +2239,19 @@ public class CustomReportServiceImpl implements CustomReportService {
|
||||
//根据接线方式获取模板id
|
||||
int conType = po.getConType();
|
||||
DictData dicData;
|
||||
//角型
|
||||
if (conType == 1) {
|
||||
dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.STAR_TRIANGLE.getCode()).getData();
|
||||
}
|
||||
//v型
|
||||
else if (conType == 2){
|
||||
dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.OPEN_DELTA.getCode()).getData();
|
||||
}
|
||||
//星型 或 其他
|
||||
else {
|
||||
dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.STAR.getCode()).getData();
|
||||
}
|
||||
dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.STAR.getCode()).getData();
|
||||
// //角型
|
||||
// if (conType == 1) {
|
||||
// dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.STAR_TRIANGLE.getCode()).getData();
|
||||
// }
|
||||
// //v型
|
||||
// else if (conType == 2){
|
||||
// dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.OPEN_DELTA.getCode()).getData();
|
||||
// }
|
||||
// //星型 或 其他
|
||||
// else {
|
||||
// dicData = dicDataFeignClient.getDicDataByCode(DicDataEnum.STAR.getCode()).getData();
|
||||
// }
|
||||
String tempId;
|
||||
Optional<ReportTemplateVO> vo = result.stream().filter(item -> Objects.equals(dicData.getId(),item.getWiringMethod())).findFirst();
|
||||
if (vo.isPresent()) {
|
||||
|
||||
@@ -10,10 +10,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.api.EquipmentFeignClient;
|
||||
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
|
||||
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||
import com.njcn.csharmonic.pojo.param.PqSensitiveUserParam;
|
||||
import com.njcn.csharmonic.pojo.vo.PqSensitiveUserVo;
|
||||
import com.njcn.csharmonic.service.IPqSensitiveUserService;
|
||||
@@ -22,6 +23,7 @@ import com.njcn.device.biz.pojo.po.PqSensitiveUser;
|
||||
import com.njcn.system.api.DicDataFeignClient;
|
||||
import com.njcn.system.pojo.po.DictData;
|
||||
import com.njcn.web.pojo.param.BaseParam;
|
||||
import com.njcn.web.utils.RequestUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -46,6 +48,7 @@ public class PqSensitiveUserServiceImpl extends ServiceImpl<PqSensitiveUserMappe
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
private final DicDataFeignClient dicDataFeignClient;
|
||||
private final EquipmentFeignClient equipmentFeignClient;
|
||||
private final CsCommTerminalFeignClient csCommTerminalFeignClient;
|
||||
|
||||
@Override
|
||||
public Page<PqSensitiveUserVo> getList(BaseParam param) {
|
||||
@@ -58,21 +61,28 @@ public class PqSensitiveUserServiceImpl extends ServiceImpl<PqSensitiveUserMappe
|
||||
Page<PqSensitiveUser> page = this.page(new Page<>(param.getPageNum(),param.getPageSize()),lambdaQueryWrapper);
|
||||
if(CollUtil.isNotEmpty(page.getRecords())){
|
||||
List<PqSensitiveUserVo> dataGroupEventVOList = new ArrayList<>();
|
||||
Map<String,List<CsLinePO>> map = new HashMap<>();
|
||||
Map<String,List<CsEquipmentDeliveryPO>> map = new HashMap<>();
|
||||
//获取绑定敏感用户的监测点信息
|
||||
List<String> sensitiveUserIds = page.getRecords().stream().map(PqSensitiveUser::getId).collect(Collectors.toList());
|
||||
List<CsLinePO> csLinePOList = csLineFeignClient.getLineBySensitiveUser(sensitiveUserIds).getData();
|
||||
if (CollUtil.isNotEmpty(csLinePOList)) {
|
||||
map = csLinePOList.stream().collect(Collectors.groupingBy(CsLinePO::getMonitorUser));
|
||||
List<CsEquipmentDeliveryPO> devList = csLineFeignClient.getDevBySensitiveUser(sensitiveUserIds).getData();
|
||||
if (CollUtil.isNotEmpty(devList)) {
|
||||
map = devList.stream()
|
||||
.filter(po -> po.getMonitorUser() != null)
|
||||
.sorted(Comparator.comparing(CsEquipmentDeliveryPO::getMonitorUser))
|
||||
.collect(Collectors.groupingBy(
|
||||
CsEquipmentDeliveryPO::getMonitorUser,
|
||||
LinkedHashMap::new,
|
||||
Collectors.toList()
|
||||
));
|
||||
}
|
||||
Map<String, List<CsLinePO>> finalMap = map;
|
||||
Map<String, List<CsEquipmentDeliveryPO>> finalMap = map;
|
||||
page.getRecords().forEach(item->{
|
||||
PqSensitiveUserVo vo = new PqSensitiveUserVo();
|
||||
BeanUtil.copyProperties(item,vo);
|
||||
if (finalMap.containsKey(item.getId())) {
|
||||
vo.setIsMonitor("是");
|
||||
List<CsLinePO> list = finalMap.get(item.getId());
|
||||
boolean hasGoverned = list.stream().anyMatch(item2 -> item2.getGovern() == 1);
|
||||
List<CsEquipmentDeliveryPO> list = finalMap.get(item.getId());
|
||||
boolean hasGoverned = list.stream().anyMatch(item2 -> !Objects.isNull(item2.getGovernMethod()));
|
||||
vo.setIsGovern(hasGoverned ? "是" : "否");
|
||||
} else {
|
||||
vo.setIsMonitor("否");
|
||||
@@ -92,11 +102,15 @@ public class PqSensitiveUserServiceImpl extends ServiceImpl<PqSensitiveUserMappe
|
||||
@Override
|
||||
public List<PqSensitiveUserVo> getListByUser(BaseParam param) {
|
||||
List<PqSensitiveUserVo> result = new ArrayList<>();
|
||||
//现根据用户获取监测点
|
||||
List<CsLinePO> poList = csLineFeignClient.getSimpleLine().getData();
|
||||
//现根据用户获取设备
|
||||
List<String> devIds = csCommTerminalFeignClient.getDevIdsByUser(RequestUtil.getUserIndex()).getData();
|
||||
if (CollUtil.isEmpty(devIds)) {
|
||||
return result;
|
||||
}
|
||||
List<CsEquipmentDeliveryDTO> devList = equipmentFeignClient.queryDeviceById(devIds).getData();
|
||||
//获取敏感用户集合
|
||||
List<String> monitorUsers = poList.stream()
|
||||
.map(CsLinePO::getMonitorUser)
|
||||
List<String> monitorUsers = devList.stream()
|
||||
.map(CsEquipmentDeliveryDTO::getMonitorUser)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
@@ -104,9 +118,9 @@ public class PqSensitiveUserServiceImpl extends ServiceImpl<PqSensitiveUserMappe
|
||||
return result;
|
||||
}
|
||||
//根据敏感用户进行监测点分组
|
||||
Map<String,List<CsLinePO>> map = poList.stream()
|
||||
Map<String,List<CsEquipmentDeliveryDTO>> map = devList.stream()
|
||||
.filter(po -> po.getMonitorUser() != null)
|
||||
.collect(Collectors.groupingBy(CsLinePO::getMonitorUser));
|
||||
.collect(Collectors.groupingBy(CsEquipmentDeliveryDTO::getMonitorUser));
|
||||
//查询敏感用户信息集合
|
||||
LambdaQueryWrapper<PqSensitiveUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(PqSensitiveUser::getId,monitorUsers).orderByAsc(PqSensitiveUser::getSort);
|
||||
@@ -119,8 +133,8 @@ public class PqSensitiveUserServiceImpl extends ServiceImpl<PqSensitiveUserMappe
|
||||
BeanUtil.copyProperties(item,vo);
|
||||
if (map.containsKey(item.getId())) {
|
||||
vo.setIsMonitor("是");
|
||||
List<CsLinePO> list = map.get(item.getId());
|
||||
boolean hasGoverned = list.stream().anyMatch(item2 -> item2.getGovern() == 1);
|
||||
List<CsEquipmentDeliveryDTO> list = map.get(item.getId());
|
||||
boolean hasGoverned = list.stream().anyMatch(item2 -> !Objects.isNull(item2.getGovernMethod()));
|
||||
vo.setIsGovern(hasGoverned ? "是" : "否");
|
||||
} else {
|
||||
vo.setIsMonitor("否");
|
||||
|
||||
@@ -12,7 +12,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.response.HttpResult;
|
||||
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.api.EquipmentFeignClient;
|
||||
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
|
||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||
import com.njcn.csharmonic.mapper.RStatLimitRateDMapper;
|
||||
import com.njcn.csharmonic.pojo.param.MainLineQueryParam;
|
||||
@@ -48,9 +51,11 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
|
||||
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
private final DicDataFeignClient dicDataFeignClient;
|
||||
private final EquipmentFeignClient equipmentFeignClient;
|
||||
private final DecimalFormat df = new DecimalFormat("#0.00");
|
||||
|
||||
private final String GRID_SIDE_DICT_CODE = "Grid_Side";
|
||||
private final CsCommTerminalFeignClient csCommTerminalFeignClient;
|
||||
private final CsCommTerminalFeignClient csCommTerminal;
|
||||
|
||||
@Override
|
||||
public List<RStatLimitRateDPO> monitorIdsGetLimitRateInfo(String date, List<String> monitorIds) {
|
||||
@@ -185,27 +190,22 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
|
||||
}
|
||||
List<MainLineVO> list = new ArrayList<>();
|
||||
MainLineVO mainLineVO;
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminalFeignClient.getLedgerByLineId(keywordsLineIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
for (RStatLimitRateDPO record : records) {
|
||||
String lineId = record.getLineId();
|
||||
CsLinePO linePO = csLineFeignClient.getById(lineId).getData();
|
||||
mainLineVO = new MainLineVO();
|
||||
mainLineVO.setLineId(lineId);
|
||||
if (linePO != null) {
|
||||
mainLineVO.setLineName(linePO.getName());
|
||||
if (ObjectUtil.isNotNull(linePO.getGovern())) {
|
||||
if (linePO.getGovern().equals(0)) {
|
||||
mainLineVO.setGovern("未治理");
|
||||
}
|
||||
if (linePO.getGovern().equals(1)) {
|
||||
mainLineVO.setGovern("已治理");
|
||||
}
|
||||
}
|
||||
mainLineVO.setObjType(linePO.getMonitorObj());
|
||||
if (ObjectUtil.isNotNull(linePO.getMonitorObj())) {
|
||||
DictData dictData = dicDataFeignClient.getDicDataById(linePO.getMonitorObj()).getData();
|
||||
if (dictData != null) {
|
||||
mainLineVO.setObjType(dictData.getName());
|
||||
}
|
||||
mainLineVO.setEngineeringName(devDetailDTOMap.get(lineId).getEngineeringName());
|
||||
mainLineVO.setProjectName(devDetailDTOMap.get(lineId).getProjectName());
|
||||
mainLineVO.setDevName(devDetailDTOMap.get(lineId).getEquipmentName());
|
||||
mainLineVO.setLineName(devDetailDTOMap.get(lineId).getLineName());
|
||||
mainLineVO.setGovern(Objects.isNull(devDetailDTOMap.get(lineId).getGovernType()) ? "未治理" : devDetailDTOMap.get(lineId).getGovernType());
|
||||
mainLineVO.setObjType(devDetailDTOMap.get(lineId).getObjType());
|
||||
if (ObjectUtil.isNotNull(devDetailDTOMap.get(lineId).getObjType())) {
|
||||
DictData dictData = dicDataFeignClient.getDicDataById(devDetailDTOMap.get(lineId).getObjType()).getData();
|
||||
if (dictData != null) {
|
||||
mainLineVO.setObjType(dictData.getName());
|
||||
}
|
||||
}
|
||||
MainLineStatLimitRateDetailsQueryParam detailsQueryParam = new MainLineStatLimitRateDetailsQueryParam();
|
||||
@@ -363,9 +363,16 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
|
||||
if (CollUtil.isEmpty(linePOList)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminal.getLedgerByLineId(keywordsLineIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
|
||||
TotalLimitStatisticsVO statisticsVO;
|
||||
for (CsLinePO linePO : linePOList) {
|
||||
statisticsVO = new TotalLimitStatisticsVO();
|
||||
statisticsVO.setEngineeringName(devDetailDTOMap.get(linePO.getLineId()).getEngineeringName());
|
||||
statisticsVO.setProjectName(devDetailDTOMap.get(linePO.getLineId()).getProjectName());
|
||||
statisticsVO.setDevName(devDetailDTOMap.get(linePO.getLineId()).getEquipmentName() );
|
||||
statisticsVO.setLineId(linePO.getLineId());
|
||||
statisticsVO.setLineName(linePO.getName());
|
||||
List<RStatLimitRateDPO> lineRateList = lineMap.get(linePO.getLineId());
|
||||
@@ -433,8 +440,15 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
|
||||
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatLimitRateDPO::getTime, param.getSearchEndTime())
|
||||
.orderByAsc(RStatLimitRateDPO::getTime)
|
||||
);
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminal.getLedgerByLineId(Collections.singletonList(param.getLineId())).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
|
||||
return list.stream().map(item -> {
|
||||
MainLineStatLimitRateDetailsVO vo = BeanUtil.copyProperties(item, MainLineStatLimitRateDetailsVO.class);
|
||||
vo.setEngineeringName(devDetailDTOMap.get(param.getLineId()).getEngineeringName());
|
||||
vo.setProjectName(devDetailDTOMap.get(param.getLineId()).getProjectName());
|
||||
vo.setDevName(devDetailDTOMap.get(param.getLineId()).getEquipmentName());
|
||||
vo.setLineName(linePO.getName());
|
||||
Integer allTime = item.getAllTime();
|
||||
Integer flickerTime = item.getFlickerAllTime();
|
||||
@@ -549,8 +563,15 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
|
||||
return result;
|
||||
}
|
||||
TotalLimitStatisticsVO statisticsVO;
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminal.getLedgerByLineId(lineIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
|
||||
for (CsLinePO linePO : lineList) {
|
||||
statisticsVO = new TotalLimitStatisticsVO();
|
||||
statisticsVO.setEngineeringName(devDetailDTOMap.get(linePO.getLineId()).getEngineeringName());
|
||||
statisticsVO.setProjectName(devDetailDTOMap.get(linePO.getLineId()).getProjectName());
|
||||
statisticsVO.setDevName(devDetailDTOMap.get(linePO.getLineId()).getEquipmentName());
|
||||
statisticsVO.setLineId(linePO.getLineId());
|
||||
statisticsVO.setLineName(linePO.getName());
|
||||
List<RStatLimitRateDPO> lineRateList = lineMap.get(linePO.getLineId());
|
||||
|
||||
@@ -12,8 +12,10 @@ import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.api.CsOverLimitClient;
|
||||
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
|
||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||
import com.njcn.csharmonic.mapper.RStatLimitRateDetailDMapper;
|
||||
import com.njcn.csharmonic.pojo.param.LimitCalendarQueryParam;
|
||||
@@ -28,8 +30,10 @@ import com.njcn.csharmonic.pojo.vo.LimitTimeProbabilityVO;
|
||||
import com.njcn.csharmonic.service.IRStatLimitRateDetailDService;
|
||||
import com.njcn.device.biz.pojo.po.Overlimit;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.DecimalFormat;
|
||||
@@ -45,7 +49,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
private final CsOverLimitClient overLimitClient;
|
||||
|
||||
private final CsCommTerminalFeignClient csCommTerminal;
|
||||
private final DecimalFormat df = new DecimalFormat("#0.00");
|
||||
|
||||
static Map<String, String> indexMap = new HashMap<>();
|
||||
@@ -109,59 +113,37 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
if (CollUtil.isNotEmpty(detailList)) {
|
||||
List<String> lineIds = detailList.stream().map(RStatLimitRateDetailDPO::getLineId).distinct().collect(Collectors.toList());
|
||||
List<Overlimit> overlimitList = overLimitClient.getOverLimitByLineIds(lineIds).getData();
|
||||
Map<String, Overlimit> overLimitMap = overlimitList.stream().collect(Collectors.toMap(Overlimit::getId, item -> item));
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminal.getLedgerByLineId(lineIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
|
||||
Map<String, Pair<Float, RStatLimitRateDetailDPO>> findResult = findMaxValueHandle(detailList);
|
||||
// 闪变
|
||||
Pair<Float, RStatLimitRateDetailDPO> flickerResult = findResult.get(flicker.getCode());
|
||||
setLimitExtentInfo(flicker, flickerResult);
|
||||
setLimitExtentInfo(flicker, flickerResult, devDetailDTOMap);
|
||||
// 电压偏差
|
||||
Pair<Float, RStatLimitRateDetailDPO> voltageDevResult = findResult.get(voltageDev.getCode());
|
||||
setLimitExtentInfo(voltageDev, voltageDevResult);
|
||||
setLimitExtentInfo(voltageDev, voltageDevResult, devDetailDTOMap);
|
||||
// 谐波电压
|
||||
String uharmKey = findResult.keySet().stream().filter(code -> code.startsWith("uharm")).findFirst().orElse("uharm");
|
||||
Pair<Float, RStatLimitRateDetailDPO> uharmResult = findResult.get(uharmKey);
|
||||
setLimitExtentInfo(uharm, uharmResult);
|
||||
setLimitExtentInfo(uharm, uharmResult, devDetailDTOMap);
|
||||
uharm.setCode(uharmKey);
|
||||
String iharmKey = findResult.keySet().stream().filter(code -> code.startsWith("iharm")).findFirst().orElse("iharm");
|
||||
// 谐波电流
|
||||
Pair<Float, RStatLimitRateDetailDPO> iharmResult = findResult.get(iharmKey);
|
||||
setLimitExtentInfo(iharm, iharmResult);
|
||||
setLimitExtentInfo(iharm, iharmResult, devDetailDTOMap);
|
||||
iharm.setCode(iharmKey);
|
||||
// 电压三相不平衡
|
||||
Pair<Float, RStatLimitRateDetailDPO> ubalanceResult = findResult.get(ubalance.getCode());
|
||||
setLimitExtentInfo(ubalance, ubalanceResult);
|
||||
setLimitExtentInfo(ubalance, ubalanceResult, devDetailDTOMap);
|
||||
|
||||
if (CollUtil.isNotEmpty(overlimitList)) {
|
||||
// 取所有监测点中的最大闪变限值,作为闪变国际限值
|
||||
float flickerMaxOverlimit = (float) overlimitList.stream().mapToDouble(Overlimit::getFlicker).max().orElse(0.0F);
|
||||
float voltageDevMaxOverlimit = (float) overlimitList.stream().mapToDouble(Overlimit::getVoltageDev).max().orElse(0.0F);
|
||||
float ubalanceMaxOverlimit = (float) overlimitList.stream().mapToDouble(Overlimit::getUbalance).max().orElse(0.0F);
|
||||
float iharmMaxOverlimit = 0.0F;
|
||||
float uharmMaxOverlimit = 0.0F;
|
||||
for (Overlimit overlimit : overlimitList) {
|
||||
JSONObject entries = JSONUtil.parseObj(overlimit);
|
||||
for (Map.Entry<String, Object> entry : entries.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (key.startsWith("uharm")) {
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof Number) {
|
||||
uharmMaxOverlimit = Math.max(uharmMaxOverlimit, ((Number) value).floatValue());
|
||||
}
|
||||
} else if (key.startsWith("iharm")) {
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof Number) {
|
||||
iharmMaxOverlimit = Math.max(iharmMaxOverlimit, ((Number) value).floatValue());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
flicker.setInternationalValue(flickerMaxOverlimit);
|
||||
voltageDev.setInternationalValue(voltageDevMaxOverlimit);
|
||||
ubalance.setInternationalValue(ubalanceMaxOverlimit);
|
||||
iharm.setInternationalValue(iharmMaxOverlimit);
|
||||
uharm.setInternationalValue(uharmMaxOverlimit);
|
||||
}
|
||||
setInternationalValue(flicker, flicker.getLineId(), null, overLimitMap, "getFlicker");
|
||||
setInternationalValue(uharm, uharm.getLineId(), uharm.getCode(), overLimitMap, null);
|
||||
setInternationalValue(iharm, iharm.getLineId(), iharm.getCode(), overLimitMap, null);
|
||||
setInternationalValue(voltageDev, voltageDev.getLineId(), null, overLimitMap, "getVoltageDev");
|
||||
setInternationalValue(ubalance, ubalance.getLineId(), null, overLimitMap, "getUbalance");
|
||||
}
|
||||
result.add(flicker);
|
||||
result.add(uharm);
|
||||
@@ -171,6 +153,63 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用属性值设置方法
|
||||
* @param entity 目标实体对象 (如 flicker, uharm)
|
||||
* @param lineId 线路ID (用于从 Map 中获取数据)
|
||||
* @param code 动态属性编码 (可为 null,若为 null 则使用固定 getterName)
|
||||
* @param overLimitMap 数据源 Map
|
||||
* @param fixedGetter 当 code 为 null 时,指定的固定 Getter 方法名 (如 "getFlicker")
|
||||
*/
|
||||
private void setInternationalValue(Object entity, String lineId, String code,
|
||||
Map<String, Overlimit> overLimitMap, String fixedGetter) {
|
||||
if (Objects.isNull(lineId)) {
|
||||
// 通过反射统一处理实体的setter
|
||||
invokeSetter(entity, "setMaxValue", null);
|
||||
invokeSetter(entity, "setInternationalValue", null);
|
||||
return;
|
||||
}
|
||||
|
||||
Object mapValue = overLimitMap.get(lineId);
|
||||
if (mapValue == null) return;
|
||||
|
||||
try {
|
||||
Object result;
|
||||
if (StringUtils.isNotBlank(code)) {
|
||||
// 1. 动态反射模式:根据 code 截取前缀并拼接 Getter
|
||||
String propertyName = StringUtils.substringBefore(code, "Overtime");
|
||||
String methodName = "get" + StringUtils.capitalize(propertyName);
|
||||
Method method = mapValue.getClass().getMethod(methodName);
|
||||
result = method.invoke(mapValue);
|
||||
} else {
|
||||
// 2. 固定 Getter 模式:直接调用传入的固定方法名
|
||||
Method method = mapValue.getClass().getMethod(fixedGetter);
|
||||
result = method.invoke(mapValue);
|
||||
}
|
||||
|
||||
// 将获取到的值设置到实体中
|
||||
invokeSetter(entity, "setInternationalValue", result);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("反射获取或设置属性失败");
|
||||
}
|
||||
}
|
||||
|
||||
private void invokeSetter(Object target, String methodName, Object value) {
|
||||
try {
|
||||
Class<?>[] paramTypes = (value != null) ? new Class[]{value.getClass()} : new Class[0];
|
||||
// 如果 value 是 Float,可能需要匹配 float.class 或包装类,这里简化处理
|
||||
for (Method m : target.getClass().getMethods()) {
|
||||
if (m.getName().equals(methodName) && m.getParameterCount() == 1) {
|
||||
m.invoke(target, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("调用 setter 失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray limitExtentDayData(LimitExtentDayQueryParam param) {
|
||||
List<RStatLimitRateDetailDPO> records = this.page(new Page<>(1, 1),
|
||||
@@ -245,7 +284,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
if (StrUtil.isNotBlank(description) && !items.contains(description)) {
|
||||
items.add(description);
|
||||
}
|
||||
float maxValue = parseMaxValueFromJsonArray(data);
|
||||
float maxValue = parseMaxValueFromJsonArray(data,null,null);
|
||||
if (overlimit != null) {
|
||||
JSONObject overlimitJSON = JSONUtil.parseObj(overlimit);
|
||||
String itemKey = StrUtil.sub(key, 0, key.length() - 8);
|
||||
@@ -531,17 +570,17 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
/**
|
||||
* 设置LimitExtentVO的最大值和相关信息
|
||||
*/
|
||||
private void setLimitExtentInfo(LimitExtentVO limitExtentVO, Pair<Float, RStatLimitRateDetailDPO> result) {
|
||||
private void setLimitExtentInfo(LimitExtentVO limitExtentVO, Pair<Float, RStatLimitRateDetailDPO> result, Map<String, DevDetailDTO> devDetailDTOMap) {
|
||||
float maxValue = result.getKey();
|
||||
limitExtentVO.setMaxValue(maxValue);
|
||||
RStatLimitRateDetailDPO maxDetail = result.getValue();
|
||||
if (maxDetail != null) {
|
||||
limitExtentVO.setTime(maxDetail.getTime());
|
||||
CsLinePO maxLinePO = csLineFeignClient.getById(maxDetail.getLineId()).getData();
|
||||
if (maxLinePO != null) {
|
||||
limitExtentVO.setLineName(maxLinePO.getName());
|
||||
limitExtentVO.setLineId(maxLinePO.getLineId());
|
||||
}
|
||||
limitExtentVO.setEngineeringName(devDetailDTOMap.get(maxDetail.getLineId()).getEngineeringName());
|
||||
limitExtentVO.setProjectName(devDetailDTOMap.get(maxDetail.getLineId()).getProjectName());
|
||||
limitExtentVO.setDevName(devDetailDTOMap.get(maxDetail.getLineId()).getEquipmentName());
|
||||
limitExtentVO.setLineName(devDetailDTOMap.get(maxDetail.getLineId()).getLineName());
|
||||
limitExtentVO.setLineId(devDetailDTOMap.get(maxDetail.getLineId()).getLineId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -589,35 +628,35 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
String freqDevOvertime = po.getFreqDevOvertime();
|
||||
|
||||
if (StrUtil.isNotBlank(flickerOvertime)) {
|
||||
float dayFlickerMaxValue = parseMaxValueFromJsonArray(flickerOvertime);
|
||||
float dayFlickerMaxValue = parseMaxValueFromJsonArray(flickerOvertime,0.0,20.0);
|
||||
if (dayFlickerMaxValue > flickerMaxValue) {
|
||||
flickerMaxValue = dayFlickerMaxValue;
|
||||
flickerMaxDetail = po;
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(voltageDevOvertime)) {
|
||||
float dayVoltageDevMaxValue = parseMaxValueFromJsonArray(voltageDevOvertime);
|
||||
float dayVoltageDevMaxValue = parseMaxValueFromJsonArray(voltageDevOvertime,-20.0,20.0);
|
||||
if (dayVoltageDevMaxValue > voltageDevMaxValue) {
|
||||
voltageDevMaxValue = dayVoltageDevMaxValue;
|
||||
voltageDevMaxDetail = po;
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(ubalanceOvertime)) {
|
||||
float dayUbalanceMaxValue = parseMaxValueFromJsonArray(ubalanceOvertime);
|
||||
float dayUbalanceMaxValue = parseMaxValueFromJsonArray(ubalanceOvertime,0.0,40.0);
|
||||
if (dayUbalanceMaxValue > ubalanceMaxValue) {
|
||||
ubalanceMaxValue = dayUbalanceMaxValue;
|
||||
ubalanceMaxDetail = po;
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(uaberranceOvertime)) {
|
||||
float dayuaberranceMaxValue = parseMaxValueFromJsonArray(uaberranceOvertime);
|
||||
float dayuaberranceMaxValue = parseMaxValueFromJsonArray(uaberranceOvertime,0.0,30.0);
|
||||
if (dayuaberranceMaxValue > uaberranceMaxValue) {
|
||||
uaberranceMaxValue = dayuaberranceMaxValue;
|
||||
uaberranceMaxDetail = po;
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(freqDevOvertime)) {
|
||||
float dayFreqDevMaxValue = parseMaxValueFromJsonArray(freqDevOvertime);
|
||||
float dayFreqDevMaxValue = parseMaxValueFromJsonArray(freqDevOvertime,-7.5,7.5);
|
||||
if (dayFreqDevMaxValue > freqDevMaxValue) {
|
||||
freqDevMaxValue = dayFreqDevMaxValue;
|
||||
freqDevMaxDetail = po;
|
||||
@@ -640,7 +679,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
if (key.startsWith("uharm")) {
|
||||
Object value = entry.getValue();
|
||||
if (ObjectUtil.isNotEmpty(value)) {
|
||||
float timeMaxValue = parseMaxValueFromJsonArray(value);
|
||||
float timeMaxValue = parseMaxValueFromJsonArray(value,0.0,30.0);
|
||||
// 取次数最大的未当天的最大值
|
||||
dayUharmMaxValue = Math.max(dayUharmMaxValue, timeMaxValue);
|
||||
dayUharmMaxKey = key;
|
||||
@@ -649,7 +688,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
if (key.startsWith("iharm")) {
|
||||
Object value = entry.getValue();
|
||||
if (ObjectUtil.isNotEmpty(value)) {
|
||||
float timeMaxValue = parseMaxValueFromJsonArray(value);
|
||||
float timeMaxValue = parseMaxValueFromJsonArray(value,null,null);
|
||||
// 取次数最大的为当天的最大值
|
||||
dayIharmMaxValue = Math.max(dayIharmMaxValue, timeMaxValue);
|
||||
dayIharmMaxKey = key;
|
||||
@@ -687,7 +726,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
* @param value JSON数组字符串
|
||||
* @return 解析出的最大值
|
||||
*/
|
||||
private float parseMaxValueFromJsonArray(Object value) {
|
||||
private float parseMaxValueFromJsonArray(Object value, Double minRange, Double maxRange) {
|
||||
JSONArray overtimeArray = JSONUtil.parseArray(value);
|
||||
float maxValue = 0.0000F;
|
||||
for (Object data : overtimeArray) {
|
||||
@@ -696,11 +735,16 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
|
||||
float currentValue = (float) StrUtil.split(values, StrUtil.COMMA)
|
||||
.stream()
|
||||
.mapToDouble(Float::parseFloat)
|
||||
// 核心修改:在 filter 中判断边界是否为 null
|
||||
.filter(f ->
|
||||
(minRange == null || f >= minRange) &&
|
||||
(maxRange == null || f <= maxRange)
|
||||
)
|
||||
.max()
|
||||
.orElse(0.0000F);
|
||||
|
||||
maxValue = Math.max(maxValue, currentValue);
|
||||
}
|
||||
|
||||
return maxValue;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
|
||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||
import com.njcn.csharmonic.enums.CsEventEnum;
|
||||
import com.njcn.csharmonic.pojo.param.EventStatisticParam;
|
||||
@@ -31,7 +32,6 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.njcn.csharmonic.enums.CsTransientEnum.*;
|
||||
@@ -54,6 +54,7 @@ public class EventOverviewServiceImpl implements EventOverviewService {
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
private final CsCommTerminalFeignClient csCommTerminalFeignClient;
|
||||
private final WlRmpEventDetailMapper wlRmpEventDetailMapper;
|
||||
private final CsCommTerminalFeignClient csCommTerminal;
|
||||
|
||||
@Override
|
||||
public EventStatisticVO netEventEcharts(EventStatisticParam baseParam) {
|
||||
@@ -134,9 +135,15 @@ public class EventOverviewServiceImpl implements EventOverviewService {
|
||||
)
|
||||
));
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminal.getLedgerByLineId(lineIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
|
||||
return csLinePOList.stream()
|
||||
.map(line -> {
|
||||
EventStatisticVO vo = new EventStatisticVO();
|
||||
vo.setEngineeringName(devDetailDTOMap.get(line.getLineId()).getEngineeringName());
|
||||
vo.setProjectName(devDetailDTOMap.get(line.getLineId()).getProjectName());
|
||||
vo.setDevName(devDetailDTOMap.get(line.getLineId()).getEquipmentName());
|
||||
vo.setName(line.getName());
|
||||
vo.setId(line.getLineId());
|
||||
Map<String, Long> lineEvents = eventCountByLineAndTag.getOrDefault(line.getLineId(), Collections.emptyMap());
|
||||
@@ -174,7 +181,8 @@ public class EventOverviewServiceImpl implements EventOverviewService {
|
||||
List<CsLinePO> csLinePOList = csLineFeignClient.queryLineById(monitorIds).getData();
|
||||
Map<String,String> nameMap = csLinePOList.stream().collect(Collectors.toMap(CsLinePO::getLineId, CsLinePO::getName));
|
||||
|
||||
|
||||
List<DevDetailDTO> devDetailDTOList = csCommTerminalFeignClient.getLedgerByLineId(monitorIds).getData();
|
||||
Map<String, DevDetailDTO> devDetailDTOMap = devDetailDTOList.stream().collect(Collectors.toMap(DevDetailDTO::getLineId, item -> item));
|
||||
List<F47Curve> f47CurveList = csEventPOList.stream().map(item->{
|
||||
F47Curve f47Curve = new F47Curve();
|
||||
f47Curve.setEventId(item.getId());
|
||||
@@ -182,6 +190,9 @@ public class EventOverviewServiceImpl implements EventOverviewService {
|
||||
f47Curve.setTag(item.getTag());
|
||||
f47Curve.setPersistTime(BigDecimal.valueOf(item.getPersistTime()).setScale(3, RoundingMode.HALF_UP));
|
||||
f47Curve.setEventValue(BigDecimal.valueOf(item.getAmplitude()));
|
||||
f47Curve.setEngineeringName(devDetailDTOMap.get(item.getLineId()).getEngineeringName());
|
||||
f47Curve.setProjectName(devDetailDTOMap.get(item.getLineId()).getProjectName());
|
||||
f47Curve.setEquipmentName(devDetailDTOMap.get(item.getLineId()).getEquipmentName());
|
||||
f47Curve.setLineName(nameMap.getOrDefault(item.getLineId(),"异常测点"));
|
||||
return f47Curve;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
Reference in New Issue
Block a user