update - 测试表单引擎

This commit is contained in:
wangli 2024-11-05 14:47:12 +08:00
parent 629239e7dd
commit 92f4038a56
22 changed files with 351 additions and 98 deletions

View File

@ -13,8 +13,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum FormDefinitionRespCode implements IModuleRespCode {
FORM_DEFINITION_NOT_EXISTS("001", "表单定义内容转换出错, 建议重新修改表单定义后重试"),
FORM_DEFINITION_PARSER_ERROR("002", "表单定义内容解析出错"),
FORM_DEFINITION_EXISTS("001", ""),
;
private final String code;

View File

@ -15,6 +15,7 @@ import lombok.Getter;
public enum FormModelRespCode implements IModuleRespCode {
FORM_MODEL_NOT_EXISTS("001", "表单模型不存在"),
FORM_MODEL_ID_NOT_EXISTS("002", "表单模型ID【{}】不存在"),
FORM_MODEL_EXISTS("003", "表单模型已存在"),
;
private final String code;

View File

@ -0,0 +1,11 @@
package cn.axzo.workflow.common.constant;
/**
* 表单引擎相关的常量
*
* @author wangli
* @since 2024-11-05 10:20
*/
public interface FormConstants {
String DRAFT_CATEGORY = "draft";
}

View File

@ -1,7 +1,7 @@
package cn.axzo.workflow.common.model.request.bpmn.model;
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonModel;
import cn.axzo.workflow.common.model.request.form.FormJsonModel;
import cn.axzo.workflow.common.model.request.form.definition.FormFieldsDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,6 +11,7 @@ import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* 创建流程模型的入参模型
@ -45,9 +46,9 @@ public class BpmnModelCreateDTO implements Serializable {
@ApiModelProperty(value = "描述", notes = "存放与底层模型中 meta_info 中")
private String description;
@ApiModelProperty(value = "表单模型的 Json 结构")
@ApiModelProperty(value = "表单模型")
@Valid
private FormJsonModel formJsonModel;
private List<FormFieldsDTO> formFields;
@ApiModelProperty(value = "流程模型的 Json 结构")
@Valid

View File

@ -1,21 +0,0 @@
package cn.axzo.workflow.common.model.request.form;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 表单定义模型 JSON 结构
*
* @author wangli
* @since 2024-11-01 17:20
*/
@ApiModel("表单定义模型 JSON 结构")
@Data
@Accessors(chain = true)
public class FormJsonModel implements Serializable {
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,46 @@
package cn.axzo.workflow.common.model.request.form.definition;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 表单定义的更新入参模型
*
* @author wangli
* @since 2023/7/25 14:21
*/
@ApiModel("表单定义的更新入参模型")
@Data
public class FormDefinitionCreateDTO {
@ApiModelProperty(value = "表单名称")
@NotBlank(message = "表单名称不能为空")
public String name;
@ApiModelProperty(value = "版本号")
public Integer version;
@ApiModelProperty(value = "表单标识")
@NotBlank(message = "表单标识不能为空")
private String key;
@ApiModelProperty(value = "表单分类")
private String category;
private FormDefinitionDTO formDefinition;
@ApiModelProperty(value = "描述")
private String description;
private String tenantId = NO_TENANT_ID;
}

View File

@ -3,6 +3,8 @@ package cn.axzo.workflow.common.model.request.form.definition;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
@ -13,16 +15,24 @@ import java.util.List;
*/
@Data
public class FormDefinitionDTO {
@ApiModelProperty(value = "表单定义的key", hidden = true)
private String key;
@ApiModelProperty(value = "表单定义的名称", hidden = true)
/**
* 表单名称
*/
@ApiModelProperty(value = "表单定义的名称")
@NotBlank(message = "表单名称不能为空")
private String name;
@ApiModelProperty(value = "表单定义的版本", hidden = true)
private Integer version;
@ApiModelProperty(value = "")
private String key;
@ApiModelProperty(value = "")
private int version;
@ApiModelProperty(value = "表单定义的具体字段项", example = "[{'': '''}]")
@Valid
private List<FormFieldsDTO> fields;
private String description;
}

View File

@ -3,28 +3,24 @@ package cn.axzo.workflow.common.model.request.form.definition;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 表单定义的更新入参模型
*
* @author wangli
* @since 2023/7/25 14:21
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("表单定义的更新入参模型")
@Data
public class FormDefinitionUpdateDTO {
public class FormDefinitionUpdateDTO extends FormDefinitionCreateDTO{
@ApiModelProperty("表单模型ID")
@NotBlank(message = "表单模型 ID 不能为空")
public String formModelId;
@ApiModelProperty(value = "表单定义内容")
private FormDefinitionDTO formDefinition;
@ApiModelProperty(value = "租户")
// @NotBlank(message = "租户不能为空")
private String tenantId;
@ApiModelProperty(value = "表单定义 ID")
private String formModelId;
}

View File

@ -0,0 +1,42 @@
package cn.axzo.workflow.common.model.request.form.definition;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 表单定义的草稿模型
*
* @author wangli
* @since 2024-11-05 10:11
*/
@Data
public class FormDraftDefinitionDTO {
/**
* 模型的 KEY
*/
@ApiModelProperty(value = "模型的 KEY")
private String key;
/**
* 模型的分类
*/
@ApiModelProperty(value = "模型的分类")
private String category;
/**
* 租户 ID
*/
@ApiModelProperty(value = "租户 ID")
private String tenantId = NO_TENANT_ID;
/**
* 表单定义
*/
@ApiModelProperty(value = "表单定义内容")
@Valid
private FormDefinitionDTO formDefinition;
}

View File

@ -6,11 +6,14 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 表单定义中的字段相关属性入参模型
* <p>
* 本模型不支持变更增加属性只能放入 params
*
* @author wangli
* @since 2023/7/20 10:39
@ -45,14 +48,19 @@ public class FormFieldsDTO {
@ApiModelProperty(value = "表单字段是否只读,默认 false", example = "true or false")
private Boolean readOnly = false;
@ApiModelProperty(value = "表单字段是否隐藏,默认 false", example = "true or false")
private Boolean hidden = false;
@ApiModelProperty(value = "表单字段占位提示")
private String placeholder;
@ApiModelProperty(value = "该表单字段的其他扩展属性,期望 JSON 格式")
private Map<String, Object> params;
/**
* 以下属性不支持只能放入到 params
*/
// @ApiModelProperty(value = "表单字段是否隐藏,默认 false", example = "true or false")
// private Boolean hidden = false;
// @ApiModelProperty(value = "支持打印")
// private Boolean allowPrint = true;
}

View File

@ -1,11 +1,14 @@
package cn.axzo.workflow.common.model.request.form.model;
import cn.axzo.workflow.common.model.request.form.definition.FormFieldsDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* 表单模型创建入参模型
@ -17,7 +20,7 @@ import javax.validation.constraints.NotBlank;
@Data
public class FormModelCreateDTO {
@ApiModelProperty(value = "表单标识", example = "form_key", hidden = true)
@ApiModelProperty(value = "表单标识", example = "form_key")
@Length(max = 255, message = "表单标识最长只支持255个字符")
@NotBlank(message = "流程表单 key 不能为空")
private String key;
@ -30,6 +33,10 @@ public class FormModelCreateDTO {
@ApiModelProperty(value = "表单分类", example = "business_form_key")
private String category;
@ApiModelProperty(value = "表单模型的 Json 结构")
@Valid
private List<FormFieldsDTO> formFields;
@ApiModelProperty(value = "租户 ID", example = "1")
// @NotBlank(message = "租户 ID 不能为空")
private String tenantId;

View File

@ -0,0 +1,38 @@
package cn.axzo.workflow.core.repository.entity;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* 扩展的 bpmn 模型与表单模型的关系表
*
* @author wangli
* @since 2024-11-04 15:35
*/
@EqualsAndHashCode(callSuper = true)
@TableName(value = "ext_ax_bpmn_form_relation", autoResultMap = true)
@Data
@ToString(callSuper = true)
public class ExtAxBpmnFormRelation extends BaseEntity<ExtAxBpmnFormRelation> {
private static final long serialVersionUID = 1L;
/**
* bpmn 模型 ID
*/
private String bpmnModelId;
/**
* 发布的定义 ID
*/
private String formDefinitionId;
/**
* 创建者
*/
private Long createBy;
/**
* 更新者
*/
private Long updateBy;
}

View File

@ -0,0 +1,15 @@
package cn.axzo.workflow.core.repository.mapper;
import cn.axzo.workflow.core.repository.entity.ExtAxBpmnFormRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* bpmn 模型与表单模型的映射
*
* @author wangli
* @since 2024-11-04 15:38
*/
@Mapper
public interface ExtAxBpmnFormRelationMapper extends BaseMapper<ExtAxBpmnFormRelation> {
}

View File

@ -0,0 +1,12 @@
package cn.axzo.workflow.core.service;
/**
* ext_ax_bpmn_form_relation
*
* @author wangli
* @since 2024-11-04 15:34
*/
public interface ExtAxBpmnFormRelationService {
Long insert(String bpmnModelId, String formDefinitionId);
}

View File

@ -0,0 +1,34 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.repository.entity.ExtAxBpmnFormRelation;
import cn.axzo.workflow.core.repository.mapper.ExtAxBpmnFormRelationMapper;
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Objects;
/**
* bpmn 模型与表单模型的关联关系
*
* @author wangli
* @since 2024-11-04 15:39
*/
@Slf4j
@Service
public class ExtAxBpmnFormRelationServiceImpl implements ExtAxBpmnFormRelationService {
@Resource
private ExtAxBpmnFormRelationMapper bpmnFormRelationMapper;
@Override
public Long insert(String bpmnModelId, String formDefinitionId) {
ExtAxBpmnFormRelation relation = new ExtAxBpmnFormRelation();
relation.setBpmnModelId(bpmnModelId);
relation.setFormDefinitionId(formDefinitionId);
bpmnFormRelationMapper.insert(relation);
return relation.getId();
}
}

View File

@ -0,0 +1,11 @@
create table ext_ax_bpmn_form_relation
(
id bigint auto_increment comment '主键' primary key,
bpmn_model_id varchar(64) default '' not null comment 'bpmn模型id',
form_definition_id varchar(64) default '' not null comment '表单模型id',
update_by bigint default 0 not null comment '更新人',
update_at datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
create_at datetime default CURRENT_TIMESTAMP not null comment '创建时间',
create_by bigint default 0 not null comment '创建人',
is_delete bigint default 0 not null comment '是否删除:0否,1是'
);

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.form.service;
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO;

View File

@ -1,12 +1,12 @@
package cn.axzo.workflow.form.service.impl;
import cn.axzo.workflow.common.code.FormDefinitionRespCode;
import cn.axzo.workflow.common.code.FormModelRespCode;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionCreateDTO;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionDTO;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionUpdateDTO;
import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.form.service.FormDefinitionService;
import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -19,6 +19,10 @@ import javax.annotation.Nullable;
import javax.annotation.Resource;
import java.util.Objects;
import static cn.axzo.workflow.common.code.FormDefinitionRespCode.FORM_DEFINITION_EXISTS;
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_ID_NOT_EXISTS;
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS;
/**
* 表单定义 Service 实现
@ -41,18 +45,17 @@ public class FormDefinitionServiceImpl implements FormDefinitionService {
Model model = repositoryService.getModel(formModelId);
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_ID_NOT_EXISTS, formModelId);
throw new WorkflowEngineException(FORM_MODEL_ID_NOT_EXISTS, formModelId);
}
if (Objects.nonNull(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
FormDefinitionVO vo = null;
try {
vo = objectMapper.readValue(repositoryService.getModelEditorSource(model.getId()),
FormDefinitionVO.class);
} catch (Exception e) {
e.printStackTrace();
throw new WorkflowEngineException(FormDefinitionRespCode.FORM_DEFINITION_NOT_EXISTS);
throw new WorkflowEngineException(FORM_DEFINITION_EXISTS);
}
vo.setKey(model.getKey());
vo.setName(model.getName());
@ -68,23 +71,21 @@ public class FormDefinitionServiceImpl implements FormDefinitionService {
public void updateFormDefinition(FormDefinitionUpdateDTO dto) {
Model model = repositoryService.getModel(dto.getFormModelId());
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
throw new WorkflowEngineException(FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
}
if (Objects.nonNull(dto.getTenantId()) && !Objects.equals(model.getTenantId(), dto.getTenantId())) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
}
FormDefinitionDTO formDefinition = dto.getFormDefinition();
formDefinition.setKey(model.getKey());
formDefinition.setName(model.getName());
formDefinition.setVersion(model.getVersion());
// if (Objects.nonNull(dto.getTenantId()) && !Objects.equals(model.getTenantId(), dto.getTenantId())) {
// throw new WorkflowEngineException(FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
// }
FormDefinitionCreateDTO create = new FormDefinitionCreateDTO();
BeanUtil.copyProperties(dto, create);
try {
repositoryService.addModelEditorSource(model.getId(),
objectMapper.writeValueAsString(formDefinition).getBytes());
objectMapper.writeValueAsString(create).getBytes());
} catch (Exception e) {
throw new WorkflowEngineException(FormDefinitionRespCode.FORM_DEFINITION_PARSER_ERROR);
throw new WorkflowEngineException(FORM_DEFINITION_EXISTS);
}
// repositoryService.saveModel(model);
repositoryService.saveModel(model);
}
}

View File

@ -1,14 +1,13 @@
package cn.axzo.workflow.form.service.impl;
import cn.axzo.workflow.common.code.FormModelRespCode;
import cn.axzo.framework.jackson.utility.JSON;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.common.model.request.form.model.FormModelCreateDTO;
import cn.axzo.workflow.common.model.request.form.model.FormModelUpdateDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.form.model.FormModelBaseVO;
import cn.axzo.workflow.common.util.BpmnNativeQueryUtil;
import cn.axzo.workflow.form.service.FormModelService;
import cn.axzo.workflow.core.service.FormModelService;
import cn.axzo.workflow.form.service.converter.FormModelConverter;
import cn.hutool.json.JSONUtil;
import org.flowable.engine.ManagementService;
@ -25,14 +24,18 @@ import org.springframework.util.StringUtils;
import javax.annotation.Nullable;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS;
import static cn.axzo.workflow.common.constant.BpmnConstants.FORM_FILE_SUFFIX;
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_TYPE;
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_TYPE_FORM;
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.countSql;
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.sqlConnectors;
/**
* 表单模型 Service
@ -59,7 +62,7 @@ public class FormModelServiceImpl implements FormModelService {
.modelTenantId(dto.getTenantId())
.singleResult();
if (Objects.nonNull(persistModel)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
Map<String, String> metaInfoMap = new HashMap<>();
metaInfoMap.put(MODEL_TYPE, MODEL_TYPE_FORM);
@ -71,6 +74,7 @@ public class FormModelServiceImpl implements FormModelService {
model.setTenantId(dto.getTenantId());
model.setMetaInfo(JSONUtil.toJsonStr(metaInfoMap));
repositoryService.saveModel(model);
repositoryService.addModelEditorSource(model.getId(), JSON.toJSONString(dto.getFormFields()).getBytes(StandardCharsets.UTF_8));
return model.getId();
}
@ -83,7 +87,7 @@ public class FormModelServiceImpl implements FormModelService {
.modelTenantId(dto.getTenantId())
.singleResult();
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
model.setName(dto.getName());
model.setCategory(dto.getCategory());
@ -97,17 +101,17 @@ public class FormModelServiceImpl implements FormModelService {
.append(tableName);
NativeModelQuery query = repositoryService.createNativeModelQuery();
if (StringUtils.hasLength(dto.getKey())) {
baseQuerySql.append(BpmnNativeQueryUtil.sqlConnectors(baseQuerySql))
baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" KEY_ = #{key}");
query.parameter("key", dto.getKey());
}
if (StringUtils.hasLength(dto.getName())) {
baseQuerySql.append(BpmnNativeQueryUtil.sqlConnectors(baseQuerySql))
baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" NAME_ = #{name}");
query.parameter("name", dto.getName());
}
if (!CollectionUtils.isEmpty(dto.getCategories())) {
baseQuerySql.append(BpmnNativeQueryUtil.sqlConnectors(baseQuerySql))
baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" CATEGORY_ in (");
for (int i = 0; i < dto.getCategories().size(); i++) {
baseQuerySql.append("#{CATEGORY_").append(i).append("}");
@ -119,7 +123,7 @@ public class FormModelServiceImpl implements FormModelService {
baseQuerySql.append(")");
}
if (!CollectionUtils.isEmpty(dto.getTenantIds())) {
baseQuerySql.append(BpmnNativeQueryUtil.sqlConnectors(baseQuerySql))
baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" TENANT_ID_ in (");
for (int i = 0; i < dto.getTenantIds().size(); i++) {
baseQuerySql.append("#{tenantId").append(i).append("}");
@ -131,7 +135,7 @@ public class FormModelServiceImpl implements FormModelService {
baseQuerySql.append(")");
}
baseQuerySql.append(BpmnNativeQueryUtil.sqlConnectors(baseQuerySql))
baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" META_INFO_ like #{metaInfo}");
query.parameter("metaInfo", "%" + MODEL_TYPE_FORM + "%");
NativeModelQuery dateSqlQuery = query.sql(baseQuerySql.append(" order by LAST_UPDATE_TIME_ desc").toString());
@ -141,7 +145,7 @@ public class FormModelServiceImpl implements FormModelService {
return BpmPageResult.empty();
}
NativeModelQuery countSqlQuery = query.sql(BpmnNativeQueryUtil.countSql(baseQuerySql));
NativeModelQuery countSqlQuery = query.sql(countSql(baseQuerySql));
return new BpmPageResult<>(formModelConverter.toVos(models), countSqlQuery.count());
}
@ -149,10 +153,10 @@ public class FormModelServiceImpl implements FormModelService {
public FormModelBaseVO getById(String formModelId, @Nullable String tenantId) {
Model model = repositoryService.getModel(formModelId);
if (Objects.isNull(model) || !model.getMetaInfo().contains(MODEL_TYPE_FORM)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
if (Objects.nonNull(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
return formModelConverter.toVo(model);
}
@ -166,7 +170,7 @@ public class FormModelServiceImpl implements FormModelService {
Model model = modelQuery.modelKey(formModelKey).singleResult();
if (Objects.isNull(model) || !model.getMetaInfo().contains(MODEL_TYPE_FORM)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
return formModelConverter.toVo(model);
}
@ -176,10 +180,10 @@ public class FormModelServiceImpl implements FormModelService {
public String deployFormModelById(String formModelId, String tenantId) {
Model model = repositoryService.getModel(formModelId);
if (Objects.isNull(model) || !model.getMetaInfo().contains(MODEL_TYPE_FORM)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
if (Objects.nonNull(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
FormDeployment deploy = formRepositoryService.createDeployment()
.addFormDefinition(model.getKey() + FORM_FILE_SUFFIX,
@ -201,7 +205,7 @@ public class FormModelServiceImpl implements FormModelService {
}
Model model = modelQuery.singleResult();
if (Objects.isNull(model) || !model.getMetaInfo().contains(MODEL_TYPE_FORM)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
return deployFormModelById(model.getId(), tenantId);
@ -211,10 +215,10 @@ public class FormModelServiceImpl implements FormModelService {
public void deleteFormModelById(String formModelId, @Nullable String tenantId) {
Model model = repositoryService.getModel(formModelId);
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
if (Objects.nonNull(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
repositoryService.deleteModel(formModelId);
}
@ -227,7 +231,7 @@ public class FormModelServiceImpl implements FormModelService {
}
Model model = modelQuery.singleResult();
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FormModelRespCode.FORM_MODEL_NOT_EXISTS);
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
repositoryService.deleteModel(model.getId());
}

View File

@ -5,11 +5,15 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionCreateDTO;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelDetailVO;
import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelExtVO;
import cn.axzo.workflow.core.service.BpmnProcessModelService;
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
import cn.axzo.workflow.core.service.ExtAxReModelService;
import cn.axzo.workflow.form.service.FormDefinitionService;
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
import cn.azxo.framework.common.model.CommonResponse;
@ -45,10 +49,13 @@ import static cn.azxo.framework.common.model.CommonResponse.success;
@ErrorReporter
@Validated
public class BpmnProcessModelController implements ProcessModelApi {
@Resource
private BpmnProcessModelService bpmnProcessModelService;
@Resource
private FormDefinitionService formDefinitionService;
@Resource
private ExtAxBpmnFormRelationService bpmnFormRelationService;
@Resource
private ExtAxReModelService reModelService;
/**
@ -65,7 +72,7 @@ public class BpmnProcessModelController implements ProcessModelApi {
/**
* 创建流程模型
* return modelId的主键
* return bpmnModelId的主键
*/
@Operation(summary = "创建流程模型")
@PostMapping("/create")
@ -73,8 +80,22 @@ public class BpmnProcessModelController implements ProcessModelApi {
@RepeatSubmit
public CommonResponse<String> create(@Validated @RequestBody BpmnModelCreateDTO dto) {
log.info("创建流程createBpmModel===>>>参数:{}", JSONUtil.toJsonStr(dto));
String result = bpmnProcessModelService.createBpmModel(dto);
return success(result);
String bpmnModelId = bpmnProcessModelService.createBpmModel(dto);
// FormDefinitionCreateDTO createDto = new FormDefinitionCreateDTO();
// createDto.setKey(dto.getKey());
// createDto.setName(dto.getName());
// createDto.setCategory(dto.getCategory());
// FormDefinitionDTO formDefinitionDTO = new FormDefinitionDTO();
// formDefinitionDTO.setName(dto.getName());
// formDefinitionDTO.setFields(dto.getFormFields());
// createDto.setFormDefinition(formDefinitionDTO);
// createDto.setTenantId(dto.getTenantId());
//
// String formDefinitionId = formDefinitionService.createFormDefinition(createDto);
//
// bpmnFormRelationService.insert(bpmnModelId, formDefinitionId);
return success(bpmnModelId);
}
/**
@ -138,6 +159,21 @@ public class BpmnProcessModelController implements ProcessModelApi {
public CommonResponse<String> update(@Validated @RequestBody BpmnModelUpdateDTO dto) {
log.info("修改流程信息updateBpmModel===>>> 模型 ID: {}", dto.getProcessModelId());
bpmnProcessModelService.updateBpmModel(dto);
// FormDefinitionCreateDTO formDefinitionDto = new FormDefinitionCreateDTO();
// formDefinitionDto.setName(dto.getName());
// formDefinitionDto.setKey(dto.getKey());
// formDefinitionDto.setCategory(dto.getCategory());
// formDefinitionDto.setTenantId(dto.getTenantId());
//
// FormDefinitionDTO definition = new FormDefinitionDTO();
// definition.setName(dto.getName());
// definition.setFields(dto.getFormFields());
// formDefinitionDto.setFormDefinition(definition);
//
// String formDefinitionId = formDefinitionService.createFormDefinition(formDefinitionDto);
//
// bpmnFormRelationService.insert(dto.getProcessModelId(), formDefinitionId);
return success(dto.getProcessModelId());
}
@ -158,6 +194,8 @@ public class BpmnProcessModelController implements ProcessModelApi {
modelTenantId, operator);
BpmnTaskDelegateAssigner assignee = JSON.parseObject(operator, BpmnTaskDelegateAssigner.class);
String result = bpmnProcessModelService.deployBpmModelById(processModelId, modelTenantId, assignee);
// String formModelId = bpmnFormRelationService.getFormModelId(processModelId);
// formModelService.deployFormModelById(formModelId, modelTenantId);
return success(result);
}

View File

@ -2,8 +2,8 @@ package cn.axzo.workflow.server.controller.web.form;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionUpdateDTO;
import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
import cn.axzo.workflow.core.service.FormModelService;
import cn.axzo.workflow.form.service.FormDefinitionService;
import cn.axzo.workflow.form.service.FormModelService;
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
@ -53,7 +53,7 @@ public class FormDefinitionController {
@Operation(summary = "通过表单模型 ID 获取表单定义内容")
@GetMapping("/get")
public CommonResponse<FormDefinitionVO> get(@NotBlank(message = "模型 ID 不能为空") @RequestParam String formModelId,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(formDefinitionService.get(formModelId, tenantId));
}

View File

@ -5,7 +5,7 @@ import cn.axzo.workflow.common.model.request.form.model.FormModelCreateDTO;
import cn.axzo.workflow.common.model.request.form.model.FormModelUpdateDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.form.model.FormModelBaseVO;
import cn.axzo.workflow.form.service.FormModelService;
import cn.axzo.workflow.core.service.FormModelService;
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.annotations.ApiParam;
@ -67,7 +67,7 @@ public class FormModelController {
@DeleteMapping("/delete")
public CommonResponse<Boolean> deleteById(
@ApiParam(name = "表单模型 ID") @NotBlank(message = "表单模型 ID 不能为空") @RequestParam String formModelId,
@RequestParam(required = false) String tenantId) {
@RequestParam String tenantId) {
formModelService.deleteFormModelById(formModelId, tenantId);
return success(true);
}
@ -76,7 +76,7 @@ public class FormModelController {
@DeleteMapping("/deleteByKey")
public CommonResponse<Boolean> deleteByKey(
@ApiParam(name = "表单模型 KEY") @NotBlank(message = "表单模型 KEY 不能为空") @RequestParam String formModelKey,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
formModelService.deployFormModelByKey(formModelKey, tenantId);
return success(true);
}
@ -84,28 +84,28 @@ public class FormModelController {
@Operation(summary = "获取指定表单模型 ID 的内容")
@GetMapping("/get")
public CommonResponse<FormModelBaseVO> getById(@NotBlank(message = "表单模型 ID 不能为空") @RequestParam String formModelId,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(formModelService.getById(formModelId, tenantId));
}
@Operation(summary = "获取指定表单模型 KEy 的内容")
@GetMapping("/getByKey")
public CommonResponse<FormModelBaseVO> getByKey(@NotBlank(message = "表单模型 KEY 不能为空") @RequestParam String formModelKey,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(formModelService.getByKey(formModelKey, tenantId));
}
@Operation(summary = "通过表单模型 ID 发布")
@PostMapping("/deploy")
public CommonResponse<String> deployById(@NotBlank(message = "模型 ID 不能为空") @RequestParam String formModelId,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(formModelService.deployFormModelById(formModelId, tenantId));
}
@Operation(summary = "通过表单模型 KEY 发布")
@PostMapping("/deployByKey")
public CommonResponse<String> deployByKey(@NotBlank(message = "模型 KEY 不能为空") @RequestParam String formModelKey,
@RequestParam(required = false) String tenantId) {
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(formModelService.deployFormModelByKey(formModelKey, tenantId));
}