diff --git a/inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java b/inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java index 911d6df..eb0c44d 100644 --- a/inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java +++ b/inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java @@ -8,7 +8,9 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.retry.annotation.EnableRetry; +import org.springframework.scheduling.annotation.EnableAsync; @EnableRetry @EnableCustomConfig @@ -16,6 +18,8 @@ import org.springframework.retry.annotation.EnableRetry; @EnableRyFeignClients @EnableDiscoveryClient @SpringBootApplication +@EnableAspectJAutoProxy +@EnableAsync public class InspectStartApplication { private final static Logger log = LoggerFactory.getLogger(InspectStartApplication.class); public static void main(String[] args) { diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/annotation/TaskStatusChange.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/annotation/TaskStatusChange.java new file mode 100644 index 0000000..c5ac33d --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/annotation/TaskStatusChange.java @@ -0,0 +1,36 @@ +package com.inspect.annotation; + +import java.lang.annotation.*; + +/** + * 任务状态变更注解 + * 用于标记任务状态变更的方法,支持状态过滤 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TaskStatusChange { + /** + * 目标状态 + * 只有当任务状态变更到指定状态时才触发切面逻辑 + */ + String targetState() default ""; + + /** + * 状态字段名称 + * 方法参数中表示任务状态的字段名 + */ + String stateField() default "taskState"; + + /** + * 任务ID字段名称 + * 方法参数中表示任务ID的字段名 + */ + String taskIdField() default "taskPatrolledId"; + + /** + * 是否异步执行 + * 如果为true,切面逻辑将异步执行 + */ + boolean async() default true; +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/aspect/TaskStatusChangeAspect.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/aspect/TaskStatusChangeAspect.java new file mode 100644 index 0000000..34cf3ba --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/aspect/TaskStatusChangeAspect.java @@ -0,0 +1,90 @@ +package com.inspect.aspect; + +import com.inspect.annotation.TaskStatusChange; +import com.inspect.task.service.IPatrolTaskService; +import com.inspect.taskstatus.domain.PatrolTaskStatus; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class TaskStatusChangeAspect { + + @Autowired + private IPatrolTaskService patrolTaskService; + + + /** + * 拦截带有 @TaskStatusChange 注解的方法 + */ + @AfterReturning(pointcut = "@annotation(taskStatusChange)", returning = "result") + public void afterTaskStatusChange(JoinPoint joinPoint, TaskStatusChange taskStatusChange, Object result) { + try { + log.info("任务状态变更切面执行,方法: {}", joinPoint.getSignature()); + // 获取方法参数 + Object[] args = joinPoint.getArgs(); + if (args == null || args.length == 0) { + return; + } + + // 查找 PatrolTaskStatus 参数 + PatrolTaskStatus taskStatus = findTaskStatusParam(args, taskStatusChange.stateField()); + if (taskStatus == null) { + log.warn("未找到任务状态参数"); + return; + } + + // 检查状态是否符合目标状态 + if (!isTargetState(taskStatus, taskStatusChange.targetState())) { + return; + } + + // 执行切面逻辑 + if (taskStatusChange.async()) { + log.info("异步执行区域任务合并报告,任务执行id: {}", taskStatus.getTaskPatrolledId()); + patrolTaskService.executeAsync(taskStatus); + } else { + executeSync(taskStatus); + } + + } catch (Exception e) { + log.error("任务状态变更切面处理异常", e); + } + } + + /** + * 从方法参数中查找任务状态对象 + */ + private PatrolTaskStatus findTaskStatusParam(Object[] args, String stateField) { + for (Object arg : args) { + if (arg instanceof PatrolTaskStatus) { + return (PatrolTaskStatus) arg; + } + } + return null; + } + + /** + * 检查是否为目标状态 + */ + private boolean isTargetState(PatrolTaskStatus taskStatus, String targetState) { + if (targetState == null || targetState.isEmpty()) { + return true; // 如果没有指定目标状态,则所有状态变更都触发 + } + return targetState.equals(taskStatus.getTaskState()); + } + + /** + * 同步执行 + */ + private void executeSync(PatrolTaskStatus taskStatus) { + log.info("同步执行任务状态变更处理,任务: {}", taskStatus); + } + + +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java index 60ae52e..3e1974d 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java @@ -781,8 +781,9 @@ public class PatrolResultController extends BaseController { } String[] imageUrlArr = new String[1]; - if (image.contains(StringUtils.COMMA)) { - imageUrlArr[0] = image.split(StringUtils.COMMA)[0]; + if (image.contains(StringUtils.COMMA) && image.split(StringUtils.COMMA).length > 1) { + // 之前默认取的第一张图片,钱塘江站云深处机器狗红外会传两张,第二张才会带值,所以现在改为取第二张图片 + imageUrlArr[0] = image.split(StringUtils.COMMA)[1]; } else { imageUrlArr[0] = image; } @@ -1359,8 +1360,9 @@ public class PatrolResultController extends BaseController { String patrolPointId = String.valueOf(maps.get("patrol_point_id")); arr.setDeviceId(patrolPointId); } + } else { + arr.setDeviceId(String.valueOf(map.get("patrol_point_id"))); } - code = arr.getTaskCode(); patrolDeviceCodeList.add(arr.getPatrolDeviceCode()); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java index 51324cc..c362ed7 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java @@ -1,12 +1,15 @@ package com.inspect.task.mapper; +import com.alibaba.fastjson.JSONObject; import com.inspect.task.domain.DeviceConvert; import com.inspect.task.domain.PatrolTask; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; +import java.util.Set; @Mapper public interface PatrolTaskMapper { @@ -45,4 +48,10 @@ public interface PatrolTaskMapper { List> selectTaskRationalGroupByType(); String selectChannelCodeByPatrolPointId(String patrolPointId); + + List selectPatrolTaskListByTaskAreaName(String taskAreaName); + + List selectPatrolTaskStatus(@Param("taskCodes") Set patrolTaskCodes); + + String selectStationNo(); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java index d046c11..cf68504 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java @@ -3,6 +3,7 @@ package com.inspect.task.service; import com.inspect.task.domain.DeviceConvert; import com.inspect.task.domain.PatrolData; import com.inspect.task.domain.PatrolTask; +import com.inspect.taskstatus.domain.PatrolTaskStatus; import java.util.List; import java.util.Map; @@ -51,4 +52,6 @@ public interface IPatrolTaskService { List> pointStatistics(); void correctionAlgorithm(PatrolData patrolData); + + void executeAsync(PatrolTaskStatus taskStatus); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java index e2f9f7f..81487b9 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java @@ -1,10 +1,15 @@ package com.inspect.task.service.impl; +import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.inspect.analysis.mapper.ResultAnalysisMapper; import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.HttpClientUtils; +import com.inspect.base.core.utils.StringUtils; +import com.inspect.partrolresult.util.PrintUtil; +import com.inspect.resultmain.controller.PatrolTaskResultMainController; +import com.inspect.resultmain.domain.PatrolTaskResultMain; import com.inspect.task.domain.DeviceConvert; import com.inspect.task.domain.PatrolData; @@ -12,12 +17,14 @@ import com.inspect.task.domain.PatrolTask; import com.inspect.task.mapper.PatrolTaskMapper; import com.inspect.task.service.IPatrolTaskService; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; +import com.inspect.taskstatus.domain.PatrolTaskStatus; +import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Slf4j @@ -26,6 +33,12 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { final PatrolTaskMapper patrolTaskMapper; + @Autowired + private PatrolTaskStatusMapper patrolTaskStatusMapper; + + @Autowired + private PatrolTaskResultMainController patrolTaskResultMainController; + final ResultAnalysisMapper resultAnalysisMapper; @Autowired @@ -158,4 +171,52 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { log.info("controller correctionAlgorithm HttpClientUtils.get execute exception: {}", e.getMessage()); } } + + /** + * 异步执行 + */ + @Async + public void executeAsync(PatrolTaskStatus taskStatus) { + String stationNo = patrolTaskMapper.selectStationNo(); + long startTime = System.currentTimeMillis(); + log.debug("异步执行任务报告合并,任务: {}", taskStatus); + String taskName = taskStatus.getTaskName(); + if (!"lingzhouzhiliu".equals(stationNo) || StringUtils.isEmpty(taskName) || !taskName.contains("_")) { + return; + } + String[] taskNames = StringUtils.split(taskName, "_"); + String taskAreaName = taskNames[0]; + // 根据区域名查询该区域的任务数量 + List patrolAreaTasks = patrolTaskMapper.selectPatrolTaskListByTaskAreaName(taskAreaName + "_"); + log.debug("异步执行任务报告合并,区域: {} 下的任务: {}", taskAreaName, patrolAreaTasks); + // 换流变_ 14个 + // 直流场_ 6个 + log.debug("异步执行任务报告合并,区域: {} 下的任务数量: {}", taskAreaName, patrolAreaTasks.size()); + if (patrolAreaTasks.size() == 0) { + return; + } + Set patrolTaskCodes = patrolAreaTasks.stream().map(PatrolTask::getTaskCode).collect(Collectors.toSet()); + log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, patrolTaskCodes); + + // patrolTaskStatus 和 patrolTaskResultMain 关联查询,区域任务执行状态已完成,并且未归档的数量是否和区域任务总数相等,相等则归档该区域的任务 + + // 查询区域任务执行状态已完成,并且未归档的数量是否和区域任务总数相等,相等则归档该区域的任务 + List jsonObjects = patrolTaskMapper.selectPatrolTaskStatus(patrolTaskCodes); + log.debug("异步执行任务报告合并,区域: {} 下的已完成任务集合: {}", taskAreaName, jsonObjects); + Set taskCodeStatus = jsonObjects.stream().map(jsonObject -> jsonObject.getString("taskCode")).collect(Collectors.toSet()); + log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, taskCodeStatus); + + // 如果patrolTaskCodes 都在taskCodeStatus中,则归档该区域的任务 + if (!taskCodeStatus.containsAll(patrolTaskCodes)) { + return; + } + List lineIds = jsonObjects.stream().map(jsonObject -> jsonObject.getLong("lineId")).distinct().collect(Collectors.toList()); + + PatrolTaskResultMain patrolTaskResultMain = new PatrolTaskResultMain(); + patrolTaskResultMain.setLineIds(lineIds); + patrolTaskResultMain.setCheckPerson("admin"); + patrolTaskResultMainController.updateInfo_lingzhou(patrolTaskResultMain); + PrintUtil.useTime("异步执行任务报告合并,区域: " + taskAreaName + " 下的任务归档完成", startTime); + + } } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java index 39cc907..4a1a6f9 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java @@ -1,5 +1,6 @@ package com.inspect.taskstatus.service.impl; +import com.inspect.annotation.TaskStatusChange; import com.inspect.base.core.constant.Color; import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.TaskCount; @@ -47,12 +48,14 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { return this.patrolTaskStatusMapper.selectCountListByDate(patrolTaskStatus); } + @TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态 public int insertPatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) { patrolTaskStatus.setCreateTime(new Date()); patrolTaskStatus.setStartTime(new Date()); return this.patrolTaskStatusMapper.insertPatrolTaskStatus(patrolTaskStatus); } + @TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态 public int updatePatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) { log.info(Color.RED + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + Color.END); log.info("patrolTaskStatus: {}", patrolTaskStatus); @@ -63,6 +66,7 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskProgress(patrolTaskStatus); } + @TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态 public int updatePatrolTaskStatusOfTaskState(PatrolTaskStatus patrolTaskStatus) { return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskState(patrolTaskStatus); } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml index d255c88..d734ee1 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml @@ -351,4 +351,32 @@ + + + + + + + +