add:任务操作

This commit is contained in:
2025-07-16 09:00:08 +08:00
parent 3d57839042
commit d6533098f4
25 changed files with 1203 additions and 6 deletions

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

View File

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

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

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

View File

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

View File

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

View File

@@ -12,6 +12,6 @@ import java.util.List;
*/
public interface StationService extends IService<Station> {
JSONObject queryAllStation();
List<Station> queryAllStation();
}

View File

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

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

View File

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

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

View File

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

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.apt15e.apt.task.service.dao.mapper.TaskMapper">
</mapper>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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.apt15e.apt.taskchain.service.dao.mapper.TaskchainMapper">
</mapper>

View File

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

View 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() {
}
}

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

View 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/";
}