Commit c4950e1b135d31f6678af3e9ca6fe8a47cbf3291

Authored by YunaiV
1 parent e863b603

BPM 模型重构 1:新建流程时,只填写 name、description、key

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java
... ... @@ -56,7 +56,7 @@ public class BpmModelController {
56 56 public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException {
57 57 BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO);
58 58 // 读取文件
59   - createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false));
  59 +// createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false));
60 60 return success(bpmModelService.createModel(createReqVO));
61 61 }
62 62  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelCreateReqVO.java
... ... @@ -10,12 +10,17 @@ import javax.validation.constraints.NotEmpty;
10 10  
11 11 @ApiModel("流程模型的创建 Request VO")
12 12 @Data
13   -@EqualsAndHashCode(callSuper = true)
14   -@ToString(callSuper = true)
15   -public class BpmModelCreateReqVO extends BpmModelBaseVO {
  13 +public class BpmModelCreateReqVO {
16 14  
17   - @ApiModelProperty(value = "BPMN XML", required = true)
18   - @NotEmpty(message = "BPMN XML 不能为空")
19   - private String bpmnXml;
  15 + @ApiModelProperty(value = "流程标识", required = true, example = "process_yudao")
  16 + @NotEmpty(message = "流程标识不能为空")
  17 + private String key;
  18 +
  19 + @ApiModelProperty(value = "流程名称", required = true, example = "芋道")
  20 + @NotEmpty(message = "流程名称不能为空")
  21 + private String name;
  22 +
  23 + @ApiModelProperty(value = "流程描述", example = "我是描述")
  24 + private String description;
20 25  
21 26 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelUpdateReqVO.java
... ... @@ -18,8 +18,19 @@ public class BpmModelUpdateReqVO extends BpmModelBaseVO {
18 18 @NotEmpty(message = "编号不能为空")
19 19 private String id;
20 20  
  21 + @ApiModelProperty(value = "流程名称", example = "芋道")
  22 + private String name;
  23 +
  24 + @ApiModelProperty(value = "流程描述", example = "我是描述")
  25 + private String description;
  26 +
  27 + @ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1")
  28 + private String category;
  29 +
  30 + @ApiModelProperty(value = "表单编号", example = "1024")
  31 + private Long formId;
  32 +
21 33 @ApiModelProperty(value = "BPMN XML", required = true)
22   - @NotEmpty(message = "BPMN XML 不能为空")
23 34 private String bpmnXml;
24 35  
25 36 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java
... ... @@ -95,8 +95,7 @@ public interface BpmModelConvert {
95 95 default void copy(Model model, BpmModelCreateReqVO bean) {
96 96 model.setName(bean.getName());
97 97 model.setKey(bean.getKey());
98   - model.setCategory(bean.getCategory());
99   - model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId())));
  98 + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), null)));
100 99 }
101 100  
102 101 default void copy(Model model, BpmModelUpdateReqVO bean) {
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.bpm.enums.definition;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * BPM 模型的表单类型的枚举
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +@Getter
  12 +@AllArgsConstructor
  13 +public enum BpmModelFormTypeEnum {
  14 +
  15 + NORMAL(10, "流程表单"), // 对应 BpmFormDO
  16 + CUSTOM(20, "业务表单") // 业务自己定义的表单,自己进行数据的存储
  17 + ;
  18 +
  19 + private final Integer type;
  20 + private final String desc;
  21 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum;
3 4 import lombok.Data;
4 5  
5 6 /**
... ... @@ -16,8 +17,23 @@ public class BpmModelMetaInfoRespDTO {
16 17 */
17 18 private String description;
18 19 /**
  20 + * 表单类型
  21 + */
  22 + private Long formType;
  23 + /**
19 24 * 表单编号
  25 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时
20 26 */
21 27 private Long formId;
  28 + /**
  29 + * 自定义表单的提交路径,使用 Vue 的路由地址
  30 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时
  31 + */
  32 + private String formCustomSubmitPath;
  33 + /**
  34 + * 自定义表单的查看路径,使用 Vue 的路由地址
  35 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时
  36 + */
  37 + private String formCustomViewPath;
22 38  
23 39 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java
... ... @@ -121,15 +121,12 @@ public class BpmModelServiceImpl implements BpmModelService {
121 121 BpmModelConvert.INSTANCE.copy(model, createReqVO);
122 122 // 保存流程定义
123 123 repositoryService.saveModel(model);
124   - // 添加 BPMN XML
125   - repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(createReqVO.getBpmnXml()));
126 124 return model.getId();
127 125 }
128 126  
129 127 @Override
130 128 @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务
131 129 public void updateModel(BpmModelUpdateReqVO updateReqVO) {
132   - checkKeyNCName(updateReqVO.getKey());
133 130 // 校验流程模型存在
134 131 Model model = repositoryService.getModel(updateReqVO.getId());
135 132 if (model == null) {
... ...
yudao-admin-server/src/main/resources/application-dev.yaml
... ... @@ -63,12 +63,12 @@ spring:
63 63  
64 64 # 工作流 Activiti 配置
65 65 activiti:
66   - #1.false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
67   - #2.true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
68   - #3.create_drop:启动时自动创建表,关闭时自动删除表
69   - #4.drop_create:启动时,删除旧表,再创建新表
  66 + # 1. false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
  67 + # 2. true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
  68 + # 3. create_drop:启动时自动创建表,关闭时自动删除表
  69 + # 4. drop_create:启动时,删除旧表,再创建新表
70 70 database-schema-update: true
71   - #activiti7默认不生成历史信息表,需手动设置开启
  71 + # activiti7 默认不生成历史信息表,需手动设置开启
72 72 db-history-used: true
73 73 check-process-definitions: true
74 74 #full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数
... ...
yudao-admin-ui/src/views/bpm/model/index.vue
... ... @@ -109,51 +109,50 @@
109 109 <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" />
110 110 </el-dialog>
111 111  
  112 + <!-- 对话框(添加) -->
  113 + <el-dialog title="新建模型" :visible.sync="open" width="500px" append-to-body>
  114 + <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  115 + <el-form-item label="流程标识" prop="key">
  116 + <el-input v-model="form.key" placeholder="请输入流标标识" style="width: 350px;" />
  117 + <el-tooltip class="item" effect="light" content="新建后,流程标识不可修改!" placement="top">
  118 + <i style="padding-left: 5px;" class="el-icon-question" />
  119 + </el-tooltip>
  120 + </el-form-item>
  121 + <el-form-item label="流程名称" prop="name">
  122 + <el-input v-model="form.name" placeholder="请输入流程名称" clearable />
  123 + </el-form-item>
  124 + <el-form-item label="流程描述" prop="description">
  125 + <el-input type="textarea" v-model="form.description" clearable />
  126 + </el-form-item>
  127 + </el-form>
  128 + <div slot="footer" class="dialog-footer">
  129 + <el-button type="primary" @click="submitForm">确 定</el-button>
  130 + <el-button @click="cancel">取 消</el-button>
  131 + </div>
  132 + </el-dialog>
  133 +
112 134 <!-- 用户导入对话框 -->
113 135 <el-dialog title="导入流程模型" :visible.sync="upload.open" width="400px" append-to-body>
114   - <el-upload
115   - ref="upload"
116   - :limit="1"
117   - accept=".bpmn, .xml"
118   - :headers="upload.headers"
119   - :action="upload.url"
120   - :disabled="upload.isUploading"
121   - :on-progress="handleFileUploadProgress"
122   - :on-success="handleFileSuccess"
123   - :auto-upload="false"
124   - name="bpmnFile"
125   - :data="upload.form"
126   - drag
127   - >
  136 + <el-upload ref="upload" :limit="1" accept=".bpmn, .xml" :headers="upload.headers" :action="upload.url"
  137 + :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess"
  138 + :auto-upload="false" name="bpmnFile" :data="upload.form" drag>
128 139 <i class="el-icon-upload"></i>
129 140 <div class="el-upload__text">
130 141 将文件拖到此处,或
131 142 <em>点击上传</em>
132 143 </div>
133 144 <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“bpm”或“xml”格式文件!</div>
134   -
135   - <!-- <div class="el-upload__tip" slot="tip">-->
136   -<!-- 流程名称:<el-input v-model="upload.name"/>-->
137   -<!-- 流程分类:<el-input v-model="upload.category"/>-->
138   -<!-- </div>-->
139 145 <div class="el-upload__tip" slot="tip">
140 146 <el-form ref="uploadForm" size="mini" label-width="90px" :model="upload.form" :rules="upload.rules" @submit.native.prevent>
141 147 <el-form-item label="流程标识" prop="key">
142   - <el-input v-model="upload.form.key" placeholder="请输入流标标识" />
  148 + <el-input v-model="upload.form.key" placeholder="请输入流标标识" style="width: 250px;" />
  149 + <el-tooltip class="item" effect="light" content="新建后,流程标识不可修改!" placement="top">
  150 + <i style="padding-left: 5px;" class="el-icon-question" />
  151 + </el-tooltip>
143 152 </el-form-item>
144 153 <el-form-item label="流程名称" prop="name">
145 154 <el-input v-model="upload.form.name" placeholder="请输入流程名称" clearable />
146 155 </el-form-item>
147   - <el-form-item label="流程分类" prop="category">
148   - <el-select v-model="upload.form.category" placeholder="请选择流程分类" clearable style="width: 100%">
149   - <el-option v-for="dict in categoryDictDatas" :key="dict.value" :label="dict.label" :value="dict.value"/>
150   - </el-select>
151   - </el-form-item>
152   - <el-form-item label="流程表单" prop="formId">
153   - <el-select v-model="upload.form.formId" placeholder="请选择流程表单,非必选哟!" clearable style="width: 100%">
154   - <el-option v-for="form in forms" :key="form.id" :label="form.name" :value="form.id"/>
155   - </el-select>
156   - </el-form-item>
157 156 <el-form-item label="流程描述" prop="description">
158 157 <el-input type="textarea" v-model="upload.form.description" clearable />
159 158 </el-form-item>
... ... @@ -169,14 +168,12 @@
169 168 </template>
170 169  
171 170 <script>
172   -import {deleteModel, deployModel, getModelPage, getModel, updateModelState} from "@/api/bpm/model";
  171 +import {deleteModel, deployModel, getModelPage, getModel, updateModelState, createModel} from "@/api/bpm/model";
173 172 import {DICT_TYPE, getDictDatas} from "@/utils/dict";
174 173 import {getForm, getSimpleForms} from "@/api/bpm/form";
175 174 import {decodeFields} from "@/utils/formGenerator";
176 175 import Parser from '@/components/parser/Parser'
177   -import {getToken} from "@/utils/auth";
178 176 import {getBaseHeader} from "@/utils/request";
179   -import {addUser, updateUser} from "@/api/system/user";
180 177  
181 178 export default {
182 179 name: "model",
... ... @@ -212,6 +209,15 @@ export default {
212 209 fields: []
213 210 },
214 211  
  212 + // 流程表单
  213 + open: false,
  214 + form: {},
  215 + // 表单校验
  216 + rules: {
  217 + key: [{ required: true, message: "流程标识不能为空", trigger: "blur" }],
  218 + name: [{ required: true, message: "流程名称不能为空", trigger: "blur" }],
  219 + },
  220 +
215 221 // 流程导入参数
216 222 upload: {
217 223 // 是否显示弹出层(用户导入)
... ... @@ -228,7 +234,6 @@ export default {
228 234 rules: {
229 235 key: [{ required: true, message: "流程标识不能为空", trigger: "blur" }],
230 236 name: [{ required: true, message: "流程名称不能为空", trigger: "blur" }],
231   - category: [{ required: true, message: "流程分类不能为空", trigger: "blur" }],
232 237 },
233 238 },
234 239 // 流程表单的下拉框的数据
... ... @@ -256,10 +261,19 @@ export default {
256 261 }
257 262 );
258 263 },
  264 + /** 取消按钮 */
  265 + cancel() {
  266 + this.open = false;
  267 + this.reset();
  268 + },
259 269 // 表单重置
260 270 reset() {
261   - this.bpmnData = {}
262   - this.bpmnXML = ""
  271 + this.form = {
  272 + key: undefined,
  273 + name: undefined,
  274 + description: undefined
  275 + };
  276 + this.resetForm("form");
263 277 },
264 278 /** 搜索按钮操作 */
265 279 handleQuery() {
... ... @@ -274,9 +288,8 @@ export default {
274 288 },
275 289 /** 新增按钮操作 */
276 290 handleAdd() {
277   - this.$router.push({
278   - path:"/bpm/manager/model/edit"
279   - });
  291 + this.reset();
  292 + this.open = true;
280 293 },
281 294 /** 修改按钮操作 */
282 295 handleUpdate(row) {
... ... @@ -287,6 +300,19 @@ export default {
287 300 }
288 301 });
289 302 },
  303 + /** 提交按钮 */
  304 + submitForm() {
  305 + this.$refs["form"].validate(valid => {
  306 + if (!valid) {
  307 + return;
  308 + }
  309 + createModel(this.form).then(response => {
  310 + this.msgSuccess("新增成功");
  311 + this.open = false;
  312 + this.getList();
  313 + });
  314 + });
  315 + },
290 316 /** 删除按钮操作 */
291 317 handleDelete(row) {
292 318 const that = this;
... ...