Browse Source

灵州站按区域进行巡视任务报告自动合并

master
wangguangyuan 6 days ago
parent
commit
588c7564fc
9 changed files with 243 additions and 6 deletions
  1. +4
    -0
      inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java
  2. +36
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/annotation/TaskStatusChange.java
  3. +90
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/aspect/TaskStatusChangeAspect.java
  4. +5
    -3
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java
  5. +9
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java
  6. +3
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java
  7. +64
    -3
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java
  8. +4
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java
  9. +28
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml

+ 4
- 0
inspect-main/inspect-main-start/src/main/java/com/inspect/InspectStartApplication.java View File

@ -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) {


+ 36
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/annotation/TaskStatusChange.java View File

@ -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;
}

+ 90
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/aspect/TaskStatusChangeAspect.java View File

@ -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);
}
}

+ 5
- 3
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java View File

@ -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());
}


+ 9
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java View File

@ -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<Map<String, Long>> selectTaskRationalGroupByType();
String selectChannelCodeByPatrolPointId(String patrolPointId);
List<PatrolTask> selectPatrolTaskListByTaskAreaName(String taskAreaName);
List<JSONObject> selectPatrolTaskStatus(@Param("taskCodes") Set<String> patrolTaskCodes);
String selectStationNo();
}

+ 3
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java View File

@ -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<Map<String, String>> pointStatistics();
void correctionAlgorithm(PatrolData patrolData);
void executeAsync(PatrolTaskStatus taskStatus);
}

+ 64
- 3
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java View File

@ -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<PatrolTask> patrolAreaTasks = patrolTaskMapper.selectPatrolTaskListByTaskAreaName(taskAreaName + "_");
log.debug("异步执行任务报告合并,区域: {} 下的任务: {}", taskAreaName, patrolAreaTasks);
// 换流变_ 14个
// 直流场_ 6个
log.debug("异步执行任务报告合并,区域: {} 下的任务数量: {}", taskAreaName, patrolAreaTasks.size());
if (patrolAreaTasks.size() == 0) {
return;
}
Set<String> patrolTaskCodes = patrolAreaTasks.stream().map(PatrolTask::getTaskCode).collect(Collectors.toSet());
log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, patrolTaskCodes);
// patrolTaskStatus patrolTaskResultMain 关联查询区域任务执行状态已完成并且未归档的数量是否和区域任务总数相等相等则归档该区域的任务
// 查询区域任务执行状态已完成并且未归档的数量是否和区域任务总数相等相等则归档该区域的任务
List<JSONObject> jsonObjects = patrolTaskMapper.selectPatrolTaskStatus(patrolTaskCodes);
log.debug("异步执行任务报告合并,区域: {} 下的已完成任务集合: {}", taskAreaName, jsonObjects);
Set<String> taskCodeStatus = jsonObjects.stream().map(jsonObject -> jsonObject.getString("taskCode")).collect(Collectors.toSet());
log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, taskCodeStatus);
// 如果patrolTaskCodes 都在taskCodeStatus中则归档该区域的任务
if (!taskCodeStatus.containsAll(patrolTaskCodes)) {
return;
}
List<Long> 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);
}
}

+ 4
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java View File

@ -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);
}


+ 28
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml View File

@ -351,4 +351,32 @@
<select id="selectChannelCodeByPatrolPointId" resultType="java.lang.String" parameterType="java.lang.String">
select d.channel_code from patrol_preset_pos d where d.patrol_point_id = #{patrolPointId} limit 1
</select>
<select id="selectPatrolTaskListByTaskAreaName" resultMap="PatrolTaskResult">
select * from patrol_task where task_name like concat(#{taskName}, '%');
</select>
<select id="selectPatrolTaskStatus" resultType="com.alibaba.fastjson.JSONObject">
select
s.task_code as taskCode,
s.task_state as taskState,
s.task_patrolled_id as taskPatrolledId,
ptrm.file_status as fileStatus,
ptrm.task_code as taskCode,
ptrm.line_id as lineId
from
patrol_task_status s left join patrol_task_result_main ptrm on s.task_code = ptrm.task_code and s.task_patrolled_id = ptrm.task_patrolled_id
where
s.task_state = '1' and ptrm.file_status = '0' and date_format(s.create_time,'%Y%m%d') = date_format(current_date,'%Y%m%d') and
s.task_code in
<foreach item="taskCode" collection="taskCodes" open="(" separator="," close=")">
#{taskCode}
</foreach>
</select>
<select id="selectStationNo" resultType="java.lang.String">
select station_no from basedata_station limit 1
</select>
</mapper>

Loading…
Cancel
Save