diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/area/RStatHarmonicOrgController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/area/RStatHarmonicOrgController.java new file mode 100644 index 000000000..a410a0f08 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/area/RStatHarmonicOrgController.java @@ -0,0 +1,76 @@ +package com.njcn.prepare.harmonic.controller.area; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; +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.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.prepare.harmonic.pojo.param.OrgParam; +import com.njcn.prepare.harmonic.service.mysql.area.IRStatHarmonicOrgDService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; +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.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/7/19 14:09 + */ +@Slf4j +@Api(tags = "单位稳态指标数据统计") +@RestController +@RequestMapping("AreaHarmonic") +@AllArgsConstructor +public class RStatHarmonicOrgController extends BaseController { + + private final DeptFeignClient deptFeignClient; + + private final CommTerminalGeneralClient commTerminalGeneralClient; + + private final IRStatHarmonicOrgDService irStatHarmonicOrgDService; + + @OperateInfo(info = LogEnum.BUSINESS_MEDIUM) + @ApiOperation("日统计") + @PostMapping("day") + @ApiImplicitParam(value = "orgParam",name = "orgParam",required = true) + @ApiModelProperty("r_stat_harmonic_org_d表数据需要先生成r_stat_org_d表") + public HttpResult dayHandle(@RequestBody OrgParam orgParam){ + log.info(LocalDateTime.now()+"dayHandle开始执行"); + String methodDescribe = getMethodDescribe("dayHandle"); + /** + * 支持补录 + */ + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + if(StringUtils.isEmpty(orgParam.getOrgId())){ + Dept data = deptFeignClient.getRootDept().getData(); + deptGetLineParam.setDeptId(data.getId()); + }else { + deptGetLineParam.setDeptId(orgParam.getOrgId()); + } + deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT); + List data = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); + irStatHarmonicOrgDService.dayHandle(data,orgParam.getDataDate()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicOrgDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicOrgDMapper.java new file mode 100644 index 000000000..e2998e064 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicOrgDMapper.java @@ -0,0 +1,13 @@ +package com.njcn.prepare.harmonic.mapper.mysql.area; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.harmonic.pojo.po.RStatHarmonicOrgD; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xuyang + */ +@Mapper +public interface RStatHarmonicOrgDMapper extends MppBaseMapper { + +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicOrgDServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicOrgDServiceImpl.java new file mode 100644 index 000000000..97d4ee327 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicOrgDServiceImpl.java @@ -0,0 +1,191 @@ +package com.njcn.prepare.harmonic.service.mysql.Impl.area; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD; +import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD; +import com.njcn.harmonic.pojo.po.RStatHarmonicOrgD; +import com.njcn.harmonic.pojo.po.RStatOrgDPO; +import com.njcn.prepare.harmonic.mapper.mysql.area.RStatHarmonicOrgDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper; +import com.njcn.prepare.harmonic.service.mysql.area.IRStatHarmonicOrgDService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/7/20 9:31 + */ +@Service +@AllArgsConstructor +public class RStatHarmonicOrgDServiceImpl extends MppServiceImpl implements IRStatHarmonicOrgDService { + + private final DicDataFeignClient dicDataFeignClient; + + private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper; + + private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper; + + private final RStatOrgDMapper rStatOrgDMapper; + + @Override + public void dayHandle(List data, String dataDate) { + List orgDList = new ArrayList<>(); + Date date = DateUtil.parse(dataDate); + QueryWrapper queryWrapper = new QueryWrapper<>(); + QueryWrapper rMpSurplusHarmonicDetailDQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgDPOQueryWrapper = new QueryWrapper<>(); + DecimalFormat df = new DecimalFormat("0.00"); + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + /*获取数据类型*/ + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + data.forEach(deptGetChildrenMoreDTO -> { + /*主网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){ + List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList(); + Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + collect.forEach((k, v)->{ + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + + queryWrapper.clear(); + queryWrapper.select("is_freq","is_v_dev","is_v","is_i","is_unbalance","is_i_neg"). + in("measurement_point_id",collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper); + + rMpSurplusHarmonicDetailDQueryWrapper.clear(); + rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker","is_inuharm"). + in("measurement_point_id",collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper); + + rStatOrgDPOQueryWrapper.clear(); + rStatOrgDPOQueryWrapper.select("effective_measurement"). + eq("org_no",deptGetChildrenMoreDTO.getUnitId()). + eq("data_type",dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate); + RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper); + + steadyStatis.forEach(dictData -> { + if(Objects.equals(dictData.getCode(),DicDataEnum.TOTAL_INDICATOR.getCode())){ + return; + } + RStatHarmonicOrgD rStatHarmonicOrgD = new RStatHarmonicOrgD(); + rStatHarmonicOrgD.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatHarmonicOrgD.setDataDate(date); + rStatHarmonicOrgD.setHarmonicType(dictData.getId()); + rStatHarmonicOrgD.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + rStatHarmonicOrgD.setOverLimitMeasurementAverage(getSteadyStatisData(dictData,rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS)); + if(rStatOrgDPO.getEffectiveMeasurement()==0){ + rStatHarmonicOrgD.setOverLimitMeasurementRatioAverage(1.00F); + }else{ + String value = df.format((float)rStatHarmonicOrgD.getOverLimitMeasurementAverage()/ rStatOrgDPO.getEffectiveMeasurement()); + rStatHarmonicOrgD.setOverLimitMeasurementRatioAverage(Float.parseFloat(value)); + } + orgDList.add(rStatHarmonicOrgD); + }); + }); + } + /*配网*/ + if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())) { + List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds(); + Map> pwMonitorMap = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); + pwMonitorMap.forEach((k, v) -> { + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + + queryWrapper.clear(); + queryWrapper.select("is_freq", "is_v_dev", "is_v", "is_i", "is_unbalance", "is_i_neg"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper); + + rMpSurplusHarmonicDetailDQueryWrapper.clear(); + rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker", "is_inuharm"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper); + + rStatOrgDPOQueryWrapper.clear(); + rStatOrgDPOQueryWrapper.select("effective_measurement"). + eq("org_no", deptGetChildrenMoreDTO.getUnitId()). + eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate); + RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper); + + steadyStatis.forEach(dictData -> { + if (Objects.equals(dictData.getCode(), DicDataEnum.NEG_CURRENT.getCode())) { + return; + } + RStatHarmonicOrgD rStatHarmonicOrgD = new RStatHarmonicOrgD(); + rStatHarmonicOrgD.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatHarmonicOrgD.setDataDate(date); + rStatHarmonicOrgD.setHarmonicType(dictData.getId()); + rStatHarmonicOrgD.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + rStatHarmonicOrgD.setOverLimitMeasurementAverage(getSteadyStatisData(dictData,rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS)); + if(rStatOrgDPO.getEffectiveMeasurement()==0){ + rStatHarmonicOrgD.setOverLimitMeasurementRatioAverage(1.00F); + }else{ + String value = df.format((float)rStatHarmonicOrgD.getOverLimitMeasurementAverage()/ rStatOrgDPO.getEffectiveMeasurement()); + rStatHarmonicOrgD.setOverLimitMeasurementRatioAverage(Float.parseFloat(value)); + } + orgDList.add(rStatHarmonicOrgD); + }); + }); + } + }); + System.out.println("orgDList===:" + orgDList); +// if(!CollectionUtils.isEmpty(orgDList)){ +// this.saveOrUpdateBatchByMultiId(orgDList,1000); +// } + } + + private Integer getSteadyStatisData(DictData dictData, List rMpPartHarmonicDetailDS, List rMpSurplusHarmonicDetailDS) { + Integer value = 0; + if (Objects.equals(dictData.getCode(),DicDataEnum.VOLTAGE_DEV.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsVDev()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.FLICKER.getCode())) { + value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsFlicker()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsV()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_CURRENT.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsI()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsInuharm()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.PHASE_VOLTAGE.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsUnbalance()==1).count()+""); + } + if (Objects.equals(dictData.getCode(),DicDataEnum.FREQUENCY_DEV.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsFreq()==1).count()+""); + + } + if (Objects.equals(dictData.getCode(),DicDataEnum.NEG_CURRENT.getCode())) { + value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsINeg()==1).count()+""); + } + return value; + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRStatHarmonicOrgDService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRStatHarmonicOrgDService.java new file mode 100644 index 000000000..3dd2a1b84 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRStatHarmonicOrgDService.java @@ -0,0 +1,21 @@ +package com.njcn.prepare.harmonic.service.mysql.area; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.harmonic.pojo.po.RStatHarmonicOrgD; + +import java.util.List; + +/** + * @author xuyang + */ +public interface IRStatHarmonicOrgDService extends IMppService { + + /** + * 日表处理 + * @param data 监测点信息 + * @param dataDate 时间 + */ + void dayHandle(List data, String dataDate); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java index fc6e9e294..3027c03d8 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppUserServiceImpl.java @@ -116,48 +116,49 @@ public class AppUserServiceImpl extends ServiceImpl impleme } } } - //开始执行短信发送 - //设置超时时间-可自行调整 - System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); - System.setProperty("sun.net.client.defaultReadTimeout", "10000"); - //初始化ascClient需要的几个参数 - //短信API产品名称(短信产品名固定,无需修改) - final String product = "Dysmsapi"; - //短信API产品域名(接口地址固定,无需修改) - final String domain = "dysmsapi.aliyuncs.com"; - //替换成你的AK - //你的accessKeyId,参考本文档步骤2 - final String accessKeyId = "LTAI4FxsR76x2dq3w9c5puUe"; - //你的accessKeySecret,参考本文档步骤2 - final String accessKeySecret = "GxkTR8fsrvHtixTlD9UPmOGli35tZs"; - //初始化ascClient,暂时不支持多region(请勿修改) - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); - IAcsClient acsClient = new DefaultAcsClient(profile); - SendSmsRequest request = new SendSmsRequest(); - request.setMethod(MethodType.POST); - request.setPhoneNumbers(phone); - //必填:短信签名-可在短信控制台中找到 - request.setSignName("灿能云"); - //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版 - request.setTemplateCode(msgTemplate); +// //开始执行短信发送 +// //设置超时时间-可自行调整 +// System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); +// System.setProperty("sun.net.client.defaultReadTimeout", "10000"); +// //初始化ascClient需要的几个参数 +// //短信API产品名称(短信产品名固定,无需修改) +// final String product = "Dysmsapi"; +// //短信API产品域名(接口地址固定,无需修改) +// final String domain = "dysmsapi.aliyuncs.com"; +// //替换成你的AK +// //你的accessKeyId,参考本文档步骤2 +// final String accessKeyId = "LTAI4FxsR76x2dq3w9c5puUe"; +// //你的accessKeySecret,参考本文档步骤2 +// final String accessKeySecret = "GxkTR8fsrvHtixTlD9UPmOGli35tZs"; +// //初始化ascClient,暂时不支持多region(请勿修改) +// IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); +// DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); +// IAcsClient acsClient = new DefaultAcsClient(profile); +// SendSmsRequest request = new SendSmsRequest(); +// request.setMethod(MethodType.POST); +// request.setPhoneNumbers(phone); +// //必填:短信签名-可在短信控制台中找到 +// request.setSignName("灿能云"); +// //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版 +// request.setTemplateCode(msgTemplate); String vcode = getMessageCode(); - String code = "{\"code\":\"" + vcode + "\"}"; - request.setTemplateParam(code); - //请求失败这里会抛ClientException异常 - SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); +// String code = "{\"code\":\"" + vcode + "\"}"; +// request.setTemplateParam(code); +// //请求失败这里会抛ClientException异常 +// SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); String key = RedisKeyEnum.SMS_LOGIN_KEY.getKey() + phone; - if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) { - //成功发送短信验证码后,保存进redis - redisUtil.saveByKey(key, vcode); - } else { - throw new BusinessException(UserResponseEnum.SEND_CODE_FAIL); - } +// if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) { +// //成功发送短信验证码后,保存进redis +// redisUtil.saveByKey(key, vcode); +// } else { +// throw new BusinessException(UserResponseEnum.SEND_CODE_FAIL); +// } + redisUtil.saveByKey(key, vcode); AppSendMsg appSendMsg = new AppSendMsg(); appSendMsg.setPhone(phone); appSendMsg.setMessage(vcode); appSendMsg.setSendTime(LocalDateTime.now()); - appSendMsg.setSendStatus(sendSmsResponse.getCode() == null ? "无状态" : sendSmsResponse.getCode()); +// appSendMsg.setSendStatus(sendSmsResponse.getCode() == null ? "无状态" : sendSmsResponse.getCode()); appSendMsgService.save(appSendMsg); } catch (Exception e) { logger.error("发送短信异常,异常为:"+e.getMessage()); @@ -283,11 +284,12 @@ public class AppUserServiceImpl extends ServiceImpl impleme throw new BusinessException(UserResponseEnum.REGISTER_PHONE_REPEAT); } user = new User(); - user.setName(phoneNew); - user.setLoginName(phoneNew); - user.setPhone(phoneNew); - user.setDevCode(devCode); - this.updateById(user); + User user2 = this.lambdaQuery().eq(User::getId,userId).one(); + user2.setName(phoneNew); + user2.setLoginName(phoneNew); + user2.setPhone(phoneNew); + user2.setDevCode(devCode); + this.updateById(user2); }