|
@@ -0,0 +1,486 @@
|
|
|
+package cn.iocoder.yudao.module.bpm.service.oa.universal;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
|
|
|
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalRespVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalSaveReqVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.universal.OaUniversalDO;
|
|
|
+import cn.iocoder.yudao.module.bpm.dal.mysql.oa.universal.OaUniversalMapper;
|
|
|
+import cn.iocoder.yudao.module.bpm.enums.DictDataConstants;
|
|
|
+import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
|
|
|
+import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
|
|
|
+import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
|
|
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
|
|
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
|
|
|
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.flowable.engine.TaskService;
|
|
|
+import org.flowable.task.api.Task;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
+import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_UNIVERSAL_NOT_EXISTS;
|
|
|
+
|
|
|
+
|
|
|
+ * 通用事项审批流程信息 Service 实现类
|
|
|
+ *
|
|
|
+ * @author dp
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Validated
|
|
|
+public class OaUniversalServiceImpl implements OaUniversalService {
|
|
|
+
|
|
|
+
|
|
|
+ * OA 合同续签对应的流程定义 KEY
|
|
|
+ */
|
|
|
+ public static final String PROCESS_KEY = "oa_universal";
|
|
|
+
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OaUniversalMapper oaUniversalMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BpmProcessInstanceApi processInstanceApi;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BpmTaskService bpmTaskService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TaskService taskService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private FileApi fileApi;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DeptApi deptApi;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long stagingOaUniversal(OaUniversalSaveReqVO stagingReqVO) {
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
+ Objects.requireNonNull(loginUser, "登录用户不能为空");
|
|
|
+
|
|
|
+
|
|
|
+ OaUniversalDO oaUniversal = BeanUtils.toBean(stagingReqVO, OaUniversalDO.class);
|
|
|
+ if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
|
|
|
+
|
|
|
+ String uuid = IdUtil.fastSimpleUUID();
|
|
|
+ oaUniversal.setUniversalId(uuid);
|
|
|
+ }
|
|
|
+ oaUniversal.setEmployeeId(loginUser.getId());
|
|
|
+ oaUniversal.setEmployeeName(loginUser.getNickname());
|
|
|
+ oaUniversal.setEmployeePhone(loginUser.getMobile());
|
|
|
+ oaUniversal.setDeptId(loginUser.getDeptId());
|
|
|
+ oaUniversal.setPosition("员工职位");
|
|
|
+ oaUniversal.setUserId(loginUser.getId());
|
|
|
+ oaUniversal.setUserPhone(loginUser.getMobile());
|
|
|
+ oaUniversal.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
|
|
|
+ oaUniversal.setInfoSource("0");
|
|
|
+
|
|
|
+ if (oaUniversal.getId() == null) {
|
|
|
+ oaUniversalMapper.insert(oaUniversal);
|
|
|
+ } else {
|
|
|
+ oaUniversalMapper.updateById(oaUniversal);
|
|
|
+ }
|
|
|
+
|
|
|
+ saveFileList(stagingReqVO.getFileIdList(), oaUniversal.getUniversalId());
|
|
|
+
|
|
|
+ return oaUniversal.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long commitOaUniversal(OaUniversalSaveReqVO commitReqVO) {
|
|
|
+ if (CollectionUtil.isEmpty(commitReqVO.getStartUserSelectAssignees())) {
|
|
|
+ throw exception(ErrorCodeConstants.TASK_CREATE_FAIL_NO_START_SELECT_ASSIGNEE);
|
|
|
+ }
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
+ Objects.requireNonNull(loginUser, "登录用户不能为空");
|
|
|
+
|
|
|
+
|
|
|
+ OaUniversalDO oaUniversal = BeanUtils.toBean(commitReqVO, OaUniversalDO.class);
|
|
|
+ if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
|
|
|
+
|
|
|
+ String uuid = IdUtil.fastSimpleUUID();
|
|
|
+ oaUniversal.setUniversalId(uuid);
|
|
|
+ }
|
|
|
+ oaUniversal.setEmployeeId(loginUser.getId());
|
|
|
+ oaUniversal.setEmployeeName(loginUser.getNickname());
|
|
|
+ oaUniversal.setEmployeePhone(loginUser.getMobile());
|
|
|
+ oaUniversal.setDeptId(loginUser.getDeptId());
|
|
|
+ oaUniversal.setPosition("员工职位");
|
|
|
+ oaUniversal.setUserId(loginUser.getId());
|
|
|
+ oaUniversal.setUserPhone(loginUser.getMobile());
|
|
|
+ oaUniversal.setInfoSource("0");
|
|
|
+
|
|
|
+ if (oaUniversal.getId() == null) {
|
|
|
+ oaUniversalMapper.insert(oaUniversal);
|
|
|
+ } else {
|
|
|
+ oaUniversalMapper.updateById(oaUniversal);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> processInstanceVariables = new HashMap<>();
|
|
|
+ processInstanceVariables.put("auditPass", "true");
|
|
|
+
|
|
|
+ Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
|
|
|
+ List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
|
|
|
+ startUserSelectAssignees.put("approver", selectAssignees);
|
|
|
+ String processInstanceId = processInstanceApi
|
|
|
+ .createProcessInstance(loginUser.getId(),
|
|
|
+ new BpmProcessInstanceCreateReqDTO()
|
|
|
+ .setProcessDefinitionKey(PROCESS_KEY)
|
|
|
+ .setVariables(processInstanceVariables)
|
|
|
+ .setBusinessKey(String.valueOf(oaUniversal.getId()))
|
|
|
+ .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
+
|
|
|
+
|
|
|
+ Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
|
|
|
+
|
|
|
+
|
|
|
+ BpmTaskApproveReqVO agreeReqVO = new BpmTaskApproveReqVO();
|
|
|
+ agreeReqVO.setId(task.getId());
|
|
|
+ agreeReqVO.setReason("[首次提交]");
|
|
|
+ taskService.setVariable(task.getId(), "auditPass", "true");
|
|
|
+ bpmTaskService.approveTask(loginUserId, agreeReqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
|
|
|
+ if (nextTask == null) {
|
|
|
+ throw exception(ErrorCodeConstants.TASK_CREATE_FAIL_NO_START_SELECT_ASSIGNEE);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ oaUniversalMapper.updateById(new OaUniversalDO()
|
|
|
+ .setId(oaUniversal.getId())
|
|
|
+ .setProcInstId(processInstanceId)
|
|
|
+ .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
+ .setCurrentAuditEmployeeId(Long.valueOf(nextTask.getAssignee()))
|
|
|
+ .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
|
|
|
+
|
|
|
+ saveFileList(commitReqVO.getFileIdList(), oaUniversal.getUniversalId());
|
|
|
+
|
|
|
+ return oaUniversal.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long agreeOaUniversal(BpmTaskApproveReqVO agreeReqVO) {
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+
|
|
|
+
|
|
|
+ Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
|
|
|
+ if (currentTask == null) {
|
|
|
+ throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<OaUniversalDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ OaUniversalDO oaUniversal = oaUniversalMapper.selectOne(lambdaQueryWrapper);
|
|
|
+
|
|
|
+ String reason = "[同意]";
|
|
|
+ if (StrUtil.isNotBlank(agreeReqVO.getReason())) {
|
|
|
+ reason = reason + agreeReqVO.getReason();
|
|
|
+ }
|
|
|
+ agreeReqVO.setReason(reason);
|
|
|
+ taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
|
|
|
+ bpmTaskService.approveTask(loginUserId, agreeReqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+ OaUniversalDO oaUniversalDO = new OaUniversalDO();
|
|
|
+ if (nextTask != null) {
|
|
|
+ oaUniversalDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
|
|
|
+ .setCurrentAuditEmployeeId(Long.valueOf(nextTask.getAssignee()))
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
+ .setId(oaUniversal.getId());
|
|
|
+
|
|
|
+ } else {
|
|
|
+ oaUniversalDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITED)
|
|
|
+ .setCurrentAuditEmployeeId(null)
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
+ .setId(oaUniversal.getId());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ oaUniversalMapper.updateById(oaUniversalDO);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return 1L;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long disagreeOaUniversal(BpmTaskReturnReqVO disagreeReqVO) {
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+
|
|
|
+
|
|
|
+ Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
|
|
|
+
|
|
|
+ disagreeReqVO.setTargetTaskDefinitionKey("modifyApply");
|
|
|
+ disagreeReqVO.setReason("[驳回]" + disagreeReqVO.getReason());
|
|
|
+ taskService.setVariable(disagreeReqVO.getId(), "auditPass", "false");
|
|
|
+ bpmTaskService.returnTask(loginUserId, disagreeReqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+
|
|
|
+
|
|
|
+ LambdaUpdateWrapper<OaUniversalDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.set(OaUniversalDO::getCurrentAuditEmployeeId, nextTask.getAssignee())
|
|
|
+ .set(OaUniversalDO::getFinalAuditDate, LocalDateTime.now())
|
|
|
+ .set(OaUniversalDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
|
|
|
+ .eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ oaUniversalMapper.update(updateWrapper);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return 1L;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long revocationOaUniversal(BpmTaskApproveReqVO revocationReqVO) {
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+
|
|
|
+
|
|
|
+ Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
|
|
|
+ if (currentTask == null) {
|
|
|
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<OaUniversalDO> lambdaQueryWrapper = new LambdaQueryWrapper<OaUniversalDO>()
|
|
|
+ .eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ OaUniversalDO oaUniversalDO = oaUniversalMapper.selectOne(lambdaQueryWrapper);
|
|
|
+ if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaUniversalDO.getAuditStatus())
|
|
|
+ || !Objects.equals(String.valueOf(loginUserId), oaUniversalDO.getCreator())) {
|
|
|
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NO_ALLOWED);
|
|
|
+ }
|
|
|
+
|
|
|
+ BpmTaskReturnReqVO returnReqVO = BeanUtils.toBean(revocationReqVO, BpmTaskReturnReqVO.class);
|
|
|
+ returnReqVO.setTargetTaskDefinitionKey("modifyApply");
|
|
|
+ String reason = "[撤回]";
|
|
|
+ if (StrUtil.isNotBlank(returnReqVO.getReason())) {
|
|
|
+ reason = reason + returnReqVO.getReason();
|
|
|
+ }
|
|
|
+ returnReqVO.setReason(reason);
|
|
|
+ bpmTaskService.revocationTask(loginUserId, returnReqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+
|
|
|
+
|
|
|
+ LambdaUpdateWrapper<OaUniversalDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.set(OaUniversalDO::getCurrentAuditEmployeeId, nextTask.getAssignee())
|
|
|
+ .set(OaUniversalDO::getFinalAuditDate, LocalDateTime.now())
|
|
|
+ .set(OaUniversalDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
|
|
|
+ .eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ oaUniversalMapper.update(updateWrapper);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return 1L;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long reCommitOaUniversal(OaUniversalSaveReqVO reCommitReqVO) {
|
|
|
+ if (reCommitReqVO.getId() == null) {
|
|
|
+ throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+
|
|
|
+
|
|
|
+ OaUniversalDO oaUniversalNew = BeanUtils.toBean(reCommitReqVO, OaUniversalDO.class);
|
|
|
+ OaUniversalDO oaUniversalOld = oaUniversalMapper.selectById(oaUniversalNew.getId());
|
|
|
+ oaUniversalNew.setUniversalId(oaUniversalOld.getUniversalId())
|
|
|
+ .setProcInstId(oaUniversalOld.getProcInstId());
|
|
|
+
|
|
|
+ Task currentTask = taskService.createTaskQuery().processInstanceId(oaUniversalNew.getProcInstId()).singleResult();
|
|
|
+ BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
|
|
|
+ approveReqVO.setId(currentTask.getId())
|
|
|
+ .setReason("[再次提交]");
|
|
|
+ if (CollectionUtil.isNotEmpty(reCommitReqVO.getStartUserSelectAssignees())) {
|
|
|
+
|
|
|
+ Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
|
|
|
+ List<Long> selectAssignees = reCommitReqVO.getStartUserSelectAssignees();
|
|
|
+ startUserSelectAssignees.put("approver", selectAssignees);
|
|
|
+ taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, startUserSelectAssignees);
|
|
|
+
|
|
|
+ oaUniversalNew.setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+ taskService.setVariable(currentTask.getId(), "auditPass", "true");
|
|
|
+
|
|
|
+ bpmTaskService.approveTask(loginUserId, approveReqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+ oaUniversalNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
|
|
|
+ .setCurrentAuditEmployeeId(Long.valueOf(nextTask.getAssignee()))
|
|
|
+ .setFinalAuditDate(LocalDateTime.now());
|
|
|
+ oaUniversalMapper.updateById(oaUniversalNew);
|
|
|
+
|
|
|
+
|
|
|
+ saveFileList(reCommitReqVO.getFileIdList(), oaUniversalNew.getUniversalId());
|
|
|
+
|
|
|
+ return 1L;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public Long closeOaUniversal(OaUniversalSaveReqVO closeReqVO) {
|
|
|
+ if (closeReqVO.getId() == null) {
|
|
|
+ throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+
|
|
|
+
|
|
|
+ OaUniversalDO oaUniversalNew = BeanUtils.toBean(closeReqVO, OaUniversalDO.class);
|
|
|
+ OaUniversalDO oaUniversalOld = oaUniversalMapper.selectById(oaUniversalNew.getId());
|
|
|
+
|
|
|
+ Task currentTask = taskService.createTaskQuery().processInstanceId(oaUniversalOld.getProcInstId()).singleResult();
|
|
|
+ BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
|
|
|
+ approveReqVO.setId(currentTask.getId())
|
|
|
+ .setReason("[关闭]");
|
|
|
+ taskService.setVariable(currentTask.getId(), "auditPass", "false");
|
|
|
+
|
|
|
+ bpmTaskService.approveTask(loginUserId, approveReqVO);
|
|
|
+
|
|
|
+ oaUniversalOld.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_CLOSED)
|
|
|
+ .setCurrentAuditEmployeeId(-1L)
|
|
|
+ .setFinalAuditDate(LocalDateTime.now());
|
|
|
+ oaUniversalMapper.updateById(oaUniversalOld);
|
|
|
+
|
|
|
+ return 1L;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteOaUniversal(Long id) {
|
|
|
+
|
|
|
+ validateOaUniversalExists(id);
|
|
|
+
|
|
|
+ oaUniversalMapper.deleteById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public OaUniversalRespVO getOaUniversal(Long id) {
|
|
|
+ OaUniversalDO oaUniversalDO = oaUniversalMapper.selectById(id);
|
|
|
+ OaUniversalRespVO oaUniversalRespVO = BeanUtils.toBean(oaUniversalDO, OaUniversalRespVO.class);
|
|
|
+
|
|
|
+
|
|
|
+ List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaUniversalDO.getUniversalId());
|
|
|
+ oaUniversalRespVO.setFileList(fileList);
|
|
|
+
|
|
|
+
|
|
|
+ if (StrUtil.isNotBlank(oaUniversalDO.getProcInstId())) {
|
|
|
+ List<BpmTaskRespVO> auditRecordList = bpmTaskService.getAuditRecordListByProcessInstanceId(oaUniversalDO.getProcInstId());
|
|
|
+ oaUniversalRespVO.setAuditRecordList(auditRecordList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String startUserSelectAssignees = oaUniversalDO.getStartUserSelectAssignees();
|
|
|
+ if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
|
|
|
+ List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
|
|
|
+ .map(Long::valueOf).collect(Collectors.toList());
|
|
|
+ List<AdminUserRespDTO> userList = adminUserApi.getUserList(userIdList);
|
|
|
+ List<AdminUserRespDTO> auditUserList = new ArrayList<>();
|
|
|
+ for (Long userId : userIdList) {
|
|
|
+ for (AdminUserRespDTO adminUserRespDTO : userList) {
|
|
|
+ if (Objects.equals(userId, adminUserRespDTO.getId())) {
|
|
|
+ auditUserList.add(adminUserRespDTO);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ oaUniversalRespVO.setAuditUserList(auditUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return oaUniversalRespVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageResult<OaUniversalRespVO> getOaUniversalPage(OaUniversalPageReqVO pageReqVO) {
|
|
|
+ PageResult<OaUniversalDO> oaUniversalDOPageResult = oaUniversalMapper.selectPage(pageReqVO);
|
|
|
+ PageResult<OaUniversalRespVO> oaUniversalRespVOPageResult = BeanUtils.toBean(oaUniversalDOPageResult, OaUniversalRespVO.class);
|
|
|
+
|
|
|
+ List<OaUniversalRespVO> oaUniversalRespVOList = oaUniversalRespVOPageResult.getList();
|
|
|
+ if (CollectionUtil.isNotEmpty(oaUniversalRespVOList)) {
|
|
|
+ List<Long> employeeIdList = oaUniversalRespVOList.stream().map(OaUniversalRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
|
|
|
+ List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
|
|
|
+ for (OaUniversalRespVO respVO : oaUniversalRespVOList) {
|
|
|
+ for (AdminUserRespDTO employee : employeeList) {
|
|
|
+ if (respVO.getCurrentAuditEmployeeId() == employee.getId()) {
|
|
|
+ respVO.setCurrentAuditEmployeeName(employee.getNickname());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> deptIdList = oaUniversalRespVOList.stream().map(OaUniversalRespVO::getDeptId).collect(Collectors.toList());
|
|
|
+ List<DeptRespDTO> deptList = deptApi.getDeptList(deptIdList);
|
|
|
+ for (OaUniversalRespVO respVO : oaUniversalRespVOList) {
|
|
|
+ for (DeptRespDTO dept : deptList) {
|
|
|
+ if (respVO.getDeptId() == dept.getId()) {
|
|
|
+ respVO.setDeptName(dept.getName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return oaUniversalRespVOPageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageResult<OaUniversalRespVO> exportOaUniversalExcel(OaUniversalPageReqVO pageReqVO) {
|
|
|
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
+ return getOaUniversalPage(pageReqVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validateOaUniversalExists(Long id) {
|
|
|
+ if (oaUniversalMapper.selectById(id) == null) {
|
|
|
+ throw exception(OA_UNIVERSAL_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 保存业务uuid到附件中
|
|
|
+ */
|
|
|
+ private void saveFileList(List<Long> fileIdList, String serviceId) {
|
|
|
+ if (CollectionUtil.isNotEmpty(fileIdList) && StrUtil.isNotEmpty(serviceId)) {
|
|
|
+ fileApi.updateFileBiz(fileIdList, serviceId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|