feat(REQ-3488): 班组类别api 逻辑调整

This commit is contained in:
songyuanlun 2025-01-10 15:11:47 +08:00
parent 1a9f2cc1ec
commit cf8d6a8080
7 changed files with 101 additions and 60 deletions

View File

@ -40,6 +40,7 @@ public interface OrgProjectTeamCategoryApi {
@RequestBody @Valid PreCheckRemoveTeamCategoryReq req); @RequestBody @Valid PreCheckRemoveTeamCategoryReq req);
/** /**
* todo 三期实现
* 添加项目班组分类 * 添加项目班组分类
* 单个班组的班组类别初始化接口逻辑相差太大无法合并 * 单个班组的班组类别初始化接口逻辑相差太大无法合并
* 这里用到宽表 org_project_worker_wide * 这里用到宽表 org_project_worker_wide
@ -56,6 +57,7 @@ public interface OrgProjectTeamCategoryApi {
ApiResult<Void> removeTeamCategory(@RequestBody @Valid RemoveProjectTeamCategoryReq req); ApiResult<Void> removeTeamCategory(@RequestBody @Valid RemoveProjectTeamCategoryReq req);
/** /**
* todo 三期实现
* 操作班组类别 * 操作班组类别
*/ */
@PostMapping(value = "/api/project/team-category/operate") @PostMapping(value = "/api/project/team-category/operate")
@ -64,7 +66,7 @@ public interface OrgProjectTeamCategoryApi {
/** /**
* replace实际上把老的删了更换为入参 * replace实际上把老的删了更换为入参
* 入参是集合类型无法合并到通用接口 * 入参是集合类型无法合并到通用接口
* todo 看业务方使用场景 * todo 三期实现 看业务方使用场景
*/ */
@PostMapping(value = "/api/project/team-category/upsert") @PostMapping(value = "/api/project/team-category/upsert")
ApiResult<Void> replace(@RequestBody @NotEmpty List<OrgTeamCategoryReq> req); ApiResult<Void> replace(@RequestBody @NotEmpty List<OrgTeamCategoryReq> req);

View File

@ -3,18 +3,23 @@ package cn.axzo.orgmanax.api.workerprofession.feign;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult; import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
import cn.axzo.orgmanax.dto.workerprofession.req.*; import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
import cn.axzo.orgmanax.dto.workerprofession.resp.OrgWorkerProfessionResp; import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionSortOutProfessionCategoryReq;
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationConfigureReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationRemoveReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationUpsertReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationValidUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq;
import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp; import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/** /**
* @author zhanghongbo * @author zhanghongbo
* @date 2025/1/3 * @date 2025/1/3
@ -92,14 +97,4 @@ public interface OrgProjectWorkerProfessionApi {
@PostMapping(value = "/api/worker/profession/page") @PostMapping(value = "/api/worker/profession/page")
ApiResult<PageResp<ProjectWorkerProfessionResp>> page(@RequestBody @Validated WorkerProfessionTagQueryPageReq req); ApiResult<PageResp<ProjectWorkerProfessionResp>> page(@RequestBody @Validated WorkerProfessionTagQueryPageReq req);
/**
* 查询班组下工种
* 这个两个必传一个值
*
* @author zr
* @date 2023/8/1 17:42
**/
@PostMapping("/api/project/team/profession/page")
ApiResult<PageResp<OrgWorkerProfessionResp>> pageProfessions(
@RequestBody @Valid PageTeamProfessionsReq req);
} }

View File

@ -26,6 +26,7 @@ public class TreeOrgTeamCategoryReq {
/** /**
* 租户id * 租户id
* 尽量搭配其他参数组合查询
*/ */
private Long workspaceId; private Long workspaceId;

View File

@ -0,0 +1,72 @@
package cn.axzo.orgmanax.dto.project.team.utils;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO;
import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum;
import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 经营范围helper
*
* @author zhangtianyu
* @date 2023/2/23 8:40 PM
**/
public class TeamCategoryHelper {
public static Set<String> getLowestLevelCategories(List<TeamCategoryAggregateDTO> teamCategories) {
// 查询经营范围对应的工人工种当有专业经营范围时使用专业经营范围当只有经营范围且该经营范围下午专业经营范围则使用经营范围查询对应的工种
Set<String> needQueryTeamCategories = teamCategories.stream().map(TeamCategoryAggregateDTO::getCode)
.collect(Collectors.toSet());
teamCategories.stream()
.filter(c -> Objects.equals(c.getType(), TeamCategoryTypeEnum.WORKER_GROUP_PROFESSION.getCode()))
.filter(c -> Objects.equals(c.getValid(), ValidationEnum.EFFECTIVE.getCode()))
.forEach(c -> {
// 移除有专业经营范围的经营范围
needQueryTeamCategories.remove(c.getParentCode());
needQueryTeamCategories.add(c.getCode());
});
return needQueryTeamCategories;
}
public static List<TeamCategoryAggregateDTO> listLowestLevelCategories(
List<TeamCategoryAggregateDTO> teamCategories) {
// 查询经营范围对应的工人工种当有专业经营范围时使用专业经营范围当只有经营范围且该经营范围下午专业经营范围则使用经营范围查询对应的工种
Map<String, List<TeamCategoryAggregateDTO>> categoryCodeToCategoryMap = teamCategories.stream()
.collect(Collectors.groupingBy(TeamCategoryAggregateDTO::getCode));
teamCategories.stream()
.filter(c -> Objects.equals(c.getType(), TeamCategoryTypeEnum.WORKER_GROUP_PROFESSION.getCode()))
.filter(c -> Objects.equals(c.getValid(), ValidationEnum.EFFECTIVE.getCode()))
.forEach(c ->
// 移除有专业经营范围的经营范围
categoryCodeToCategoryMap.remove(c.getParentCode()));
List<TeamCategoryAggregateDTO> result = new ArrayList<>();
categoryCodeToCategoryMap.forEach((code, list) -> result.addAll(list));
return result;
}
/**
* 打平
*/
public static List<TeamCategoryAggregateDTO> flatCategories(List<TeamCategoryAggregateDTO> teamCategories) {
if (CollUtil.isEmpty(teamCategories)) {
return Lists.newArrayList();
}
List<TeamCategoryAggregateDTO> resList = new ArrayList<>();
teamCategories.forEach(e -> {
resList.add(e);
if (CollUtil.isNotEmpty(e.getNodeChildren())) {
resList.addAll(e.getNodeChildren());
}
e.setNodeChildren(null);
});
return resList;
}
}

View File

@ -1,31 +0,0 @@
package cn.axzo.orgmanax.dto.workerprofession.req;
import cn.axzo.foundation.page.PageReqV2;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/19
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class PageTeamProfessionsReq extends PageReqV2 {
/**
* 项目班组Id
* todo 需要改造按照新的方式实现
*/
private Long projectTeamId;
/**
* 项目班组节点Id
*/
private Long projectTeamNodeId;
}

View File

@ -27,6 +27,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -96,7 +97,8 @@ public class ProjectTeamCategoryServiceImpl implements ProjectTeamCategoryServic
if (Objects.isNull(projectTeamProfile)) { if (Objects.isNull(projectTeamProfile)) {
return NO_PROJECT_TEAM_ID; return NO_PROJECT_TEAM_ID;
} }
return projectTeamProfile.getProjectTeamId(); return Optional.ofNullable(projectTeamProfile.getProjectTeamId())
.orElse(NO_PROJECT_TEAM_ID);
} }
public TeamCategoryAggregateDTO convert(TeamCategoryDTO category, Map<Long, Long> nodeTeamMap) { public TeamCategoryAggregateDTO convert(TeamCategoryDTO category, Map<Long, Long> nodeTeamMap) {

View File

@ -4,18 +4,23 @@ import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult; import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.workerprofession.feign.OrgProjectWorkerProfessionApi; import cn.axzo.orgmanax.api.workerprofession.feign.OrgProjectWorkerProfessionApi;
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
import cn.axzo.orgmanax.dto.workerprofession.req.*; import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
import cn.axzo.orgmanax.dto.workerprofession.resp.OrgWorkerProfessionResp; import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionSortOutProfessionCategoryReq;
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationConfigureReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationRemoveReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationUpsertReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationValidUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq;
import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp; import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp;
import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService; import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/** /**
* @author zhanghongbo * @author zhanghongbo
* @date 2025/1/3 * @date 2025/1/3
@ -66,9 +71,4 @@ public class OrgProjectWorkerProfessionController implements OrgProjectWorkerPro
public ApiResult<PageResp<ProjectWorkerProfessionResp>> page(WorkerProfessionTagQueryPageReq req) { public ApiResult<PageResp<ProjectWorkerProfessionResp>> page(WorkerProfessionTagQueryPageReq req) {
return ApiResult.success(orgProjectWorkerProfessionService.page(req)); return ApiResult.success(orgProjectWorkerProfessionService.page(req));
} }
@Override
public ApiResult<PageResp<OrgWorkerProfessionResp>> pageProfessions(@Valid PageTeamProfessionsReq req) {
return null;
}
} }