add:任务操作
This commit is contained in:
50
src/main/java/org/nl/apt15e/apt/dto/WebResponse.java
Normal file
50
src/main/java/org/nl/apt15e/apt/dto/WebResponse.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package org.nl.apt15e.apt.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 返回结果
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-06-05
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
public class WebResponse<T> {
|
||||
|
||||
/**
|
||||
* 信息
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 返回数据
|
||||
*/
|
||||
private T data;
|
||||
|
||||
/**
|
||||
* 不带数据反馈
|
||||
* @return ErpResponse
|
||||
*/
|
||||
public static WebResponse requestOk() {
|
||||
return WebResponse.builder()
|
||||
.message("操作成功!")
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 带数据反馈
|
||||
* @return ErpResponse
|
||||
*/
|
||||
public static <T> WebResponse requestParamOk(T data) {
|
||||
return WebResponse.builder()
|
||||
.message("操作成功!")
|
||||
.data(data)
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package org.nl.apt15e.apt.ext.controller;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.apt15e.apt.ext.dto.RcsToAptTaskDto;
|
||||
import org.nl.apt15e.apt.ext.service.RcsToAptService;
|
||||
import org.nl.apt15e.common.logging.annotation.Log;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* RCS调用APT控制层
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-10
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("api/rcs")
|
||||
public class RcsToAptController {
|
||||
|
||||
@Autowired
|
||||
private RcsToAptService rcsToAptService;
|
||||
|
||||
@PostMapping("/reportTaskInfo")
|
||||
@Log("RCS上报任务信息")
|
||||
public ResponseEntity<Object> reportTaskInfo(@Validated @RequestBody RcsToAptTaskDto dto) {
|
||||
return new ResponseEntity<>(rcsToAptService.reportTaskInfo(dto),HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
89
src/main/java/org/nl/apt15e/apt/ext/dto/RcsToAptTaskDto.java
Normal file
89
src/main/java/org/nl/apt15e/apt/ext/dto/RcsToAptTaskDto.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package org.nl.apt15e.apt.ext.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* RCS上报任务信息Dto
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-10
|
||||
*/
|
||||
@Data
|
||||
public class RcsToAptTaskDto {
|
||||
|
||||
/**
|
||||
* 任务链 ID
|
||||
*/
|
||||
private String taskChainId;
|
||||
|
||||
/**
|
||||
* 区域 ID
|
||||
*/
|
||||
private String areaId;
|
||||
|
||||
/**
|
||||
* 任务创建时间
|
||||
*/
|
||||
private String createTime;
|
||||
|
||||
/**
|
||||
* 任务链开始时间
|
||||
*/
|
||||
private String chainStartTime;
|
||||
|
||||
/**
|
||||
* 任务链结束时间
|
||||
*/
|
||||
private String chainFinishTime;
|
||||
|
||||
/**
|
||||
* 车辆 ID
|
||||
*/
|
||||
private String amrId;
|
||||
|
||||
/**
|
||||
* 任务状态
|
||||
* 0-未执行,1-子任务正在执行,2-子任务已完成,3-任务链取消
|
||||
* 4-子任务异常,5-任务链跳过,6-任务链异常,7-任务链完成
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 子任务 ID
|
||||
*/
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 小车实际动作类型
|
||||
*/
|
||||
private String action;
|
||||
|
||||
/**
|
||||
* 子任务类型
|
||||
*/
|
||||
private String taskType;
|
||||
|
||||
/**
|
||||
* 目标点编号
|
||||
*/
|
||||
private String endPointCode;
|
||||
|
||||
/**
|
||||
* 地图 id
|
||||
*/
|
||||
private String mapId;
|
||||
|
||||
/**
|
||||
* 小车状态 id
|
||||
*/
|
||||
private String stateId;
|
||||
|
||||
/**
|
||||
* 小车状态名称
|
||||
*/
|
||||
private String state;
|
||||
|
||||
}
|
||||
80
src/main/java/org/nl/apt15e/apt/ext/enums/RcsTaskStatus.java
Normal file
80
src/main/java/org/nl/apt15e/apt/ext/enums/RcsTaskStatus.java
Normal file
@@ -0,0 +1,80 @@
|
||||
package org.nl.apt15e.apt.ext.enums;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* RCS任务枚举
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-10
|
||||
*/
|
||||
public enum RcsTaskStatus {
|
||||
/**
|
||||
* 未执行
|
||||
*/
|
||||
CREATE("0", "未执行", "未执行"),
|
||||
/**
|
||||
* 子任务执行中
|
||||
*/
|
||||
SON_EXECUTING("1", "子任务执行中", "子任务执行中"),
|
||||
/**
|
||||
* 子任务完成
|
||||
*/
|
||||
SON_FINISHED("2", "子任务完成", "子任务完成"),
|
||||
/**
|
||||
* 任务链取消
|
||||
*/
|
||||
TASK_CANCELED("3", "任务链取消", "任务链取消"),
|
||||
/**
|
||||
* 子任务异常
|
||||
*/
|
||||
SON_UNUSUAL("4", "子任务异常", "子任务异常"),
|
||||
/**
|
||||
* 任务链跳过
|
||||
*/
|
||||
TASK_SKIP("5", "任务链跳过", "任务链跳过"),
|
||||
/**
|
||||
* 任务链异常
|
||||
*/
|
||||
TASK_UNUSUAL("6", "任务链异常", "任务链异常"),
|
||||
/**
|
||||
* 任务链完成
|
||||
*/
|
||||
TASK_FINISHED("7", "任务链完成", "任务链完成")
|
||||
;
|
||||
|
||||
|
||||
RcsTaskStatus(String code, String name, String desc) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private String code;
|
||||
private String name;
|
||||
private String desc;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.nl.apt15e.apt.ext.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.apt15e.apt.ext.dto.RcsToAptTaskDto;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* RCS调用APT服务
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-10
|
||||
*/
|
||||
public interface RcsToAptService {
|
||||
|
||||
/**
|
||||
* RCS上报任务信息
|
||||
* @param dto RcsToAptTaskDto
|
||||
* @return {
|
||||
* receive: 1(收到)
|
||||
* }
|
||||
*/
|
||||
JSONObject reportTaskInfo(RcsToAptTaskDto dto);
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.nl.apt15e.apt.ext.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.apt15e.apt.ext.dto.RcsToAptTaskDto;
|
||||
import org.nl.apt15e.apt.ext.enums.RcsTaskStatus;
|
||||
import org.nl.apt15e.apt.ext.service.RcsToAptService;
|
||||
import org.nl.apt15e.apt.station.dao.Station;
|
||||
import org.nl.apt15e.apt.station.service.StationService;
|
||||
import org.nl.apt15e.apt.task.enums.TaskStatus;
|
||||
import org.nl.apt15e.apt.task.service.ITaskService;
|
||||
import org.nl.apt15e.apt.task.service.dao.Task;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* RCS调用APT实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-10
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class RcsToAptServiceImpl implements RcsToAptService {
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ITaskService iTaskService;
|
||||
|
||||
/**
|
||||
* 站点服务
|
||||
*/
|
||||
@Autowired
|
||||
private StationService stationService;
|
||||
|
||||
@Override
|
||||
public JSONObject reportTaskInfo(RcsToAptTaskDto dto) {
|
||||
log.info("RCS上报任务信息输入参数{}", dto.toString());
|
||||
JSONObject result = new JSONObject();
|
||||
|
||||
Task task = iTaskService.getOne(
|
||||
new QueryWrapper<Task>().lambda()
|
||||
.eq(Task::getTask_id, dto.getTaskChainId())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
result.put("receive", "1");
|
||||
result.put("message", "任务不存在!【"+dto.getTaskChainId()+"】");
|
||||
log.info("RCS上报任务信息输出参数{}", result.toString());
|
||||
return result;
|
||||
}
|
||||
|
||||
// 更新任务状态
|
||||
String status = dto.getStatus();
|
||||
if (status.equals(RcsTaskStatus.SON_EXECUTING.getCode()) || status.equals(RcsTaskStatus.SON_FINISHED.getCode())) {
|
||||
task.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
} else if (status.equals(RcsTaskStatus.TASK_FINISHED.getCode())) {
|
||||
task.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
}
|
||||
// 更新当前执行点位
|
||||
String endPointCode = dto.getEndPointCode();
|
||||
if (ObjectUtil.isNotEmpty(endPointCode)) {
|
||||
Station staDao = stationService.getById(endPointCode);
|
||||
task.setTask_point(staDao.getStation_name());
|
||||
}
|
||||
iTaskService.updateById(task);
|
||||
|
||||
result.put("receive", "1");
|
||||
log.info("RCS上报任务信息输出参数{}", result.toString());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface StationService extends IService<Station> {
|
||||
|
||||
JSONObject queryAllStation();
|
||||
List<Station> queryAllStation();
|
||||
|
||||
}
|
||||
|
||||
@@ -24,10 +24,7 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
|
||||
private StationMapper stationMapper;
|
||||
|
||||
@Override
|
||||
public JSONObject queryAllStation() {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("code", HttpStatus.OK.value());
|
||||
jsonObject.put("data", stationMapper.selectList(null));
|
||||
return jsonObject;
|
||||
public List<Station> queryAllStation() {
|
||||
return stationMapper.selectList(null);
|
||||
}
|
||||
}
|
||||
|
||||
63
src/main/java/org/nl/apt15e/apt/task/enums/TaskStatus.java
Normal file
63
src/main/java/org/nl/apt15e/apt/task/enums/TaskStatus.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package org.nl.apt15e.apt.task.enums;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务枚举
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public enum TaskStatus {
|
||||
/**
|
||||
* 申请
|
||||
*/
|
||||
CREATE("0", "生成", "生成"),
|
||||
/**
|
||||
* 执行中
|
||||
*/
|
||||
EXECUTING("1", "执行中", "执行中"),
|
||||
/**
|
||||
* 完成
|
||||
*/
|
||||
FINISHED("2", "完成", "完成"),
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
CANCELED("3", "已取消", "已取消");
|
||||
|
||||
|
||||
TaskStatus(String code, String name, String desc) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private String code;
|
||||
private String name;
|
||||
private String desc;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.nl.apt15e.apt.task.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.apt15e.apt.station.dao.Station;
|
||||
import org.nl.apt15e.apt.task.service.dao.Task;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public interface ITaskService extends IService<Task> {
|
||||
|
||||
/**
|
||||
* 组织下发任务数据
|
||||
* @param staList 站点集合
|
||||
* @return JSONObject
|
||||
*/
|
||||
JSONObject sendTask(List<Station> staList);
|
||||
}
|
||||
63
src/main/java/org/nl/apt15e/apt/task/service/dao/Task.java
Normal file
63
src/main/java/org/nl/apt15e/apt/task/service/dao/Task.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package org.nl.apt15e.apt.task.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("task")
|
||||
public class Task implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 标识
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 任务id
|
||||
*/
|
||||
private String task_id;
|
||||
|
||||
/**
|
||||
* 任务顺序
|
||||
*/
|
||||
private String task_seq;
|
||||
|
||||
/**
|
||||
* 任务状态
|
||||
*/
|
||||
private String task_status;
|
||||
|
||||
/**
|
||||
* 当前站点
|
||||
*/
|
||||
private String task_point;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private String create_time;
|
||||
|
||||
/**
|
||||
* 完成时间
|
||||
*/
|
||||
private LocalDateTime confirm_time;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.apt15e.apt.task.service.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.apt15e.apt.task.service.dao.Task;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public interface TaskMapper extends BaseMapper<Task> {
|
||||
|
||||
}
|
||||
@@ -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.apt15e.apt.task.service.dao.mapper.TaskMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,66 @@
|
||||
package org.nl.apt15e.apt.task.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.apt15e.apt.station.dao.Station;
|
||||
import org.nl.apt15e.apt.task.service.ITaskService;
|
||||
import org.nl.apt15e.apt.task.service.dao.Task;
|
||||
import org.nl.apt15e.apt.task.service.dao.mapper.TaskMapper;
|
||||
import org.nl.apt15e.apt.vehicle.dao.VehicleInfo;
|
||||
import org.nl.apt15e.apt.vehicle.service.VehicleInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Service
|
||||
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements ITaskService {
|
||||
|
||||
/**
|
||||
* 车辆服务
|
||||
*/
|
||||
@Autowired
|
||||
private VehicleInfoService vehicleInfoService;
|
||||
|
||||
@Override
|
||||
public JSONObject sendTask (List<Station> staList ) {
|
||||
JSONObject result = new JSONObject();
|
||||
// 获取车辆信息
|
||||
VehicleInfo vehicleInfo = vehicleInfoService.getVehicleInfo();
|
||||
JSONObject taskChain = new JSONObject();
|
||||
taskChain.put("areaId", vehicleInfo.getAreaId());
|
||||
taskChain.put("amrId", vehicleInfo.getId());
|
||||
result.put("taskChain",taskChain);
|
||||
|
||||
// 组织站点信息
|
||||
List<JSONObject> tasks = new ArrayList<>();
|
||||
for (Station dao : staList) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("endPointCode", dao.getStation_code());
|
||||
json.put("mapId", vehicleInfo.getMapId());
|
||||
switch (dao.getAction_type()) {
|
||||
case "Ascend" :
|
||||
json.put("taskType", "O12");
|
||||
break;
|
||||
case "Descend" :
|
||||
json.put("taskType", "O13");
|
||||
break;
|
||||
case "Move" :
|
||||
json.put("taskType", "O0");
|
||||
break;
|
||||
}
|
||||
tasks.add(json);
|
||||
}
|
||||
result.put("tasks", tasks);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package org.nl.apt15e.apt.taskOperate.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.apt15e.apt.dto.WebResponse;
|
||||
import org.nl.apt15e.apt.station.service.StationService;
|
||||
import org.nl.apt15e.apt.taskOperate.service.TaskManageService;
|
||||
import org.nl.apt15e.common.logging.annotation.Log;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务操作模块控制层
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("api/operate")
|
||||
public class TaskManageController {
|
||||
|
||||
/**
|
||||
* 站点服务
|
||||
*/
|
||||
@Autowired
|
||||
private StationService stationService;
|
||||
|
||||
/**
|
||||
* 站点服务
|
||||
*/
|
||||
@Autowired
|
||||
private TaskManageService taskManageService;
|
||||
|
||||
@PostMapping("/queryStation")
|
||||
@Log("站点查询")
|
||||
public ResponseEntity<Object> queryStation() {
|
||||
return new ResponseEntity<>(WebResponse.requestParamOk(stationService.queryAllStation()),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/sendTask")
|
||||
@Log("下发任务")
|
||||
public ResponseEntity<Object> sendTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(taskManageService.sendTask(whereJson),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/saveTask")
|
||||
@Log("保存任务")
|
||||
public ResponseEntity<Object> saveTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(taskManageService.saveTask(whereJson),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/cancelTask")
|
||||
@Log("取消任务")
|
||||
public ResponseEntity<Object> cancelTask() {
|
||||
return new ResponseEntity<>(taskManageService.cancelTask(),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryTaskChain")
|
||||
@Log("任务链查询")
|
||||
public ResponseEntity<Object> queryTaskChain() {
|
||||
return new ResponseEntity<>(taskManageService.queryTaskChain(),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/deleteTaskChain")
|
||||
@Log("删除任务链")
|
||||
public ResponseEntity<Object> deleteTaskChain(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(taskManageService.deleteTaskChain(whereJson),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/updateStation")
|
||||
@Log("修改站点名称")
|
||||
public ResponseEntity<Object> updateStation(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(taskManageService.updateStation(whereJson),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/TaskChainDtl")
|
||||
@Log("查询任务链明细")
|
||||
public ResponseEntity<Object> TaskChainDtl(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(taskManageService.TaskChainDtl(whereJson),HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package org.nl.apt15e.apt.taskOperate.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.apt15e.apt.dto.WebResponse;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务操作接口
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public interface TaskManageService {
|
||||
|
||||
/**
|
||||
* 下发任务
|
||||
* @param whereJson {
|
||||
* data:[
|
||||
* station_code:站点编码
|
||||
* station_name:站点别名
|
||||
* action_type:动作类型
|
||||
* ]
|
||||
* }
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse sendTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 保存任务
|
||||
* @param whereJson {
|
||||
* data:[
|
||||
* station_code:站点编码
|
||||
* station_name:站点别名
|
||||
* action_type:动作类型
|
||||
* ]
|
||||
* }
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse saveTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 取消任务
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse cancelTask();
|
||||
|
||||
/**
|
||||
* 任务链查询
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse queryTaskChain();
|
||||
|
||||
/**
|
||||
* 删除任务链
|
||||
* @param whereJson {
|
||||
* chain_id: 任务链标识
|
||||
* }
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse deleteTaskChain(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 修改站点名称
|
||||
* @param whereJson{
|
||||
* station_code:站点编码
|
||||
* station_name:站点别名
|
||||
* }
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse updateStation(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 查询任务链明细
|
||||
* @param whereJson {
|
||||
* chain_id: 任务链标识
|
||||
* }
|
||||
* @return WebResponse
|
||||
*/
|
||||
WebResponse TaskChainDtl(JSONObject whereJson);
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
package org.nl.apt15e.apt.taskOperate.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.apt15e.apt.dto.WebResponse;
|
||||
import org.nl.apt15e.apt.station.dao.Station;
|
||||
import org.nl.apt15e.apt.station.service.StationService;
|
||||
import org.nl.apt15e.apt.task.enums.TaskStatus;
|
||||
import org.nl.apt15e.apt.task.service.ITaskService;
|
||||
import org.nl.apt15e.apt.task.service.dao.Task;
|
||||
import org.nl.apt15e.apt.taskOperate.service.TaskManageService;
|
||||
import org.nl.apt15e.apt.taskchain.service.ITaskchainService;
|
||||
import org.nl.apt15e.apt.taskchain.service.dao.Taskchain;
|
||||
import org.nl.apt15e.common.BadRequestException;
|
||||
import org.nl.apt15e.util.HTTPUtil;
|
||||
import org.nl.apt15e.util.IdUtil;
|
||||
import org.nl.apt15e.util.URLConstant;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务操作模块实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class TaskManageServiceImpl implements TaskManageService {
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ITaskService iTaskService;
|
||||
|
||||
/**
|
||||
* 任务链服务
|
||||
*/
|
||||
@Autowired
|
||||
private ITaskchainService iTaskchainService;
|
||||
|
||||
/**
|
||||
* 站点服务
|
||||
*/
|
||||
@Autowired
|
||||
private StationService stationService;
|
||||
|
||||
@Override
|
||||
public WebResponse sendTask(JSONObject whereJson) {
|
||||
// 校验当前是否有任务
|
||||
List<Task> list = iTaskService.list(
|
||||
new QueryWrapper<Task>().lambda()
|
||||
.lt(Task::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
throw new BadRequestException("当前有正在执行中的任务!");
|
||||
}
|
||||
|
||||
List<Station> staList = whereJson.getJSONArray("data").toJavaList(Station.class);
|
||||
// 取返回点
|
||||
Station breakPoint = stationService.getOne(
|
||||
new QueryWrapper<Station>().lambda()
|
||||
.eq(Station::getStation_type, "Breaks")
|
||||
);
|
||||
if (ObjectUtil.isEmpty(breakPoint)) {
|
||||
throw new BadRequestException("请先设置返回点!");
|
||||
}
|
||||
staList.add(breakPoint);
|
||||
|
||||
// 任务id
|
||||
String task_id = "";
|
||||
// 组织任务下发
|
||||
try {
|
||||
JSONObject param = iTaskService.sendTask(staList);
|
||||
log.info("下发RCS任务输入参数{}", param.toString());
|
||||
HttpResponse response = HTTPUtil.post(URLConstant.RCS_IP_PORT, URLConstant.SEND_TASK_URL, param);
|
||||
|
||||
JSONObject result = JSONObject.parseObject(response.body());
|
||||
log.info("下发RCS任务输出参数{}", result.toString());
|
||||
if (result.getBoolean("state").equals(false)) {
|
||||
throw new BadRequestException("访问调度报错:" + result.getString("errMsg"));
|
||||
}
|
||||
task_id = result.getString("data");
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("访问调度报错:" + e.getMessage());
|
||||
}
|
||||
|
||||
// 创建任务
|
||||
Task task = new Task();
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setTask_id(task_id);
|
||||
task.setTask_seq(
|
||||
staList.stream()
|
||||
.map(Station::getStation_name)
|
||||
.collect(Collectors.joining("-"))
|
||||
);
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
iTaskService.save(task);
|
||||
return WebResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public WebResponse saveTask(JSONObject whereJson) {
|
||||
List<Station> staList = whereJson.getJSONArray("data").toJavaList(Station.class);
|
||||
|
||||
List<Taskchain> taskChainList = new ArrayList<>();
|
||||
String chain_id = IdUtil.getStringId();
|
||||
for (int i = 0; i < staList.size(); i++) {
|
||||
Station station = staList.get(i);
|
||||
Taskchain taskchain = new Taskchain();
|
||||
taskchain.setId(IdUtil.getStringId());
|
||||
taskchain.setChain_id(chain_id);
|
||||
taskchain.setChain_name(whereJson.getString("chain_name"));
|
||||
taskchain.setOrder_num(i + 1 + "");
|
||||
taskchain.setStation_code(station.getStation_code());
|
||||
taskchain.setStation_name(station.getStation_name());
|
||||
taskchain.setAction_type(station.getAction_type());
|
||||
taskChainList.add(taskchain);
|
||||
}
|
||||
iTaskchainService.saveBatch(taskChainList);
|
||||
return WebResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse cancelTask() {
|
||||
// 找到当前正在执行的任务
|
||||
Task task = iTaskService.getOne(
|
||||
new QueryWrapper<Task>().lambda()
|
||||
.lt(Task::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new BadRequestException("当前没有任务在执行中!");
|
||||
}
|
||||
try {
|
||||
HttpResponse response = HTTPUtil.post(URLConstant.RCS_IP_PORT, URLConstant.CANCEL_TASK_URL + task.getTask_id(), null);
|
||||
JSONObject result = JSONObject.parseObject(response.body());
|
||||
if (result.getBoolean("state").equals(false)) {
|
||||
throw new BadRequestException("访问调度报错:" + result.getString("errMsg"));
|
||||
}
|
||||
// 取消任务
|
||||
task.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
iTaskService.updateById(task);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("访问调度报错:" + e.getMessage());
|
||||
}
|
||||
return WebResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse queryTaskChain() {
|
||||
List<Taskchain> taskList = iTaskchainService.list();
|
||||
// 根据任务链id分组
|
||||
Map<String, List<Taskchain>> mapTask = taskList.stream()
|
||||
.collect(Collectors.groupingBy(Taskchain::getChain_id));
|
||||
|
||||
List<JSONObject> resultList = new ArrayList<>();
|
||||
for (String chain_id : mapTask.keySet()) {
|
||||
// 根据循序号排序
|
||||
List<Taskchain> taskChainList = mapTask.get(chain_id).stream()
|
||||
.sorted(Comparator.comparing(Taskchain::getOrder_num))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
JSONObject jsonTaskChain = new JSONObject();
|
||||
jsonTaskChain.put("chain_id", chain_id);
|
||||
jsonTaskChain.put("chain_name", taskChainList.get(0).getChain_name());
|
||||
jsonTaskChain.put("chain_point",
|
||||
taskChainList.stream()
|
||||
.map(Taskchain::getStation_name)
|
||||
.collect(Collectors.joining("-"))
|
||||
);
|
||||
resultList.add(jsonTaskChain);
|
||||
}
|
||||
return WebResponse.requestParamOk(resultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public WebResponse deleteTaskChain(JSONObject whereJson) {
|
||||
iTaskchainService.remove(
|
||||
new QueryWrapper<Taskchain>().lambda()
|
||||
.eq(Taskchain::getChain_id, whereJson.getString("chain_id"))
|
||||
);
|
||||
return WebResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public WebResponse updateStation(JSONObject whereJson) {
|
||||
stationService.update(
|
||||
new UpdateWrapper<Station>().lambda()
|
||||
.eq(Station::getStation_code, whereJson.getString("station_code"))
|
||||
.set(Station::getStation_name, whereJson.getString("station_name"))
|
||||
);
|
||||
return WebResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResponse TaskChainDtl(JSONObject whereJson) {
|
||||
return WebResponse.requestParamOk(iTaskchainService.list(
|
||||
new QueryWrapper<Taskchain>().lambda()
|
||||
.eq(Taskchain::getChain_id, whereJson.getString("chain_id"))
|
||||
.orderByAsc(Taskchain::getOrder_num)
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.apt15e.apt.taskchain.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.apt15e.apt.taskchain.service.dao.Taskchain;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public interface ITaskchainService extends IService<Taskchain> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package org.nl.apt15e.apt.taskchain.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author author
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("taskchain")
|
||||
public class Taskchain implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 标识
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 任务链标识
|
||||
*/
|
||||
private String chain_id;
|
||||
|
||||
/**
|
||||
* 任务链名称
|
||||
*/
|
||||
private String chain_name;
|
||||
|
||||
/**
|
||||
* 顺序号
|
||||
*/
|
||||
private String order_num;
|
||||
|
||||
/**
|
||||
* 站点编码
|
||||
*/
|
||||
private String station_code;
|
||||
|
||||
/**
|
||||
* 站点名称
|
||||
*/
|
||||
private String station_name;
|
||||
|
||||
/**
|
||||
* 动作类型
|
||||
*/
|
||||
private String action_type;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.apt15e.apt.taskchain.service.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.apt15e.apt.taskchain.service.dao.Taskchain;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public interface TaskchainMapper extends BaseMapper<Taskchain> {
|
||||
|
||||
}
|
||||
@@ -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.apt15e.apt.taskchain.service.dao.mapper.TaskchainMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.nl.apt15e.apt.taskchain.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.apt15e.apt.taskchain.service.ITaskchainService;
|
||||
import org.nl.apt15e.apt.taskchain.service.dao.Taskchain;
|
||||
import org.nl.apt15e.apt.taskchain.service.dao.mapper.TaskchainMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
@Service
|
||||
public class TaskchainServiceImpl extends ServiceImpl<TaskchainMapper, Taskchain> implements ITaskchainService {
|
||||
|
||||
}
|
||||
55
src/main/java/org/nl/apt15e/config/thread/CorsFilter.java
Normal file
55
src/main/java/org/nl/apt15e/config/thread/CorsFilter.java
Normal file
@@ -0,0 +1,55 @@
|
||||
package org.nl.apt15e.config.thread;
|
||||
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 跨域过滤器
|
||||
* @author kong
|
||||
*/
|
||||
@Component
|
||||
@Order(-200)
|
||||
public class CorsFilter implements Filter {
|
||||
|
||||
static final String OPTIONS = "OPTIONS";
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
|
||||
throws IOException, ServletException {
|
||||
HttpServletRequest request = (HttpServletRequest) req;
|
||||
HttpServletResponse response = (HttpServletResponse) res;
|
||||
// 允许指定域访问跨域资源
|
||||
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||
// 允许所有请求方式
|
||||
response.setHeader("Access-Control-Allow-Methods", "*");
|
||||
// 有效时间
|
||||
response.setHeader("Access-Control-Max-Age", "3600");
|
||||
// 允许的header参数
|
||||
response.setHeader("Access-Control-Allow-Headers", "*");
|
||||
response.setHeader("Access-Control-Allow-Credentials", "true");
|
||||
|
||||
// 如果是预检请求,直接返回
|
||||
if (OPTIONS.equals(request.getMethod())) {
|
||||
System.out.println("=======================浏览器发来了OPTIONS预检请求==========");
|
||||
response.getWriter().print("");
|
||||
return;
|
||||
}
|
||||
|
||||
// System.out.println("*********************************过滤器被使用**************************");
|
||||
chain.doFilter(req, res);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
}
|
||||
11
src/main/java/org/nl/apt15e/util/IdUtil.java
Normal file
11
src/main/java/org/nl/apt15e/util/IdUtil.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package org.nl.apt15e.util;
|
||||
|
||||
public class IdUtil {
|
||||
public static Long getLongId() {
|
||||
return cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextId();
|
||||
}
|
||||
|
||||
public static String getStringId() {
|
||||
return String.valueOf(IdUtil.getLongId());
|
||||
}
|
||||
}
|
||||
28
src/main/java/org/nl/apt15e/util/URLConstant.java
Normal file
28
src/main/java/org/nl/apt15e/util/URLConstant.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package org.nl.apt15e.util;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 地址常量
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-07-09
|
||||
*/
|
||||
public class URLConstant {
|
||||
|
||||
/**
|
||||
* RCS调度IP及端口
|
||||
*/
|
||||
public final static String RCS_IP_PORT = "127.0.0.1:8011";
|
||||
|
||||
/**
|
||||
* 下发任务URL
|
||||
*/
|
||||
public final static String SEND_TASK_URL = "/task/add";
|
||||
|
||||
/**
|
||||
* 取消任务URL
|
||||
*/
|
||||
public final static String CANCEL_TASK_URL = "/task/cancel/";
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user