feat(taskflow): 添加作业流程按组别分组功能

- 在 TaskFlowCO、TaskFlowDO 和 TaskFlowE 中新增 groupName 字段用于标识按钮组别
- 修改 getFlowByWorkType 方法返回 TaskFlowGroupCO 类型,实现按组别分组的数据结构
- 更新 TaskFlowController 中的接口注释,明确为"获取作业步骤(按组别分组)"
- 实现按 group_name 分组的逻辑处理,将流程步骤按组别进行归类
- 添加 TaskFlowGroupCO 数据传输对象,用于承载分组后的流程数据结构
master
fangjiakai 2026-03-13 15:54:45 +08:00
parent 597eb47554
commit cfe6eacc50
7 changed files with 49 additions and 13 deletions

View File

@ -10,6 +10,7 @@ import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.eightwork.dto.clientobject.TaskFlowGroupCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import io.swagger.annotations.Api;
@ -57,9 +58,9 @@ public class TaskFlowController {
return SingleResponse.of(taskFlowService.getFlowInit(qry));
}
@ApiOperation("获取作业步骤")
@ApiOperation("获取作业步骤(按组别分组)")
@GetMapping("/getFlowByWorkType/{workType}")
public MultiResponse<TaskFlowCO> getFlowByWorkType(@PathVariable("workType") String workType) {
public MultiResponse<TaskFlowGroupCO> getFlowByWorkType(@PathVariable("workType") String workType) {
return MultiResponse.of(taskFlowService.getFlowByWorkType(workType));
}

View File

@ -11,6 +11,7 @@ import com.zcloud.eightwork.dto.TaskFlowQryCmd;
import com.zcloud.eightwork.dto.TaskWorkQryCmd;
import com.zcloud.eightwork.dto.clientobject.TaskFlowCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowGroupCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkTaskDO;
import com.zcloud.eightwork.persistence.dataobject.TaskFlowDO;
@ -20,8 +21,7 @@ import com.zcloud.gbscommon.utils.PageQueryHelper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@ -34,9 +34,9 @@ import java.util.stream.Collectors;
@Component
@AllArgsConstructor
public class TaskFlowQueryExe {
/** 第一步申请步骤的步骤ID */
private static final Long FIRST_STEP_ID = 1L;
/** 需要选择签字人的步骤标识 */
/**
*
*/
private static final Integer NEED_SELECT_SIGN = 1;
private final TaskFlowRepository taskFlowRepository;
@ -81,18 +81,43 @@ public class TaskFlowQueryExe {
return taskFlowInitCO;
}
public List<TaskFlowCO> getFlowByWorkType(String workType) {
public List<TaskFlowGroupCO> getFlowByWorkType(String workType) {
List<EightworkTaskDO> taskDOs = eightworkTaskRepository.list(new LambdaQueryWrapper<EightworkTaskDO>().eq(EightworkTaskDO::getWorkType, workType));
List<Long> taskIds = taskDOs.stream().map(EightworkTaskDO::getId).collect(Collectors.toList());
List<TaskFlowDO> flows = taskFlowRepository.list(new QueryWrapper<TaskFlowDO>()
.select("DISTINCT step_id as step_id")
.select("step_name")
.select("group_name")
.in("task_id", taskIds)
.ne("step_id", FIRST_STEP_ID)
.orderByAsc("step_order"));
return taskFlowCoConvertor.converDOsToCOs(flows);
// 转换为 CO
List<TaskFlowCO> flowCOs = taskFlowCoConvertor.converDOsToCOs(flows);
// 按 group_name 分组
Map<String, List<TaskFlowCO>> groupedFlows = flowCOs.stream()
.collect(Collectors.groupingBy(
flow -> flow.getGroupName() != null ? flow.getGroupName() : "默认组"
));
// 收集按 step_order 排序后,每个组第一次出现的顺序
LinkedHashSet<String> groupOrder = new LinkedHashSet<>();
for (TaskFlowCO flow : flowCOs) {
String groupName = flow.getGroupName() != null ? flow.getGroupName() : "默认组";
groupOrder.add(groupName);
}
// 按数据库查询顺序转换为 TaskFlowGroupCO 列表
List<TaskFlowGroupCO> result = new ArrayList<>();
for (String groupName : groupOrder) {
TaskFlowGroupCO groupCO = new TaskFlowGroupCO();
groupCO.setGroupName(groupName);
groupCO.setSteps(groupedFlows.get(groupName));
result.add(groupCO);
}
return result;
}
}

View File

@ -10,12 +10,14 @@ import com.zcloud.eightwork.dto.clientobject.TaskFlowCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.eightwork.dto.clientobject.TaskFlowGroupCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* web-app
@ -69,7 +71,7 @@ public class TaskFlowServiceImpl implements TaskFlowServiceI {
}
@Override
public List<TaskFlowCO> getFlowByWorkType(String workType){
public List<TaskFlowGroupCO> getFlowByWorkType(String workType){
return taskFlowQueryExe.getFlowByWorkType(workType);
}
}

View File

@ -5,9 +5,9 @@ import com.zcloud.eightwork.dto.clientobject.TaskFlowCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.eightwork.dto.clientobject.TaskFlowGroupCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import java.util.List;
/**
@ -32,6 +32,6 @@ public interface TaskFlowServiceI {
TaskFlowInitCO getFlowInit(TaskFlowQryCmd qry);
List<TaskFlowCO> getFlowByWorkType(String workType);
List<TaskFlowGroupCO> getFlowByWorkType(String workType);
}

View File

@ -18,6 +18,9 @@ public class TaskFlowCO extends ClientObject {
//任务ID
@ApiModelProperty(value = "任务ID")
private Long taskId;
//按钮组别
@ApiModelProperty(value = "按钮组别")
private String groupName;
//步骤ID
@ApiModelProperty(value = "步骤ID", name = "stepId", required = true)
private Long stepId;

View File

@ -15,6 +15,8 @@ import javax.validation.constraints.NotNull;
public class TaskFlowE extends BaseE {
//任务ID
private Long taskId;
//按钮组别
private String groupName;
//步骤ID
private Long stepId;
//步骤

View File

@ -23,6 +23,9 @@ public class TaskFlowDO extends BaseDO {
//任务ID
@ApiModelProperty(value = "任务ID")
private Long taskId;
//按钮组别
@ApiModelProperty(value = "按钮组别")
private String groupName;
//步骤ID
@ApiModelProperty(value = "步骤ID", name = "stepId", required = true)
private Long stepId;