package org.jeecg.modules.flowable.apithird.service;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
import org.jeecg.modules.flowable.service.impl.FlowInstanceServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*业务模块调用API的集合
*@author PanMeiCheng
*@date 2021/11/22
*@version 1.0
*/
@Service
public class FlowCommonService {
@Autowired
FlowMyBusinessServiceImpl flowMyBusinessService;
@Autowired
FlowInstanceServiceImpl flowInstanceService;
/**
* 初始生成或修改业务与流程的关联信息
* 当业务模块新增一条数据后调用,此时业务数据关联一个流程定义,以备后续流程使用
* @return 是否成功
* @param title 必填。流程业务简要描述。例:2021年11月26日xxxxx申请
* @param dataId 必填。业务数据Id,如果是一对多业务关系,传入主表的数据Id
* @param serviceImplName 必填。业务service注入spring容器的名称。
* 例如:@Service("demoService")则传入 demoService
* @param processDefinitionKey 必填。流程定义Key,传入此值,未来启动的会是该类流程的最新一个版本
* @param processDefinitionId 选填。流程定义Id,传入此值,未来启动的为指定版本的流程
*/
public boolean initActBusiness(String title,String dataId, String serviceImplName, String processDefinitionKey, String processDefinitionId){
boolean hasBlank = StrUtil.hasBlank(title,dataId, serviceImplName, processDefinitionKey);
if (hasBlank) throw new CustomException("流程关键参数未填完全!dataId, serviceImplName, processDefinitionKey");
LambdaQueryWrapper flowMyBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>();
flowMyBusinessLambdaQueryWrapper.eq(FlowMyBusiness::getDataId, dataId)
;
FlowMyBusiness flowMyBusiness = new FlowMyBusiness();
FlowMyBusiness business = flowMyBusinessService.getOne(flowMyBusinessLambdaQueryWrapper);
if (business!=null){
flowMyBusiness = business;
} else {
flowMyBusiness.setId(IdUtil.fastSimpleUUID());
}
if (processDefinitionId==null){
// 以便更新流程
processDefinitionId = "";
}
flowMyBusiness.setTitle(title)
.setDataId(dataId)
.setServiceImplName(serviceImplName)
.setProcessDefinitionKey(processDefinitionKey)
.setProcessDefinitionId(processDefinitionId)
;
if (business!=null){
return flowMyBusinessService.updateById(flowMyBusiness);
} else {
return flowMyBusinessService.save(flowMyBusiness);
}
}
/**
* 删除流程
* @param dataId
* @return
*/
public boolean delActBusiness(String dataId){
boolean hasBlank = StrUtil.hasBlank(dataId);
if (hasBlank) throw new CustomException("流程关键参数未填完全!dataId");
LambdaQueryWrapper flowMyBusinessQueryWrapper = new LambdaQueryWrapper<>();
flowMyBusinessQueryWrapper.eq(FlowMyBusiness::getDataId,dataId);
FlowMyBusiness one = flowMyBusinessService.getOne(flowMyBusinessQueryWrapper);
if (one.getProcessInstanceId()!=null){
try {
flowInstanceService.delete(one.getProcessInstanceId(),"删除流程");
} catch (Exception e) {
e.printStackTrace();
}
}
return flowMyBusinessService.remove(flowMyBusinessQueryWrapper);
}
}