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.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser; import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext; 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.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO; import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -57,9 +58,9 @@ public class TaskFlowController {
return SingleResponse.of(taskFlowService.getFlowInit(qry)); return SingleResponse.of(taskFlowService.getFlowInit(qry));
} }
@ApiOperation("获取作业步骤") @ApiOperation("获取作业步骤(按组别分组)")
@GetMapping("/getFlowByWorkType/{workType}") @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)); 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.TaskWorkQryCmd;
import com.zcloud.eightwork.dto.clientobject.TaskFlowCO; import com.zcloud.eightwork.dto.clientobject.TaskFlowCO;
import com.zcloud.eightwork.dto.clientobject.TaskFlowInitCO; 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.dto.clientobject.TaskWorkInitCO;
import com.zcloud.eightwork.persistence.dataobject.EightworkTaskDO; import com.zcloud.eightwork.persistence.dataobject.EightworkTaskDO;
import com.zcloud.eightwork.persistence.dataobject.TaskFlowDO; import com.zcloud.eightwork.persistence.dataobject.TaskFlowDO;
@ -20,8 +21,7 @@ import com.zcloud.gbscommon.utils.PageQueryHelper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -34,9 +34,9 @@ import java.util.stream.Collectors;
@Component @Component
@AllArgsConstructor @AllArgsConstructor
public class TaskFlowQueryExe { public class TaskFlowQueryExe {
/** 第一步申请步骤的步骤ID */ /**
private static final Long FIRST_STEP_ID = 1L; *
/** 需要选择签字人的步骤标识 */ */
private static final Integer NEED_SELECT_SIGN = 1; private static final Integer NEED_SELECT_SIGN = 1;
private final TaskFlowRepository taskFlowRepository; private final TaskFlowRepository taskFlowRepository;
@ -81,18 +81,43 @@ public class TaskFlowQueryExe {
return taskFlowInitCO; 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<EightworkTaskDO> taskDOs = eightworkTaskRepository.list(new LambdaQueryWrapper<EightworkTaskDO>().eq(EightworkTaskDO::getWorkType, workType));
List<Long> taskIds = taskDOs.stream().map(EightworkTaskDO::getId).collect(Collectors.toList()); List<Long> taskIds = taskDOs.stream().map(EightworkTaskDO::getId).collect(Collectors.toList());
List<TaskFlowDO> flows = taskFlowRepository.list(new QueryWrapper<TaskFlowDO>() List<TaskFlowDO> flows = taskFlowRepository.list(new QueryWrapper<TaskFlowDO>()
.select("DISTINCT step_id as step_id") .select("DISTINCT step_id as step_id")
.select("step_name") .select("step_name")
.select("group_name")
.in("task_id", taskIds) .in("task_id", taskIds)
.ne("step_id", FIRST_STEP_ID)
.orderByAsc("step_order")); .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.PageResponse;
import com.alibaba.cola.dto.SingleResponse; 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.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO; import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* web-app * web-app
@ -69,7 +71,7 @@ public class TaskFlowServiceImpl implements TaskFlowServiceI {
} }
@Override @Override
public List<TaskFlowCO> getFlowByWorkType(String workType){ public List<TaskFlowGroupCO> getFlowByWorkType(String workType){
return taskFlowQueryExe.getFlowByWorkType(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.PageResponse;
import com.alibaba.cola.dto.SingleResponse; 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.TaskFlowInitCO;
import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO; import com.zcloud.eightwork.dto.clientobject.TaskWorkInitCO;
import java.util.List; import java.util.List;
/** /**
@ -32,6 +32,6 @@ public interface TaskFlowServiceI {
TaskFlowInitCO getFlowInit(TaskFlowQryCmd qry); 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 //任务ID
@ApiModelProperty(value = "任务ID") @ApiModelProperty(value = "任务ID")
private Long taskId; private Long taskId;
//按钮组别
@ApiModelProperty(value = "按钮组别")
private String groupName;
//步骤ID //步骤ID
@ApiModelProperty(value = "步骤ID", name = "stepId", required = true) @ApiModelProperty(value = "步骤ID", name = "stepId", required = true)
private Long stepId; private Long stepId;

View File

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

View File

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