diff --git a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/BpmWebConfiguration.java b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/BpmWebConfiguration.java index d30aab2c2..da4fb7b6b 100644 --- a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/BpmWebConfiguration.java +++ b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/BpmWebConfiguration.java @@ -24,12 +24,12 @@ public class BpmWebConfiguration { /** * 配置 Flowable Web 过滤器 */ - @Bean + /* @Bean public FilterRegistrationBean flowableWebFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new FlowableWebFilter()); registrationBean.setOrder(WebFilterOrderEnum.FLOWABLE_FILTER); return registrationBean; - } + }*/ } diff --git a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/FlowableWebFilter.java b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/FlowableWebFilter.java index 8a0a5aa9c..e256fa801 100644 --- a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/FlowableWebFilter.java +++ b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/config/FlowableWebFilter.java @@ -1,38 +1,38 @@ -package com.njcn.bpm.config; - -import cn.hutool.core.util.StrUtil; -import com.njcn.bpm.utils.FlowableUtils; -import com.njcn.web.utils.RequestUtil; -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * Flowable Web 过滤器,将 userId 设置到 {@link org.flowable.common.engine.impl.identity.Authentication} 中 - * - * @author jason - */ -public class FlowableWebFilter extends OncePerRequestFilter { - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) - throws ServletException, IOException { - try { - String userIndex = RequestUtil.getUserIndex(); - // 设置工作流的用户 - if (StrUtil.isNotBlank(userIndex)) { - FlowableUtils.setAuthenticatedUserId(userIndex); - } - // 过滤 - chain.doFilter(request, response); - } finally { - // 清理 - FlowableUtils.clearAuthenticatedUserId(); - } - } - -} +//package com.njcn.bpm.config; +// +//import cn.hutool.core.util.StrUtil; +//import com.njcn.bpm.utils.FlowableUtils; +//import com.njcn.web.utils.RequestUtil; +//import org.springframework.web.filter.OncePerRequestFilter; +// +//import javax.servlet.FilterChain; +//import javax.servlet.ServletException; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +// +///** +// * Flowable Web 过滤器,将 userId 设置到 {@link org.flowable.common.engine.impl.identity.Authentication} 中 +// * +// * @author jason +// */ +//public class FlowableWebFilter extends OncePerRequestFilter { +// +// @Override +// protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) +// throws ServletException, IOException { +// try { +// String userIndex = RequestUtil.getUserIndex(); +// // 设置工作流的用户 +// if (StrUtil.isNotBlank(userIndex)) { +// FlowableUtils.setAuthenticatedUserId(userIndex); +// } +// // 过滤 +// chain.doFilter(request, response); +// } finally { +// // 清理 +// FlowableUtils.clearAuthenticatedUserId(); +// } +// } +// +//} diff --git a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmTempLineRunTestStatusListener.java b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmTempLineRunTestStatusListener.java new file mode 100644 index 000000000..85a6131e2 --- /dev/null +++ b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmTempLineRunTestStatusListener.java @@ -0,0 +1,28 @@ +package com.njcn.bpm.listener.business; + +import com.njcn.bpm.listener.BpmProcessInstanceStatusEvent; +import com.njcn.bpm.listener.BpmProcessInstanceStatusEventListener; +import com.njcn.supervision.api.TempLineDebugFeignClient; +import com.njcn.supervision.api.TempLineRunTestFeignClient; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Component +public class BpmTempLineRunTestStatusListener extends BpmProcessInstanceStatusEventListener { + + @Resource + private TempLineRunTestFeignClient tempLineRunTestFeignClient; + + @Override + protected String getProcessDefinitionKey() { + return "line_run_test"; + } + + @Override + protected void onEvent(BpmProcessInstanceStatusEvent event) { + tempLineRunTestFeignClient.updateStatus(event.getBusinessKey(), event.getStatus()); + } + +} diff --git a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java index b6f6d5513..36daa1063 100644 --- a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java @@ -27,6 +27,7 @@ import com.njcn.web.factory.PageFactory; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.UserTask; +import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; @@ -191,6 +192,7 @@ public class BpmProcessInstanceServiceImpl implements IBpmProcessInstanceService if (CollUtil.isNotEmpty(startUserSelectAssignees)) { variables.put(BpmConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, startUserSelectAssignees); } + Authentication.setAuthenticatedUserId(userId); ProcessInstance instance = runtimeService.createProcessInstanceBuilder() .processDefinitionId(definition.getId()) .businessKey(businessKey) diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java index d07d1059a..07375c9c7 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineIntegrityClient.java @@ -6,7 +6,9 @@ import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.device.pq.api.fallback.DeviceTreeClientFallbackFactory; import com.njcn.device.pq.api.fallback.LineIntegrityClientFallbackFactory; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import io.swagger.annotations.ApiOperation; @@ -46,4 +48,7 @@ public interface LineIntegrityClient { */ @PostMapping("/getTotalIntegrityByLineIds") HttpResult getTotalIntegrityByLineIds(@RequestBody LineBaseQueryParam param); + + @PostMapping("/lineDataQuality") + HttpResult> getLineDataQuality(@RequestBody LineDataQualityParam lineDataQualityParam); } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java index d464abc64..469fcc7c2 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineIntegrityClientFallbackFactory.java @@ -6,7 +6,9 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.device.biz.utils.DeviceEnumUtil; import com.njcn.device.pq.api.AlarmClient; import com.njcn.device.pq.api.LineIntegrityClient; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import feign.hystrix.FallbackFactory; @@ -46,6 +48,12 @@ public class LineIntegrityClientFallbackFactory implements FallbackFactory> getLineDataQuality(LineDataQualityParam lineDataQualityParam) { + log.error("{}异常,降级处理,异常为:{}", "获取监测点的在线率和数据完成性", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/LineDataQualityDTO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/LineDataQualityDTO.java new file mode 100644 index 000000000..e38caedba --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/LineDataQualityDTO.java @@ -0,0 +1,31 @@ +package com.njcn.device.pq.pojo.dto; + +import lombok.Data; + +/** + * pqs + * + * @author cdf + * @date 2024/5/22 + */ +@Data +public class LineDataQualityDTO { + + private String lineId; + + + /** + * 在线率 + */ + private Double onlineRate; + + /** + *数据完整性 + */ + private Double integrityRate; + + /** + *数据符合性 + */ + private Double suitRate; +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineDataQualityParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineDataQualityParam.java new file mode 100644 index 000000000..98c55f3ad --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/LineDataQualityParam.java @@ -0,0 +1,26 @@ +package com.njcn.device.pq.pojo.param; + +import lombok.*; + +import java.util.List; + +/** + * pqs + * + * @author cdf + * @date 2024/5/22 + */ +@Data +@ToString +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LineDataQualityParam { + + private String beginTime; + + private String endTime; + + private List lineIds; + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/CommLineController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/CommLineController.java index 134ba6894..1ea69e961 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/CommLineController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/CommLineController.java @@ -54,7 +54,7 @@ public class CommLineController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getLineDetailBatch") @ApiOperation("批量获取监测点信息") - public HttpResult> getLineDetailBatch(@RequestParam("ids") List ids) { + public HttpResult> getLineDetailBatch(@RequestBody List ids) { String methodDescribe = getMethodDescribe("getLineDetailBatch"); List result = lineService.getLineDetailBatch(ids); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java index dc37a052b..47b4712d1 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java @@ -8,8 +8,10 @@ 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.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; @@ -116,4 +118,14 @@ public class LineIntegrityDataController extends BaseController { Float integrity = irStatIntegrityDService.getTotalIntegrityByLineIds(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrity, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/lineDataQuality") + @ApiOperation("获取监测点的在线率和数据完成性") + @ApiImplicitParam(name = "lineIds", value = "参数实体", required = true) + public HttpResult> getLineDataQuality(@RequestBody LineDataQualityParam lineDataQualityParam) { + String methodDescribe = getMethodDescribe("getLineDataQuality"); + List result = irStatIntegrityDService.getLineDataQuality(lineDataQualityParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,result,methodDescribe); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java index 7089bd568..6fe98bbdd 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java @@ -6,7 +6,9 @@ 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.pq.mapper.RStatOnlinerateDMapper; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.DeviceInfoParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.OnlineRateParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO; @@ -84,4 +86,10 @@ public class TerminalOnlineRateDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateByDevIds,methodDescribe); } + + + + + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java index 7ac1b7f26..25a542844 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java @@ -2,9 +2,13 @@ package com.njcn.device.pq.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import java.util.List; + /** *

* 数据完整性日表 服务类 @@ -22,4 +26,7 @@ public interface IRStatIntegrityDService extends IService { * @Date: 2024/1/8 13:59 */ Float getTotalIntegrityByLineIds(LineBaseQueryParam param); + + + List getLineDataQuality(LineDataQualityParam lineDataQualityParam); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java index 6fe372e92..c1e1d5180 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java @@ -1,13 +1,31 @@ package com.njcn.device.pq.service.impl; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.device.pq.mapper.LineMapper; import com.njcn.device.pq.mapper.RStatIntegrityDMapper; +import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; +import com.njcn.device.pq.pojo.po.Line; import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.service.IRStatIntegrityDService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + /** *

* 数据完整性日表 服务实现类 @@ -17,10 +35,67 @@ import org.springframework.stereotype.Service; * @since 2023-03-28 */ @Service +@RequiredArgsConstructor public class RStatIntegrityDServiceImpl extends ServiceImpl implements IRStatIntegrityDService { + private final RStatOnlinerateDMapper onlineRateMapper; + + private final RStatIntegrityDMapper rStatIntegrityDMapper; + + private final LineMapper lineMapper; + @Override public Float getTotalIntegrityByLineIds(LineBaseQueryParam param) { return this.baseMapper.selectTotalIntegrityByLineIds(param); } + + + @Override + public List getLineDataQuality(LineDataQualityParam lineDataQualityParam) { + List lineIds = lineDataQualityParam.getLineIds(); + List lineList = lineMapper.selectList(new LambdaQueryWrapper().in(Line::getId,lineIds)); + + lineList = lineList.stream().peek(item->{ + String devId = item.getPids().split(StrUtil.COMMA)[4]; + item.setPid(devId); + }).collect(Collectors.toList()); + + List devIds = lineList.stream().map(Line::getPid).distinct().collect(Collectors.toList()); + + QueryWrapper onlineQuery = new QueryWrapper<>(); + onlineQuery.select("dev_index,avg(online_min/offline_min+online_min) as onlineRate") + .lambda() + .in(RStatOnlinerateD::getDevIndex,devIds) + .between(RStatOnlinerateD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATETIME_FORMATTER),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATETIME_FORMATTER)) + .groupBy(RStatOnlinerateD::getDevIndex); + List rStatOnlinerateDList = onlineRateMapper.selectList(onlineQuery); + Map onlineMap = rStatOnlinerateDList.stream().collect(Collectors.toMap(RStatOnlinerateD::getDevIndex, Function.identity())); + + + QueryWrapper integrityQuery = new QueryWrapper<>(); + integrityQuery.select("line_index,avg(real_time/due_time) as integrityData") + .lambda() + .in(RStatIntegrityD::getLineIndex,lineIds) + .between(RStatIntegrityD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATETIME_FORMATTER),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATETIME_FORMATTER)) + .groupBy(RStatIntegrityD::getLineIndex); + List rStatIntegrityDList = rStatIntegrityDMapper.selectList(integrityQuery); + Map integrityMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex,Function.identity())); + + List result = new ArrayList<>(); + for(Line item : lineList){ + LineDataQualityDTO lineDataQualityDTO = new LineDataQualityDTO(); + lineDataQualityDTO.setLineId(item.getId()); + if(onlineMap.containsKey(item.getPid())){ + lineDataQualityDTO.setOnlineRate(Double.valueOf(onlineMap.get(item.getPid()).getOnlineRate())); + }else { + lineDataQualityDTO.setOnlineRate(0.00); + } + if(integrityMap.containsKey(item.getId())){ + lineDataQualityDTO.setIntegrityRate(Double.valueOf(integrityMap.get(item.getId()).getIntegrityData())); + }else { + lineDataQualityDTO.setIntegrityRate(0.00); + } + } + return result; + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java index 7798c0d56..b3d3454f7 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java @@ -2,21 +2,29 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.pq.api.AlarmClient; import com.njcn.device.biz.enums.DeviceResponseEnum; import com.njcn.device.pq.enums.LineBaseEnum; -import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; -import com.njcn.device.pq.mapper.TerminalOnlineRateDataMapper; +import com.njcn.device.pq.mapper.*; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.dto.PublicDTO; import com.njcn.device.pq.pojo.param.DeviceInfoParam; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.OnlineRateParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; +import com.njcn.device.pq.pojo.po.Line; +import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.pojo.po.TerminalOnlineRateData; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO; @@ -65,6 +73,7 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData + /** * 终端在线率列表 * @@ -197,6 +206,8 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData return onlineRateCensusVO; } + + private List getCondition(List deviceIndexes, String searchBeginTime, String searchEndTime) { List publicDTOList = new ArrayList<>(); OnlineRateParam param=new OnlineRateParam(); diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/TempLineRunTestFeignClient.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/TempLineRunTestFeignClient.java new file mode 100644 index 000000000..d4847dad9 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/TempLineRunTestFeignClient.java @@ -0,0 +1,23 @@ +package com.njcn.supervision.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.supervision.api.fallback.TempLineDebugFeignClientFallbackFactory; +import com.njcn.supervision.api.fallback.TempLineRunTestFeignClientFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + + +/** + * 流程实例 Api 接口 + * + * @author 芋道源码 + */ +@FeignClient(value = ServerInfo.SUPERVISION, path = "/supervisionTempLineRunTest", fallbackFactory = TempLineRunTestFeignClientFallbackFactory.class) +public interface TempLineRunTestFeignClient { + + @GetMapping("/updateStatus") + HttpResult updateStatus(@RequestParam("businessKey") String businessKey, @RequestParam("status")Integer status); + +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/fallback/TempLineRunTestFeignClientFallbackFactory.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/fallback/TempLineRunTestFeignClientFallbackFactory.java new file mode 100644 index 000000000..737f190f6 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/api/fallback/TempLineRunTestFeignClientFallbackFactory.java @@ -0,0 +1,38 @@ +package com.njcn.supervision.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.supervision.api.TempLineFeignClient; +import com.njcn.supervision.api.TempLineRunTestFeignClient; +import com.njcn.supervision.utils.SupervisionEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022/3/16 + */ +@Slf4j +@Component +public class TempLineRunTestFeignClientFallbackFactory implements FallbackFactory { + @Override + public TempLineRunTestFeignClient create(Throwable throwable) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (throwable.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) throwable.getCause(); + exceptionEnum = SupervisionEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new TempLineRunTestFeignClient() { + @Override + public HttpResult updateStatus(String businessKey, Integer status) { + log.error("{}异常,降级处理,异常为:{}", "更新流程状态", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/SupervisionTempLineRunTestParam.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/SupervisionTempLineRunTestParam.java new file mode 100644 index 000000000..92703c756 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/SupervisionTempLineRunTestParam.java @@ -0,0 +1,79 @@ +package com.njcn.supervision.pojo.param.device; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import com.njcn.web.pojo.annotation.DateTimeStrValid; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + *

+ * + *

+ * + * @author hongawen + * @since 2024-05-21 + */ +@Data +public class SupervisionTempLineRunTestParam { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 流程实例的编号 + */ + private String processInstanceId; + + /** + * 在线率 + */ + private Float onlineRate; + + /** + * 数据完整性 + */ + private Float integrityRate; + + /** + * 数据符合性 + */ + private Float suitRate; + + /** + * 1:审批中;2:审批通过;3:审批不通过;4:已取消 + */ + private Integer status; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + + /** + * 0:未试运行 1:试运行中 2.试运行成功 3.试运行异常 + */ + private Integer testRunState; + + /** + * 试运行监测点id集合 + */ + @NotEmpty(message = "试运行监测点id集合参数不可为空") + private List lineIds; + + @NotBlank(message = "开始时间不可为空") + @DateTimeStrValid(format = "yyyy-MM-dd HH:mm:ss") + private String startTime; + + @NotBlank(message = "结束时间不可为空") + @DateTimeStrValid(format = "yyyy-MM-dd HH:mm:ss") + private String endTime; + + +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTest.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTestPO.java similarity index 65% rename from pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTest.java rename to pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTestPO.java index 52f3ffb30..e5d92af27 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTest.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/SupervisionTempLineRunTestPO.java @@ -1,9 +1,8 @@ package com.njcn.supervision.pojo.po.device; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.njcn.db.bo.BaseEntity; -import java.io.Serializable; -import java.time.LocalDateTime; import lombok.Getter; import lombok.Setter; @@ -18,12 +17,18 @@ import lombok.Setter; @Getter @Setter @TableName("supervision_temp_line_run_test") -public class SupervisionTempLineRunTest extends BaseEntity { +public class SupervisionTempLineRunTestPO extends BaseEntity { private static final long serialVersionUID = 1L; + @TableId private String id; + /** + * 监测点编号,用于区分监测点唯一编号,和监测点主键需要区分,目前认为是pq_line表的监测点id + */ + private String lineId; + /** * 流程实例的编号 */ @@ -32,17 +37,17 @@ public class SupervisionTempLineRunTest extends BaseEntity { /** * 在线率 */ - private Float onlineRate; + private Double onlineRate; /** * 数据完整性 */ - private Float integrityRate; + private Double integrityRate; /** * 数据符合性 */ - private Float suitRate; + private Double suitRate; /** * 1:审批中;2:审批通过;3:审批不通过;4:已取消 @@ -59,5 +64,10 @@ public class SupervisionTempLineRunTest extends BaseEntity { */ private Integer testRunState; + /** + * 试运行时间范围 + */ + private String testRunTime; + } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineDebugVO.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineDebugVO.java index 859396d17..b5e30a0bb 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineDebugVO.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineDebugVO.java @@ -29,4 +29,9 @@ public class SupervisionTempLineDebugVO extends BaseEntity { * 0:未试运行 1:试运行中 2.试运行成功 3.试运行异常 */ private Integer testRunState; + + /** + * 试运行时间范围 + */ + private String testRunTime; } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineRunTestVO.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineRunTestVO.java new file mode 100644 index 000000000..5a0b3a1d5 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/SupervisionTempLineRunTestVO.java @@ -0,0 +1,86 @@ +package com.njcn.supervision.pojo.vo.device; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author hongawen + * @since 2024-05-21 + */ +@Getter +@Setter +@EqualsAndHashCode(callSuper = true) +public class SupervisionTempLineRunTestVO extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 监测点编号,用于区分监测点唯一编号,和监测点主键需要区分,目前认为是pq_line表的监测点id + */ + private String lineId; + + /** + * 流程实例的编号 + */ + private String processInstanceId; + + /** + * 在线率 + */ + private Double onlineRate; + + /** + * 数据完整性 + */ + private Double integrityRate; + + /** + * 数据符合性 + */ + private Double suitRate; + + /** + * 1:审批中;2:审批通过;3:审批不通过;4:已取消 + */ + private Integer status; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + + /** + * 0:未试运行 1:试运行中 2.试运行成功 3.试运行异常 + */ + private Integer testRunState; + + /** + * 试运行时间范围 + */ + private String testRunTime; + + + private String lineName; + private String userName; + private String connectedBus; + private String monitoringTerminalCode; + private String monitoringTerminalName; + private String powerSubstationName; + private String reason; + + + + + + +} diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/SupervisionTempLineRunTestController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/SupervisionTempLineRunTestController.java index d75566750..162eae637 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/SupervisionTempLineRunTestController.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/SupervisionTempLineRunTestController.java @@ -1,16 +1,27 @@ package com.njcn.supervision.controller.device; +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.supervision.pojo.param.device.SupervisionTempLineReportParam; +import com.njcn.supervision.pojo.param.device.SupervisionTempLineRunTestParam; +import com.njcn.supervision.pojo.vo.device.SupervisionTempLineRunTestVO; import com.njcn.supervision.service.device.ISupervisionTempLineRunTestService; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; import com.njcn.web.controller.BaseController; /** *

- * 前端控制器 + * 监测点试运行前端控制器 *

* * @author cdf @@ -23,5 +34,54 @@ public class SupervisionTempLineRunTestController extends BaseController { private final ISupervisionTempLineRunTestService iSupervisionTempLineRunTestService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType= OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增监测点试运行") + @ApiImplicitParam(name = "supervisionTempLineRunTestParam", value = "实体参数", required = true) + public HttpResult addRunTest(@RequestBody @Validated SupervisionTempLineRunTestParam supervisionTempLineRunTestParam){ + String methodDescribe = getMethodDescribe("addTempLineReport"); + iSupervisionTempLineRunTestService.addRunTest(supervisionTempLineRunTestParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + + } + + /** + * 判断是否已经开始试运行,或者试运行结束 + * @author cdf + * @date 2024/5/22 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/isTestRunStartOrEnd") + @ApiOperation("每日判断试运行是否结束") + public HttpResult isTestRunStartOrEnd(){ + String methodDescribe = getMethodDescribe("isTestRunStartOrEnd"); + iSupervisionTempLineRunTestService.isTestRunStartOrEnd(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + + } + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPDATE) + @GetMapping("/updateStatus") + @ApiOperation("修改业务审核状态") + public HttpResult updateStatus(@RequestParam("businessKey") String businessKey, @RequestParam("status")Integer status){ + String methodDescribe = getMethodDescribe("updateLineRunTestStatus"); + iSupervisionTempLineRunTestService.updateStatus(businessKey,status); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getRunTestById") + @ApiOperation("查询试运行详情") + public HttpResult getRunTestById(@RequestParam("id") String id){ + String methodDescribe = getMethodDescribe("getRunTestById"); + SupervisionTempLineRunTestVO supervisionTempLineRunTestVO = iSupervisionTempLineRunTestService.getRunTestById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, supervisionTempLineRunTestVO, methodDescribe); + } + + + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/SupervisionTempLineRunTestMapper.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/SupervisionTempLineRunTestMapper.java index c9d3d2789..1c7c8a2a5 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/SupervisionTempLineRunTestMapper.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/SupervisionTempLineRunTestMapper.java @@ -2,7 +2,9 @@ package com.njcn.supervision.mapper.device; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTest; +import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTestPO; +import com.njcn.supervision.pojo.vo.device.SupervisionTempLineRunTestVO; +import org.apache.ibatis.annotations.Param; /** *

@@ -12,6 +14,7 @@ import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTest; * @author hongawen * @since 2024-05-21 */ -public interface SupervisionTempLineRunTestMapper extends BaseMapper { +public interface SupervisionTempLineRunTestMapper extends BaseMapper { + SupervisionTempLineRunTestVO getRunTestInfo(@Param("id")String id); } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineDebugPOMapper.xml b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineDebugPOMapper.xml index 161e91a4f..b30102eaa 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineDebugPOMapper.xml +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineDebugPOMapper.xml @@ -49,7 +49,8 @@ supervision_temp_line_debug.reason reason, supervision_temp_line_run_test.process_instance_id process_instanceId, supervision_temp_line_run_test.`status` `Status`, - IFNULL(supervision_temp_line_run_test.`test_run_state`,0) `testRunState` + IFNULL(supervision_temp_line_run_test.`test_run_state`,0) `testRunState`, + supervision_temp_line_run_test.test_run_time FROM supervision_temp_line_debug inner JOIN supervision_temp_line_report ON supervision_temp_line_report.id = supervision_temp_line_debug.id diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineRunTestMapper.xml b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineRunTestMapper.xml index cea157461..4bbe6a813 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineRunTestMapper.xml +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/SupervisionTempLineRunTestMapper.xml @@ -1,5 +1,29 @@ - + + diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ISupervisionTempLineRunTestService.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ISupervisionTempLineRunTestService.java index 26864b497..e75d5340c 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ISupervisionTempLineRunTestService.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ISupervisionTempLineRunTestService.java @@ -2,7 +2,9 @@ package com.njcn.supervision.service.device; import com.baomidou.mybatisplus.extension.service.IService; -import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTest; +import com.njcn.supervision.pojo.param.device.SupervisionTempLineRunTestParam; +import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTestPO; +import com.njcn.supervision.pojo.vo.device.SupervisionTempLineRunTestVO; /** *

@@ -12,6 +14,18 @@ import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTest; * @author hongawen * @since 2024-05-21 */ -public interface ISupervisionTempLineRunTestService extends IService { +public interface ISupervisionTempLineRunTestService extends IService { + + Boolean addRunTest(SupervisionTempLineRunTestParam supervisionTempLineRunTestParam); + + void isTestRunStartOrEnd(); + + + void updateStatus(String businessKey,Integer status); + + + SupervisionTempLineRunTestVO getRunTestById(String id); + + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineRunTestServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineRunTestServiceImpl.java index e755bfd3e..e60291146 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineRunTestServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineRunTestServiceImpl.java @@ -1,12 +1,45 @@ package com.njcn.supervision.service.device.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.bpm.api.BpmProcessFeignClient; +import com.njcn.bpm.enums.BpmProcessInstanceStatusEnum; +import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.biz.commApi.CommLineClient; +import com.njcn.device.biz.enums.RunFlagEnum; +import com.njcn.device.biz.pojo.dto.LineDTO; +import com.njcn.device.pq.api.LineIntegrityClient; +import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; +import com.njcn.device.pq.pojo.param.LineDataQualityParam; +import com.njcn.supervision.mapper.device.SupervisionTempLineReportMapper; import com.njcn.supervision.mapper.device.SupervisionTempLineRunTestMapper; -import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTest; +import com.njcn.supervision.pojo.param.device.SupervisionTempLineRunTestParam; +import com.njcn.supervision.pojo.po.device.QuitRunningDevice; +import com.njcn.supervision.pojo.po.device.SupervisionTempLineReport; +import com.njcn.supervision.pojo.po.device.SupervisionTempLineRunTestPO; +import com.njcn.supervision.pojo.vo.device.SupervisionTempLineRunTestVO; import com.njcn.supervision.service.device.ISupervisionTempLineRunTestService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + + + /** *

* 服务实现类 @@ -16,6 +49,146 @@ import org.springframework.stereotype.Service; * @since 2024-05-21 */ @Service -public class SupervisionTempLineRunTestServiceImpl extends ServiceImpl implements ISupervisionTempLineRunTestService { +@RequiredArgsConstructor +public class SupervisionTempLineRunTestServiceImpl extends ServiceImpl implements ISupervisionTempLineRunTestService { + + public static final String PROCESS_KEY = "line_run_test"; + private final CommLineClient commLineClient; + + private final SupervisionTempLineReportMapper supervisionTempLineReportMapper; + + private final LineIntegrityClient lineIntegrityClient; + + private final BpmProcessFeignClient bpmProcessFeignClient; + + + @Override + public Boolean addRunTest(SupervisionTempLineRunTestParam supervisionTempLineRunTestParam) { + List ids = supervisionTempLineRunTestParam.getLineIds(); + + List supervisionTempLineReportList = supervisionTempLineReportMapper.selectBatchIds(ids); + List lineIds = supervisionTempLineReportList.stream().map(SupervisionTempLineReport::getLineId).collect(Collectors.toList()); + + List lineDTOList = commLineClient.getLineDetailBatch(lineIds).getData(); + if(lineIds.size()!=lineDTOList.size()){ + throw new BusinessException("请联系管理员检查监测点唯一编号是否匹配"); + } + + //校验 + List supervisionTempLineRunTestPOList = this.list(new LambdaQueryWrapper().in(SupervisionTempLineRunTestPO::getId,ids)); + if(CollUtil.isNotEmpty(supervisionTempLineRunTestPOList)){ + String msg = assMsg(supervisionTempLineReportList,supervisionTempLineRunTestPOList); + throw new BusinessException(msg); + } + + List poList = new ArrayList<>(); + for(SupervisionTempLineReport item:supervisionTempLineReportList){ + SupervisionTempLineRunTestPO supervisionTempLineRunTestPO = new SupervisionTempLineRunTestPO(); + supervisionTempLineRunTestPO.setId(item.getId()); + supervisionTempLineRunTestPO.setLineId(item.getLineId()); + supervisionTempLineRunTestPO.setState(DataStateEnum.ENABLE.getCode()); + supervisionTempLineRunTestPO.setStatus(9); + supervisionTempLineRunTestPO.setTestRunState(1); + supervisionTempLineRunTestPO.setSuitRate(0.00); + supervisionTempLineRunTestPO.setOnlineRate(0.00); + supervisionTempLineRunTestPO.setIntegrityRate(0.00); + supervisionTempLineRunTestPO.setTestRunTime(supervisionTempLineRunTestParam.getStartTime()+"--"+supervisionTempLineRunTestParam.getEndTime()); + supervisionTempLineRunTestPO.setProcessInstanceId("tem暂无"); + poList.add(supervisionTempLineRunTestPO); + } + this.saveBatch(poList); + return true; + } + + @Override + public void isTestRunStartOrEnd() { + LocalDateTime time = LocalDateTime.now(); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SupervisionTempLineRunTestPO::getTestRunState,1).eq(SupervisionTempLineRunTestPO::getState,DataStateEnum.ENABLE.getCode()); + List supervisionTempLineRunTestPOList = this.list(lambdaQueryWrapper); + + List usePoList = new ArrayList<>(); + for(SupervisionTempLineRunTestPO item : supervisionTempLineRunTestPOList){ + String endTime = item.getTestRunTime().split("--")[1]; + LocalDateTime end = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); + if(end.isBefore(time)){ + //结束时间在当前时间之前,则已经执行完试运行,开始组装审核条件 + usePoList.add(item); + } + } + + if(CollUtil.isNotEmpty(usePoList)){ + Map> map = usePoList.stream().collect(Collectors.groupingBy(SupervisionTempLineRunTestPO::getTestRunTime)); + map.forEach((key,val)->{ + String startTime = key.split("--")[0]; + String endTime = key.split("--")[1]; + List ids = val.stream().map(SupervisionTempLineRunTestPO::getLineId).collect(Collectors.toList()); + LineDataQualityParam lineDataQualityParam = LineDataQualityParam.builder().lineIds(ids).beginTime(startTime).endTime(endTime).build(); + List lineDataQualityDTOList = lineIntegrityClient.getLineDataQuality(lineDataQualityParam).getData(); + Map qualityDTOMap = lineDataQualityDTOList.stream().collect(Collectors.toMap(LineDataQualityDTO::getLineId,Function.identity())); + + for(SupervisionTempLineRunTestPO supervisionTempLineRunTestPO : val){ + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + BpmProcessInstanceCreateReqDTO bpmProcessInstanceCreateReqDTO = new BpmProcessInstanceCreateReqDTO(); + bpmProcessInstanceCreateReqDTO.setProcessDefinitionKey(PROCESS_KEY); + bpmProcessInstanceCreateReqDTO.setBusinessKey(supervisionTempLineRunTestPO.getId()); + bpmProcessInstanceCreateReqDTO.setStartUserSelectAssignees(new HashMap>()); + bpmProcessInstanceCreateReqDTO.setVariables(processInstanceVariables); + String processInstanceId = bpmProcessFeignClient.createProcessInstance(supervisionTempLineRunTestPO.getCreateBy(),bpmProcessInstanceCreateReqDTO).getData(); + // 将工作流的编号,更新到流程单中 + SupervisionTempLineRunTestPO po = new SupervisionTempLineRunTestPO(); + po.setId(supervisionTempLineRunTestPO.getId()); + po.setProcessInstanceId(processInstanceId); + po.setStatus(1); + po.setTestRunState(2); + + if(CollUtil.isEmpty(lineDataQualityDTOList)){ + po.setOnlineRate(0.00); + po.setIntegrityRate(0.00); + po.setSuitRate(0.00); + }else { + po.setOnlineRate(qualityDTOMap.containsKey(supervisionTempLineRunTestPO.getLineId())?qualityDTOMap.get(supervisionTempLineRunTestPO.getLineId()).getOnlineRate():0.00); + po.setIntegrityRate(qualityDTOMap.containsKey(supervisionTempLineRunTestPO.getLineId())?qualityDTOMap.get(supervisionTempLineRunTestPO.getLineId()).getIntegrityRate():0.00); + po.setSuitRate(qualityDTOMap.containsKey(supervisionTempLineRunTestPO.getLineId())?qualityDTOMap.get(supervisionTempLineRunTestPO.getLineId()).getIntegrityRate():0.00); + } + + this.baseMapper.updateById(po); + } + + + + }); + } + } + + @Override + public void updateStatus(String businessKey, Integer status) { + SupervisionTempLineRunTestPO supervisionTempLineRunTestPO = this.baseMapper.selectById(businessKey); + //如果状态为审批通过 + if (status.equals(BpmProcessInstanceStatusEnum.APPROVE.getStatus())) { + //通过,则需要远程将该装置调整为退运 + supervisionTempLineRunTestPO.setStatus(status); + } + this.updateById(supervisionTempLineRunTestPO); + } + + @Override + public SupervisionTempLineRunTestVO getRunTestById(String id) { + return this.baseMapper.getRunTestInfo(id); + } + + private String assMsg(List supervisionTempLineReportList,List supervisionTempLineRunTestPOList){ + StringBuilder builder = new StringBuilder(); + Map map = supervisionTempLineReportList.stream().collect(Collectors.toMap(SupervisionTempLineReport::getId, Function.identity())); + List ids = supervisionTempLineRunTestPOList.stream().map(SupervisionTempLineRunTestPO::getId).collect(Collectors.toList()); + for(String id:ids){ + if(map.containsKey(id)){ + builder.append(map.get(id).getPowerSubstationName()).append("_").append(map.get(id).getLineName()).append(";"); + } + } + return builder.toString(); + } }