mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-12-02 04:01:52 +08:00
工作流 Flowable 流程模型接口 部分实现
This commit is contained in:
parent
9c452ee612
commit
a207412e8c
@ -1,8 +1,9 @@
|
|||||||
package cn.iocoder.yudao.module.bpm.service.definition;
|
package cn.iocoder.yudao.module.bpm.service.definition;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageItemRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageReqVO;
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程模型通用接口
|
* 流程模型通用接口
|
||||||
@ -19,4 +20,28 @@ public interface BpmModelCommonService {
|
|||||||
* @return 流程模型分页
|
* @return 流程模型分页
|
||||||
*/
|
*/
|
||||||
PageResult<BpmModelPageItemRespVO> getModelPage(BpmModelPageReqVO pageVO);
|
PageResult<BpmModelPageItemRespVO> getModelPage(BpmModelPageReqVO pageVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建流程模型
|
||||||
|
*
|
||||||
|
* @param modelVO 创建信息
|
||||||
|
* @param bpmnXml BPMN XML
|
||||||
|
* @return 创建的流程模型的编号
|
||||||
|
*/
|
||||||
|
String createModel(@Valid BpmModelCreateReqVO modelVO, String bpmnXml);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得流程模块
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 流程模型
|
||||||
|
*/
|
||||||
|
BpmModelRespVO getModel(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改流程模型
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateModel(@Valid BpmModelUpdateReqVO updateReqVO);
|
||||||
}
|
}
|
||||||
|
@ -13,29 +13,6 @@ import javax.validation.Valid;
|
|||||||
*/
|
*/
|
||||||
public interface BpmModelService extends BpmModelCommonService {
|
public interface BpmModelService extends BpmModelCommonService {
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得流程模块
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
* @return 流程模型
|
|
||||||
*/
|
|
||||||
BpmModelRespVO getModel(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建流程模型
|
|
||||||
*
|
|
||||||
* @param modelVO 创建信息
|
|
||||||
* @param bpmnXml BPMN XML
|
|
||||||
* @return 创建的流程模型的编号
|
|
||||||
*/
|
|
||||||
String createModel(@Valid BpmModelCreateReqVO modelVO, String bpmnXml);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改流程模型
|
|
||||||
*
|
|
||||||
* @param updateReqVO 更新信息
|
|
||||||
*/
|
|
||||||
void updateModel(@Valid BpmModelUpdateReqVO updateReqVO);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将流程模型,部署成一个流程定义
|
* 将流程模型,部署成一个流程定义
|
||||||
|
@ -2,17 +2,21 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageItemRespVO;
|
import cn.iocoder.yudao.framework.common.util.io.IoUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageReqVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
|
||||||
|
import cn.iocoder.yudao.module.bpm.convert.definition.ModelConvert;
|
||||||
import cn.iocoder.yudao.module.bpm.service.definition.FlowableModelService;
|
import cn.iocoder.yudao.module.bpm.service.definition.FlowableModelService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
@ -30,4 +34,37 @@ public class FlowableModelController {
|
|||||||
public CommonResult<PageResult<BpmModelPageItemRespVO>> getModelPage(BpmModelPageReqVO pageVO) {
|
public CommonResult<PageResult<BpmModelPageItemRespVO>> getModelPage(BpmModelPageReqVO pageVO) {
|
||||||
return success(modelService.getModelPage(pageVO));
|
return success(modelService.getModelPage(pageVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@ApiOperation("获得模型")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class)
|
||||||
|
@PreAuthorize("@ss.hasPermission('bpm:model:query')")
|
||||||
|
public CommonResult<BpmModelRespVO> getModel(@RequestParam("id") String id) {
|
||||||
|
BpmModelRespVO model = modelService.getModel(id);
|
||||||
|
return success(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ApiOperation(value = "新建模型")
|
||||||
|
@PreAuthorize("@ss.hasPermission('bpm:model:create')")
|
||||||
|
public CommonResult<String> createModel(@Valid @RequestBody BpmModelCreateReqVO createRetVO) {
|
||||||
|
return success(modelService.createModel(createRetVO, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@ApiOperation(value = "修改模型")
|
||||||
|
@PreAuthorize("@ss.hasPermission('bpm:model:update')")
|
||||||
|
public CommonResult<Boolean> updateModel(@Valid @RequestBody BpmModelUpdateReqVO modelVO) {
|
||||||
|
modelService.updateModel(modelVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/import")
|
||||||
|
@ApiOperation(value = "导入模型")
|
||||||
|
public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException {
|
||||||
|
BpmModelCreateReqVO createReqVO = ModelConvert.INSTANCE.convert(importReqVO);
|
||||||
|
// 读取文件
|
||||||
|
String bpmnXml = IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false);
|
||||||
|
return success(modelService.createModel(createReqVO, bpmnXml));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package cn.iocoder.yudao.module.bpm.convert.definition;
|
package cn.iocoder.yudao.module.bpm.convert.definition;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelBaseVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageItemRespVO;
|
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelRespVO;
|
|
||||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
|
||||||
import cn.iocoder.yudao.module.bpm.service.definition.dto.ModelMetaInfoRespDTO;
|
import cn.iocoder.yudao.module.bpm.service.definition.dto.ModelMetaInfoRespDTO;
|
||||||
import org.flowable.common.engine.impl.db.SuspensionState;
|
import org.flowable.common.engine.impl.db.SuspensionState;
|
||||||
@ -17,6 +16,7 @@ import org.mapstruct.factory.Mappers;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程模型 Convert
|
* 流程模型 Convert
|
||||||
@ -78,8 +78,42 @@ public interface ModelConvert {
|
|||||||
ModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), ModelMetaInfoRespDTO.class);
|
ModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), ModelMetaInfoRespDTO.class);
|
||||||
copyTo(metaInfo, to);
|
copyTo(metaInfo, to);
|
||||||
}
|
}
|
||||||
|
BpmModelCreateReqVO convert(BpmModeImportReqVO bean);
|
||||||
|
|
||||||
void copyTo(ModelMetaInfoRespDTO from, @MappingTarget BpmModelBaseVO to);
|
void copyTo(ModelMetaInfoRespDTO from, @MappingTarget BpmModelBaseVO to);
|
||||||
|
|
||||||
BpmModelPageItemRespVO.ProcessDefinition convert(ProcessDefinition bean);
|
BpmModelPageItemRespVO.ProcessDefinition convert(ProcessDefinition bean);
|
||||||
|
|
||||||
|
default void copy(Model model, BpmModelCreateReqVO bean) {
|
||||||
|
model.setName(bean.getName());
|
||||||
|
model.setKey(bean.getKey());
|
||||||
|
model.setMetaInfo(buildMetaInfoStr(null, bean.getDescription(), null, null,
|
||||||
|
null, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
default void copy(Model model, BpmModelUpdateReqVO bean) {
|
||||||
|
model.setName(bean.getName());
|
||||||
|
model.setCategory(bean.getCategory());
|
||||||
|
model.setMetaInfo(buildMetaInfoStr(JsonUtils.parseObject(model.getMetaInfo(), ModelMetaInfoRespDTO.class),
|
||||||
|
bean.getDescription(), bean.getFormType(), bean.getFormId(),
|
||||||
|
bean.getFormCustomCreatePath(), bean.getFormCustomViewPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
default String buildMetaInfoStr(ModelMetaInfoRespDTO metaInfo, String description, Integer formType,
|
||||||
|
Long formId, String formCustomCreatePath, String formCustomViewPath) {
|
||||||
|
if (metaInfo == null) {
|
||||||
|
metaInfo = new ModelMetaInfoRespDTO();
|
||||||
|
}
|
||||||
|
// 只有非空,才进行设置,避免更新时的覆盖
|
||||||
|
if (StrUtil.isNotEmpty(description)) {
|
||||||
|
metaInfo.setDescription(description);
|
||||||
|
}
|
||||||
|
if (Objects.nonNull(formType)) {
|
||||||
|
metaInfo.setFormType(formType);
|
||||||
|
metaInfo.setFormId(formId);
|
||||||
|
metaInfo.setFormCustomCreatePath(formCustomCreatePath);
|
||||||
|
metaInfo.setFormCustomViewPath(formCustomViewPath);
|
||||||
|
}
|
||||||
|
return JsonUtils.toJsonString(metaInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.PageUtils;
|
import cn.iocoder.yudao.framework.common.util.object.PageUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageItemRespVO;
|
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelPageReqVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.*;
|
||||||
import cn.iocoder.yudao.module.bpm.convert.definition.ModelConvert;
|
import cn.iocoder.yudao.module.bpm.convert.definition.ModelConvert;
|
||||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
|
||||||
import cn.iocoder.yudao.module.bpm.service.definition.dto.ModelMetaInfoRespDTO;
|
import cn.iocoder.yudao.module.bpm.service.definition.dto.ModelMetaInfoRespDTO;
|
||||||
@ -17,21 +17,27 @@ import org.flowable.engine.repository.Model;
|
|||||||
import org.flowable.engine.repository.ModelQuery;
|
import org.flowable.engine.repository.ModelQuery;
|
||||||
import org.flowable.engine.repository.ProcessDefinition;
|
import org.flowable.engine.repository.ProcessDefinition;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
|
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flowable流程模型实现
|
* Flowable流程模型实现
|
||||||
* 主要进行 Flowable {@link Model} 的维护
|
* 主要进行 Flowable {@link Model} 的维护
|
||||||
*
|
*
|
||||||
* @author yunlongn
|
* @author yunlongn
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
|
* @author jason
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
@ -80,4 +86,70 @@ public class FlowableModelServiceImpl implements FlowableModelService {
|
|||||||
long modelCount = modelQuery.count();
|
long modelCount = modelQuery.count();
|
||||||
return new PageResult<>(ModelConvert.INSTANCE.convertList(models, formMap, deploymentMap, processDefinitionMap), modelCount);
|
return new PageResult<>(ModelConvert.INSTANCE.convertList(models, formMap, deploymentMap, processDefinitionMap), modelCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public String createModel(@Valid BpmModelCreateReqVO createReqVO, String bpmnXml) {
|
||||||
|
checkKeyNCName(createReqVO.getKey());
|
||||||
|
// 校验流程标识已经存在
|
||||||
|
Model keyModel = this.getModelByKey(createReqVO.getKey());
|
||||||
|
if (keyModel != null) {
|
||||||
|
throw exception(MODEL_KEY_EXISTS, createReqVO.getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建流程定义
|
||||||
|
Model model = repositoryService.newModel();
|
||||||
|
ModelConvert.INSTANCE.copy(model, createReqVO);
|
||||||
|
// 保存流程定义
|
||||||
|
repositoryService.saveModel(model);
|
||||||
|
// 保存 BPMN XML
|
||||||
|
saveModelBpmnXml(model, bpmnXml);
|
||||||
|
return model.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BpmModelRespVO getModel(String id) {
|
||||||
|
Model model = repositoryService.getModel(id);
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
BpmModelRespVO modelRespVO = ModelConvert.INSTANCE.convert(model);
|
||||||
|
// 拼接 bpmn XML
|
||||||
|
byte[] bpmnBytes = repositoryService.getModelEditorSource(id);
|
||||||
|
modelRespVO.setBpmnXml(StrUtil.utf8Str(bpmnBytes));
|
||||||
|
return modelRespVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateModel(@Valid BpmModelUpdateReqVO updateReqVO) {
|
||||||
|
// 校验流程模型存在
|
||||||
|
Model model = repositoryService.getModel(updateReqVO.getId());
|
||||||
|
if (model == null) {
|
||||||
|
throw exception(MODEL_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改流程定义
|
||||||
|
ModelConvert.INSTANCE.copy(model, updateReqVO);
|
||||||
|
// 更新模型
|
||||||
|
repositoryService.saveModel(model);
|
||||||
|
// 更新 BPMN XML
|
||||||
|
saveModelBpmnXml(model, updateReqVO.getBpmnXml());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Model getModelByKey(String key) {
|
||||||
|
return repositoryService.createModelQuery().modelKey(key).singleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkKeyNCName(String key) {
|
||||||
|
if (!ValidationUtils.isXmlNCName(key)) {
|
||||||
|
throw exception(MODEL_KEY_VALID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveModelBpmnXml(Model model, String bpmnXml) {
|
||||||
|
if (StrUtil.isEmpty(bpmnXml)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(bpmnXml));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user