/*
|
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
* Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in the
|
* documentation and/or other materials provided with the distribution.
|
* Neither the name of the dreamlu.net developer nor the names of its
|
* contributors may be used to endorse or promote products derived from
|
* this software without specific prior written permission.
|
* Author: Chill 庄骞 (smallchill@163.com)
|
*/
|
package org.springblade.modules.applicationDelay.service.impl;
|
|
import lombok.AllArgsConstructor;
|
import org.flowable.engine.TaskService;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.core.secure.utils.AuthUtil;
|
import org.springblade.core.tool.support.Kv;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.StringUtil;
|
import org.springblade.flow.business.service.IFlowService;
|
import org.springblade.flow.core.constant.ProcessConstant;
|
import org.springblade.flow.core.entity.BladeFlow;
|
import org.springblade.flow.core.utils.FlowUtil;
|
import org.springblade.flow.core.utils.TaskUtil;
|
import org.springblade.flow.demo.leave.entity.ProcessLeave;
|
import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity;
|
import org.springblade.modules.applicationDelay.vo.ApplicationDelayVO;
|
import org.springblade.modules.applicationDelay.mapper.ApplicationDelayMapper;
|
import org.springblade.modules.applicationDelay.service.IApplicationDelayService;
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
import org.springframework.stereotype.Service;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Map;
|
|
/**
|
* 延期申请表 服务实现类
|
*
|
* @author BladeX
|
* @since 2022-12-13
|
*/
|
@Service
|
@AllArgsConstructor
|
public class ApplicationDelayServiceImpl extends BaseServiceImpl<ApplicationDelayMapper, ApplicationDelayEntity> implements IApplicationDelayService {
|
private final IFlowService flowService;
|
private final TaskService taskService;
|
|
@Override
|
public IPage<ApplicationDelayVO> selectApplicationDelayPage(IPage<ApplicationDelayVO> page, ApplicationDelayVO applicationDelay) {
|
return page.setRecords(baseMapper.selectApplicationDelayPage(page, applicationDelay));
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Boolean startProcess(ApplicationDelayVO applicationDelayEntity) {
|
String businessTable = FlowUtil.getBusinessTable(ProcessConstant.DELAY_AUDIT);
|
if (Func.isEmpty(applicationDelayEntity.getId())) {
|
// 保存leave
|
save(applicationDelayEntity);
|
// 启动流程
|
Kv variables = Kv.create()
|
.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName());
|
BladeFlow flow = flowService.startProcessInstanceById(applicationDelayEntity.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(applicationDelayEntity.getId())), variables);
|
if (Func.isNotEmpty(flow)) {
|
log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId());
|
// 返回流程id写入leave
|
applicationDelayEntity.setProcessInstanceId(flow.getProcessInstanceId());
|
updateById(applicationDelayEntity);
|
} else {
|
throw new ServiceException("开启流程失败");
|
}
|
} else {
|
|
updateById(applicationDelayEntity);
|
}
|
return true;
|
}
|
|
@Override
|
public Boolean completeTask(BladeFlow flow) {
|
String taskId = flow.getTaskId();
|
String processInstanceId = flow.getProcessInstanceId();
|
String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
|
// 增加评论
|
if (StringUtil.isNoneBlank(processInstanceId, comment)) {
|
taskService.addComment(taskId, processInstanceId, comment);
|
}
|
// 创建变量
|
Map<String, Object> variables = flow.getVariables();
|
if (variables == null) {
|
variables = Kv.create();
|
}
|
variables.put(ProcessConstant.PASS_KEY, flow.isPass());
|
// 完成任务
|
taskService.complete(taskId, variables);
|
return true;
|
}
|
|
}
|