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) {
|
public R<Void> revoke(@PathVariable @NotNull Long instId) {
|
||||||
return toAjax(service.revokeInstance(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.bo.HrmFlowInstanceBo;
|
||||||
import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
|
import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -38,4 +39,6 @@ public interface IHrmFlowInstanceService {
|
|||||||
* @return 是否成功
|
* @return 是否成功
|
||||||
*/
|
*/
|
||||||
Boolean revokeInstance(Long instId);
|
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()
|
HrmFlowNode firstNode = nodeMapper.selectOne(Wrappers.<HrmFlowNode>lambdaQuery()
|
||||||
.eq(HrmFlowNode::getTplId, bo.getTplId())
|
.eq(HrmFlowNode::getTplId, bo.getTplId())
|
||||||
.orderByAsc(HrmFlowNode::getOrderNo)
|
.orderByAsc(HrmFlowNode::getOrderNo)
|
||||||
.last("limit 1"));
|
.last("limit 1"));
|
||||||
if (firstNode == null) {
|
if (firstNode == null) {
|
||||||
throw new RuntimeException("流程模板无节点,无法启动");
|
throw new RuntimeException("流程模板无节点,无法启动");
|
||||||
}
|
}
|
||||||
@@ -182,8 +182,8 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService {
|
|||||||
|
|
||||||
// 检查所有相关任务状态
|
// 检查所有相关任务状态
|
||||||
List<HrmFlowTask> tasks = taskMapper.selectList(Wrappers.<HrmFlowTask>lambdaQuery()
|
List<HrmFlowTask> tasks = taskMapper.selectList(Wrappers.<HrmFlowTask>lambdaQuery()
|
||||||
.eq(HrmFlowTask::getInstId, instId)
|
.eq(HrmFlowTask::getInstId, instId)
|
||||||
.eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务
|
.eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务
|
||||||
for (HrmFlowTask task : tasks) {
|
for (HrmFlowTask task : tasks) {
|
||||||
if (!"pending".equals(task.getStatus())) {
|
if (!"pending".equals(task.getStatus())) {
|
||||||
throw new RuntimeException("存在非待办状态的任务,无法撤销");
|
throw new RuntimeException("存在非待办状态的任务,无法撤销");
|
||||||
@@ -207,6 +207,28 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService {
|
|||||||
return true;
|
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) {
|
private LambdaQueryWrapper<HrmFlowInstance> buildQueryWrapper(HrmFlowInstanceBo bo) {
|
||||||
LambdaQueryWrapper<HrmFlowInstance> lqw = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<HrmFlowInstance> lqw = Wrappers.lambdaQuery();
|
||||||
lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId());
|
lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId());
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
|||||||
reTask.setNodeId(0L);
|
reTask.setNodeId(0L);
|
||||||
reTask.setBizType(inst.getBizType());
|
reTask.setBizType(inst.getBizType());
|
||||||
reTask.setBizId(inst.getBizId());
|
reTask.setBizId(inst.getBizId());
|
||||||
// 撤回后回到“原审批人”(撤回前的办理人)
|
// 撤回后回到"原审批人"(撤回前的办理人)
|
||||||
reTask.setAssigneeUserId(task.getAssigneeUserId());
|
reTask.setAssigneeUserId(task.getAssigneeUserId());
|
||||||
reTask.setStatus("pending");
|
reTask.setStatus("pending");
|
||||||
baseMapper.insert(reTask);
|
baseMapper.insert(reTask);
|
||||||
@@ -358,7 +358,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId) {
|
public HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId) {
|
||||||
// 只取“待办 pending”的一条(理论上同一 biz 同一时刻最多一条待办)
|
// 只取"待办 pending"的一条(理论上同一 biz 同一时刻最多一条待办)
|
||||||
LambdaQueryWrapper<HrmFlowTask> lqw = Wrappers.<HrmFlowTask>lambdaQuery()
|
LambdaQueryWrapper<HrmFlowTask> lqw = Wrappers.<HrmFlowTask>lambdaQuery()
|
||||||
.eq(bizType != null, HrmFlowTask::getBizType, bizType)
|
.eq(bizType != null, HrmFlowTask::getBizType, bizType)
|
||||||
.eq(bizId != null, HrmFlowTask::getBizId, bizId)
|
.eq(bizId != null, HrmFlowTask::getBizId, bizId)
|
||||||
@@ -367,7 +367,9 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService {
|
|||||||
.orderByDesc(HrmFlowTask::getTaskId)
|
.orderByDesc(HrmFlowTask::getTaskId)
|
||||||
.last("limit 1");
|
.last("limit 1");
|
||||||
HrmFlowTaskVo hrmFlowTaskVo = baseMapper.selectVoOne(lqw);
|
HrmFlowTaskVo hrmFlowTaskVo = baseMapper.selectVoOne(lqw);
|
||||||
hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId()));
|
if (hrmFlowTaskVo != null) {
|
||||||
|
hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId()));
|
||||||
|
}
|
||||||
return hrmFlowTaskVo;
|
return hrmFlowTaskVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user