批量编辑/删除任务;编辑新增修改参数

This commit is contained in:
2025-11-06 15:38:23 +08:00
parent c91840d7c2
commit 4f224f37ef
19 changed files with 498 additions and 48 deletions

View File

@@ -1,11 +1,8 @@
package com.sdm.project.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.project.model.bo.ModifyProjectNode;
import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.req.SpdmTaskAttentionReq;
import com.sdm.project.model.req.SpdmTaskCountReq;
import com.sdm.project.model.req.SpdmTaskListReq;
import com.sdm.project.model.req.*;
import com.sdm.project.service.ITaskService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -14,9 +11,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/task")
@@ -39,20 +33,12 @@ public class SimulationTaskController {
}
/**
* 驳回、启动、暂停、工时、关闭、关注、取消关注
*
* @param taskId
* @param exeStatus
* @param achieveStatus
* @param process
* @return
* 驳回、启动、暂停、工时、关闭、关注、取消关注、编辑
*/
@GetMapping("/operation")
@PostMapping("/operation")
@Operation(summary = "操作任务", description = "操作任务")
public SdmResponse operation(@RequestParam("taskId") String taskId, @RequestParam(value = "exeStatus",required = false) String exeStatus,
@RequestParam(value = "achieveStatus",required = false) String achieveStatus,@RequestParam(value = "process",required = false) Integer process,
@RequestParam(value = "finishTime",required = false) String finishTime) {
return taskService.operation(taskId, exeStatus,achieveStatus,process,finishTime);
public SdmResponse operation(@RequestBody SpdmTaskOpr taskOpr) {
return taskService.operation(taskOpr);
}
@PostMapping("/attention")
@@ -85,4 +71,10 @@ public class SimulationTaskController {
return taskService.countByStatus(req);
}
@PostMapping("/batchDelete")
@Operation(summary = "批量删除任务", description = "批量删除任务")
public SdmResponse batchDeleteTask(@RequestBody SpdmTaskOpr taskOpr) {
return taskService.batchDeleteTask(taskOpr);
}
}

View File

@@ -0,0 +1,10 @@
package com.sdm.project.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.project.model.entity.SimulationTaskAttention;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SimulationTaskAttentionMapper extends BaseMapper<SimulationTaskAttention> {
}

View File

@@ -0,0 +1,16 @@
package com.sdm.project.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.project.model.entity.SimulationTaskExtra;
/**
* <p>
* Mapper 接口
* </p>
*
* @author author
* @since 2025-09-16
*/
public interface SimulationTaskExtraMapper extends BaseMapper<SimulationTaskExtra> {
}

View File

@@ -0,0 +1,10 @@
package com.sdm.project.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.project.model.entity.SimulationTaskMember;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SimulationTaskMemberMapper extends BaseMapper<SimulationTaskMember> {
}

View File

@@ -0,0 +1,60 @@
package com.sdm.project.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_task_attention")
@ApiModel(value="SimulationTaskAttention", description="")
public class SimulationTaskAttention implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "任务ID")
@TableField("task_id")
private String taskId;
@ApiModelProperty(value = "身份标识")
@TableField("identity")
private String identity;
@ApiModelProperty(value = "名称")
@TableField("name")
private String name;
@ApiModelProperty(value = "用户ID")
@TableField("user_id")
private Long userId;
@ApiModelProperty(value = "创建人")
@TableField("creator")
private String creator;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private String createTime;
@ApiModelProperty(value = "更新人")
@TableField("updater")
private String updater;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")
private String updateTime;
}

View File

@@ -0,0 +1,50 @@
package com.sdm.project.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author author
* @since 2025-09-16
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_task_extra")
@ApiModel(value="SimulationTaskExtra对象", description="")
public class SimulationTaskExtra implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("task_id")
private String taskId;
@TableField("property_name")
private String propertyName;
@TableField("property_value")
private String propertyValue;
@TableField("value_type")
private String valueType;
@TableField("property_class")
private String propertyClass;
}

View File

@@ -0,0 +1,64 @@
package com.sdm.project.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_task_member")
@ApiModel(value="SimulationTaskMember", description="")
public class SimulationTaskMember implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "任务ID")
@TableField("task_id")
private String taskId;
@ApiModelProperty(value = "身份标识")
@TableField("identity")
private String identity;
@ApiModelProperty(value = "名称")
@TableField("name")
private String name;
@ApiModelProperty(value = "用户ID")
@TableField("user_id")
private Long userId;
@ApiModelProperty(value = "创建人")
@TableField("creator")
private String creator;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private String createTime;
@ApiModelProperty(value = "更新人")
@TableField("updater")
private String updater;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")
private String updateTime;
@ApiModelProperty(value = "类型0-仿真负责人 1-仿真执行人")
@TableField("type")
private Integer type;
}

View File

@@ -0,0 +1,16 @@
package com.sdm.project.model.req;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class SpdmTaskOpr {
List<String> taskIds;
SpdmTaskOprReq req;
}

View File

@@ -0,0 +1,56 @@
package com.sdm.project.model.req;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class SpdmTaskOprReq {
/**
* 任务名称
*/
private String taskId;
/**
* 任务状态
*/
private String exeStatus;
/**
* 达成情况
*/
private String achieveStatus;
/**
* 任务进度
*/
private Integer progress;
/**
* 实际结束时间
*/
private String finishTime;
/**
* 计划开始时间
*/
private String beginTime;
/**
* 计划结束时间
*/
private String endTime;
/**
* 仿真执行人
*/
@JsonProperty(value = "eMemberList")
private String eMemberList;
/**
* 任务名称
*/
private String nodeName;
}

View File

@@ -0,0 +1,9 @@
package com.sdm.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.project.model.entity.SimulationTaskAttention;
public interface ISimulationTaskAttentionService extends IService<SimulationTaskAttention> {
}

View File

@@ -0,0 +1,16 @@
package com.sdm.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.project.model.entity.SimulationTaskExtra;
/**
* <p>
* 服务类
* </p>
*
* @author author
* @since 2025-09-16
*/
public interface ISimulationTaskExtraService extends IService<SimulationTaskExtra> {
}

View File

@@ -0,0 +1,14 @@
package com.sdm.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.project.model.entity.SimulationTaskMember;
import java.util.List;
public interface ISimulationTaskMemberService extends IService<SimulationTaskMember> {
void deleteTaskMemberList(String taskId, Integer type);
boolean saveTaskMemberList(String taskId, Integer type, List<Long> userIds);
}

View File

@@ -2,6 +2,9 @@ package com.sdm.project.service;
import com.sdm.project.model.entity.SimulationTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.project.model.req.SpdmTaskOprReq;
import java.util.List;
/**
* <p>
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISimulationTaskService extends IService<SimulationTask> {
boolean updateSimulationTask(SpdmTaskOprReq req);
}

View File

@@ -4,7 +4,6 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.GetAllRunResultByTaskIdResp;
import com.sdm.project.model.resp.RunResultResp;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -17,7 +16,7 @@ public interface ITaskService {
SdmResponse countByStatus(SpdmTaskCountReq req);
SdmResponse operation(String taskId, String exeStatus,String achieveStatus,Integer process,String finishTime);
SdmResponse operation(SpdmTaskOpr req);
SdmResponse analysisTaskList(SpdmAnalysisTaskListReq req);
@@ -30,4 +29,7 @@ public interface ITaskService {
SdmResponse edit(ModifyTaskNode req);
SdmResponse<GetAllRunResultByTaskIdResp> getAllRunResultByTaskId(String taskId);
SdmResponse batchDeleteTask(SpdmTaskOpr taskOpr);
}

View File

@@ -0,0 +1,14 @@
package com.sdm.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.project.dao.SimulationTaskAttentionMapper;
import com.sdm.project.model.entity.SimulationTaskAttention;
import com.sdm.project.service.ISimulationTaskAttentionService;
import com.sdm.project.service.ISimulationTaskMemberService;
import org.springframework.stereotype.Service;
@Service
public class SimulationTaskAttentionServiceImpl extends ServiceImpl<SimulationTaskAttentionMapper, SimulationTaskAttention> implements ISimulationTaskAttentionService {
}

View File

@@ -0,0 +1,20 @@
package com.sdm.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.project.dao.SimulationTaskExtraMapper;
import com.sdm.project.model.entity.SimulationTaskExtra;
import com.sdm.project.service.ISimulationTaskExtraService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author author
* @since 2025-09-16
*/
@Service
public class SimulationTaskExtraServiceImpl extends ServiceImpl<SimulationTaskExtraMapper, SimulationTaskExtra> implements ISimulationTaskExtraService {
}

View File

@@ -0,0 +1,39 @@
package com.sdm.project.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.project.dao.SimulationTaskMemberMapper;
import com.sdm.project.model.entity.SimulationTaskMember;
import com.sdm.project.service.ISimulationTaskMemberService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SimulationTaskMemberServiceImpl extends ServiceImpl<SimulationTaskMemberMapper, SimulationTaskMember> implements ISimulationTaskMemberService {
@Override
public void deleteTaskMemberList(String taskId, Integer type) {
LambdaQueryWrapper<SimulationTaskMember> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SimulationTaskMember::getTaskId, taskId);
wrapper.eq(SimulationTaskMember::getType, type);
this.remove(wrapper);
}
@Override
public boolean saveTaskMemberList(String taskId, Integer type, List<Long> userIds) {
for (Long userId : userIds) {
SimulationTaskMember entity = new SimulationTaskMember();
entity.setTaskId(taskId);
entity.setType(type);
entity.setUserId(userId);
entity.setCreator(String.valueOf(ThreadLocalContext.getUserId()));
entity.setCreateTime(DateUtil.now());
this.save(entity);
}
return true;
}
}

View File

@@ -1,11 +1,19 @@
package com.sdm.project.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.project.model.entity.SimulationTask;
import com.sdm.project.dao.SimulationTaskMapper;
import com.sdm.project.model.entity.SimulationTaskMember;
import com.sdm.project.model.req.SpdmTaskOprReq;
import com.sdm.project.service.ISimulationTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
@@ -17,4 +25,34 @@ import org.springframework.stereotype.Service;
@Service
public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper, SimulationTask> implements ISimulationTaskService {
@Override
public boolean updateSimulationTask(SpdmTaskOprReq req) {
LambdaUpdateWrapper<SimulationTask> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(SimulationTask::getUuid, req.getTaskId());
if (req.getExeStatus() != null) {
wrapper.set(SimulationTask::getExeStatus, req.getExeStatus());
}
if (req.getAchieveStatus() != null) {
wrapper.set(SimulationTask::getAchieveStatus, req.getAchieveStatus());
}
if (req.getProgress() != null) {
wrapper.set(SimulationTask::getProgress, req.getProgress());
}
if (req.getFinishTime() != null) {
wrapper.set(SimulationTask::getFinishTime, req.getFinishTime());
}
if (req.getBeginTime() != null) {
wrapper.set(SimulationTask::getBeginTime, req.getBeginTime());
}
if (req.getEndTime() != null) {
wrapper.set(SimulationTask::getEndTime, req.getEndTime());
}
if (req.getNodeName() != null) {
wrapper.set(SimulationTask::getTaskName, req.getNodeName());
}
wrapper.set(SimulationTask::getCreator, String.valueOf(ThreadLocalContext.getUserId()));
wrapper.set(SimulationTask::getCreateTime, DateUtil.now());
return this.update(wrapper);
}
}

View File

@@ -8,7 +8,6 @@ import com.sdm.common.entity.constants.SystemConstants;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.utils.Tools;
import com.sdm.project.common.MemberTypeEnum;
import com.sdm.project.common.TaskExeStatusEnum;
import com.sdm.project.dao.SimulationDemandMapper;
@@ -19,8 +18,7 @@ import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.bo.TaskExtraNode;
import com.sdm.project.model.bo.TaskMemberNode;
import com.sdm.project.model.bo.TaskNodeTag;
import com.sdm.project.model.entity.SimulationPerformance;
import com.sdm.project.model.entity.SimulationRun;
import com.sdm.project.model.entity.*;
import com.sdm.project.model.po.PerformanceNodePo;
import com.sdm.project.model.po.ProjectNodePo;
import com.sdm.project.model.po.TaskNodeMemberPo;
@@ -31,9 +29,7 @@ import com.sdm.project.model.resp.RunResultResp;
import com.sdm.project.model.resp.TasKPerformanceResp;
import com.sdm.project.model.resp.TaskCountResp;
import com.sdm.project.model.vo.*;
import com.sdm.project.service.ISimulationPerformanceService;
import com.sdm.project.service.ISimulationRunService;
import com.sdm.project.service.ITaskService;
import com.sdm.project.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
@@ -41,6 +37,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
@@ -76,6 +73,15 @@ public class TaskServiceImpl implements ITaskService {
@Autowired
private SysUserFeignClientImpl sysUserFeignClient;
@Autowired
private ISimulationTaskMemberService simulationTaskMemberService;
@Autowired
private ISimulationTaskService simulationTaskService;
@Autowired
private ISimulationTaskExtraService simulationTaskExtraService;
@Autowired
private ISimulationTaskAttentionService simulationTaskAttentionService;
@Override
public SdmResponse list(SpdmTaskListReq req) {
@@ -487,10 +493,9 @@ public class TaskServiceImpl implements ITaskService {
Integer type = req.getType();
SpdmTaskListReq qry = new SpdmTaskListReq();
BeanUtils.copyProperties(req, qry);
List<SpdmTaskVo> allTaskList = mapper.getTaskList(tenantId, qry);
// 今明任务
req.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
qry.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
List<SpdmTaskVo> todayTmrTaskList = mapper.getTaskList(tenantId, qry);
if (CollectionUtils.isEmpty(allTaskList)) {
log.error("根据tenantId{},未查询到任务", tenantId);
@@ -605,26 +610,30 @@ public class TaskServiceImpl implements ITaskService {
@Override
public SdmResponse operation(String taskId, String exeStatus, String achieveStatus, Integer process, String finishTime) {
if (StringUtils.isBlank(taskId)) {
return SdmResponse.failed("taskId不能为空");
}
SpdmTaskVo task = mapper.getTask(taskId);
if (ObjectUtils.isEmpty(task)) {
log.error("根据taskId{},未查询到任务", taskId);
return SdmResponse.failed("未查询到任务");
}
task.setExeStatus(exeStatus);
task.setAchieveStatus(achieveStatus);
task.setProgress(process);
task.setFinishTime(finishTime);
task.setUpdater(ThreadLocalContext.getCommonHeader().getJobNumber());
task.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
if (mapper.updateTask(task) > 0) {
return SdmResponse.success();
} else {
return SdmResponse.failed("编辑任务失败");
@Transactional(rollbackFor = Exception.class)
public SdmResponse operation(SpdmTaskOpr taskOpr) {
if (CollectionUtils.isNotEmpty(taskOpr.getTaskIds()) && ObjectUtils.isNotEmpty(taskOpr.getReq())) {
SpdmTaskOprReq req = taskOpr.getReq();
for (String taskId : taskOpr.getTaskIds()) {
req.setTaskId(taskId);
if (simulationTaskService.lambdaQuery().eq(SimulationTask::getUuid, taskId).count() <= 0) {
log.error("根据taskId{},未查询到任务", taskId);
return SdmResponse.failed("未查询到任务");
}
if (!simulationTaskService.updateSimulationTask(req)) {
return SdmResponse.failed("编辑任务失败");
}
if (StringUtils.isNotBlank(req.getEMemberList())) {
String[] userIdArr = req.getEMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.deleteTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode());
if (!simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode(), longUserIdList)) {
return SdmResponse.failed("编辑仿真执行人失败");
}
}
}
}
return SdmResponse.success();
}
@@ -938,4 +947,14 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success(result);
}
@Override
public SdmResponse batchDeleteTask(SpdmTaskOpr taskOpr) {
List<String> taskIds = taskOpr.getTaskIds();
simulationTaskService.lambdaUpdate().in(SimulationTask::getUuid, taskIds).remove();
simulationTaskMemberService.lambdaUpdate().in(SimulationTaskMember::getTaskId, taskIds).remove();
simulationTaskExtraService.lambdaUpdate().in(SimulationTaskExtra::getTaskId, taskIds).remove();
simulationTaskAttentionService.lambdaUpdate().in(SimulationTaskAttention::getTaskId, taskIds).remove();
return SdmResponse.success();
}
}