diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/DataTagClient.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/DataTagClient.java new file mode 100644 index 0000000..d43c362 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/DataTagClient.java @@ -0,0 +1,20 @@ +package cn.axzo.orgmanax.infra.client.datatagger; + +import cn.axzo.orgmanax.infra.client.datatagger.dto.RevokeDataTagReq; + +/** + * @author luofu + * @version 1.0 + * @description 标签系统的相关API + * @date 2025/3/5 + */ +public interface DataTagClient { + + /** + * 撤销标签 + * + * @param request 入参 + * @return 结果,成功返回 {@code true},否则返回 {@code false} + */ + boolean revokeDataTags(RevokeDataTagReq request); +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/DataTagQueryProperty.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/DataTagQueryProperty.java new file mode 100644 index 0000000..f2a47dd --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/DataTagQueryProperty.java @@ -0,0 +1,50 @@ +package cn.axzo.orgmanax.infra.client.datatagger.dto; + +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author luofu + * @version 1.0 + * @description 标签系统查询属性 + * @date 2025/3/5 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DataTagQueryProperty { + + /** + * 单位id + */ + private Long ouId; + + /** + * 项目id + */ + private Long workspaceId; + + /** + * 平台班组的nodeId + */ + private Long platTeamNodeId; + + /** + * 项目班组的nodeId + */ + private Long projectTeamNodeId; + + /** + * 小组的nodeId + */ + private Long groupNodeId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/RevokeDataTagReq.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/RevokeDataTagReq.java new file mode 100644 index 0000000..22c8948 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/dto/RevokeDataTagReq.java @@ -0,0 +1,62 @@ +package cn.axzo.orgmanax.infra.client.datatagger.dto; + +import cn.axzo.orgmanax.infra.client.datatagger.enums.DataTagTypeEnum; +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; + +import java.util.List; + +/** + * @author luofu + * @version 1.0 + * @description 撤销数据标签入参 + * @date 2025/3/5 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RevokeDataTagReq { + + /** + * 对象类型 - 必传 + */ + @NonNull + private DataTagTypeEnum objectType; + + /** + * 标签编码 - 必传 + */ + @NonNull + private List tagCodes; + + /** + * 标签值编码 + */ + private List tagValueCodes; + + /** + * 对象ID + */ + private List objectIds; + + /** + * 查询对象 + */ + @Builder.Default + private DataTagQueryProperty queryProperties = new DataTagQueryProperty(); + + /** + * 严格模式 + */ + private boolean restrictMode = true; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/enums/DataTagTypeEnum.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/enums/DataTagTypeEnum.java new file mode 100644 index 0000000..3aaa469 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datatagger/enums/DataTagTypeEnum.java @@ -0,0 +1,57 @@ +package cn.axzo.orgmanax.infra.client.datatagger.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author luofu + * @version 1.0 + * @description 对象类型 - 与标签系统的枚举对应 {@see cn.axzo.datatagger.common.enums.TagObjectType} + * @date 2025/3/5 + */ +@Getter +@AllArgsConstructor +public enum DataTagTypeEnum { + + // queryFields = [], objectId = personId + PLAT_PERSON("平台用户"), + // queryFields = [ouId], objectId = personId + UNIT_PERSON("单位用户"), + // queryFields = [workspaceId], objectId = personId + PROJECT_PERSON("项目用户"), + // queryFields = [workspaceId, ouId], objectId = personId + PROJECT_UNIT_PERSON("项目单位用户"), + // queryFields = [ouId, platTeamNodeId], objectId = personId + UNIT_TERM_PERSON("单位班组用户"), + // queryFields = [workspaceId, projectTeamNodeId], objectId = personId + PROJECT_TERM_PERSON("项目班组用户"), + // queryFields = [workspaceId, groupNodeId], objectId = personId + PROJECT_GROUP_PERSON("项目小组用户"), + // queryFields = [workspaceId?], objectId = ouId + PLAT_OR_PROJECT_UNIT("全部"), + // queryFields = [], objectId = ouId + PLAT_UNIT("平台单位"), + // queryFields = [workspaceId], objectId = ouId + PROJECT_UNIT("项目单位"), + WORKSPACE("租户"), + // queryFields = [], objectId = workspaceId + PROJECT("项目"), + // !! 班组 + // queryFields = [], objectId = platTeamNodeId / projectTeamNodeId + PLAT_OR_PROJECT_TEAM("全部"), + // queryFields = [], objectId = platTeamNodeId + PLAT_TEAM("平台班组"), + // queryFields = [], objectId = projectTeamNodeId + PROJECT_TEAM("项目班组"), + // !! 小组 + // queryFields = [], objectId = groupNodeId + GROUP("小组"), + // !! 部门 + // queryFields = [ouId], objectId = departmentNodeId + UNIT_DEPARTMENT("单位普通部门"), + // queryFields = [workspaceId], objectId = departmentNodeId + PROJECT_DEPARTMENT("项目普通部门"), + ; + + private final String desc; +} diff --git a/orgmanax-integration/pom.xml b/orgmanax-integration/pom.xml index 285fc7e..4ae327f 100644 --- a/orgmanax-integration/pom.xml +++ b/orgmanax-integration/pom.xml @@ -62,12 +62,20 @@ - + + cn.axzo.attendance attendance-api ${project.version} + + + + cn.axzo.data-tagger + data-tagger-api + 1.0.0-SNAPSHOT + \ No newline at end of file diff --git a/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/datatagger/DataTagClientImpl.java b/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/datatagger/DataTagClientImpl.java new file mode 100644 index 0000000..5073b1e --- /dev/null +++ b/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/datatagger/DataTagClientImpl.java @@ -0,0 +1,56 @@ +package cn.axzo.orgmanax.integration.sdk.datatagger; + +import cn.axzo.datatagger.api.objecttag.ObjectTagClient; +import cn.axzo.datatagger.api.objecttag.request.ObjectTagQueryProperties; +import cn.axzo.datatagger.api.objecttag.request.RevokeObjectTagRequest; +import cn.axzo.datatagger.common.enums.TagObjectType; +import cn.axzo.orgmanax.infra.client.datatagger.DataTagClient; +import cn.axzo.orgmanax.infra.client.datatagger.dto.DataTagQueryProperty; +import cn.axzo.orgmanax.infra.client.datatagger.dto.RevokeDataTagReq; +import cn.axzo.orgmanax.integration.core.RpcWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * @author luofu + * @version 1.0 + * @description 标签系统相关API + * @date 2025/3/5 + */ +@Component +@RequiredArgsConstructor +public class DataTagClientImpl implements DataTagClient { + + private final ObjectTagClient objectTagClient; + + @Override + public boolean revokeDataTags(RevokeDataTagReq request) { + return RpcWrapper.commonRes(() -> objectTagClient.revokeObjectTags(toRevokeRequest(request))); + } + + private static RevokeObjectTagRequest toRevokeRequest(RevokeDataTagReq request) { + RevokeObjectTagRequest req = new RevokeObjectTagRequest(); + BeanUtils.copyProperties(request, req); + req.setObjectType(TagObjectType.valueOf(request.getObjectType().name())); + req.setQueryProperties(toQueryProperties(request.getQueryProperties())); + return req; + } + + private static ObjectTagQueryProperties toQueryProperties(DataTagQueryProperty queryProperties) { + ObjectTagQueryProperties properties = new ObjectTagQueryProperties(); + // ouId + Optional.ofNullable(queryProperties.getOuId()).ifPresent(properties::setOuId); + // workspaceId + Optional.ofNullable(queryProperties.getWorkspaceId()).ifPresent(properties::setWorkspaceId); + // projectTeamNodeId + Optional.ofNullable(queryProperties.getPlatTeamNodeId()).ifPresent(properties::setPlatTeamNodeId); + // projectTeamNodeId + Optional.ofNullable(queryProperties.getProjectTeamNodeId()).ifPresent(properties::setProjectTeamNodeId); + // groupNodeId + Optional.ofNullable(queryProperties.getGroupNodeId()).ifPresent(properties::setGroupNodeId); + return properties; + } +}