add:第一版测试版本。

This commit is contained in:
2025-12-15 10:42:02 +08:00
parent 98e0bbcaa6
commit cd483c81d1
84 changed files with 3714 additions and 26 deletions

View File

@@ -27,5 +27,11 @@
<groupId>org.nl</groupId>
<artifactId>nl-business-api</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>fastjson</artifactId>-->
<!-- </dependency>-->
</dependencies>
</project>

View File

@@ -0,0 +1,73 @@
package org.nl.task.controller;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.nl.logging.annotation.Log;
import org.nl.task.enums.TaskSourceEnum;
import org.nl.task.param.CancelTaskRequestParam;
import org.nl.task.param.CreateTaskRequestParam;
import org.nl.task.param.OneClickOperationRequestParam;
import org.nl.task.param.PauseAndResumeTaskParam;
import org.nl.task.service.TaskService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author dsh
* 2025/11/27
*/
@Slf4j
@RestController
@RequestMapping("/task/")
public class TaskController {
@Resource
private TaskService taskService;
@PostMapping("/createTask")
@Log("创建任务")
public ResponseEntity<Object> sendTask(@RequestBody @Validated CreateTaskRequestParam createTaskRequestParam){
return new ResponseEntity<>(taskService.createTask(createTaskRequestParam, TaskSourceEnum.SCREEN.getName()), HttpStatus.OK);
}
@PostMapping("/cancelTask")
@Log("取消任务")
public ResponseEntity<Object> cancelTask(@RequestBody @Validated CancelTaskRequestParam cancelTaskRequestParam){
return new ResponseEntity<>(taskService.cancelTask(cancelTaskRequestParam), HttpStatus.OK);
}
@PostMapping("/pauseTask")
@Log("暂停任务")
public ResponseEntity<Object> pauseTask(@RequestBody @Validated PauseAndResumeTaskParam pauseAndResumeTaskParam){
return new ResponseEntity<>(taskService.pauseTask(pauseAndResumeTaskParam), HttpStatus.OK);
}
@PostMapping("/resumeTask")
@Log("恢复任务")
public ResponseEntity<Object> resumeTask(@RequestBody @Validated PauseAndResumeTaskParam pauseAndResumeTaskParam){
return new ResponseEntity<>(taskService.resumeTask(pauseAndResumeTaskParam), HttpStatus.OK);
}
@GetMapping("/queryNotFinishTaskInfoByVehicleNumber")
@Log("查询当前未完成的任务")
public ResponseEntity<Object> queryNotFinishTaskInfoByVehicleNumber(@RequestParam String vehicle_number){
return new ResponseEntity<>(taskService.queryNotFinishTaskInfoByVehicleNumber(vehicle_number), HttpStatus.OK);
}
@PostMapping("/taskOperationConfirm")
@Log("任务操作确认")
public ResponseEntity<Object> taskOperationConfirm(@RequestParam String task_code){
return new ResponseEntity<>(taskService.taskOperationConfirm(task_code), HttpStatus.OK);
}
@PostMapping("/oneClickOperation")
@Log("一键操作任务")
public ResponseEntity<Object> oneClickOperation(@RequestBody OneClickOperationRequestParam oneClickOperationRequestParam){
return new ResponseEntity<>(taskService.oneClickOperation(oneClickOperationRequestParam, TaskSourceEnum.SCREEN.getName()),HttpStatus.OK);
}
}

View File

@@ -0,0 +1,99 @@
package org.nl.task.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @author dsh
* 2025/11/27
*/
@Data
@TableName("task")
public class Task {
/**
* 任务标识
*/
@TableId(value = "id")
private String id;
/**
* 任务号
*/
private String task_code;
/**
* 目标点
*/
private String destinations;
/**
* 任务类型
*/
private String type;
/**
* 任务状态
*/
private String status;
/**
* 车辆上报状态(0未上报,1上报,2处理完成)
*/
private String vehicleReportStatus;
/**
* 到达等待时间
*/
private Integer arrive_waiting_time;
/**
* 任务优先级
*/
private String priority;
/**
* 指定车号
*/
private String vehicle_number;
/**
* 实际执行车号
*/
private String processingVehicle;
/**
* 是否任务暂停
*/
private String isPause;
/**
* 备注
*/
private String remark;
/**
* 任务来源
*/
private String source;
/**
* 创建者
*/
private String create_by;
/**
* 创建时间
*/
private String create_time;
/**
* 修改时间
*/
private String update_time;
/**
* 修改者
*/
private String update_by;
}

View File

@@ -0,0 +1,60 @@
package org.nl.task.enums;
import lombok.Data;
import lombok.Getter;
/**
* @author dsh
* 2025/12/2
*/
@Getter
public enum ScheduleTaskStatusEnum {
/**
* A transport order's initial state.
* A transport order remains in this state until its parameters have been
* set up completely.
*/
RAW("0", "RAW", "初始状态"),
/**
* Set (by a user/client) when a transport order's parameters have been set
* up completely and the kernel should dispatch it when possible.
*/
ACTIVE("1", "ACTIVE", "就绪"),
/**
* Marks a transport order as ready to be dispatched to a vehicle (i.e. all
* its dependencies have been finished).
*/
DISPATCHABLE("2", "DISPATCHABLE", "待分配车辆"),
BEING_PROCESSED("3", "BEING_PROCESSED", "执行中"),
/**
* Marks a transport order as successfully completed.
*/
FINISHED("4", "FINISHED", "完成"),
/**
* General failure state that marks a transport order as failed.
*/
FAILED("5", "FAILED", "已取消"),
/**
* Failure state that marks a transport order as unroutable, i.e. it is
* impossible to find a route that would allow a vehicle to process the
* transport order completely.
*/
UNROUTABLE("6", "UNROUTABLE", "无路由");
private String code;
private String name;
private String desc;
ScheduleTaskStatusEnum(String code, String name, String desc) {
this.code = code;
this.name = name;
this.desc = desc;
}
public static boolean isFinalState(String state) {
return FAILED.getName().equals(state)
|| UNROUTABLE.getName().equals(state);
}
}

View File

@@ -0,0 +1,39 @@
package org.nl.task.enums;
import lombok.Getter;
/**
* @author dsh
* 2025/11/27
*/
@Getter
public enum TaskSourceEnum {
/**
* APP
*/
APP("1", "app", "app"),
/**
* 屏幕
*/
SCREEN("2", "screen", "屏幕"),
/**
* 外部API
*/
EXTERNAL_API("3", "API", "外部API"),
/**
* 二维码
*/
QRCODE("4", "QRCode", "二维码");
private String code;
private String name;
private String desc;
TaskSourceEnum(String code, String name, String desc) {
this.code = code;
this.name = name;
this.desc = desc;
}
}

View File

@@ -0,0 +1,39 @@
package org.nl.task.enums;
import lombok.Getter;
/**
* @author dsh
* 2025/11/27
*/
@Getter
public enum TaskStatusEnum {
/**
* 生成
*/
CREATE("0", "生成", "生成"),
/**
* 执行中
*/
EXECUTING("1", "执行中", "执行中"),
/**
* 完成
*/
FINISHED("2", "完成", "完成"),
/**
* 已取消
*/
CANCELED("3", "已取消", "已取消");
private String code;
private String name;
private String desc;
TaskStatusEnum(String code, String name, String desc) {
this.code = code;
this.name = name;
this.desc = desc;
}
}

View File

@@ -0,0 +1,53 @@
package org.nl.task.enums;
import lombok.Getter;
/**
* @author dsh
* 2025/12/1
*/
@Getter
public enum TaskTypeEnum {
/**
* 送冰水、配送任务都用这个任务类型
*/
DELIVER("0", "Deliver", "送冰水、配送任务"),
/**
* 充电
*/
CHARGE("1", "Charge", "充电"),
/**
* 加水
*/
REFILL("2", "Refill", "加水"),
/**
* 移动
*/
MOVE("3", "Move", "移动");
private String code;
private String name;
private String desc;
TaskTypeEnum(String code, String name, String desc) {
this.code = code;
this.name = name;
this.desc = desc;
}
/**
* 校验任务类型是否存在
* @param taskType
* @return
*/
public static boolean validationTaskType(String taskType){
return TaskTypeEnum.DELIVER.getName().equals(taskType)
|| TaskTypeEnum.CHARGE.getName().equals(taskType)
|| TaskTypeEnum.REFILL.getName().equals(taskType)
|| TaskTypeEnum.MOVE.getName().equals(taskType);
}
}

View File

@@ -0,0 +1,14 @@
package org.nl.task.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.nl.task.entity.Task;
/**
* @author dsh
* 2025/11/28
*/
@Mapper
public interface TaskMapper extends BaseMapper<Task> {
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.task.mapper.TaskMapper">
</mapper>

View File

@@ -0,0 +1,18 @@
package org.nl.task.param;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author dsh
* 2025/11/28
*/
@Data
public class CancelTaskRequestParam {
/**
* 任务编号
*/
@NotBlank(message = "任务号不能为空")
private String task_code;
}

View File

@@ -0,0 +1,39 @@
package org.nl.task.param;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author dsh
* 2025/11/27
*/
@Data
public class CreateTaskRequestParam {
/**
* 目标点
*/
@NotBlank(message = "目标点不能为空")
private String destinations;
/**
* 任务类型
*/
@NotBlank(message = "任务类型不能为空")
private String type;
/**
* 任务号
*/
private String task_code;
/**
* 任务优先级
*/
private String priority;
/**
* 指定车号
*/
private String vehicle_number;
}

View File

@@ -0,0 +1,24 @@
package org.nl.task.param;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author dsh
* 2025/12/13
*/
@Data
public class OneClickOperationRequestParam {
/**
* 车号
*/
@NotBlank(message = "车号不能为空")
private String vehicle_number;
/**
* 一键任务类型
*/
@NotBlank(message = "任务类型不能为空")
private String type;
}

View File

@@ -0,0 +1,18 @@
package org.nl.task.param;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author dsh
* 2025/12/3
*/
@Data
public class PauseAndResumeTaskParam {
/**
* 任务编号
*/
@NotBlank(message = "任务号不能为空")
private String task_code;
}

View File

@@ -0,0 +1,67 @@
package org.nl.task.provider;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
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.enums.ScheduleTaskReportStatusEnum;
import org.nl.exception.BadRequestException;
import org.nl.task.entity.Task;
import org.nl.task.enums.TaskStatusEnum;
import org.nl.task.service.TaskService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author dsh
* 2025/12/11
*/
@Slf4j
@Service
public class TaskAPIProvider implements TaskAPI {
@Resource
private TaskService taskService;
@Override
public Task queryCurrentTaskByVehicleNumber(String vehicleNumber) {
List<Task> taskList = taskService.queryCurrentTaskInfoByVehicleNumber(vehicleNumber);
Task currentTask = new Task();
if (ObjectUtil.isNotEmpty(taskList)){
currentTask = taskList.stream()
.filter(task -> TaskStatusEnum.EXECUTING.getCode().equals(task.getStatus()))
.findFirst()
.orElse(new Task());
}
return currentTask;
}
@Override
public boolean updateTaskReportStatusByCode(String taskCode, String newReportStatus,String waiting_time) {
return taskService.update(new LambdaUpdateWrapper<>(Task.class)
.set(Task::getVehicleReportStatus, newReportStatus)
.set(StrUtil.isNotBlank(waiting_time),Task::getArrive_waiting_time,Integer.parseInt(waiting_time))
.set(Task::getUpdate_time, DateUtil.now())
.eq(Task::getTask_code,taskCode)
);
}
@Override
public String taskOperationConfirm(String taskCode,String vehicleNumber) {
Task task = this.queryCurrentTaskByVehicleNumber(vehicleNumber);
if (ObjectUtil.isEmpty(task)){
log.info("任务操作确认失败,任务不存在");
return null;
}
if (!task.getTask_code().equals(taskCode)){
log.info("任务操作确认失败,上报的任务号不相同");
return null;
}
return task.getVehicleReportStatus();
}
}

View File

@@ -0,0 +1,67 @@
package org.nl.task.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.response.WebResponse;
import org.nl.task.entity.Task;
import org.nl.task.param.CancelTaskRequestParam;
import org.nl.task.param.CreateTaskRequestParam;
import org.nl.task.param.OneClickOperationRequestParam;
import org.nl.task.param.PauseAndResumeTaskParam;
import java.util.List;
/**
* @author dsh
* 2025/11/28
*/
public interface TaskService extends IService<Task>{
/**
* 创建任务
* @return WebResponse
*/
WebResponse createTask(CreateTaskRequestParam createTaskRequestParam, String taskSource);
/**
* 取消任务
* @return WebResponse
*/
WebResponse cancelTask(CancelTaskRequestParam cancelTaskRequestParam);
/**
* 暂停任务
* @return WebResponse
*/
WebResponse pauseTask(PauseAndResumeTaskParam pauseAndResumeTaskParam);
/**
* 恢复任务
* @return WebResponse
*/
WebResponse resumeTask(PauseAndResumeTaskParam pauseAndResumeTaskParam);
/**
* 查询当前未完成的任务
* @return WebResponse
*/
WebResponse queryNotFinishTaskInfoByVehicleNumber(String vehicle_number);
/**
* 查询当前未完成的任务
* @return List<Task>
*/
List<Task> queryCurrentTaskInfoByVehicleNumber(String vehicle_number);
/**
* 任务操作确认
* @return WebResponse
*/
WebResponse taskOperationConfirm(String task_code);
/**
* 一键任务操作
* @param oneClickOperationRequestParam
* @return WebResponse
*/
WebResponse oneClickOperation(OneClickOperationRequestParam oneClickOperationRequestParam,String taskSource);
}

View File

@@ -0,0 +1,290 @@
package org.nl.task.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.nl.api.schedule.task.api.ScheduleTaskAPI;
import org.nl.api.schedule.task.core.ScheduleAPICreateOneClickTaskParam;
import org.nl.api.schedule.task.core.ScheduleAPICreateTaskParam;
import org.nl.enums.ScheduleTaskReportStatusEnum;
import org.nl.enums.YesOrNoEnum;
import org.nl.exception.BadRequestException;
import org.nl.response.WebResponse;
import org.nl.task.entity.Task;
import org.nl.task.enums.ScheduleTaskStatusEnum;
import org.nl.task.enums.TaskStatusEnum;
import org.nl.task.enums.TaskTypeEnum;
import org.nl.task.mapper.TaskMapper;
import org.nl.task.param.CancelTaskRequestParam;
import org.nl.task.param.CreateTaskRequestParam;
import org.nl.task.param.OneClickOperationRequestParam;
import org.nl.task.param.PauseAndResumeTaskParam;
import org.nl.task.service.TaskService;
import org.nl.util.IdUtil;
import org.nl.util.TaskCodeGeneratorUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* @author dsh
* 2025/11/28
*/
@Slf4j
@Service
public class TaskServiceImpl extends ServiceImpl<TaskMapper,Task> implements TaskService {
@Resource
private TaskMapper taskMapper;
@Resource
private ScheduleTaskAPI scheduleTaskAPI;
private ConcurrentHashMap<String,List<Task>> taskInfoList = new ConcurrentHashMap<>();
/**
* 定时查询车辆任务状态(每秒执行)
*/
@Scheduled(fixedRate = 1000) // 每秒执行一次
public void queryScheduleTaskStatus() {
try {
List<Task> taskList = taskMapper.selectList(new LambdaQueryWrapper<>(Task.class)
.lt(Task::getStatus,TaskStatusEnum.FINISHED.getCode())
);
//根据车辆编号分类 车辆任务队列。
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("更新任务状态成功");
}
}
} catch (Exception e) {
log.error("更新任务状态失败: {}", e.getMessage());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public WebResponse createTask(CreateTaskRequestParam createTaskRequestParam, String taskSource) {
try {
if (!TaskTypeEnum.validationTaskType(createTaskRequestParam.getType())) {
throw new BadRequestException("任务类型不存在");
}
Task task = BeanUtil.copyProperties(createTaskRequestParam, Task.class);
task.setId(IdUtil.getStringId());
if (StrUtil.isBlank(task.getTask_code())){
task.setTask_code(TaskCodeGeneratorUtil.generateTaskId());
}
task.setType(createTaskRequestParam.getType());
task.setSource(taskSource);
task.setStatus(TaskStatusEnum.CREATE.getCode());
task.setIsPause(YesOrNoEnum.NO.getCode());
task.setVehicleReportStatus("0");
task.setCreate_time(DateUtil.now());
taskMapper.insert(task);
ScheduleAPICreateTaskParam scheduleAPICreateTaskParam = BeanUtil.copyProperties(task, ScheduleAPICreateTaskParam.class);
HttpResponse result = scheduleTaskAPI.createTask(scheduleAPICreateTaskParam);
if (result == null || !result.isOk()){
throw new BadRequestException("调度生成任务失败");
}
return WebResponse.requestOk();
}catch (Exception e){
log.error("创建任务失败:{}",e.getMessage());
throw new BadRequestException("创建任务失败:"+e.getMessage());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public WebResponse cancelTask(CancelTaskRequestParam cancelTaskRequestParam) {
try {
if (StrUtil.isBlank(cancelTaskRequestParam.getTask_code())){
throw new BadRequestException("任务号不能为空");
}
HttpResponse result = scheduleTaskAPI.cancelTask(cancelTaskRequestParam.getTask_code());
if (result == null || !result.isOk()){
log.info("取消调度任务失败");
throw new BadRequestException("取消调度任务失败");
}
taskMapper.update(new LambdaUpdateWrapper<>(Task.class)
.set(Task::getStatus,TaskStatusEnum.CANCELED.getCode())
.eq(Task::getTask_code,cancelTaskRequestParam.getTask_code())
);
}catch (Exception e){
log.error("取消任务失败:{}",e.getMessage());
throw new BadRequestException("取消任务失败:"+e.getMessage());
}
return WebResponse.requestOk();
}
@Override
@Transactional(rollbackFor = Exception.class)
public WebResponse pauseTask(PauseAndResumeTaskParam pauseAndResumeTaskParam) {
try {
if (StrUtil.isBlank(pauseAndResumeTaskParam.getTask_code())){
throw new BadRequestException("任务号不能为空");
}
HttpResponse result = scheduleTaskAPI.pauseTask(pauseAndResumeTaskParam.getTask_code());
if (result == null || !result.isOk()){
throw new BadRequestException("暂停调度任务失败");
}
taskMapper.update(new LambdaUpdateWrapper<>(Task.class)
.set(Task::getIsPause, YesOrNoEnum.YES.getCode())
.set(Task::getRemark,"暂停任务")
.set(Task::getUpdate_time,DateUtil.now())
.eq(Task::getTask_code,pauseAndResumeTaskParam.getTask_code())
);
return WebResponse.requestOk();
}catch (Exception e){
log.error("暂停任务失败:{}",e.getMessage());
throw new BadRequestException("暂停任务失败:"+e.getMessage());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public WebResponse resumeTask(PauseAndResumeTaskParam pauseAndResumeTaskParam) {
try {
if (StrUtil.isBlank(pauseAndResumeTaskParam.getTask_code())){
throw new BadRequestException("任务号不能为空");
}
HttpResponse result = scheduleTaskAPI.resumeTask(pauseAndResumeTaskParam.getTask_code());
if (result == null || !result.isOk()){
throw new BadRequestException("恢复调度任务失败");
}
taskMapper.update(new LambdaUpdateWrapper<>(Task.class)
.set(Task::getIsPause, YesOrNoEnum.NO.getCode())
.set(Task::getRemark,"恢复任务")
.set(Task::getUpdate_time,DateUtil.now())
.eq(Task::getTask_code,pauseAndResumeTaskParam.getTask_code())
);
return WebResponse.requestOk();
}catch (Exception e){
log.error("恢复任务失败:{}",e.getMessage());
throw new BadRequestException("恢复任务失败:"+e.getMessage());
}
}
@Override
public WebResponse queryNotFinishTaskInfoByVehicleNumber(String vehicle_number) {
if (StrUtil.isBlank(vehicle_number)){
throw new BadRequestException("车号不能为空");
}
return WebResponse.requestParamOk(taskInfoList.get(vehicle_number));
}
@Override
public List<Task> queryCurrentTaskInfoByVehicleNumber(String vehicle_number) {
if (StrUtil.isBlank(vehicle_number)){
throw new BadRequestException("车号不能为空");
}
return taskInfoList.get(vehicle_number);
}
@Override
public WebResponse taskOperationConfirm(String task_code) {
boolean reuslt = taskMapper.update(new LambdaUpdateWrapper<>(Task.class)
.set(Task::getVehicleReportStatus, ScheduleTaskReportStatusEnum.FINISH_REPORTED.getCode())
.set(Task::getUpdate_time,DateUtil.now())
.eq(Task::getTask_code,task_code)
) > 0;
if (!reuslt){
throw new BadRequestException("任务操作确认失败");
}
return WebResponse.requestOk();
}
@Override
@Transactional(rollbackFor = Exception.class)
public WebResponse oneClickOperation(OneClickOperationRequestParam oneClickOperationRequestParam,String taskSource) {
try {
log.info("一键任务操作参数:{}",oneClickOperationRequestParam);
Task task = BeanUtil.copyProperties(oneClickOperationRequestParam, Task.class);
task.setId(IdUtil.getStringId());
if (StrUtil.isBlank(task.getTask_code())){
task.setTask_code(TaskCodeGeneratorUtil.generateTaskId());
}
task.setType(oneClickOperationRequestParam.getType());
task.setSource(taskSource);
task.setStatus(TaskStatusEnum.CREATE.getCode());
task.setIsPause(YesOrNoEnum.NO.getCode());
task.setVehicleReportStatus("0");
task.setCreate_time(DateUtil.now());
taskMapper.insert(task);
ScheduleAPICreateOneClickTaskParam scheduleAPICreateOneClickTaskParam = BeanUtil.copyProperties(task, ScheduleAPICreateOneClickTaskParam.class);
HttpResponse result = scheduleTaskAPI.oneClickOperationTask(scheduleAPICreateOneClickTaskParam);
if (result == null || !result.isOk()){
throw new BadRequestException("调度生成一键任务失败");
}
return WebResponse.requestOk();
}catch (Exception e){
log.error("创建一键任务失败:{}",e.getMessage());
throw new BadRequestException("创建一键任务失败:"+e.getMessage());
}
}
}