|
|
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
+import cn.iocoder.yudao.framework.security.core.LoginUser;
|
|
|
+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;
|
|
|
@@ -14,9 +16,12 @@ 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.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.user.AdminUserApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
@@ -28,22 +33,20 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+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 实现类
|
|
|
+ * 通用事项审批流程信息 Service 实现类
|
|
|
*
|
|
|
* @author dp
|
|
|
*/
|
|
|
@Service
|
|
|
@Validated
|
|
|
-public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUniversalDO> implements OaUniversalService {
|
|
|
+public class OaUniversalServiceImpl implements OaUniversalService {
|
|
|
|
|
|
/**
|
|
|
* OA 合同续签对应的流程定义 KEY
|
|
|
@@ -66,66 +69,103 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
|
|
|
@Resource
|
|
|
private FileApi fileApi;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
+
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
- public Long startOaUniversal(Long userId, OaUniversalSaveReqVO createReqVO) {
|
|
|
- //判断是否已经发起流程
|
|
|
- Boolean auditPass = createReqVO.getAuditPass();
|
|
|
- // 创建单据uuid
|
|
|
- String uuid = IdUtil.fastSimpleUUID();
|
|
|
+ public Long commitOaUniversal(OaUniversalSaveReqVO createReqVO) {
|
|
|
+ // 登录人信息
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
+ Objects.requireNonNull(loginUser, "登录用户不能为空");
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
+
|
|
|
OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
|
|
|
if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
|
|
|
+ // 创建单据uuid
|
|
|
+ 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");
|
|
|
// 保存或更新表单信息
|
|
|
- this.saveOrUpdate(oaUniversal);
|
|
|
-
|
|
|
- // 提交
|
|
|
- if (auditPass) {
|
|
|
- // 发起 BPM 流程
|
|
|
- Map<String, Object> processInstanceVariables = new HashMap<>();
|
|
|
- processInstanceVariables.put("auditPass", auditPass);
|
|
|
- //添加审批人信息
|
|
|
- Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
|
|
|
- startUserSelectAssignees.put("approver", createReqVO.getStartUserSelectAssignees());
|
|
|
- String processInstanceId = processInstanceApi
|
|
|
- .createProcessInstance(userId,
|
|
|
- new BpmProcessInstanceCreateReqDTO()
|
|
|
- .setProcessDefinitionKey(PROCESS_KEY)
|
|
|
- .setVariables(processInstanceVariables)
|
|
|
- .setBusinessKey(String.valueOf(oaUniversal.getId()))
|
|
|
- .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
-
|
|
|
- //获取下一个审批人
|
|
|
- Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
|
|
|
-
|
|
|
- // 将工作流的编号,单据状态 最后一次审批时间 当前审批人 更新到 OA 转正中
|
|
|
- oaUniversalMapper.updateById(new OaUniversalDO()
|
|
|
- .setId(oaUniversal.getId())
|
|
|
- .setProcInstId(processInstanceId)
|
|
|
- .setAuditStatus("1")
|
|
|
- .setUniversalId(uuid)
|
|
|
- .setFinalAuditDate(LocalDateTime.now())
|
|
|
- .setCurrentAuditEmployeeId(Long.valueOf(task.getAssignee())));
|
|
|
-
|
|
|
- // TODO dp 发送通知
|
|
|
-
|
|
|
- }else {
|
|
|
- // 暂存,不发起流程
|
|
|
- // 将单据状态 更新到 OA转正中
|
|
|
- oaUniversalMapper.updateById(new OaUniversalDO()
|
|
|
- .setId(oaUniversal.getId())
|
|
|
- .setAuditStatus("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 = createReqVO.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();
|
|
|
+ // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
|
|
|
+ oaUniversalMapper.updateById(new OaUniversalDO()
|
|
|
+ .setId(oaUniversal.getId())
|
|
|
+ .setProcInstId(processInstanceId)
|
|
|
+ .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_SUBMITTED)
|
|
|
+ .setFinalAuditDate(LocalDateTime.now())
|
|
|
+ .setCurrentAuditEmployeeId(Long.valueOf(task.getAssignee()))
|
|
|
+ .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
|
|
|
// 保存业务uuid到附件中
|
|
|
- if (CollectionUtil.isNotEmpty(createReqVO.getFileIdList())) {
|
|
|
- fileApi.updateFileBiz(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
|
|
|
+ saveFileList(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
|
|
|
+ // TODO DP 发送提交成功站内信
|
|
|
+ return oaUniversal.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long stagingOaUniversal(OaUniversalSaveReqVO createReqVO) {
|
|
|
+ // 登录人信息
|
|
|
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
|
|
+ AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
|
|
|
+ Objects.requireNonNull(loginUser, "登录用户不能为空");
|
|
|
+ // TODO DP 根据登录人查询出对应的员工信息
|
|
|
+
|
|
|
+ OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
|
|
|
+ if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
|
|
|
+ // 创建单据uuid
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ // 保存业务uuid到附件中
|
|
|
+ saveFileList(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
|
|
|
|
|
|
- // 返回
|
|
|
return oaUniversal.getId();
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
public Long completeTrueOaUniversal(Long userId, BpmTaskApproveReqVO reqVO) {
|
|
|
Task currentTask = bpmTaskService.getTask(reqVO.getId());
|
|
|
@@ -185,7 +225,7 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
|
|
|
@Override
|
|
|
public Long updateCompleteOaUniversal(Long userId, OaUniversalSaveReqVO createReqVO, BpmTaskApproveReqVO reqVO) {
|
|
|
// 判断是否已经发起流程
|
|
|
- Boolean auditPass = createReqVO.getAuditPass();
|
|
|
+ Boolean auditPass = true;
|
|
|
|
|
|
OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
|
|
|
|
|
|
@@ -269,4 +309,13 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
|
|
|
return oaUniversalMapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 保存业务uuid到附件中
|
|
|
+ */
|
|
|
+ private void saveFileList(List<Long> fileIdList, String serviceId) {
|
|
|
+ if (CollectionUtil.isNotEmpty(fileIdList)) {
|
|
|
+ fileApi.updateFileBiz(fileIdList, serviceId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|