From cfbef058b5c39500f82b2947a404a5afbda4e59a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 3 Jan 2022 18:46:00 +0800 Subject: [PATCH] 完成流程图上传的功能 --- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmDefinitionController.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java | 56 -------------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java | 14 +++++++++++++- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java | 22 ++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/ModelConvert.java | 119 ----------------------------------------------------------------------------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessService.java | 20 -------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessServiceImpl.java | 85 ------------------------------------------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java | 12 ++++++------ yudao-admin-ui/src/utils/request.js | 7 +++++++ yudao-admin-ui/src/views/bpm/model/index.vue | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- yudao-admin-ui/src/views/bpm/model/modelEditor.vue | 1 + yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java | 29 +++++++++++++++++++++++++++++ 13 files changed, 382 insertions(+), 288 deletions(-) create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmDefinitionController.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/ModelConvert.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessService.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessServiceImpl.java create mode 100644 yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmDefinitionController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmDefinitionController.java new file mode 100644 index 0000000..39d628c --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmDefinitionController.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; + +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmDefinitionService; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Api(tags = "流程定义") +@RestController +@RequestMapping("/bpm/definition") +@Validated +public class BpmDefinitionController { + + @Resource + private BpmDefinitionService bpmDefinitionService; + + // TODO 芋艿:权限 + + @GetMapping ("/page") + @ApiOperation(value = "获得流程定义分页") + public CommonResult> getDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO) { + return success(bpmDefinitionService.getDefinitionPage(pageReqVO)); + } + + // TODO 芋艿:需要重写该方法 + @GetMapping(value = "/getStartForm") + public CommonResult getStartForm(@RequestParam("processKey") String processKey){ +// final ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). +// processDefinitionKey(processKey).latestVersion().singleResult(); +// processRuntime.processDefinition(processDefinition.getId()).getFormKey(); + // TODO 这样查似乎有问题??, 暂时写死 + return success("/flow/leave/apply"); + } + + @GetMapping ("/get-bpmn-xml") + @ApiOperation(value = "获得流程定义的 BPMN XML") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) + public CommonResult getDefinitionBpmnXML(@RequestParam("id") String id) { + String bpmnXML = bpmDefinitionService.getDefinitionBpmnXML(id); + return success(bpmnXML); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java deleted file mode 100644 index dfd3368..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/ProcessDefinitionController.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; - -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmDefinitionService; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Api(tags = "流程定义") -@RestController -@RequestMapping("/bpm/definition") -@Validated -public class ProcessDefinitionController { - - @Resource - private BpmDefinitionService bpmDefinitionService; - - // TODO 芋艿:权限 - - @GetMapping ("/page") - @ApiOperation(value = "获得流程定义分页") - public CommonResult> getDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO) { - return success(bpmDefinitionService.getDefinitionPage(pageReqVO)); - } - - // TODO 芋艿:需要重写该方法 - @GetMapping(value = "/getStartForm") - public CommonResult getStartForm(@RequestParam("processKey") String processKey){ -// final ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). -// processDefinitionKey(processKey).latestVersion().singleResult(); -// processRuntime.processDefinition(processDefinition.getId()).getFormKey(); - // TODO 这样查似乎有问题??, 暂时写死 - return success("/flow/leave/apply"); - } - - @GetMapping ("/get-bpmn-xml") - @ApiOperation(value = "获得流程定义的 BPMN XML") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) - public CommonResult getDefinitionBpmnXML(@RequestParam("id") String id) { - String bpmnXML = bpmDefinitionService.getDefinitionBpmnXML(id); - return success(bpmnXML); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java index 79b29cd..d4fe106 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java @@ -1,9 +1,11 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.model; import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; +import cn.iocoder.yudao.adminserver.modules.bpm.convert.model.BpmModelConvert; import cn.iocoder.yudao.adminserver.modules.bpm.service.model.BpmModelService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.io.IoUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -11,6 +13,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.io.IOException; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -23,7 +26,7 @@ public class BpmModelController { @Resource private BpmModelService bpmModelService; - // TODO @芋艿:权限 + // TODO @芋艿:权限、参数校验 @GetMapping("/page") @ApiOperation(value = "获得模型分页") @@ -46,6 +49,15 @@ public class BpmModelController { return success(bpmModelService.createModel(createRetVO)); } + @PostMapping("/import") + @ApiOperation(value = "导入模型") + public CommonResult importModel(BpmModeImportReqVO importReqVO) throws IOException { + BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO); + // 读取文件 + createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false)); + return success(bpmModelService.createModel(createReqVO)); + } + @PutMapping("/update") @ApiOperation(value = "修改模型") public CommonResult updateModel(@RequestBody BpmModelUpdateReqVO modelVO) { diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java new file mode 100644 index 0000000..80995cc --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotNull; + +@ApiModel("流程模型的导入 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmModeImportReqVO extends BpmModelBaseVO { + + @ApiModelProperty(value = "BPMN 文件", required = true) + @NotNull(message = "BPMN 文件不能为空") + private MultipartFile bpmnFile; + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java new file mode 100644 index 0000000..d52118d --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java @@ -0,0 +1,118 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.convert.model; + +import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.model.dto.BpmModelMetaInfoRespDTO; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import org.activiti.engine.impl.persistence.entity.SuspensionState; +import org.activiti.engine.repository.Deployment; +import org.activiti.engine.repository.Model; +import org.activiti.engine.repository.ProcessDefinition; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; + + +/** + * 流程定义 Convert + * + * @author yunlongn + */ +@Mapper +public interface BpmModelConvert { + + BpmModelConvert INSTANCE = Mappers.getMapper(BpmModelConvert.class); + + default List convertList(List list, Map formMap, + Map deploymentMap, + Map processDefinitionMap) { + return CollectionUtils.convertList(list, model -> { + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; + Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; + ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; + return convert(model, form, deployment, processDefinition); + }); + } + + default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) { + BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO(); + modelRespVO.setId(model.getId()); + modelRespVO.setName(model.getName()); + modelRespVO.setKey(model.getKey()); + modelRespVO.setCategory(model.getCategory()); + modelRespVO.setCreateTime(model.getCreateTime()); + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + if (metaInfo != null) { + modelRespVO.setDescription(metaInfo.getDescription()); + } + if (form != null) { + modelRespVO.setFormId(form.getId()); + modelRespVO.setFormName(form.getName()); + } + modelRespVO.setProcessDefinition(this.convert(processDefinition)); + if (modelRespVO.getProcessDefinition() != null) { + modelRespVO.getProcessDefinition().setSuspensionState(processDefinition.isSuspended() ? + SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); + modelRespVO.getProcessDefinition().setDeploymentTime(deployment.getDeploymentTime()); + } + return modelRespVO; + } + + default BpmModelRespVO convert(Model model) { + BpmModelRespVO modelRespVO = new BpmModelRespVO(); + modelRespVO.setId(model.getId()); + modelRespVO.setName(model.getName()); + modelRespVO.setKey(model.getKey()); + modelRespVO.setCategory(model.getCategory()); + modelRespVO.setCreateTime(model.getCreateTime()); + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + if (metaInfo != null) { + modelRespVO.setFormId(metaInfo.getFormId()); + modelRespVO.setDescription(metaInfo.getDescription()); + } + return modelRespVO; + } + + default BpmDefinitionCreateReqDTO convert2(Model model) { + BpmDefinitionCreateReqDTO createReqDTO = new BpmDefinitionCreateReqDTO(); + createReqDTO.setName(model.getName()); + createReqDTO.setKey(model.getKey()); + createReqDTO.setCategory(model.getCategory()); + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + if (metaInfo != null) { + createReqDTO.setDescription(metaInfo.getDescription()); + createReqDTO.setFormId(metaInfo.getFormId()); + } + return createReqDTO; + } + + default void copy(Model model, BpmModelCreateReqVO bean) { + model.setName(bean.getName()); + model.setKey(bean.getKey()); + model.setCategory(bean.getCategory()); + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); + } + + default void copy(Model model, BpmModelUpdateReqVO bean) { + model.setName(bean.getName()); + model.setCategory(bean.getCategory()); + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); + } + + default BpmModelMetaInfoRespDTO buildMetaInfo(String description, Long formId) { + BpmModelMetaInfoRespDTO metaInfo = new BpmModelMetaInfoRespDTO(); + metaInfo.setDescription(description); + metaInfo.setFormId(formId); + return metaInfo; + } + + BpmModelPageItemRespVO.ProcessDefinition convert(ProcessDefinition bean); + + BpmModelCreateReqVO convert(BpmModeImportReqVO bean); + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/ModelConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/ModelConvert.java deleted file mode 100644 index 3cd30fe..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/ModelConvert.java +++ /dev/null @@ -1,119 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.convert.model; - -import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.BpmModelCreateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.BpmModelPageItemRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.BpmModelRespVO; -import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.BpmModelUpdateReqVO; -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.model.dto.BpmModelMetaInfoRespDTO; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import org.activiti.engine.impl.persistence.entity.SuspensionState; -import org.activiti.engine.repository.Deployment; -import org.activiti.engine.repository.Model; -import org.activiti.engine.repository.ProcessDefinition; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; -import java.util.Map; - - -/** - * 流程定义 Convert - * - * @author yunlongn - */ -@Mapper -public interface ModelConvert { - - ModelConvert INSTANCE = Mappers.getMapper(ModelConvert.class); - - default List convertList(List list, Map formMap, - Map deploymentMap, - Map processDefinitionMap) { - return CollectionUtils.convertList(list, model -> { - BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; - Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; - ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; - return convert(model, form, deployment, processDefinition); - }); - } - - default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) { - BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO(); - modelRespVO.setId(model.getId()); - modelRespVO.setName(model.getName()); - modelRespVO.setKey(model.getKey()); - modelRespVO.setCategory(model.getCategory()); - modelRespVO.setCreateTime(model.getCreateTime()); - BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - if (metaInfo != null) { - modelRespVO.setDescription(metaInfo.getDescription()); - } - if (form != null) { - modelRespVO.setFormId(form.getId()); - modelRespVO.setFormName(form.getName()); - } - modelRespVO.setProcessDefinition(this.convert(processDefinition)); - if (modelRespVO.getProcessDefinition() != null) { - modelRespVO.getProcessDefinition().setSuspensionState(processDefinition.isSuspended() ? - SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); - modelRespVO.getProcessDefinition().setDeploymentTime(deployment.getDeploymentTime()); - } - return modelRespVO; - } - - default BpmModelRespVO convert(Model model) { - BpmModelRespVO modelRespVO = new BpmModelRespVO(); - modelRespVO.setId(model.getId()); - modelRespVO.setName(model.getName()); - modelRespVO.setKey(model.getKey()); - modelRespVO.setCategory(model.getCategory()); - modelRespVO.setCreateTime(model.getCreateTime()); - BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - if (metaInfo != null) { - modelRespVO.setFormId(metaInfo.getFormId()); - modelRespVO.setDescription(metaInfo.getDescription()); - } - return modelRespVO; - } - - default BpmDefinitionCreateReqDTO convert2(Model model) { - BpmDefinitionCreateReqDTO createReqDTO = new BpmDefinitionCreateReqDTO(); - createReqDTO.setName(model.getName()); - createReqDTO.setKey(model.getKey()); - createReqDTO.setCategory(model.getCategory()); - BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); - if (metaInfo != null) { - createReqDTO.setDescription(metaInfo.getDescription()); - createReqDTO.setFormId(metaInfo.getFormId()); - } - return createReqDTO; - } - - default void copy(Model model, BpmModelCreateReqVO bean) { - model.setName(bean.getName()); - model.setKey(bean.getKey()); - model.setCategory(bean.getCategory()); - model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); - } - - default void copy(Model model, BpmModelUpdateReqVO bean) { - model.setName(bean.getName()); - model.setCategory(bean.getCategory()); - model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); - } - - default BpmModelMetaInfoRespDTO buildMetaInfo(String description, Long formId) { - BpmModelMetaInfoRespDTO metaInfo = new BpmModelMetaInfoRespDTO(); - metaInfo.setDescription(description); - metaInfo.setFormId(formId); - return metaInfo; - } - - BpmModelPageItemRespVO.ProcessDefinition convert(ProcessDefinition bean); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessService.java deleted file mode 100644 index 432fb9f..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; - -import org.springframework.web.multipart.MultipartFile; - -/** - * 流程基础管理 - * - * @author ZJQ - * @date 2021/9/5 21:00 - */ -@Deprecated -public interface ProcessService { - - /** - * 上传流程文件,进行流程模型部署 - * @param multipartFile 上传文件 - */ - void deployProcess(MultipartFile multipartFile); - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessServiceImpl.java deleted file mode 100644 index 17dea81..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/ProcessServiceImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; - -import lombok.extern.slf4j.Slf4j; -import org.activiti.engine.RepositoryService; -import org.activiti.engine.repository.Deployment; -import org.activiti.engine.repository.ProcessDefinition; -import org.apache.commons.io.FilenameUtils; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import javax.annotation.Resource; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.zip.ZipInputStream; - -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_UPLOAD_FAILED; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; - -/** - * 流程基础管理 - * - * @author ZJQ - * @date 2021/9/5 21:04 - */ -@Service -@Slf4j -@Deprecated -public class ProcessServiceImpl implements ProcessService { - - private static final String BPMN20_XML = "bpmn20.xml"; - - @Resource - private RepositoryService repositoryService; - - /** - * 上传流程文件,进行流程部署 - * @param multipartFile 上传文件 - */ - @Override - public void deployProcess(MultipartFile multipartFile) { - String fileName = multipartFile.getOriginalFilename(); - try (InputStream inputStream = multipartFile.getInputStream()){ - Deployment deployment = getDeplymentByType(inputStream,fileName); - //获取部署成功的流程模型 - List processDefinitions = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list(); - processDefinitions.forEach((processDefinition)->{ - //设置线上部署流程模型名字 - String proDefId = processDefinition.getId(); - repositoryService.setProcessDefinitionCategory(proDefId,fileName); - log.info("流程文件部署成功,流程ID="+proDefId); - }); - } catch (IOException e) { - log.error("流程部署出现异常"+e); - } - } - - /** - * 根据上传文件类型对应实现不同方式的流程部署 - * @param inputStream 文件输入流 - * @param fileName 文件名 - * @return 文件部署流程 - */ - public Deployment getDeplymentByType(InputStream inputStream,String fileName){ - Deployment deployment; - String type = FilenameUtils.getExtension(fileName); - switch (type){ - case "bpmn": - String baseName = FilenameUtils.getBaseName(fileName); - deployment = repositoryService.createDeployment().addInputStream(baseName+"."+BPMN20_XML,inputStream).deploy(); - break; - case "png": - deployment = repositoryService.createDeployment().addInputStream(fileName,inputStream).deploy(); - break; - case "zip": - case "bar": - ZipInputStream zipInputStream = new ZipInputStream(inputStream); - deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy(); - break; - default: - throw exception(FILE_UPLOAD_FAILED); - } - return deployment; - } -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java index 1bc7d64..cbaea71 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.model.impl; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; -import cn.iocoder.yudao.adminserver.modules.bpm.convert.model.ModelConvert; +import cn.iocoder.yudao.adminserver.modules.bpm.convert.model.BpmModelConvert; import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmDefinitionService; import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; @@ -87,7 +87,7 @@ public class BpmModelServiceImpl implements BpmModelService { // 拼接结果 long modelCount = modelQuery.count(); - return new PageResult<>(ModelConvert.INSTANCE.convertList(models, formMap, deploymentMap, processDefinitionMap), modelCount); + return new PageResult<>(BpmModelConvert.INSTANCE.convertList(models, formMap, deploymentMap, processDefinitionMap), modelCount); } @Override @@ -96,7 +96,7 @@ public class BpmModelServiceImpl implements BpmModelService { if (model == null) { return null; } - BpmModelRespVO modelRespVO = ModelConvert.INSTANCE.convert(model); + BpmModelRespVO modelRespVO = BpmModelConvert.INSTANCE.convert(model); // 拼接 bpmn XML byte[] bpmnBytes = repositoryService.getModelEditorSource(id); modelRespVO.setBpmnXml(StrUtil.utf8Str(bpmnBytes)); @@ -115,7 +115,7 @@ public class BpmModelServiceImpl implements BpmModelService { // 创建流程定义 Model model = repositoryService.newModel(); - ModelConvert.INSTANCE.copy(model, createReqVO); + BpmModelConvert.INSTANCE.copy(model, createReqVO); // 保存流程定义 repositoryService.saveModel(model); // 添加 BPMN XML @@ -134,7 +134,7 @@ public class BpmModelServiceImpl implements BpmModelService { } // 修改流程定义 - ModelConvert.INSTANCE.copy(model, updateReqVO); + BpmModelConvert.INSTANCE.copy(model, updateReqVO); // 更新模型 repositoryService.saveModel(model); // 更新 BPMN XML @@ -155,7 +155,7 @@ public class BpmModelServiceImpl implements BpmModelService { } // 创建流程定义 - BpmDefinitionCreateReqDTO definitionCreateReqDTO = ModelConvert.INSTANCE.convert2(model) + BpmDefinitionCreateReqDTO definitionCreateReqDTO = BpmModelConvert.INSTANCE.convert2(model) .setBpmnXml(StrUtil.utf8Str(bpmnBytes)); String definitionId = bpmDefinitionService.createDefinition(definitionCreateReqDTO); diff --git a/yudao-admin-ui/src/utils/request.js b/yudao-admin-ui/src/utils/request.js index 4daa6e4..7b8c290 100644 --- a/yudao-admin-ui/src/utils/request.js +++ b/yudao-admin-ui/src/utils/request.js @@ -121,4 +121,11 @@ service.interceptors.response.use(res => { } ) +export function getBaseHeader() { + return { + 'Authorization': "Bearer " + getToken(), + 'tenant-id': Cookies.get('tenantId'), + } +} + export default service diff --git a/yudao-admin-ui/src/views/bpm/model/index.vue b/yudao-admin-ui/src/views/bpm/model/index.vue index 1bc6ca4..db9d8f9 100644 --- a/yudao-admin-ui/src/views/bpm/model/index.vue +++ b/yudao-admin-ui/src/views/bpm/model/index.vue @@ -28,6 +28,10 @@ 新建流程模型 + + 导入流程模型 + @@ -100,15 +104,75 @@ + + + + + +
+ 将文件拖到此处,或 + 点击上传 +
+
提示:仅允许导入“bpm”或“xml”格式文件!
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
diff --git a/yudao-admin-ui/src/views/bpm/model/modelEditor.vue b/yudao-admin-ui/src/views/bpm/model/modelEditor.vue index e995f22..5bc418f 100644 --- a/yudao-admin-ui/src/views/bpm/model/modelEditor.vue +++ b/yudao-admin-ui/src/views/bpm/model/modelEditor.vue @@ -61,6 +61,7 @@ export default { ...response.data, bpmnXml: undefined, // 清空 bpmnXml 属性 } + // this.controlForm.processId = response.data.key }) } }, diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java new file mode 100644 index 0000000..89660ac --- /dev/null +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.framework.common.util.io; + +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; + +import java.io.InputStream; + +/** + * IO 工具类,用于 {@link cn.hutool.core.io.IoUtil} 缺失的方法 + * + * @author 芋道源码 + */ +public class IoUtils { + + /** + * 从流中读取 UTF8 编码的内容 + * + * @param in 输入流 + * @param isClose 是否关闭 + * @return 内容 + * @throws IORuntimeException IO 异常 + */ + public static String readUtf8(InputStream in, boolean isClose) throws IORuntimeException { + return StrUtil.utf8Str(IoUtil.read(in, isClose)); + } + +} -- libgit2 0.21.4