diff --git a/src/main/java/com/qyft/gd/mapper/TaskStepsMapper.java b/src/main/java/com/qyft/gd/mapper/TaskStepsMapper.java new file mode 100644 index 0000000..8a251a8 --- /dev/null +++ b/src/main/java/com/qyft/gd/mapper/TaskStepsMapper.java @@ -0,0 +1,18 @@ +package com.qyft.gd.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.qyft.gd.model.entity.TaskSteps; +import com.qyft.gd.model.entity.Tasks; +import com.qyft.gd.model.vo.TaskListVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 实验持久层接口 + */ +@Mapper +public interface TaskStepsMapper extends BaseMapper { + List getTaskStepsByTaskId(Long taskId); +} diff --git a/src/main/java/com/qyft/gd/model/entity/TaskSteps.java b/src/main/java/com/qyft/gd/model/entity/TaskSteps.java index 03f478e..0c9ce94 100644 --- a/src/main/java/com/qyft/gd/model/entity/TaskSteps.java +++ b/src/main/java/com/qyft/gd/model/entity/TaskSteps.java @@ -2,23 +2,26 @@ package com.qyft.gd.model.entity; import com.baomidou.mybatisplus.annotation.TableName; -import com.qyft.gd.system.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) +@EqualsAndHashCode(callSuper = false) @Schema(description = "实验步骤") @TableName("task_steps") @Data -public class TaskSteps extends BaseEntity { +public class TaskSteps { + + @NotBlank + @Schema(description = "id") + private Long id; @NotBlank @Schema(description = "实验id") - private String task_id; + private Long taskId; @NotBlank @Schema(description = "步骤描述") - private String step_description; + private String stepDescription; } diff --git a/src/main/java/com/qyft/gd/model/vo/TaskListVO.java b/src/main/java/com/qyft/gd/model/vo/TaskListVO.java index d47eb40..d334907 100644 --- a/src/main/java/com/qyft/gd/model/vo/TaskListVO.java +++ b/src/main/java/com/qyft/gd/model/vo/TaskListVO.java @@ -1,5 +1,6 @@ package com.qyft.gd.model.vo; +import com.qyft.gd.model.entity.TaskSteps; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; @@ -28,4 +29,7 @@ public class TaskListVO { @Schema(description = "状态 1 执行中 2 执行完毕") private Integer status; + + @Schema(description = "实验步骤") + private List steps; } diff --git a/src/main/java/com/qyft/gd/service/TaskStepsService.java b/src/main/java/com/qyft/gd/service/TaskStepsService.java new file mode 100644 index 0000000..ef9ae7f --- /dev/null +++ b/src/main/java/com/qyft/gd/service/TaskStepsService.java @@ -0,0 +1,18 @@ +package com.qyft.gd.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.qyft.gd.model.entity.TaskSteps; +import com.qyft.gd.model.entity.Tasks; +import com.qyft.gd.model.vo.TaskListVO; +import com.qyft.gd.system.common.base.BasePageQuery; + +import java.util.List; + +/** + * 实验业务接口 + */ +public interface TaskStepsService extends IService { + List getTaskStepsByTaskId(Long taskId); + int addTaskSteps(TaskSteps taskSteps); +} diff --git a/src/main/java/com/qyft/gd/service/impl/TaskStepsServiceImpl.java b/src/main/java/com/qyft/gd/service/impl/TaskStepsServiceImpl.java new file mode 100644 index 0000000..db12f13 --- /dev/null +++ b/src/main/java/com/qyft/gd/service/impl/TaskStepsServiceImpl.java @@ -0,0 +1,40 @@ +package com.qyft.gd.service.impl; + +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.qyft.gd.mapper.TaskStepsMapper; +import com.qyft.gd.mapper.TasksMapper; +import com.qyft.gd.model.entity.TaskSteps; +import com.qyft.gd.model.entity.Tasks; +import com.qyft.gd.model.vo.TaskListVO; +import com.qyft.gd.service.TaskStepsService; +import com.qyft.gd.service.TasksService; +import com.qyft.gd.system.common.base.BasePageQuery; +import com.qyft.gd.system.model.entity.User; +import com.qyft.gd.system.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 实验业务实现类 + */ +@Service +@RequiredArgsConstructor +public class TaskStepsServiceImpl extends ServiceImpl implements TaskStepsService { + private final TaskStepsMapper taskStepsMapper; + + @Override + public List getTaskStepsByTaskId(Long taskId) { + return taskStepsMapper.getTaskStepsByTaskId(taskId); + } + + @Override + public int addTaskSteps(TaskSteps taskSteps) { + return this.baseMapper.insert(taskSteps); + } +} diff --git a/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java b/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java index 13eab07..733fd93 100644 --- a/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java +++ b/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java @@ -1,11 +1,15 @@ package com.qyft.gd.service.impl; +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.qyft.gd.mapper.TaskStepsMapper; import com.qyft.gd.mapper.TasksMapper; +import com.qyft.gd.model.entity.TaskSteps; import com.qyft.gd.model.entity.Tasks; import com.qyft.gd.model.vo.TaskListVO; +import com.qyft.gd.service.TaskStepsService; import com.qyft.gd.service.TasksService; import com.qyft.gd.system.common.base.BasePageQuery; import com.qyft.gd.system.model.entity.User; @@ -15,6 +19,7 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -26,18 +31,60 @@ public class TasksServiceImpl extends ServiceImpl implements private final TasksMapper tasksMapper; private final UserService userService; + private final TaskStepsMapper taskStepsMapper; + private final TaskStepsService taskStepsService; @Override public IPage getPage(BasePageQuery pageQuery) { // 构建分页对象 Page page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); - return tasksMapper.selectPage(page); + + IPage tasksIPage = tasksMapper.selectPage(page); + + + List taskIds = tasksIPage.getRecords().stream() + .map(TaskListVO::getId) + .toList(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("task_id", taskIds); + List list = taskStepsMapper.selectList(queryWrapper); + + + Map> map = list.stream() + .collect(Collectors.groupingBy(TaskSteps::getTaskId)); + + + List 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 steps = map.get(task.getId()); + taskListVO.setSteps(steps); + + return taskListVO; + }).collect(Collectors.toList()); + + + Page resultPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); + resultPage.setTotal(tasksIPage.getTotal()); + resultPage.setRecords(taskList); + + return resultPage; } @Override public TaskListVO selectById(Long id) { - return tasksMapper.selectById(id); + TaskListVO taskListVO = tasksMapper.selectById(id); + List taskSteps = taskStepsMapper.selectList(new QueryWrapper().eq("task_id", id)); + taskListVO.setSteps(taskSteps); + return taskListVO; } @Override @@ -48,8 +95,12 @@ public class TasksServiceImpl extends ServiceImpl implements tasks.setCreateUser(user.getId()); tasks.setStatus(1); tasks.setIsDeleted(0); - - return tasksMapper.insert(tasks); + tasksMapper.insert(tasks); + TaskSteps taskSteps = new TaskSteps(); + taskSteps.setTaskId(tasks.getId()); + taskSteps.setStepDescription("开始实验"); + taskStepsService.addTaskSteps(taskSteps); + return Math.toIntExact(tasks.getId()); } @Override @@ -62,6 +113,10 @@ public class TasksServiceImpl extends ServiceImpl implements @Override public int stopTask(Long taskId) { + TaskSteps taskSteps = new TaskSteps(); + taskSteps.setTaskId(taskId); + taskSteps.setStepDescription("结束实验"); + taskStepsService.addTaskSteps(taskSteps); return tasksMapper.stopTask(taskId); } diff --git a/src/main/resources/mapper/TaskStepsMapper.xml b/src/main/resources/mapper/TaskStepsMapper.xml new file mode 100644 index 0000000..86511b7 --- /dev/null +++ b/src/main/resources/mapper/TaskStepsMapper.xml @@ -0,0 +1,8 @@ + + + + + +