feat(REQ-3714) 工人退场流程优化 - 人员打标签流程迁移
This commit is contained in:
parent
db6eaf84cc
commit
9b4dfab87f
@ -1,5 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.client.datatagger;
|
||||
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.OperateDataTagReq;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.RevokeDataTagReq;
|
||||
|
||||
/**
|
||||
@ -17,4 +18,11 @@ public interface DataTagClient {
|
||||
* @return 结果,成功返回 {@code true},否则返回 {@code false}
|
||||
*/
|
||||
boolean revokeDataTags(RevokeDataTagReq request);
|
||||
|
||||
/**
|
||||
* 标签操作
|
||||
*
|
||||
* @param tagsRequest 入参
|
||||
*/
|
||||
void operateDataTags(OperateDataTagReq tagsRequest);
|
||||
}
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package cn.axzo.orgmanax.infra.client.datatagger.dto;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author luofu
|
||||
* @version 1.0
|
||||
* @date 2025/3/10
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataTagNode {
|
||||
|
||||
/**
|
||||
* 节点编码
|
||||
*/
|
||||
private String nodeCode;
|
||||
|
||||
/**
|
||||
* 标签值的编码
|
||||
*/
|
||||
private List<String> valueCodes;
|
||||
|
||||
public boolean invalid() {
|
||||
return StringUtils.isBlank(nodeCode) || CollUtil.isEmpty(valueCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataTagQueryProperty {
|
||||
public class DataTagProperty {
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
@ -0,0 +1,56 @@
|
||||
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/10
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class OperateDataTagReq {
|
||||
|
||||
@NonNull
|
||||
private String app;
|
||||
|
||||
/**
|
||||
* 对象类型 - 必传
|
||||
*/
|
||||
@NonNull
|
||||
private DataTagTypeEnum objectType;
|
||||
|
||||
/**
|
||||
* 标签编码 - 必传
|
||||
*/
|
||||
@NonNull
|
||||
private List<DataTagNode> tagNodes;
|
||||
|
||||
/**
|
||||
* 对象ID
|
||||
*/
|
||||
@NonNull
|
||||
private List<Long> objectIds;
|
||||
|
||||
/**
|
||||
* 查询对象
|
||||
*/
|
||||
@Builder.Default
|
||||
private DataTagProperty property = new DataTagProperty();
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
@ -48,7 +48,7 @@ public class RevokeDataTagReq {
|
||||
* 查询对象
|
||||
*/
|
||||
@Builder.Default
|
||||
private DataTagQueryProperty queryProperties = new DataTagQueryProperty();
|
||||
private DataTagProperty properties = new DataTagProperty();
|
||||
|
||||
/**
|
||||
* 严格模式
|
||||
|
||||
@ -1,18 +1,26 @@
|
||||
package cn.axzo.orgmanax.integration.sdk.datatagger;
|
||||
|
||||
import cn.axzo.datatagger.api.JsonQueryFields;
|
||||
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.api.tagope.TagOperateClient;
|
||||
import cn.axzo.datatagger.api.tagope.request.OperateTagsRequest;
|
||||
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.DataTagNode;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.DataTagProperty;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.OperateDataTagReq;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.RevokeDataTagReq;
|
||||
import cn.axzo.orgmanax.integration.core.RpcWrapper;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* @author luofu
|
||||
@ -25,32 +33,66 @@ import java.util.Optional;
|
||||
public class DataTagClientImpl implements DataTagClient {
|
||||
|
||||
private final ObjectTagClient objectTagClient;
|
||||
private final TagOperateClient tagOperateClient;
|
||||
|
||||
@Override
|
||||
public boolean revokeDataTags(RevokeDataTagReq request) {
|
||||
return RpcWrapper.commonRes(() -> objectTagClient.revokeObjectTags(toRevokeRequest(request)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void operateDataTags(OperateDataTagReq tagsRequest) {
|
||||
RpcWrapper.commonRes(() -> tagOperateClient.operateTags(toOperateTagsRequest(tagsRequest)));
|
||||
}
|
||||
|
||||
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()));
|
||||
req.setQueryProperties(toQueryProperties(request.getProperties()));
|
||||
return req;
|
||||
}
|
||||
|
||||
private static ObjectTagQueryProperties toQueryProperties(DataTagQueryProperty queryProperties) {
|
||||
ObjectTagQueryProperties properties = new ObjectTagQueryProperties();
|
||||
private static OperateTagsRequest toOperateTagsRequest(OperateDataTagReq param) {
|
||||
OperateTagsRequest operateTagsRequest = new OperateTagsRequest();
|
||||
operateTagsRequest.setApp(param.getApp());
|
||||
operateTagsRequest.setObjectType(TagObjectType.valueOf(param.getObjectType().name()));
|
||||
operateTagsRequest.setRuntimeFields(toProperties(param.getProperty()));
|
||||
operateTagsRequest.setObjectIds(param.getObjectIds());
|
||||
operateTagsRequest.setTagInfos(CollUtil.map(param.getTagNodes(), DataTagClientImpl::toTagValueInfo, true));
|
||||
return operateTagsRequest;
|
||||
}
|
||||
|
||||
private static ObjectTagQueryProperties toQueryProperties(DataTagProperty properties) {
|
||||
ObjectTagQueryProperties queryProperties = new ObjectTagQueryProperties();
|
||||
queryProperties.setProps(toProperties(properties));
|
||||
return queryProperties;
|
||||
}
|
||||
|
||||
private static OperateTagsRequest.TagValueInfo toTagValueInfo(DataTagNode tagNode) {
|
||||
OperateTagsRequest.TagValueInfo tagValueInfo = new OperateTagsRequest.TagValueInfo();
|
||||
// tag node code
|
||||
tagValueInfo.setTagNodeCode(tagNode.getNodeCode());
|
||||
// tag value mapper
|
||||
Function<String, OperateTagsRequest.ObjectTagValueInfo> tagValueMapper = e ->
|
||||
OperateTagsRequest.ObjectTagValueInfo.builder().tagValueCode(e).build();
|
||||
tagValueInfo.setObjectTagValues(CollUtil.map(tagNode.getValueCodes(), tagValueMapper, true));
|
||||
return tagValueInfo;
|
||||
}
|
||||
|
||||
private static JSONObject toProperties(DataTagProperty properties) {
|
||||
JSONObject tagProperties = new JSONObject();
|
||||
JsonQueryFields fields = JsonQueryFields.create(tagProperties);
|
||||
// ouId
|
||||
Optional.ofNullable(queryProperties.getOuId()).ifPresent(properties::setOuId);
|
||||
Optional.ofNullable(properties.getOuId()).ifPresent(fields::setOuId);
|
||||
// workspaceId
|
||||
Optional.ofNullable(queryProperties.getWorkspaceId()).ifPresent(properties::setWorkspaceId);
|
||||
Optional.ofNullable(properties.getWorkspaceId()).ifPresent(fields::setWorkspaceId);
|
||||
// projectTeamNodeId
|
||||
Optional.ofNullable(queryProperties.getPlatTeamNodeId()).ifPresent(properties::setPlatTeamNodeId);
|
||||
Optional.ofNullable(properties.getPlatTeamNodeId()).ifPresent(fields::setPlatTeamNodeId);
|
||||
// projectTeamNodeId
|
||||
Optional.ofNullable(queryProperties.getProjectTeamNodeId()).ifPresent(properties::setProjectTeamNodeId);
|
||||
Optional.ofNullable(properties.getProjectTeamNodeId()).ifPresent(fields::setProjectTeamNodeId);
|
||||
// groupNodeId
|
||||
Optional.ofNullable(queryProperties.getGroupNodeId()).ifPresent(properties::setGroupNodeId);
|
||||
return properties;
|
||||
Optional.ofNullable(properties.getGroupNodeId()).ifPresent(fields::setGroupNodeId);
|
||||
return tagProperties;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package cn.axzo.orgmanax.server.orguser.service;
|
||||
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.req.TagOperateReq;
|
||||
import cn.axzo.orgmanax.dto.orguser.dto.OrgUserDTO;
|
||||
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -14,5 +15,5 @@ public interface OrgUserService {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
|
||||
void operateTag(TagOperateReq param);
|
||||
}
|
||||
|
||||
@ -1,16 +1,33 @@
|
||||
package cn.axzo.orgmanax.server.orguser.service.impl;
|
||||
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.enums.TagOperateEnum;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.req.TagOperateReq;
|
||||
import cn.axzo.orgmanax.dto.orguser.dto.OrgUserDTO;
|
||||
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.DataTagClient;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.DataTagNode;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.DataTagProperty;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.OperateDataTagReq;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.dto.RevokeDataTagReq;
|
||||
import cn.axzo.orgmanax.infra.client.datatagger.enums.DataTagTypeEnum;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserExtraQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserExtraUpsertRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.repository.OrgUserQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.repository.OrgUserUpsertRepository;
|
||||
import cn.axzo.orgmanax.server.orguser.service.OrgUserService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@ -19,6 +36,11 @@ import java.util.stream.Collectors;
|
||||
public class OrgUserServiceImpl implements OrgUserService {
|
||||
|
||||
private final OrgUserQueryRepository orgUserQueryRepository;
|
||||
private final OrgUserUpsertRepository orgUserUpsertRepository;
|
||||
private final NodeUserExtraQueryRepository nodeUserExtraQueryRepository;
|
||||
private final NodeUserExtraUpsertRepository nodeUserExtraUpsertRepository;
|
||||
|
||||
private final DataTagClient dataTagClient;
|
||||
|
||||
@Override
|
||||
public PageResp<OrgUserDTO> page(ListOrgUserReq req) {
|
||||
@ -27,4 +49,101 @@ public class OrgUserServiceImpl implements OrgUserService {
|
||||
// assemble data if needed
|
||||
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void operateTag(TagOperateReq param) {
|
||||
String operateTagPair = param.getTagNodeCode() + ":" + param.getTagValueCode();
|
||||
boolean isRemove = param.getOperateType() == TagOperateEnum.REMOVE;
|
||||
boolean update = false;
|
||||
List<NodeUserExtraQueryRepository.NodeUserExtraResp> nodeUserExtraList = listNodeUserExtra(param);
|
||||
nodeUserExtraList.forEach(e -> e.setTags(dealTagPair(isRemove, e.getTags(), operateTagPair)));
|
||||
List<OrgUserQueryRepository.OrgUserResp> orgUserList = listOrgUsers(param);
|
||||
orgUserList.forEach(e -> e.setTags(dealTagPair(isRemove, e.getTags(), operateTagPair)));
|
||||
if (CollUtil.isNotEmpty(nodeUserExtraList)) {
|
||||
Map<Long, Set<String>> idTagsMap = nodeUserExtraList.stream()
|
||||
.collect(Collectors.toMap(NodeUserExtraQueryRepository.NodeUserExtraResp::getId,
|
||||
NodeUserExtraQueryRepository.NodeUserExtraResp::getTags));
|
||||
nodeUserExtraUpsertRepository.updateTagsMap(idTagsMap);
|
||||
update = true;
|
||||
}
|
||||
if (CollUtil.isNotEmpty(orgUserList)) {
|
||||
Map<Long, Set<String>> idTagsMap = orgUserList.stream()
|
||||
.collect(Collectors.toMap(OrgUserQueryRepository.OrgUserResp::getId, OrgUserQueryRepository.OrgUserResp::getTags));
|
||||
orgUserUpsertRepository.updateTagsMap(idTagsMap);
|
||||
update = true;
|
||||
}
|
||||
if (update) {
|
||||
if (isRemove) {
|
||||
RevokeDataTagReq revokeObjectTagRequest = toRevokeDataTagReq(param);
|
||||
dataTagClient.revokeDataTags(revokeObjectTagRequest);
|
||||
} else {
|
||||
OperateDataTagReq operateTagsRequest = toOperateTagsRequest(param);
|
||||
dataTagClient.operateDataTags(operateTagsRequest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<NodeUserExtraQueryRepository.NodeUserExtraResp> listNodeUserExtra(TagOperateReq param) {
|
||||
NodeUserExtraQueryRepository.ListReq nodeUserExtraReq = NodeUserExtraQueryRepository.ListReq.builder()
|
||||
.personIds(param.getPersonIds())
|
||||
.workspaceId(param.getLoginWorkspaceId())
|
||||
.build();
|
||||
return nodeUserExtraQueryRepository.list(nodeUserExtraReq);
|
||||
}
|
||||
|
||||
private List<OrgUserQueryRepository.OrgUserResp> listOrgUsers(TagOperateReq param) {
|
||||
ListOrgUserReq request = ListOrgUserReq.builder()
|
||||
.personIds(Optional.ofNullable(param.getPersonIds()).map(Sets::newHashSet).orElseGet(Sets::newHashSet))
|
||||
.workspaceId(param.getLoginWorkspaceId())
|
||||
.build();
|
||||
return orgUserQueryRepository.list(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理标签对
|
||||
*/
|
||||
private Set<String> dealTagPair(boolean isRemove, Set<String> tags, String operateTagPair) {
|
||||
if (CollUtil.isEmpty(tags)) {
|
||||
if (isRemove) {
|
||||
return Collections.emptySet();
|
||||
} else {
|
||||
return Collections.singleton(operateTagPair);
|
||||
}
|
||||
}
|
||||
if (isRemove) {
|
||||
tags.remove(operateTagPair);
|
||||
} else {
|
||||
tags.add(operateTagPair);
|
||||
}
|
||||
return tags;
|
||||
}
|
||||
|
||||
private static OperateDataTagReq toOperateTagsRequest(TagOperateReq param) {
|
||||
OperateDataTagReq operateTag = new OperateDataTagReq();
|
||||
operateTag.setApp("maokai");
|
||||
operateTag.setObjectType(DataTagTypeEnum.PROJECT_PERSON);
|
||||
operateTag.setObjectIds(param.getPersonIds());
|
||||
// properties
|
||||
DataTagProperty property = new DataTagProperty();
|
||||
property.setWorkspaceId(param.getLoginWorkspaceId());
|
||||
operateTag.setProperty(property);
|
||||
// tag node
|
||||
DataTagNode tagNode = new DataTagNode();
|
||||
tagNode.setNodeCode(param.getTagNodeCode());
|
||||
tagNode.setValueCodes(Collections.singletonList(param.getTagValueCode()));
|
||||
operateTag.setTagNodes(Collections.singletonList(tagNode));
|
||||
return operateTag;
|
||||
}
|
||||
|
||||
private static RevokeDataTagReq toRevokeDataTagReq(TagOperateReq param) {
|
||||
RevokeDataTagReq revokeDataTag = new RevokeDataTagReq();
|
||||
revokeDataTag.setObjectIds(param.getPersonIds());
|
||||
revokeDataTag.setTagCodes(Collections.singletonList(param.getTagNodeCode()));
|
||||
revokeDataTag.setTagValueCodes(Collections.singletonList(param.getTagValueCode()));
|
||||
revokeDataTag.setObjectType(DataTagTypeEnum.PROJECT_PERSON);
|
||||
DataTagProperty tagQueryProperties = new DataTagProperty();
|
||||
tagQueryProperties.setWorkspaceId(param.getLoginWorkspaceId());
|
||||
revokeDataTag.setProperties(tagQueryProperties);
|
||||
return revokeDataTag;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user