package com.ycl.service.impl;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.common.base.Result;
|
import com.ycl.common.core.domain.entity.SysDept;
|
import com.ycl.common.core.domain.entity.SysRole;
|
import com.ycl.common.core.domain.entity.SysUser;
|
import com.ycl.common.enums.business.HandlerTypeEnum;
|
import com.ycl.common.enums.business.ProcessLogEventTypeEnum;
|
import com.ycl.domain.entity.ProcessLog;
|
import com.ycl.domain.json.DelegateData;
|
import com.ycl.domain.json.JumpData;
|
import com.ycl.domain.json.RejectData;
|
import com.ycl.domain.json.SuperviseData;
|
import com.ycl.domain.query.ProcessLogQuery;
|
import com.ycl.domain.vo.ProcessLogVO;
|
import com.ycl.framework.utils.PageUtil;
|
import com.ycl.mapper.ProcessLogMapper;
|
import com.ycl.service.ProcessLogService;
|
import com.ycl.system.service.ISysDeptService;
|
import com.ycl.system.service.ISysRoleService;
|
import com.ycl.system.service.ISysUserService;
|
import lombok.RequiredArgsConstructor;
|
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.Assert;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* 流程日志 服务实现类
|
*
|
* @author xp
|
* @since 2025-01-02
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class ProcessLogServiceImpl extends ServiceImpl<ProcessLogMapper, ProcessLog> implements ProcessLogService {
|
|
private final ProcessLogMapper processLogMapper;
|
private final ISysUserService userService;
|
private final ISysDeptService deptService;
|
private final ISysRoleService roleService;
|
|
/**
|
* 添加日志
|
* @param taskId 任务id
|
* @param flowInsId 流程实例id
|
* @param eventType 事件类型
|
* @param projectId 项目id
|
* @param eventDataJson json扩展内容
|
*/
|
@Override
|
public void add(String taskId, String flowInsId, ProcessLogEventTypeEnum eventType, Long projectId, String eventDataJson) {
|
ProcessLog log = new ProcessLog();
|
log.setTaskId(taskId);
|
log.setProcessInsId(flowInsId);
|
log.setProjectId(projectId);
|
log.setEventType(eventType);
|
log.setEventDataJson(eventDataJson);
|
baseMapper.insert(log);
|
}
|
|
/**
|
* 批量删除
|
* @param ids
|
* @return
|
*/
|
@Override
|
public Result remove(List<String> ids) {
|
baseMapper.deleteBatchIds(ids);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* id删除
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result removeById(String id) {
|
baseMapper.deleteById(id);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* 分页查询
|
* @param query
|
* @return
|
*/
|
@Override
|
public Result page(ProcessLogQuery query) {
|
IPage<ProcessLogVO> page = PageUtil.getPage(query, ProcessLogVO.class);
|
baseMapper.getPage(page, query);
|
return Result.ok().data(page.getRecords()).total(page.getTotal());
|
}
|
|
/**
|
* 根据id查找
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result detail(Long id) {
|
ProcessLogVO vo = baseMapper.getById(id);
|
Assert.notNull(vo, "记录不存在");
|
return Result.ok().data(vo);
|
}
|
|
/**
|
* 列表
|
* @return
|
*/
|
@Override
|
public Result all() {
|
List<ProcessLog> entities = baseMapper.selectList(null);
|
List<ProcessLogVO> vos = entities.stream()
|
.map(entity -> ProcessLogVO.getVoByEntity(entity, null))
|
.collect(Collectors.toList());
|
return Result.ok().data(vos);
|
}
|
|
@Override
|
public Boolean taskDelegation(String processInstanceId, String taskId) {
|
List<ProcessLog> list = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(ProcessLog::getProcessInsId, processInstanceId)
|
.eq(ProcessLog::getTaskId, taskId)
|
.eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.DELEGATE)
|
.list();
|
return CollectionUtils.isNotEmpty(list);
|
}
|
|
@Override
|
public Boolean taskIsHangup(String taskId, String processInsId) {
|
Long num = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(ProcessLog::getProcessInsId, processInsId)
|
.eq(ProcessLog::getTaskId, taskId)
|
.in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP)
|
.count();
|
return num % 2 != 0;
|
}
|
|
@Override
|
public Result projectProcessLogPage(ProcessLogQuery query) {
|
List<ProcessLogVO> list = baseMapper.projectProcessLogPage(query);
|
// json反序列化
|
list.stream().forEach(log -> {
|
if (StringUtils.isNotBlank(log.getEventDataJson())) {
|
if (ProcessLogEventTypeEnum.DELEGATE.equals(log.getEventType())) {
|
DelegateData delegateData = JSON.parseObject(log.getEventDataJson(), DelegateData.class);
|
// 查询转办后的处理人名称
|
List<String> names = new ArrayList<>(2);
|
List<Long> ids = delegateData.getAfterHandlerIds().stream().map(Long::parseLong).collect(Collectors.toList());
|
this.getName(delegateData.getAfterHandlerType(), ids, names);
|
delegateData.setAfterHandlerNames(names);
|
log.setEventDataObj(delegateData);
|
} else if (ProcessLogEventTypeEnum.JUMP.equals(log.getEventType())) {
|
log.setEventDataObj(JSON.parseObject(log.getEventDataJson(), JumpData.class));
|
} else if (ProcessLogEventTypeEnum.REJECT.equals(log.getEventType())) {
|
log.setEventDataObj(JSON.parseObject(log.getEventDataJson(), RejectData.class));
|
} else if (ProcessLogEventTypeEnum.SUPERVISE.equals(log.getEventType())) {
|
SuperviseData superviseData = JSON.parseObject(log.getEventDataJson(), SuperviseData.class);
|
SysUser user = userService.selectUserById(Long.parseLong(superviseData.getSenderId()));
|
if (Objects.nonNull(user)) {
|
superviseData.setSenderName(user.getNickName() + "(" + (Objects.nonNull(user.getDept()) ? user.getDept().getDeptName() : "无部门") + ")");
|
}
|
log.setEventDataObj(superviseData);
|
}
|
}
|
});
|
return Result.ok().data(list);
|
}
|
|
/**
|
* 解析流程日志中的数据-名称
|
*
|
* @param handlerType
|
* @param ids
|
* @param names
|
*/
|
private void getName(HandlerTypeEnum handlerType, List<Long> ids, List<String> names) {
|
if (HandlerTypeEnum.FIX_USER.equals(handlerType)) {
|
SysUser user = userService.selectUserById(ids.get(0));
|
if (Objects.nonNull(user)) {
|
names.add(user.getNickName() + "(" + (Objects.nonNull(user.getDept()) ? user.getDept().getDeptName() : "无部门") + ")");
|
}
|
} else if (HandlerTypeEnum.USER.equals(handlerType)) {
|
List<SysUser> users = userService.selectUserByIds(ids);
|
names = users.stream().map(user -> user.getNickName() + "(" + (Objects.nonNull(user.getDept()) ? user.getDept().getDeptName() : "无部门") + ")").collect(Collectors.toList());
|
} else if (HandlerTypeEnum.DEPT.equals(handlerType)) {
|
List<SysDept> depts = deptService.selectDeptByIds(ids);
|
names = depts.stream().map(SysDept::getDeptName).collect(Collectors.toList());
|
} else if (HandlerTypeEnum.ROLE.equals(handlerType)) {
|
List<SysRole> roles = roleService.selectRoleByIds(ids);
|
names = roles.stream().map(SysRole::getRoleName).collect(Collectors.toList());
|
}
|
}
|
}
|