From d2e7412333e3acb1c1dd26382f95da59125c8297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Mon, 12 Jun 2023 14:28:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=B4=E5=8A=9B?= =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E5=B7=A5=E4=BD=9C=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workTicket/entity/WorkTicketInfoEntity.java | 6 +- .../controller/MessagePushRecordController.java | 152 +++++++++++---------- .../config/controller/StAlamRecordController.java | 2 +- .../com/hnac/hzims/ticket/TicketApplication.java | 2 + .../constant/TicketProcessConstant.java | 5 + .../MachineryTicketProcessServiceImpl.java | 69 ++++++++++ .../ticket/twoTicket/constant/TicketConstant.java | 5 + .../service/impl/TicketProcessServiceImpl.java | 82 +++++++---- .../每日开工和收工时间附页.docx | Bin 0 -> 22298 bytes .../template/水力机械工作票模版.docx | Bin 39730 -> 39896 bytes 10 files changed, 219 insertions(+), 104 deletions(-) create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java create mode 100644 hzims-service/ticket/src/main/resources/template/secondary/每日开工和收工时间附页.docx diff --git a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java index ff89923..5cba624 100644 --- a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java +++ b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java @@ -480,6 +480,10 @@ public class WorkTicketInfoEntity extends TenantEntity implements Serializable { */ @ApiModelProperty("有限空间监测记录单 (true,展示附件,false,不展示附件)") private Boolean isLimited; - + /** + *每日开工和收工时间附页 + */ + @ApiModelProperty("每日开工和收工时间附页") + private Boolean isStart; } diff --git a/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessagePushRecordController.java b/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessagePushRecordController.java index 4532604..83fcb29 100644 --- a/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessagePushRecordController.java +++ b/hzims-service/message/src/main/java/com/hnac/hzims/message/controller/MessagePushRecordController.java @@ -27,91 +27,93 @@ import java.util.List; @RestController @RequestMapping("/message/record") -@Api(value = "消息推送记录",tags = "消息推送记录") +@Api(value = "消息推送记录", tags = "消息推送记录") @AllArgsConstructor public class MessagePushRecordController extends BladeController { - private final IMessagePushRecordService messagePushRecordService; + private final IMessagePushRecordService messagePushRecordService; - @PostMapping("/save") - @ApiOperation("保存消息推送") - @ApiOperationSupport(order = 1) - public R save(@RequestBody MessagePushRecordEntity request) { - return R.status(messagePushRecordService.save(request)); - } + @PostMapping("/save") + @ApiOperation("保存消息推送") + @ApiOperationSupport(order = 1) + public R save(@RequestBody MessagePushRecordEntity request) { + return R.status(messagePushRecordService.save(request)); + } - @PostMapping("/update") - @ApiOperation("更新消息推送记录") - @ApiOperationSupport(order = 2) - public R update(@RequestBody MessagePushRecordEntity request) { - return R.status(messagePushRecordService.updateById(request)); - } + @PostMapping("/update") + @ApiOperation("更新消息推送记录") + @ApiOperationSupport(order = 2) + public R update(@RequestBody MessagePushRecordEntity request) { + return R.status(messagePushRecordService.updateById(request)); + } - @GetMapping("/list") - @ApiOperation("查询消息推送记录列表") - @ApiOperationSupport(order = 3) - public R> list(MessagePushRecordEntity request) { - return R.data(messagePushRecordService.list(request)); - } + @GetMapping("/list") + @ApiOperation("查询消息推送记录列表") + @ApiOperationSupport(order = 3) + public R> list(MessagePushRecordEntity request) { + return R.data(messagePushRecordService.list(request)); + } - @GetMapping("/listPage") - @ApiOperation("分页查询消息推送记录列表") - @ApiOperationSupport(order = 4) - @OperationAnnotation( - moduleName = "消息管理", - title = "消息管理",operatorType = OperatorType.MOBILE,businessType = BusinessType.GENCODE, - action = "分页查询消息推送记录列表") - public R> listPage(MessagePushRecordEntity request, Query query) { - return R.data(messagePushRecordService.listPage(request,query)); - } + @GetMapping("/listPage") + @ApiOperation("分页查询消息推送记录列表") + @ApiOperationSupport(order = 4) + @OperationAnnotation( + moduleName = "消息管理", + title = "消息管理", operatorType = OperatorType.MOBILE, businessType = BusinessType.GENCODE, + action = "分页查询消息推送记录列表") + public R> listPage(MessagePushRecordEntity request, Query query) { + return R.data(messagePushRecordService.listPage(request, query)); + } - @GetMapping("/send/{id}") - @ApiOperation("推送消息记录") - @ApiOperationSupport(order = 5) - public R send(@PathVariable @ApiParam("消息记录ID") Long id) { - return R.data(messagePushRecordService.send(id)); - } + @GetMapping("/send/{id}") + @ApiOperation("推送消息记录") + @ApiOperationSupport(order = 5) + public R send(@PathVariable @ApiParam("消息记录ID") Long id) { + return R.data(messagePushRecordService.send(id)); + } - @GetMapping("/readMessage/{id}") - @ApiOperation("读取消息") - @ApiOperationSupport(order = 6) - public R readMessage(@PathVariable @ApiParam("消息记录ID") String id) { - MessagePushRecordEntity record = messagePushRecordService.getById(id); - if(!(Long.parseLong(record.getPusher()) == AuthUtil.getUserId())) { - return R.fail("当前登录人不是消息推送人,修改状态失败"); - } - LambdaUpdateWrapper eq = Wrappers.lambdaUpdate() - .set(MessagePushRecordEntity::getStatus, MessageConstants.CONFIRM) - .set(MessagePushRecordEntity::getRespondTime, LocalDateTime.now()) - .in(MessagePushRecordEntity::getId, Func.toLongList(",",id)); - return R.status(messagePushRecordService.update(eq)); - } + @GetMapping("/readMessage/{id}") + @ApiOperation("读取消息") + @ApiOperationSupport(order = 6) + public R readMessage(@PathVariable @ApiParam("消息记录ID") String id) { + MessagePushRecordEntity record = messagePushRecordService.getById(id); + if (!(Long.parseLong(record.getPusher()) == AuthUtil.getUserId())) { + return R.fail("当前登录人不是消息推送人,修改状态失败"); + } + LambdaUpdateWrapper eq = Wrappers.lambdaUpdate() + .set(MessagePushRecordEntity::getStatus, MessageConstants.CONFIRM) + .set(MessagePushRecordEntity::getRespondTime, LocalDateTime.now()) + .in(MessagePushRecordEntity::getId, Func.toLongList(",", id)); + return R.status(messagePushRecordService.update(eq)); + } - @GetMapping("/readMessageBatch") - @ApiOperation("批量处理消息") - @ApiOperationSupport(order = 7) - public R readMessageBatch() { - LambdaUpdateWrapper eq = Wrappers.lambdaUpdate() - .set(MessagePushRecordEntity::getStatus, MessageConstants.CONFIRM) - .set(MessagePushRecordEntity::getRespondTime, LocalDateTime.now()) - .eq(MessagePushRecordEntity::getPusher, AuthUtil.getUserId()) - .eq(MessagePushRecordEntity::getStatus, MessageConstants.PUSH_SUCCESS); - return R.status(messagePushRecordService.update(eq)); - } + @GetMapping("/readMessageBatch") + @ApiOperation("批量处理消息") + @ApiOperationSupport(order = 7) + public R readMessageBatch() { + LambdaUpdateWrapper eq = Wrappers.lambdaUpdate() + .set(MessagePushRecordEntity::getStatus, MessageConstants.CONFIRM) + .set(MessagePushRecordEntity::getRespondTime, LocalDateTime.now()) + .eq(MessagePushRecordEntity::getPusher, AuthUtil.getUserId()) + .eq(MessagePushRecordEntity::getStatus, MessageConstants.PUSH_SUCCESS); + return R.status(messagePushRecordService.update(eq)); + } - @GetMapping("/getPersonalUnreadMessage") - @ApiOperation("获取当前登录人待办消息") - @ApiOperationSupport(order = 8) - public R> getPersonalUnreadMessage() { - List personalUnreadMessage = messagePushRecordService.getPersonalUnreadMessage(); - return R.data(personalUnreadMessage); - } + @GetMapping("/getPersonalUnreadMessage") + @ApiOperation("获取当前登录人待办消息") + @ApiOperationSupport(order = 8) + @OperationAnnotation(moduleName = "视频集中监控", title = "视频集中监控", action = "获取当前登录人待办消息", + operatorType = OperatorType.MOBILE, businessType = BusinessType.GENCODE) + public R> getPersonalUnreadMessage() { + List personalUnreadMessage = messagePushRecordService.getPersonalUnreadMessage(); + return R.data(personalUnreadMessage); + } - @GetMapping("/getPersonalAppUnreadMessage") - @ApiOperation("获取当前登录人APP待办消息") - @ApiOperationSupport(order = 9) - public R> getPersonalAppUnreadMessage() { - List personalUnreadMessage = messagePushRecordService.getPersonalAppUnreadMessage(); - return R.data(personalUnreadMessage); - } + @GetMapping("/getPersonalAppUnreadMessage") + @ApiOperation("获取当前登录人APP待办消息") + @ApiOperationSupport(order = 9) + public R> getPersonalAppUnreadMessage() { + List personalUnreadMessage = messagePushRecordService.getPersonalAppUnreadMessage(); + return R.data(personalUnreadMessage); + } } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/controller/StAlamRecordController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/controller/StAlamRecordController.java index 6792ec4..cbafd76 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/controller/StAlamRecordController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/controller/StAlamRecordController.java @@ -77,7 +77,7 @@ public class StAlamRecordController { @GetMapping("/listPage") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入vo") - @OperationAnnotation(title = "系统预警处理", operatorType = OperatorType.MOBILE, + @OperationAnnotation(moduleName = "数据查询",title = "系统预警处理", operatorType = OperatorType.MOBILE, businessType = BusinessType.GENCODE,action = "分页查询") public R> list(StAlarmRecordVo vo, Query query) { return R.data(stAlamRecordService.doPageList(Condition.getPage(query), vo)); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java index 6a636a8..f4f7b31 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java @@ -4,6 +4,8 @@ import com.hnac.hzims.ticket.constants.TicketConstants; import org.mybatis.spring.annotation.MapperScan; import org.springblade.core.cloud.feign.EnableBladeFeign; import org.springblade.core.launch.BladeApplication; +import org.springblade.core.mp.plugins.SqlLogInterceptor; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cloud.client.SpringCloudApplication; diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/constant/TicketProcessConstant.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/constant/TicketProcessConstant.java index 1ad02a8..5a2ee63 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/constant/TicketProcessConstant.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/constant/TicketProcessConstant.java @@ -20,4 +20,9 @@ public class TicketProcessConstant { * 操作票 */ public static final String OPERATION_TICKET_KEY = "moreActionBankDirect"; + + /** + * 水力机械工作票 + */ + public static final String MACHINERY_TICKET_KEY = "machinery"; } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java new file mode 100644 index 0000000..bbc5cdf --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java @@ -0,0 +1,69 @@ +package com.hnac.hzims.ticket.processflow.strategy.serviceimpl; + +import com.hnac.hzims.ticket.processflow.service.ProcessDictService; +import com.hnac.hzims.ticket.processflow.strategy.abstracts.ProcessAbstractService; +import com.hnac.hzims.ticket.processflow.strategy.entity.WorkflowQueue; +import com.hnac.hzims.ticket.response.ProcessWorkFlowResponse; +import com.hnac.hzims.ticket.twoTicket.service.TicketProcessService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import static com.hnac.hzims.ticket.processflow.constant.TicketProcessConstant.FIRST_TICKET_KEY; +import static com.hnac.hzims.ticket.processflow.constant.TicketProcessConstant.MACHINERY_TICKET_KEY; + +/** + * 水力机械工作票实现类 + * + * @Author dfy + * @Version v1.0 + * @Serial 1.0 + * @Date 2023/3/28 8:47 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class MachineryTicketProcessServiceImpl extends ProcessAbstractService { + + + + private final TicketProcessService ticketProcessService; + + + + private final ProcessDictService processDictService; + + + + + + + + /** + * 设置执行那种实现类 + * + * @param flowQueue + * @return + */ + @Override + public Boolean isWorkflowProcess(WorkflowQueue flowQueue) { + log.info("是否执行水力机械工作票流程环节操作~~~~,流程ticket: {}", flowQueue); + String dictValue = processDictService.selectDictValueByKey(MACHINERY_TICKET_KEY); + if (dictValue.equals(flowQueue.getProcessDefinitionKey())) { + log.info("已执行水力机械工作票流程环节操作~~~~"); + return true; + } + log.error("未是否执行水力机械工作票流程环节操作,请联系管理员~~~~"); + return false; + } + + /** + * 两票管理业务方法 + * + * @param response + */ + @Override + public void calculate(ProcessWorkFlowResponse response) { + ticketProcessService.findPending(response); + } +} diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java index f74288f..3985daa 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/constant/TicketConstant.java @@ -55,4 +55,9 @@ public class TicketConstant { */ public static final String SPACE_PAGE = "/secondary/有限空间监测记录单.docx"; + /** + * 每日开工和收工时间附页 + */ + public static final String START_PAGE = "/secondary/每日开工和收工时间附页.docx"; + } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java index 4b9fe05..cf88996 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java @@ -74,6 +74,7 @@ import java.util.*; import java.util.stream.Collectors; import static com.hnac.hzims.ticket.processflow.constant.TicketProcessConstant.FIRST_TICKET_KEY; +import static com.hnac.hzims.ticket.processflow.constant.TicketProcessConstant.MACHINERY_TICKET_KEY; /** @@ -191,7 +192,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { } signage = signage.length() == 2 ? station.getSignage() : station.getSignage().substring(0, 2); - workTicketVo.getWorkTicket().setSignage(signage); + workTicketVo.getWorkTicket().setSignage(station.getSignage()); workTicketVo.getWorkTicket().setSignageCode(station.getCode()); //2. 获取编码 String code = processIdWorker.getTicketByCode(workTicketVo.getWorkTicket().getSignage(), this.getTicketWichCode(workTicketVo.getWorkTicket().getType()), @@ -204,7 +205,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { //5. 保存工作任务 this.saveWorkTicketContentDto(workTicketVo.getWorkTicketContentDtoList(), workTicketVo.getWorkTicket()); //6. 查询第一种工作票值 - String dictValue = processDictService.selectDictValueByKey(FIRST_TICKET_KEY); + String dictValue = getDictValue(workTicketVo); //7. 开启动作流 this.dealProcess(dictValue, workTicketVo); //8. 处理任务 @@ -213,6 +214,23 @@ public class TicketProcessServiceImpl implements TicketProcessService { } /** + * 验证是走那种工作票流程,默认走第一种工作票 + * + * @param workTicketVo + * @return + */ + private String getDictValue(WorkTicketVo workTicketVo) { + String key = FIRST_TICKET_KEY; + if ("6".equals(workTicketVo.getWorkTicket().getType()) || "7".equals(workTicketVo.getWorkTicket().getType())) { + key = FIRST_TICKET_KEY; + } else if ("8".equals(workTicketVo.getWorkTicket().getType())) { + key = MACHINERY_TICKET_KEY; + } + String dictValue = processDictService.selectDictValueByKey(key); + return dictValue; + } + + /** * 待处理 * * @param response @@ -339,7 +357,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { e.printStackTrace(); } - //工作开始时间和结束时间 + // 工作开始时间和结束时间 // List workTicketOperateTimeEntities = workTicketVo.getWorkTicketOperateTimeEntities(); // if (CollectionUtils.isNotEmpty(workTicketOperateTimeEntities)) { // log.info("工作开始时间和结束时间:{}", workTicketFinish); @@ -438,7 +456,6 @@ public class TicketProcessServiceImpl implements TicketProcessService { message.setPusherName(user.getName()); } message.setAccount(userId); - message.setCreateUser(NumberUtils.toLong(userId)); messageClient.sendMessage(message); log.info("推送消息成功,用户名称{},消息{}", user.getName(), message); @@ -476,18 +493,6 @@ public class TicketProcessServiceImpl implements TicketProcessService { } //如果response.getHandleType() 是1使角色 if ("1".equals(response.getHandleType())) { - //根据角色别名获取用户信息 - // try { - // R> roleAlias = userClient.relationUserListByRoleAlias(workTicket.getTenantId(), workTicket.getCreateDept(), response.getNextStepOperator()); - // String collect = roleAlias.getData().stream().map(item -> item.getName()).collect(Collectors.joining(",")); - // flowDescription = "审批中,当前环节是".concat(response.getTaskName()).concat(",待").concat(collect).concat("审批"); - // workTicket.setNextStepOperator(collect); - // } catch (Exception e) { - // e.printStackTrace(); - // log.error("R> roleAlias = userClient.userListByRoleAlias(workTicket.getTenantId(), response.getNextStepOperator())"); - // log.error("获取用户信息失败"); - // workTicket.setNextStepOperator(null); - // } workTicket.setFlowUserId(response.getUserId()); workTicket.setNextStepOperator(response.getNextStepOperator()); flowDescription = "审批中,当前环节是".concat(response.getTaskName()).concat(",待").concat(response.getNextStepOperator()).concat("审批"); @@ -497,7 +502,6 @@ public class TicketProcessServiceImpl implements TicketProcessService { String taskId = response.getTaskId(); if (StringUtils.isEmpty(taskId)) { workTicket.setFlowDescription("结束"); - // workTicket.setFlowTaskId(" "); workTicket.setFlowTaskName("结束"); workTicket.setNextStepOperator(" "); workTicket.setStepOperator(" "); @@ -507,6 +511,27 @@ public class TicketProcessServiceImpl implements TicketProcessService { workTicket.setFlowTaskName(response.getTaskName()); workTicket.setFlowDescription(flowDescription); } + + //如果签发人为false + if (workTicket.getSignFlag() != null) { + if (!workTicket.getSignFlag()) { + workTicket.setFlowDescription("作废"); + workTicket.setFlowTaskName("作废"); + workTicket.setNextStepOperator(" "); + workTicket.setStepOperator(" "); + } + + } + + //运行人员false + if (workTicket.getRecieveFlag() != null) { + if (!workTicket.getRecieveFlag()) { + workTicket.setFlowDescription("作废"); + workTicket.setFlowTaskName("作废"); + workTicket.setNextStepOperator(" "); + workTicket.setStepOperator(" "); + } + } } @@ -606,6 +631,9 @@ public class TicketProcessServiceImpl implements TicketProcessService { // } Map params = new HashMap<>(4); params.put("workTicketVo", workTicketVo); + if ("8".equals(workTicketVo.getWorkTicket().getType())) { + params.put("principal", "taskUser_" + workTicketVo.getWorkTicket().getPrincipal()); + } //已开启流程 R processInstanceContainNameByKey = flowClient.startProcessInstanceContainNameByKey(newFirstWorkTicketFlowKey, String.valueOf(workTicketVo.getWorkTicket().getId()), workTicketVo.getWorkTicket().getWorkContent(), params); log.info("processInstanceContainNameByKey.isSuccess() : {}", processInstanceContainNameByKey.isSuccess()); @@ -771,14 +799,14 @@ public class TicketProcessServiceImpl implements TicketProcessService { } WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket(); - if ((workTicket.getIsSafety() == null && workTicket.getIsHazard() == null && workTicket.getIsLimited() == null && workTicket.getIsRailway() == null) - || (workTicket.getIsSafety() == null || workTicket.getIsHazard() == null || workTicket.getIsLimited() == null || workTicket.getIsRailway() == null)) { + if (workTicket.getIsSafety() == null && workTicket.getIsHazard() == null && workTicket.getIsLimited() == null && workTicket.getIsRailway() == null + && workTicket.getIsStart() == null) { extractedWithWord(response, resultMap, status); return; } //如果4个多为false 或为空 附件不展示附件 - if (!workTicket.getIsSafety() && !workTicket.getIsHazard() && !workTicket.getIsLimited() && !workTicket.getIsRailway()) { + if (!workTicket.getIsSafety() && !workTicket.getIsHazard() && !workTicket.getIsLimited() && !workTicket.getIsRailway() && !workTicket.getIsStart()) { extractedWithWord(response, resultMap, status); return; } @@ -801,22 +829,22 @@ public class TicketProcessServiceImpl implements TicketProcessService { //安全隔离措施附页 (true,展示附件,false,不展示附件) if (workTicket.getIsSafety()) { addFile(prefix, TicketConstant.SECURE_PAGE, docFileList); - // setWorkTicketPrincipalChange(docFileList); } //危险点分析与预控措施票 (true,展示附件,false,不展示附件) if (workTicket.getIsSafety()) { addFile(prefix, TicketConstant.SAFETY_PAGE, docFileList); - // setWorkTicketHazardPointChange(docFileList); } //动火工作票 (true,展示附件,false,不展示附件) if (workTicket.getIsRailway()) { addFile(prefix, TicketConstant.FLIGHT_PAGE, docFileList); - // setWorkTicketRailwayChange(docFileList); } //有限空间监测记录单(true,展示附件,false,不展示附件) if (workTicket.getIsLimited()) { addFile(prefix, TicketConstant.SPACE_PAGE, docFileList); - // setWorkTicketLimitedChange(docFileList); + } + //每日开工和收工时间附页 + if (workTicket.getIsStart()) { + addFile(prefix, TicketConstant.START_PAGE, docFileList); } String name = LocalDate.now() + "-" + UUID.randomUUID().toString().replaceAll("-", ""); @@ -832,11 +860,11 @@ public class TicketProcessServiceImpl implements TicketProcessService { log.info("输出word路径:{}", docPath); //第一种工作票 - resultMap.put("one", status == 1 ? "☑":"□"); + resultMap.put("one", status == 1 ? "☑" : "□"); //第二种工作票 - resultMap.put("two", status == 2 ? "☑":"□"); + resultMap.put("two", status == 2 ? "☑" : "□"); //水力机器工作票 - resultMap.put("three", status == 3 ? "☑":"□"); + resultMap.put("three", status == 3 ? "☑" : "□"); //导入文档 File file = new File(docPath); MergeDocUtils.mergeDoc(docFileList, file); diff --git a/hzims-service/ticket/src/main/resources/template/secondary/每日开工和收工时间附页.docx b/hzims-service/ticket/src/main/resources/template/secondary/每日开工和收工时间附页.docx new file mode 100644 index 0000000000000000000000000000000000000000..43cab96ded239ebdcb9bc6007bac154b665f875d GIT binary patch literal 22298 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 Hw+H$^mgE6( literal 0 HcmV?d00001 diff --git a/hzims-service/ticket/src/main/resources/template/水力机械工作票模版.docx b/hzims-service/ticket/src/main/resources/template/水力机械工作票模版.docx index e43e2d520d6af1cd5133670df3ccdbaead18ce79..abdde276ab96914c58c408d306dc6907aa5583d9 100644 GIT binary patch delta 17236 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 delta 17074 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 From 645d1d3b4c4fc760bf10c6a17d45350b8b4b4897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Mon, 12 Jun 2023 14:29:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/alert/controller/AbnormalAlarmController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/controller/AbnormalAlarmController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/controller/AbnormalAlarmController.java index 9602b7e..4e8804c 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/controller/AbnormalAlarmController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/controller/AbnormalAlarmController.java @@ -3,6 +3,9 @@ package com.hnac.hzims.operational.alert.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.hnac.hzims.common.logs.annotation.OperationAnnotation; +import com.hnac.hzims.common.logs.enums.BusinessType; +import com.hnac.hzims.common.logs.enums.OperatorType; import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity; import com.hnac.hzims.operational.alert.service.HistoryAbnormalAlarmService; import com.hnac.hzims.operational.alert.vo.AlarmParamVo; @@ -44,6 +47,8 @@ public class AbnormalAlarmController extends BladeController { @RequestMapping(value = "/statisticsTime", method = {RequestMethod.GET, RequestMethod.POST}) @ApiOperationSupport(order = 1) @ApiOperation(value = "统计通讯中断时间", notes = "传入imsDutyMainEntity") + @OperationAnnotation(moduleName = "通讯告警统计",title = "通讯告警统计", operatorType = OperatorType.MOBILE, + businessType = BusinessType.GENCODE,action = "统计通讯中断时间") public R> statisticsTime(HistoryAlarmVo entity, Query query) { IPage pages = service.getAlarmTime(query,entity); return R.data(pages); From 6316cbf9f922bbc86d5bd411dbffadb851db1289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Mon, 12 Jun 2023 16:21:35 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E5=92=8C=E6=9C=88=E4=BB=BD=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../defect/entity/OperPhenomenonEntity.java | 21 ------- .../web/AreaMonthlyDetailsController.java | 3 +- .../operational/main/vo/OperPhenomenonVo.java | 69 ++++++++++++++++++++++ 3 files changed, 71 insertions(+), 22 deletions(-) create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperPhenomenonEntity.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperPhenomenonEntity.java index c61c6cc..bbcd030 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperPhenomenonEntity.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/defect/entity/OperPhenomenonEntity.java @@ -287,25 +287,4 @@ public class OperPhenomenonEntity extends TenantEntity { @JsonSerialize(nullsUsing = NullSerializer.class) @ApiModelProperty(value = "核算工时") private Integer checkHours; - - - @ApiModelProperty(value = "年月") - @TableField(exist = false) - private YearMonth yearMonth; - - - @ApiModelProperty(value = "年月") - @TableField(exist = false) - private String areaId; - - - @ApiModelProperty(value = "是否为缺陷 直接传0") - @TableField(exist = false) - private Integer defect; - - - @ApiModelProperty(value = "已定论1") - @TableField(exist = false) - private Integer conclusionStatusNum; - } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java index 9f85d7d..7504c75 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java @@ -17,6 +17,7 @@ import com.hnac.hzims.operational.defect.vo.OperDefectVO; import com.hnac.hzims.operational.defect.vo.OperPhenomenonVO; import com.hnac.hzims.operational.defect.wrapper.OperPhenomenonWrapper; import com.hnac.hzims.operational.main.service.AreaMonthlyDetailsService; +import com.hnac.hzims.operational.main.vo.OperPhenomenonVo; import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService; import com.hnac.hzims.safeproduct.areamonthly.vo.CheckCompanyVo; @@ -206,7 +207,7 @@ public class AreaMonthlyDetailsController { public R> queryDefectPageList( @ApiParam(name = "page", value = "当前页", required = true) @PathVariable("page") Long page, @ApiParam(name = "size", value = "每页记录数", required = true) @PathVariable("size") Long size, - OperPhenomenonEntity entity, String taskIds, Date findTimeEnd) { + OperPhenomenonVo entity, String taskIds, Date findTimeEnd) { Page operDefectEntityPage = new Page<>(page, size); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtil.isNotBlank(taskIds)) { diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java new file mode 100644 index 0000000..6d75a79 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java @@ -0,0 +1,69 @@ +package com.hnac.hzims.operational.main.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.YearMonth; +import java.util.Date; + +/** + * @Author WL + * @Version v1.0 + * @Serial 1.0 + * @Date 2023/6/12 15:59 + */ +@Data +public class OperPhenomenonVo { + + /** + * 发现时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "发现时间") + private Date findTime; + + /** + * 甄别状态:已甄别 1 和未甄别 0 ,默认0 + */ + @ApiModelProperty(value = "甄别状态:已甄别 1 和未甄别 0 ,默认0") + private String discriminateStatus; + + /** + * 计划开始时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "计划开始时间") + private Date planStartTime; + /** + * 计划结束时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "计划结束时间") + private Date planEndTime; + + + + @ApiModelProperty(value = "年月") + @TableField(exist = false) + private YearMonth yearMonth; + + + @ApiModelProperty(value = "年月") + private String areaId; + + + @ApiModelProperty(value = "是否为缺陷 直接传0") + @TableField(exist = false) + private Integer defect; + + + @ApiModelProperty(value = "已定论1") + private Integer conclusionStatusNum; + +} From a74a794b389c84b9e8b02cc4addc7dd4734e2940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Mon, 12 Jun 2023 16:46:06 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E5=92=8C=E6=9C=88=E4=BB=BD=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/AreaMonthlyDetailsController.java | 33 ++++++++++++++++++++-- .../operational/main/vo/OperPhenomenonVo.java | 30 +++++++++++++++++++- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java index 7504c75..7e3d4b7 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/web/AreaMonthlyDetailsController.java @@ -2,6 +2,7 @@ package com.hnac.hzims.operational.main.controller.web; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.google.common.collect.Lists; @@ -38,6 +39,9 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.support.BladePage; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.api.R; @@ -210,6 +214,29 @@ public class AreaMonthlyDetailsController { OperPhenomenonVo entity, String taskIds, Date findTimeEnd) { Page operDefectEntityPage = new Page<>(page, size); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //部门 + if (CollectionUtils.isNotEmpty(entity.getCreateDept())) { + queryWrapper.in(BaseEntity::getCreateDept, entity.getCreateDept()); + } + + if (StringUtils.isNotEmpty(entity.getDefectCode())) { + queryWrapper.eq(OperPhenomenonEntity::getDefectCode, entity.getDefectCode()); + } + + + if (StringUtils.isNotEmpty(entity.getSourceCode())) { + queryWrapper.eq(OperPhenomenonEntity::getSourceCode, entity.getSourceCode()); + } + + + if (StringUtils.isNotEmpty(entity.getFaultName())) { + queryWrapper.eq(OperPhenomenonEntity::getFaultName, entity.getFaultName()); + } + + if (ObjectUtils.isNotEmpty(entity.getDefectLevel())){ + queryWrapper.eq(OperPhenomenonEntity::getDefectLevel, entity.getDefectLevel()); + } + if (StringUtil.isNotBlank(taskIds)) { queryWrapper.in(OperPhenomenonEntity::getId, Lists.newArrayList(taskIds.split(","))); } @@ -240,14 +267,14 @@ public class AreaMonthlyDetailsController { queryWrapper.orderByDesc(OperPhenomenonEntity::getUpdateTime); IPage pages = phenomenonService.page(operDefectEntityPage, queryWrapper); - Integer defect = entity.getDefect() == null ? 0 : entity.getDefect(); + Integer defect = entity.getDefect() == null ? 0 : entity.getDefect(); Integer conclusionStatusNum = entity.getConclusionStatusNum() == null ? 1 : entity.getConclusionStatusNum(); //过滤 List collect = pages.getRecords().stream().filter(item -> (defect.equals(item.getIsDefect()) || conclusionStatusNum.equals(item.getDiscriminateStatus() != null ? - Integer.parseInt(item.getDiscriminateStatus()) : null))) - .collect(Collectors.toList()); + Integer.parseInt(item.getDiscriminateStatus()) : null))) + .collect(Collectors.toList()); pages.setRecords(collect); pages.setTotal(collect.size()); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java index 6d75a79..70fefb6 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/vo/OperPhenomenonVo.java @@ -8,6 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.time.YearMonth; import java.util.Date; +import java.util.List; /** * @Author WL @@ -19,6 +20,34 @@ import java.util.Date; public class OperPhenomenonVo { /** + * 缺陷等级 + */ + private String defectLevel; + + /** + * 故障 + */ + private String faultName; + + /** + * 缺陷来源 + */ + private String sourceCode; + + + /** + * 所属机构 + */ + private List createDept; + + + /** + * 缺陷编码 + */ + private String defectCode; + + + /** * 发现时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @@ -48,7 +77,6 @@ public class OperPhenomenonVo { private Date planEndTime; - @ApiModelProperty(value = "年月") @TableField(exist = false) private YearMonth yearMonth; From bc3b9e9dae680ca96efcbbc31f9b015485eb6ec5 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Tue, 13 Jun 2023 10:28:10 +0800 Subject: [PATCH 5/5] =?UTF-8?q?#=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=8A=BD=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ecology/entity/EcologyFlowDataEntity.java | 43 +++++ .../ecology/entity/EcologyFlowStationEntity.java | 29 ++++ .../operational/ecology/vo/DemonstrateTopVo.java | 23 +++ .../ecology/vo/EcologFlowStationVo.java | 32 ++++ .../hzims/operational/ecology/vo/TrendChartVo.java | 29 ++++ .../equipment/service/impl/EmInfoServiceImpl.java | 7 +- .../service/impl/AbnormalAlarmServiceImpl.java | 2 +- .../alert/service/impl/LevelAlarmServiceImpl.java | 1 + .../config/scheduled/StAlamRecordTask.java | 15 +- .../service/impl/StFocusPropertiesServiceImpl.java | 4 + .../ecology/controller/EcologyController.java | 185 +++++++++++++++++++++ .../ecology/mapper/EcologyFlowDataMapper.java | 11 ++ .../ecology/mapper/EcologyFlowDataMapper.xml | 5 + .../ecology/mapper/EcologyFlowStationMapper.java | 11 ++ .../ecology/mapper/EcologyFlowStationMapper.xml | 4 + .../ecology/service/EcologyFlowDataService.java | 14 ++ .../ecology/service/EcologyFlowStationService.java | 22 +++ .../service/impl/EcologyFlowDataServiceImpl.java | 30 ++++ .../impl/EcologyFlowStationServiceImpl.java | 145 ++++++++++++++++ .../main/service/impl/HydropowerServiceImpl.java | 2 +- 20 files changed, 602 insertions(+), 12 deletions(-) create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowDataEntity.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowStationEntity.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/DemonstrateTopVo.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/EcologFlowStationVo.java create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/TrendChartVo.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/controller/EcologyController.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.xml create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.xml create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowDataService.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowStationService.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowDataServiceImpl.java create mode 100644 hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowStationServiceImpl.java diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowDataEntity.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowDataEntity.java new file mode 100644 index 0000000..3524b4f --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowDataEntity.java @@ -0,0 +1,43 @@ +package com.hnac.hzims.operational.ecology.entity; + +import com.baomidou.mybatisplus.annotation.SqlCondition; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.support.QueryField; +import org.springblade.core.tenant.mp.TenantEntity; + +import java.math.BigDecimal; + +/** + * @author ysj + */ +@Data +@TableName("ecology_flow_data") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "生态流量数据表", description = "生态流量数据表") +public class EcologyFlowDataEntity extends TenantEntity { + + @ApiModelProperty(value = "站点编号") + private Long stationId; + + @ApiModelProperty(value = "月份") + private String mon; + + @ApiModelProperty(value = "站点名称") + private String stationName; + + @ApiModelProperty(value = "在线率") + private BigDecimal onLine; + + @ApiModelProperty(value = "达标率") + private BigDecimal demonstrate; + + @ApiModelProperty(value = "及时率") + private BigDecimal timely; + + @ApiModelProperty(value = "完整率") + private BigDecimal complete; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowStationEntity.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowStationEntity.java new file mode 100644 index 0000000..ce4d7e8 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/entity/EcologyFlowStationEntity.java @@ -0,0 +1,29 @@ +package com.hnac.hzims.operational.ecology.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.tenant.mp.TenantEntity; + +/** + * @author ysj + */ +@Data +@TableName("ecology_flow_station") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "生态流量站点表", description = "生态流量站点表") +public class EcologyFlowStationEntity extends TenantEntity { + + private Long stationId; + + private String stationName; + + private Long isOnLine; + + private Long isDemonstrate; + + private Long isTimely; + + private Long isComplete; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/DemonstrateTopVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/DemonstrateTopVo.java new file mode 100644 index 0000000..4172270 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/DemonstrateTopVo.java @@ -0,0 +1,23 @@ +package com.hnac.hzims.operational.ecology.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +/** + * @author ysj + */ +@Data +public class DemonstrateTopVo { + + @ApiModelProperty(value = "站点编号") + private Long stationId; + + @ApiModelProperty(value = "站点名称") + private String stationName; + + @ApiModelProperty(value = "达标率") + private BigDecimal demonstrate; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/EcologFlowStationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/EcologFlowStationVo.java new file mode 100644 index 0000000..6207709 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/EcologFlowStationVo.java @@ -0,0 +1,32 @@ +package com.hnac.hzims.operational.ecology.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + + +/** + * @author ysj + */ +@Data +public class EcologFlowStationVo { + + @ApiModelProperty("达标率") + private Double demonstrate; + + @ApiModelProperty("及时率") + private Double timely; + + @ApiModelProperty("完整率") + private Double complete; + + @ApiModelProperty("在线率") + private Double onLine; + + @ApiModelProperty("接入站点数量") + private Integer count; + + @ApiModelProperty("达标率排行榜") + List tops; +} diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/TrendChartVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/TrendChartVo.java new file mode 100644 index 0000000..a3cfdfe --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/ecology/vo/TrendChartVo.java @@ -0,0 +1,29 @@ +package com.hnac.hzims.operational.ecology.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + + +/** + * @author ysj + */ +@Data +public class TrendChartVo { + + @ApiModelProperty("时间") + private Integer ts; + + @ApiModelProperty("及时率") + private Double timely; + + @ApiModelProperty("完整率") + private Double complete; + + @ApiModelProperty("在线率") + private Double onLine; + + @ApiModelProperty("达标率") + private Double demonstrate; +} diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java index e267ba3..0b0c69a 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/equipment/service/impl/EmInfoServiceImpl.java @@ -454,11 +454,10 @@ public class EmInfoServiceImpl extends BaseServiceImpl signages = analys.stream().filter(o-> item.getEmCode().equals(o.getDeviceCode()) && !StringUtil.isEmpty(o.getSignage()) && !StringUtil.isEmpty(o.getRealId())).collect(Collectors.toList()); - if(CollectionUtil.isEmpty(signages)){ - return; + if(CollectionUtil.isNotEmpty(signages)){ + // list -> map + item.setPoint(signages.stream().collect(Collectors.toMap(AnalyzeCodeBySignagesVO::getSignage,AnalyzeCodeBySignagesVO::getRealId))); } - // list -> map - item.setPoint(signages.stream().collect(Collectors.toMap(AnalyzeCodeBySignagesVO::getSignage,AnalyzeCodeBySignagesVO::getRealId))); // 寻找设备配置参数 List itemParamList = paramList.stream().filter(o->item.getId().equals(o.getInfoId())).collect(Collectors.toList()); if(CollectionUtil.isNotEmpty(itemParamList)){ diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java index a5a3966..c80cfdf 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java @@ -218,12 +218,12 @@ public class AbnormalAlarmServiceImpl extends BaseServiceImpl deptName = sysClient.getDeptName(depts.get(0)); if (deptName.isSuccess()) { message.setDeptName(deptName.getData()); } User admin = userClient.userByAccount("200000", "admin").getData(); - message.setCreateDept(admin.getCreateDept()); message.setCreateUser(admin.getId()); result.getData().forEach(user->{ message.setPusher(String.valueOf(user.getId())); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java index 25c78ad..24bc744 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/LevelAlarmServiceImpl.java @@ -184,6 +184,7 @@ public class LevelAlarmServiceImpl implements LevelAlarmService { message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH)); message.setPushType(MessageConstants.IMMEDIATELY); message.setDeptId(dept); + message.setCreateDept(dept); R deptName = sysClient.getDeptName(dept); if (deptName.isSuccess()) { message.setDeptName(deptName.getData()); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java index 823dcb0..06a5712 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java @@ -10,6 +10,7 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; @@ -52,9 +53,10 @@ public class StAlamRecordTask { * realId获取 * @return ReturnT */ - @XxlJob(REAL_ID_DATA) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT realIdData(String param) throws Exception { + //@XxlJob(REAL_ID_DATA) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT realIdData() throws Exception { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } @@ -66,9 +68,10 @@ public class StAlamRecordTask { * 站点实时数据 * @return ReturnT */ - @XxlJob(REAL_TIME_DATA) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT realTimeData(String param) throws Exception { + //@XxlJob(REAL_TIME_DATA) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT realTimeData() throws Exception { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StFocusPropertiesServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StFocusPropertiesServiceImpl.java index 6fb73bf..4c75b43 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StFocusPropertiesServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StFocusPropertiesServiceImpl.java @@ -22,6 +22,7 @@ import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeCodeBySignagesVO; import com.hnac.hzinfo.sdk.analyse.po.MultiAnalyzeCodePO; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.MapUtils; import org.springblade.core.log.logger.BladeLogger; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; @@ -137,6 +138,9 @@ public class StFocusPropertiesServiceImpl extends BaseServiceImpl result = new ArrayList<>(); for(EminfoAndEmParamVo device : filters){ + if(MapUtils.isEmpty(device.getPoint())){ + continue; + } result.addAll(device.getPoint().values()); } return result; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/controller/EcologyController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/controller/EcologyController.java new file mode 100644 index 0000000..d22ac36 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/controller/EcologyController.java @@ -0,0 +1,185 @@ +package com.hnac.hzims.operational.ecology.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowDataEntity; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowStationEntity; +import com.hnac.hzims.operational.ecology.service.EcologyFlowDataService; +import com.hnac.hzims.operational.ecology.service.EcologyFlowStationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.log.annotation.ApiLog; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * @author ysj + */ +@Api(tags = {"生态流量监测中心"}) +@RestController +@AllArgsConstructor +@RequestMapping("/ecology") +public class EcologyController extends BladeController { + + private final EcologyFlowStationService stationService; + + private final EcologyFlowDataService dataService; + + + /** + * 数据初始化 + * @return + */ + @PostMapping("/generate") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "数据生成", notes = "数据生成") + public R generate(@RequestParam Long mon,@RequestParam String year) { + return R.status(stationService.generate(mon,year)); + } + + + /** + * 站点数据排行 + * @return + */ + @PostMapping("/station_top") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "站点数据及达标率排行", notes = "站点数据及达标率排行") + public R station_top() { + return R.data(stationService.station_top()); + } + + /** + * 站点数据排行 + * @return + */ + @PostMapping("/trend_chart") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "指标趋势图", notes = "指标趋势图") + public R trend_chart(@RequestParam String type) { + return R.data(stationService.trend_chart(type)); + } + + + /** + * 生态流量站点新增或修改 + * @param entity + * @return + */ + @PostMapping("/station/submit") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "新增或修改", notes = "EcologyFlowStationEntity") + public R station_submit(@Valid @RequestBody EcologyFlowStationEntity entity) { + return R.status(stationService.saveOrUpdate(entity)); + } + + + /** + * 生态流量站点删除 + * @param ids + * @return + */ + @PostMapping("/station/remove") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "逻辑删除", notes = "传入ids") + public R station_remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { + return R.status(stationService.deleteLogic(Func.toLongList(ids))); + } + + + /** + * 生态流量站点列表查询 + * @param entity + * @param query + * @return + */ + @ApiLog + @GetMapping("/station/list") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "分页", notes = "EcologyFlowStationEntity") + public R> station_list(EcologyFlowStationEntity entity, Query query) { + IPage pages = stationService.page(Condition.getPage(query), Condition.getQueryWrapper(entity)); + return R.data(pages); + } + + /** + * 生态流量站点详情 + * @param entity + * @return + */ + @ApiLog + @RequestMapping(value = "/station/detail", method = {RequestMethod.GET, RequestMethod.POST}) + @ApiOperationSupport(order = 4) + @ApiOperation(value = "详情", notes = "EcologyFlowStationEntity") + public R station_detail(EcologyFlowStationEntity entity) { + EcologyFlowStationEntity detail = stationService.getOne(Condition.getQueryWrapper(entity)); + return R.data(detail); + } + + + + + /** + * 生态流量站点新增或修改 + * @param entity + * @return + */ + @PostMapping("/data/submit") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "新增或修改", notes = "EcologyFlowDataEntity") + public R data_submit(@Valid @RequestBody EcologyFlowDataEntity entity) { + return R.status(dataService.saveOrUpdate(entity)); + } + + + /** + * 生态流量站点删除 + * @param ids + * @return + */ + @PostMapping("/data/remove") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "逻辑删除", notes = "传入ids") + public R data_remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { + return R.status(dataService.deleteLogic(Func.toLongList(ids))); + } + + + /** + * 生态流量站点列表查询 + * @param entity + * @param query + * @return + */ + @ApiLog + @GetMapping("/data/list") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "分页", notes = "EcologyFlowdataEntity") + public R> data_list(EcologyFlowDataEntity entity, Query query) { + IPage pages = dataService.page(Condition.getPage(query), Condition.getQueryWrapper(entity)); + return R.data(pages); + } + + /** + * 生态流量站点详情 + * @param entity + * @return + */ + @ApiLog + @RequestMapping(value = "/data/detail", method = {RequestMethod.GET, RequestMethod.POST}) + @ApiOperationSupport(order = 4) + @ApiOperation(value = "详情", notes = "EcologyFlowdataEntity") + public R data_detail(EcologyFlowDataEntity entity) { + EcologyFlowDataEntity detail = dataService.getOne(Condition.getQueryWrapper(entity)); + return R.data(detail); + } +} \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.java new file mode 100644 index 0000000..d12f8c3 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.java @@ -0,0 +1,11 @@ +package com.hnac.hzims.operational.ecology.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowDataEntity; + +/** + * @author YSJ + */ +public interface EcologyFlowDataMapper extends BaseMapper { + +} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.xml b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.xml new file mode 100644 index 0000000..f7f8653 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowDataMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.java new file mode 100644 index 0000000..69b6e46 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.java @@ -0,0 +1,11 @@ +package com.hnac.hzims.operational.ecology.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowStationEntity; + +/** + * @author YSJ + */ +public interface EcologyFlowStationMapper extends BaseMapper { + +} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.xml b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.xml new file mode 100644 index 0000000..a2ab497 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/mapper/EcologyFlowStationMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowDataService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowDataService.java new file mode 100644 index 0000000..3e2c7e6 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowDataService.java @@ -0,0 +1,14 @@ +package com.hnac.hzims.operational.ecology.service; + +import com.hnac.hzims.operational.ecology.entity.EcologyFlowDataEntity; +import com.hnac.hzims.operational.ecology.vo.TrendChartVo; +import org.springblade.core.mp.base.BaseService; + +import java.util.List; + +/** + * 告警处理接口 + * @author ysj + */ +public interface EcologyFlowDataService extends BaseService { +} \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowStationService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowStationService.java new file mode 100644 index 0000000..801576b --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/EcologyFlowStationService.java @@ -0,0 +1,22 @@ +package com.hnac.hzims.operational.ecology.service; + +import com.hnac.hzims.operational.ecology.entity.EcologyFlowStationEntity; +import com.hnac.hzims.operational.ecology.vo.EcologFlowStationVo; +import com.hnac.hzims.operational.ecology.vo.TrendChartVo; +import org.springblade.core.mp.base.BaseService; + +import java.util.List; + +/** + * 告警处理接口 + * @author ysj + */ +public interface EcologyFlowStationService extends BaseService { + + EcologFlowStationVo station_top(); + + + Boolean generate(Long mon,String year); + + List trend_chart(String type); +} diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowDataServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowDataServiceImpl.java new file mode 100644 index 0000000..77c7365 --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowDataServiceImpl.java @@ -0,0 +1,30 @@ +package com.hnac.hzims.operational.ecology.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowDataEntity; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowStationEntity; +import com.hnac.hzims.operational.ecology.mapper.EcologyFlowDataMapper; +import com.hnac.hzims.operational.ecology.service.EcologyFlowDataService; +import com.hnac.hzims.operational.ecology.service.EcologyFlowStationService; +import com.hnac.hzims.operational.ecology.vo.TrendChartVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.DateUtil; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 历史告警实现类 + * @author ysj + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class EcologyFlowDataServiceImpl extends BaseServiceImpl implements EcologyFlowDataService { + +} \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowStationServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowStationServiceImpl.java new file mode 100644 index 0000000..8cad9ba --- /dev/null +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/ecology/service/impl/EcologyFlowStationServiceImpl.java @@ -0,0 +1,145 @@ +package com.hnac.hzims.operational.ecology.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowDataEntity; +import com.hnac.hzims.operational.ecology.entity.EcologyFlowStationEntity; +import com.hnac.hzims.operational.ecology.mapper.EcologyFlowStationMapper; +import com.hnac.hzims.operational.ecology.service.EcologyFlowDataService; +import com.hnac.hzims.operational.ecology.service.EcologyFlowStationService; +import com.hnac.hzims.operational.ecology.vo.DemonstrateTopVo; +import com.hnac.hzims.operational.ecology.vo.EcologFlowStationVo; +import com.hnac.hzims.operational.ecology.vo.TrendChartVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.DateUtil; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 历史告警实现类 + * @author ysj + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class EcologyFlowStationServiceImpl extends BaseServiceImpl implements EcologyFlowStationService { + + private final EcologyFlowDataService dataService; + + /** + * 数据初始化 + * @return + */ + @Override + public Boolean generate(Long mon,String year) { + // 步骤1.查询站点列表 + List ecologys = this.list(); + if(CollectionUtil.isEmpty(ecologys)){ + return false; + } + Random random=new Random(); + List datas = new ArrayList<>(); + for(EcologyFlowStationEntity ecology : ecologys){ + int iter = Math.toIntExact(mon); + while (Math.abs(iter) > 0){ + EcologyFlowDataEntity entity = new EcologyFlowDataEntity(); + entity.setMon(year + "-" + ((iter > 10) ? iter : "0" + iter)); + entity.setStationId(ecology.getStationId()); + entity.setStationName(ecology.getStationName()); + entity.setOnLine(BigDecimal.valueOf(random.nextDouble() * 100)); + entity.setComplete(BigDecimal.valueOf(random.nextDouble() * 100)); + entity.setTimely(BigDecimal.valueOf(random.nextDouble() * 100)); + entity.setDemonstrate(BigDecimal.valueOf(random.nextDouble() * 100)); + datas.add(entity); + iter--; + } + } + return this.dataService.saveBatch(datas); + } + + + /** + * 站点数据,达标率排行榜 + * @return + */ + @Override + public EcologFlowStationVo station_top() { + List stations = this.list(); + if(CollectionUtil.isEmpty(stations)){ + return new EcologFlowStationVo(); + } + EcologFlowStationVo station = new EcologFlowStationVo(); + station.setComplete(BigDecimal.valueOf((int) stations.stream().filter(o -> o.getIsComplete().equals(1L)).count() / (double) stations.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + station.setOnLine(BigDecimal.valueOf((int) stations.stream().filter(o -> o.getIsOnLine().equals(1L)).count() / (double) stations.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + station.setDemonstrate(BigDecimal.valueOf((int) stations.stream().filter(o -> o.getIsDemonstrate().equals(1L)).count() / (double) stations.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + station.setTimely(BigDecimal.valueOf((int) stations.stream().filter(o -> o.getIsTimely().equals(1L)).count() / (double) stations.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + station.setCount(stations.size()); + + List datas = dataService.list(Wrappers.lambdaQuery(). + like(EcologyFlowDataEntity::getMon, DateUtil.format(new Date(),"yyyy-MM"))); + if(CollectionUtil.isEmpty(datas)){ + return station; + } + station.setTops(datas.stream().map(data->{ + DemonstrateTopVo top = new DemonstrateTopVo(); + top.setStationId(data.getStationId()); + top.setStationName(data.getStationName()); + top.setDemonstrate(data.getDemonstrate()); + return top; + }).sorted(Comparator.comparing(DemonstrateTopVo::getDemonstrate).reversed()).collect(Collectors.toList())); + return station; + } + + + /** + * 指标趋势图 + * @param type + * @return + */ + @Override + public List trend_chart(String type) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if("0".equals(type)){ + wrapper.like(EcologyFlowDataEntity::getMon, DateUtil.format(new Date(),"yyyy")); + } + List datas = this.dataService.list(wrapper); + if(CollectionUtil.isEmpty(datas)){ + return new ArrayList<>(); + } + List charts; + if("0".equals(type)){ + Map> map = datas.stream().collect(Collectors.groupingBy(EcologyFlowDataEntity::getMon)); + charts = map.entrySet().stream().map(entry->{ + TrendChartVo chart = new TrendChartVo(); + Date date = DateUtil.parse(entry.getKey() + "-01 00:00:00",DateUtil.PATTERN_DATETIME); + chart.setTs(date.getMonth() + 1); + chart.setTimely(entry.getValue().stream().mapToDouble(o->o.getTimely().doubleValue()).average().getAsDouble()); + chart.setDemonstrate(entry.getValue().stream().mapToDouble(o->o.getDemonstrate().doubleValue()).average().getAsDouble()); + chart.setOnLine(entry.getValue().stream().mapToDouble(o->o.getOnLine().doubleValue()).average().getAsDouble()); + chart.setComplete(entry.getValue().stream().mapToDouble(o->o.getComplete().doubleValue()).average().getAsDouble()); + return chart; + }).collect(Collectors.toList()); + }else{ + Map> map = datas.stream().peek(o->{ + Date date = DateUtil.parse(o.getMon() + "-01 00:00:00",DateUtil.PATTERN_DATETIME); + o.setMon(DateUtil.format(date,"yyyy")); + }).collect(Collectors.groupingBy(EcologyFlowDataEntity::getMon)); + charts = map.entrySet().stream().map(entry->{ + TrendChartVo chart = new TrendChartVo(); + chart.setTs(Integer.valueOf(entry.getKey())); + chart.setTimely(entry.getValue().stream().mapToDouble(o->o.getTimely().doubleValue()).average().getAsDouble()); + chart.setDemonstrate(entry.getValue().stream().mapToDouble(o->o.getDemonstrate().doubleValue()).average().getAsDouble()); + chart.setOnLine(entry.getValue().stream().mapToDouble(o->o.getOnLine().doubleValue()).average().getAsDouble()); + chart.setComplete(entry.getValue().stream().mapToDouble(o->o.getComplete().doubleValue()).average().getAsDouble()); + return chart; + }).collect(Collectors.toList()); + } + return charts.stream().sorted(Comparator.comparing(TrendChartVo::getTs)).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index f1f74b4..876c9e4 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -989,7 +989,7 @@ public class HydropowerServiceImpl implements HydropowerService { return hydropower; }).collect(Collectors.toList()); } - + /** * 水电站区域指标 * @param deptId