feat(REQ-3004) - 详细描述获取表单数据的 API

This commit is contained in:
wangli 2024-11-19 17:50:34 +08:00
parent 805ae9ae72
commit 1111b0c6ec
5 changed files with 75 additions and 6 deletions

View File

@ -3,10 +3,8 @@ package cn.axzo.workflow.client.feign.manage;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.request.form.definition.FormDefinitionSearchDTO;
import cn.axzo.workflow.common.model.request.form.definition.StartFormSearchDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormInstanceSearchDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormSearchDTO;
import cn.axzo.workflow.common.model.response.form.FormVO;
import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
@ -38,6 +36,15 @@ public interface FormInstanceApi {
@InvokeMode(SYNC)
CommonResponse<FormDefinitionVO> getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
/**
* 查询指定审批实例的表单模型和数据
* <p>
* dto 中的 processInstanceId taskId至少有一个属性有值一般建议直接使用实例 ID
* 当传入 taskId 将只查询该任务绑定的表单模型和数据
*
* @param dto
* @return
*/
@PostMapping("/api/form/instance/render")
@InvokeMode(SYNC)
CommonResponse<FormInstanceVO> getFormInstance(@Validated @RequestBody FormDetailDTO dto);

View File

@ -32,7 +32,8 @@ public class FormDetailDTO {
private String taskId;
/**
* 访问表单的人
* 访问表单的人该属性内部主要用于计算表单字段权限
* 支持为 null则表单所有字段默认全部隐藏
*/
@ApiModelProperty(value = "访问表单的人")
private BpmnTaskDelegateAssigner assigner;

View File

@ -1,6 +1,5 @@
package cn.axzo.workflow.common.model.response.form.instance;
import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
import cn.axzo.workflow.common.model.response.form.model.FormModelVO;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@ -16,16 +15,64 @@ import java.util.Date;
@ApiModel("表单实例的响应模型")
@Data
public class FormInstanceVO {
/**
* 表单定义 ID
*/
private String id;
/**
* 表单定义名称
*/
private String name;
/**
* 表单唯一标识
*/
private String key;
/**
* 表单定义版本
*/
private Integer version;
/**
* 表单模型数据
*/
private FormModelVO formModel;
/**
* 表单实例 ID
*/
private String formInstanceId;
/**
* 表单数据操作人,格式"ouId|personId"
* 示例数据"5144|43893"
*/
private String submittedBy;
/**
* 表单提交时间
*/
private Date submittedDate;
/**
* 这个表单数据关联的任务如果是发起时提交的表单 taskId 为空
*/
private String taskId;
/**
* 流程实例 ID
*/
private String processInstanceId;
/**
* 流程定义 ID
*/
private String processDefinitionId;
/**
* 租户 ID
*/
private String tenantId;
}

View File

@ -15,9 +15,21 @@ import java.util.List;
@ApiModel("表单模型响应模型")
@Data
public class FormModelVO {
/**
* 表单模型 ID
*/
private String id;
/**
* 表单模型名称
*/
private String name;
/**
* 表单模型标识
*/
private String key;
private Integer version;
/**
* 表单字段
*/
private List<FormFieldDTO> fields;
}

View File

@ -38,7 +38,6 @@ import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_COMPLETE_FAIL_NOT_EXISTS;
import static cn.axzo.workflow.common.code.FormInstanceRespCode.FORM_FIELD_NOT_FOUND;
import static cn.axzo.workflow.common.code.FormInstanceRespCode.FORM_PARAM_ERROR;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_DEFAULT_VALUE;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_EDITABLE;
@ -174,7 +173,7 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
// 默认全字段都是隐藏
ExtAxProcessLog starterLog = logs.stream().filter(e -> Objects.equals(NODE_STARTER.getType(), e.getActivityId()))
.findFirst().orElse(new ExtAxProcessLog());
starterLog.getFormFieldPermissionConf().forEach(perm->{
starterLog.getFormFieldPermissionConf().forEach(perm -> {
// 防预编程, 强制设置为 hidden
perm.setRequired(false);
perm.setEditable(false);
@ -198,6 +197,9 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
private List<String> collectActivityIds(List<ExtAxProcessLog> logs) {
List<String> activityIds = new ArrayList<>();
if (Objects.isNull(assigner)) {
return activityIds;
}
if (!CollectionUtils.isEmpty(logs)) {
Map<String, List<BpmnTaskDelegateAssigner>> nodeUserMap = rebuildToNodeUserMap(logs);