8、16、19国网接口-数据查询、上送接口

This commit is contained in:
2023-12-14 16:24:10 +08:00
parent 5bb7adc5b6
commit c5e31075a5
29 changed files with 1355 additions and 95 deletions

View File

@@ -0,0 +1,60 @@
package com.njcn.harmonic.controller.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
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.common.utils.LogUtil;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.vo.upload.UploadEvaluationDataVo;
import com.njcn.harmonic.service.upload.IEvaluationDataService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 类的介绍:国网指标数据上送
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/7 9:05
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/upload")
@Api(tags = "国网指标数据上送")
@AllArgsConstructor
public class EvaluationDataController extends BaseController {
private final IEvaluationDataService evaluationDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getEvaluationData")
@ApiOperation("查询母线基准水平评估数据")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Page<UploadEvaluationDataVo>> getEvaluationData(@RequestBody UploadParam param) {
String methodDescribe = getMethodDescribe("getEvaluationData");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
Page<UploadEvaluationDataVo> list = evaluationDataService.getEvaluationData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/uploadEvaluationData")
@ApiOperation("国网上送-母线基准水平评估数据")
@ApiImplicitParam(name = "time", value = "时间", required = true)
public HttpResult<String> uploadEvaluationData(@RequestParam("time") String time) {
String methodDescribe = getMethodDescribe("uploadEvaluationData");
LogUtil.njcnDebug(log, "{},时间:{}", methodDescribe, time);
String result = evaluationDataService.uploadEvaluationData(time);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -1,12 +1,15 @@
package com.njcn.harmonic.controller.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
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.common.utils.LogUtil;
import com.njcn.harmonic.service.upload.PointStatisticalDataService;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.vo.upload.UploadPointStatisticalDataVo;
import com.njcn.harmonic.service.upload.IPointStatisticalDataService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -14,10 +17,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* 类的介绍:国网指标数据上送
@@ -34,18 +34,28 @@ import org.springframework.web.bind.annotation.RestController;
@AllArgsConstructor
public class PointStatisticalDataController extends BaseController {
private final PointStatisticalDataService pointStatisticalDataService;
private final IPointStatisticalDataService pointStatisticalDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/statisticalCreate")
@ApiOperation("主配网监测点统计数据(2.4.1.17)")
@PostMapping("/getPointStatisticalData")
@ApiOperation("查询主配网监测点统计数据")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Object> statisticalCreate(@RequestBody Object param) {
String methodDescribe = getMethodDescribe("statisticalCreate");
public HttpResult<Page<UploadPointStatisticalDataVo>> getPointStatisticalData(@RequestBody UploadParam param) {
String methodDescribe = getMethodDescribe("getPointStatisticalData");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
pointStatisticalDataService.getPointStatisticalData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
Page<UploadPointStatisticalDataVo> list = pointStatisticalDataService.getPointStatisticalData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/uploadPointStatisticalData")
@ApiOperation("国网上送-主配网监测点统计数据")
@ApiImplicitParam(name = "time", value = "时间", required = true)
public HttpResult<String> uploadPointStatisticalData(@RequestParam("time") String time) {
String methodDescribe = getMethodDescribe("uploadPointStatisticalData");
LogUtil.njcnDebug(log, "{},时间:{}", methodDescribe, time);
String result = pointStatisticalDataService.uploadPointStatisticalData(time);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -0,0 +1,60 @@
package com.njcn.harmonic.controller.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
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.common.utils.LogUtil;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.vo.upload.UploadSubstationStatisticalDataVo;
import com.njcn.harmonic.service.upload.ISubstationStatisticalDataService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 类的介绍:国网指标数据上送
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/7 9:05
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/upload")
@Api(tags = "国网指标数据上送")
@AllArgsConstructor
public class SubstationStatisticalDataController extends BaseController {
private final ISubstationStatisticalDataService substationStatisticalDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSubstationStatisticalData")
@ApiOperation("查询变电站监测统计数据")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Page<UploadSubstationStatisticalDataVo>> getSubstationStatisticalData(@RequestBody UploadParam param) {
String methodDescribe = getMethodDescribe("getSubstationStatisticalData");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
Page<UploadSubstationStatisticalDataVo> list = substationStatisticalDataService.getSubstationStatisticalData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/uploadSubstationStatisticalData")
@ApiOperation("国网上送-变电站监测统计数据")
@ApiImplicitParam(name = "time", value = "时间", required = true)
public HttpResult<String> uploadSubstationStatisticalData(@RequestParam("time") String time) {
String methodDescribe = getMethodDescribe("uploadSubstationStatisticalData");
LogUtil.njcnDebug(log, "{},时间:{}", methodDescribe, time);
String result = substationStatisticalDataService.uploadSubstationStatisticalData(time);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -0,0 +1,16 @@
package com.njcn.harmonic.mapper.upload;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD;
/**
* <p>
* 电能质量基准水平评估数据-日表 Mapper 接口
* </p>
*
* @author xuyang
* @since 2023-12-12
*/
public interface RUploadEvaluationDataDMapper extends BaseMapper<RUploadEvaluationDataD> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.harmonic.mapper.upload;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadPointStatisticalDataD;
/**
* <p>
* 主配网监测点统计数据-日表 Mapper 接口
* </p>
*
* @author xuyang
* @since 2023-12-07
*/
public interface RUploadPointStatisticalDataDMapper extends BaseMapper<RUploadPointStatisticalDataD> {
}

View File

@@ -0,0 +1,16 @@
package com.njcn.harmonic.mapper.upload;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadSubstationStatisticalDataD;
/**
* <p>
* 主配网变电站监测统计数据-日表 Mapper 接口
* </p>
*
* @author xuyang
* @since 2023-12-08
*/
public interface RUploadSubstationStatisticalDataDMapper extends BaseMapper<RUploadSubstationStatisticalDataD> {
}

View File

@@ -0,0 +1,31 @@
package com.njcn.harmonic.service.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadEvaluationDataVo;
/**
* <p>
* 电能质量基准水平评估数据-日表 服务类
* </p>
*
* @author xuyang
* @since 2023-12-12
*/
public interface IEvaluationDataService extends IService<RUploadEvaluationDataD> {
/**
* 2.4.1.8接收电能质量基准水平评估数据接口
* @param param
*/
Page<UploadEvaluationDataVo> getEvaluationData(UploadParam param);
/**
* 数据上送接口
* @param time
*/
String uploadEvaluationData(String time);
}

View File

@@ -0,0 +1,26 @@
package com.njcn.harmonic.service.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadPointStatisticalDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadPointStatisticalDataVo;
/**
* @author xuyang
*/
public interface IPointStatisticalDataService extends IService<RUploadPointStatisticalDataD> {
/**
* 2.4.1.17接收电能质量主配网监测点统计数据接口
* @param param
*/
Page<UploadPointStatisticalDataVo> getPointStatisticalData(UploadParam param);
/**
* 数据上送接口
* @param time
*/
String uploadPointStatisticalData(String time);
}

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.service.upload;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadSubstationStatisticalDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadSubstationStatisticalDataVo;
/**
* <p>
* 主配网变电站监测统计数据-日表 服务类
* </p>
*
* @author xuyang
* @since 2023-12-08
*/
public interface ISubstationStatisticalDataService extends IService<RUploadSubstationStatisticalDataD> {
/**
* 2.4.1.19接收电能质量变电站监测统计数据接口
* @param param
*/
Page<UploadSubstationStatisticalDataVo> getSubstationStatisticalData(UploadParam param);
/**
* 数据上送接口
* @param time
*/
String uploadSubstationStatisticalData(String time);
}

View File

@@ -1,14 +0,0 @@
package com.njcn.harmonic.service.upload;
/**
* @author xuyang
*/
public interface PointStatisticalDataService {
/**
* 2.4.1.17接收电能质量主配网监测点统计数据接口
* @param param
*/
void getPointStatisticalData(Object param);
}

View File

@@ -1,21 +1,167 @@
package com.njcn.harmonic.service.upload.impl;
import com.njcn.harmonic.service.upload.PointStatisticalDataService;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.harmonic.mapper.upload.RUploadPointStatisticalDataDMapper;
import com.njcn.harmonic.pojo.dto.upload.MonitorStatisticalDTO;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadPointStatisticalDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadPointStatisticalDataVo;
import com.njcn.harmonic.service.upload.IPointStatisticalDataService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.enums.GWSendEnum;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.SendParam;
import com.njcn.web.utils.GwSendUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author xuyang
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class PointStatisticalDataServiceImpl implements PointStatisticalDataService {
public class PointStatisticalDataServiceImpl extends ServiceImpl<RUploadPointStatisticalDataDMapper, RUploadPointStatisticalDataD> implements IPointStatisticalDataService {
private final DeptFeignClient deptFeignClient;
@Override
public void getPointStatisticalData(Object param) {
public Page<UploadPointStatisticalDataVo> getPointStatisticalData(UploadParam param) {
LambdaQueryWrapper<RUploadPointStatisticalDataD> lambdaQueryWrapper = getDeptLevel(param);
//默认按照省名称排序
lambdaQueryWrapper.orderByDesc(RUploadPointStatisticalDataD::getProvinceName);
Page<RUploadPointStatisticalDataD> page = this.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), lambdaQueryWrapper);
List<UploadPointStatisticalDataVo> voList = BeanUtil.copyToList(page.getRecords(), UploadPointStatisticalDataVo.class);
Page<UploadPointStatisticalDataVo> pageVo = new Page<>();
pageVo.setTotal(page.getTotal());
pageVo.setPages(page.getPages());
pageVo.setSize(page.getSize());
pageVo.setRecords(voList);
return pageVo;
}
@Override
public String uploadPointStatisticalData(String time) {
List<RUploadPointStatisticalDataD> list = this.lambdaQuery()
.eq(RUploadPointStatisticalDataD::getStatisticalDate,time)
.eq(RUploadPointStatisticalDataD::getUploadStatus,0).list();
List<MonitorStatisticalDTO> dtoList = BeanUtil.copyToList(list, MonitorStatisticalDTO.class);
//以尺寸100分片
List<List<MonitorStatisticalDTO>> pendingIds = ListUtils.partition(dtoList, 100);
//分片上传
for (int i = 0; i < pendingIds.size(); i++) {
SendParam param = new SendParam();
param.setStats(pendingIds.get(i));
param.setStatisticalDate(time);
//上送数据
Map<String, String> send = GwSendUtil.send(param, GWSendEnum.POINT_STATISTICAL_DATA);
//获取返回结果
List<String> l = pendingIds.get(i).stream().map(MonitorStatisticalDTO::getId).collect(Collectors.toList());
returnInformation(i,l,send);
}
return "上送成功:成功数据" + list.size() + "";
}
/**
* 获取当前单位的层级
*/
public LambdaQueryWrapper<RUploadPointStatisticalDataD> getDeptLevel(UploadParam param) {
Dept dept = deptFeignClient.getDeptByCode(param.getOrgId()).getData();
List<String> list = Arrays.stream(dept.getPids().split(",")).map(String::trim).collect(Collectors.toList());
LambdaQueryWrapper<RUploadPointStatisticalDataD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
switch (list.size()) {
//国、省
case 1:
List<Dept> l1 = deptFeignClient.getDirectSonSelf(dept.getId()).getData();
String orgId = l1.stream().filter(o->!Objects.equals(o.getId(),dept.getId())).findFirst().orElse(null).getCode();
lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getProvinceId,orgId)
.between(RUploadPointStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadPointStatisticalDataD::getUploadStatus,param.getSearchState());
break;
case 2:
lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getProvinceId,param.getOrgId())
.between(RUploadPointStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadPointStatisticalDataD::getUploadStatus,param.getSearchState());
break;
//市
case 3:
lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getCityId, param.getOrgId())
.between(RUploadPointStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadPointStatisticalDataD::getUploadStatus,param.getSearchState());
break;
//县
case 4:
lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getCountyId, param.getOrgId())
.between(RUploadPointStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadPointStatisticalDataD::getUploadStatus,param.getSearchState());
break;
default:
break;
}
return lambdaQueryWrapper;
}
/**
* 国网上送返回信息
*
* @param step 分片上传当前阶段
* @param ids 分片数据
* @param send 上送结果
* @return
*/
private void returnInformation(Integer step, List<String> ids, Map<String, String> send) {
if (send.containsKey("succeed")) {
String succeed = send.get("succeed");
if (succeed.contains("\\\"")) {
succeed = succeed.replace("\\\"", "\"");
}
Map mapData = JSON.parseObject(succeed, Map.class);
String status = mapData.get("status").toString();
if ("000000".equals(status)) {
//修改数据上送状态
updateState(ids);
String result = mapData.get("result").toString();
Map mapCount = JSON.parseObject(result, Map.class);
String count = mapCount.get("count").toString();
} else {
String errors = mapData.get("errors").toString();
int start = step * 100;
int end = (step+1) * 100;
throw new BusinessException("上送"+start+"条至"+end+"条数据,上送失败:" + status + "_" + errors);
}
} else {
throw new BusinessException("当前时间段国网上送请求过多,请稍后再试");
}
}
/**
* 修改上送信息状态
* @param ids id集合
*/
private void updateState(List<String> ids) {
LambdaUpdateWrapper<RUploadPointStatisticalDataD> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.in(RUploadPointStatisticalDataD::getId, ids)
.set(RUploadPointStatisticalDataD::getUploadStatus, 1);
this.update(lambdaUpdateWrapper);
}
}

View File

@@ -0,0 +1,182 @@
package com.njcn.harmonic.service.upload.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.harmonic.mapper.upload.RUploadEvaluationDataDMapper;
import com.njcn.harmonic.pojo.dto.upload.PqEvaluationCreateDTO;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadEvaluationDataVo;
import com.njcn.harmonic.service.upload.IEvaluationDataService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.enums.GWSendEnum;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.SendParam;
import com.njcn.web.utils.GwSendUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <p>
* 电能质量基准水平评估数据-日表 服务实现类
* </p>
*
* @author xuyang
* @since 2023-12-12
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class REvaluationDataServiceImpl extends ServiceImpl<RUploadEvaluationDataDMapper, RUploadEvaluationDataD> implements IEvaluationDataService {
private final DeptFeignClient deptFeignClient;
@Override
public Page<UploadEvaluationDataVo> getEvaluationData(UploadParam param) {
LambdaQueryWrapper<RUploadEvaluationDataD> lambdaQueryWrapper = getDeptLevel(param);
//默认按照省名称排序
lambdaQueryWrapper.orderByDesc(RUploadEvaluationDataD::getProvinceName);
Page<RUploadEvaluationDataD> page = this.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), lambdaQueryWrapper);
List<UploadEvaluationDataVo> voList = BeanUtil.copyToList(page.getRecords(), UploadEvaluationDataVo.class);
Page<UploadEvaluationDataVo> pageVo = new Page<>();
pageVo.setTotal(page.getTotal());
pageVo.setPages(page.getPages());
pageVo.setSize(page.getSize());
pageVo.setRecords(voList);
return pageVo;
}
@Override
public String uploadEvaluationData(String time) {
List<RUploadEvaluationDataD> list = this.lambdaQuery()
.eq(RUploadEvaluationDataD::getStatisticalDate,time)
.eq(RUploadEvaluationDataD::getUploadStatus,0).list();
List<PqEvaluationCreateDTO> dtoList = BeanUtil.copyToList(list, PqEvaluationCreateDTO.class);
//以尺寸100分片
List<List<PqEvaluationCreateDTO>> pendingIds = ListUtils.partition(dtoList, 100);
//分片上传
for (int i = 0; i < pendingIds.size(); i++) {
//处理数据
List<PqEvaluationCreateDTO> l1 = pendingIds.get(i).stream().map(item->{
if (Objects.equals(item.getAvgValue(),3.1415926)){
item.setAvgValue(0d);
}
if (Objects.equals(item.getStandardDeviation(),3.1415926)){
item.setStandardDeviation(0d);
}
return item;
}).collect(Collectors.toList());
//组装数据
SendParam param = new SendParam();
param.setStats(l1);
param.setStatisticalDate(time);
//上送数据
Map<String, String> send = GwSendUtil.send(param, GWSendEnum.EVALUATION_DATA);
//获取返回结果
List<String> l = pendingIds.get(i).stream().map(PqEvaluationCreateDTO::getId).collect(Collectors.toList());
returnInformation(i,l,send);
}
return "上送成功:成功数据" + list.size() + "";
}
/**
* 获取当前单位的层级
*/
public LambdaQueryWrapper<RUploadEvaluationDataD> getDeptLevel(UploadParam param) {
Dept dept = deptFeignClient.getDeptByCode(param.getOrgId()).getData();
List<String> list = Arrays.stream(dept.getPids().split(",")).map(String::trim).collect(Collectors.toList());
LambdaQueryWrapper<RUploadEvaluationDataD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
switch (list.size()) {
//国、省
case 1:
List<Dept> l1 = deptFeignClient.getDirectSonSelf(dept.getId()).getData();
String orgId = l1.stream().filter(o->!Objects.equals(o.getId(),dept.getId())).findFirst().orElse(null).getCode();
lambdaQueryWrapper.eq(RUploadEvaluationDataD::getProvinceId,orgId)
.between(RUploadEvaluationDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadEvaluationDataD::getUploadStatus,param.getSearchState());
break;
case 2:
lambdaQueryWrapper.eq(RUploadEvaluationDataD::getProvinceId,param.getOrgId())
.between(RUploadEvaluationDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadEvaluationDataD::getUploadStatus,param.getSearchState());
break;
//市
case 3:
lambdaQueryWrapper.eq(RUploadEvaluationDataD::getCityId, param.getOrgId())
.between(RUploadEvaluationDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadEvaluationDataD::getUploadStatus,param.getSearchState());
break;
//县
case 4:
lambdaQueryWrapper.eq(RUploadEvaluationDataD::getCountyId, param.getOrgId())
.between(RUploadEvaluationDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadEvaluationDataD::getUploadStatus,param.getSearchState());
break;
default:
break;
}
return lambdaQueryWrapper;
}
/**
* 国网上送返回信息
*
* @param step 分片上传当前阶段
* @param ids 分片数据
* @param send 上送结果
* @return
*/
private void returnInformation(Integer step, List<String> ids, Map<String, String> send) {
if (send.containsKey("succeed")) {
String succeed = send.get("succeed");
if (succeed.contains("\\\"")) {
succeed = succeed.replace("\\\"", "\"");
}
Map mapData = JSON.parseObject(succeed, Map.class);
String status = mapData.get("status").toString();
if ("000000".equals(status)) {
//修改数据上送状态
updateState(ids);
String result = mapData.get("result").toString();
Map mapCount = JSON.parseObject(result, Map.class);
String count = mapCount.get("count").toString();
} else {
String errors = mapData.get("errors").toString();
int start = step * 100;
int end = (step+1) * 100;
throw new BusinessException("上送"+start+"条至"+end+"条数据,上送失败:" + status + "_" + errors);
}
} else {
throw new BusinessException("当前时间段国网上送请求过多,请稍后再试");
}
}
/**
* 修改上送信息状态
* @param ids id集合
*/
private void updateState(List<String> ids) {
LambdaUpdateWrapper<RUploadEvaluationDataD> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.in(RUploadEvaluationDataD::getId, ids)
.set(RUploadEvaluationDataD::getUploadStatus, 1);
this.update(lambdaUpdateWrapper);
}
}

View File

@@ -0,0 +1,171 @@
package com.njcn.harmonic.service.upload.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.harmonic.mapper.upload.RUploadSubstationStatisticalDataDMapper;
import com.njcn.harmonic.pojo.dto.upload.MonitorStatisticalDTO;
import com.njcn.harmonic.pojo.dto.upload.SubstationQualityStatisticsDTO;
import com.njcn.harmonic.pojo.param.UploadParam;
import com.njcn.harmonic.pojo.po.upload.RUploadPointStatisticalDataD;
import com.njcn.harmonic.pojo.po.upload.RUploadSubstationStatisticalDataD;
import com.njcn.harmonic.pojo.vo.upload.UploadPointStatisticalDataVo;
import com.njcn.harmonic.pojo.vo.upload.UploadSubstationStatisticalDataVo;
import com.njcn.harmonic.service.upload.ISubstationStatisticalDataService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.enums.GWSendEnum;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.SendParam;
import com.njcn.web.utils.GwSendUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <p>
* 主配网变电站监测统计数据-日表 服务实现类
* </p>
*
* @author xuyang
* @since 2023-12-08
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class RSubstationStatisticalDataServiceImpl extends ServiceImpl<RUploadSubstationStatisticalDataDMapper, RUploadSubstationStatisticalDataD> implements ISubstationStatisticalDataService {
private final DeptFeignClient deptFeignClient;
@Override
public Page<UploadSubstationStatisticalDataVo> getSubstationStatisticalData(UploadParam param) {
LambdaQueryWrapper<RUploadSubstationStatisticalDataD> lambdaQueryWrapper = getDeptLevel(param);
//默认按照省名称排序
lambdaQueryWrapper.orderByDesc(RUploadSubstationStatisticalDataD::getProvinceName);
Page<RUploadSubstationStatisticalDataD> page = this.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), lambdaQueryWrapper);
List<UploadSubstationStatisticalDataVo> voList = BeanUtil.copyToList(page.getRecords(), UploadSubstationStatisticalDataVo.class);
Page<UploadSubstationStatisticalDataVo> pageVo = new Page<>();
pageVo.setTotal(page.getTotal());
pageVo.setPages(page.getPages());
pageVo.setSize(page.getSize());
pageVo.setRecords(voList);
return pageVo;
}
@Override
public String uploadSubstationStatisticalData(String time) {
List<RUploadSubstationStatisticalDataD> list = this.lambdaQuery()
.eq(RUploadSubstationStatisticalDataD::getStatisticalDate,time)
.eq(RUploadSubstationStatisticalDataD::getUploadStatus,0).list();
List<SubstationQualityStatisticsDTO> dtoList = BeanUtil.copyToList(list, SubstationQualityStatisticsDTO.class);
//以尺寸100分片
List<List<SubstationQualityStatisticsDTO>> pendingIds = ListUtils.partition(dtoList, 100);
//分片上传
for (int i = 0; i < pendingIds.size(); i++) {
SendParam param = new SendParam();
param.setStats(pendingIds.get(i));
param.setStatisticalDate(time);
//上送数据
Map<String, String> send = GwSendUtil.send(param, GWSendEnum.SUBSTATION_STATISTICAL_DATA);
//获取返回结果
List<String> l = pendingIds.get(i).stream().map(SubstationQualityStatisticsDTO::getId).collect(Collectors.toList());
returnInformation(i,l,send);
}
return "上送成功:成功数据" + list.size() + "";
}
/**
* 获取当前单位的层级
*/
public LambdaQueryWrapper<RUploadSubstationStatisticalDataD> getDeptLevel(UploadParam param) {
Dept dept = deptFeignClient.getDeptByCode(param.getOrgId()).getData();
List<String> list = Arrays.stream(dept.getPids().split(",")).map(String::trim).collect(Collectors.toList());
LambdaQueryWrapper<RUploadSubstationStatisticalDataD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
switch (list.size()) {
//国、省
case 1:
List<Dept> l1 = deptFeignClient.getDirectSonSelf(dept.getId()).getData();
String orgId = l1.stream().filter(o->!Objects.equals(o.getId(),dept.getId())).findFirst().orElse(null).getCode();
lambdaQueryWrapper.eq(RUploadSubstationStatisticalDataD::getProvinceId,orgId)
.between(RUploadSubstationStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadSubstationStatisticalDataD::getUploadStatus,param.getSearchState());
break;
case 2:
lambdaQueryWrapper.eq(RUploadSubstationStatisticalDataD::getProvinceId,param.getOrgId())
.between(RUploadSubstationStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadSubstationStatisticalDataD::getUploadStatus,param.getSearchState());
break;
//市
case 3:
lambdaQueryWrapper.eq(RUploadSubstationStatisticalDataD::getCityId, param.getOrgId())
.between(RUploadSubstationStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadSubstationStatisticalDataD::getUploadStatus,param.getSearchState());
break;
//县
case 4:
lambdaQueryWrapper.eq(RUploadSubstationStatisticalDataD::getCountyId, param.getOrgId())
.between(RUploadSubstationStatisticalDataD::getStatisticalDate,param.getSearchBeginTime(),param.getSearchEndTime())
.eq(!Objects.isNull(param.getSearchState()),RUploadSubstationStatisticalDataD::getUploadStatus,param.getSearchState());
break;
default:
break;
}
return lambdaQueryWrapper;
}
/**
* 国网上送返回信息
*
* @param step 分片上传当前阶段
* @param ids 分片数据
* @param send 上送结果
* @return
*/
private void returnInformation(Integer step, List<String> ids, Map<String, String> send) {
if (send.containsKey("succeed")) {
String succeed = send.get("succeed");
if (succeed.contains("\\\"")) {
succeed = succeed.replace("\\\"", "\"");
}
Map mapData = JSON.parseObject(succeed, Map.class);
String status = mapData.get("status").toString();
if ("000000".equals(status)) {
//修改数据上送状态
updateState(ids);
String result = mapData.get("result").toString();
Map mapCount = JSON.parseObject(result, Map.class);
String count = mapCount.get("count").toString();
} else {
String errors = mapData.get("errors").toString();
int start = step * 100;
int end = (step+1) * 100;
throw new BusinessException("上送"+start+"条至"+end+"条数据,上送失败:" + status + "_" + errors);
}
} else {
throw new BusinessException("当前时间段国网上送请求过多,请稍后再试");
}
}
/**
* 修改上送信息状态
* @param ids id集合
*/
private void updateState(List<String> ids) {
LambdaUpdateWrapper<RUploadSubstationStatisticalDataD> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.in(RUploadSubstationStatisticalDataD::getId, ids)
.set(RUploadSubstationStatisticalDataD::getUploadStatus, 1);
this.update(lambdaUpdateWrapper);
}
}