预处理模块:工单问题生成,主网有效监测时长计算,

过程监督模块:工单模块功能,其他模块的审核
This commit is contained in:
huangzj
2023-02-27 11:24:58 +08:00
parent 5915ed87ac
commit 338b659d94
58 changed files with 2932 additions and 57 deletions

View File

@@ -25,5 +25,7 @@ public interface ServerInfo {
String QUALITY = "quality-boot";
String HARMONIC_PREPARE = "harmonic-prepare";
String EVENT_PREPARE = "event-prepare";
String PROCESS = "process-boot";
}

View File

@@ -0,0 +1,28 @@
package com.njcn.device.pms.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.fallback.PmsPowerDistributionareaClientFallbackFactory;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @author clam
* @date 2022/10/18
*/
@FeignClient(
value = ServerInfo.DEVICE,
path = "/pms/powerDistributionarea",
contextId = "pms/powerDistributionarea",
fallbackFactory = PmsPowerDistributionareaClientFallbackFactory.class)
public interface PmsPowerDistributionareaClient {
@PostMapping("getPowerDistributionList")
HttpResult<List<PowerDistributionarea>> getPowerDistributionList(@RequestBody PowerDistributionareaParam powerDistributionareaParam);
}

View File

@@ -0,0 +1,43 @@
package com.njcn.device.pms.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.PmsPowerDistributionareaClient;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.utils.PmsDeviceEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author clam
* @date 2022/10/18
*/
@Slf4j
@Component
public class PmsPowerDistributionareaClientFallbackFactory implements FallbackFactory<PmsPowerDistributionareaClient> {
@Override
public PmsPowerDistributionareaClient create(Throwable throwable) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (throwable.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) throwable.getCause();
exceptionEnum = PmsDeviceEnumUtil.getExceptionEnum(businessException.getResult());
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new PmsPowerDistributionareaClient()
{
@Override
public HttpResult<List<PowerDistributionarea>> getPowerDistributionList(PowerDistributionareaParam powerDistributionareaParam) {
log.error("{}异常,降级处理,异常为:{}", "获取配网所有台区", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -2,8 +2,6 @@ package com.njcn.device.pms.service.majornetwork;
import com.njcn.event.pojo.po.EventDetail;
import java.util.List;
/**
* @author qijian
* @version 1.0.0

View File

@@ -52,9 +52,9 @@ public class RStatDevSignalDServiceImpl extends ServiceImpl<RStatDevSignalDMappe
}
//获取所有子部门信息
// List<DeptDTO> deptDTOList = deptFeignClient.getDeptDescendantIndexes(id, WebUtil.filterDeptType()).getData();
/*获取下一级子部门信息*/
List<DeptDTO> deptDTOList = deptFeignClient.getDepSonDetailByDeptId (id).getData ( );
List<DeptDTO> deptDTOList = deptFeignClient.getDeptDescendantIndexes(id, WebUtil.filterDeptType()).getData();
// /*获取下一级子部门信息*/
// List<DeptDTO> deptDTOList = deptFeignClient.getDepSonDetailByDeptId (id).getData ( );
if (CollUtil.isEmpty(deptDTOList)) {
throw new BusinessException(CommonResponseEnum.NO_DATA, "部门不存在");
}

View File

@@ -3,6 +3,7 @@ package com.njcn.harmonic.utils;
import cn.hutool.core.util.StrUtil;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.EnumUtils;
import com.njcn.harmonic.enums.HarmonicResponseEnum;
@@ -32,7 +33,14 @@ public class HarmonicEnumUtil {
throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR);
}
}
public static Enum<?> getExceptionEnum(HttpResult<Object> result){
//如果返回错误,且为内部错误,则直接抛出异常
CommonResponseEnum commonResponseEnum = EnumUtils.getCommonResponseEnumByCode(result.getCode());
if (commonResponseEnum == CommonResponseEnum.DEVICE_RESPONSE_ENUM) {
return getHarmonicEnumResponseEnumByMessage(result.getMessage());
}
return commonResponseEnum;
}
}

View File

@@ -35,6 +35,12 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>process-api</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-influxDB</artifactId>

View File

@@ -58,7 +58,6 @@ public class AreaCountController extends BaseController {
Boolean result = true;
List<String> orgIdList = new ArrayList<> ();
if(CollectionUtils.isEmpty (primaryGridParam.getOrgIdList ())){
/*todo 不知道是否需要补招*/
List<PvTerminalTreeVO> dept = deptFeignClient.allDeptList().getData();
orgIdList = dept.stream ( ).map (PvTerminalTreeVO::getId).collect (Collectors.toList ( ));
}else{

View File

@@ -0,0 +1,75 @@
package com.njcn.prepare.harmonic.controller.area;
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.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.mysql.area.EffectiveMinuteCountService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.vo.PvTerminalTreeVO;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
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 java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 14:18【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "主网有效监测时长)")
@RestController
@RequestMapping("EffectiveCount")
@RequiredArgsConstructor
public class EffectiveMinuteCountController extends BaseController {
private final
DeptFeignClient deptFeignClient;
private final
EffectiveMinuteCountService effectiveMinuteCount;
@ApiOperation("主网有效监测时长")
@ApiImplicitParam(value = "primaryGridParam",name = "primaryGridParam",required = true)
@PostMapping("effectiveMinuteCount")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> effectiveMinuteCount(@RequestBody PrimaryGridParam primaryGridParam ){
log.info(LocalDateTime.now()+"effectiveMinuteCount开始执行");
String methodDescribe = getMethodDescribe("effectiveMinuteCount");
Boolean result = true;
List<String> orgIdList = new ArrayList<> ();
if(CollectionUtils.isEmpty (primaryGridParam.getOrgIdList ())){
List<PvTerminalTreeVO> dept = deptFeignClient.allDeptList().getData();
orgIdList = dept.stream ( ).map (PvTerminalTreeVO::getId).collect (Collectors.toList ( ));
}else{
orgIdList = primaryGridParam.getOrgIdList ();
}
primaryGridParam.setOrgIdList (orgIdList);
effectiveMinuteCount.effectiveMinuteCount (primaryGridParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
}

View File

@@ -0,0 +1,79 @@
package com.njcn.prepare.harmonic.controller.area;
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.device.pms.api.PmsPowerDistributionareaClient;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.influxdb.RStatWorkOrderCreateService;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
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 java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/9 9:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "工单生成批处理逻辑")
@RestController
@RequestMapping("RStatWorkOrderCreate")
@RequiredArgsConstructor
public class RStatWorkOrderCreateController extends BaseController {
private final PmsPowerDistributionareaClient pmsPowerDistributionareaClient;
private final RStatWorkOrderCreateService rStatWorkOrderCreateService;
private final DeptFeignClient deptFeignClient;
private final RedisUtil redisUtil;
@ApiOperation("工单生成批处理逻辑(台区测点)")
@ApiImplicitParam(value = "lineParam",name = "lineParam",required = true)
@PostMapping("workOrderCreate")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> workOrderCreate(@RequestBody LineParam lineParam ){
log.info(LocalDateTime.now()+"workOrderCreate开始执行");
String methodDescribe = getMethodDescribe("workOrderCreate");
Boolean result = true;
List<String> lineIds= new ArrayList<> ();
if(CollectionUtils.isEmpty (lineParam.getLineIds ())){
PowerDistributionareaParam powerDistributionareaParam = new PowerDistributionareaParam();
List<PowerDistributionarea> data = pmsPowerDistributionareaClient.getPowerDistributionList (powerDistributionareaParam).getData ( );
lineIds = data.stream ().map (PowerDistributionarea::getId).collect(Collectors.toList());
}else{
lineIds = lineParam.getLineIds ( );
}
lineParam.setLineIds (lineIds);
rStatWorkOrderCreateService.workOrderCreate(lineParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
}

View File

@@ -2,11 +2,14 @@ package com.njcn.prepare.harmonic.mapper.oracle;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
@@ -21,4 +24,6 @@ public interface DataVOraclePOMapper extends BaseMapper<DataVOraclePO> {
DataVOracleVO getFiveItemsForDataException(@Param("lineId") Integer lineId, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);
DataVOracleVO getFiveCountForDataIntegrityRate(@Param("lineId") Integer lineId, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);
List<DataVFiveItemDTO> getFiveItems(@Param("lineId") Integer lineId, @Param("date") String date);
}

View File

@@ -63,4 +63,33 @@
GROUP BY
LINEID
</select>
<select id="getFiveItems" resultType="com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO">
select a.lineid,a.timeid,a.rmsMax,a.rmsMin,a.vThdMax,a.vThdMin,
b.freqMax,b.freqMin,b.rmsLvrMax,b.rmsLvrMin,b.vUnbalanceMax,b.vUnbalanceMin from
(SELECT lineid,
timeid,
Max(RMS_MAX) AS rmsMax,
Min(RMS_MIN) AS rmsMin,
Max(V_THD_MAX) AS vThdMax,
Min(V_THD_MIN) AS vThdMin
FROM DATA_V
WHERE lineid = #{lineId}
and TO_CHAR(TIMEID, 'yyyy-mm-dd') = #{date}
AND PHASIC_TYPE IN ('A', 'B', 'C')
group by lineid, TIMEID) a left join
(SELECT lineid,
timeid,
Max(FREQ_MAX) AS freqMax,
Min(FREQ_MIN) AS freqMin,
GREATEST(MaX(RMSAB_MAX), MaX(RMSBC_MAX), MAX(RMSCA_MAX)) AS rmsLvrMax,
least(MIN(RMSAB_MIN), MIN(RMSBC_MIN), MIN(RMSCA_MIN)) AS rmsLvrMin,
Max(V_UNBALANCE_MAX) AS vUnbalanceMax,
Min(V_UNBALANCE_MIN) AS vUnbalanceMin
FROM DATA_V
WHERE lineid = #{lineId}
and TO_CHAR(TIMEID, 'yyyy-mm-dd') = #{date}
AND PHASIC_TYPE = 'T'
group by lineid, TIMEID) b
on a.LINEID = b.LINEID and a.timeid =b.timeid
</select>
</mapper>

View File

@@ -0,0 +1,35 @@
package com.njcn.prepare.harmonic.service.influxdb;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 10:31【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface DataVInfluxdbService
{
/**
* @Description: 1.1.1.2.1. 主网单位在线监测点数日统计 :data_v表中查询phasic_type = A当天RMS数据数量数量大于1则该监测点为在线监测点
* @Param:
* @return:
* @Author: clam
* @Date: 2023/2/23
*/
Integer queryTransitMeasurementPoints(List<String> lineIds, String date, String type);
/**
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
List<DataVFiveItemDTO> getFiveItems(String lineId, String date, Integer statisticalInterval);
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.service.influxdb;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/10 15:42【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatWorkOrderCreateService {
void workOrderCreate(LineParam lineParam);
}

View File

@@ -0,0 +1,108 @@
package com.njcn.prepare.harmonic.service.influxdb.impl;
import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Objects;
import com.njcn.device.pq.pojo.po.DataV;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 10:32【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DataVInfluxdbServiceImpl implements DataVInfluxdbService {
private final InfluxDbUtils influxDbUtils;
/**
* @param lineIds
* @param date
* @param type
* @Description: 1.1.1.2.1. 主网单位在线监测点数日统计 :data_v表中查询phasic_type = A当天RMS数据数量数量大于1则该监测点为在线监测点
* @Param:
* @return:
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public Integer queryTransitMeasurementPoints(List<String> lineIds, String date, String type) {
String startTime = date+" "+"00:00:00";
String endTime = date+" "+"23:59:59";
Integer i =0;
for (String temp:lineIds){
String Sql = "SELECT count(rms) FROM \"data_v\" where line_id='"+temp+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='A' and rms>1 "+ InfluxDBPublicParam.TIME_ZONE;
QueryResult sqlResult4 = influxDbUtils.query(Sql);
List<QueryResult.Series> series = sqlResult4.getResults().get(0).getSeries();
Double tem =0.0;
if(CollUtil.isNotEmpty(series)){
tem =(Double)series.get(0).getValues().get(0).get(1);
}
if(tem>0){
i++;
}
}
return i;
}
/**
* @param lineId
* @param date
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public List<DataVFiveItemDTO> getFiveItems(String lineId, String date, Integer statisticalInterval) {
/*按时间分组每组16条*/
/*freq,v_thd,v_unbalance 取T项数据*/
String startTime = date+" "+"00:00:00";
String endTime = date+" "+"23:59:59";
String Sql = "SELECT time, MAX(freq) as freq_max,MIN(freq) as freq_min,MAX(v_thd) as v_thd_max,MIN(v_thd) as v_thd_min,MAX(v_unbalance) as v_unbalance_max,MIN(v_unbalance) as v_unbalance_min from data_v where line_id='"+lineId+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='T' group by time("+statisticalInterval+"m ) fill(none) "+InfluxDBPublicParam.TIME_ZONE;
QueryResult query = influxDbUtils.query(Sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
List<DataV> dataVS = resultMapper.toPOJO(query, DataV.class);
/*rms,rms_lvr 取ABC项数据任意一个数据*/
String Sql2 = "SELECT time, MAX(rms) as rms_max,MIN(rms) as rms_min,MAX(rms_lvr) as rms_lvr_max,MIN(rms_lvr) as rms_lvr_min from data_v where line_id='"+lineId+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='A' group by time("+statisticalInterval+"m ) fill(none) "+InfluxDBPublicParam.TIME_ZONE;
QueryResult query2 = influxDbUtils.query(Sql2);
InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper();
List<DataV> dataVS2 = resultMapper2.toPOJO(query2, DataV.class);
List<DataVFiveItemDTO> collect = dataVS.stream ( ).map (temp -> {
DataVFiveItemDTO dataVFiveItemDTO = new DataVFiveItemDTO ( );
BeanUtils.copyProperties (temp, dataVFiveItemDTO);
DataV dataV = dataVS2.stream ( ).filter (temp2 -> Objects.equal (temp.getTime ( ), temp2.getTime ( ))).
collect (Collectors.toList ( )).get (0);
dataVFiveItemDTO.setRmsMax (dataV.getRmsMAX ());
dataVFiveItemDTO.setRmsMin (dataV.getRmsMIN ( ));
dataVFiveItemDTO.setRmsLvrMax (dataV.getRmsLvrMAX ());
dataVFiveItemDTO.setRmsLvrMin (dataV.getRmsLvrMIN ());
return dataVFiveItemDTO;
}).collect (Collectors.toList ( ));
return collect;
}
}

View File

@@ -0,0 +1,265 @@
package com.njcn.prepare.harmonic.service.influxdb.impl;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pq.pojo.po.Overlimit;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.prepare.harmonic.pojo.influxdb.po.DataIPO;
import com.njcn.prepare.harmonic.pojo.influxdb.po.DataVPO;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.influxdb.RStatWorkOrderCreateService;
import com.njcn.process.api.RStatWorkOrderFeignClient;
import com.njcn.system.enums.DicDataEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/10 15:43【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class RStatWorkOrderCreateServiceImpl implements RStatWorkOrderCreateService {
private final InfluxDbUtils influxDbUtils;
private final MonitorClient monitorClient;
private final RStatWorkOrderFeignClient rStatWorkOrderFeignClient;
@Override
public void workOrderCreate(LineParam lineParam) {
List<String> lineIds = lineParam.getLineIds ( );
List<OverLimitFlagDTO> overLimitFlagDTOList = new ArrayList();
String startTime = lineParam.getDataDate ()+" "+"00:00:00";
String endTime = lineParam.getDataDate ()+" "+"23:59:59";
lineIds.stream ().forEach (lineId->{
Overlimit overlimit = monitorClient.getOverLimitData(lineId).getData ();
List<DataVPO> dataV = getDataV(lineId,startTime,endTime);
List<OverLimitFlagDTO> checkResultV = checkOverLimitV(dataV,overlimit);
/*Datav3分钟一条数据连续4个小时越限说明OverLimitFlagDTO.overLimtFlag要连续80个是1才生成工单*/
List<OverLimitFlagDTO> workOrderV = checkOverLimitFlag (checkResultV);
for (OverLimitFlagDTO overLimitFlagDTO : workOrderV) {
OverLimitFlagDTO result = new OverLimitFlagDTO ();
BeanUtils.copyProperties (overLimitFlagDTO, result);
result.setLineId (lineId);
result.setOverLimtType (DicDataEnum.VOLTAGE_LIMIT.getCode ());
overLimitFlagDTOList.add (result);
}
List<DataIPO> dataI = getDataI(lineId,startTime,endTime);
List<OverLimitFlagDTO> checkResultI = checkOverLimitI(dataI,overlimit);
List<OverLimitFlagDTO> workOrderI= checkOverLimitFlag (checkResultI);
for (OverLimitFlagDTO overLimitFlagDTO : workOrderI) {
OverLimitFlagDTO result = new OverLimitFlagDTO ();
BeanUtils.copyProperties (overLimitFlagDTO, result);
result.setLineId (lineId);
result.setOverLimtType (DicDataEnum.CURRENT_LIMIT.getCode ());
overLimitFlagDTOList.add (result);
}
});
rStatWorkOrderFeignClient.createProblem (overLimitFlagDTOList);
}
/**
* @Description: 对比监测一天的电流是否越限越限返回1未越限返回0
* @Param: [dataI, overlimit]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO>
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitI(List<DataIPO> dataI, Overlimit overlimit) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
dataI.stream ().forEach (datai ->{
Integer temp = 0;
for(int i=2 ;i<26;i++){
String vi = getFieldValueByFieldName("v"+i,datai);
String overLimiti= getFieldValueByFieldName("uharm"+i,overlimit);
if(Double.valueOf (vi)>Double.valueOf (overLimiti)){
temp = 1;
break;
}
}
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setOverLimtFlag (temp);
overLimitFlagDTO.setStartTime (LocalDateTime.ofInstant(datai.getTime (), ZoneId.systemDefault()));
result.add (overLimitFlagDTO);
});
return result;
}
/** Datav3分钟一条数据,每天480条数据连续4个小时越限说明OverLimitFlagDTO.overLimtFlag要连续80个是1才生成工单
* @Description: checkOverLimitFlag
* @Param: [checkResult]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO>
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitFlag(List<OverLimitFlagDTO> checkResult) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
int temp = checkResult.size ()-40;
for (int i=0;i<temp;i++){
List<OverLimitFlagDTO> collect = checkResult.stream ( ).skip (i).limit (80).collect (Collectors.toList ( ));
int sum = collect.stream ( ).mapToInt (OverLimitFlagDTO::getOverLimtFlag).sum ( );
if(sum==80){
/*sum==80连续4个小时越限生成工单统计越限时间*/
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setStartTime (checkResult.get (i).getStartTime ());
Integer temp2 =i+80;
while(checkResult.get (temp2).getOverLimtFlag ()==1){
temp2++ ;
if(temp2==checkResult.size ()-1){
break;
}
}
overLimitFlagDTO.setEndTime (checkResult.get (temp2-1).getStartTime ());
i=temp2;
result.add (overLimitFlagDTO);
}
}
return result;
}
/**
* @Description: 对比监测一天的电压是否越限越限返回1未越限返回0
* @Param: [dataV, overlimit]
* @return: java.lang.String[]
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitV(List<DataVPO> dataV, Overlimit overlimit) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
dataV.stream ().forEach (datav ->{
Integer temp = 0;
for(int i=1 ;i<26;i++){
if(i==1){
if(datav.getVThd ()>overlimit.getUaberrance ()){
temp = 1;
break;
}
}else {
String vi = getFieldValueByFieldName("v"+i,datav);
String overLimiti= getFieldValueByFieldName("uharm"+i,overlimit);
if(Double.valueOf (vi)>Double.valueOf (overLimiti)){
temp = 1;
break;
}
}
}
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setOverLimtFlag (temp);
overLimitFlagDTO.setStartTime (LocalDateTime.ofInstant(datav.getTime (), ZoneId.systemDefault()));
result.add (overLimitFlagDTO);
});
return result;
}
/**
* 功能描述:获取dataVCP95值数据
* @author xy
* @param lineIndex 监测点集ID
* @param startTime 起始时间
* @param endTime 结束时间
* @date 2022/5/10 14:56
* @return List<DataV>
*/
public List<DataVPO> getDataV(String lineIndex, String startTime, String endTime){
List<DataVPO> result = new ArrayList<> ();
//CP95值
StringBuilder stringBuilder7 = new StringBuilder();
StringBuilder stringBuilder8 = new StringBuilder();
stringBuilder7.append("MAX(v_thd) AS v_thd,");
for (int i = 2; i <=25 ; i++) {
if (i==25){
stringBuilder7.append("MAX(v_").append(i).append(") AS v_").append(i);
} else {
stringBuilder7.append("MAX(v_").append(i).append(") AS v_").append(i).append(",");
}
}
stringBuilder8.append ("line_id='").append (lineIndex).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by time(3m) fill(0)").append(InfluxDBPublicParam.TIME_ZONE);
String sql4 = "select "+stringBuilder7+" from "+ InfluxDBPublicParam.DATA_V+" where "+stringBuilder8;
QueryResult sqlResult4 = influxDbUtils.query(sql4);
InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper();
List<DataVPO> list4 = resultMapper4.toPOJO(sqlResult4, DataVPO.class);
list4.forEach(item->{
item.setValueType("CP95");
});
result.addAll(list4);
return result;
}
/**
* 功能描述:获取dataI CP95数据
* @author xy
* @param lineIndex 监测点ID
* @param startTime 起始时间
* @param endTime 结束时间
* @date 2022/5/10 14:56
* @return List<DataIPO>
*/
public List<DataIPO> getDataI(String lineIndex, String startTime, String endTime){
List<DataIPO> result = new ArrayList<>();
//CP95值
StringBuilder stringBuilder7 = new StringBuilder();
StringBuilder stringBuilder8 = new StringBuilder();
for (int i = 2; i <=25 ; i++) {
if (i==25){
stringBuilder7.append("MAX(i_").append(i).append(") AS i_").append(i);
} else {
stringBuilder7.append("MAX(i_").append(i).append(") AS i_").append(i).append(",");
}
}
stringBuilder8.append ("line_id='").append (lineIndex).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by time(3m) fill(0)").append(InfluxDBPublicParam.TIME_ZONE);
String sql4 = "select "+stringBuilder7+" from "+ InfluxDBPublicParam.DATA_I+" where "+stringBuilder8;
QueryResult sqlResult4 = influxDbUtils.query(sql4);
InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper();
List<DataIPO> list4 = resultMapper4.toPOJO(sqlResult4, DataIPO.class);
list4.forEach(item->{
item.setValueType("CP95");
});
result.addAll(list4);
return result;
}
/**
* 根据属性名获取属性值
*
* @param fieldName
* @param object
* @return
*/
private String getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限保证对private的属性的访问
field.setAccessible(true);
return field.get(object)+"";
} catch (Exception e) {
return null;
}
}
}

View File

@@ -0,0 +1,327 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.pq.constant.Param;
import com.njcn.device.pq.pojo.po.PmsAbnormalRules;
import com.njcn.harmonic.pojo.po.PmsMonitorPO;
import com.njcn.harmonic.pojo.po.RMpIntegrityDPO;
import com.njcn.harmonic.pojo.po.RStatAbnormalDPO;
import com.njcn.prepare.harmonic.constant.AlgorithmParam;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatAbnormalDPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsAbnormalRulesMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.PqLinedetailPO;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import com.njcn.prepare.harmonic.service.mysql.area.EffectiveMinuteCountService;
import com.njcn.prepare.harmonic.service.mysql.area.PmsMonitorPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RMpIntegrityDPOService;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
import com.njcn.prepare.harmonic.service.oracle.PqLinedetailPOService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 16:04【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class EffectiveMinuteCountServiceImpl implements EffectiveMinuteCountService {
private final
PmsMonitorPOService pmsMonitorPOService;
private final
RStatAbnormalDPOMapper rStatAbnormalDPOMapper;
private final
PmsAbnormalRulesMapper pmsAbnormalRulesMapper;
private final
PqLinedetailPOService pqLinedetailPOService;
private final
DataVOraclePOService dataVOraclePOService;
private final
RMpIntegrityDPOService rMpIntegrityDPOService;
private final
DicDataFeignClient dicDataFeignClient;
private final
DataVInfluxdbService dataVInfluxdbService;
/**
* @param primaryGridParam
* @Description: 主网有效监测时长计算
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
@Override
@Async("asyncExecutor")
public void effectiveMinuteCount(PrimaryGridParam primaryGridParam) {
if (Objects.equals (primaryGridParam.getDataSource ( ), AlgorithmParam.ORACLE_DATA)) {
this.hanlderOracleData (primaryGridParam);
} else if (Objects.equals (primaryGridParam.getDataSource ( ), AlgorithmParam.INFLUX_DATA)) {
this.hanlderInfludxbData (primaryGridParam);
}
}
private void hanlderInfludxbData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
switch (type) {
// case 1:
// this.hanlderInfludxdbYear (primaryGridParam);
// break;
// case 2:
// this.hanlderInfludxdbQtr (primaryGridParam);
// break;
// case 3:
// this.hanlderInfludxdbMonth (primaryGridParam);
// break;
case 5:
this.hanlderInfludxdbDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderInfludxdbDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<RMpIntegrityDPO> rMpIntegrityDPOS = new ArrayList<> ( );
//1、取出规则
List<PmsAbnormalRules> pmsAbnormalRules = pmsAbnormalRulesMapper.selectList (null);
//2、取出电压字典
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeName (DicDataTypeEnum.DEV_VOLTAGE.getName ( )).getData ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse (dataDate);
orgIdList.forEach (orgid -> {
/*主网在运监测点*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
if (CollectionUtil.isEmpty (mysqlIndexList)) {
return;
}
/*过滤掉异常监测点*/
QueryWrapper<RStatAbnormalDPO> rStatAbnormalDPOLambdaQueryWrapper = new QueryWrapper ( );
rStatAbnormalDPOLambdaQueryWrapper.select ("measurementPointId").
in ("measurement_point_id", mysqlIndexList).
eq ("value_alarm", 1).
eq ("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
List<RStatAbnormalDPO> rStatAbnormalDPOS = rStatAbnormalDPOMapper.selectList (rStatAbnormalDPOLambdaQueryWrapper);
List<String> collect = rStatAbnormalDPOS.stream ( ).map (RStatAbnormalDPO::getMeasurementPointId).collect (Collectors.toList ( ));
List<PmsMonitorPO> collect1 = pmsMonitorPOS.stream ( ).filter (temp -> collect.contains (temp.getId ( ))).collect (Collectors.toList ( ));
// /*测试造的数据*/
// List<PmsMonitorPO> collect1 = new ArrayList<> ();
// PmsMonitorPO pmsMonitorPO = new PmsMonitorPO();
// pmsMonitorPO.setVoltageLevel ("e3da890104e3c4ae1f005021411a1fd7");
// pmsMonitorPO.setStatisticalInterval (3);
// pmsMonitorPO.setId ("8696be1d170e05b7d848accc059f4558");
// collect1.add (pmsMonitorPO);
collect1.forEach (temp -> {
Double voltage = getVoltage (temp.getVoltageLevel ( ), dictDataList);
/*2.查询DataV
measurement_point_id 监测点编号
data_date 时间
phasic_type = A 相别
value_type = AVG 数据类型
*/
/*统计间隔*/
Integer statisticalInterval = temp.getStatisticalInterval ( );
/*获取监测点当天的所有数据*/
List<DataVFiveItemDTO> fiveItems = dataVInfluxdbService.getFiveItems (temp.getId (), dataDate,statisticalInterval);
/*过滤出有效接入分钟数量*/
Integer count = calculateEffectiveMinute (fiveItems, pmsAbnormalRules, voltage);
RMpIntegrityDPO rMpIntegrityDPO = new RMpIntegrityDPO ( );
rMpIntegrityDPO.setEffectiveMinuteCount (count * statisticalInterval);
rMpIntegrityDPO.setDataDate (tempDate);
rMpIntegrityDPOS.add (rMpIntegrityDPO);
});
});
rMpIntegrityDPOService.saveOrUpdateBatch (rMpIntegrityDPOS, 500);
}
/**
* @Description: 目前只计算日表
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
private void hanlderOracleData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
switch (type) {
// case 1:
// this.hanlderOracleYear (primaryGridParam);
// break;
// case 2:
// this.hanlderOracleQtr (primaryGridParam);
// break;
// case 3:
// this.hanlderOracleMonth (primaryGridParam);
// break;
case 5:
this.hanlderOracleDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderOracleDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<RMpIntegrityDPO> rMpIntegrityDPOS = new ArrayList<> ( );
//1、取出规则
List<PmsAbnormalRules> pmsAbnormalRules = pmsAbnormalRulesMapper.selectList (null);
//2、取出电压字典
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeName (DicDataTypeEnum.DEV_VOLTAGE.getName ( )).getData ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse (dataDate);
orgIdList.forEach (orgid -> {
/*主网在运监测点*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
if (CollectionUtil.isEmpty (mysqlIndexList)) {
return;
}
/*过滤掉异常监测点*/
QueryWrapper<RStatAbnormalDPO> rStatAbnormalDPOLambdaQueryWrapper = new QueryWrapper ( );
rStatAbnormalDPOLambdaQueryWrapper.select ("measurementPointId").
in ("measurement_point_id", mysqlIndexList).
eq ("value_alarm", 1).
eq ("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
List<RStatAbnormalDPO> rStatAbnormalDPOS = rStatAbnormalDPOMapper.selectList (rStatAbnormalDPOLambdaQueryWrapper);
List<String> collect = rStatAbnormalDPOS.stream ( ).map (RStatAbnormalDPO::getMeasurementPointId).collect (Collectors.toList ( ));
List<PmsMonitorPO> collect1 = pmsMonitorPOS.stream ( ).filter (temp -> collect.contains (temp.getId ( ))).collect (Collectors.toList ( ));
/*测试造的数据*/
// List<PmsMonitorPO> collect1 = new ArrayList<> ();
// PmsMonitorPO pmsMonitorPO = new PmsMonitorPO();
// pmsMonitorPO.setVoltageLevel ("e3da890104e3c4ae1f005021411a1fd7");
// pmsMonitorPO.setId ("666f03ed54f2288090f06d957d2d7b07");
// pmsMonitorPO.setStatisticalInterval (3);
// collect1.add (pmsMonitorPO);
collect1.forEach (temp -> {
Double voltage = getVoltage (temp.getVoltageLevel ( ), dictDataList);
/*2.查询DataV
measurement_point_id 监测点编号
data_date 时间
phasic_type = A 相别
value_type = AVG 数据类型
*/
/*获取mysql与Oracle监测点id对应关系*/
PqLinedetailPO pqLinedetailPO = pqLinedetailPOService.getOracleIndexIdByMonitorId (temp.getId ( ));
/*获取监测点当天的所有数据*/
List<DataVFiveItemDTO> fiveItems = dataVOraclePOService.getFiveItems (pqLinedetailPO.getLineIndex ( ), dataDate);
/*过滤出有效接入分钟数量*/
Integer count = calculateEffectiveMinute (fiveItems, pmsAbnormalRules, voltage);
/*统计间隔*/
Integer statisticalInterval = temp.getStatisticalInterval ( );
RMpIntegrityDPO rMpIntegrityDPO = new RMpIntegrityDPO ( );
rMpIntegrityDPO.setEffectiveMinuteCount (count * statisticalInterval);
rMpIntegrityDPO.setDataDate (tempDate);
rMpIntegrityDPOS.add (rMpIntegrityDPO);
});
});
rMpIntegrityDPOService.saveOrUpdateBatch (rMpIntegrityDPOS, 500);
}
/**
* @Description: 3、频率在【4555】之间
* 4、相电压有效值在【0.85p.u.1.2p.u.】之间p.u=电压等级/1.732
* 5、线电压有效值在【0.85p.u.1.2p.u.】之间p.u=电压等级
* 6、电压总谐波畸变率在【0.1%20%】之间;
* 7、负序电压不平衡度在【020%】。满足以上条件则是一条有效数据
* @Param: [fiveItems, pmsAbnormalRules, voltage]
* @return: java.lang.Integer
* @Author: clam
* @Date: 2023/2/23
*/
private Integer calculateEffectiveMinute(List<DataVFiveItemDTO> fiveItems, List<PmsAbnormalRules> pmsAbnormalRules, Double voltage) {
Integer result = 0;
for (DataVFiveItemDTO fiveItem : fiveItems) {
Double freqMax = fiveItem.getFreqMax ();
Double freqMin = fiveItem.getFreqMin ();
Double rmsMax = fiveItem.getRmsMax ();
Double rmsMin = fiveItem.getRmsMin ();
Double vThdMax = fiveItem.getVThdMax ();
Double vThdMin = fiveItem.getVThdMin ();
Double vUnbalanceMax = fiveItem.getVUnbalanceMax ();
Double vUnbalanceMin = fiveItem.getVUnbalanceMin ();
Double rmsLvrMax = fiveItem.getRmsLvrMax ();
Double rmsLvrMin = fiveItem.getRmsLvrMin ();
PmsAbnormalRules freqLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_FREQ)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules rmsLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_RMS)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules rms_lvrLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_RMS_LVR)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules v_thdLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_V_THD)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules v_unbalanceLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_V_UNBALANCE)).collect (Collectors.toList ( )).get (0);
if (freqLimit.getLowerLimit ( ) <= freqMin&&freqMax <= freqLimit.getUpperLimit ( ) &&
rmsLimit.getLowerLimit ( ) * (voltage / rmsMin) <= rmsMax&&rmsMax <= rmsLimit.getUpperLimit ( ) * (voltage / 1.732) &&
rms_lvrLimit.getLowerLimit ( )*voltage <= rmsLvrMin&&rmsLvrMax <= rms_lvrLimit.getUpperLimit ( )*voltage &&
v_thdLimit.getLowerLimit ( ) <= vThdMin&&vThdMax <= v_thdLimit.getUpperLimit ( ) &&
v_unbalanceLimit.getLowerLimit ( ) <= vUnbalanceMin&&vUnbalanceMax <= v_unbalanceLimit.getUpperLimit ( )
) {
result++;
}
}
return result;
}
/**
* @Description: 根据电压字典获取电压等级
* @Param: [id, dictDataList]
* @return: java.lang.Double
* @Author: clam
* @Date: 2023/2/23
*/
private Double getVoltage(String id, List<DictData> dictDataList) {
for (DictData dictData : dictDataList) {
if (dictData.getId ( ).equals (id)) {
Double result = Double.valueOf (dictData.getValue ( ));
return result;
}
}
return null;
}
}

View File

@@ -10,6 +10,7 @@ import com.njcn.prepare.harmonic.pojo.dto.MonitorDataIntegrityDTO;
import com.njcn.prepare.harmonic.pojo.oracle.PqLinedetailPO;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridDataIntegrityParam;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import com.njcn.prepare.harmonic.service.mysql.area.*;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
import com.njcn.prepare.harmonic.service.oracle.PqLinedetailPOService;
@@ -51,7 +52,8 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
private @Autowired
PmsTerminalPOService pmsTerminalPOService;
private @Autowired
DataVInfluxdbService dataVInfluxdbService;
private @Autowired
PqLinedetailPOService pqLinedetailPOService;
@@ -159,7 +161,88 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
* @Date: 2022/11/25
*/
private void hanlderInfludxbData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
/*月表季表年表都是重日表生成不区分oralceinfluxdb*/
switch (type) {
case 1:
this.hanlderOracleYear (primaryGridParam);
break;
case 2:
this.hanlderOracleQtr (primaryGridParam);
break;
case 3:
this.hanlderOracleMonth (primaryGridParam);
break;
case 5:
this.hanlderInfluxdbDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderInfluxdbDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<ROperatingIndexDPO> rOperatingIndexDPOList = new ArrayList<> ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse(dataDate);
orgIdList.forEach (orgid -> {
/*measurement_run_points:在运监测点个数*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
Integer measurement_run_points = pmsMonitorPOS.size ( );
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
/*主网单位在线监测点数 transit_measurement_points*/
Integer transit_measurement_points = dataVInfluxdbService.queryTransitMeasurementPoints(mysqlIndexList,primaryGridParam.getDataDate (),"A");
/*主网单位有效接入监测点个数 effective_access_measurement_count*/
Integer effective_access_measurement_count = this.queryEffectiveAccessMeasurementCount(mysqlIndexList,primaryGridParam.getDataDate ());
/*监测终端数量 online_measurement_points*/
List<PmsTerminalPO> pmsTerminalPOS = pmsTerminalPOService.queryOnlineMeasurementPoints(orgid);
Integer online_measurement_points = pmsTerminalPOS.size ();
/*在运监测终端个数 online_measurement_count*/
String state = redisUtil.getStringByKey (NAME_KEY+
SPLIT_SIGN+ DicDataTypeEnum.DEV_STATUS.getCode ( )+
SPLIT_SIGN+ DicDataEnum.RUNNING.getCode ( ));
Integer online_measurement_count = Integer.valueOf (pmsTerminalPOS.stream ( ).filter (temp -> Objects.equals (temp.getTerminalState ( ),state)).count ( )+"");
/*主网单位数据完整率 data_integrity_rate*/
double data_integrity_rate=0.00;
List<MonitorDataIntegrityDTO> monitorDataIntegrityDTOList = rMpIntegrityDPOService.calculateDataIntegrity (mysqlIndexList, dataDate);
/*求平均值*/
if(!CollectionUtils.isEmpty (monitorDataIntegrityDTOList)){
data_integrity_rate = monitorDataIntegrityDTOList.stream ( ).mapToDouble (temp -> {
return temp.getDataIntegrity ( ).doubleValue ( );
}).average ( ).getAsDouble ( );
}
/*主网单位数据异常监测点数日统计 is_unusual*/
Integer is_unusual =this.queryIsUnusualCount(mysqlIndexList,primaryGridParam.getDataDate ());
ROperatingIndexDPO rOperatingIndexDPO = new ROperatingIndexDPO( );
rOperatingIndexDPO.setOrgNo (orgid);
rOperatingIndexDPO.setDataDate (tempDate);
rOperatingIndexDPO.setMeasurementRunPoints (measurement_run_points);
rOperatingIndexDPO.setTransitMeasurementPoints (transit_measurement_points);
rOperatingIndexDPO.setEffectiveAccessMeasurementCount (effective_access_measurement_count);
rOperatingIndexDPO.setOnlineMeasurementPoints (online_measurement_points);
rOperatingIndexDPO.setOnlineMeasurementCount (online_measurement_count);
rOperatingIndexDPO.setDataIntegrityRate (data_integrity_rate);
rOperatingIndexDPO.setIsUnusual (is_unusual>0?1:0);
rOperatingIndexDPOList.add (rOperatingIndexDPO);
});
if(!CollectionUtils.isEmpty (rOperatingIndexDPOList)){
rOperatingIndexDPOService.saveOrUpdateBatchByMultiId (rOperatingIndexDPOList,30);
}
}
/**
* @Description: 处理Oracle数据

View File

@@ -0,0 +1,22 @@
package com.njcn.prepare.harmonic.service.mysql.area;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 16:04【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface EffectiveMinuteCountService {
/**
* @Description: 主网有效监测时长计算
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
void effectiveMinuteCount(PrimaryGridParam primaryGridParam);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.oracle;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
@@ -40,4 +41,13 @@ public interface DataVOraclePOService extends IService<DataVOraclePO>{
* @return
*/
Double queryVThdMax(Integer lineId,String datadate);
/**
* @Description: 获取监测点当天数据根据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
List<DataVFiveItemDTO> getFiveItems(Integer lineId, String date);
}

View File

@@ -5,6 +5,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.mapper.oracle.DataVOraclePOMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
@@ -109,4 +110,21 @@ public class DataVOraclePOServiceImpl extends ServiceImpl<DataVOraclePOMapper, D
Double vThdMax = dataVOraclePO.getVThdMax ( );
return vThdMax;
}
/**
* @param lineId
* @param date
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public List<DataVFiveItemDTO> getFiveItems(Integer lineId, String date) {
List<DataVFiveItemDTO> collect = dataVOraclePOMapper.getFiveItems(lineId,date);
return collect;
}
}

View File

@@ -47,7 +47,6 @@ public class PqsEventdetailServiceImpl extends MppServiceImpl<PqsEventdetailMapp
Integer integer = pqsEventdetailMapper.selectCount (queryWrapper);
return integer;
}
}

View File

@@ -0,0 +1,65 @@
package com.njcn.prepare.harmonic.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class DataVFiveItemDTO {
@ApiModelProperty("监测点ID")
private Integer lineid;
@ApiModelProperty("时间")
private Date timeid;
@ApiModelProperty("相别")
private String phasicType;
@ApiModelProperty("频率平均值实时量测值MAX")
private Double freqMax;
@ApiModelProperty("频率平均值实时量测值MIN")
private Double freqMin;
@ApiModelProperty("相电压有效值平均值实时量测值MAX")
private Double rmsMax;
@ApiModelProperty("相电压有效值平均值实时量测值MIN")
private Double rmsMin;
@ApiModelProperty("线电压有效值平均值实时量测值MAX")
private Double rmsLvrMax;
@ApiModelProperty("线电压有效值平均值实时量测值MIN")
private Double rmsLvrMin;
@ApiModelProperty("电压总谐波畸变率平均值实时量测值量MAX")
private Double vThdMax;
@ApiModelProperty("电压总谐波畸变率平均值实时量测值量MIN")
private Double vThdMin;
@ApiModelProperty("三相电压负序不平衡度平均值实时量测值MAX")
private Double vUnbalanceMax;
@ApiModelProperty("三相电压负序不平衡度平均值实时量测值MIN")
private Double vUnbalanceMin;
@ApiModelProperty("频率平均值数量")
private Integer freqCount;
@ApiModelProperty("相电压有效值平均值数量")
private Integer rmsCount;
@ApiModelProperty("线电压有效值平均值数量")
private Integer rmsLvrCount;
@ApiModelProperty("电压总谐波畸变率平均值数量")
private Integer vThdCount;
@ApiModelProperty("三相电压负序不平衡度平均值数量")
private Integer vUnbalanceCount;
}

View File

@@ -0,0 +1,29 @@
package com.njcn.prepare.harmonic.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/13 10:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class OverLimitFlagDTO {
@ApiModelProperty("监测点ID(台区id)")
private String lineId;
@ApiModelProperty("越限开始时间")
private LocalDateTime startTime;
@ApiModelProperty("越限结束时间")
private LocalDateTime endTime ;
@ApiModelProperty("越限类型")
private String overLimtType;
@ApiModelProperty("越限标志")
private Integer overLimtFlag;
}

View File

@@ -0,0 +1,33 @@
package com.njcn.prepare.harmonic.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author clam
* Date: 2022/10/20 11:41
* @version V1.0.0
*/
@Data
public class WorkOrderCreateParam {
@ApiModelProperty(name = "orgIdList",value = "单位Id")
private List<String> orgIdList;
@ApiModelProperty(name = "type",value = "报表类型,1,年2季3月4周5日")
@NotNull(message = "报表类型不可为空")
private Integer type;
@ApiModelProperty(name = "dataDate",value = "时间")
@NotBlank(message = "报表时间不可为空")
private String dataDate;
@ApiModelProperty(name = "dataSource",value = "数据源 0:oracle;1:influxdb")
@NotBlank(message = "数据源")
private Integer dataSource;
}

View File

@@ -60,5 +60,11 @@
<version>1.5.1-RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>prepare-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,25 @@
package com.njcn.process.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.process.api.fallback.RStatWorkOrderFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/15 14:13【需求编号】
*
* @author clam
* @version V1.0.0
*/
@FeignClient(value = ServerInfo.PROCESS,path = "/rStatWorkOrder",fallbackFactory = RStatWorkOrderFallbackFactory.class)
public interface RStatWorkOrderFeignClient {
@PostMapping("/createProblem")
HttpResult<Boolean> createProblem(@RequestBody List<OverLimitFlagDTO> overLimitFlagDTOList);
}

View File

@@ -0,0 +1,45 @@
package com.njcn.process.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.process.api.RStatWorkOrderFeignClient;
import com.njcn.process.utils.ProcessEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/15 14:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Component
public class RStatWorkOrderFallbackFactory implements FallbackFactory<RStatWorkOrderFeignClient> {
@Override
public RStatWorkOrderFeignClient create(Throwable throwable) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (throwable.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) throwable.getCause();
exceptionEnum = ProcessEnumUtil.getExceptionEnum(businessException.getResult());
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new RStatWorkOrderFeignClient() {
@Override
public HttpResult<Boolean> createProblem(List<OverLimitFlagDTO> overLimitFlagDTOList) {
log.error("{}异常,降级处理,异常为:{}", "问题单插入异常", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -0,0 +1,35 @@
package com.njcn.process.pojo.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel
public class ElectricityQualityCheckParam {
@ApiModelProperty(name = "id",value = "电能质量问题编号",required = true)
@NotBlank(message = "电能质量问题编号不能为空")
private String powerQualityProblemNo;
@ApiModelProperty(value="审核是否通过(0:否 1:是)")
@NotBlank(message = "审核标志不能为空")
private String checkResult;
@ApiModelProperty(value="审核人")
@NotBlank(message = "审核人不能为空")
private String checkPerson;
@ApiModelProperty(value="填报进度")
@NotBlank(message = "填报进度不能为空")
private String reportProcess;
@ApiModelProperty(value="审核意见")
@NotBlank(message = "审核意见不能为空")
private String checkComment;
}

View File

@@ -0,0 +1,32 @@
package com.njcn.process.pojo.param;
import com.njcn.web.constant.ValidMessage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel
public class LoadTypeUserCheckParam {
@ApiModelProperty(name = "id",required = true)
@NotBlank(message = ValidMessage.ID_NOT_BLANK)
private String id;
@ApiModelProperty(value="审核是否通过(0:否 1:是)")
@NotBlank(message = "审核标志不能为空")
private String checkResult;
@ApiModelProperty(value="审核人")
@NotBlank(message = "审核人不能为空")
private String checkPerson;
@ApiModelProperty(value="审核意见")
@NotBlank(message = "审核意见不能为空")
private String checkComment;
}

View File

@@ -0,0 +1,39 @@
package com.njcn.process.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2022/11/11 15:20【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class RGeneralSurveyPlanChcekParm {
@ApiModelProperty(value="普测计划编号")
@NotBlank(message = "普测计划编号不能为空")
private String planNo;
@ApiModelProperty(value="审核是否通过(0:否 1:是)")
@NotBlank(message = "审核标志不能为空")
private String checkResult;
@ApiModelProperty(value="审核人")
@NotBlank(message = "审核人不能为空")
private String checkPerson;
@ApiModelProperty(value="审核意见")
@NotBlank(message = "审核意见不能为空")
private String checkComment;
}

View File

@@ -0,0 +1,51 @@
package com.njcn.process.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2022/11/11 15:20【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class RStatProblemAndWorkOrderParam {
@NotNull(message="当前页不能为空!")
@Min(value = 1, message = "当前页不能为0")
@ApiModelProperty(value = "当前页",name = "currentPage",dataType ="Integer",required = true)
private Integer currentPage;
/**显示条数*/
@NotNull(message="显示条数不能为空!")
@ApiModelProperty(value = "显示条数",name = "pageSize",dataType ="Integer",required = true)
private Integer pageSize;
@ApiModelProperty(value="问题类型")
private String problemType;
@ApiModelProperty(value="审核状态")
private String checkStatus;
@ApiModelProperty(value="台区名称")
private String distributionName;
@ApiModelProperty(value="问题发生时间")
private String occurTime;
@ApiModelProperty(value="工单状态")
private String workOrderStatus;
@ApiModelProperty(value="问题编号")
private String problemNo;
}

View File

@@ -87,6 +87,16 @@ public class RGeneralSurveyPlanPO {
*/
@TableField(value = "description")
private String description;
/**
* 审核人
*/
@TableField(value="check_person")
private String checkPerson;
/**
* 审核意见
*/
@TableField(value = "check_comment")
private String checkComment;
/**
* 文件是否上传(0:否 1:是)

View File

@@ -64,6 +64,15 @@ public class RLoadTypeUserManage implements Serializable {
* 入网报告状态字典ID
*/
private String iStatus;
/**
*入网报告审核人
*/
private String iCheckPerson;
/**
*入网报告审核意见
*/
private String iCheckComment;
/**
* 入网报告路径
*/
@@ -96,6 +105,14 @@ public class RLoadTypeUserManage implements Serializable {
* 实测报告状态字典ID
*/
private String aStatus;
/**
*实测报告审核人
*/
private String aCheckPerson;
/**
*实测报告审核意见
*/
private String aCheckComment;
/**
* 实测报告路径
*/
@@ -120,5 +137,7 @@ public class RLoadTypeUserManage implements Serializable {
* 实测详情
*/
private String aDescription;
}

View File

@@ -31,7 +31,8 @@ public class RStatDistributionProblemPO {
@TableField(value = "org_no")
private String orgNo;
@TableField(value = "org_name")
private String orgName;
/**
* 问题类型(字典,两种类型:谐波电压越限、谐波电流越限)
*/
@@ -49,7 +50,8 @@ public class RStatDistributionProblemPO {
*/
@TableField(value = "distribution_id")
private String distributionId;
@TableField(value = "distribution_name")
private String distributionName;
/**
* 最新超标时间(超标连续大于4小时)
*/

View File

@@ -0,0 +1,190 @@
package com.njcn.process.pojo.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import java.util.Date;
/**
*
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/22 18:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
/**
* 电能质量问题日志表
*/
@TableName(value = "r_stat_electric_quality_problem_log")
public class RStatElectricQualityProblemLogPO {
/**
* 电能质量问题编号
*/
@MppMultiId(value = "power_quality_problem_no")
private String powerQualityProblemNo;
/**
* 操作时间
*/
@MppMultiId(value = "data_date")
private Date dataDate;
/**
* 审核人
*/
@TableField(value = "checker")
private String checker;
/**
* 审核备注
*/
@TableField(value = "description")
private String description;
/**
* 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
@TableField(value = "report_process")
private String reportProcess;
/**
* 填报内容
*/
@TableField(value = "report_process_content")
private String reportProcessContent;
/**
* 审核状态
*/
@TableField(value = "type")
private String type;
/**
* 获取电能质量问题编号
*
* @return power_quality_problem_no - 电能质量问题编号
*/
public String getPowerQualityProblemNo() {
return powerQualityProblemNo;
}
/**
* 设置电能质量问题编号
*
* @param powerQualityProblemNo 电能质量问题编号
*/
public void setPowerQualityProblemNo(String powerQualityProblemNo) {
this.powerQualityProblemNo = powerQualityProblemNo;
}
/**
* 获取操作时间
*
* @return data_date - 操作时间
*/
public Date getDataDate() {
return dataDate;
}
/**
* 设置操作时间
*
* @param dataDate 操作时间
*/
public void setDataDate(Date dataDate) {
this.dataDate = dataDate;
}
/**
* 获取审核人
*
* @return checker - 审核人
*/
public String getChecker() {
return checker;
}
/**
* 设置审核人
*
* @param checker 审核人
*/
public void setChecker(String checker) {
this.checker = checker;
}
/**
* 获取审核备注
*
* @return description - 审核备注
*/
public String getDescription() {
return description;
}
/**
* 设置审核备注
*
* @param description 审核备注
*/
public void setDescription(String description) {
this.description = description;
}
/**
* 获取填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*
* @return report_process - 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
public String getReportProcess() {
return reportProcess;
}
/**
* 设置填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*
* @param reportProcess 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
public void setReportProcess(String reportProcess) {
this.reportProcess = reportProcess;
}
/**
* 获取填报内容
*
* @return report_process_content - 填报内容
*/
public String getReportProcessContent() {
return reportProcessContent;
}
/**
* 设置填报内容
*
* @param reportProcessContent 填报内容
*/
public void setReportProcessContent(String reportProcessContent) {
this.reportProcessContent = reportProcessContent;
}
/**
* 获取状态
*
* @return type - 状态
*/
public String getType() {
return type;
}
/**
* 设置状态
*
* @param type 状态
*/
public void setType(String type) {
this.type = type;
}
}

View File

@@ -30,6 +30,13 @@ public class RStatWorkOrderDetailPO {
private String problemNo;
@TableField(value = "org_no")
private String orgNo;
@TableField(value = "org_name")
private String orgName;
@TableField(value = "distribution_id")
private String distributionId;
@TableField(value = "distribution_name")
private String distributionName;
/**
* 工单状态(字典,待派单、已派单、已关闭)
*/
@@ -144,6 +151,12 @@ public class RStatWorkOrderDetailPO {
@TableField(value = "cause_feedback")
private String causeFeedback;
/**
* 审核人ID
*/
@TableField(value = "check_person")
private String checkPerson;
/**
* 审核状态(字典,两种类型:审核通过/审核不通过)
*/
@@ -157,7 +170,7 @@ public class RStatWorkOrderDetailPO {
private String checkComments;
/**
* 计划完成时间
* 整改完成时间
*/
@TableField(value = "rectify_complete_time")
private Date rectifyCompleteTime;
@@ -174,6 +187,12 @@ public class RStatWorkOrderDetailPO {
@TableField(value = "rectify_describe")
private String rectifyDescribe;
/**
* 整改人ID
*/
@TableField(value = "assess_person")
private String assessPerson;
/**
* 评估完成时间
*/

View File

@@ -49,28 +49,32 @@ public class RGeneralSurveyPlanVO {
@ApiModelProperty(value="计划状态(0:新建 1:待审核 2:审核未通过 3:已发布 4:已完成)")
private Integer status;
@TableField(value = "is_file_upload")
@ApiModelProperty(value="文件是否上传(0:否 1:是)")
private Integer isFileUpload;
/**
* 上传文件数量
*/
@TableField(value = "file_count")
@ApiModelProperty(value="上传文件数量")
private Integer fileCount;
/**
* 文件路径
*/
@TableField(value = "file_path")
@ApiModelProperty(value="文件路径")
private String filePath;
@ApiModelProperty(value="审核人")
private String checkPerson;
/**
* 审核意见
*/
@ApiModelProperty(value="审核意见")
private String checkComment;
/**
* 上传时间
*/
@TableField(value = "upload_time")
@ApiModelProperty(value="上传时间")
private Date uploadTime;

View File

@@ -0,0 +1,83 @@
package com.njcn.process.pojo.vo;
import lombok.Data;
import java.util.Date;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/1 14:17【需求编号】
*
* @author clam
* @version V1.0.0
*/
/**
* 台区测点问题表
*/
@Data
public class RStatDistributionProblemVO {
/**
* 问题编号(有生成规则,看文档)
*/
private String problemNo;
private String orgNo;
private String orgName;
/**
* 问题类型(字典,两种类型:谐波电压越限、谐波电流越限)
*/
private String problemType;
/**
* 问题发生时间
*/
private Date occurTime;
/**
* 台区ID
*/
private String distributionId;
/**
* 台区名称
*/
private String distributionName;
/**
* 最新超标时间(超标连续大于4小时)
*/
private Date lastTime;
/**
* 审核状态(字典,两种类型:待审核/已审核)
*/
private String checkStatus;
/**
* 审核处理(字典,三种情况:“-”“生成工单”“无需处理”,待审核状态的审核结果为“-”,另外两种根据审核弹窗选择结果显示.这边字典存两个生成工单、无需处理,为空是替换成“-”)
*/
private String checkResult;
/**
* 问题处理时间
*/
private Date handleTime;
/**
* 监测点ID
*/
private String measurementPointId;
/**
* 问题描述
*/
private String problemDescribe;
/**
* 补充描述
*/
private String supplyDescribe;
}

View File

@@ -0,0 +1,180 @@
package com.njcn.process.pojo.vo;
import java.util.Date;
/**
*
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/22 18:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
/**
* 电能质量问题日志表
*/
public class RStatElectricQualityProblemLogVO {
/**
* 电能质量问题编号
*/
private String powerQualityProblemNo;
private String orgName;
/**
* 操作时间
*/
private Date dataDate;
/**
* 审核人
*/
private String checker;
/**
* 审核备注
*/
private String description;
/**
* 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
private String reportProcess;
/**
* 填报内容
*/
private String reportProcessContent;
/**
* 审核状态
*/
private String type;
/**
* 获取电能质量问题编号
*
* @return power_quality_problem_no - 电能质量问题编号
*/
public String getPowerQualityProblemNo() {
return powerQualityProblemNo;
}
/**
* 设置电能质量问题编号
*
* @param powerQualityProblemNo 电能质量问题编号
*/
public void setPowerQualityProblemNo(String powerQualityProblemNo) {
this.powerQualityProblemNo = powerQualityProblemNo;
}
/**
* 获取操作时间
*
* @return data_date - 操作时间
*/
public Date getDataDate() {
return dataDate;
}
/**
* 设置操作时间
*
* @param dataDate 操作时间
*/
public void setDataDate(Date dataDate) {
this.dataDate = dataDate;
}
/**
* 获取审核人
*
* @return checker - 审核人
*/
public String getChecker() {
return checker;
}
/**
* 设置审核人
*
* @param checker 审核人
*/
public void setChecker(String checker) {
this.checker = checker;
}
/**
* 获取审核备注
*
* @return description - 审核备注
*/
public String getDescription() {
return description;
}
/**
* 设置审核备注
*
* @param description 审核备注
*/
public void setDescription(String description) {
this.description = description;
}
/**
* 获取填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*
* @return report_process - 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
public String getReportProcess() {
return reportProcess;
}
/**
* 设置填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*
* @param reportProcess 填报进度,字典表(未填报、原因分析结果、计划整改措施、实际采取措施、治理效果评价、已归档)
*/
public void setReportProcess(String reportProcess) {
this.reportProcess = reportProcess;
}
/**
* 获取填报内容
*
* @return report_process_content - 填报内容
*/
public String getReportProcessContent() {
return reportProcessContent;
}
/**
* 设置填报内容
*
* @param reportProcessContent 填报内容
*/
public void setReportProcessContent(String reportProcessContent) {
this.reportProcessContent = reportProcessContent;
}
/**
* 获取状态
*
* @return type - 状态
*/
public String getType() {
return type;
}
/**
* 设置状态
*
* @param type 状态
*/
public void setType(String type) {
this.type = type;
}
}

View File

@@ -0,0 +1,189 @@
package com.njcn.process.pojo.vo;
import lombok.Data;
import java.util.Date;
/**
*
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/1 14:13【需求编号】
*
* @author clam
* @version V1.0.0
*/
/**
* 工单详情表
*/
@Data
public class RStatWorkOrderDetailVO {
/**
* 问题编号(台区测点问题表的problem_no)
*/
private String problemNo;
private String orgNo;
private String orgName;
/**
* 台区ID
*/
private String distributionId;
/**
* 台区名称
*/
private String distributionName;
/**
* 工单状态(字典,待派单、已派单、已关闭)
*/
private String workOrderStatus;
/**
* 工单类型(字典,目前一个,整改单)
*/
private String workOrderType;
/**
* 一级业务类型(字典,目前一个,运检业务)
*/
private String primaryBusinessType;
/**
* 二级业务类型(字典,两种类型:谐波电压越限、谐波电流越限)
*/
private String twoBusinessType;
/**
* 供电所
*/
private String powerSupplyStation;
private String powerSupplyStationName;
/**
* 工单流程(字典,生成工单、派单、反馈、审核、整改、评估、归档,默认生成工单)
*/
private String workOrderProcess;
/**
* 维护班组
*/
private String whbz;
/**
* 工单负责人
*/
private String workOrderLeader;
/**
* 工单完成时间
*/
private Date workOrderOverTime;
/**
* 要求反馈时间
*/
private Date expectAskFeedbackTime;
/**
* 接单人ID
*/
private String pickUpPerson;
/**
* 下发时间
*/
private Date distributionTime;
/**
* 预期到期时间
*/
private Date expirationTime;
/**
* 关联设备主人
*/
private String relationDevice;
/**
* 附件
*/
private String enclosure;
/**
* 抄送
*/
private String copyFor;
/**
* 反馈时间
*/
private Date askFeedbackTime;
/**
* 计划完成时间
*/
private Date plannedCompletionTime;
/**
* 原因反馈
*/
private String causeFeedback;
/**
* 审核人ID
*/
private String checkPerson;
/**
* 审核状态(字典,两种类型:审核通过/审核不通过)
*/
private String checkStatus;
/**
* 审核意见(审核通过可为空,审核不通过时必填)
*/
private String checkComments;
/**
* 整改完成时间
*/
private Date rectifyCompleteTime;
/**
* 整改人ID
*/
private String rectifyPerson;
/**
* 整改描述
*/
private String rectifyDescribe;
/**
* 整改人ID
*/
private String assessPerson;
/**
* 评估完成时间
*/
private Date assessCompleteTime;
/**
* 评估结果(字典,评估合格、评估不合格)
*/
private String assessResult;
/**
* 评估描述
*/
private String assessDescribe;
/**
* 问题描述
*/
private String problemDescribe;
}

View File

@@ -0,0 +1,46 @@
package com.njcn.process.utils;
import cn.hutool.core.util.StrUtil;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.EnumUtils;
import com.njcn.process.enums.ProcessResponseEnum;
import javax.validation.constraints.NotNull;
import java.util.Objects;
/**
* @author hongawen
* @version 1.0.0
* @date 2021年12月20日 10:03
*/
public class ProcessEnumUtil {
/**
* 获取HarmonicResponseEnum实例
*/
public static ProcessResponseEnum getHarmonicEnumResponseEnumByMessage(@NotNull Object value) {
ProcessResponseEnum harmonicResponseEnum;
try {
String message = value.toString();
if(message.indexOf(StrUtil.C_COMMA)>0){
value = message.substring(message.indexOf(StrUtil.C_COMMA)+1);
}
harmonicResponseEnum = EnumUtils.valueOf(ProcessResponseEnum.class, value, ProcessResponseEnum.class.getMethod(BusinessException.GET_MESSAGE_METHOD));
return Objects.isNull(harmonicResponseEnum) ? ProcessResponseEnum.PROCESS_COMMON_ERROR : harmonicResponseEnum;
} catch (NoSuchMethodException e) {
throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR);
}
}
public static Enum<?> getExceptionEnum(HttpResult<Object> result){
//如果返回错误,且为内部错误,则直接抛出异常
CommonResponseEnum commonResponseEnum = EnumUtils.getCommonResponseEnumByCode(result.getCode());
if (commonResponseEnum == CommonResponseEnum.DEVICE_RESPONSE_ENUM) {
return getHarmonicEnumResponseEnumByMessage(result.getMessage());
}
return commonResponseEnum;
}
}

View File

@@ -108,6 +108,12 @@
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>prepare-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

View File

@@ -24,6 +24,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 电能质量问题
* @author xiaoyao
@@ -213,14 +215,26 @@ public class ElectricityQualityIssuesController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE)
@PostMapping("/queryIssuesAndOrder")
@ApiOperation("查询问题及工单(当前部门下)")
@ApiImplicitParam(name = "orgNo", value = "部门id", required = true)
public HttpResult<IssueesAndOrderVO> queryIssuesAndOrder(@RequestParam("orgNo") String orgNo){
String methodDescribe = getMethodDescribe("queryIssuesAndOrder");
IssueesAndOrderVO issueesAndOrderVO =issuesService.queryIssuesAndOrder(orgNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, issueesAndOrderVO, methodDescribe);
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/checkPowerQuality")
@ApiOperation("电能质量问题审核")
@ApiImplicitParam(name = "electricityQualityCheckParam", value = "电能质量问题审核参数", required = true)
public HttpResult<Boolean> checkPowerQuality(@Validated @RequestBody ElectricityQualityCheckParam electricityQualityCheckParam){
String methodDescribe = getMethodDescribe("checkPowerQuality");
Boolean flag = issuesService.checkPowerQuality (electricityQualityCheckParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
/*todo*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryCheckTrack")
@ApiOperation("历史审核记录查询")
@ApiImplicitParam(name = "powerQualityProblemNo", value = "历史审核记录查询参数", required = true)
public HttpResult<List<RStatElectricQualityProblemLogVO>> queryCheckTrack(@RequestParam("powerQualityProblemNo") String powerQualityProblemNo){
String methodDescribe = getMethodDescribe("checkPowerQuality");
List<RStatElectricQualityProblemLogVO> rStatElectricQualityProblemLogVOS = issuesService.queryCheckTrack (powerQualityProblemNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatElectricQualityProblemLogVOS, methodDescribe);
}
}

View File

@@ -92,7 +92,27 @@ public class LoadTypeUserManageController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/checkLoadTypeUserI")
@ApiOperation("入网评估报告审核")
@ApiImplicitParam(name = "loadTypeUserCheckParam", value = "入网评估报告审核参数", required = true)
public HttpResult<Boolean> checkLoadTypeUserI(@Validated @RequestBody LoadTypeUserCheckParam loadTypeUserCheckParam){
String methodDescribe = getMethodDescribe("checkLoadTypeUserI");
Boolean flag = loadTypeUserManageService.checkLoadTypeUserI (loadTypeUserCheckParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/checkLoadTypeUserA")
@ApiOperation("实测报告审核")
@ApiImplicitParam(name = "loadTypeUserCheckParam", value = "实测报告参数", required = true)
public HttpResult<Boolean> checkLoadTypeUserA(@Validated @RequestBody LoadTypeUserCheckParam loadTypeUserCheckParam){
String methodDescribe = getMethodDescribe("checkLoadTypeUserA");
Boolean flag = loadTypeUserManageService.checkLoadTypeUserA (loadTypeUserCheckParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
/**
* 上传干扰源用户入网报告
* @author qijian

View File

@@ -92,10 +92,21 @@ public class RGeneralSurveyPlanController extends BaseController {
public HttpResult<IPage<RGeneralSurveyPlanVO>> queryPlanAudit(@Validated @RequestBody RGeneralSurveyPlanQueryParm rGeneralSurveyPlanQueryParm){
String methodDescribe = getMethodDescribe("queryPlanAudit");
IPage<RGeneralSurveyPlanVO> rGeneralSurveyPlanVOS = rGeneralSurveyPlanPOService.query (rGeneralSurveyPlanQueryParm, Stream.of ("1").collect (Collectors.toList ()));
IPage<RGeneralSurveyPlanVO> rGeneralSurveyPlanVOS = rGeneralSurveyPlanPOService.query (rGeneralSurveyPlanQueryParm, Stream.of ("1","2").collect (Collectors.toList ()));
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rGeneralSurveyPlanVOS, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/checkPlanAudit")
@ApiOperation("普测计划-审核")
@ApiImplicitParam(name = "rGeneralSurveyPlanChcekParm", value = "普测计划审核参数", required = true)
public HttpResult<Boolean> checkPlanAudit(@Validated @RequestBody RGeneralSurveyPlanChcekParm rGeneralSurveyPlanChcekParm){
String methodDescribe = getMethodDescribe("checkPlanAudit");
Boolean flag = rGeneralSurveyPlanPOService.checkPlanAudit (rGeneralSurveyPlanChcekParm);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryPlanResult")
@ApiOperation("查询普测计划-结果页面")

View File

@@ -1,13 +1,18 @@
package com.njcn.process.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
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.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.process.pojo.param.RStatProblemAndWorkOrderParam;
import com.njcn.process.pojo.vo.IssueesAndOrderVO;
import com.njcn.process.pojo.vo.OrderCountVO;
import com.njcn.process.pojo.vo.RStatDistributionProblemVO;
import com.njcn.process.pojo.vo.RStatWorkOrderDetailVO;
import com.njcn.process.service.RStatDistributionProblemService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -15,10 +20,10 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Description:
@@ -56,4 +61,58 @@ public class RStatWorkOrderController extends BaseController {
OrderCountVO orderCountVO =rStatDistributionProblemService.queryOrderCount(orgNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, orderCountVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE)
@PostMapping("/createProblem")
@ApiOperation("创建问题接口")
@ApiImplicitParam(name = "overLimitFlagDTOList", value = "部门id", required = true)
public HttpResult<Boolean> createProblem(@RequestBody List<OverLimitFlagDTO> overLimitFlagDTOList){
String methodDescribe = getMethodDescribe("createProblem");
Boolean problem = rStatDistributionProblemService.createProblem (overLimitFlagDTOList);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, problem, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryProblem")
@ApiOperation("查询工单问题")
@ApiImplicitParam(name = "rStatProblemAndWorkOrderParam", value = "查询工单问题参数", required = true)
public HttpResult<IPage<RStatDistributionProblemVO>> queryProblem(@Validated @RequestBody RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam){
String methodDescribe = getMethodDescribe("queryProblem");
IPage<RStatDistributionProblemVO> rStatDistributionProblemVOIPage = rStatDistributionProblemService.queryProblem (rStatProblemAndWorkOrderParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatDistributionProblemVOIPage, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/checkProblem")
@ApiOperation("审核处理")
@ApiImplicitParam(name = "rStatDistributionProblemVO", value = "审核工单问题参数", required = true)
public HttpResult<Boolean> checkProblem(@Validated @RequestBody RStatDistributionProblemVO rStatDistributionProblemVO){
String methodDescribe = getMethodDescribe("checkProblem");
Boolean flag = rStatDistributionProblemService.checkProblem (rStatDistributionProblemVO);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryWorkOrder")
@ApiOperation("查询工单")
@ApiImplicitParam(name = "rStatProblemAndWorkOrderParam", value = "查询工单问题参数", required = true)
public HttpResult<IPage<RStatWorkOrderDetailVO>> queryWorkOrder(@Validated @RequestBody RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam){
String methodDescribe = getMethodDescribe("queryWorkOrder");
IPage<RStatWorkOrderDetailVO> rStatWorkOrderDetailVOIPage = rStatDistributionProblemService.queryWorkOrder (rStatProblemAndWorkOrderParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatWorkOrderDetailVOIPage, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateWorkOrderStatus")
@ApiOperation("更新工单进度")
@ApiImplicitParam(name = "rStatWorkOrderDetailVO", value = "查询工单问题参数", required = true)
public HttpResult<Boolean> updateWorkOrderStatus(@Validated @RequestBody RStatWorkOrderDetailVO rStatWorkOrderDetailVO){
String methodDescribe = getMethodDescribe("updateWorkOrderStatus");
Boolean flag = rStatDistributionProblemService.updateWorkOrderStatus (rStatWorkOrderDetailVO);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
}

View File

@@ -0,0 +1,16 @@
package com.njcn.process.mapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.process.pojo.po.RStatElectricQualityProblemLogPO;
/**
*
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/22 18:59【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatElectricQualityProblemLogMapper extends MppBaseMapper<RStatElectricQualityProblemLogPO> {
}

View File

@@ -1,7 +1,12 @@
package com.njcn.process.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.process.pojo.param.RStatProblemAndWorkOrderParam;
import com.njcn.process.pojo.po.RStatWorkOrderDetailPO;
import com.njcn.process.pojo.vo.RStatWorkOrderDetailVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
*
@@ -13,4 +18,25 @@ import com.njcn.process.pojo.po.RStatWorkOrderDetailPO;
* @version V1.0.0
*/
public interface RStatWorkOrderDetailMapper extends MppBaseMapper<RStatWorkOrderDetailPO> {
@Select ({"<script>",
"SELECT\n" +
"\ta.*, b.problem_describe\n" +
"FROM\n" +
"\tr_stat_work_order_detail a\n" +
"INNER JOIN r_stat_distribution_problem b ON a.problem_no = b.problem_no\n" +
"WHERE 1=1 \n" +
"<when test='temp.problemType!=null and temp.problemType!=\"\"'>",
"\t AND a.two_business_type = #{temp.problemType}\n" +
"</when>",
"<when test='temp.occurTime!=null and temp.occurTime!=\"\"'>",
"AND DATE_FORMAT(b.occur_time, '%Y%m%d') = #{temp.occurTime}\n" +
"</when>",
"<when test='temp.workOrderStatus!=null and temp.workOrderStatus!=\"\"'>",
"AND a.work_order_status = #{temp.workOrderStatus}\n" +
"</when>",
"<when test='temp.problemNo!=null and temp.problemNo!=\"\"'>",
"AND a.problem_no = #{temp.problemNo}",
"</when>",
"</script>"})
Page<RStatWorkOrderDetailVO> getPageVo(Page<RStatWorkOrderDetailVO> returnpage,@Param("temp") RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam);
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.process.mapper.RStatElectricQualityProblemLogMapper">
<resultMap id="BaseResultMap" type="com.njcn.process.pojo.po.RStatElectricQualityProblemLogPO">
<!--@mbg.generated-->
<!--@Table r_stat_electric_quality_problem_log-->
<id column="power_quality_problem_no" jdbcType="VARCHAR" property="powerQualityProblemNo" />
<result column="data_date" jdbcType="TIMESTAMP" property="dataDate" />
<result column="checker" jdbcType="VARCHAR" property="checker" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="report_process" jdbcType="VARCHAR" property="reportProcess" />
<result column="report_process_content" jdbcType="VARCHAR" property="reportProcessContent" />
<result column="type" jdbcType="VARCHAR" property="type" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
power_quality_problem_no, data_date, checker, description, report_process, report_process_content,
`type`
</sql>
</mapper>

View File

@@ -6,6 +6,8 @@ import com.njcn.process.pojo.param.*;
import com.njcn.process.pojo.vo.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 电能质量问题接口类
* @author xiaoyao
@@ -96,4 +98,20 @@ public interface IssuesService {
* @Date: 2023/1/5
*/
IssueesAndOrderVO queryIssuesAndOrder(String orgNo);
/**
* @Description: 电能质量问题审核
* @Param: [electricityQualityCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
Boolean checkPowerQuality(ElectricityQualityCheckParam electricityQualityCheckParam);
/**
* @Description: 历史审核记录查询
* @Param: [powerQualityProblemNo]
* @return: java.util.List<com.njcn.process.pojo.vo.RStatElectricQualityProblemLogVO>
* @Author: clam
* @Date: 2023/2/23
*/
List<RStatElectricQualityProblemLogVO> queryCheckTrack(String powerQualityProblemNo);
}

View File

@@ -79,4 +79,20 @@ public interface LoadTypeUserManageService {
* @return
*/
List<LoadTypeRelationExcel> exportLoadTypeRelationList(List<String> list);
/**
* @Description: 入网评估报告审核
* @Param: [loadTypeUserCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
Boolean checkLoadTypeUserI(LoadTypeUserCheckParam loadTypeUserCheckParam);
/**
* @Description: 实测报告审核
* @Param: [loadTypeUserCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
Boolean checkLoadTypeUserA(LoadTypeUserCheckParam loadTypeUserCheckParam);
}

View File

@@ -3,10 +3,7 @@ package com.njcn.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.minio.bo.MinIoUploadResDTO;
import com.njcn.process.pojo.param.RGeneralSurveyPlanAddParm;
import com.njcn.process.pojo.param.RGeneralSurveyPlanQueryParm;
import com.njcn.process.pojo.param.SurveyPlanQuestionQueryParm;
import com.njcn.process.pojo.param.SurveyResultUploadParam;
import com.njcn.process.pojo.param.*;
import com.njcn.process.pojo.po.RGeneralSurveyPlanPO;
import com.njcn.process.pojo.vo.SurveyPlanExcel;
import com.njcn.process.pojo.vo.RGeneralSurveyPlanDetailOnQuestionVO;
@@ -81,4 +78,12 @@ public interface RGeneralSurveyPlanPOService extends IMppService<RGeneralSurveyP
* @Date: 2022/12/1
*/
List<RGeneralSurveyPlanPO> querySurveyPlanName(SurveyPlanQuestionQueryParm questionQueryParm);
/**
* @Description: checkPlanAudit
* @Param: [rGeneralSurveyPlanChcekParm]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
Boolean checkPlanAudit(RGeneralSurveyPlanChcekParm rGeneralSurveyPlanChcekParm);
}

View File

@@ -1,9 +1,16 @@
package com.njcn.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.process.pojo.param.RStatProblemAndWorkOrderParam;
import com.njcn.process.pojo.po.RStatDistributionProblemPO;
import com.njcn.process.pojo.vo.IssueesAndOrderVO;
import com.njcn.process.pojo.vo.OrderCountVO;
import com.njcn.process.pojo.vo.RStatDistributionProblemVO;
import com.njcn.process.pojo.vo.RStatWorkOrderDetailVO;
import java.util.List;
/**
*
@@ -32,4 +39,44 @@ public interface RStatDistributionProblemService extends IMppService<RStatDistri
* @Date: 2023/2/2
*/
OrderCountVO queryOrderCount(String orgNo);
/**
* @Description: 创建问题接口
* @Param: [overLimitFlagDTOList]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/15
*/
Boolean createProblem(List<OverLimitFlagDTO> overLimitFlagDTOList);
/**
* @Description: 查询问题接口
* @Param: [rStatProblemAndWorkOrderParam]
* @return: com.baomidou.mybatisplus.core.metadata.IPage<com.njcn.process.pojo.vo.RStatDistributionProblemVO>
* @Author: clam
* @Date: 2023/2/16
*/
IPage<RStatDistributionProblemVO> queryProblem(RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam);
/**
* @Description: 审核处理
* @Param: [rStatDistributionProblemVO]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/17
*/
Boolean checkProblem(RStatDistributionProblemVO rStatDistributionProblemVO);
/**
* @Description: queryWorkOrder
* @Param: [rStatProblemAndWorkOrderParam]
* @return: com.baomidou.mybatisplus.core.metadata.IPage<com.njcn.process.pojo.vo.RStatWorkOrderDetailVO>
* @Author: clam
* @Date: 2023/2/17
*/
IPage<RStatWorkOrderDetailVO> queryWorkOrder(RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam);
/**
* @Description: 更新工单进度
* @Param: [rStatWorkOrderDetailVO]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/17
*/
Boolean updateWorkOrderStatus(RStatWorkOrderDetailVO rStatWorkOrderDetailVO);
}

View File

@@ -9,6 +9,7 @@ import cn.hutool.extra.pinyin.PinyinUtil;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.constant.BizParamConstant;
import com.njcn.common.pojo.exception.BusinessException;
@@ -36,6 +37,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 电能质量问题实现类
@@ -64,6 +66,8 @@ public class IssuesServiceImpl implements IssuesService {
private final RMpElectricQualityProblemFlowDetailsMapper flowDetailsMapper;
private final RStatElectricQualityProblemLogMapper rStatElectricQualityProblemLogMapper;
@Resource
private MinIoUtils minIoUtils;
@@ -561,4 +565,88 @@ public class IssuesServiceImpl implements IssuesService {
return issueesAndOrderVO;
}
/**
* @param electricityQualityCheckParam
* @Description: 电能质量问题审核
* @Param: [electricityQualityCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
@Override
public Boolean checkPowerQuality(ElectricityQualityCheckParam electricityQualityCheckParam) {
boolean result = true;
RStatElectricQualityProblemLogPO rStatElectricQualityProblemLogPO = new RStatElectricQualityProblemLogPO();
rStatElectricQualityProblemLogPO.setPowerQualityProblemNo (electricityQualityCheckParam.getPowerQualityProblemNo ());
rStatElectricQualityProblemLogPO.setChecker (electricityQualityCheckParam.getCheckPerson ());
rStatElectricQualityProblemLogPO.setDataDate ( new Date ());
rStatElectricQualityProblemLogPO.setDescription (electricityQualityCheckParam.getCheckComment ());
rStatElectricQualityProblemLogPO.setReportProcess (electricityQualityCheckParam.getReportProcess ());
rStatElectricQualityProblemLogPO.setReportProcessContent (electricityQualityCheckParam.getCheckComment ());
rStatElectricQualityProblemLogPO.setType (Objects.equals ("1", electricityQualityCheckParam.getCheckResult ())?DicDataEnum.SUCCESS.getCode ( ):DicDataEnum.FAIL.getCode ( ));
/*插入审核日志表*/
int insert = rStatElectricQualityProblemLogMapper.insert (rStatElectricQualityProblemLogPO);
String report_process ="";
String report_process_status ="";
String reportProcess =electricityQualityCheckParam.getReportProcess ();
String checkResult = electricityQualityCheckParam.getCheckResult ( );
if (DicDataEnum.CAUSE_ANALYSIS.getCode ().equals(reportProcess)){
if(Objects.equals ("1", checkResult)){
report_process_status = DicDataEnum.AUDITT.getCode ();
report_process = DicDataEnum.PLAN_MEASURES.getCode ();
}else{
report_process_status = DicDataEnum.FAIL.getCode ();
report_process = DicDataEnum.CAUSE_ANALYSIS.getCode ();
}
}else if (DicDataEnum.PLAN_MEASURES.getCode().equals(reportProcess)){
if(Objects.equals ("1", checkResult)){
report_process_status = DicDataEnum.AUDITT.getCode ();
report_process = DicDataEnum.ACTUAL_MEASURES.getCode ();
}else{
report_process_status = DicDataEnum.FAIL.getCode ();
report_process = DicDataEnum.PLAN_MEASURES.getCode ();
}
}else if (DicDataEnum.ACTUAL_MEASURES.getCode().equals(reportProcess)){
if(Objects.equals ("1", checkResult)){
report_process_status = DicDataEnum.AUDITT.getCode ();
report_process = DicDataEnum.INSIGHTS.getCode ();
}else{
report_process_status = DicDataEnum.FAIL.getCode ();
report_process = DicDataEnum.ACTUAL_MEASURES.getCode ();
}
}else if (DicDataEnum.INSIGHTS.getCode().equals(reportProcess)){
if(Objects.equals ("1", checkResult)){
report_process_status = DicDataEnum.AUDITT.getCode ();
report_process = DicDataEnum.ARCHIVED.getCode ();
}else{
report_process_status = DicDataEnum.FAIL.getCode ();
report_process = DicDataEnum.INSIGHTS.getCode ();
}
}
UpdateWrapper<RStatElectricQualityProblemFlow> updateWrapper = new UpdateWrapper ();
updateWrapper.eq ("power_quality_problem_no", electricityQualityCheckParam.getPowerQualityProblemNo ());
updateWrapper.set ("report_process", report_process);
updateWrapper.set ("report_process_status",report_process_status);
int i= issuesMapper.update (null,updateWrapper);
result = insert==1&&i==1;
return result;
}
/**
* @param powerQualityProblemNo
* @Description: 历史审核记录查询
* @Param: [powerQualityProblemNo]
* @return: java.util.List<com.njcn.process.pojo.vo.RStatElectricQualityProblemLogVO>
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public List<RStatElectricQualityProblemLogVO> queryCheckTrack(String powerQualityProblemNo) {
return null;
}
}

View File

@@ -2,6 +2,7 @@ package com.njcn.process.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pms.api.DistributionMonitorClient;
@@ -342,4 +343,54 @@ public class LoadTypeUserManageServiceImpl implements LoadTypeUserManageService
return resultList;
}
/**
* @param loadTypeUserCheckParam
* @Description: 入网评估报告审核
* @Param: [loadTypeUserCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
@Override
public Boolean checkLoadTypeUserI(LoadTypeUserCheckParam loadTypeUserCheckParam) {
boolean result = true;
UpdateWrapper<RLoadTypeUserManage> updateWrapper = new UpdateWrapper ();
updateWrapper.eq ("id", loadTypeUserCheckParam.getId ());
updateWrapper.set ("i_check_comment", loadTypeUserCheckParam.getCheckComment ());
updateWrapper.set ("i_check_person",loadTypeUserCheckParam.getCheckPerson ());
DictData fail = dicDataFeignClient.getDicDataByCode (DicDataEnum.FAIL.getCode ( )).getData ( );
DictData finish = dicDataFeignClient.getDicDataByCode(DicDataEnum.SUCCESS.getCode()).getData();
updateWrapper.set ("i_status", Objects.equals ("1", loadTypeUserCheckParam.getCheckResult ())?finish.getId ():fail.getId ());
int i= loadTypeUserManageMapper.update (null,updateWrapper);
result = i==1;
return result;
}
/**
* @param loadTypeUserCheckParam
* @Description: 实测报告审核
* @Param: [loadTypeUserCheckParam]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
@Override
public Boolean checkLoadTypeUserA(LoadTypeUserCheckParam loadTypeUserCheckParam) {
boolean result = true;
UpdateWrapper<RLoadTypeUserManage> updateWrapper = new UpdateWrapper ();
updateWrapper.eq ("id", loadTypeUserCheckParam.getId ());
updateWrapper.set ("a_check_comment", loadTypeUserCheckParam.getCheckComment ());
updateWrapper.set ("a_check_person",loadTypeUserCheckParam.getCheckPerson ());
DictData fail = dicDataFeignClient.getDicDataByCode (DicDataEnum.FAIL.getCode ( )).getData ( );
DictData finish = dicDataFeignClient.getDicDataByCode(DicDataEnum.SUCCESS.getCode()).getData();
updateWrapper.set ("a_status", Objects.equals ("1", loadTypeUserCheckParam.getCheckResult ())?finish.getId ():fail.getId ());
int i= loadTypeUserManageMapper.update (null,updateWrapper);
result = i==1;
return result;
}
}

View File

@@ -2,6 +2,7 @@ package com.njcn.process.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
@@ -12,10 +13,7 @@ import com.njcn.minio.utils.MinIoUtils;
import com.njcn.process.enums.ProcessResponseEnum;
import com.njcn.process.mapper.RGeneralSurveyPlanDetailMapper;
import com.njcn.process.mapper.RGeneralSurveyPlanPOMapper;
import com.njcn.process.pojo.param.RGeneralSurveyPlanAddParm;
import com.njcn.process.pojo.param.RGeneralSurveyPlanQueryParm;
import com.njcn.process.pojo.param.SurveyPlanQuestionQueryParm;
import com.njcn.process.pojo.param.SurveyResultUploadParam;
import com.njcn.process.pojo.param.*;
import com.njcn.process.pojo.po.RGeneralSurveyPlanDetail;
import com.njcn.process.pojo.po.RGeneralSurveyPlanPO;
import com.njcn.process.pojo.vo.RGeneralSurveyPlanDetailOnQuestionVO;
@@ -85,7 +83,7 @@ public class RGeneralSurveyPlanPOServiceImpl extends MppServiceImpl<RGeneralSurv
RGeneralSurveyPlanPO rGeneralSurveyPlanPO = new RGeneralSurveyPlanPO ();
BeanUtils.copyProperties (rGeneralSurveyPlanAddParm,rGeneralSurveyPlanPO);
/*todo 后期与工作流绑定*/
rGeneralSurveyPlanPO.setStatus (0);
rGeneralSurveyPlanPO.setStatus (1);
boolean b = this.saveOrUpdateByMultiId (rGeneralSurveyPlanPO);
List<RGeneralSurveyPlanAddParm.RGeneralSurveyPlanDetailAddParm> rGeneralSurveyPlanDetailAddParm = rGeneralSurveyPlanAddParm.getRGeneralSurveyPlanDetailAddParm ( );
@@ -333,6 +331,26 @@ public class RGeneralSurveyPlanPOServiceImpl extends MppServiceImpl<RGeneralSurv
return list;
}
/**
* @param rGeneralSurveyPlanChcekParm
* @Description: checkPlanAudit
* @Param: [rGeneralSurveyPlanChcekParm]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/22
*/
@Override
public Boolean checkPlanAudit(RGeneralSurveyPlanChcekParm rGeneralSurveyPlanChcekParm) {
boolean result = true;
UpdateWrapper<RGeneralSurveyPlanPO> updateWrapper = new UpdateWrapper();
updateWrapper.eq ("plan_no", rGeneralSurveyPlanChcekParm.getPlanNo ());
updateWrapper.set ("check_comment", rGeneralSurveyPlanChcekParm.getCheckComment ());
updateWrapper.set ("check_person",rGeneralSurveyPlanChcekParm.getCheckPerson ());
updateWrapper.set ("status", Objects.equals ("1", rGeneralSurveyPlanChcekParm.getCheckResult ())?3:2);
result = this.update (updateWrapper);
return result;
}
/**
* 上传文件到Minio
*

View File

@@ -1,25 +1,37 @@
package com.njcn.process.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.pms.api.PmsPowerDistributionareaClient;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.process.mapper.RStatDistributionProblemMapper;
import com.njcn.process.mapper.RStatWorkOrderDetailMapper;
import com.njcn.process.pojo.param.RStatProblemAndWorkOrderParam;
import com.njcn.process.pojo.po.RStatDistributionProblemPO;
import com.njcn.process.pojo.po.RStatWorkOrderDetailPO;
import com.njcn.process.pojo.vo.IssueesAndOrderVO;
import com.njcn.process.pojo.vo.OrderCountVO;
import com.njcn.process.pojo.vo.RStatDistributionProblemVO;
import com.njcn.process.pojo.vo.RStatWorkOrderDetailVO;
import com.njcn.process.service.RStatDistributionProblemService;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.user.api.DeptFeignClient;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/1 14:17【需求编号】
@@ -29,10 +41,11 @@ import java.util.stream.Collectors;
*/
@Service
@AllArgsConstructor
public class RStatDistributionProblemServiceImpl extends MppServiceImpl<RStatDistributionProblemMapper, RStatDistributionProblemPO> implements RStatDistributionProblemService{
public class RStatDistributionProblemServiceImpl extends MppServiceImpl<RStatDistributionProblemMapper, RStatDistributionProblemPO> implements RStatDistributionProblemService {
private final DeptFeignClient deptFeignClient;
private final PmsPowerDistributionareaClient pmsPowerDistributionareaClient;
private final RStatDistributionProblemMapper rStatDistributionProblemMapper;
@@ -48,22 +61,22 @@ public class RStatDistributionProblemServiceImpl extends MppServiceImpl<RStatDis
*/
@Override
public IssueesAndOrderVO queryIssuesAndOrder(String orgNo) {
IssueesAndOrderVO issueesAndOrderVO = new IssueesAndOrderVO();
IssueesAndOrderVO issueesAndOrderVO = new IssueesAndOrderVO ( );
List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId(orgNo).getData();
List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId (orgNo).getData ( );
/*问题个数*/
QueryWrapper<RStatDistributionProblemPO> problemPOQueryWrapper = new QueryWrapper<> ();
QueryWrapper<RStatDistributionProblemPO> problemPOQueryWrapper = new QueryWrapper<> ( );
problemPOQueryWrapper.select ("problem_no").
in ("org_no",deptIds);
in ("org_no", deptIds);
List<RStatDistributionProblemPO> rStatDistributionProblemPOS = rStatDistributionProblemMapper.selectList (problemPOQueryWrapper);
issueesAndOrderVO.setId (orgNo);
issueesAndOrderVO.setIssueesCount (rStatDistributionProblemPOS.size ());
issueesAndOrderVO.setIssueesCount (rStatDistributionProblemPOS.size ( ));
List<String> problemNoList = rStatDistributionProblemPOS.stream ( ).map (RStatDistributionProblemPO::getProblemNo).collect (Collectors.toList ( ));
/*已关联工单数量*/
QueryWrapper<RStatWorkOrderDetailPO> workOrderDetailPOQueryWrapper = new QueryWrapper<> ();
QueryWrapper<RStatWorkOrderDetailPO> workOrderDetailPOQueryWrapper = new QueryWrapper<> ( );
workOrderDetailPOQueryWrapper.select ("1").
in("problem_no",problemNoList).
in ("org_no",deptIds);
in ("problem_no", problemNoList).
in ("org_no", deptIds);
Integer relatedOrderCount = rStatWorkOrderDetailMapper.selectCount (workOrderDetailPOQueryWrapper);
issueesAndOrderVO.setRelatedOrderCount (relatedOrderCount);
return issueesAndOrderVO;
@@ -79,18 +92,209 @@ public class RStatDistributionProblemServiceImpl extends MppServiceImpl<RStatDis
*/
@Override
public OrderCountVO queryOrderCount(String orgNo) {
OrderCountVO orderCountVO = new OrderCountVO();
List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId(orgNo).getData();
OrderCountVO orderCountVO = new OrderCountVO ( );
List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId (orgNo).getData ( );
/*工单数量*/
QueryWrapper<RStatWorkOrderDetailPO> workOrderDetailPOQueryWrapper = new QueryWrapper<> ();
QueryWrapper<RStatWorkOrderDetailPO> workOrderDetailPOQueryWrapper = new QueryWrapper<> ( );
workOrderDetailPOQueryWrapper.
in ("org_no",deptIds);
in ("org_no", deptIds);
List<RStatWorkOrderDetailPO> rStatWorkOrderDetailPOS = rStatWorkOrderDetailMapper.selectList (workOrderDetailPOQueryWrapper);
orderCountVO.setId (orgNo);
orderCountVO.setOrderCount (rStatWorkOrderDetailPOS.size ());
orderCountVO.setOrderCount (rStatWorkOrderDetailPOS.size ( ));
/*已完成工单数量*/
long count = rStatWorkOrderDetailPOS.stream ( ).filter (t -> Objects.equals (t.getWorkOrderStatus ( ), DicDataEnum.CLOSED.getCode ())).count ( );
orderCountVO.setCompelteOrderCount (Integer.valueOf (count+""));
long count = rStatWorkOrderDetailPOS.stream ( ).filter (t -> Objects.equals (t.getWorkOrderStatus ( ), DicDataEnum.CLOSED.getCode ( ))).count ( );
orderCountVO.setCompelteOrderCount (Integer.valueOf (count + ""));
return orderCountVO;
}
/**
* @param overLimitFlagDTOList
* @Description: 创建问题接口
* @Param: [overLimitFlagDTOList]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/15
*/
@Override
public Boolean createProblem(List<OverLimitFlagDTO> overLimitFlagDTOList) {
List<RStatDistributionProblemPO> rStatDistributionProblemPOList = new ArrayList<> ( );
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyyMMdd");
PowerDistributionareaParam powerDistributionareaParam = new PowerDistributionareaParam();
List<PowerDistributionarea> data = pmsPowerDistributionareaClient.getPowerDistributionList (powerDistributionareaParam).getData ( );
Map<String, PowerDistributionarea> collect = data.stream ( ).collect (Collectors.
toMap (PowerDistributionarea::getId,
powerDistributionarea->powerDistributionarea));
overLimitFlagDTOList.forEach (overLimitFlagDTO -> {
RStatDistributionProblemPO rStatDistributionProblemPO = new RStatDistributionProblemPO ( );
rStatDistributionProblemPO.setProblemNo (createproblemNo(overLimitFlagDTO.getOverLimtType (),overLimitFlagDTO.getStartTime ().format(fmt)));
rStatDistributionProblemPO.setOrgNo (collect.get(overLimitFlagDTO.getLineId ()).getOrgId ());
rStatDistributionProblemPO.setOrgName (collect.get(overLimitFlagDTO.getLineId ()).getOrgName ());
rStatDistributionProblemPO.setProblemType (overLimitFlagDTO.getOverLimtType ());
rStatDistributionProblemPO.setOccurTime (Date.from(overLimitFlagDTO.getStartTime ().atZone(ZoneId.systemDefault()).toInstant()));
rStatDistributionProblemPO.setLastTime (Date.from(overLimitFlagDTO.getEndTime ().atZone(ZoneId.systemDefault()).toInstant()));
rStatDistributionProblemPO.setCheckStatus (DicDataEnum.REVIEW.getCode ());
rStatDistributionProblemPO.setDistributionId (overLimitFlagDTO.getLineId ( ));
rStatDistributionProblemPO.setDistributionName (collect.get(overLimitFlagDTO.getLineId ()).getName ());
rStatDistributionProblemPO.setMeasurementPointId (overLimitFlagDTO.getLineId ( ));
rStatDistributionProblemPO.setProblemDescribe ("......");
rStatDistributionProblemPOList.add (rStatDistributionProblemPO);
}
);
boolean b = this.saveBatch (rStatDistributionProblemPOList);
return b;
}
/**
* @param rStatProblemAndWorkOrderParam
* @Description: 查询问题接口
* @Param: [rStatProblemAndWorkOrderParam]
* @return: com.baomidou.mybatisplus.core.metadata.IPage<com.njcn.process.pojo.vo.RStatDistributionProblemVO>
* @Author: clam
* @Date: 2023/2/16
*/
@Override
public IPage<RStatDistributionProblemVO> queryProblem(RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam) {
IPage<RStatDistributionProblemPO> page = new Page<> (rStatProblemAndWorkOrderParam.getCurrentPage(), rStatProblemAndWorkOrderParam.getPageSize());
IPage<RStatDistributionProblemVO> returnpage = new Page<> (rStatProblemAndWorkOrderParam.getCurrentPage(), rStatProblemAndWorkOrderParam.getPageSize());
QueryWrapper<RStatDistributionProblemPO> queryWrapper = new QueryWrapper<> ();
queryWrapper.eq (StrUtil.isNotBlank(rStatProblemAndWorkOrderParam.getProblemType ()),"problem_type",rStatProblemAndWorkOrderParam.getProblemType ()).
eq (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getCheckStatus ()),"check_status",rStatProblemAndWorkOrderParam.getCheckStatus ()).
eq (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getOccurTime ()),"DATE_FORMAT( occur_time ,'%Y-%m-%d')",rStatProblemAndWorkOrderParam.getOccurTime ()).
like (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getDistributionName ()), "distribution_name",rStatProblemAndWorkOrderParam.getDistributionName ());
List<RStatDistributionProblemPO> records = rStatDistributionProblemMapper.selectPage (page, queryWrapper).getRecords ( );
if(CollectionUtils.isEmpty (records)){
return returnpage;
}
List<RStatDistributionProblemVO> list = new ArrayList<> ();
records.forEach (temp->{
RStatDistributionProblemVO rStatDistributionProblemVO = new RStatDistributionProblemVO();
BeanUtils.copyProperties (temp, rStatDistributionProblemVO);
list.add (rStatDistributionProblemVO);
});
returnpage.setRecords (list);
return returnpage;
}
/**
* @param rStatDistributionProblemVO
* @Description: 审核处理(更新问题表,生成工单表)
* @Param: [rStatDistributionProblemVO]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/17
*/
@Override
public Boolean checkProblem(RStatDistributionProblemVO rStatDistributionProblemVO) {
Boolean flag = true;
RStatDistributionProblemPO rStatDistributionProblemPO = new RStatDistributionProblemPO();
BeanUtils.copyProperties (rStatDistributionProblemVO, rStatDistributionProblemPO);
flag = this.updateByMultiId (rStatDistributionProblemPO);
if(!flag){
return flag;
}
/*生成工单表*/
if(Objects.equals (DicDataEnum.GENERATE.getCode (),rStatDistributionProblemPO.getCheckResult ())){
/*处理台区信息*/
PowerDistributionareaParam powerDistributionareaParam = new PowerDistributionareaParam();
List<PowerDistributionarea> data = pmsPowerDistributionareaClient.getPowerDistributionList (powerDistributionareaParam).getData ( );
Map<String, PowerDistributionarea> collect = data.stream ( ).collect (Collectors.
toMap (PowerDistributionarea::getId,
powerDistributionarea->powerDistributionarea));
RStatWorkOrderDetailPO po = new RStatWorkOrderDetailPO();
BeanUtils.copyProperties (rStatDistributionProblemVO, po);
po.setProblemNo (rStatDistributionProblemVO.getProblemNo ());
po.setWorkOrderStatus (DicDataEnum.PEND_DISPATCH.getCode ());
po.setWorkOrderType (DicDataEnum.RECT_ORDER.getCode ());
po.setPrimaryBusinessType (DicDataEnum.TRANS_BUSINESS.getCode ());
po.setTwoBusinessType (rStatDistributionProblemVO.getProblemType ());
po.setPowerSupplyStation (collect.get (rStatDistributionProblemVO.getDistributionId ()).getPowerStationId ());
po.setWorkOrderProcess (DicDataEnum.GENERATED.getCode ());
int insert = rStatWorkOrderDetailMapper.insert (po);
if(!(insert==1)){
flag=false;
}
}
return flag;
}
/**
* @param rStatProblemAndWorkOrderParam
* @Description: queryWorkOrder
* @Param: [rStatProblemAndWorkOrderParam]
* @return: com.baomidou.mybatisplus.core.metadata.IPage<com.njcn.process.pojo.vo.RStatWorkOrderDetailVO>
* @Author: clam
* @Date: 2023/2/17
*/
@Override
public IPage<RStatWorkOrderDetailVO> queryWorkOrder(RStatProblemAndWorkOrderParam rStatProblemAndWorkOrderParam) {
// IPage<RStatWorkOrderDetailPO> page = new Page<> (rStatProblemAndWorkOrderParam.getCurrentPage(), rStatProblemAndWorkOrderParam.getPageSize());
Page<RStatWorkOrderDetailVO> returnpage = new Page<> (rStatProblemAndWorkOrderParam.getCurrentPage(), rStatProblemAndWorkOrderParam.getPageSize());
// QueryWrapper<RStatWorkOrderDetailPO> queryWrapper = new QueryWrapper<> ();
// queryWrapper.eq (StrUtil.isNotBlank(rStatProblemAndWorkOrderParam.getProblemType ()),"problem_type",rStatProblemAndWorkOrderParam.getProblemType ()).
// eq (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getOccurTime ()),"DATE_FORMAT( occur_time ,'%Y-%m-%d')",rStatProblemAndWorkOrderParam.getOccurTime ()).
// eq (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getWorkOrderStatus ()),"work_order_status",rStatProblemAndWorkOrderParam.getWorkOrderStatus ()).
// eq (StrUtil.isNotBlank (rStatProblemAndWorkOrderParam.getProblemNo ()), "problem_no",rStatProblemAndWorkOrderParam.getProblemNo ());
returnpage = rStatWorkOrderDetailMapper.getPageVo (returnpage ,rStatProblemAndWorkOrderParam);
// List<RStatWorkOrderDetailVO> list = new ArrayList<> ();
// records.forEach (temp->{
// RStatWorkOrderDetailVO rStatWorkOrderDetailVO = new RStatWorkOrderDetailVO();
// BeanUtils.copyProperties (temp, rStatWorkOrderDetailVO);
// list.add (rStatWorkOrderDetailVO);
// });
// returnpage.setRecords (list);
return returnpage;
}
/**
* @param rStatWorkOrderDetailVO
* @Description: 更新工单进度
* @Param: [rStatWorkOrderDetailVO]
* @return: java.lang.Boolean
* @Author: clam
* @Date: 2023/2/17
*/
@Override
public Boolean updateWorkOrderStatus(RStatWorkOrderDetailVO rStatWorkOrderDetailVO) {
Boolean flag= true;
RStatWorkOrderDetailPO rStatWorkOrderDetailPO = new RStatWorkOrderDetailPO();
BeanUtils.copyProperties (rStatWorkOrderDetailVO, rStatWorkOrderDetailPO);
int i = rStatWorkOrderDetailMapper.updateByMultiId (rStatWorkOrderDetailPO);
if(!(i==1)){
flag=false;
}
return flag;
}
/**
* @Description: 系统根据规则生成:
* 县公司首字母缩写+“-”+问题首字母缩写+问题上报日期+5位随机数
* 例如萧山公司2022年9月1日的谐波电压越限问题编号为XS-DY2022090200001
* 修改需求:问题首字母缩写+问题上报日期+8位随机数
* @Param: [OrgName, problemShortName, date]
* @return: java.lang.String
* @Author: clam
* @Date: 2023/2/15
*/
public String createproblemNo(String problemType,String date){
/*生成8位随机数*/
int i = (int) ((Math.random ( ) * 9 + 1) * 10000000);
String problemShortName = "";
if(Objects.equals (problemType,DicDataEnum.VOLTAGE_LIMIT.getCode ())){
problemShortName = "DY";
}else if(Objects.equals (problemType,DicDataEnum.CURRENT_LIMIT.getCode ())){
problemShortName = "DL";
}
return problemShortName+date+i;
}
}