Merge remote-tracking branch 'origin/feature/REQ-3488' into feature/REQ-3488-zhh

# Conflicts:
#	orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamServiceImpl.java
This commit is contained in:
zhanghonghao 2025-01-13 14:41:52 +08:00
commit 8cb7d59ff8
24 changed files with 378 additions and 163 deletions

View File

@ -73,7 +73,7 @@ public interface OrgProjectGroupApi {
@RequestParam("workspaceId") Long workspaceId);
// /**
// * 查询甲方班组的合作小组
// * 查询甲方班组的合作小组 TODO zhanghonghao
// */
// @PostMapping("/api/project-group/group/list")
// ApiResult<List<ProjectTeamGroupListResp>> groupList(@RequestBody ProjectTeamGroupListReq req);
@ -98,7 +98,7 @@ public interface OrgProjectGroupApi {
* @date 2022/11/30 16:32
**/
@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 项目内是否为小组长

View File

@ -45,7 +45,7 @@ Accept: application/json
###
# 查询
POST {{host}}/api/job/page
POST {{host}}/api/job/list
Content-Type: application/json
Accept: application/json

View File

@ -1,5 +1,6 @@
package cn.axzo.orgmanax.dto.cooperateship.req;
import cn.hutool.core.collection.CollUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -67,10 +68,10 @@ public class ListOrgCooperateShipReq {
private Set<Integer> partnerShips = Collections.emptySet();
/**
* 在场状态集合
* 在场状态集合, 默认为在场
*/
@Builder.Default
private Set<Integer> statuses = Collections.emptySet();
private Set<Integer> statuses = CollUtil.newHashSet(1);
/**
* 根据人员进行节点过滤

View File

@ -135,10 +135,9 @@ public class OrgJobDTO implements Serializable {
/**
* 角色信息
* todo 2024年12月30日 已和周敏确认暂不用该字段
* 二期才会用到此字段
*/
//private List<RoleDTO> saasRoles;
private List<RoleDTO> saasRoles;
public Set<Long> mergeAndDistinctRolesIds() {
Set<Long> roleIds = Sets.newHashSet();

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.nodeuser.req.ListNodeUserReq;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
import java.util.Map;
import java.util.Optional;
import java.util.*;
/**
* 部门Profile定义
@ -183,72 +183,114 @@ public class NodeProfile {
}
/**
* 平台班组Profile
*/
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Data
public static class PlatTeamProfile {
private Long teamOuId;
private Long teamNodeId;
private Long ouId;
private Long nodeId;
}
private static final Map<Integer, Class<?>> typeClassMapping = ImmutableMap.of(
NodeTypeEnum.PROJECT_TEAM.getValue(), ProjectTeamProfile.class,
NodeTypeEnum.PROJECT_GROUP.getValue(), ProjectGroupProfile.class,
NodeTypeEnum.TEAM.getValue(), PlatTeamProfile.class
NodeTypeEnum.PROJECT_GROUP.getValue(), ProjectGroupProfile.class
);
public static Class<?> resolveProfileClass(Integer nodeType) {
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
*/
public static Long resolveProjectTeamId(OrgNodeBriefDTO node) {
if (node == null || node.getNodeType() == null) {
return null;
}
Integer nodeType = node.getNodeType();
if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) {
//项目班组
NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile();
return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getProjectTeamId();
}
if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) {
//项目小组
NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile();
return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongProjectTeamId();
}
return null;
public static Long resolveProjectTeamId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("projectTeamId"))) {
return profile.getLong("projectTeamId");
}
return profile.getLong("belongProjectTeamId");
}).orElse(null);
}
/**
* @return
*/
public static Long resolveProjectTeamId(OrgNodeBriefDTO orgNodeDTO) {
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才有用
* @return
*/
public static Long resolvePlatTeamId(OrgNodeBriefDTO node) {
if (node == null || node.getNodeType() == null) {
return null;
}
Integer nodeType = node.getNodeType();
if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) {
//项目班组
NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile();
return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getPlatTeamId();
}
if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) {
//项目小组
NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile();
return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongPlatTeamId();
}
//TODO 是否还有平台班组类型也有平台班组id有需要自己下面继续实现
return null;
public static Long resolvePlatTeamId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("platTeamId"))) {
return profile.getLong("platTeamId");
}
return profile.getLong("belongPlatTeamId");
}).orElse(null);
}
/**
* 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
* @return
*/
public static Long resolvePlatTeamId(OrgNodeBriefDTO orgNodeDTO) {
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不同的节点类型格式不一如班组节点的解散状态等
* @see OrgNodeBriefDTO#resolveProfile()
* @see NodeProfile#resolveProjectTeamId
* @see NodeProfile#resolvePlatTeamId
*/
private JSONObject profile;

View File

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

View File

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

View File

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

View File

@ -1,20 +1,19 @@
package cn.axzo.orgmanax.dto.unit.contact.req;
import cn.axzo.orgmanax.dto.unit.contact.enums.ContactOperateEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.validator.constraints.Length;
/**
* 编辑单位联系人
*/
@Data
@Builder
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OperateOrgContactReq {

View File

@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
@ -14,6 +15,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class PageOrgContactReq extends PageReqV2 {
/**

View File

@ -4,16 +4,16 @@ import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/16
*/
@Data
@Builder
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SaveBatchOrgContactReq {

View File

@ -3,16 +3,16 @@ package cn.axzo.orgmanax.dto.unit.contact.req;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.validator.constraints.Length;
/**
* 新增单位联系人
*/
@Data
@Builder
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SaveOrgContactReq {

View File

@ -115,10 +115,10 @@
<version>${revision}</version>
</dependency>
<!--<dependency>
<dependency>
<groupId>cn.axzo.tyr</groupId>
<artifactId>tyr-client</artifactId>
<version>${revision}</version>
</dependency>-->
</dependency>
</dependencies>
</project>

View File

@ -1,11 +1,15 @@
package cn.axzo.orgmanax.infra.client.tyr;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.infra.client.RpcWrapper;
import cn.axzo.tyr.feign.api.RoleApi;
import cn.axzo.tyr.feign.req.PageRoleReq;
import cn.axzo.tyr.feign.resp.RoleResp;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* todo 暂时注释tyr不上线
* @author syl
* @date 2024/12/23
*/
@ -14,9 +18,9 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class RoleGateway {
// private final RoleApi roleApi;
//
// public PageResp<RoleResp> page(PageRoleReq req) {
// return RpcWrapper.wrapApiResult(() -> roleApi.page(req));
// }
private final RoleApi roleApi;
public PageResp<RoleResp> page(PageRoleReq req) {
return RpcWrapper.wrapApiResult(() -> roleApi.page(req));
}
}

View File

@ -1,30 +0,0 @@
package cn.axzo.orgmanax.infra.client.util;
import cn.axzo.foundation.exception.BusinessException;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpStatus;
import java.util.Objects;
import java.util.function.Supplier;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class RpcWrapper {
/**
* Api result 返回
* @param supplier
* @return
* @param <T>
*/
public static <T> T wrapApiResult(Supplier<cn.axzo.foundation.result.ApiResult<T>> supplier) {
cn.axzo.foundation.result.ApiResult<T> result = supplier.get();
if (result == null) {
throw new BusinessException(BizResultCode.RPC_ERROR);
}
if (!Objects.equals(result.getCode(), HttpStatus.HTTP_OK)) {
throw new BusinessException(Convert.toStr(result.getCode()), result.getMsg(), null);
}
return result.getData();
}
}

View File

@ -4,6 +4,7 @@ import cn.axzo.foundation.web.support.AppRuntime;
import cn.axzo.foundation.web.support.config.DefaultWebMvcConfig;
import cn.axzo.foundation.web.support.exception.AbstractExceptionHandler;
import cn.axzo.foundation.web.support.log.RequestLogAspect;
import cn.axzo.foundation.web.support.log.RequestLogV2Aspect;
import cn.axzo.orgmanax.infra.event.config.RocketMQEventConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration;
@ -49,8 +50,8 @@ public class Config {
}
@Bean
public RequestLogAspect requestLogAspect() {
return RequestLogAspect.builder().build();
public RequestLogV2Aspect requestLogV2Aspect() {
return RequestLogV2Aspect.builder().build();
}
@Bean

View File

@ -20,13 +20,13 @@ import org.springframework.stereotype.Component;
public class RocketMQEventConfig {
public static final String DEFAULT_MODULE = "orgmanax-server";
@Value("topic_${spring.application.name}_${spring.profiles.active}")
@Value("topic_organizational_${spring.profiles.active}")
private String currentTopic;
@Value("topic_organizational_${spring.profiles.active}")
private String organizationalTopic;
@Value("topic_${spring.application.name}_retry_${spring.profiles.active}")
@Value("topic_organizational_retry_${spring.profiles.active}")
private String currentRetryTopic;
/**
@ -37,7 +37,7 @@ public class RocketMQEventConfig {
@Component
// XXX: consumerGroup 必须全局唯一. RocketMQ要求同一个Consumer Group的消费者必须要拥有相同的注册信息即必须要听一样的topic(并且tag也一样)
// 这里通个添加 topic信息来保证唯一.
@RocketMQMessageListener(topic = "topic_${spring.application.name}_${spring.profiles.active}",
@RocketMQMessageListener(topic = "topic_organizational_${spring.profiles.active}",
consumerGroup = "GID_${spring.application.name}_${spring.application.name}_${spring.profiles.active}",
consumeMode = ConsumeMode.ORDERLY, enableMsgTrace = false)
public static class Listener extends DefaultRocketMQListener {
@ -50,7 +50,7 @@ public class RocketMQEventConfig {
@Component
// XXX: consumerGroup 必须全局唯一. RocketMQ要求同一个Consumer Group的消费者必须要拥有相同的注册信息即必须要听一样的topic(并且tag也一样)
// 这里通个添加 topic信息来保证唯一.
@RocketMQMessageListener(topic = "topic_${spring.application.name}_retry_${spring.profiles.active}",
@RocketMQMessageListener(topic = "topic_organizational_retry_${spring.profiles.active}",
consumerGroup = "GID_${spring.application.name}_retry_${spring.application.name}_${spring.profiles.active}",
consumeMode = ConsumeMode.ORDERLY, enableMsgTrace = false)
public static class RetryListener extends DefaultRocketMQListener {

View File

@ -95,7 +95,9 @@ public class ListNodeCmdExe {
assemble(req, records, page.getData());
// 返回
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(),
CollUtil.distinct(records, OrgNodeDTO::getId, true)
);
}

View File

@ -11,6 +11,7 @@ import cn.axzo.orgmanax.dto.cooperateship.req.ListOrgCooperateShipReq;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO;
import cn.axzo.orgmanax.dto.job.dto.RoleDTO;
import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
@ -27,6 +28,8 @@ import cn.axzo.orgmanax.server.orgjob.service.OrgJobService;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupPageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupRelationPageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
import cn.axzo.tyr.feign.req.PageRoleReq;
import cn.axzo.tyr.feign.resp.RoleResp;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
@ -105,8 +108,8 @@ public class OrgJobServiceImpl implements OrgJobService {
buildOrgGroup4OrgJob(orgJobs.getData());
}
if (BooleanUtils.isTrue(param.getNeedSaasRole())) {
// todo 设置角色信息
// buildSaasRole4OrgJob(orgJobs.getData());
// 设置角色信息
buildSaasRole4OrgJob(orgJobs.getData());
}
return orgJobs;
}
@ -177,48 +180,47 @@ public class OrgJobServiceImpl implements OrgJobService {
return flags;
}
// todo 暂时注释二期才使用
// private void buildSaasRole4OrgJob(List<OrgJobDTO> orgJobs) {
// Set<Long> roleIds = orgJobs.stream()
// .flatMap(e -> e.mergeAndDistinctRolesIds().stream())
// .collect(Collectors.toSet());
// Map<Long, RoleResp> saasRoleMap = listSaasRoles(roleIds);
// if (CollUtil.isEmpty(saasRoleMap)) {
// return;
// }
// orgJobs.forEach(e -> {
// Set<Long> mergedRoleIds = e.mergeAndDistinctRolesIds();
// if (CollUtil.isNotEmpty(mergedRoleIds)) {
// List<RoleResp> roles = mergedRoleIds.stream()
// .map(saasRoleMap::get)
// .filter(Objects::nonNull)
// .collect(Collectors.toList());
// e.setSaasRoles(BeanUtil.copyToList(roles, RoleDTO.class));
// }
// });
// }
private void buildSaasRole4OrgJob(List<OrgJobDTO> orgJobs) {
Set<Long> roleIds = orgJobs.stream()
.flatMap(e -> e.mergeAndDistinctRolesIds().stream())
.collect(Collectors.toSet());
Map<Long, RoleResp> saasRoleMap = listSaasRoles(roleIds);
if (CollUtil.isEmpty(saasRoleMap)) {
return;
}
orgJobs.forEach(e -> {
Set<Long> mergedRoleIds = e.mergeAndDistinctRolesIds();
if (CollUtil.isNotEmpty(mergedRoleIds)) {
List<RoleResp> roles = mergedRoleIds.stream()
.map(saasRoleMap::get)
.filter(Objects::nonNull)
.collect(Collectors.toList());
e.setSaasRoles(BeanUtil.copyToList(roles, RoleDTO.class));
}
});
}
// private Map<Long, RoleResp> listSaasRoles(Set<Long> roleIds) {
// if (CollUtil.isEmpty(roleIds)) {
// return Collections.emptyMap();
// }
// List<RoleResp> roles = new ArrayList<>();
// PageRoleReq param = PageRoleReq.builder().roleIds(roleIds).build();
//
// PageResp<RoleResp> rolePage;
// int pageNumber = 0;
// param.setPageSize(JOB_PAGE_SIZE);
// do {
// param.setPage(++pageNumber);
// rolePage = roleGateway.page(param);
// if (CollUtil.isNotEmpty(rolePage.getData())) {
// roles.addAll(rolePage.getData());
// }
// } while (rolePage.hasNext());
//
// return roles.stream()
// .collect(Collectors.toMap(RoleResp::getRoleId, Function.identity(), (oldVal, newVal) -> oldVal));
// }
private Map<Long, RoleResp> listSaasRoles(Set<Long> roleIds) {
if (CollUtil.isEmpty(roleIds)) {
return Collections.emptyMap();
}
List<RoleResp> roles = new ArrayList<>();
PageRoleReq param = PageRoleReq.builder().roleIds(roleIds).build();
PageResp<RoleResp> rolePage;
int pageNumber = 0;
param.setPageSize(JOB_PAGE_SIZE);
do {
param.setPage(++pageNumber);
rolePage = roleGateway.page(param);
if (CollUtil.isNotEmpty(rolePage.getData())) {
roles.addAll(rolePage.getData());
}
} while (rolePage.hasNext());
return roles.stream()
.collect(Collectors.toMap(RoleResp::getRoleId, Function.identity(), (oldVal, newVal) -> oldVal));
}
private void buildOrgGroup4OrgJob(List<OrgJobDTO> orgJobs) {
// 查询岗位与分组的关联关系

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()))
.projectGroupStatus(ProjectGroupStatusEnum.ACTIVE.getValue())
.projectGroupType(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());
if (nodeUserDTO != null) {
resp.setPlatTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode()));
resp.setProjectTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode()));
resp.setProjectTeamId(NodeProfile.resolveProjectTeamId(nodeUserDTO.getNode()));
}
}
return resps;