feat(flow): 添加驳回实例删除功能并优化代码结构
- 在HrmFlowInstanceController中新增deleteRejected接口用于删除驳回状态的流程实例 - 在HrmFlowInstanceService中实现deleteRejectedInstance方法,包含状态校验和级联删除逻辑 - 修复代码中的缩进格式问题,统一代码风格 - 优化HrmFlowTaskServiceImpl中查询待办任务的逻辑,避免空指针异常 - 更新注释中的引号格式,保持代码一致性 - 添加数据验证注解确保参数合法性
This commit is contained in:
@@ -79,4 +79,10 @@ public class HrmFlowInstanceController extends BaseController {
|
||||
public R<Void> revoke(@PathVariable @NotNull Long instId) {
|
||||
return toAjax(service.revokeInstance(instId));
|
||||
}
|
||||
|
||||
@Log(title = "删除驳回实例", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/deleteRejected/{instId}")
|
||||
public R<Void> deleteRejectedInstance(@PathVariable @NotNull Long instId) {
|
||||
return toAjax(service.deleteRejectedInstance(instId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.hrm.domain.bo.HrmFlowInstanceBo;
|
||||
import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@@ -38,4 +39,6 @@ public interface IHrmFlowInstanceService {
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean revokeInstance(Long instId);
|
||||
|
||||
Boolean deleteRejectedInstance(@NotNull Long instId);
|
||||
}
|
||||
|
||||
@@ -82,9 +82,9 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService {
|
||||
|
||||
// 有模板:找首节点
|
||||
HrmFlowNode firstNode = nodeMapper.selectOne(Wrappers.<HrmFlowNode>lambdaQuery()
|
||||
.eq(HrmFlowNode::getTplId, bo.getTplId())
|
||||
.orderByAsc(HrmFlowNode::getOrderNo)
|
||||
.last("limit 1"));
|
||||
.eq(HrmFlowNode::getTplId, bo.getTplId())
|
||||
.orderByAsc(HrmFlowNode::getOrderNo)
|
||||
.last("limit 1"));
|
||||
if (firstNode == null) {
|
||||
throw new RuntimeException("流程模板无节点,无法启动");
|
||||
}
|
||||
@@ -182,8 +182,8 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService {
|
||||
|
||||
// 检查所有相关任务状态
|
||||
List<HrmFlowTask> tasks = taskMapper.selectList(Wrappers.<HrmFlowTask>lambdaQuery()
|
||||
.eq(HrmFlowTask::getInstId, instId)
|
||||
.eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务
|
||||
.eq(HrmFlowTask::getInstId, instId)
|
||||
.eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务
|
||||
for (HrmFlowTask task : tasks) {
|
||||
if (!"pending".equals(task.getStatus())) {
|
||||
throw new RuntimeException("存在非待办状态的任务,无法撤销");
|
||||
@@ -207,6 +207,28 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteRejectedInstance(Long instId) {
|
||||
// 查询实例
|
||||
HrmFlowInstance instance = baseMapper.selectById(instId);
|
||||
if (instance == null) {
|
||||
throw new RuntimeException("未找到对应的流程实例");
|
||||
}
|
||||
|
||||
// 判断实例状态是否为驳回
|
||||
if (!"rejected".equals(instance.getStatus())) {
|
||||
throw new RuntimeException("只有驳回状态的实例才能被删除");
|
||||
}
|
||||
|
||||
// 删除实例及对应的任务
|
||||
// 先删除关联的任务
|
||||
taskMapper.delete(Wrappers.<HrmFlowTask>lambdaQuery().eq(HrmFlowTask::getInstId, instId));
|
||||
|
||||
// 再删除实例本身
|
||||
return baseMapper.deleteById(instId) > 0;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<HrmFlowInstance> buildQueryWrapper(HrmFlowInstanceBo bo) {
|
||||
LambdaQueryWrapper<HrmFlowInstance> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId());
|
||||
|
||||
@@ -295,7 +295,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
||||
reTask.setNodeId(0L);
|
||||
reTask.setBizType(inst.getBizType());
|
||||
reTask.setBizId(inst.getBizId());
|
||||
// 撤回后回到“原审批人”(撤回前的办理人)
|
||||
// 撤回后回到"原审批人"(撤回前的办理人)
|
||||
reTask.setAssigneeUserId(task.getAssigneeUserId());
|
||||
reTask.setStatus("pending");
|
||||
baseMapper.insert(reTask);
|
||||
@@ -358,7 +358,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
||||
|
||||
@Override
|
||||
public HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId) {
|
||||
// 只取“待办 pending”的一条(理论上同一 biz 同一时刻最多一条待办)
|
||||
// 只取"待办 pending"的一条(理论上同一 biz 同一时刻最多一条待办)
|
||||
LambdaQueryWrapper<HrmFlowTask> lqw = Wrappers.<HrmFlowTask>lambdaQuery()
|
||||
.eq(bizType != null, HrmFlowTask::getBizType, bizType)
|
||||
.eq(bizId != null, HrmFlowTask::getBizId, bizId)
|
||||
@@ -367,7 +367,9 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
||||
.orderByDesc(HrmFlowTask::getTaskId)
|
||||
.last("limit 1");
|
||||
HrmFlowTaskVo hrmFlowTaskVo = baseMapper.selectVoOne(lqw);
|
||||
hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId()));
|
||||
if (hrmFlowTaskVo != null) {
|
||||
hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId()));
|
||||
}
|
||||
return hrmFlowTaskVo;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user