add:第一版测试版本,第二次联调。
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.nl.task.provider;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -8,10 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.api.task.api.TaskAPI;
|
||||
import org.nl.api.task.core.QRCodeTaskRequestParam;
|
||||
import org.nl.enums.ScheduleTaskReportStatusEnum;
|
||||
import org.nl.exception.BadRequestException;
|
||||
import org.nl.response.WebResponse;
|
||||
import org.nl.task.entity.Task;
|
||||
import org.nl.task.enums.TaskSourceEnum;
|
||||
import org.nl.task.enums.TaskStatusEnum;
|
||||
import org.nl.task.param.CancelTaskRequestParam;
|
||||
import org.nl.task.param.CreateTaskRequestParam;
|
||||
import org.nl.task.service.TaskService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -54,7 +60,7 @@ public class TaskAPIProvider implements TaskAPI {
|
||||
@Override
|
||||
public String taskOperationConfirm(String taskCode,String vehicleNumber) {
|
||||
Task task = this.queryCurrentTaskByVehicleNumber(vehicleNumber);
|
||||
if (ObjectUtil.isEmpty(task)){
|
||||
if (task == null || BeanUtil.isEmpty(task)){
|
||||
log.info("任务操作确认失败,任务不存在");
|
||||
return null;
|
||||
}
|
||||
@@ -64,4 +70,38 @@ public class TaskAPIProvider implements TaskAPI {
|
||||
}
|
||||
return task.getVehicleReportStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse createTask(QRCodeTaskRequestParam qrCodeTaskRequestParam) {
|
||||
CreateTaskRequestParam param = BeanUtil.toBean(qrCodeTaskRequestParam, CreateTaskRequestParam.class);
|
||||
return taskService.createTask(param, TaskSourceEnum.QRCODE.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse cancelTask(String taskCode) {
|
||||
CancelTaskRequestParam param = new CancelTaskRequestParam();
|
||||
param.setTask_code(taskCode);
|
||||
return taskService.cancelTask(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse queryTaskInfoByRoom(String room) {
|
||||
// 获取当前存在的任务
|
||||
List<Task> taskList = taskService.queryCurrentTaskInfo();
|
||||
// 根据房间号查找当前任务中是否存在
|
||||
Task currentTask = taskList.stream().filter(task -> room.equals(task.getDestinations()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if (ObjectUtil.isNotEmpty(currentTask)){
|
||||
jsonObject.put("currentTaskInfo", currentTask);
|
||||
}
|
||||
jsonObject.put("currentTaskCount", taskList.size());
|
||||
return WebResponse.requestParamOk(jsonObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse taskOperationConfirm(String taskCode) {
|
||||
return taskService.taskOperationConfirm(taskCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,13 +41,13 @@ public interface TaskService extends IService<Task>{
|
||||
WebResponse resumeTask(PauseAndResumeTaskParam pauseAndResumeTaskParam);
|
||||
|
||||
/**
|
||||
* 查询当前未完成的任务
|
||||
* 根据车号查询当前未完成的任务
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse queryNotFinishTaskInfoByVehicleNumber(String vehicle_number);
|
||||
|
||||
/**
|
||||
* 查询当前未完成的任务
|
||||
* 根据车号查询当前未完成的任务
|
||||
* @return List<Task>
|
||||
*/
|
||||
List<Task> queryCurrentTaskInfoByVehicleNumber(String vehicle_number);
|
||||
@@ -64,4 +64,10 @@ public interface TaskService extends IService<Task>{
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse oneClickOperation(OneClickOperationRequestParam oneClickOperationRequestParam,String taskSource);
|
||||
|
||||
/**
|
||||
* 根据房间号查询当前任务信息
|
||||
* @return List<Task>
|
||||
*/
|
||||
List<Task> queryCurrentTaskInfo();
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -56,8 +57,16 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper,Task> implements Tas
|
||||
@Resource
|
||||
private ScheduleTaskAPI scheduleTaskAPI;
|
||||
|
||||
/**
|
||||
* <车号,List<任务信息>>
|
||||
*/
|
||||
private ConcurrentHashMap<String,List<Task>> taskInfoList = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 当前任务集合
|
||||
*/
|
||||
private List<Task> currentTaskList = new CopyOnWriteArrayList<>();
|
||||
|
||||
/**
|
||||
* 定时查询车辆任务状态(每秒执行)
|
||||
*/
|
||||
@@ -67,51 +76,56 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper,Task> implements Tas
|
||||
List<Task> taskList = taskMapper.selectList(new LambdaQueryWrapper<>(Task.class)
|
||||
.lt(Task::getStatus,TaskStatusEnum.FINISHED.getCode())
|
||||
);
|
||||
currentTaskList.clear();
|
||||
currentTaskList = taskList;
|
||||
taskInfoList.clear();
|
||||
//根据车辆编号分类 车辆任务队列。
|
||||
taskInfoList = taskList.stream()
|
||||
.filter(task -> StrUtil.isNotBlank(task.getVehicle_number()) || StrUtil.isNotBlank(task.getProcessingVehicle()))
|
||||
.collect(Collectors.groupingByConcurrent(task ->
|
||||
StrUtil.isNotBlank(task.getProcessingVehicle()) ?
|
||||
task.getProcessingVehicle() :
|
||||
task.getVehicle_number(),
|
||||
ConcurrentHashMap::new,
|
||||
Collectors.toList()
|
||||
));
|
||||
for (Task task : taskList) {
|
||||
HttpResponse result = scheduleTaskAPI.queryTaskStatusByTaskId(task.getTask_code());
|
||||
if (result == null || !result.isOk()){
|
||||
log.info("获取调度任务状态失败");
|
||||
continue;
|
||||
}
|
||||
JSONObject scheduleTaskStatusJSON = JSONObject.parseObject(result.body());
|
||||
String scheduleTaskState = scheduleTaskStatusJSON.getString("state");
|
||||
String newTaskState = "";
|
||||
if (ScheduleTaskStatusEnum.FINISHED.name().equals(scheduleTaskState)){
|
||||
newTaskState = TaskStatusEnum.FINISHED.getCode();
|
||||
} else if (ScheduleTaskStatusEnum.isFinalState(scheduleTaskState)) {
|
||||
newTaskState = TaskStatusEnum.CANCELED.getCode();
|
||||
task.setRemark("无路由或取消:" + scheduleTaskState);
|
||||
} else if (ScheduleTaskStatusEnum.BEING_PROCESSED.name().equals(scheduleTaskState)) {
|
||||
newTaskState = TaskStatusEnum.EXECUTING.getCode();
|
||||
// 充电和加水任务的目标点是调度分配的,在查询任务状态时更新目标点。
|
||||
if (StrUtil.isBlank(task.getDestinations()) && ObjectUtil.isNotEmpty(scheduleTaskStatusJSON.getJSONArray("destinations"))){
|
||||
JSONObject destination = scheduleTaskStatusJSON.getJSONArray("destinations").getJSONObject(0);
|
||||
task.setDestinations(destination.getString("locationName"));
|
||||
if (!taskList.isEmpty()) {
|
||||
taskInfoList = taskList.stream()
|
||||
.filter(task -> StrUtil.isNotBlank(task.getVehicle_number()) || StrUtil.isNotBlank(task.getProcessingVehicle()))
|
||||
.collect(Collectors.groupingByConcurrent(task ->
|
||||
StrUtil.isNotBlank(task.getProcessingVehicle()) ?
|
||||
task.getProcessingVehicle() :
|
||||
task.getVehicle_number(),
|
||||
ConcurrentHashMap::new,
|
||||
Collectors.toList()
|
||||
));
|
||||
for (Task task : taskList) {
|
||||
HttpResponse result = scheduleTaskAPI.queryTaskStatusByTaskId(task.getTask_code());
|
||||
if (result == null || !result.isOk()){
|
||||
log.info("获取调度任务状态失败");
|
||||
continue;
|
||||
}
|
||||
JSONObject scheduleTaskStatusJSON = JSONObject.parseObject(result.body());
|
||||
String scheduleTaskState = scheduleTaskStatusJSON.getString("state");
|
||||
String newTaskState = "";
|
||||
if (ScheduleTaskStatusEnum.FINISHED.name().equals(scheduleTaskState)){
|
||||
newTaskState = TaskStatusEnum.FINISHED.getCode();
|
||||
} else if (ScheduleTaskStatusEnum.isFinalState(scheduleTaskState)) {
|
||||
newTaskState = TaskStatusEnum.CANCELED.getCode();
|
||||
task.setRemark("无路由或取消:" + scheduleTaskState);
|
||||
} else if (ScheduleTaskStatusEnum.BEING_PROCESSED.name().equals(scheduleTaskState)) {
|
||||
newTaskState = TaskStatusEnum.EXECUTING.getCode();
|
||||
// 充电和加水任务的目标点是调度分配的,在查询任务状态时更新目标点。
|
||||
if (StrUtil.isBlank(task.getDestinations()) && ObjectUtil.isNotEmpty(scheduleTaskStatusJSON.getJSONArray("destinations"))){
|
||||
JSONObject destination = scheduleTaskStatusJSON.getJSONArray("destinations").getJSONObject(0);
|
||||
task.setDestinations(destination.getString("locationName"));
|
||||
}
|
||||
task.setProcessingVehicle(scheduleTaskStatusJSON.getString("processingVehicle"));
|
||||
}
|
||||
// 任务状态改变 进行更新
|
||||
if (StrUtil.isNotBlank(newTaskState) && !newTaskState.equals(task.getStatus())){
|
||||
log.info("更新任务状态,任务号:{},更新前状态:{},需要更新成的状态:{}",task.getTask_code(),task.getStatus(),newTaskState);
|
||||
task.setStatus(newTaskState);
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
// 更新任务状态
|
||||
taskMapper.updateById(task);
|
||||
log.info("更新任务状态成功");
|
||||
}
|
||||
task.setProcessingVehicle(scheduleTaskStatusJSON.getString("processingVehicle"));
|
||||
}
|
||||
// 任务状态改变 进行更新
|
||||
if (StrUtil.isNotBlank(newTaskState) && !newTaskState.equals(task.getStatus())){
|
||||
log.info("更新任务状态,任务号:{},更新前状态:{},需要更新成的状态:{}",task.getTask_code(),task.getStatus(),newTaskState);
|
||||
task.setStatus(newTaskState);
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
// 更新任务状态
|
||||
taskMapper.updateById(task);
|
||||
log.info("更新任务状态成功");
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("更新任务状态失败: {}", e.getMessage());
|
||||
log.error("更新任务状态失败: {}", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,4 +301,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper,Task> implements Tas
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Task> queryCurrentTaskInfo() {
|
||||
return currentTaskList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user