|
@@ -9,15 +9,15 @@ import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.oa.entry.vo.OaEntryPageReqVO;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.oa.entry.vo.OaEntrySaveReqVO;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.entry.OaEntryDO;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.entry.OaEntryMapper;
|
|
|
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
|
|
-import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.flowable.engine.RuntimeService;
|
|
|
import org.flowable.engine.TaskService;
|
|
|
-import org.flowable.engine.runtime.ProcessInstance;
|
|
|
import org.flowable.task.api.Task;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -67,115 +67,147 @@ public class OaEntryServiceImpl extends ServiceImpl<OaEntryMapper, OaEntryDO> im
|
|
|
public Integer startOaEntry(Long userId, OaEntrySaveReqVO createReqVO) {
|
|
|
//判断是否已经发起流程
|
|
|
Boolean auditPass = createReqVO.getAuditPass();
|
|
|
- //创建单据uuid
|
|
|
+ // 创建单据uuid
|
|
|
String uuid = IdUtil.fastSimpleUUID();
|
|
|
- // 插入
|
|
|
OaEntryDO oaEntry = BeanUtils.toBean(createReqVO, OaEntryDO.class);
|
|
|
- oaEntry.setEntryId(uuid);
|
|
|
+ if (StringUtils.isBlank(oaEntry.getEntryId())) {
|
|
|
+ oaEntry.setEntryId(uuid);
|
|
|
+ }
|
|
|
+ // 保存或更新表单信息
|
|
|
this.saveOrUpdate(oaEntry);
|
|
|
- //如果提交
|
|
|
- if (auditPass){
|
|
|
+
|
|
|
+ // 提交
|
|
|
+ if (auditPass) {
|
|
|
// 发起 BPM 流程
|
|
|
Map<String, Object> processInstanceVariables = new HashMap<>();
|
|
|
- processInstanceVariables.put("auditPass",auditPass);
|
|
|
+ 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(oaEntry.getId()))
|
|
|
- .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
+ startUserSelectAssignees.put("approver", createReqVO.getStartUserSelectAssignees());
|
|
|
+ String processInstanceId = processInstanceApi
|
|
|
+ .createProcessInstance(userId,
|
|
|
+ new BpmProcessInstanceCreateReqDTO()
|
|
|
+ .setProcessDefinitionKey(PROCESS_KEY)
|
|
|
+ .setVariables(processInstanceVariables)
|
|
|
+ .setBusinessKey(String.valueOf(oaEntry.getId()))
|
|
|
+ .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
|
|
|
//获取下一个审批人
|
|
|
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
|
|
|
|
|
|
- // 将工作流的编号,单据状态 表单uuid 最后一次审批时间 当前审批人 更新到 OA 入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setProcInstId(processInstanceId).setAuditStatus("1")
|
|
|
- .setEntryId(uuid).setFinalAuditDate(new Date()).setCurrentAuditEmployeeId(task.getAssignee()));
|
|
|
+ // 将工作流的编号,单据状态 最后一次审批时间 当前审批人 更新到 OA 入职中
|
|
|
+ oaEntryMapper.updateById(new OaEntryDO()
|
|
|
+ .setId(oaEntry.getId())
|
|
|
+ .setProcInstId(processInstanceId)
|
|
|
+ .setAuditStatus("1")
|
|
|
+ .setEntryId(uuid)
|
|
|
+ .setFinalAuditDate(new Date())
|
|
|
+ .setCurrentAuditEmployeeId(task.getAssignee()));
|
|
|
+
|
|
|
+ // TODO 发送通知
|
|
|
+
|
|
|
}else {
|
|
|
- // 将单据状态 表单uuid 更新到 OA入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setAuditStatus("0").setEntryId(uuid));
|
|
|
+ // 暂存,不发起流程
|
|
|
+ // 将单据状态 更新到 OA入职中
|
|
|
+ oaEntryMapper.updateById(new OaEntryDO()
|
|
|
+ .setId(oaEntry.getId())
|
|
|
+ .setAuditStatus("0"));
|
|
|
}
|
|
|
|
|
|
- //保存附件uuid
|
|
|
+ // TODO 保存或更新附件uuid
|
|
|
if (CollectionUtil.isNotEmpty(createReqVO.getFileIdList())) {
|
|
|
- // LambdaUpdateWrapper<FileDTO> wrapper = new LambdaUpdateWrapper<>();
|
|
|
- // wrapper.in(FileDTO::getId, createReqVO.getFileIdList()).set(FileDTO::getServiceId, uuid);
|
|
|
}
|
|
|
- // todo 站内信发送
|
|
|
- // loanInfoService.sendMassage(actBaseInfo);
|
|
|
+
|
|
|
// 返回
|
|
|
return oaEntry.getId();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Integer completeOaEntry(Long userId, OaEntrySaveReqVO createReqVO, BpmTaskApproveReqVO reqVO) {
|
|
|
- //判断是否已经发起流程
|
|
|
- Boolean auditPass = createReqVO.getAuditPass();
|
|
|
- // 修改
|
|
|
- OaEntryDO oaEntry = BeanUtils.toBean(createReqVO, OaEntryDO.class);
|
|
|
-// oaEntryMapper.updateById(oaEntry);
|
|
|
- //判断当前单据是否存在流程实例id,如果不存在说明没有发起流程
|
|
|
- if (oaEntry.getProcInstId() == null && oaEntry.getProcInstId().equals("")) {
|
|
|
- // 提交
|
|
|
- if (createReqVO.getAuditPass()) {
|
|
|
- // 发起 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(oaEntry.getId()))
|
|
|
- .setStartUserSelectAssignees(startUserSelectAssignees));
|
|
|
-
|
|
|
- // 将工作流的编号,单据状态 更新到 OA 入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setProcInstId(processInstanceId).setAuditStatus("1"));
|
|
|
- }else {
|
|
|
- // 暂存 将单据状态 更新到 OA 入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setAuditStatus("0"));
|
|
|
- }
|
|
|
+ public Integer completeTrueOaEntry(Long userId, BpmTaskApproveReqVO reqVO) {
|
|
|
+ Task currentTask = bpmTaskService.getTask(reqVO.getId());
|
|
|
+ // 审批同意
|
|
|
+ bpmTaskService.approveTask(userId, reqVO);
|
|
|
+
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+ if (nextTask != null) {
|
|
|
+ LambdaUpdateWrapper<OaEntryDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.set(OaEntryDO::getAuditStatus, "2")
|
|
|
+ .set(OaEntryDO::getCurrentAuditEmployeeId, nextTask.getAssignee())
|
|
|
+ .set(OaEntryDO::getFinalAuditDate, new Date())
|
|
|
+ .eq(OaEntryDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ oaEntryMapper.update(updateWrapper);
|
|
|
} else {
|
|
|
- //同意
|
|
|
- if (createReqVO.getAuditPass()) {
|
|
|
- //审批通过
|
|
|
- bpmTaskService.approveTask(userId,reqVO);
|
|
|
- //判断流程是否结束
|
|
|
- ProcessInstance procIns = runtimeService.createProcessInstanceQuery().processInstanceId(createReqVO.getProcInstId()).active().singleResult();
|
|
|
- if (procIns != null) {
|
|
|
- //说明流程结束
|
|
|
- //获取下一个审批人
|
|
|
- Task task = taskService.createTaskQuery().processInstanceId(createReqVO.getProcInstId()).singleResult();
|
|
|
- // 将单据状态 当前审批人 最后一次审批时间 更新到 OA 入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setAuditStatus("2").setCurrentAuditEmployeeId(task.getAssignee())
|
|
|
- .setFinalAuditDate(new Date()));
|
|
|
- }else {
|
|
|
- //流程结束
|
|
|
- //todo 复制信息到入职信息表中
|
|
|
-
|
|
|
- // 将单据状态 更新到 OA 入职中
|
|
|
- oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setAuditStatus("3").setCurrentAuditEmployeeId(" ").setFinalAuditDate(new Date()));
|
|
|
- }
|
|
|
- }else {
|
|
|
-// //审批不通过
|
|
|
-// BpmTaskReturnReqVO bpmTaskReturnReqVO =new BpmTaskReturnReqVO();
|
|
|
-// bpmTaskReturnReqVO.setId(reqVO.getId());
|
|
|
-// bpmTaskReturnReqVO.setReason(reqVO.getReason());
|
|
|
-// bpmTaskReturnReqVO.setTargetTaskDefinitionKey("");
|
|
|
-// bpmTaskService.returnTask(userId,reqVO);
|
|
|
-// // 将单据状态 当前审批人 最后一次审批时间 更新到 OA 入职中
|
|
|
-// oaEntryMapper.updateById(new OaEntryDO().setId(oaEntry.getId()).setAuditStatus("4").setCurrentAuditEmployeeId(" ").setFinalAuditDate(new Date()));
|
|
|
- }
|
|
|
+ LambdaUpdateWrapper<OaEntryDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.set(OaEntryDO::getAuditStatus, "3")
|
|
|
+ .set(OaEntryDO::getCurrentAuditEmployeeId, null)
|
|
|
+ .set(OaEntryDO::getFinalAuditDate, new Date())
|
|
|
+ .eq(OaEntryDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ oaEntryMapper.update(updateWrapper);
|
|
|
+
|
|
|
+ // TODO 复制业务单据信息到业务模块单据表
|
|
|
+
|
|
|
}
|
|
|
+ // 发送通知
|
|
|
+
|
|
|
+ // 返回
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer completeFalseOaEntry(Long userId, BpmTaskApproveReqVO reqVO) {
|
|
|
+
|
|
|
+ Task currentTask = bpmTaskService.getTask(reqVO.getId());
|
|
|
+
|
|
|
+ BpmTaskReturnReqVO reqVO2 = BeanUtils.toBean(reqVO, BpmTaskReturnReqVO.class);
|
|
|
+ reqVO2.setTargetTaskDefinitionKey("modifyApply");
|
|
|
+ bpmTaskService.returnTask(userId, reqVO2);
|
|
|
|
|
|
- //保存附件uuid
|
|
|
- LambdaUpdateWrapper<FileDTO> wrapper = new LambdaUpdateWrapper<>();
|
|
|
- wrapper.in(FileDTO::getId, createReqVO.getFileIdList()).set(FileDTO::getServiceId, createReqVO.getEntryId());
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+
|
|
|
+ // 更新单据状态,当前处理人,最后处理时间
|
|
|
+ LambdaUpdateWrapper<OaEntryDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.set(OaEntryDO::getCurrentAuditEmployeeId, nextTask.getAssignee())
|
|
|
+ .set(OaEntryDO::getFinalAuditDate, new Date())
|
|
|
+ .set(OaEntryDO::getAuditStatus, "0")
|
|
|
+ .eq(OaEntryDO::getProcInstId, currentTask.getProcessInstanceId());
|
|
|
+ oaEntryMapper.update(updateWrapper);
|
|
|
+
|
|
|
+ // 发送通知
|
|
|
|
|
|
- // todo 站内信发送
|
|
|
- // loanInfoService.sendMassage(actBaseInfo);
|
|
|
// 返回
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer updateCompleteOaEntry(Long userId, OaEntrySaveReqVO createReqVO, BpmTaskApproveReqVO reqVO) {
|
|
|
+ // 判断是否已经发起流程
|
|
|
+ Boolean auditPass = createReqVO.getAuditPass();
|
|
|
+
|
|
|
+ OaEntryDO oaEntry = BeanUtils.toBean(createReqVO, OaEntryDO.class);
|
|
|
+
|
|
|
+ Task currentTask = taskService.createTaskQuery().processInstanceId(oaEntry.getProcInstId()).singleResult();
|
|
|
+
|
|
|
+ //审批通过
|
|
|
+ bpmTaskService.approveTask(userId, reqVO);
|
|
|
+
|
|
|
+ // 提交
|
|
|
+ if (auditPass) {
|
|
|
+ Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
|
|
|
+
|
|
|
+ oaEntry.setAuditStatus("1");
|
|
|
+ oaEntry.setCurrentAuditEmployeeId(nextTask.getAssignee());
|
|
|
+ oaEntry.setFinalAuditDate(new Date());
|
|
|
+ oaEntryMapper.updateById(oaEntry);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ OaEntryDO oaEntryClose = new OaEntryDO();
|
|
|
+ oaEntryClose.setId(oaEntry.getId());
|
|
|
+ oaEntryClose.setAuditStatus("4");
|
|
|
+ oaEntryClose.setCurrentAuditEmployeeId(null);
|
|
|
+ oaEntryClose.setFinalAuditDate(new Date());
|
|
|
+ oaEntryMapper.updateById(oaEntryClose);
|
|
|
+ }
|
|
|
+
|
|
|
return oaEntry.getId();
|
|
|
}
|
|
|
|