提交 aa0b2b82 authored 作者: hzh's avatar hzh

审批流程配置

上级 ef575a10
package org.dromara.server.constant;
/**
* @author wenhe
*/
public enum ProcessApproveStatus {
/**
* 审批中
*/
APPROVEIND,
/**
* 审批拒绝
*/
REJECT,
/**
* 审批完成
*/
END;
}
package org.dromara.server.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author wenhe
*/
@Getter
@AllArgsConstructor
public enum ProcessKey {
//出差审批
PROCESS_KEY_TRAVEL("process-travel", "出差审批");
private String key;
private String desc;
}
package org.dromara.server.constant;
/**
* @author wenhe
*/
public enum ProcessStepApprove {
/**
* 会签
*/
AND,
/**
* 或签
*/
OR
}
package org.dromara.server.constant;
/**
* 流程步骤类型
*
* @author wenhe
*/
public enum ProcessStepType {
/**
* 开始
*/
START,
/**
* 其他
*/
OTHER,
/**
* 审批
*/
APPROVE,
/**
* 结束
*/
END;
}
package org.dromara.server.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.server.domain.vo.ProcessProgressVo;
import org.dromara.server.domain.bo.ProcessProgressBo;
import org.dromara.server.service.IProcessProgressService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 流程进度
* 前端访问路由地址为:/server/progress
*
* @author hzh
* @date 2024-12-11
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/progress")
public class ProcessProgressController extends BaseController {
private final IProcessProgressService processProgressService;
/**
* 查询流程进度列表
*/
@SaCheckPermission("server:progress:list")
@GetMapping("/list")
public TableDataInfo<ProcessProgressVo> list(ProcessProgressBo bo, PageQuery pageQuery) {
return processProgressService.queryPageList(bo, pageQuery);
}
/**
* 导出流程进度列表
*/
@SaCheckPermission("server:progress:export")
@Log(title = "流程进度", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ProcessProgressBo bo, HttpServletResponse response) {
List<ProcessProgressVo> list = processProgressService.queryList(bo);
ExcelUtil.exportExcel(list, "流程进度", ProcessProgressVo.class, response);
}
/**
* 获取流程进度详细信息
*
* @param id 主键
*/
@SaCheckPermission("server:progress:query")
@GetMapping("/{id}")
public R<ProcessProgressVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(processProgressService.queryById(id));
}
/**
* 新增流程进度
*/
@SaCheckPermission("server:progress:add")
@Log(title = "流程进度", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ProcessProgressBo bo) {
return toAjax(processProgressService.insertByBo(bo));
}
/**
* 修改流程进度
*/
@SaCheckPermission("server:progress:edit")
@Log(title = "流程进度", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProcessProgressBo bo) {
return toAjax(processProgressService.updateByBo(bo));
}
/**
* 删除流程进度
*
* @param ids 主键串
*/
@SaCheckPermission("server:progress:remove")
@Log(title = "流程进度", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(processProgressService.deleteWithValidByIds(List.of(ids), true));
}
}
...@@ -146,7 +146,6 @@ public class TrainController extends BaseController { ...@@ -146,7 +146,6 @@ public class TrainController extends BaseController {
.setToStationCode(toStationCode) .setToStationCode(toStationCode)
.setTripType(TripType.PUBLIC.getCode()); .setTripType(TripType.PUBLIC.getCode());
List<org.dromara.common.ys.model.res.train.QueryModel> list = trainService.queryModel(userId, query); List<org.dromara.common.ys.model.res.train.QueryModel> list = trainService.queryModel(userId, query);
System.out.println("list:" + list.size());
return R.ok(list); return R.ok(list);
} }
......
package org.dromara.server.domain; package org.dromara.server.domain;
import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date; import org.dromara.common.tenant.core.TenantEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial; import java.io.Serial;
import java.util.Date;
/** /**
* 出差申请审批对象 process_approve * 出差申请审批对象 process_approve
...@@ -72,7 +72,7 @@ public class ProcessApprove extends TenantEntity { ...@@ -72,7 +72,7 @@ public class ProcessApprove extends TenantEntity {
/** /**
* 是否通过 * 是否通过
*/ */
private Long pass; private Boolean pass;
} }
package org.dromara.server.domain;
import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 流程进度对象 process_progress
*
* @author hzh
* @date 2024-12-11
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("process_progress")
public class ProcessProgress extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 流程定义key
*/
private String processKey;
/**
* 流程名称
*/
private String processName;
/**
* 流程步骤key
*/
private String processStepKey;
/**
* 流程步骤
*/
private String processStepName;
/**
* 审批类型
*/
private String approveType;
/**
* 关联id
*/
private Long relatedId;
/**
* 用户id
*/
private Long approveUserId;
/**
* 用户
*/
private String approveUserName;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.server.domain.bo; package org.dromara.server.domain.bo;
import org.dromara.server.domain.ProcessApprove;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.server.domain.ProcessApprove;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* 出差申请审批业务对象 process_approve * 出差申请审批业务对象 process_approve
...@@ -80,7 +81,7 @@ public class ProcessApproveBo extends BaseEntity { ...@@ -80,7 +81,7 @@ public class ProcessApproveBo extends BaseEntity {
* 是否通过 * 是否通过
*/ */
@NotNull(message = "是否通过不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "是否通过不能为空", groups = { AddGroup.class, EditGroup.class })
private Long pass; private Boolean pass;
} }
package org.dromara.server.domain.bo;
import lombok.experimental.Accessors;
import org.dromara.server.domain.ProcessProgress;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 流程进度业务对象 process_progress
*
* @author hzh
* @date 2024-12-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@AutoMapper(target = ProcessProgress.class, reverseConvertGenerate = false)
public class ProcessProgressBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 流程定义key
*/
@NotBlank(message = "流程定义key不能为空", groups = { AddGroup.class, EditGroup.class })
private String processKey;
/**
* 流程名称
*/
@NotBlank(message = "流程名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String processName;
/**
* 流程步骤key
*/
@NotBlank(message = "流程步骤key不能为空", groups = { AddGroup.class, EditGroup.class })
private String processStepKey;
/**
* 流程步骤
*/
@NotBlank(message = "流程步骤不能为空", groups = { AddGroup.class, EditGroup.class })
private String processStepName;
/**
* 审批类型
*/
@NotBlank(message = "审批类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String approveType;
/**
* 关联id
*/
@NotNull(message = "关联id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long relatedId;
/**
* 用户id
*/
@NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long approveUserId;
/**
* 用户
*/
@NotBlank(message = "用户不能为空", groups = { AddGroup.class, EditGroup.class })
private String approveUserName;
}
package org.dromara.server.domain.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 审批配置
* @author hzh
* @date 2024-12-11
**/
@Data
@Accessors(chain = true)
public class Process implements Serializable {
/**
* 步骤名称
*/
private String stepName;
/**
* 步骤key值(唯一值)
*/
private String stepKey;
/**
* 步骤类型
*/
private String stepType;
/**
* 审批类型
*/
private String approveType;
/**
* 审批人
*/
private List<Long> operatorList;
}
package org.dromara.server.domain.vo; package org.dromara.server.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.server.domain.ProcessApprove;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.server.domain.ProcessApprove;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
...@@ -88,7 +84,7 @@ public class ProcessApproveVo implements Serializable { ...@@ -88,7 +84,7 @@ public class ProcessApproveVo implements Serializable {
* 是否通过 * 是否通过
*/ */
@ExcelProperty(value = "是否通过") @ExcelProperty(value = "是否通过")
private Long pass; private Boolean pass;
} }
package org.dromara.server.domain.vo;
import org.dromara.server.domain.ProcessProgress;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 流程进度视图对象 process_progress
*
* @author hzh
* @date 2024-12-11
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ProcessProgress.class)
public class ProcessProgressVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 流程定义key
*/
@ExcelProperty(value = "流程定义key")
private String processKey;
/**
* 流程名称
*/
@ExcelProperty(value = "流程名称")
private String processName;
/**
* 流程步骤key
*/
@ExcelProperty(value = "流程步骤key")
private String processStepKey;
/**
* 流程步骤
*/
@ExcelProperty(value = "流程步骤")
private String processStepName;
/**
* 审批类型
*/
@ExcelProperty(value = "审批类型")
private String approveType;
/**
* 关联id
*/
@ExcelProperty(value = "关联id")
private Long relatedId;
/**
* 用户id
*/
@ExcelProperty(value = "用户id")
private Long approveUserId;
/**
* 用户
*/
@ExcelProperty(value = "用户")
private String approveUserName;
}
package org.dromara.server.mapper;
import org.dromara.server.domain.ProcessProgress;
import org.dromara.server.domain.vo.ProcessProgressVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 流程进度Mapper接口
*
* @author hzh
* @date 2024-12-11
*/
public interface ProcessProgressMapper extends BaseMapperPlus<ProcessProgress, ProcessProgressVo> {
}
package org.dromara.server.service;
import org.dromara.common.mybatis.service.IBaseService;
import org.dromara.server.constant.ProcessApproveStatus;
import org.dromara.server.domain.ProcessProgress;
import org.dromara.server.domain.bo.ProcessApproveBo;
import org.dromara.server.domain.bo.ProcessProgressBo;
import org.dromara.server.domain.vo.ProcessProgressVo;
import java.util.List;
/**
* 流程进度Service接口
*
* @author hzh
* @date 2024-12-11
*/
public interface IProcessProgressService extends IBaseService<ProcessProgressVo, ProcessProgressBo, ProcessProgress> {
/**
* 设置审批人集合
*
* @param processKey 流程key
* @param relatedId 关联id
* @return 下一个审批人列表
*/
void setNextApproveUserList(String processKey, Long relatedId);
/**
* 审批
*
* @param bo bo
* @return 是否成功
*/
boolean approve(ProcessApproveBo bo);
/**
* 获取审批状态
*
* @param processKey 流程key
* @param relatedId 关联id
* @return 审批状态
*/
ProcessApproveStatus getApproveStatus(String processKey, Long relatedId);
/**
* 获取审批人列表
*
* @param processKey 流程key
* @return 审批人列表
*/
List<Long> getApproveUserList(String processKey);
/**
* 获取当前审批人列表
*
* @param processKey 审批key
* @param relatedIds 关联id
* @return 当前审批人列表
*/
List<List<Long>> getCurrentApproveUserList(String processKey, List<Long> relatedIds);
}
...@@ -47,5 +47,4 @@ public class ProcessApproveServiceImpl extends AbstractBaseService<ProcessApprov ...@@ -47,5 +47,4 @@ public class ProcessApproveServiceImpl extends AbstractBaseService<ProcessApprov
lqw.eq(bo.getPass() != null, ProcessApprove::getPass, bo.getPass()); lqw.eq(bo.getPass() != null, ProcessApprove::getPass, bo.getPass());
return lqw; return lqw;
} }
} }
package org.dromara.server.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.server.constant.ProcessApproveStatus;
import org.dromara.server.constant.ProcessStepApprove;
import org.dromara.server.constant.ProcessStepType;
import org.dromara.server.domain.ProcessApprove;
import org.dromara.server.domain.ProcessConfig;
import org.dromara.server.domain.ProcessProgress;
import org.dromara.server.domain.bo.ProcessApproveBo;
import org.dromara.server.domain.bo.ProcessProgressBo;
import org.dromara.server.domain.vo.Process;
import org.dromara.server.domain.vo.ProcessProgressVo;
import org.dromara.server.mapper.ProcessApproveMapper;
import org.dromara.server.mapper.ProcessConfigMapper;
import org.dromara.server.mapper.ProcessProgressMapper;
import org.dromara.server.service.IProcessProgressService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 流程进度Service业务层处理
*
* @author hzh
* @date 2024-12-11
*/
@RequiredArgsConstructor
@Service
public class ProcessProgressServiceImpl extends AbstractBaseService<ProcessProgressVo, ProcessProgressBo, ProcessProgress> implements IProcessProgressService {
private final ProcessProgressMapper baseMapper;
private final ProcessConfigMapper processConfigMapper;
private final ProcessApproveMapper processApproveMapper;
@Override
public BaseMapperPlus<ProcessProgress, ProcessProgressVo> mapper() {
return baseMapper;
}
@Override
public LambdaQueryWrapper<ProcessProgress> buildQueryWrapper(ProcessProgressBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ProcessProgress> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getProcessKey()), ProcessProgress::getProcessKey, bo.getProcessKey());
lqw.like(StringUtils.isNotBlank(bo.getProcessName()), ProcessProgress::getProcessName, bo.getProcessName());
lqw.eq(StringUtils.isNotBlank(bo.getProcessStepKey()), ProcessProgress::getProcessStepKey, bo.getProcessStepKey());
lqw.like(StringUtils.isNotBlank(bo.getProcessStepName()), ProcessProgress::getProcessStepName, bo.getProcessStepName());
lqw.eq(StringUtils.isNotBlank(bo.getApproveType()), ProcessProgress::getApproveType, bo.getApproveType());
lqw.eq(bo.getRelatedId() != null, ProcessProgress::getRelatedId, bo.getRelatedId());
lqw.eq(bo.getApproveUserId() != null, ProcessProgress::getApproveUserId, bo.getApproveUserId());
lqw.like(StringUtils.isNotBlank(bo.getApproveUserName()), ProcessProgress::getApproveUserName, bo.getApproveUserName());
return lqw;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void setNextApproveUserList(String processKey, Long relatedId) {
ProcessConfig pc = processConfigMapper.selectOne(
new LambdaQueryWrapper<>(ProcessConfig.class)
.eq(ProcessConfig::getProcessKey, processKey)
);
String process = pc.getProcess();
if (StringUtils.isEmpty(process)) {
return;
}
//获取审批配置
List<Process> processList = JSON.parseArray(process, Process.class);
//获取审批步骤
List<Process> approveProcessList = StreamUtils.filter(processList, p -> StringUtils.equals(p.getStepType(), ProcessStepType.APPROVE.name()));
//获取审批进度
List<ProcessProgress> progressList = baseMapper.selectList(
new LambdaQueryWrapper<>(ProcessProgress.class)
.eq(ProcessProgress::getRelatedId, relatedId)
.eq(ProcessProgress::getProcessKey, processKey)
);
if (CollectionUtil.isEmpty(progressList)) {
//获取已审批的记录
List<ProcessApprove> approveList = processApproveMapper.selectList(
new LambdaQueryWrapper<>(ProcessApprove.class)
.eq(ProcessApprove::getRelatedId, relatedId)
.eq(ProcessApprove::getProcessConfigKey, processKey)
.orderByDesc(ProcessApprove::getId));
String lastProcessStepKey = "";
if (CollectionUtils.isNotEmpty(approveList)) {
//获取最后一条审批记录
lastProcessStepKey = approveList.get(0).getProcessStepKey();
}
List<String> stepKeyList = StreamUtils.toList(approveProcessList, Process::getStepKey);
Process nextProcess = null;
if (StringUtils.isEmpty(lastProcessStepKey)) {
nextProcess = approveProcessList.get(0);
} else {
int i = stepKeyList.indexOf(lastProcessStepKey);
if (i < stepKeyList.size() - 1) {
nextProcess = approveProcessList.get(i + 1);
}
}
if (nextProcess != null) {
//设置审批进度
List<Long> userList = nextProcess.getOperatorList();
Process finalNextProcess = nextProcess;
List<ProcessProgress> ppList = userList.stream()
.map(userId -> {
return new ProcessProgress()
.setProcessKey(pc.getProcessKey())
.setProcessName(pc.getProcessName())
.setProcessStepKey(finalNextProcess.getStepKey())
.setProcessStepName(finalNextProcess.getStepName())
.setRelatedId(relatedId)
.setApproveUserId(userId)
.setApproveType(finalNextProcess.getApproveType());
}).collect(Collectors.toList());
baseMapper.insertBatch(ppList);
}
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean approve(ProcessApproveBo bo) {
Long userId = LoginHelper.getUserId();
List<ProcessProgress> progressList = baseMapper.selectList(
new LambdaQueryWrapper<>(ProcessProgress.class)
.eq(ProcessProgress::getProcessKey, bo.getProcessConfigKey())
.eq(ProcessProgress::getRelatedId, bo.getRelatedId())
);
ProcessProgress progress = StreamUtils.findFirst(progressList, p -> Objects.equals(p.getApproveUserId(), userId));
if (Objects.isNull(progress)) {
throw new RuntimeException("您没有审批权限!");
}
//新增审批记录
bo.setProcessStepKey(progress.getProcessStepKey());
bo.setProcessStepName(progress.getProcessStepName());
bo.setApproveUserId(userId);
bo.setApproveName(LoginHelper.getUsername());
bo.setApproveTime(new Date());
processApproveMapper.insert(BeanUtil.copyProperties(bo, ProcessApprove.class));
if (bo.getPass()) {
//判断是否是或签
if (StringUtils.equals(progress.getApproveType(), ProcessStepApprove.OR.name())) {
baseMapper.deleteByIds(StreamUtils.toList(progressList, ProcessProgress::getId));
} else {
baseMapper.deleteById(progress.getId());
}
//重新查询审批精度
progressList = baseMapper.selectList(
new LambdaQueryWrapper<>(ProcessProgress.class)
.eq(ProcessProgress::getProcessKey, bo.getProcessConfigKey())
.eq(ProcessProgress::getRelatedId, bo.getRelatedId())
);
if (CollectionUtils.isEmpty(progressList)) {
setNextApproveUserList(bo.getProcessConfigKey(), bo.getRelatedId());
}
} else {
baseMapper.deleteByIds(StreamUtils.toList(progressList, ProcessProgress::getId));
}
return true;
}
@Override
public ProcessApproveStatus getApproveStatus(String processKey, Long relatedId) {
List<ProcessProgress> progressList = baseMapper.selectList(
new LambdaQueryWrapper<>(ProcessProgress.class)
.eq(ProcessProgress::getProcessKey, processKey)
.eq(ProcessProgress::getRelatedId, relatedId)
);
if (CollectionUtils.isEmpty(progressList)) {
List<ProcessApprove> approveList = processApproveMapper.selectList(
new LambdaQueryWrapper<>(ProcessApprove.class)
.eq(ProcessApprove::getRelatedId, relatedId)
.eq(ProcessApprove::getProcessConfigKey, processKey)
.orderByDesc(ProcessApprove::getId));
if (CollectionUtils.isEmpty(approveList)) {
return ProcessApproveStatus.END;
} else {
ProcessApprove pa = approveList.get(0);
return pa.getPass() ? ProcessApproveStatus.END : ProcessApproveStatus.REJECT;
}
} else {
return ProcessApproveStatus.APPROVEIND;
}
}
@Override
public List<Long> getApproveUserList(String processKey) {
ProcessConfig pc = processConfigMapper.selectOne(
new LambdaQueryWrapper<>(ProcessConfig.class)
.eq(ProcessConfig::getProcessKey, processKey)
);
String process = pc.getProcess();
if (StringUtils.isEmpty(process)) {
return List.of();
} else {
//获取审批配置
List<Process> processList = JSON.parseArray(process, Process.class);
List<Process> approveProcessList = StreamUtils.filter(processList, p -> StringUtils.equals(p.getStepType(), ProcessStepType.APPROVE.name()));
return approveProcessList.stream().flatMap(p -> p.getOperatorList().stream()).collect(Collectors.toList());
}
}
@Override
public List<List<Long>> getCurrentApproveUserList(String processKey, List<Long> relatedIds) {
if (StringUtils.isEmpty(processKey)) {
throw new RuntimeException("流程配置不存在!");
}
if (CollectionUtils.isEmpty(relatedIds)) {
return List.of();
}
List<ProcessProgress> progressList = baseMapper.selectList(
new LambdaQueryWrapper<>(ProcessProgress.class)
.eq(ProcessProgress::getProcessKey, processKey)
.in(ProcessProgress::getRelatedId, relatedIds));
return StreamUtils.toList(relatedIds, relatedId ->
progressList.stream().filter(p -> Objects.equals(p.getRelatedId(), relatedId)).map(ProcessProgress::getApproveUserId).collect(Collectors.toList())
);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.server.mapper.ProcessProgressMapper">
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论