From 7571e1f48c2340b77080b657cdf392b556592e5c Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 20 Nov 2023 09:52:44 +0800 Subject: [PATCH 01/22] =?UTF-8?q?#=E5=8D=95=E4=BD=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/operation/home/impl/RealTargetServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index e9e9d73..8674140 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -1515,28 +1515,28 @@ public class RealTargetServiceImpl implements RealTargetService { return; } // 有功功率单位 - String power = unitMap.get(device.getId()+HomePageConstant.CONCAT_P); + String power = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_P); if(StringUtil.isNotBlank(power)){ realVo.setPowerUnit(power); } else { realVo.setPowerUnit("kW"); } // 无功功率 - String reactivePowerUnit = unitMap.get(device.getId()+HomePageConstant.CONCAT_Q); + String reactivePowerUnit = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_Q); if(StringUtil.isNotBlank(reactivePowerUnit)){ realVo.setReactivePowerUnit(reactivePowerUnit); } else { realVo.setReactivePowerUnit("kVa r"); } // 定子电压单位 - String voltage = unitMap.get(device.getId()+HomePageConstant.CONCAT_UAB); + String voltage = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_UAB); if(StringUtil.isNotBlank(voltage)){ realVo.setVoltageUnit(voltage); } else { realVo.setVoltageUnit("V"); } // 定子电流单位 - String current = unitMap.get(device.getId()+HomePageConstant.CONCAT_IA); + String current = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_IA); if(StringUtil.isNotBlank(current)){ realVo.setCurrentUnit(current); } else { From 3e3cbed3a50aa4aa8eeec70868d93fd738e113a3 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 20 Nov 2023 11:26:24 +0800 Subject: [PATCH 02/22] =?UTF-8?q?#=E5=8D=95=E4=BD=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/operation/home/impl/RealTargetServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 8674140..9bdfc9e 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -1515,28 +1515,28 @@ public class RealTargetServiceImpl implements RealTargetService { return; } // 有功功率单位 - String power = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_P); + String power = unitMap.get(device.getEmCode().toUpperCase()+HomePageConstant.CONCAT_P); if(StringUtil.isNotBlank(power)){ realVo.setPowerUnit(power); } else { realVo.setPowerUnit("kW"); } // 无功功率 - String reactivePowerUnit = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_Q); + String reactivePowerUnit = unitMap.get(device.getEmCode().toUpperCase()+HomePageConstant.CONCAT_Q); if(StringUtil.isNotBlank(reactivePowerUnit)){ realVo.setReactivePowerUnit(reactivePowerUnit); } else { realVo.setReactivePowerUnit("kVa r"); } // 定子电压单位 - String voltage = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_UAB); + String voltage = unitMap.get(device.getEmCode().toUpperCase()+HomePageConstant.CONCAT_UAB); if(StringUtil.isNotBlank(voltage)){ realVo.setVoltageUnit(voltage); } else { realVo.setVoltageUnit("V"); } // 定子电流单位 - String current = unitMap.get(device.getId().toString().toUpperCase()+HomePageConstant.CONCAT_IA); + String current = unitMap.get(device.getEmCode().toUpperCase()+HomePageConstant.CONCAT_IA); if(StringUtil.isNotBlank(current)){ realVo.setCurrentUnit(current); } else { From cc238b5d5403d903f6500a58eab20cf3b81bc02f Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 20 Nov 2023 18:18:24 +0800 Subject: [PATCH 03/22] =?UTF-8?q?#=E7=AB=99=E7=82=B9=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 adf3cb8..85f83fc 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 @@ -1149,7 +1149,7 @@ public class HydropowerServiceImpl implements HydropowerService { long on = reals.stream().filter(real -> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(real.getDeptId()) && real.getState()).count(); long sum = reals.stream().filter(real->entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(real.getDeptId())).count(); if(Math.abs(sum) > 0){ - scale.setDeviceUse(BigDecimal.valueOf(on / sum * 100).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); + scale.setDeviceUse(BigDecimal.valueOf(on / (double)sum * 100).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); } } return scale; From 47ff8690440e38304c8da846a10a237589cdc9fa Mon Sep 17 00:00:00 2001 From: tyty Date: Mon, 20 Nov 2023 18:22:30 +0800 Subject: [PATCH 04/22] =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E7=8F=AD=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E5=BC=82=E5=B8=B8=EF=BC=8C=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../duty/service/impl/ImsDutyRecServiceImpl.java | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java index c3c6d20..338596a 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java @@ -1387,16 +1387,26 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl { - throw new RuntimeException("更新交班状态失败,交班执行对象为:"+ JSON.toJSONString(recDTO.getHeadDutyMainVo())); - }); + if (ObjectUtil.isNotEmpty(headDutyMain)&&ObjectUtil.isNotEmpty(headDutyMain.getId())) { + Assert.isTrue(imsDutyMainService.updateById(headDutyMain), () -> { + throw new RuntimeException("更新交班状态失败,交班执行对象为:" + JSON.toJSONString(recDTO.getHeadDutyMainVo())); + }); + log.info("更新交班状态:"+carryDutyMain); + } // 更新接班值班 - Assert.isTrue(imsDutyMainService.updateById(carryDutyMain),() -> { - throw new RuntimeException("更新接班状态失败,交班执行对象为:"+ JSON.toJSONString(recDTO.getHeadDutyMainVo())); - }); + if (ObjectUtil.isNotEmpty(carryDutyMain)&&ObjectUtil.isNotEmpty(carryDutyMain.getId())) { + Assert.isTrue(imsDutyMainService.updateById(carryDutyMain), () -> { + throw new RuntimeException("更新接班状态失败,交班执行对象为:" + JSON.toJSONString(recDTO.getHeadDutyMainVo())); + }); + log.info("更新接班状态:"+carryDutyMain); + } // 更新交接班 - this.updateById(dutyRec); - return true; + if (ObjectUtil.isNotEmpty(dutyRec)&&ObjectUtil.isNotEmpty(dutyRec.getId())) { + return this.updateById(dutyRec); + }else { + log.error("更新交接班记录失败"+dutyRec.toString()); + return false; + } } /** From 3651f6a440053191b1c9d7f067bec654e5402ead Mon Sep 17 00:00:00 2001 From: tyty Date: Wed, 22 Nov 2023 16:30:17 +0800 Subject: [PATCH 05/22] =?UTF-8?q?=E6=B6=88=E7=BC=BAbug=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/defect/service/impl/DefectCheckServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/DefectCheckServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/DefectCheckServiceImpl.java index ebca68e..ea07538 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/DefectCheckServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/defect/service/impl/DefectCheckServiceImpl.java @@ -274,7 +274,7 @@ public class DefectCheckServiceImpl extends BaseServiceImpl Date: Wed, 22 Nov 2023 16:48:04 +0800 Subject: [PATCH 06/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1bug=EF=BC=9A=E5=BD=93=E5=89=8D=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E7=8E=AF=E8=8A=82=E5=92=8C=E5=BD=93=E5=89=8D=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=BA=E6=9C=89=E5=8F=AF=E8=83=BD=E6=9C=89=EF=BC=8C?= =?UTF-8?q?=E6=9C=89=E5=8F=AF=E8=83=BD=E6=B2=A1=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduled/MaintenanceTaskCreateTask.java | 45 ++++++++-- .../maintenance/service/MaintenanceService.java | 2 +- .../service/impl/MaintenanceServiceImpl.java | 95 ++++++++++++++-------- 3 files changed, 98 insertions(+), 44 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java index 32e1ffa..8e39143 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java @@ -2,6 +2,7 @@ package com.hnac.hzims.operational.maintenance.scheduled; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.hnac.hzims.message.dto.PlanMsgRecordDto; import com.hnac.hzims.message.entity.config.MessageTemplateEntity; import com.hnac.hzims.message.fegin.IMessageClient; @@ -10,11 +11,11 @@ import com.hnac.hzims.operational.duty.service.IImsDutyMainService; import com.hnac.hzims.operational.maintenance.entity.OperMaintenancePlanEntity; import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; import com.hnac.hzims.operational.maintenance.mapper.OperMaintenancePlanMapper; +import com.hnac.hzims.operational.maintenance.service.IOperMaintenancePlanService; import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService; import com.hnac.hzims.operational.maintenance.service.MaintenanceService; import com.hnac.hzims.operational.maintenance.template.service.TemplateService; import com.hnac.hzims.operational.maintenance.vo.OperMaintenanceTaskEntityVo; -import com.hnac.hzims.operational.maintenance.vo.OperMaintenanceTaskVO; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.log.XxlJobLogger; @@ -70,6 +71,7 @@ public class MaintenanceTaskCreateTask { private final MaintenanceService maintenanceService; + private final IOperMaintenancePlanService maintenancePlanService; private final List templateService; @@ -97,9 +99,16 @@ public class MaintenanceTaskCreateTask { //生成日常巡检任务并插入数据库 for (int i = startIndex; i < endIndex; i++) { - this.generateTaskByPlan(planEntities.get(i),true); + Boolean aBoolean = this.generateTaskByPlan(planEntities.get(i), true); + //更新任务派发时间 + if (aBoolean) { + //当所有的任务生成后,才会更新计划的时间状态 + LambdaUpdateWrapper planEntityLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); + planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, planEntities.get(i)); + maintenancePlanService.update(planEntityLambdaUpdateWrapper); + } } - Thread.sleep(1000); page++; } while (page * size < planEntities.size()); @@ -113,19 +122,41 @@ public class MaintenanceTaskCreateTask { * @param planEntity * @return */ - public void generateTaskByPlan(OperMaintenancePlanEntity planEntity,Boolean flag) { + public Boolean generateTaskByPlan(OperMaintenancePlanEntity planEntity,Boolean flag) { OperMaintenanceTaskEntity taskEntity = BeanUtil.copy(planEntity,OperMaintenanceTaskEntity.class); //拆分设备 每个设备生成一条任务 + List taskIds=new ArrayList<>(); if(StringUtil.isNotBlank(planEntity.getEmCode())){ List emCodeList = Arrays.asList(planEntity.getEmCode().split(",")); for(String emCode : emCodeList){ - taskEntity.setEmCode(emCode); - maintenanceService.fillTask(taskEntity,planEntity,flag); + //一旦有一条任务失败,则删除当前生成的任务,不更新当前的计划状态 + try { + taskEntity.setEmCode(emCode); + Long task = maintenanceService.fillTask(taskEntity, planEntity, flag); + if (ObjectUtil.isNotEmpty(task)){ + taskIds.add(task); + } + }catch (Exception e){ + log.error("日常维护任务生成失败:" + "emCode:" + emCode + "错误原因:" + e); + log.error("日常维护任务生成失败:" + "param:" + planEntity + "错误原因:" + e); + taskService.deleteTaskBatch(taskIds); + return false; + } } } else { - maintenanceService.fillTask(taskEntity,planEntity,flag); + try { + Long task = maintenanceService.fillTask(taskEntity, planEntity, flag); + if (ObjectUtil.isNotEmpty(task)) { + taskIds.add(task); + } + } catch (Exception e) { + log.error("日常维护任务生成失败:" + "param:" + planEntity + "错误原因:" + e); + taskService.deleteTaskBatch(taskIds); + return false; + } } + return true; } /** diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/MaintenanceService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/MaintenanceService.java index d58df2a..3a09896 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/MaintenanceService.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/MaintenanceService.java @@ -38,5 +38,5 @@ public interface MaintenanceService { * @param taskEntity * @param finalPlanEntity */ - void fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity,Boolean flag); + Long fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity,Boolean flag); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java index e93d73f..b9c9785 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java @@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Lists; import com.hnac.hzims.common.utils.DateUtil; import com.hnac.hzims.message.MessageConstants; import com.hnac.hzims.message.dto.BusinessMessageDTO; @@ -38,10 +37,7 @@ import org.springblade.system.feign.ISysClient; import org.springframework.beans.BeanUtils; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Service; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.support.DefaultTransactionDefinition; import java.time.Instant; import java.time.LocalDate; @@ -49,7 +45,6 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -87,7 +82,7 @@ public class MaintenanceServiceImpl implements MaintenanceService { * @param ids */ @Override - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public void createTask(List ids) { try { //获取日常维护计划 @@ -95,21 +90,26 @@ public class MaintenanceServiceImpl implements MaintenanceService { planEntityLambdaQueryWrapper.in(BaseEntity::getId, ids); List planEntities = maintenancePlanService.list(planEntityLambdaQueryWrapper); //筛选当月没生成任务的计划 - List finalPlanEntities = planEntities.stream().filter(planEntity -> ObjectUtil.isEmpty(planEntity.getCreateTaskTime()) || !DateUtil.judgeSameDay(DateUtil.DateToLocalDateTime(planEntity.getCreateTaskTime()), LocalDate.now())).collect(Collectors.toList()); + List finalPlanEntities = planEntities.stream(). + filter(planEntity -> ObjectUtil.isEmpty(planEntity.getCreateTaskTime()) || + !DateUtil.judgeSameDay(DateUtil.DateToLocalDateTime(planEntity.getCreateTaskTime()), LocalDate.now())) + .collect(Collectors.toList()); if (CollectionUtil.isEmpty(finalPlanEntities)) { throw new ServiceException("所选计划当天已生成任务"); } for (OperMaintenancePlanEntity finalPlanEntity : finalPlanEntities) { // 通过计划生成任务 - this.createTaskByPlan(finalPlanEntity); - //更新任务派发时间 - LambdaUpdateWrapper planEntityLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); - planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); - boolean update = maintenancePlanService.update(planEntityLambdaUpdateWrapper); - if (!update) { - log.error("maintenance:generateTask 更新任务派发失败"); - throw new ServiceException("更新任务派发失败"); + Boolean taskByPlan = this.createTaskByPlan(finalPlanEntity); + if (taskByPlan) { + //更新任务派发时间 + LambdaUpdateWrapper planEntityLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); + planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); + boolean update = maintenancePlanService.update(planEntityLambdaUpdateWrapper); + if (!update) { + log.error("maintenance:generateTask 更新任务派发失败"); + throw new ServiceException("更新任务派发失败"); + } } } } catch (Exception e) { @@ -266,20 +266,40 @@ public class MaintenanceServiceImpl implements MaintenanceService { * * @param finalPlanEntity */ - private void createTaskByPlan(OperMaintenancePlanEntity finalPlanEntity) { + private Boolean createTaskByPlan(OperMaintenancePlanEntity finalPlanEntity) { OperMaintenanceTaskEntity taskEntity = BeanUtil.copy(finalPlanEntity, OperMaintenanceTaskEntity.class); //拆分设备 每个设备生成一条任务 + List taskIds = new ArrayList<>(); if (StringUtil.isNotBlank(finalPlanEntity.getEmCode())) { log.info("finalPlanEntity.getEmCode() : {}", finalPlanEntity.getEmCode()); String[] emCodeList = finalPlanEntity.getEmCode().split(","); for (String emCode : emCodeList) { - taskEntity.setEmCode(emCode); - this.fillTask(taskEntity, finalPlanEntity,false); + try { + taskEntity.setEmCode(emCode); + Long task = this.fillTask(taskEntity, finalPlanEntity, false); + if (ObjectUtil.isNotEmpty(task)) { + taskIds.add(task); + } + } catch (Exception e) { + log.error("日常维护任务生成失败:" + "emCode:" + emCode + "错误原因:" + e); + log.error("日常维护任务生成失败:" + "param:" + finalPlanEntity + "错误原因:" + e); + taskService.deleteTaskBatch(taskIds); + return false; + } } } else { - this.fillTask(taskEntity, finalPlanEntity,false); + try { + Long task = this.fillTask(taskEntity, finalPlanEntity, false); + if (ObjectUtil.isNotEmpty(task)) { + taskIds.add(task); + } + } catch (Exception e) { + log.error("日常维护任务生成失败:" + "param:" + finalPlanEntity + "错误原因:" + e); + taskService.deleteTaskBatch(taskIds); + return false; + } } - + return true; } @@ -290,7 +310,8 @@ public class MaintenanceServiceImpl implements MaintenanceService { * @param finalPlanEntity */ @Override - public void fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity,Boolean flag) { + @Transactional(rollbackFor = Exception.class) + public Long fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity, Boolean flag) { // DefaultTransactionDefinition = new DefaultTransactionDefinition(); // defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // TransactionStatus transaction = dataSourceTransactionManager.getTransaction(defaultTransactionDefinition); @@ -320,29 +341,31 @@ public class MaintenanceServiceImpl implements MaintenanceService { taskEntity.setDisposer(userId.replaceAll("\\^", ",")); } else { log.info("计划ID为:{}未查询到排班记录", finalPlanEntity.getId()); - LambdaUpdateWrapper planQueryWrapper = Wrappers.lambdaUpdate() - .set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()) - .eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); - maintenancePlanService.update(planQueryWrapper); - return; +// LambdaUpdateWrapper planQueryWrapper = Wrappers.lambdaUpdate() +// .set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()) +// .eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); +// maintenancePlanService.update(planQueryWrapper); + return null; } } taskService.save(taskEntity); // dataSourceTransactionManager.commit(transaction); +//等当前计划的所有任务生成后更新当前计划时间 +// LambdaUpdateWrapper planQueryWrapper = Wrappers.lambdaUpdate() +// .set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()) +// .eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); +// maintenancePlanService.update(planQueryWrapper); + executor.execute(() -> { + OperMaintenanceTaskEntity maintenanceTask = taskService.getById(taskEntity.getId()); + this.pushTaskMessage(maintenanceTask); + }); //启动流程 - String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), taskEntity,flag); + String processInstanceId = this.startProcess(finalPlanEntity.getProcDefId(), taskEntity, flag); LambdaUpdateWrapper taskQueryWrapper = Wrappers.lambdaUpdate() .set(OperMaintenanceTaskEntity::getProcessInstanceId, processInstanceId) .eq(OperMaintenanceTaskEntity::getId, taskEntity.getId()); taskService.update(taskQueryWrapper); - LambdaUpdateWrapper planQueryWrapper = Wrappers.lambdaUpdate() - .set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()) - .eq(OperMaintenancePlanEntity::getId, finalPlanEntity.getId()); - maintenancePlanService.update(planQueryWrapper); - executor.execute(() -> { - OperMaintenanceTaskEntity maintenanceTask = taskService.getById(taskEntity.getId()); - this.pushTaskMessage(maintenanceTask); - }); + return taskEntity.getId(); } From d63bb64c2446ff4200af3dbabc9d91cd41764170 Mon Sep 17 00:00:00 2001 From: tyty Date: Wed, 22 Nov 2023 17:04:47 +0800 Subject: [PATCH 07/22] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=85=A9=E7=A5=A8pdf?= =?UTF-8?q?=E5=B1=95=E7=A4=BAbug=EF=BC=9A=E5=BA=8F=E5=8F=B7=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E6=9C=89=E9=97=AE=E9=A2=98=EF=BC=88=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E8=A7=A3=E5=86=B3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/service/impl/TicketMatterGroupServiceImpl.java | 2 +- .../twoTicket/service/impl/TicketProcessServiceImpl.java | 13 ++++++------- .../workTicket/service/impl/OfflineTicketServiceImpl.java | 4 +--- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/library/service/impl/TicketMatterGroupServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/library/service/impl/TicketMatterGroupServiceImpl.java index 68b1ecb..73dfbc8 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/library/service/impl/TicketMatterGroupServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/library/service/impl/TicketMatterGroupServiceImpl.java @@ -626,7 +626,7 @@ public class TicketMatterGroupServiceImpl extends BaseServiceImpl resultMap = OperationWordHelper.resultMap(workTicketInfoMap); - String workTicketStatus = this.getWorkTicketStatus(status); + String workTicketStatus =getWorkTicketStatus(status); String os = TicketConstant.OS_NAME; //Windows操作系统 if (os != null && os.toLowerCase().startsWith("windows")) { 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 eee0811..44d27ce 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 @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.hnac.hzims.common.logs.utils.StringUtils; import com.hnac.hzims.message.MessageConstants; import com.hnac.hzims.message.dto.BusinessMessageDTO; -import com.hnac.hzims.message.dto.MessagePushRecordDto; import com.hnac.hzims.message.fegin.IMessageClient; import com.hnac.hzims.middle.process.feign.ProcessDictFeignService; import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; @@ -59,7 +58,6 @@ import org.springblade.system.feign.ISysClient; import org.springblade.system.user.cache.UserCache; import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -963,7 +961,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { for (WorkTicketSafetyMeasureEntity measureVO : workTicketSafetyMeasureEntities) { String type = measureEnum.getType(); if (tempIndex != Integer.valueOf(type)) { - index = 1; +// index = 1; tempIndex++; } log.info("获取安全措施的信息: {}", measureVO); @@ -984,7 +982,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { //验证工作措施是有有数据 this.isMatterLibraryList(workTicketInfoMap1); // 工作地点保留带电部位或注意事项 - this.matterLibraryListWithMap(workTicketInfoMap1); + matterLibraryListWithMap(workTicketInfoMap1); result.putAll(workTicketInfoMap1); } @@ -1025,12 +1023,13 @@ public class TicketProcessServiceImpl implements TicketProcessService { List ticketInfoDangers = workTicketVo.getTicketInfoDangers(); if (CollectionUtils.isNotEmpty(ticketInfoDangers)) { Map>> map = new HashMap<>(); - int index = 1; + int[] index = {1}; List> collect = ticketInfoDangers.stream().map(item -> { Map newItem = new HashMap<>(); - newItem.put("index", index); + newItem.put("index", index[0]); newItem.put("maintenance", item.getMaintenance() == null ? "\u00A0" : item.getMaintenance()); newItem.put("dangerousPoint", item.getDangerousPoint() == null ? "\u00A0" : item.getDangerousPoint()); + index[0]++; return newItem; }).collect(Collectors.toList()); @@ -1041,7 +1040,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { WordMapUtils.newMapWithList("ticketInfoDangers", result, true, 4, "maintenance", "dangerousPoint"); //7. 是否包含 - this.isExists(result); + isExists(result); //8. 存入新的数据 this.addMapPut(result); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/OfflineTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/OfflineTicketServiceImpl.java index ec5c331..179898e 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/OfflineTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/OfflineTicketServiceImpl.java @@ -8,7 +8,6 @@ import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.feign.IStationClient; import com.hnac.hzims.ticket.constants.TicketConstants; import com.hnac.hzims.ticket.constants.WorkTicketConstants; -import com.hnac.hzims.ticket.twoTicket.constant.TicketConstant; import com.hnac.hzims.ticket.workTicket.dto.WorkTicketInfoDto; import com.hnac.hzims.ticket.workTicket.entity.WorkTicketContentEntity; import com.hnac.hzims.ticket.workTicket.entity.WorkTicketFlowEntity; @@ -40,7 +39,6 @@ import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.List; -import java.util.Optional; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -61,7 +59,7 @@ public class OfflineTicketServiceImpl extends BaseServiceImpl Date: Tue, 28 Nov 2023 20:25:59 +0800 Subject: [PATCH 08/22] =?UTF-8?q?=E5=80=BC=E7=8F=AD=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java | 4 ++++ pom.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java index 162ba11..03f1cb0 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java @@ -17,6 +17,7 @@ import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; import com.hnac.hzinfo.datasearch.analyse.domain.AnalyzeDataCondition; import com.hnac.hzinfo.datasearch.analyse.domain.AnalyzeDataList; import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; +import com.hnac.hzinfo.sdk.core.response.DataResultCode; import com.hnac.hzinfo.sdk.core.response.HzPage; import com.hnac.hzinfo.sdk.core.response.Result; import com.hnac.hzinfo.sdk.v5.analyse.AnalyseDataHandlerClient; @@ -66,6 +67,9 @@ public class ImsAnalyseExampleServiceImpl extends BaseServiceImpl> analyzeDataByAnalyzeCode = searchClient.getAnalyzeDataByAnalyzeCode(analyzeDataCondition); if(!analyzeDataByAnalyzeCode.isSuccess()) { + if(DataResultCode.ANALYZE_INSTANCE_UNDEFINE.getCode()==analyzeDataByAnalyzeCode.getCode()){ + throw new ServiceException("找不到对应的分析实例,请检查好配置后重试!"); + } throw new ServiceException("设备数据查询异常,请检查好配置后重试!"); } return analyzeDataByAnalyzeCode; diff --git a/pom.xml b/pom.xml index 02336a9..38bf367 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 5.0.1.RELEASE - 5.0.2-SNAPSHOT + 5.0.3.RELEASE UTF-8 1.8 From aad6e5bcc90ab9b8480849f3b846624526c091a7 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 1 Dec 2023 15:25:40 +0800 Subject: [PATCH 09/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=B8=B8?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E7=BB=9F=E8=AE=A1=E5=AE=8C=E6=88=90=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E9=80=BB=E8=BE=91=EF=BC=9A=E4=BB=8Estatus=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=B5=81=E7=A8=8B=E5=90=8D=E7=A7=B0=E4=B8=BA?= =?UTF-8?q?=E7=BB=93=E6=9D=9F-ty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintenance/service/impl/OperMaintenanceTaskServiceImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java index dab8118..6f8aa43 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java @@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.RandomUtils; import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -448,10 +449,11 @@ public class OperMaintenanceTaskServiceImpl extends BaseServiceImpl list) { VoteChartVo voteChartVo = new VoteChartVo(); - List finishIds = Optional.ofNullable(list).orElse(new ArrayList<>()).stream().filter(s -> s.getStatus() == 3).map(s -> s.getId()).collect(Collectors.toList()); - List undoneIds = Optional.ofNullable(list).orElse(new ArrayList<>()).stream().filter(s -> s.getStatus() != 3).map(s -> s.getId()).collect(Collectors.toList()); + List finishIds = Optional.ofNullable(list).orElse(new ArrayList<>()).stream().filter(s -> StringUtil.isNotBlank(s.getFlowTaskName())&&"结束".equals(s.getFlowTaskName())).map(BaseEntity::getId).collect(Collectors.toList()); + //没有流程名称或者流程名称不等于结束,都算未完成 + List undoneIds = Optional.ofNullable(list).orElse(new ArrayList<>()).stream().filter(s -> StringUtil.isBlank(s.getFlowTaskName())||!"结束".equals(s.getFlowTaskName())).map(BaseEntity::getId).collect(Collectors.toList()); voteChartVo.setSumNum(list.size()); - voteChartVo.setSumIds(list.stream().map(s -> s.getId()).collect(Collectors.toList())); + voteChartVo.setSumIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); voteChartVo.setFinishNum(finishIds.size()); voteChartVo.setFinishIds(finishIds); voteChartVo.setUndoneNum(undoneIds.size()); From 753f815a29229a98bbe95cfe2d505c6521b55819 Mon Sep 17 00:00:00 2001 From: tyty Date: Mon, 4 Dec 2023 16:10:27 +0800 Subject: [PATCH 10/22] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=94=9F=E6=88=90=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=EF=BC=8C=E7=89=88=E6=9C=AC=E5=9B=9E=E9=80=805.0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/maintenance/scheduled/MaintenanceTaskCreateTask.java | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java index 8e39143..a87d789 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java @@ -105,7 +105,7 @@ public class MaintenanceTaskCreateTask { //当所有的任务生成后,才会更新计划的时间状态 LambdaUpdateWrapper planEntityLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); - planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, planEntities.get(i)); + planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, planEntities.get(i).getId()); maintenancePlanService.update(planEntityLambdaUpdateWrapper); } } diff --git a/pom.xml b/pom.xml index 38bf367..02336a9 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 5.0.1.RELEASE - 5.0.3.RELEASE + 5.0.2-SNAPSHOT UTF-8 1.8 From 328254e25611c83ff60f75c2982426042243cdee Mon Sep 17 00:00:00 2001 From: tyty Date: Mon, 4 Dec 2023 16:27:15 +0800 Subject: [PATCH 11/22] =?UTF-8?q?=E5=80=BC=E7=8F=AD=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../duty/service/impl/ImsAnalyseExampleServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java index 03f1cb0..2611bdd 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsAnalyseExampleServiceImpl.java @@ -17,7 +17,6 @@ import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; import com.hnac.hzinfo.datasearch.analyse.domain.AnalyzeDataCondition; import com.hnac.hzinfo.datasearch.analyse.domain.AnalyzeDataList; import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData; -import com.hnac.hzinfo.sdk.core.response.DataResultCode; import com.hnac.hzinfo.sdk.core.response.HzPage; import com.hnac.hzinfo.sdk.core.response.Result; import com.hnac.hzinfo.sdk.v5.analyse.AnalyseDataHandlerClient; @@ -67,9 +66,9 @@ public class ImsAnalyseExampleServiceImpl extends BaseServiceImpl> analyzeDataByAnalyzeCode = searchClient.getAnalyzeDataByAnalyzeCode(analyzeDataCondition); if(!analyzeDataByAnalyzeCode.isSuccess()) { - if(DataResultCode.ANALYZE_INSTANCE_UNDEFINE.getCode()==analyzeDataByAnalyzeCode.getCode()){ - throw new ServiceException("找不到对应的分析实例,请检查好配置后重试!"); - } +// if(DataResultCode.ANALYZE_INSTANCE_UNDEFINE.getCode()==analyzeDataByAnalyzeCode.getCode()){ +// throw new ServiceException("找不到对应的分析实例,请检查好配置后重试!"); +// } throw new ServiceException("设备数据查询异常,请检查好配置后重试!"); } return analyzeDataByAnalyzeCode; From 6efdf34196af8e36aec2c9039936e82754ccf534 Mon Sep 17 00:00:00 2001 From: tyty Date: Thu, 7 Dec 2023 16:20:47 +0800 Subject: [PATCH 12/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=B4=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E8=BF=90=E8=A1=8C=E6=9C=88=E6=8A=A5=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/OperationalConstants.java | 2 +- .../operational/report/vo/TicketChartCell.java | 4 ++ .../main/controller/AreaMonthReportController.java | 3 +- .../main/service/IAreaMonthReportService.java | 3 +- .../service/impl/AreaMonthReportServiceImpl.java | 78 +++++++++++++++------ .../com/hnac/hzims/operational/util/TimeUtils.java | 22 +++++- .../main/resources/template/waterMonReport.docx | Bin 113046 -> 107326 bytes 7 files changed, 85 insertions(+), 27 deletions(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java index 93810fc..16f31e5 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java @@ -4,7 +4,7 @@ import lombok.Getter; public class OperationalConstants { - public final static String APP_NAME = "hzims-operational"; + public final static String APP_NAME = "hzims-operational-ty"; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/report/vo/TicketChartCell.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/report/vo/TicketChartCell.java index bb752eb..2ff6caf 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/report/vo/TicketChartCell.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/report/vo/TicketChartCell.java @@ -17,10 +17,14 @@ public class TicketChartCell { private String ticketName; @ApiModelProperty(value = "本月数量") private int ticketMon; + @ApiModelProperty(value = "本月合格数量") + private int ticketMonPassCount; @ApiModelProperty(value = "本月合格率") private double ticketMonPerc; @ApiModelProperty(value = "本年数量") private int ticketYear; + @ApiModelProperty(value = "本年合格数量") + private int ticketYearPassCount; @ApiModelProperty(value = "本年合格率") private double ticketYeaPercr; } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/AreaMonthReportController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/AreaMonthReportController.java index 7720bc9..6ce0cbd 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/AreaMonthReportController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/controller/AreaMonthReportController.java @@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.io.IOException; import java.net.URLEncoder; +import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -125,7 +126,7 @@ public class AreaMonthReportController extends BladeController { @ApiOperation("导出水电站月报") @GetMapping("/exportHydropowerStationMonthReport") public R exportHydropowerStationMonthReport(HttpServletResponse response, @ApiParam(value = "日期-年", required = true) Integer year,@ApiParam(value = "日期-月", required = true) Integer month, - @ApiParam(value = "站点Id", required = true) Long deptId,@ApiParam(value = "月报类型", required = true) Long type) { + @ApiParam(value = "站点Id", required = true) Long deptId,@ApiParam(value = "月报类型", required = true) Long type) throws ParseException { HashMap map = new HashMap<>(); if (Func.isEmpty(year)||Func.isEmpty(deptId)||Func.isEmpty(month)||year==0||deptId==0||month==0){ diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/IAreaMonthReportService.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/IAreaMonthReportService.java index 14a7882..b31145b 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/IAreaMonthReportService.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/IAreaMonthReportService.java @@ -4,6 +4,7 @@ import com.hnac.hzims.operational.main.vo.AreaMonthReportVo; import org.springblade.core.tool.api.R; import javax.servlet.http.HttpServletResponse; +import java.text.ParseException; import java.util.HashMap; import java.util.List; @@ -18,5 +19,5 @@ public interface IAreaMonthReportService { R export(HttpServletResponse response, String date); - R exportHydropowerStationMonthReport(HttpServletResponse response, HashMap map, Integer year, Integer month,Long deptId,String name); + R exportHydropowerStationMonthReport(HttpServletResponse response, HashMap map, Integer year, Integer month,Long deptId,String name) throws ParseException; } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java index baa6714..0a84df8 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java @@ -201,7 +201,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { return R.data("success"); } @Override - public R exportHydropowerStationMonthReport(HttpServletResponse response, HashMap map, Integer year, Integer month, Long deptId,String deptName) { + public R exportHydropowerStationMonthReport(HttpServletResponse response, HashMap map, Integer year, Integer month, Long deptId,String deptName) throws ParseException { R> deptByCurrentUser = sysClient.getDeptByCurrentUser(); if (!deptByCurrentUser.isSuccess()||deptByCurrentUser.getData()==null){ return R.fail("用户权限查询失败"); @@ -219,9 +219,9 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { List stationEntityList = stationService.list(Wrappers.lambdaQuery() .in(StationEntity::getRefDept, deptIds) .eq(StationEntity::getType, HomePageConstant.HYDROPOWER)); - stationEntityList=Optional.ofNullable(stationEntityList).orElse(new ArrayList<>()).stream().filter(s->Func.isNotEmpty(s.getCommissionTime())).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(stationEntityList)) { - int commissionTime = stationEntityList.stream().map(s -> { + List stationEntityListByCommissionTime=Optional.ofNullable(stationEntityList).orElse(new ArrayList<>()).stream().filter(s->Func.isNotEmpty(s.getCommissionTime())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(stationEntityListByCommissionTime)) { + int commissionTime = stationEntityListByCommissionTime.stream().map(s -> { Duration dur = Duration.between(s.getCommissionTime(), LocalDateTime.now()); return (int) dur.toDays(); }).reduce(Integer::max).get(); @@ -236,10 +236,11 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { Integer yearBefore = year - 1; map.put("yearBefore", yearBefore); map.put("month", month); - Integer monthBefore = month - 1; + String monStartMonBefore = TimeUtils.getEarlyTime(yearBefore, month); + String[] split = monStartMonBefore.split("-"); + Integer monthBefore = Integer.valueOf(split[1]); map.put("monthBefore", monthBefore); // map.put("date", date); - map.put("stationName", deptName); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日"); map.put("writeTime", simpleDateFormat.format(new Date())); @@ -262,7 +263,6 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { // 今年当月 String monthStart = TimeUtils.getMonthStart(year, month); String monthEndV2 = TimeUtils.getMonthEndV2(year, month); - List reals = (List) redisTemplate.opsForValue().get(load_hydropower_unit_real_key); List realsByDept = reals.stream().filter(s -> deptIds.contains(s.getDeptId())).collect(Collectors.toList()); // 装机容量占比数据组装 @@ -294,6 +294,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { //装机容量占比图 ImageEntity capacityProportionChart = JFreeUtil.pieChartByDouble("水电项目装机容量占比图", capacityProportionMap, 500, 400); map.put("capacityProportionChart", capacityProportionChart); + map.put("factoryComparisonChart", "---暂无数据---"); //各发电站发电量环比图+表格数据组装 List powerPercentageVoList = getMonPowerPercentageVos(year, month, deptList, deptIds, stationEntityList, stationIds, yearBefore, monthBefore); // getPowerData(deptList, yearStart, yearEnd, yearBeforeStart, yearBeforeEnd, monthStart, monthEnd, beforeMonthStart, beforeMonthEnd, monthStartBeforeYear, monthEndBeforeYear, devices, planYearData, powerPercentageVoList); @@ -315,14 +316,21 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { for (MonPowerPercentageVo monPowerPercentageVo : powerPercentageVoList) { HashMap power = new HashMap<>(); power.put("name", monPowerPercentageVo.getDeptName()); - power.put("monthBefore", monPowerPercentageVo.getPowerMonBefore()+"MW"); - power.put("month",monPowerPercentageVo.getPowerMon()+"MW"); + power.put("monthBefore", monPowerPercentageVo.getPowerMonBefore()+"MkWh"); + power.put("month",monPowerPercentageVo.getPowerMon()+"MkWh"); powerMap.add(power); } map.put("power", powerMap); + String dateFormat=""; + if (month<10){ + dateFormat=year+"-"+"0"+month; + }else { + dateFormat=year+"-"+month; + } //表格总计 - List planYearAll = planGenertionClient.getPlanGenerationByParam(null, Collections.singletonList(deptId.toString()), year.toString()); - List planMonAll = planGenertionClient.getPlanGenerationByParam(null, Collections.singletonList(deptId.toString()), year + "-" + month); + List deptIdsString = deptIds.stream().map(String::valueOf).collect(Collectors.toList()); + List planYearAll = planGenertionClient.getPlanGenerationByParam(null, deptIdsString, year.toString()); + List planMonAll = planGenertionClient.getPlanGenerationByParam(null, deptIdsString, dateFormat); getTabelSum(deptId, powerPercentageVoList, planYearAll, planMonAll, map); //发电情况统计表数据 ArrayList> list = new ArrayList<>(powerPercentageVoList.size()); @@ -335,7 +343,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { temp.put("year", String.valueOf(monPowerPercentageVo.getPowerYear())); temp.put("monPercentage", monPowerPercentageVo.getPowerMonPercentage() * 100 + "%"); temp.put("yearPercentage", monPowerPercentageVo.getPowerYearPercentage() * 100 + "%"); - temp.put("plan", monPowerPercentageVo.getPlanPercentage() * 100 + "%"); + temp.put("plan", monPowerPercentageVo.getPlanPercentage()+ "%"); list.add(temp); } map.put("powerGeneration", list); @@ -402,7 +410,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { //表格数据 HashMap temp = new HashMap<>(); temp.put("deptName", "总计"); - temp.put("checkLevel", "无等级"); + temp.put("checkLevel", ""); temp.put("findShortagesMon", "0"); temp.put("shortagesMon", "0"); temp.put("findShortagesYear", "0"); @@ -503,10 +511,12 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { int count = yearTicketCollect.size(); ticketChartCell.setTicketYear(count); List ticketIds = yearTicketCollect.stream().map(BaseEntity::getId).collect(Collectors.toList()); + ticketChartCell.setTicketYearPassCount(0); R ticketPassCount = ticketInfoClient.getTicketPassByIds(ticketIds); if (ticketPassCount.isSuccess() && ticketPassCount.getData() != null && count != 0) { double ticketYearPerc = BigDecimal.valueOf(ticketPassCount.getData()).divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_UP).doubleValue(); ticketChartCell.setTicketYeaPercr(ticketYearPerc); + ticketChartCell.setTicketYearPassCount(ticketPassCount.getData().intValue()); } } if (CollectionUtils.isNotEmpty(monthTicketCollect)) { @@ -514,10 +524,13 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { int count = monthTicketCollect.size(); ticketChartCell.setTicketMon(count); List monthTicketIds = monthTicketCollect.stream().map(BaseEntity::getId).collect(Collectors.toList()); + //合格数量 R ticketMonthPassCount = ticketInfoClient.getTicketPassByIds(monthTicketIds); + ticketChartCell.setTicketMonPassCount(0); if (ticketMonthPassCount.isSuccess() && ticketMonthPassCount.getData() != null && count != 0) { double ticketMonthPerc = BigDecimal.valueOf(ticketMonthPassCount.getData()).divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_UP).doubleValue(); ticketChartCell.setTicketMonPerc(ticketMonthPerc); + ticketChartCell.setTicketMonPassCount(ticketMonthPassCount.getData().intValue()); } } } @@ -536,9 +549,11 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { ticketChartCell.setTicketYear(count); List ticketIds = yearOperateCollect.stream().map(BaseEntity::getId).collect(Collectors.toList()); R ticketPassCount = ticketInfoClient.getTicketPassByIds(ticketIds); + ticketChartCell.setTicketYearPassCount(0); if (ticketPassCount.isSuccess() && ticketPassCount.getData() != null && count != 0) { double ticketYearPerc = BigDecimal.valueOf(ticketPassCount.getData()).divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_UP).doubleValue(); ticketChartCell.setTicketYeaPercr(ticketYearPerc); + ticketChartCell.setTicketYearPassCount(ticketPassCount.getData().intValue()); } } if (CollectionUtils.isNotEmpty(monthOperateCollect)) { @@ -547,9 +562,11 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { ticketChartCell.setTicketMon(count); List monthTicketIds = monthOperateCollect.stream().map(BaseEntity::getId).collect(Collectors.toList()); R ticketMonthPassCount = ticketInfoClient.getTicketPassByIds(monthTicketIds); + ticketChartCell.setTicketMonPassCount(0); if (ticketMonthPassCount.isSuccess() && ticketMonthPassCount.getData() != null && count != 0) { double ticketMonthPerc = BigDecimal.valueOf(ticketMonthPassCount.getData()).divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_UP).doubleValue(); ticketChartCell.setTicketMonPerc(ticketMonthPerc); + ticketChartCell.setTicketMonPassCount(ticketMonthPassCount.getData().intValue()); } } } @@ -569,10 +586,20 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { sumCell.setTicketType(mapTicketChart.getKey()); sumCell.setTicketName(TicketConstants.TicketTypeNameEnum.getTicketNameByType(mapTicketChart.getKey())); List ticketChartValue = mapTicketChart.getValue(); - sumCell.setTicketMon(ticketChartValue.stream().mapToInt(TicketChartCell::getTicketMon).sum()); - sumCell.setTicketYear(ticketChartValue.stream().mapToInt(TicketChartCell::getTicketYear).sum()); - sumCell.setTicketMonPerc(ticketChartValue.stream().mapToDouble(TicketChartCell::getTicketMonPerc).sum()); - sumCell.setTicketYeaPercr(ticketChartValue.stream().mapToDouble(TicketChartCell::getTicketYeaPercr).sum()); + int sumTicketMon = ticketChartValue.stream().mapToInt(TicketChartCell::getTicketMon).sum(); + sumCell.setTicketMon(sumTicketMon); + int sumTicketYear = ticketChartValue.stream().mapToInt(TicketChartCell::getTicketYear).sum(); + sumCell.setTicketYear(sumTicketYear); + int sumTicketMonPass = ticketChartValue.stream().mapToInt(TicketChartCell::getTicketMonPassCount).sum(); + int sumTicketYearPass = ticketChartValue.stream().mapToInt(TicketChartCell::getTicketYearPassCount).sum(); + if (sumTicketMonPass>0&&sumTicketMon>0){ + BigDecimal monPassPerc = new BigDecimal(sumTicketMonPass).divide(new BigDecimal(sumTicketMon), 2, BigDecimal.ROUND_UP); + sumCell.setTicketMonPerc(monPassPerc.doubleValue()); + } + if (sumTicketYear>0&&sumTicketYearPass>0){ + BigDecimal yearPassPerc = new BigDecimal(sumTicketYearPass).divide(new BigDecimal(sumTicketYear), 2, BigDecimal.ROUND_UP); + sumCell.setTicketYeaPercr(yearPassPerc.doubleValue()); + } sumCollect.add(sumCell); } TicketChartVo ticketChartVo = new TicketChartVo(); @@ -621,6 +648,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { private List getMonPowerPercentageVos(Integer year, Integer month, List deptList, List deptIds, List stationEntityList, List stationIds, Integer yearBefore, Integer monthBefore) { List deptIdsString = deptIds.stream().map(String::valueOf).collect(Collectors.toList()); + //年计划发电量 List planYearData = planGenertionClient.getPlanGenerationByParam(null, deptIdsString, year.toString()); List powerPercentageVoList = new ArrayList<>(); //水电站,光伏站和带代运维数据近三年数据 @@ -629,7 +657,8 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { List listByYearBefore = TimeUtils.getListByYear(yearBefore); String monStart = TimeUtils.getMon(year, month); String monStartYearBefore = TimeUtils.getMon(yearBefore, month); - String monStartMonBefore = TimeUtils.getMon(year, monthBefore); + String monStartMonBefore = TimeUtils.getEarlyTime(yearBefore, month); +// String monStartMonBefore = TimeUtils.getMon(year, monthBefore); // 格式:站点-日期-发电量 for (Map.Entry> deviceMap : powerMapThree.entrySet()) { String deptNameByKey; @@ -649,7 +678,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { Double planGeneration = 0d; List planGenerationById = planYearData.stream().filter(s -> collect.get(0).getRefDept().equals(s.getStationDeptId())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(planGenerationById)) { - planGeneration = Double.valueOf(planGenerationById.get(0).getPlanGeneration()); + planGeneration = Double.valueOf(planGenerationById.stream().mapToDouble(PlanGenerationEntity::getPlanGeneration).sum()); } //当前机构近三年的数据 Map value = deviceMap.getValue(); @@ -778,11 +807,12 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { private static void getTabelSum(Long deptId, List powerPercentageVoList, List planYearAll, List planMonAll, HashMap map) { Float planGeneration = 0f; if (Func.isNotEmpty(planYearAll)) { - planGeneration = planYearAll.get(0).getPlanGeneration(); + planGeneration =Double.valueOf(planYearAll.stream().mapToDouble(PlanGenerationEntity::getPlanGeneration).sum()).floatValue() ; } Float planMonGeneration = 0f; if (Func.isNotEmpty(planMonAll)) { - planMonGeneration = planMonAll.get(0).getPlanGeneration(); + planMonGeneration =Double.valueOf(planMonAll.stream().mapToDouble(PlanGenerationEntity::getPlanGeneration).sum()).floatValue() ; +// planMonGeneration = planMonAll.get(0).getPlanGeneration(); } MonPowerPercentageVo powerVo = new MonPowerPercentageVo(); powerVo.setDeptId(deptId); @@ -803,7 +833,8 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { yearPercentage = (powerYear.subtract(powerYearBefore)).divide(powerYearBefore, 2, BigDecimal.ROUND_UP); } if (BigDecimal.valueOf(planGeneration).compareTo(BigDecimal.ZERO) != 0) { - planPercentage = powerYear.divide(BigDecimal.valueOf(planGeneration), 2, BigDecimal.ROUND_UP); + //因为计划发电量的单位是kwh,发电量已经转换为万kwh,再加上百分比转换所以需要乘以10000*100 + planPercentage = powerYear.divide(BigDecimal.valueOf(planGeneration).divide(new BigDecimal(1000000)), 2, BigDecimal.ROUND_UP); // 年计划完成率 map.put("yearCompletionRate", planPercentage.toString()); } else { @@ -820,7 +851,8 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { // 项目月计划完成量 BigDecimal planMonPercentage = new BigDecimal(0); if (powerMonth.compareTo(BigDecimal.ZERO) != 0 && BigDecimal.valueOf(planMonGeneration).compareTo(BigDecimal.ZERO) != 0) { - planMonPercentage = powerMonth.divide(BigDecimal.valueOf(planMonGeneration), 2, BigDecimal.ROUND_UP); + //因为计划发电量的单位是kwh,发电量已经转换为万kwh,再加上百分比转换所以需要乘以10000*100 + planMonPercentage = powerMonth.divide(BigDecimal.valueOf(planMonGeneration).divide(new BigDecimal(1000000)), 2, BigDecimal.ROUND_UP); } map.put("monCompletionRate", planMonPercentage); BigDecimal powerMonthBefore = powerPercentageVoList.stream() diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/util/TimeUtils.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/util/TimeUtils.java index 58bf871..ddfd1f9 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/util/TimeUtils.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/util/TimeUtils.java @@ -112,7 +112,7 @@ public class TimeUtils { } public static List getListByYear(Integer year) { List monthList=new ArrayList<>(); - for (int i = 1; i <13; i++) { + for (int i = 0; i <12; i++) { // 创建一个Calendar对象 Calendar calendar = Calendar.getInstance(); // 设置年份 @@ -143,4 +143,24 @@ public class TimeUtils { String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE) ; return start; } + + + public static String getEarlyTime(Integer year, Integer month) { + // 创建一个Calendar对象 + Calendar calendar = Calendar.getInstance(); + // 设置年份 + calendar.set(Calendar.YEAR, year); + // 设置月份为1(即一月) + calendar.set(Calendar.MONTH, month-1); + // 设置日期为1 + calendar.set(Calendar.DATE, 1); + // 设置时间为0点0分0秒 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.add(Calendar.MONTH, -1); + String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE) ; + return start; + } + } diff --git a/hzims-service/operational/src/main/resources/template/waterMonReport.docx b/hzims-service/operational/src/main/resources/template/waterMonReport.docx index f29b3210f5fe0a368dfb64cadb4fba1db52f69a2..5b3dd55a218e6c106a8b890256223201ac6fb728 100644 GIT binary patch delta 19868 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 From 6df568b439ce4eb9d60ba08738e88f34332ca0c3 Mon Sep 17 00:00:00 2001 From: tyty Date: Thu, 7 Dec 2023 16:24:08 +0800 Subject: [PATCH 13/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=B4=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E8=BF=90=E8=A1=8C=E6=9C=88=E6=8A=A5=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/hnac/hzims/operational/OperationalConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java index 16f31e5..93810fc 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/OperationalConstants.java @@ -4,7 +4,7 @@ import lombok.Getter; public class OperationalConstants { - public final static String APP_NAME = "hzims-operational-ty"; + public final static String APP_NAME = "hzims-operational"; From d6af8db1870c88fbc46574a3e5a6e8fc18a07c87 Mon Sep 17 00:00:00 2001 From: tyty Date: Thu, 7 Dec 2023 18:14:21 +0800 Subject: [PATCH 14/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=B4=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E8=BF=90=E8=A1=8C=E6=9C=88=E6=8A=A5=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=B2=BE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/service/impl/AreaMonthReportServiceImpl.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java index 0a84df8..d3eb8c2 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AreaMonthReportServiceImpl.java @@ -685,24 +685,26 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { //今年发电量 powerYear=value.entrySet().stream().filter(s->listByYear.contains(s.getKey())).map(s->BigDecimal.valueOf(s.getValue())).reduce(BigDecimal.ZERO, BigDecimal::add); //转换单位kwh-》万Kwh - powerYear=powerYear.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP); + powerYear=powerYear.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP); powerYearBefore=value.entrySet().stream().filter(s->listByYearBefore.contains(s.getKey())).map(s->BigDecimal.valueOf(s.getValue())).reduce(BigDecimal.ZERO, BigDecimal::add); - powerYearBefore=powerYearBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP); + powerYearBefore=powerYearBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP); powerMonth=value.entrySet().stream().filter(s->monStart.equals(s.getKey())).map(s->BigDecimal.valueOf(s.getValue())).reduce(BigDecimal.ZERO, BigDecimal::add); - powerMonth=powerMonth.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP); + powerMonth=powerMonth.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP); powerMonthBefore=value.entrySet().stream().filter(s->monStartMonBefore.equals(s.getKey())).map(s->BigDecimal.valueOf(s.getValue())).reduce(BigDecimal.ZERO, BigDecimal::add); - powerMonthBefore=powerMonthBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP); + powerMonthBefore=powerMonthBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP); powerMonthYearBefore=value.entrySet().stream().filter(s->monStartYearBefore.equals(s.getKey())).map(s->BigDecimal.valueOf(s.getValue())).reduce(BigDecimal.ZERO, BigDecimal::add); - powerMonthYearBefore=powerMonthYearBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP); + powerMonthYearBefore=powerMonthYearBefore.divide(new BigDecimal(10000),2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP).setScale(2,BigDecimal.ROUND_UP); powerVo.setPowerYear(powerYear.doubleValue()); powerVo.setPowerYearBefore(powerYearBefore.doubleValue()); BigDecimal yearPercentage = new BigDecimal(0); BigDecimal planPercentage = new BigDecimal(0); if (powerYearBefore.compareTo(BigDecimal.ZERO) != 0) { yearPercentage = (powerYear.subtract(powerYearBefore)).divide(powerYearBefore, 2, BigDecimal.ROUND_UP); + yearPercentage.setScale(2, BigDecimal.ROUND_UP); } if (BigDecimal.valueOf(planGeneration).compareTo(BigDecimal.ZERO) != 0) { planPercentage = powerYear.divide(BigDecimal.valueOf(planGeneration), 2, BigDecimal.ROUND_UP); + planPercentage.setScale(2, BigDecimal.ROUND_UP); } powerVo.setPlanPercentage(planPercentage.doubleValue()); powerVo.setPowerYearPercentage(yearPercentage.doubleValue()); @@ -712,6 +714,7 @@ public class AreaMonthReportServiceImpl implements IAreaMonthReportService { BigDecimal monPercentage = new BigDecimal(0); if (powerMonthYearBefore.compareTo(BigDecimal.ZERO) != 0) { monPercentage = (powerMonth.subtract(powerMonthYearBefore)).divide(powerMonthYearBefore, 2, BigDecimal.ROUND_UP); + monPercentage.setScale(2, BigDecimal.ROUND_UP); } powerVo.setPowerMonPercentage(monPercentage.doubleValue()); powerPercentageVoList.add(powerVo); From 08eb4203198184e95eff7d24104dcdf9f226a6a9 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 8 Dec 2023 08:42:02 +0800 Subject: [PATCH 15/22] =?UTF-8?q?#=E9=A3=8E=E7=94=B5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/main/service/impl/HomePageServiceImpl.java | 2 +- .../hzims/operational/main/service/impl/WindHomeServiceImpl.java | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HomePageServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HomePageServiceImpl.java index ecce2e3..2d5f9b3 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HomePageServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HomePageServiceImpl.java @@ -972,7 +972,7 @@ public class HomePageServiceImpl implements IHomePageService { } int faInvestment = otherList.stream().mapToInt(OtherEntity::getFaQuantity).sum(); distributionNetworkVo.setFaInvestment(faInvestment); - double onlineRate = otherList.stream().mapToDouble(o-> Double.valueOf(o.getOnlineRate())).average().getAsDouble();; + double onlineRate = otherList.stream().mapToDouble(o-> Double.parseDouble(o.getOnlineRate())).average().getAsDouble(); if(Math.abs(onlineRate) <= 0){ distributionNetworkVo.setOnlineRate("0.0"); countDownLatch.countDown(); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java index 260894d..79c667d 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/WindHomeServiceImpl.java @@ -137,7 +137,7 @@ public class WindHomeServiceImpl implements WindHomeService { score.setPlanYear(yearPlans.stream().mapToDouble(PlanGenerationEntity::getPlanGeneration).sum()); // 年发电完成率 if(Math.abs(score.getGenerateYear()) > 0 && Math.abs(score.getPlanYear()) > 0){ - score.setCompleteRate(BigDecimal.valueOf(score.getGenerateYear() / score.getPlanYear() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + score.setCompleteRate(BigDecimal.valueOf(score.getGenerateYear() / score.getPlanYear() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); } // 月发电量 score.setGenerateMon(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getPower).sum()); @@ -145,10 +145,13 @@ public class WindHomeServiceImpl implements WindHomeService { score.setPlanMon(yearPlans.stream().filter(o->o.getDateTime().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(PlanGenerationEntity::getPlanGeneration).sum()); // 月发电量完成率 if(Math.abs(score.getGenerateMon()) > 0 && Math.abs(score.getPlanMon()) > 0){ - score.setCompleteMonRate(BigDecimal.valueOf(score.getGenerateMon() / score.getPlanMon() * 100).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); + score.setCompleteMonRate(BigDecimal.valueOf(score.getGenerateMon() / score.getPlanMon() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); } // 月平均风速 - score.setSpeedRate(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getSpeed).average().getAsDouble()); + OptionalDouble speed = winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getSpeed).average();; + if(speed.isPresent()){ + score.setSpeedRate(speed.getAsDouble()); + } // 月利用小时 score.setAvailableMon(winds.stream().filter(o->o.getFillDate().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(WindEntity::getAvailable).sum()); // 日发电量 From 4da1e7048012a4a1321bb3603293f89629434f47 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Tue, 12 Dec 2023 16:58:39 +0800 Subject: [PATCH 16/22] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81bug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/DealDutyRecFlowServiceImpl.java | 3 +++ .../serviceimpl/DefectProcessServiceImpl.java | 4 +++- .../MachineryTicketProcessServiceImpl.java | 4 +++- .../serviceimpl/MaintenanceProcessServiceImpl.java | 3 +++ .../serviceimpl/OneTicketProcessServiceImpl.java | 4 +++- .../OperationTicketProcessServiceImpl.java | 3 +++ .../serviceimpl/OverhaulPlanServiceImpl.java | 3 +++ .../serviceimpl/OverhaulTaskServiceImpl.java | 4 +++- .../controller/MaintenanceController.java | 2 ++ .../scheduled/MaintenanceTaskCreateTask.java | 7 +++++- .../service/impl/MaintenanceServiceImpl.java | 26 +++++++++++++--------- 11 files changed, 47 insertions(+), 16 deletions(-) diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DealDutyRecFlowServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DealDutyRecFlowServiceImpl.java index 92abff0..03e4ec7 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DealDutyRecFlowServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DealDutyRecFlowServiceImpl.java @@ -57,9 +57,12 @@ public class DealDutyRecFlowServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("交接班v4消费流程执行中,param"+response); R dealtDutyRecFlow = iDutyRecClient.dealDutyRecFlow(response); if (!dealtDutyRecFlow.isSuccess()){ + log.error("消费交接班失败"+response); throw new ServiceException("执行交接班v4失败"); } + log.info("交接班v4消费流程结束,param"+response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DefectProcessServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DefectProcessServiceImpl.java index 97a1266..23e2349 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DefectProcessServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/DefectProcessServiceImpl.java @@ -58,10 +58,12 @@ public class DefectProcessServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("消缺工作流程消费开始---param",response); R defect = defectClient.saveDefect(response); if (!defect.isSuccess()) { + log.error("消缺工作流程消费调取对应业务报错---param",response); throw new ServiceException("消缺工作流程出现异常呢"); - } + log.info("消缺工作消费流程结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java index 48d0154..6e28602 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MachineryTicketProcessServiceImpl.java @@ -61,10 +61,12 @@ public class MachineryTicketProcessServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("水力机械工作票消费流程开始---param",response); Boolean pending = ticketProcessService.findPending(response); if (!pending) { + log.error("水力机械工作票消费调用报错---param",response); throw new ServiceException("水力机械工作票流程出现异常呢"); - } + log.info("水力机械工作票消费流程结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MaintenanceProcessServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MaintenanceProcessServiceImpl.java index 972e37b..d9fd8ff 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MaintenanceProcessServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/MaintenanceProcessServiceImpl.java @@ -58,9 +58,12 @@ public class MaintenanceProcessServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("日常维护消费开始---param",response); Boolean pending = maintenanceFeignClient.findPending(response); if (!pending) { + log.error("日常维护消费报错---param",response); throw new ServiceException("日常维护业务流程出错呢"); } + log.info("日常维护消费结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OneTicketProcessServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OneTicketProcessServiceImpl.java index 600e82d..170d403 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OneTicketProcessServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OneTicketProcessServiceImpl.java @@ -66,10 +66,12 @@ public class OneTicketProcessServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("工作票消费调用开始---param",response); Boolean pending = ticketProcessService.findPending(response); if (!pending) { + log.error("工作票消费调用异常---param",response); throw new ServiceException("工作票流程出现异常呢"); - } + log.info("工作票消费调用结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OperationTicketProcessServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OperationTicketProcessServiceImpl.java index 608f866..f7cd785 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OperationTicketProcessServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OperationTicketProcessServiceImpl.java @@ -62,9 +62,12 @@ public class OperationTicketProcessServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("操作票流程消费调用fein接口开始---param",response); Boolean pending = operationTicketFeignClient.findPending(response); if (!pending) { + log.info("操作票流程调用fein接口异常---param",response); throw new ServiceException("操作票流程出现异常呢"); } + log.info("操作票流程消费调用fein接口结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulPlanServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulPlanServiceImpl.java index 57bc9e2..89ed0c4 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulPlanServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulPlanServiceImpl.java @@ -46,9 +46,12 @@ public class OverhaulPlanServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("检修计划调用fein消费开始---param",response); R defect = accessPlanV4Client.listener(response); if (!defect.isSuccess()) { + log.error("检修计划调用fein异常---param",response); throw new ServiceException("检修计划业务执行异常!"); } + log.info("检修计划调用fein结束---param",response); } } diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulTaskServiceImpl.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulTaskServiceImpl.java index 3283052..bdfd199 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulTaskServiceImpl.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/strategy/serviceimpl/OverhaulTaskServiceImpl.java @@ -47,10 +47,12 @@ public class OverhaulTaskServiceImpl extends ProcessAbstractService { */ @Override public void calculate(ProcessWorkFlowResponse response) { + log.info("检修计划调用fein接口消费开始---param",response); R defect = accessTaskV4Client.listener(response); if (!defect.isSuccess()) { + log.error("检修计划调用fein接口消费异常---param",response); throw new ServiceException("检修任务业务执行异常!"); - } + log.info("检修计划调用fein接口消费结束---param",response); } } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/controller/MaintenanceController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/controller/MaintenanceController.java index 1def60a..d504a91 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/controller/MaintenanceController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/controller/MaintenanceController.java @@ -55,11 +55,13 @@ public class MaintenanceController { @PostMapping("/findPending") @ApiOperation(value = "日常维护待处理") public Boolean findPending(@RequestBody ProcessWorkFlowResponse response){ + log.info("日常维护消费处理开始:findPending"); try { maintenanceService.findPending(response); return true; } catch (Exception e) { e.printStackTrace(); + log.error("param"+response+"报错信息"+e.toString()); throw new ServiceException("日常维护待处理:" + e.getMessage()); } } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java index a87d789..e10a281 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/scheduled/MaintenanceTaskCreateTask.java @@ -30,6 +30,7 @@ import org.springblade.flow.core.feign.IFlowClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; @@ -81,7 +82,7 @@ public class MaintenanceTaskCreateTask { final static String REMIND_TASK_END_LIST = "hzims:operation:maintenance:remind:end:tasks"; @XxlJob(TASK_VALUE_MAINTENANCE_TASK_CREATE) - @Transactional +// @Transactional public ReturnT execute(String param) throws Exception { log.info(TASK_VALUE_MAINTENANCE_TASK_CREATE + " start...................................................................................."); Date startDate = StringUtil.isNotBlank(param) ? DateUtil.parse(param, DateUtil.PATTERN_DATE) : DateUtil.parse(DateUtil.formatDate(DateUtil.now()), DateUtil.PATTERN_DATE); @@ -107,6 +108,9 @@ public class MaintenanceTaskCreateTask { planEntityLambdaUpdateWrapper.set(OperMaintenancePlanEntity::getCreateTaskTime, new Date()); planEntityLambdaUpdateWrapper.eq(OperMaintenancePlanEntity::getId, planEntities.get(i).getId()); maintenancePlanService.update(planEntityLambdaUpdateWrapper); + log.info("更新任务派发"+planEntities.get(i)); + }else { + log.error("更新任务派发失败"+planEntities.get(i)); } } Thread.sleep(1000); @@ -123,6 +127,7 @@ public class MaintenanceTaskCreateTask { * @return */ public Boolean generateTaskByPlan(OperMaintenancePlanEntity planEntity,Boolean flag) { + log.info("日常维护计划生成任务开始:param"+planEntity); OperMaintenanceTaskEntity taskEntity = BeanUtil.copy(planEntity,OperMaintenanceTaskEntity.class); //拆分设备 每个设备生成一条任务 List taskIds=new ArrayList<>(); diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java index b9c9785..d8de898 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/MaintenanceServiceImpl.java @@ -143,24 +143,26 @@ public class MaintenanceServiceImpl implements MaintenanceService { // standardTicketInfoVo = (OperMaintenanceTaskEntityVo) jsonObject.get("operMaintenanceTaskEntityVo"); // standardTicketInfoVo = JSONObject.toJavaObject(jsonObject, OperMaintenanceTaskEntityVo.class); } catch (Exception e) { - log.error("获取表单出现异常了~~~~"); + log.error("获取表单出现异常了~~~~"+response); throw new IllegalArgumentException(e.getMessage()); } - //1.查询日常维护信息 - Long id = NumberUtils.toLong(response.getBusinessKey()); - OperMaintenanceTaskEntity dbOperMaintenanceTaskEntity = taskService.getById(id); - if (ObjectUtils.isEmpty(dbOperMaintenanceTaskEntity)) { - log.error("获取日常维护数据不存在"); - return; - } OperMaintenanceTaskEntity entity = new OperMaintenanceTaskEntity(); BeanUtils.copyProperties(standardTicketInfoVo, entity); - entity.setId(id); + //1.查询日常维护信息 + //有Id才进行生成操作 + if (StringUtils.isNotBlank(response.getBusinessKey())) { + Long id = NumberUtils.toLong(response.getBusinessKey()); + OperMaintenanceTaskEntity dbOperMaintenanceTaskEntity = taskService.getById(id); + if (ObjectUtils.isEmpty(dbOperMaintenanceTaskEntity)) { + log.error("获取日常维护数据不存在" + response); + return; + } + entity.setId(id); + //填充日常维护信息 saveOperMaintenanceTaskEntity(entity, response); entity.setProcessInstanceId(response.getProcessInstanceId()); taskService.updateById(entity); - //推送消息 if (response.getTaskId() != null) { // MessagePushRecordDto message = new MessagePushRecordDto(); @@ -225,8 +227,10 @@ public class MaintenanceServiceImpl implements MaintenanceService { } log.info("推送成功~"); } + } } catch (Exception e) { e.printStackTrace(); + log.error("日常维护消费异常:param"+response+"报错信息"+e); } } @@ -310,7 +314,7 @@ public class MaintenanceServiceImpl implements MaintenanceService { * @param finalPlanEntity */ @Override - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public Long fillTask(OperMaintenanceTaskEntity taskEntity, OperMaintenancePlanEntity finalPlanEntity, Boolean flag) { // DefaultTransactionDefinition = new DefaultTransactionDefinition(); // defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); From 61abf20fee535c487f33f3b133fe5fcdaf776713 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Wed, 13 Dec 2023 18:55:56 +0800 Subject: [PATCH 17/22] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=97=A5=E5=B8=B8?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E7=AD=9B=E9=80=89bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintenance/service/impl/OperMaintenanceTaskServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java index 6f8aa43..14e4a1e 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/maintenance/service/impl/OperMaintenanceTaskServiceImpl.java @@ -137,7 +137,9 @@ public class OperMaintenanceTaskServiceImpl extends BaseServiceImpl Date: Fri, 15 Dec 2023 14:47:58 +0800 Subject: [PATCH 18/22] =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E7=8F=AD=E6=AD=BB?= =?UTF-8?q?=E9=94=81bug=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processflow/consumer/StandardWorkTicketConsumer.java | 10 +++++----- .../operational/duty/service/impl/ImsDutyRecServiceImpl.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java index 7f55a09..30bfd68 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java @@ -74,11 +74,11 @@ public class StandardWorkTicketConsumer implements IQueueConsume { WorkflowOperationLog workflowOperationLog = new WorkflowOperationLog(); BeanUtils.copyProperties(response,workflowOperationLog); if (ObjectUtils.isNotEmpty(workflowOperationLog)) { - regularWorkflowOperationLog.setVariables(JSON.toJSONString(response.getVariables())); - regularWorkflowOperationLog.setTakeId(response.getTaskId()); - regularWorkflowOperationLog.setTakeName(response.getTaskName()); - regularWorkflowOperationLog.setIsOperationLog(false); - regularWorkflowOperationLog.setProcessInstanceKey(response.getProcessInstanceId()); + workflowOperationLog.setVariables(JSON.toJSONString(response.getVariables())); + workflowOperationLog.setTakeId(response.getTaskId()); + workflowOperationLog.setTakeName(response.getTaskName()); + workflowOperationLog.setIsOperationLog(false);//没保存成功 + workflowOperationLog.setProcessInstanceKey(response.getProcessInstanceId()); log.info("正在保存到hzims_workflow_operation_log.... :{}", workflowOperationLog); workflowOperationLogService.save(workflowOperationLog); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java index 338596a..1a465a0 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java @@ -200,7 +200,7 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl Date: Fri, 15 Dec 2023 16:26:37 +0800 Subject: [PATCH 19/22] =?UTF-8?q?#=E6=97=A5=E5=BF=97=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/log/logback-dev.xml | 127 +++++++++++++++++++++ .../src/main/resources/log/logback-prod.xml | 127 +++++++++++++++++++++ .../src/main/resources/log/logback-test.xml | 127 +++++++++++++++++++++ 3 files changed, 381 insertions(+) create mode 100644 hzims-service/operational/src/main/resources/log/logback-dev.xml create mode 100644 hzims-service/operational/src/main/resources/log/logback-prod.xml create mode 100644 hzims-service/operational/src/main/resources/log/logback-test.xml diff --git a/hzims-service/operational/src/main/resources/log/logback-dev.xml b/hzims-service/operational/src/main/resources/log/logback-dev.xml new file mode 100644 index 0000000..c67cdd9 --- /dev/null +++ b/hzims-service/operational/src/main/resources/log/logback-dev.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf8 + + + + + + + + + log/info.log + + + log/info/info-%d{yyyy-MM-dd_HH}.%i.log + + 240 + + 20MB + 10GB + true + + + ${log.pattern} + + + + INFO + ACCEPT + DENY + + + + + + log/error.log + + + log/error/error-%d{yyyy-MM-dd_HH}.%i.log + + 360 + + 20MB + 10GB + true + + + ${log.pattern} + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hzims-service/operational/src/main/resources/log/logback-prod.xml b/hzims-service/operational/src/main/resources/log/logback-prod.xml new file mode 100644 index 0000000..3083e23 --- /dev/null +++ b/hzims-service/operational/src/main/resources/log/logback-prod.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf8 + + + + + + + + + log/info.log + + + log/info/info-%d{yyyy-MM-dd_HH}.%i.log + + 240 + + 20MB + 10GB + true + + + ${log.pattern} + + + + INFO + ACCEPT + DENY + + + + + + log/error.log + + + log/error/error-%d{yyyy-MM-dd_HH}.%i.log + + 360 + + 20MB + 10GB + true + + + ${log.pattern} + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hzims-service/operational/src/main/resources/log/logback-test.xml b/hzims-service/operational/src/main/resources/log/logback-test.xml new file mode 100644 index 0000000..fb3de3c --- /dev/null +++ b/hzims-service/operational/src/main/resources/log/logback-test.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf8 + + + + + + + + + + + log/error.log + + + log/error/error-%d{yyyy-MM-dd_HH}.%i.log + + 360 + + 20MB + 10GB + true + + + ${log.pattern} + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c1c1e6bf0f925bac818e4987d56a2aae50ab67e5 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Fri, 15 Dec 2023 17:31:09 +0800 Subject: [PATCH 20/22] =?UTF-8?q?middle=E6=B6=88=E8=B4=B9=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=BF=9D=E5=AD=98=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumer/StandardWorkTicketConsumer.java | 49 +++++++++------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java index 30bfd68..71055ea 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/processflow/consumer/StandardWorkTicketConsumer.java @@ -45,7 +45,7 @@ public class StandardWorkTicketConsumer implements IQueueConsume { //记录操作日志 WorkflowOperationLog regularWorkflowOperationLog = new WorkflowOperationLog(); - BeanUtils.copyProperties(response,regularWorkflowOperationLog); + BeanUtils.copyProperties(response, regularWorkflowOperationLog); if (ObjectUtils.isNotEmpty(regularWorkflowOperationLog)) { regularWorkflowOperationLog.setVariables(JSON.toJSONString(response.getVariables())); regularWorkflowOperationLog.setTakeId(response.getTaskId()); @@ -53,40 +53,29 @@ public class StandardWorkTicketConsumer implements IQueueConsume { regularWorkflowOperationLog.setIsOperationLog(true); regularWorkflowOperationLog.setProcessInstanceKey(response.getProcessInstanceId()); log.info("正在记录操作日志WorkflowOperationLog.... :{}", regularWorkflowOperationLog); - workflowOperationLogService.save(regularWorkflowOperationLog); } + try { + WorkflowQueue ticker = new WorkflowQueue(); + ticker.setProcessDefinitionKey(taskDefinitionKey); + //判断执行具体的实现类 + ProcessService processService = + ticketServiceList.stream().filter(item -> item.isWorkflowProcess(ticker)).findFirst().orElse(null); + if (ObjectUtils.isNotEmpty(processService)) { + //执行业务方法 + try { + processService.calculate(response); + } catch (Exception e) { + e.printStackTrace(); + //todo 业务出错误 做补偿 + log.error("业务出错,StandardWorkTicketConsumer: {}", e.getMessage()); + log.error("业务出错,StandardWorkTicketConsumer: {} ", response); + regularWorkflowOperationLog.setIsOperationLog(false);//调用消费方抛出异常 - - WorkflowQueue ticker = new WorkflowQueue(); - ticker.setProcessDefinitionKey(taskDefinitionKey); - //判断执行具体的实现类 - ProcessService processService = - ticketServiceList.stream().filter(item -> item.isWorkflowProcess(ticker)).findFirst().orElse(null); - if (ObjectUtils.isNotEmpty(processService)) { - //执行业务方法 - try { - processService.calculate(response); - } catch (Exception e) { - e.printStackTrace(); - //todo 业务出错误 做补偿 - log.error("业务出错,StandardWorkTicketConsumer: {}", e.getMessage()); - log.error("业务出错,StandardWorkTicketConsumer: {} ", response); - WorkflowOperationLog workflowOperationLog = new WorkflowOperationLog(); - BeanUtils.copyProperties(response,workflowOperationLog); - if (ObjectUtils.isNotEmpty(workflowOperationLog)) { - workflowOperationLog.setVariables(JSON.toJSONString(response.getVariables())); - workflowOperationLog.setTakeId(response.getTaskId()); - workflowOperationLog.setTakeName(response.getTaskName()); - workflowOperationLog.setIsOperationLog(false);//没保存成功 - workflowOperationLog.setProcessInstanceKey(response.getProcessInstanceId()); - log.info("正在保存到hzims_workflow_operation_log.... :{}", workflowOperationLog); - workflowOperationLogService.save(workflowOperationLog); } - } + } finally { + workflowOperationLogService.save(regularWorkflowOperationLog); } - - } } From 76da44caf7f17f9a9f445755423711eb1527a851 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Mon, 18 Dec 2023 11:45:12 +0800 Subject: [PATCH 21/22] =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E7=8F=AD=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/operational/duty/controller/ImsDutyRecController.java | 3 ++- .../hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/controller/ImsDutyRecController.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/controller/ImsDutyRecController.java index 3eb3643..07d391a 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/controller/ImsDutyRecController.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/controller/ImsDutyRecController.java @@ -132,7 +132,8 @@ public class ImsDutyRecController extends BladeController { @ApiOperationSupport(order = 8) @ApiOperation(value = "处理工作流程", notes = "传入flow") public R submit(@Valid @RequestBody BladeFlow flow) { - return R.status(imsDutyRecService.completeTask(flow)); + return R.success("接口已弃用"); +// return R.status(imsDutyRecService.completeTask(flow)); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java index 1a465a0..dff57e9 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/service/impl/ImsDutyRecServiceImpl.java @@ -106,6 +106,7 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl() {{ @@ -338,6 +339,7 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl Date: Mon, 18 Dec 2023 12:00:51 +0800 Subject: [PATCH 22/22] =?UTF-8?q?#=E5=8D=95=E4=BD=8D=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operation/station/impl/StationAttributeServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationAttributeServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationAttributeServiceImpl.java index 629e2c6..a9789e4 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationAttributeServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationAttributeServiceImpl.java @@ -9,8 +9,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.CollectionUtil; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -31,6 +30,8 @@ public class StationAttributeServiceImpl extends BaseServiceImpl new TreeSet<>(Comparator.comparing(StationAttributeEntity::getAttributes))), ArrayList::new)) + .stream().collect(Collectors.toMap(StationAttributeEntity::getAttributes, StationAttributeEntity::getUnit)); } }