feat(REQ-2752) - 增加任务维度的数据搜索
This commit is contained in:
parent
3a2c137503
commit
3318e09da2
@ -10,6 +10,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.HashMap;
|
||||
@ -46,6 +47,7 @@ public class BpmnProcessInstanceCreateDTO {
|
||||
* <h1 color=red>建议都传值,在安心筑中对应工作台 ID</h1>
|
||||
*/
|
||||
@ApiModelProperty(value = "发起的审批是属于哪个租户")
|
||||
@NotBlank(message = "工作台 ID 不能为空")
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
|
||||
@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -21,11 +20,11 @@ import java.util.List;
|
||||
public class InstanceSearchReqDTO extends BpmPageParam {
|
||||
|
||||
@ApiModelProperty(value = "审批人所属租户 ID")
|
||||
@NotBlank(message = "租户 ID 不能为空")
|
||||
// @NotBlank(message = "租户 ID 不能为空")
|
||||
private String tenantId;
|
||||
|
||||
@ApiModelProperty(value = "审批人所属单位 ID")
|
||||
@NotBlank(message = "单位 ID 不能为空")
|
||||
// @NotBlank(message = "单位 ID 不能为空")
|
||||
private String ouId;
|
||||
|
||||
@ApiModelProperty(value = "审批人自然人 ID")
|
||||
|
||||
@ -21,29 +21,31 @@ import java.util.List;
|
||||
public class TaskSearchReqDTO extends BpmPageParam {
|
||||
private static final long serialVersionUID = -1L;
|
||||
|
||||
@ApiModelProperty(value = "流程实例 ID")
|
||||
private String processInstanceId;
|
||||
/**
|
||||
* 搜索含有指定该租户的任务
|
||||
*/
|
||||
@ApiModelProperty(value = "租户 ID 集合")
|
||||
private List<String> tenantIds;
|
||||
@ApiModelProperty(value = "租户 ID")
|
||||
private String assigneeTenantId;
|
||||
|
||||
/**
|
||||
* 搜索含有指定单位的任务
|
||||
*/
|
||||
@ApiModelProperty(value = "单位 ID 集合")
|
||||
private List<String> ouIds;
|
||||
@ApiModelProperty(value = "单位 ID")
|
||||
private String assigneeOuId;
|
||||
|
||||
/**
|
||||
* 搜索含有指定自然人的任务
|
||||
*/
|
||||
@ApiModelProperty(value = "自然人 ID")
|
||||
private String personId;
|
||||
private String assigneePersonId;
|
||||
|
||||
/**
|
||||
* 搜索含有指定自然人名称的任务
|
||||
*/
|
||||
@ApiModelProperty(value = "自然人姓名集合")
|
||||
private String name;
|
||||
@ApiModelProperty(value = "自然人姓名")
|
||||
private String assigneeName;
|
||||
|
||||
/**
|
||||
* 与上面三个属性互斥
|
||||
|
||||
@ -0,0 +1,112 @@
|
||||
package cn.axzo.workflow.common.model.response.es;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 搜索 ES 的流程任务相关数据模型
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2024-10-12 21:53
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("搜索 ES 的流程任务相关数据模型")
|
||||
public class ProcessTaskDocumentVO {
|
||||
|
||||
/**
|
||||
* 任务 ID
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 归属的流程实例 ID
|
||||
*/
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 归属的流程实例定义 ID
|
||||
*/
|
||||
private String processDefinitionId;
|
||||
|
||||
/**
|
||||
* 任务定义 KEY,对应节点 ID
|
||||
*/
|
||||
private String taskDefinitionKey;
|
||||
|
||||
/**
|
||||
* 任务名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 任务状态:审批中/通过/驳回/转交/加签...
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 操作建议
|
||||
*/
|
||||
private String advice;
|
||||
|
||||
/**
|
||||
* 操作描述
|
||||
*/
|
||||
private String operationDesc;
|
||||
|
||||
/**
|
||||
* 流程实例的发起时间
|
||||
*/
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* 流程实例的结束时间
|
||||
*/
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 流程实例的持续时间 ms
|
||||
*/
|
||||
private Long duration;
|
||||
|
||||
/**
|
||||
* 归属租户,与 processInstance#tenantId 一致
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 审批人姓名
|
||||
*/
|
||||
private String assigneeName;
|
||||
|
||||
/**
|
||||
* 审批人自然人 ID
|
||||
*/
|
||||
private String assigneePersonId;
|
||||
|
||||
/**
|
||||
* 审批人所属单位 ID
|
||||
*/
|
||||
private String assigneeOuId;
|
||||
|
||||
/**
|
||||
* 审批人所属租户 ID
|
||||
*/
|
||||
private String assigneeTenantId;
|
||||
|
||||
/**
|
||||
* 审批方式:配置审批人/业务指定/业务触发(不含人)
|
||||
*/
|
||||
private String approvalMethod;
|
||||
|
||||
/**
|
||||
* 节点类型:审批节点/业务节点/评论节点/抄送节点
|
||||
*/
|
||||
private String nodeType;
|
||||
|
||||
/**
|
||||
* 节点模式:会签/或签
|
||||
*/
|
||||
private String nodeMode;
|
||||
}
|
||||
@ -33,7 +33,7 @@ public class ProcessInstanceDocument {
|
||||
* 流程实例 ID
|
||||
*/
|
||||
@IndexId(type = IdType.CUSTOMIZE)
|
||||
private String id;
|
||||
private String instanceId;
|
||||
|
||||
/**
|
||||
* 流程实例名称
|
||||
|
||||
@ -3,8 +3,6 @@ package cn.axzo.workflow.es.model;
|
||||
import lombok.Data;
|
||||
import org.dromara.easyes.annotation.IndexField;
|
||||
import org.dromara.easyes.annotation.IndexId;
|
||||
import org.dromara.easyes.annotation.IndexName;
|
||||
import org.dromara.easyes.annotation.Settings;
|
||||
import org.dromara.easyes.annotation.rely.FieldType;
|
||||
import org.dromara.easyes.annotation.rely.IdType;
|
||||
|
||||
@ -24,7 +22,7 @@ public class ProcessTaskDocument {
|
||||
* 任务 ID
|
||||
*/
|
||||
@IndexId(type = IdType.CUSTOMIZE)
|
||||
private String id;
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 归属的流程实例 ID
|
||||
|
||||
@ -2,9 +2,9 @@ package cn.axzo.workflow.es.service;
|
||||
|
||||
import cn.axzo.workflow.common.model.request.es.TaskSearchReqDTO;
|
||||
import cn.axzo.workflow.es.model.ProcessTaskDocument;
|
||||
import org.dromara.easyes.core.biz.EsPageInfo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 操作流程任务的 ES Service
|
||||
@ -41,4 +41,5 @@ public interface EsProcessTaskService {
|
||||
*/
|
||||
Integer insertBatch(String routing, String parentId, Collection<ProcessTaskDocument> processTaskDocuments);
|
||||
|
||||
List<ProcessTaskDocument> search(TaskSearchReqDTO dto);
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ public class AggregateProcessInstanceService {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
ProcessInstanceDocument processInstanceDocument = new ProcessInstanceDocument();
|
||||
processInstanceDocument.setId(hpi.getId());
|
||||
processInstanceDocument.setInstanceId(hpi.getId());
|
||||
processInstanceDocument.setProcessInstanceName(hpi.getName());
|
||||
processInstanceDocument.setBusinessKey(hpi.getBusinessKey());
|
||||
processInstanceDocument.setProcessDefinitionId(hpi.getProcessDefinitionId());
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
package cn.axzo.workflow.es.service.aggregation;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.es.TaskSearchReqDTO;
|
||||
import cn.axzo.workflow.common.model.response.es.ProcessTaskDocumentVO;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
||||
@ -76,7 +79,7 @@ public class AggregateProcessTaskService {
|
||||
List<ProcessTaskDocument> toEsProcessTaskDocuments = new ArrayList<>();
|
||||
logs.forEach(log -> {
|
||||
ProcessTaskDocument processTaskDocument = new ProcessTaskDocument();
|
||||
processTaskDocument.setId(log.getTaskId());
|
||||
processTaskDocument.setTaskId(log.getTaskId());
|
||||
processTaskDocument.setProcessInstanceId(log.getProcessInstanceId());
|
||||
processTaskDocument.setProcessDefinitionId(hpi.getProcessDefinitionId());
|
||||
processTaskDocument.setTaskDefinitionKey(log.getActivityId());
|
||||
@ -151,7 +154,7 @@ public class AggregateProcessTaskService {
|
||||
// List<Attachment> attachments = attachmentMap.getOrDefault(task.getId(), Collections.emptyList());
|
||||
|
||||
ProcessTaskDocument processTaskDocument = new ProcessTaskDocument();
|
||||
processTaskDocument.setId(task.getId());
|
||||
processTaskDocument.setTaskId(task.getId());
|
||||
processTaskDocument.setProcessInstanceId(task.getProcessInstanceId());
|
||||
processTaskDocument.setProcessDefinitionId(task.getProcessDefinitionId());
|
||||
processTaskDocument.setTaskDefinitionKey(task.getTaskDefinitionKey());
|
||||
@ -230,4 +233,8 @@ public class AggregateProcessTaskService {
|
||||
|| (Objects.equals(i.getAssignee(), OLD_TASK_ASSIGNEE_SKIP_FLAT) && Objects.equals(REJECTION_AUTO_COMPLETED.getDesc(), i.getDeleteReason()))
|
||||
).filter(i -> !(!Objects.equals(i.getAssignee(), OLD_TASK_ASSIGNEE_SKIP_FLAT) && Objects.equals(MI_END.getStatus(), i.getDeleteReason())));
|
||||
}
|
||||
|
||||
public List<ProcessTaskDocumentVO> search(TaskSearchReqDTO dto) {
|
||||
return BeanMapper.copyList(esProcessTaskService.search(dto), ProcessTaskDocumentVO.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +107,7 @@ public class EsProcessInstanceServiceImpl implements EsProcessInstanceService {
|
||||
if (!CollectionUtils.isEmpty(dto.getProcessInstanceIds())) {
|
||||
List<ProcessInstanceDocument> processInstanceDocuments = esProcessInstanceMapper
|
||||
.selectList(new LambdaEsQueryWrapper<ProcessInstanceDocument>()
|
||||
.in(FieldUtils.val(ProcessInstanceDocument::getId), dto.getProcessInstanceIds()));
|
||||
.in(FieldUtils.val(ProcessInstanceDocument::getInstanceId), dto.getProcessInstanceIds()));
|
||||
return new BpmPageResult<>(processInstanceDocuments, (long) processInstanceDocuments.size());
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ public class EsProcessInstanceServiceImpl implements EsProcessInstanceService {
|
||||
.eq(StringUtils.hasText(dto.getBusinessStatus()), FieldUtils.val(ProcessInstanceDocument::getBusinessStatus), dto.getBusinessStatus())
|
||||
// .matchPhrase(StringUtils.hasText(dto.getProcessInstanceName()), FieldUtils.val(ProcessInstanceDocument::getProcessInstanceName), dto.getProcessInstanceName())
|
||||
.like(StringUtils.hasText(dto.getProcessInstanceName()), FieldUtils.val(ProcessInstanceDocument::getProcessInstanceName), dto.getProcessInstanceName())
|
||||
.in(CollectionUtils.isEmpty(dto.getProcessInstanceIds()), FieldUtils.val(ProcessInstanceDocument::getId), dto.getProcessInstanceIds())
|
||||
.in(CollectionUtils.isEmpty(dto.getProcessInstanceIds()), FieldUtils.val(ProcessInstanceDocument::getInstanceId), dto.getProcessInstanceIds())
|
||||
// .routing(ES_FIXED_ROUTING)
|
||||
.orderByDesc(FieldUtils.val(ProcessInstanceDocument::getStartTime))
|
||||
;
|
||||
|
||||
@ -7,12 +7,13 @@ import cn.axzo.workflow.es.service.EsProcessTaskService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.easyes.annotation.IndexName;
|
||||
import org.dromara.easyes.core.biz.EsPageInfo;
|
||||
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 操作流程任务的 ES Service 实现
|
||||
@ -53,4 +54,16 @@ public class EsProcessTaskServiceImpl implements EsProcessTaskService {
|
||||
return esProcessTaskMapper.insertBatch(routing, parentId, processTaskDocuments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessTaskDocument> search(TaskSearchReqDTO dto) {
|
||||
LambdaEsQueryWrapper<ProcessTaskDocument> wrapper = new LambdaEsQueryWrapper<>();
|
||||
wrapper.eq(StringUtils.hasText(dto.getAssigneeOuId()), ProcessTaskDocument::getAssigneeOuId, dto.getAssigneeOuId())
|
||||
.eq(StringUtils.hasText(dto.getAssigneeTenantId()), ProcessTaskDocument::getAssigneeTenantId, dto.getAssigneeTenantId())
|
||||
.eq(StringUtils.hasText(dto.getAssigneePersonId()), ProcessTaskDocument::getAssigneePersonId, dto.getAssigneePersonId())
|
||||
.eq(StringUtils.hasText(dto.getAssigneeName()), ProcessTaskDocument::getAssigneeName, dto.getAssigneeName())
|
||||
.parentId(StringUtils.hasText(dto.getProcessInstanceId()), dto.getProcessInstanceId(), "process_instance_document")
|
||||
// .hasParent(StringUtils.hasText(dto.getProcessInstanceId()), "workflow_engine_test_process_instance_document", w -> w.eq(FieldUtils.val(ProcessInstanceDocument::getId), dto.getProcessInstanceId()))
|
||||
;
|
||||
return esProcessTaskMapper.selectList(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,12 +2,16 @@ package cn.axzo.workflow.server.controller.web.es;
|
||||
|
||||
import cn.axzo.workflow.client.feign.es.EsProcessInstanceApi;
|
||||
import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO;
|
||||
import cn.axzo.workflow.common.model.request.es.TaskSearchReqDTO;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.es.ProcessInstanceDocumentVO;
|
||||
import cn.axzo.workflow.common.model.response.es.ProcessTaskDocumentVO;
|
||||
import cn.axzo.workflow.es.service.aggregation.AggregateProcessInstanceService;
|
||||
import cn.axzo.workflow.es.service.aggregation.AggregateProcessTaskService;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
@ -15,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ES 搜索相关操作
|
||||
@ -29,6 +34,8 @@ import javax.annotation.Resource;
|
||||
public class ElasticSearchController implements EsProcessInstanceApi {
|
||||
@Resource
|
||||
private AggregateProcessInstanceService aggregateProcessInstanceService;
|
||||
@Autowired
|
||||
private AggregateProcessTaskService aggregateProcessTaskService;
|
||||
|
||||
/**
|
||||
* 审批数据搜索
|
||||
@ -38,8 +45,20 @@ public class ElasticSearchController implements EsProcessInstanceApi {
|
||||
*/
|
||||
@PostMapping("/instance/search")
|
||||
public CommonResponse<BpmPageResult<ProcessInstanceDocumentVO>> searchInstanceInEs(@Validated @RequestBody InstanceSearchReqDTO dto) {
|
||||
log.info("审批数据搜索 processInstanceSearch===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
log.info("审批数据搜索 searchInstanceInEs===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
return CommonResponse.success(aggregateProcessInstanceService.search(dto));
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批任务数据搜索
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/task/search")
|
||||
public CommonResponse<List<ProcessTaskDocumentVO>> searchTaskInEs(@Validated @RequestBody TaskSearchReqDTO dto) {
|
||||
log.info("审批任务数据搜索 searchTaskInEs===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
return CommonResponse.success(aggregateProcessTaskService.search(dto));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user