11 changed files with 402 additions and 0 deletions
-
76src/main/java/com/iflytop/gd/app/controller/TasksController.java
-
15src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java
-
23src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java
-
10src/main/java/com/iflytop/gd/app/model/dto/StopTaskDTO.java
-
10src/main/java/com/iflytop/gd/app/model/dto/TaskDTO.java
-
30src/main/java/com/iflytop/gd/app/model/entity/TaskSteps.java
-
35src/main/java/com/iflytop/gd/app/model/entity/Tasks.java
-
35src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java
-
26src/main/java/com/iflytop/gd/app/service/TaskStepsService.java
-
119src/main/java/com/iflytop/gd/app/service/TasksService.java
-
23src/main/resources/sql/init.sql
@ -0,0 +1,76 @@ |
|||
package com.iflytop.gd.app.controller; |
|||
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.iflytop.gd.app.model.dto.StopTaskDTO; |
|||
import com.iflytop.gd.app.model.dto.TaskDTO; |
|||
import com.iflytop.gd.app.model.entity.Tasks; |
|||
import com.iflytop.gd.app.model.vo.TaskListVO; |
|||
import com.iflytop.gd.app.service.TasksService; |
|||
import com.iflytop.gd.common.base.BasePageQuery; |
|||
import com.iflytop.gd.common.result.PageResult; |
|||
import com.iflytop.gd.common.result.Result; |
|||
import io.swagger.v3.oas.annotations.Operation; |
|||
import io.swagger.v3.oas.annotations.Parameter; |
|||
import io.swagger.v3.oas.annotations.tags.Tag; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
@Tag(name = "实验") |
|||
@RestController |
|||
@RequestMapping("/api/tasks") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class TasksController { |
|||
private final TasksService tasksService; |
|||
|
|||
@Operation(summary = "实验列表") |
|||
@GetMapping("/list") |
|||
public PageResult<TaskListVO> getAllTasks(BasePageQuery pageQuery) { |
|||
IPage<TaskListVO> result = tasksService.getPage(pageQuery); |
|||
return PageResult.success(result); |
|||
} |
|||
|
|||
@Operation(summary = "实验详情") |
|||
@GetMapping("/{id}") |
|||
public Result<TaskListVO> detail(@PathVariable Long id) { |
|||
return Result.success(tasksService.selectById(id)); |
|||
} |
|||
|
|||
@Operation(summary = "获取正在进行的实验") |
|||
@GetMapping("/getIngTask") |
|||
public Result<Tasks> getIngTask() { |
|||
return Result.success(tasksService.getIngTask()); |
|||
} |
|||
|
|||
@Operation(summary = "添加新实验") |
|||
@PostMapping("/") |
|||
public Result<Tasks> addTask(@RequestBody TaskDTO dto) { |
|||
if (tasksService.getIngTask() != null) { |
|||
return Result.failed("存在正在运行的实验,请先停止"); |
|||
} |
|||
return Result.success(tasksService.addTask(dto.getName())); |
|||
} |
|||
|
|||
@Operation(summary = "更新实验") |
|||
@PutMapping("/") |
|||
public Result<Boolean> updateTask(@RequestBody Tasks task) { |
|||
|
|||
return Result.success(tasksService.updateById(task)); |
|||
} |
|||
|
|||
@Operation(summary = "删除实验") |
|||
@DeleteMapping("/{ids}") |
|||
public Result<Integer> deleteTask(@Parameter(description = "实验ID,多个以英文逗号(,)分割") @PathVariable String ids) { |
|||
return Result.success(tasksService.removeByIds(ids)); |
|||
} |
|||
|
|||
@Operation(summary = "停止实验") |
|||
@PostMapping("/stop") |
|||
public Result<Integer> stopTask(@RequestBody StopTaskDTO dto) { |
|||
if(dto.getTaskId() != null) { |
|||
return Result.success(tasksService.stopTask(dto.getTaskId())); |
|||
} |
|||
return Result.failed("停止实验失败"); |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
package com.iflytop.gd.app.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.iflytop.gd.app.model.entity.TaskSteps; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 实验持久层接口 |
|||
*/ |
|||
@Mapper |
|||
public interface TaskStepsMapper extends BaseMapper<TaskSteps> { |
|||
List<TaskSteps> getTaskStepsByTaskId(Long taskId); |
|||
} |
@ -0,0 +1,23 @@ |
|||
package com.iflytop.gd.app.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.iflytop.gd.app.model.entity.Tasks; |
|||
import com.iflytop.gd.app.model.vo.TaskListVO; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 实验持久层接口 |
|||
*/ |
|||
@Mapper |
|||
public interface TasksMapper extends BaseMapper<Tasks> { |
|||
Page<TaskListVO> selectPage(Page<TaskListVO> page); |
|||
|
|||
TaskListVO selectById(Long id); |
|||
|
|||
Integer removeByIds(List<Long> ids); |
|||
|
|||
int stopTask(Long taskId); |
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.iflytop.gd.app.model.dto; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class StopTaskDTO { |
|||
@Schema(description = "实验id") |
|||
private Long taskId; |
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.iflytop.gd.app.model.dto; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class TaskDTO { |
|||
@Schema(description = "实验名称") |
|||
private String name; |
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.iflytop.gd.app.model.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@EqualsAndHashCode(callSuper = false) |
|||
@Schema(description = "实验步骤") |
|||
@TableName("task_steps") |
|||
@Data |
|||
public class TaskSteps { |
|||
|
|||
@NotBlank |
|||
@Schema(description = "id") |
|||
private Long id; |
|||
|
|||
@NotBlank |
|||
@Schema(description = "实验id") |
|||
private Long taskId; |
|||
|
|||
@NotBlank |
|||
@Schema(description = "步骤描述") |
|||
private String stepDescription; |
|||
|
|||
@NotBlank |
|||
@Schema(description = "创建时间") |
|||
private String createTime; |
|||
} |
@ -0,0 +1,35 @@ |
|||
package com.iflytop.gd.app.model.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.iflytop.gd.common.base.BaseEntity; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Schema(description = "实验") |
|||
@TableName("tasks") |
|||
@Data |
|||
public class Tasks extends BaseEntity { |
|||
|
|||
@NotBlank |
|||
@Schema(description = "实验名称") |
|||
private String name; |
|||
|
|||
@NotBlank |
|||
@Schema(description = "开始时间") |
|||
private String startTime; |
|||
|
|||
@Schema(description = "创建人") |
|||
private Long createUser; |
|||
|
|||
@Schema(description = "结束时间") |
|||
private String endTime; |
|||
|
|||
@Schema(description = "状态 1 执行中 2 执行完毕") |
|||
private Integer status; |
|||
|
|||
@Schema(description = "是否删除 0 未删除 1 已删除") |
|||
private Integer isDeleted; |
|||
} |
@ -0,0 +1,35 @@ |
|||
package com.iflytop.gd.app.model.vo; |
|||
|
|||
import com.iflytop.gd.app.model.entity.TaskSteps; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.util.List; |
|||
|
|||
@EqualsAndHashCode(callSuper = false) |
|||
@Data |
|||
public class TaskListVO { |
|||
@Schema(description = "实验id") |
|||
private Long id; |
|||
|
|||
@Schema(description = "实验名称") |
|||
private String name; |
|||
|
|||
@NotBlank |
|||
@Schema(description = "开始时间") |
|||
private String startTime; |
|||
|
|||
@Schema(description = "创建人") |
|||
private Long createUser; |
|||
|
|||
@Schema(description = "结束时间") |
|||
private String endTime; |
|||
|
|||
@Schema(description = "状态 1 执行中 2 执行完毕") |
|||
private Integer status; |
|||
|
|||
@Schema(description = "实验步骤") |
|||
private List<TaskSteps> steps; |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.iflytop.gd.app.service; |
|||
|
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.iflytop.gd.app.mapper.TaskStepsMapper; |
|||
import com.iflytop.gd.app.model.entity.TaskSteps; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 实验业务实现类 |
|||
*/ |
|||
@Service |
|||
@RequiredArgsConstructor |
|||
public class TaskStepsService extends ServiceImpl<TaskStepsMapper, TaskSteps>{ |
|||
private final TaskStepsMapper taskStepsMapper; |
|||
|
|||
public List<TaskSteps> getTaskStepsByTaskId(Long taskId) { |
|||
return taskStepsMapper.getTaskStepsByTaskId(taskId); |
|||
} |
|||
|
|||
public int addTaskSteps(TaskSteps taskSteps) { |
|||
return this.baseMapper.insert(taskSteps); |
|||
} |
|||
} |
@ -0,0 +1,119 @@ |
|||
package com.iflytop.gd.app.service; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.iflytop.gd.app.mapper.TaskStepsMapper; |
|||
import com.iflytop.gd.app.mapper.TasksMapper; |
|||
import com.iflytop.gd.app.model.entity.TaskSteps; |
|||
import com.iflytop.gd.app.model.entity.Tasks; |
|||
import com.iflytop.gd.app.model.entity.User; |
|||
import com.iflytop.gd.app.model.vo.TaskListVO; |
|||
import com.iflytop.gd.common.base.BasePageQuery; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* 实验业务实现类 |
|||
*/ |
|||
@Service |
|||
@RequiredArgsConstructor |
|||
public class TasksService extends ServiceImpl<TasksMapper, Tasks>{ |
|||
|
|||
private final TasksMapper tasksMapper; |
|||
private final UserService userService; |
|||
private final TaskStepsMapper taskStepsMapper; |
|||
private final TaskStepsService taskStepsService; |
|||
|
|||
public IPage<TaskListVO> getPage(BasePageQuery pageQuery) { |
|||
// 构建分页对象 |
|||
Page<TaskListVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); |
|||
|
|||
|
|||
IPage<TaskListVO> tasksIPage = tasksMapper.selectPage(page); |
|||
|
|||
|
|||
List<Long> taskIds = tasksIPage.getRecords().stream() |
|||
.map(TaskListVO::getId) |
|||
.toList(); |
|||
|
|||
QueryWrapper<TaskSteps> queryWrapper = new QueryWrapper<>(); |
|||
queryWrapper.in("task_id", taskIds); |
|||
List<TaskSteps> list = taskStepsMapper.selectList(queryWrapper); |
|||
|
|||
|
|||
Map<Long, List<TaskSteps>> map = list.stream() |
|||
.collect(Collectors.groupingBy(TaskSteps::getTaskId)); |
|||
|
|||
|
|||
List<TaskListVO> taskList = tasksIPage.getRecords().stream().map(task -> { |
|||
TaskListVO taskListVO = new TaskListVO(); |
|||
taskListVO.setId(task.getId()); |
|||
taskListVO.setName(task.getName()); |
|||
taskListVO.setStatus(task.getStatus()); |
|||
taskListVO.setStartTime(task.getStartTime()); |
|||
taskListVO.setEndTime(task.getEndTime()); |
|||
taskListVO.setCreateUser(task.getCreateUser()); |
|||
|
|||
List<TaskSteps> steps = map.get(task.getId()); |
|||
taskListVO.setSteps(steps); |
|||
|
|||
return taskListVO; |
|||
}).collect(Collectors.toList()); |
|||
|
|||
|
|||
Page<TaskListVO> resultPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); |
|||
resultPage.setTotal(tasksIPage.getTotal()); |
|||
resultPage.setRecords(taskList); |
|||
|
|||
return resultPage; |
|||
} |
|||
|
|||
public TaskListVO selectById(Long id) { |
|||
TaskListVO taskListVO = tasksMapper.selectById(id); |
|||
List<TaskSteps> taskSteps = taskStepsMapper.selectList(new QueryWrapper<TaskSteps>().eq("task_id", id)); |
|||
taskListVO.setSteps(taskSteps); |
|||
return taskListVO; |
|||
} |
|||
|
|||
public Tasks addTask(String taskName) { |
|||
Tasks tasks = new Tasks(); |
|||
tasks.setName(taskName); |
|||
User user = userService.getCurrentUser(); |
|||
tasks.setCreateUser(user.getId()); |
|||
tasks.setStatus(1); |
|||
tasks.setIsDeleted(0); |
|||
tasksMapper.insert(tasks); |
|||
TaskSteps taskSteps = new TaskSteps(); |
|||
taskSteps.setTaskId(tasks.getId()); |
|||
taskSteps.setStepDescription("开始实验"); |
|||
taskStepsService.addTaskSteps(taskSteps); |
|||
return tasks; |
|||
} |
|||
|
|||
public Tasks getIngTask() { |
|||
return tasksMapper.selectOne(new QueryWrapper<Tasks>().eq("status", 1)); |
|||
} |
|||
|
|||
public int removeByIds(String ids) { |
|||
List<Long> idsArr = Arrays.stream(ids.split(",")) |
|||
.map(Long::parseLong) |
|||
.collect(Collectors.toList()); |
|||
return tasksMapper.removeByIds(idsArr); |
|||
} |
|||
|
|||
public int stopTask(Long taskId) { |
|||
TaskSteps taskSteps = new TaskSteps(); |
|||
taskSteps.setTaskId(taskId); |
|||
taskSteps.setStepDescription("结束实验"); |
|||
taskStepsService.addTaskSteps(taskSteps); |
|||
return tasksMapper.stopTask(taskId); |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue