|
@@ -0,0 +1,780 @@
|
|
|
|
+package cn.iocoder.yudao.module.bpm.service.oa.receive;
|
|
|
|
+
|
|
|
|
+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.receive.vo.OaReceivePageReqVO;
|
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.receive.vo.OaReceiveRespVO;
|
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.receive.vo.OaReceiveSaveReqVO;
|
|
|
|
+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.receive.OaReceiveDO;
|
|
|
|
+import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.receive.OaReceiveObjDO;
|
|
|
|
+import cn.iocoder.yudao.module.bpm.dal.mysql.oa.receive.OaReceiveMapper;
|
|
|
|
+import cn.iocoder.yudao.module.bpm.dal.mysql.oa.receive.OaReceiveObjMapper;
|
|
|
|
+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_RECEIVE_NOT_EXISTS;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 领用流程信息 Service 实现类
|
|
|
|
+ *
|
|
|
|
+ * @author dp
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+@Validated
|
|
|
|
+public class OaReceiveServiceImpl implements OaReceiveService {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 对应的流程定义 KEY
|
|
|
|
+ */
|
|
|
|
+ public static final String PROCESS_KEY = "oa_receive";
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private OaReceiveMapper oaReceiveMapper;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private OaReceiveObjMapper oaReceiveObjMapper;
|
|
|
|
+
|
|
|
|
+ @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 stagingOaReceive(OaReceiveSaveReqVO stagingReqVO) {
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
|
+ Objects.requireNonNull(loginUser, "登录用户不能为空");
|
|
|
|
+ // 人信息
|
|
|
|
+ AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
|
|
|
|
+
|
|
|
|
+ OaReceiveDO oaReceive = BeanUtils.toBean(stagingReqVO, OaReceiveDO.class);
|
|
|
|
+ if (StringUtils.isBlank(oaReceive.getReceiveUuid())) {
|
|
|
|
+ // 创建单据uuid
|
|
|
|
+ String uuid = IdUtil.fastSimpleUUID();
|
|
|
|
+ oaReceive.setReceiveUuid(uuid);
|
|
|
|
+ }
|
|
|
|
+ if (employee != null) {
|
|
|
|
+ oaReceive.setEmployeeId(loginUser.getId());
|
|
|
|
+ oaReceive.setEmployeeName(loginUser.getNickname());
|
|
|
|
+ oaReceive.setEmployeePhone(loginUser.getMobile());
|
|
|
|
+ oaReceive.setDeptId(loginUser.getDeptId());
|
|
|
|
+ oaReceive.setPosition("员工职位");
|
|
|
|
+ oaReceive.setUserId(loginUser.getId());
|
|
|
|
+ }
|
|
|
|
+ oaReceive.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
|
|
|
|
+ oaReceive.setInfoSource("0");
|
|
|
|
+ oaReceive.setApplyEmployeeId(loginUser.getId());
|
|
|
|
+ oaReceive.setApplyEmployeeName(loginUser.getNickname());
|
|
|
|
+ // 暂存不保存审批人信息
|
|
|
|
+ oaReceive.setStartUserSelectAssignees(null);
|
|
|
|
+
|
|
|
|
+ // 保存或更新表单信息
|
|
|
|
+ if (oaReceive.getId() == null) {
|
|
|
|
+ oaReceiveMapper.insert(oaReceive);
|
|
|
|
+ } else {
|
|
|
|
+ validateOaReceiveExists(oaReceive.getId());
|
|
|
|
+ oaReceiveMapper.updateById(oaReceive);
|
|
|
|
+ }
|
|
|
|
+ // 保存子表信息
|
|
|
|
+ List<OaReceiveObjDO> oaReceiveObjs = stagingReqVO.getOaReceiveObjs();
|
|
|
|
+ if (CollectionUtil.isNotEmpty(oaReceiveObjs)) {
|
|
|
|
+ updateOaReceiveObjList(oaReceive.getId(), oaReceiveObjs);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 保存业务uuid到附件中
|
|
|
|
+ saveFileList(stagingReqVO.getFileIdList(), oaReceive.getReceiveUuid());
|
|
|
|
+
|
|
|
|
+ return oaReceive.getId();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long commitOaReceive(OaReceiveSaveReqVO 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);
|
|
|
|
+ if (loginUser == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ // 人信息
|
|
|
|
+ AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
|
|
|
|
+ if (employee == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ OaReceiveDO oaReceive = BeanUtils.toBean(commitReqVO, OaReceiveDO.class);
|
|
|
|
+ if (StringUtils.isBlank(oaReceive.getReceiveUuid())) {
|
|
|
|
+ // 创建单据uuid
|
|
|
|
+ String uuid = IdUtil.fastSimpleUUID();
|
|
|
|
+ oaReceive.setReceiveUuid(uuid);
|
|
|
|
+ }
|
|
|
|
+ oaReceive.setEmployeeId(employee.getId());
|
|
|
|
+ oaReceive.setEmployeeName(employee.getNickname());
|
|
|
|
+ oaReceive.setEmployeePhone(employee.getMobile());
|
|
|
|
+ oaReceive.setDeptId(employee.getDeptId());
|
|
|
|
+ oaReceive.setPosition("员工职位");
|
|
|
|
+ oaReceive.setUserId(loginUser.getId());
|
|
|
|
+ oaReceive.setInfoSource("0");
|
|
|
|
+ oaReceive.setApplyEmployeeId(loginUser.getId());
|
|
|
|
+ oaReceive.setApplyEmployeeName(loginUser.getNickname());
|
|
|
|
+
|
|
|
|
+ // 子表信息
|
|
|
|
+ List<OaReceiveObjDO> oaReceiveObjs = commitReqVO.getOaReceiveObjs();
|
|
|
|
+ for (OaReceiveObjDO oaReceiveObj : oaReceiveObjs) {
|
|
|
|
+ if (StrUtil.isBlank(oaReceiveObj.getName())) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_RECEIVE_OBJ_NAME_BLANK);
|
|
|
|
+ }
|
|
|
|
+ if (oaReceiveObj.getAmount() == null || oaReceiveObj.getAmount() == 0) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_RECEIVE_OBJ_AMOUNT_ZERO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 保存或更新表单信息
|
|
|
|
+ if (oaReceive.getId() == null) {
|
|
|
|
+ oaReceiveMapper.insert(oaReceive);
|
|
|
|
+ } else {
|
|
|
|
+ OaReceiveDO oaReceiveDO = validateOaReceiveExists(oaReceive.getId());
|
|
|
|
+ if (StrUtil.isNotBlank(oaReceiveDO.getProcInstId())) {
|
|
|
|
+ throw exception(ErrorCodeConstants.PROCESS_INSTANCE_CREATE_FAIL_HAS_PROCESS);
|
|
|
|
+ }
|
|
|
|
+ oaReceiveMapper.updateById(oaReceive);
|
|
|
|
+ }
|
|
|
|
+ // 保存子表
|
|
|
|
+ if (CollectionUtil.isNotEmpty(oaReceiveObjs)) {
|
|
|
|
+ updateOaReceiveObjList(oaReceive.getId(), oaReceiveObjs);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 发起流程
|
|
|
|
+ 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(oaReceive.getId()))
|
|
|
|
+ .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
|
+
|
|
|
|
+ //获取下一个审批人
|
|
|
|
+ Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
|
|
|
|
+
|
|
|
|
+ // 审批同意
|
|
|
|
+ BpmTaskApproveReqVO agreeReqVO = new BpmTaskApproveReqVO();
|
|
|
|
+ agreeReqVO.setId(task.getId());
|
|
|
|
+ agreeReqVO.setReason("[首次提交]");
|
|
|
|
+ agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_COMMITTED));
|
|
|
|
+ taskService.setVariable(task.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
|
|
|
|
+ AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
|
|
|
|
+ oaReceiveMapper.updateById(new OaReceiveDO()
|
|
|
|
+ .setId(oaReceive.getId())
|
|
|
|
+ .setProcInstId(processInstanceId)
|
|
|
|
+ .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
|
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
|
+ .setCurrentAuditEmployeeId(currentAuditEmployeeId)
|
|
|
|
+ .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
|
|
|
|
+ .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
|
|
|
|
+ // 保存业务uuid到附件中
|
|
|
|
+ saveFileList(commitReqVO.getFileIdList(), oaReceive.getReceiveUuid());
|
|
|
|
+ // TODO DP 发送提交成功站内信
|
|
|
|
+ return oaReceive.getId();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long agreeOaReceive(BpmTaskApproveReqVO agreeReqVO) {
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
|
+
|
|
|
|
+ Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
|
|
|
|
+ if (currentTask == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ // 先更新为审批中
|
|
|
|
+ taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
|
|
|
|
+ LambdaQueryWrapper<OaReceiveDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ lambdaQueryWrapper.eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
|
+ OaReceiveDO oaReceive = oaReceiveMapper.selectOne(lambdaQueryWrapper);
|
|
|
|
+ // 如果是最后一个人审批同意,设置流程审批状态为已审核
|
|
|
|
+ String[] auditPersons = oaReceive.getStartUserSelectAssignees().split(",");
|
|
|
|
+ String lastAuditPerson = Arrays.stream(auditPersons)
|
|
|
|
+ .reduce((first, second) -> second)
|
|
|
|
+ .orElse(null);
|
|
|
|
+ if (currentTask.getAssignee().equals(lastAuditPerson)) {
|
|
|
|
+ // 更新为已审核(暂时未生效,未找到原因,先不处理)
|
|
|
|
+ taskService.setVariable(agreeReqVO.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITED);
|
|
|
|
+ }
|
|
|
|
+ // 审批同意
|
|
|
|
+ String reason = "[同意]";
|
|
|
|
+ if (StrUtil.isNotBlank(agreeReqVO.getReason())) {
|
|
|
|
+ reason = reason + agreeReqVO.getReason();
|
|
|
|
+ }
|
|
|
|
+ agreeReqVO.setReason(reason);
|
|
|
|
+ agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
|
|
|
|
+ taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
|
|
|
|
+ bpmTaskService.approveTask(loginUserId, agreeReqVO);
|
|
|
|
+
|
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
|
+ OaReceiveDO oaReceiveDO = new OaReceiveDO();
|
|
|
|
+ if (nextTask != null) {
|
|
|
|
+ Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
|
|
|
|
+ AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
|
|
|
|
+
|
|
|
|
+ // 如果审批人重复,实际未结束,再次更新为审核中
|
|
|
|
+ taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
|
|
|
|
+ oaReceiveDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
|
|
|
|
+ .setCurrentAuditEmployeeId(currentAuditEmployeeId)
|
|
|
|
+ .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
|
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
|
+ .setId(oaReceive.getId());
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ oaReceiveDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITED)
|
|
|
|
+ .setCurrentAuditEmployeeId(null)
|
|
|
|
+ .setCurrentAuditEmployeeName(null)
|
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
|
+ .setId(oaReceive.getId());
|
|
|
|
+
|
|
|
|
+ // TODO 复制业务单据信息到业务模块单据表
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ oaReceiveMapper.updateById(oaReceiveDO);
|
|
|
|
+ // 发送通知
|
|
|
|
+
|
|
|
|
+ // 返回
|
|
|
|
+ return 1L;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long disagreeOaReceive(BpmTaskReturnReqVO disagreeReqVO) {
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
|
+
|
|
|
|
+ Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
|
|
|
|
+
|
|
|
|
+ disagreeReqVO.setTargetTaskDefinitionKey("modifyApply");
|
|
|
|
+ disagreeReqVO.setReason("[驳回]" + disagreeReqVO.getReason());
|
|
|
|
+ disagreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RETURNED));
|
|
|
|
+ taskService.setVariable(disagreeReqVO.getId(), "auditPass", "false");
|
|
|
|
+ taskService.setVariable(disagreeReqVO.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RETURNED);
|
|
|
|
+ bpmTaskService.returnTask(loginUserId, disagreeReqVO);
|
|
|
|
+
|
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
|
+ Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
|
|
|
|
+ AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
|
|
|
|
+
|
|
|
|
+ // 更新单据状态,当前处理人,最后处理时间
|
|
|
|
+ LambdaUpdateWrapper<OaReceiveDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
+ updateWrapper.set(OaReceiveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
|
|
|
|
+ .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
|
|
|
|
+ .set(OaReceiveDO::getFinalAuditDate, LocalDateTime.now())
|
|
|
|
+ .set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
|
|
|
|
+ .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
|
+ oaReceiveMapper.update(updateWrapper);
|
|
|
|
+
|
|
|
|
+ // 发送通知
|
|
|
|
+
|
|
|
|
+ return 1L;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long revocationOaReceive(BpmTaskApproveReqVO revocationReqVO) {
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
|
+
|
|
|
|
+ Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
|
|
|
|
+ if (currentTask == null) {
|
|
|
|
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ LambdaQueryWrapper<OaReceiveDO> lambdaQueryWrapper = new LambdaQueryWrapper<OaReceiveDO>()
|
|
|
|
+ .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
|
+ OaReceiveDO oaReceiveDO = oaReceiveMapper.selectOne(lambdaQueryWrapper);
|
|
|
|
+ if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaReceiveDO.getAuditStatus())
|
|
|
|
+ || !Objects.equals(String.valueOf(loginUserId), oaReceiveDO.getCreator())) {
|
|
|
|
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_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);
|
|
|
|
+ returnReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RECALLED));
|
|
|
|
+ taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RECALLED);
|
|
|
|
+ bpmTaskService.revocationTask(loginUserId, returnReqVO);
|
|
|
|
+
|
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
|
+ Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
|
|
|
|
+ AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
|
|
|
|
+
|
|
|
|
+ // 更新单据状态,当前处理人,最后处理时间
|
|
|
|
+ LambdaUpdateWrapper<OaReceiveDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
+ updateWrapper.set(OaReceiveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
|
|
|
|
+ .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
|
|
|
|
+ .set(OaReceiveDO::getFinalAuditDate, LocalDateTime.now())
|
|
|
|
+ .set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
|
|
|
|
+ .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
|
+ oaReceiveMapper.update(updateWrapper);
|
|
|
|
+
|
|
|
|
+ // 发送通知
|
|
|
|
+
|
|
|
|
+ return 1L;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long reCommitOaReceive(OaReceiveSaveReqVO reCommitReqVO) {
|
|
|
|
+ if (reCommitReqVO.getId() == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
|
+ if (loginUser == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ // 人信息
|
|
|
|
+ AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
|
|
|
|
+ if (employee == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ OaReceiveDO oaReceiveNew = BeanUtils.toBean(reCommitReqVO, OaReceiveDO.class);
|
|
|
|
+ OaReceiveDO oaReceiveOld = validateOaReceiveExists(oaReceiveNew.getId());
|
|
|
|
+ oaReceiveNew.setReceiveUuid(oaReceiveOld.getReceiveUuid())
|
|
|
|
+ .setProcInstId(oaReceiveOld.getProcInstId());
|
|
|
|
+
|
|
|
|
+ oaReceiveNew.setEmployeeId(employee.getId());
|
|
|
|
+ oaReceiveNew.setEmployeeName(employee.getNickname());
|
|
|
|
+ oaReceiveNew.setEmployeePhone(employee.getMobile());
|
|
|
|
+ oaReceiveNew.setDeptId(employee.getDeptId());
|
|
|
|
+ oaReceiveNew.setPosition("员工职位");
|
|
|
|
+ oaReceiveNew.setUserId(loginUser.getId());
|
|
|
|
+ oaReceiveNew.setApplyEmployeeId(loginUser.getId());
|
|
|
|
+ oaReceiveNew.setApplyEmployeeName(loginUser.getNickname());
|
|
|
|
+
|
|
|
|
+ // 子表信息
|
|
|
|
+ List<OaReceiveObjDO> oaReceiveObjs = reCommitReqVO.getOaReceiveObjs();
|
|
|
|
+ for (OaReceiveObjDO oaReceiveObj : oaReceiveObjs) {
|
|
|
|
+ if (StrUtil.isBlank(oaReceiveObj.getName())) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_RECEIVE_OBJ_NAME_BLANK);
|
|
|
|
+ }
|
|
|
|
+ if (oaReceiveObj.getAmount() == null || oaReceiveObj.getAmount() == 0) {
|
|
|
|
+ throw exception(ErrorCodeConstants.OA_RECEIVE_OBJ_AMOUNT_ZERO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Task currentTask = taskService.createTaskQuery().processInstanceId(oaReceiveNew.getProcInstId()).singleResult();
|
|
|
|
+ BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
|
|
|
|
+ approveReqVO.setId(currentTask.getId())
|
|
|
|
+ .setReason("[再次提交]");
|
|
|
|
+ approveReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_COMMITTED));
|
|
|
|
+ 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);
|
|
|
|
+ // 保存审批人信息
|
|
|
|
+ oaReceiveNew.setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
|
|
|
+ }
|
|
|
|
+ taskService.setVariable(currentTask.getId(), "auditPass", "true");
|
|
|
|
+ taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
|
|
|
|
+ // 再次提交,和审批通过逻辑相同
|
|
|
|
+ bpmTaskService.approveTask(loginUserId, approveReqVO);
|
|
|
|
+
|
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
|
+ Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
|
|
|
|
+ AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
|
|
|
|
+ oaReceiveNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
|
|
|
|
+ .setCurrentAuditEmployeeId(currentAuditEmployeeId)
|
|
|
|
+ .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
|
|
|
|
+ .setFinalAuditDate(LocalDateTime.now());
|
|
|
|
+ oaReceiveMapper.updateById(oaReceiveNew);
|
|
|
|
+
|
|
|
|
+ // 保存子表信息
|
|
|
|
+ if (CollectionUtil.isNotEmpty(oaReceiveObjs)) {
|
|
|
|
+ updateOaReceiveObjList(oaReceiveNew.getId(), oaReceiveObjs);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 保存业务uuid到附件中
|
|
|
|
+ saveFileList(reCommitReqVO.getFileIdList(), oaReceiveNew.getReceiveUuid());
|
|
|
|
+
|
|
|
|
+ return 1L;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public Long closeOaReceive(Long id) {
|
|
|
|
+ if (id == null) {
|
|
|
|
+ throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
|
+
|
|
|
|
+ OaReceiveDO oaReceiveDO = oaReceiveMapper.selectById(id);
|
|
|
|
+ if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaReceiveDO.getAuditStatus())
|
|
|
|
+ && !DictDataConstants.OA_AUDIT_STATUS_RECALLED.equals(oaReceiveDO.getAuditStatus())) {
|
|
|
|
+ throw exception(ErrorCodeConstants.TASK_CLOSE_NOT_ALLOWED);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Task currentTask = taskService.createTaskQuery().processInstanceId(oaReceiveDO.getProcInstId()).singleResult();
|
|
|
|
+ BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
|
|
|
|
+ approveReqVO.setId(currentTask.getId())
|
|
|
|
+ .setReason("[关闭]");
|
|
|
|
+ approveReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_CLOSED));
|
|
|
|
+ taskService.setVariable(currentTask.getId(), "auditPass", "false");
|
|
|
|
+ taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
|
|
|
|
+ // 关闭,使用审批通过的方法实现
|
|
|
|
+ bpmTaskService.approveTask(loginUserId, approveReqVO);
|
|
|
|
+
|
|
|
|
+ LambdaUpdateWrapper<OaReceiveDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
+ lambdaUpdateWrapper.set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
|
|
|
|
+ .set(OaReceiveDO::getCurrentAuditEmployeeId, null)
|
|
|
|
+ .set(OaReceiveDO::getCurrentAuditEmployeeName, null)
|
|
|
|
+ .set(OaReceiveDO::getFinalAuditDate, LocalDateTime.now())
|
|
|
|
+ .eq(OaReceiveDO::getId, id);
|
|
|
|
+ oaReceiveMapper.update(lambdaUpdateWrapper);
|
|
|
|
+ return 1L;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional
|
|
|
|
+ public void deleteOaReceive(Long id) {
|
|
|
|
+ // 校验存在
|
|
|
|
+ validateOaReceiveDelete(id);
|
|
|
|
+ // 删除
|
|
|
|
+ oaReceiveMapper.deleteById(id);
|
|
|
|
+ // 删除子表数据
|
|
|
|
+ deleteOaReceiveObjByReceiveId(id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public OaReceiveRespVO getOaReceive(Long id) {
|
|
|
|
+ // 登录人信息
|
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
|
+
|
|
|
|
+ OaReceiveDO oaReceiveDO = validateOaReceiveExists(id);
|
|
|
|
+ OaReceiveRespVO oaReceiveRespVO = BeanUtils.toBean(oaReceiveDO, OaReceiveRespVO.class);
|
|
|
|
+ if (oaReceiveDO.getDeptId() != null) {
|
|
|
|
+ DeptRespDTO dept = deptApi.getDept(oaReceiveDO.getDeptId());
|
|
|
|
+ if (dept != null) {
|
|
|
|
+ oaReceiveRespVO.setDeptName(dept.getName());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 子表数据
|
|
|
|
+ List<OaReceiveObjDO> oaReceiveObjDOS = getOaReceiveObjListByReceiveId(oaReceiveDO.getId());
|
|
|
|
+ oaReceiveRespVO.setOaReceiveObjs(oaReceiveObjDOS);
|
|
|
|
+
|
|
|
|
+ String procInstId = oaReceiveDO.getProcInstId();
|
|
|
|
+ if (StrUtil.isNotBlank(procInstId)) {
|
|
|
|
+ Task task = taskService.createTaskQuery()
|
|
|
|
+ .processInstanceId(procInstId)
|
|
|
|
+ .taskAssignee(String.valueOf(loginUserId))
|
|
|
|
+ .singleResult();
|
|
|
|
+ if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaReceiveDO.getAuditStatus())) {
|
|
|
|
+ // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
|
|
|
|
+ task = taskService.createTaskQuery()
|
|
|
|
+ .processInstanceId(procInstId)
|
|
|
|
+ .singleResult();
|
|
|
|
+ }
|
|
|
|
+ if (task != null) {
|
|
|
|
+ oaReceiveRespVO.setTaskId(task.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 附件列表
|
|
|
|
+ List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaReceiveDO.getReceiveUuid());
|
|
|
|
+ oaReceiveRespVO.setFileList(fileList);
|
|
|
|
+
|
|
|
|
+ // 审批记录
|
|
|
|
+ if (StrUtil.isNotBlank(oaReceiveDO.getProcInstId())) {
|
|
|
|
+ List<BpmTaskRespVO> auditRecordList = bpmTaskService.getAuditRecordListByProcessInstanceId(oaReceiveDO.getProcInstId());
|
|
|
|
+ oaReceiveRespVO.setAuditRecordList(auditRecordList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 审批人
|
|
|
|
+ String startUserSelectAssignees = oaReceiveDO.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;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ oaReceiveRespVO.setAuditUserList(auditUserList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return oaReceiveRespVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public OaReceiveRespVO getOaReceiveByProcInstId(String procInstId) {
|
|
|
|
+ OaReceiveDO oaReceiveDO = oaReceiveMapper.selectOne(OaReceiveDO::getProcInstId, procInstId);
|
|
|
|
+ OaReceiveRespVO oaReceiveRespVO = BeanUtils.toBean(oaReceiveDO, OaReceiveRespVO.class);
|
|
|
|
+ if (oaReceiveDO.getDeptId() != null) {
|
|
|
|
+ DeptRespDTO dept = deptApi.getDept(oaReceiveDO.getDeptId());
|
|
|
|
+ if (dept != null) {
|
|
|
|
+ oaReceiveRespVO.setDeptName(dept.getName());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 附件列表
|
|
|
|
+ List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaReceiveDO.getReceiveUuid());
|
|
|
|
+ oaReceiveRespVO.setFileList(fileList);
|
|
|
|
+
|
|
|
|
+ // 审批记录
|
|
|
|
+ if (StrUtil.isNotBlank(oaReceiveDO.getProcInstId())) {
|
|
|
|
+ List<BpmTaskRespVO> auditRecordList = bpmTaskService.getAuditRecordListByProcessInstanceId(oaReceiveDO.getProcInstId());
|
|
|
|
+ oaReceiveRespVO.setAuditRecordList(auditRecordList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 审批人
|
|
|
|
+ String startUserSelectAssignees = oaReceiveDO.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;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ oaReceiveRespVO.setAuditUserList(auditUserList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return oaReceiveRespVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public PageResult<OaReceiveRespVO> getOaReceivePage(OaReceivePageReqVO pageReqVO) {
|
|
|
|
+ PageResult<OaReceiveDO> oaReceiveDOPageResult = oaReceiveMapper.selectPage(pageReqVO);
|
|
|
|
+ PageResult<OaReceiveRespVO> oaReceiveRespVOPageResult = BeanUtils.toBean(oaReceiveDOPageResult, OaReceiveRespVO.class);
|
|
|
|
+
|
|
|
|
+ List<OaReceiveRespVO> oaReceiveRespVOList = oaReceiveRespVOPageResult.getList();
|
|
|
|
+ if (CollectionUtil.isNotEmpty(oaReceiveRespVOList)) {
|
|
|
|
+ List<Long> employeeIdList = oaReceiveRespVOList.stream().map(OaReceiveRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
|
|
|
|
+ List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
|
|
|
|
+ for (OaReceiveRespVO respVO : oaReceiveRespVOList) {
|
|
|
|
+ for (AdminUserRespDTO employee : employeeList) {
|
|
|
|
+ if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
|
|
|
|
+ respVO.setCurrentAuditEmployeeName(employee.getNickname());
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<Long> deptIdList = oaReceiveRespVOList.stream().map(OaReceiveRespVO::getDeptId).collect(Collectors.toList());
|
|
|
|
+ List<DeptRespDTO> deptList = deptApi.getDeptList(deptIdList);
|
|
|
|
+ for (OaReceiveRespVO respVO : oaReceiveRespVOList) {
|
|
|
|
+ for (DeptRespDTO dept : deptList) {
|
|
|
|
+ if (dept.getId() != null && dept.getId().equals(respVO.getDeptId())) {
|
|
|
|
+ respVO.setDeptName(dept.getName());
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return oaReceiveRespVOPageResult;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public PageResult<OaReceiveRespVO> exportOaReceiveExcel(OaReceivePageReqVO pageReqVO) {
|
|
|
|
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
|
+ return getOaReceivePage(pageReqVO);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void validateOaReceiveDelete(Long id) {
|
|
|
|
+ OaReceiveDO oaReceiveDO = validateOaReceiveExists(id);
|
|
|
|
+ if (!DictDataConstants.OA_AUDIT_STATUS_STAGING.equals(oaReceiveDO.getAuditStatus())) {
|
|
|
|
+ throw exception(ErrorCodeConstants.DELETE_FAIL_NOT_STAGING);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private OaReceiveDO validateOaReceiveExists(Long id) {
|
|
|
|
+ OaReceiveDO oaReceiveDO = oaReceiveMapper.selectById(id);
|
|
|
|
+ if (oaReceiveDO == null) {
|
|
|
|
+ throw exception(OA_RECEIVE_NOT_EXISTS);
|
|
|
|
+ }
|
|
|
|
+ return oaReceiveDO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 保存业务uuid到附件中
|
|
|
|
+ */
|
|
|
|
+ private void saveFileList(List<Long> fileIdList, String serviceId) {
|
|
|
|
+ if (CollectionUtil.isNotEmpty(fileIdList) && StrUtil.isNotEmpty(serviceId)) {
|
|
|
|
+ fileApi.updateFileBiz(fileIdList, serviceId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // @Resource
|
|
|
|
+ // private OaReceiveMapper oaReceiveMapper;
|
|
|
|
+ // @Resource
|
|
|
|
+ // private OaReceiveObjMapper oaReceiveObjMapper;
|
|
|
|
+ //
|
|
|
|
+ // @Override
|
|
|
|
+ // @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ // public Long createOaReceive(OaReceiveSaveReqVO createReqVO) {
|
|
|
|
+ // // 插入
|
|
|
|
+ // OaReceiveDO oaReceive = BeanUtils.toBean(createReqVO, OaReceiveDO.class);
|
|
|
|
+ // oaReceiveMapper.insert(oaReceive);
|
|
|
|
+ //
|
|
|
|
+ // // 插入子表
|
|
|
|
+ // createOaReceiveObjList(oaReceive.getId(), createReqVO.getOaReceiveObjs());
|
|
|
|
+ // // 返回
|
|
|
|
+ // return oaReceive.getId();
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // @Override
|
|
|
|
+ // @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ // public void updateOaReceive(OaReceiveSaveReqVO updateReqVO) {
|
|
|
|
+ // // 校验存在
|
|
|
|
+ // validateOaReceiveExists(updateReqVO.getId());
|
|
|
|
+ // // 更新
|
|
|
|
+ // OaReceiveDO updateObj = BeanUtils.toBean(updateReqVO, OaReceiveDO.class);
|
|
|
|
+ // oaReceiveMapper.updateById(updateObj);
|
|
|
|
+ //
|
|
|
|
+ // // 更新子表
|
|
|
|
+ // updateOaReceiveObjList(updateReqVO.getId(), updateReqVO.getOaReceiveObjs());
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // @Override
|
|
|
|
+ // @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ // public void deleteOaReceive(Long id) {
|
|
|
|
+ // // 校验存在
|
|
|
|
+ // validateOaReceiveExists(id);
|
|
|
|
+ // // 删除
|
|
|
|
+ // oaReceiveMapper.deleteById(id);
|
|
|
|
+ //
|
|
|
|
+ // // 删除子表
|
|
|
|
+ // deleteOaReceiveObjByReceiveId(id);
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // private void validateOaReceiveExists(Long id) {
|
|
|
|
+ // if (oaReceiveMapper.selectById(id) == null) {
|
|
|
|
+ // throw exception(OA_RECEIVE_NOT_EXISTS);
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // @Override
|
|
|
|
+ // public OaReceiveDO getOaReceive(Long id) {
|
|
|
|
+ // return oaReceiveMapper.selectById(id);
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // @Override
|
|
|
|
+ // public PageResult<OaReceiveDO> getOaReceivePage(OaReceivePageReqVO pageReqVO) {
|
|
|
|
+ // return oaReceiveMapper.selectPage(pageReqVO);
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // ==================== 子表(领用流程信息子表) ====================
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<OaReceiveObjDO> getOaReceiveObjListByReceiveId(Long receiveId) {
|
|
|
|
+ return oaReceiveObjMapper.selectListByReceiveId(receiveId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void createOaReceiveObjList(Long receiveId, List<OaReceiveObjDO> list) {
|
|
|
|
+ list.forEach(o -> o.setReceiveId(receiveId));
|
|
|
|
+ oaReceiveObjMapper.insertBatch(list);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void updateOaReceiveObjList(Long receiveId, List<OaReceiveObjDO> list) {
|
|
|
|
+ deleteOaReceiveObjByReceiveId(receiveId);
|
|
|
|
+ list.forEach(o -> o.setId(null).setCreator(null).setCreateTime(null).setUpdater(null).setUpdateTime(null).setDeleted(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新
|
|
|
|
+ createOaReceiveObjList(receiveId, list);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void deleteOaReceiveObjByReceiveId(Long receiveId) {
|
|
|
|
+ oaReceiveObjMapper.deleteByReceiveId(receiveId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|