feat(REQ-3488): 提交获取小组接口

This commit is contained in:
zhanghongbo 2025-01-13 10:18:44 +08:00
parent 5ddfcaaefc
commit 5846b213e5
10 changed files with 293 additions and 43 deletions

View File

@ -73,7 +73,7 @@ public interface OrgProjectGroupApi {
@RequestParam("workspaceId") Long workspaceId); @RequestParam("workspaceId") Long workspaceId);
// /** // /**
// * 查询甲方班组的合作小组 // * 查询甲方班组的合作小组 TODO zhanghonghao
// */ // */
// @PostMapping("/api/project-group/group/list") // @PostMapping("/api/project-group/group/list")
// ApiResult<List<ProjectTeamGroupListResp>> groupList(@RequestBody ProjectTeamGroupListReq req); // ApiResult<List<ProjectTeamGroupListResp>> groupList(@RequestBody ProjectTeamGroupListReq req);
@ -98,7 +98,7 @@ public interface OrgProjectGroupApi {
* @date 2022/11/30 16:32 * @date 2022/11/30 16:32
**/ **/
@GetMapping("api/direct-group/no-leader/group") @GetMapping("api/direct-group/no-leader/group")
ApiResult<ProjectGroupListRes> getNoLeaderGroupList(@RequestParam("workspaceId") Long workspaceId, @RequestParam("platTeamId") Long platTeamId, @RequestParam("isReturnWorker") Boolean isReturnWorker); ApiResult<ProjectGroupListResp> getNoLeaderGroupList(@RequestParam("workspaceId") Long workspaceId, @RequestParam("platTeamId") Long platTeamId, @RequestParam("isReturnWorker") Boolean isReturnWorker);
/** /**
* 查询平台班组id + 工人id 项目内是否为小组长 * 查询平台班组id + 工人id 项目内是否为小组长

View File

@ -2,16 +2,16 @@ package cn.axzo.orgmanax.dto.node.dto;
import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import java.util.Date; import java.util.*;
import java.util.Map;
import java.util.Optional;
/** /**
* 部门Profile定义 * 部门Profile定义
@ -207,48 +207,105 @@ public class NodeProfile {
return typeClassMapping.getOrDefault(nodeType, JSONObject.class); return typeClassMapping.getOrDefault(nodeType, JSONObject.class);
} }
@Getter
@AllArgsConstructor
public enum NodeProfileResolveTypeEnum {
PROJECT_TEAM_ID("项目班组id", Long.class, Arrays.asList("projectTeamId", "belongProjectTeamId")),
PLAT_TEAM_ID("平台班组id", Long.class, Arrays.asList("platTeamId", "belongPlatTeamId")),
PROJECT_GROUP_ID("项目小组id", Long.class, Arrays.asList("projectGroupId")),
;
private String desc;
/**
* 解析类型
*/
private Class aClass;
/**
* 解析字段名
*/
private List<String> resolveFieldName;
}
public static <T> T resolve(OrgNodeDTO orgNodeDTO, NodeProfileResolveTypeEnum resolveType) {
return (T)Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
List<String> resolveFieldNames = resolveType.getResolveFieldName();
for (String field : resolveFieldNames) {
Object object = profile.getObject(field, resolveType.aClass);
if (object != null) {
return object;
}
}
return null;
}).orElse(null);
}
/** /**
* 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
* @return * @return
*/ */
public static Long resolveProjectTeamId(OrgNodeBriefDTO node) { public static Long resolveProjectTeamId(OrgNodeDTO orgNodeDTO) {
if (node == null || node.getNodeType() == null) { return Optional.ofNullable(orgNodeDTO)
return null; .map(OrgNodeDTO::getProfile)
} .map(profile -> {
Integer nodeType = node.getNodeType(); if (ObjectUtil.isNotEmpty(profile.getLong("projectTeamId"))) {
if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { return profile.getLong("projectTeamId");
//项目班组 }
NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); return profile.getLong("belongProjectTeamId");
return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getProjectTeamId(); }).orElse(null);
} }
if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) {
//项目小组 /**
NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); * @return
return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongProjectTeamId(); */
} public static Long resolveProjectTeamId(OrgNodeBriefDTO orgNodeDTO) {
return null; return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeBriefDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("projectTeamId"))) {
return profile.getLong("projectTeamId");
}
return profile.getLong("belongProjectTeamId");
}).orElse(null);
} }
/** /**
* 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
* @return * @return
*/ */
public static Long resolvePlatTeamId(OrgNodeBriefDTO node) { public static Long resolvePlatTeamId(OrgNodeDTO orgNodeDTO) {
if (node == null || node.getNodeType() == null) { return Optional.ofNullable(orgNodeDTO)
return null; .map(OrgNodeDTO::getProfile)
} .map(profile -> {
Integer nodeType = node.getNodeType(); if (ObjectUtil.isNotEmpty(profile.getLong("platTeamId"))) {
if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { return profile.getLong("platTeamId");
//项目班组 }
NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); return profile.getLong("belongPlatTeamId");
return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getPlatTeamId(); }).orElse(null);
} }
if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) {
//项目小组 /**
NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongPlatTeamId(); * @return
} */
//TODO 是否还有平台班组类型也有平台班组id有需要自己下面继续实现 public static Long resolvePlatTeamId(OrgNodeBriefDTO orgNodeDTO) {
return null; return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeBriefDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("platTeamId"))) {
return profile.getLong("platTeamId");
}
return profile.getLong("belongPlatTeamId");
}).orElse(null);
}
public static Long resolveProjectGroupId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> profile.getLong("projectGroupId"))
.orElse(null);
} }
} }

View File

@ -58,8 +58,6 @@ public class OrgNodeBriefDTO implements Serializable {
/** /**
* 节点信息json不同的节点类型格式不一如班组节点的解散状态等 * 节点信息json不同的节点类型格式不一如班组节点的解散状态等
* @see OrgNodeBriefDTO#resolveProfile() * @see OrgNodeBriefDTO#resolveProfile()
* @see NodeProfile#resolveProjectTeamId
* @see NodeProfile#resolvePlatTeamId
*/ */
private JSONObject profile; private JSONObject profile;

View File

@ -93,6 +93,10 @@ public class OrgNodeDTO implements Serializable {
/** /**
* 节点信息json不同的节点类型格式不一如班组节点的解散状态等 * 节点信息json不同的节点类型格式不一如班组节点的解散状态等
* @see NodeProfile#resolveProjectGroupId
* @see NodeProfile#resolveProjectTeamId
* @see NodeProfile#resolvePlatTeamId
*
*/ */
private JSONObject profile; private JSONObject profile;

View File

@ -175,6 +175,12 @@ public class ListNodeReq extends PageReqV2 {
*/ */
private Collection<Long> ownerWorkerIdentityIds; private Collection<Long> ownerWorkerIdentityIds;
/**
* todo 未实现
* 小组长项目工人id列表
*/
private Collection<Long> ownerProjectWorkerIds;
/** /**
* todo 未实现 * todo 未实现
* 小组状态 0-未激活 1-已激活 2-已结束 * 小组状态 0-未激活 1-已激活 2-已结束

View File

@ -16,7 +16,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
public class ProjectGroupListRes { public class ProjectGroupListResp {
/** /**
* 小组列表 * 小组列表

View File

@ -0,0 +1,89 @@
package cn.axzo.orgmanax.server.project.group.controller;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.project.group.feign.OrgProjectGroupApi;
import cn.axzo.orgmanax.dto.project.group.req.*;
import cn.axzo.orgmanax.dto.project.group.resp.*;
import cn.axzo.orgmanax.server.project.group.service.OrgProjectGroupService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
* @author zhanghongbo
* @date 2025/1/9
*/
@RestController
@Slf4j
@AllArgsConstructor
public class OrgProjectGroupController implements OrgProjectGroupApi {
private OrgProjectGroupService orgProjectGroupService;
@Override
public ApiResult<List<LabourProjectGroupListV2Res>> page(@Valid ProjectGroupPageReq req) {
return null;
}
@Override
public ApiResult<Long> create(@Valid GroupNodeCreateReq req) {
return null;
}
@Override
public ApiResult<Void> edit(@Valid GroupNodeEditReq req) {
return null;
}
@Override
public ApiResult<Void> delete(@Valid GroupNodeDeleteReq req) {
return null;
}
@Override
public ApiResult<List<ExposeGroupWorkerRespItem>> exposeWorkers(Long workspaceId) {
return null;
}
@Override
public ApiResult<ProjectGroupOwnerPermissionRes> groupOwnerPermission(Long groupId) {
return null;
}
@Override
public ApiResult<ProjectGroupListResp> getNoLeaderGroupList(Long workspaceId, Long platTeamId, Boolean isReturnWorker) {
orgProjectGroupService.getNoLeaderGroupList(workspaceId, platTeamId, isReturnWorker);
return null;
}
@Override
public ApiResult<PageResp<ProjectGroupRes>> pageGroupInfo(@Valid ProjectDirectGroupPageGroupReq req) {
return null;
}
@Override
public ApiResult<Integer> getJoinTeamTopNo(Long projectTeamId, Long groupId) {
return null;
}
@Override
public ApiResult<List<ProjectTeamGroupWorkerRes>> listProjectGroupWorker(Long projectTeamId) {
return null;
}
@Override
public ApiResult<List<ProjectGroupNodeRes>> pageProjectGroupNode(ProjectDirectGroupPageProjectGroupNodeReq req) {
return null;
}
@Override
public ApiResult<ProjectGroupAndWorkerResp> getProjectGroupUnOwnerAndWorker(Long teamNodeId) {
return null;
}
}

View File

@ -0,0 +1,11 @@
package cn.axzo.orgmanax.server.project.group.service;
import cn.axzo.orgmanax.dto.project.group.resp.ProjectGroupListResp;
/**
* @author zhanghongbo
* @date 2025/1/9
*/
public interface OrgProjectGroupService {
ProjectGroupListResp getNoLeaderGroupList(Long workspaceId, Long platTeamId, Boolean isReturnWorker);
}

View File

@ -0,0 +1,85 @@
package cn.axzo.orgmanax.server.project.group.service.impl;
import cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum;
import cn.axzo.orgmanax.dto.node.dto.NodeProfile;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum;
import cn.axzo.orgmanax.dto.node.req.ListNodeReq;
import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum;
import cn.axzo.orgmanax.dto.project.group.resp.ProjectGroupListResp;
import cn.axzo.orgmanax.server.node.service.NodeService;
import cn.axzo.orgmanax.server.project.group.service.OrgProjectGroupService;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Sets;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author zhanghongbo
* @date 2025/1/9
*/
@Service
@Slf4j
@AllArgsConstructor
public class OrgProjectGroupServiceImpl implements OrgProjectGroupService {
private NodeService nodeService;
@Override
public ProjectGroupListResp getNoLeaderGroupList(Long workspaceId, Long platTeamId, Boolean isReturnWorker) {
log.info("getNoLeaderGroupList : workspaceId={}, platTeamId={}, isReturnWorker={}", workspaceId, platTeamId, isReturnWorker);
//1.默认不返回工人列表
if (isReturnWorker == null) {
isReturnWorker = false;
}
List<OrgNodeDTO> orgNodeDTOS = nodeService.list(ListNodeReq.builder()
.workspaceIds(Sets.newHashSet(workspaceId))
.platTeamIds(Sets.newHashSet(platTeamId))
.excludeOrgNodeTypes(Sets.newHashSet(NodeTypeEnum.PROJECT_GROUP.getValue()))
.groupStatus(ProjectGroupStatusEnum.ACTIVE.getValue())
.groupType(ProjectGroupTypeEnum.DIRECTLY_UNDER.getValue())
.ownerWorkerIdentityIds(Arrays.asList(0L))
.ownerProjectWorkerIds(Arrays.asList(0L))
.build());
if (ObjectUtil.isEmpty(orgNodeDTOS)) {
Collections.emptyList();
}
convert(orgNodeDTOS, workspaceId);
return null;
}
private List<ProjectGroupListResp.ProjectGroupInfo> convert(List<OrgNodeDTO> orgNodeDTOS, Long workspaceId) {
//todo
// return orgNodeDTOS.stream().map(orgNodeDTO -> {
// ProjectGroupListResp.ProjectGroupInfo projectGroupInfo = new ProjectGroupListResp.ProjectGroupInfo();
// projectGroupInfo.setId(NodeProfile.resolveProjectGroupId(orgNodeDTO));
// projectGroupInfo.setName(orgNodeDTO.getNodeName());
// projectGroupInfo.setWorkspaceId(workspaceId);
// projectGroupInfo.setBelongProjectTeamId(NodeProfile.resolveProjectTeamId(orgNodeDTO));
// projectGroupInfo.setBelongPlatTeamId(NodeProfile.resolvePlatTeamId(orgNodeDTO));
// projectGroupInfo.setOwnerProjectWorkerId(orgNodeDTO.get);
// projectGroupInfo.setOwnerWorkerName();
// projectGroupInfo.setOwnerWorkerPhone();
// projectGroupInfo.setOwnerWorkerFaceUrl();
// projectGroupInfo.setGroupType();
// projectGroupInfo.setCreateAt();
// projectGroupInfo.setUpdateAt();
// projectGroupInfo.setProjectGroupWorkerList();
// }).collect(Collectors.toList());
return null;
}
}

View File

@ -140,7 +140,7 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService {
NodeUserDTO nodeUserDTO = nodeUserDTOMap.get(resp.getWorkerIdentityId()); NodeUserDTO nodeUserDTO = nodeUserDTOMap.get(resp.getWorkerIdentityId());
if (nodeUserDTO != null) { if (nodeUserDTO != null) {
resp.setPlatTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode())); resp.setPlatTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode()));
resp.setProjectTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode())); resp.setProjectTeamId(NodeProfile.resolveProjectTeamId(nodeUserDTO.getNode()));
} }
} }
return resps; return resps;