add(feature/REQ-3714)删除平台班组成员

This commit is contained in:
zhangran 2025-03-10 10:14:02 +08:00
parent ed7e9c7eee
commit 7f16ae4d00
8 changed files with 310 additions and 1 deletions

View File

@ -0,0 +1,31 @@
package cn.axzo.orgmanax.dto.nodeuser.req;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @Author zr
* @Date 2025/3/7 14:26
* @Description
**/
@Data
public class DeleteNodeUserReq {
/**
* 项目部id
*/
@NotNull(message = "项目部不能为空")
private Long workspaceId;
/**
* 单位id
*/
@NotNull(message = "单位不能为空")
private Long ouId;
/**
* 自然人id
*/
@NotEmpty(message = "人员不能为空")
private List<Long> personIds;
}

View File

@ -21,7 +21,9 @@ public class ProcessNodeUserReq {
CREATE("创建", "createNodeUserProcessor"),
UPDATE("普通更新", "updateNodeUserProcessor"),
UNIT_DELETE("删除单位人员", "unitDeleteNodeUserProcessor"),
WORKSPACE_DELETE("删除项目人员", "workspaceDeleteNodeUserProcessor");
WORKSPACE_DELETE("删除项目人员", "workspaceDeleteNodeUserProcessor"),
DELETE_PLAT_TAM_WORKER("平台班组删除人员", "deletePlatTeamWorkerProcessor"),
;
private final String desc;
private final String processor;

View File

@ -0,0 +1,10 @@
package cn.axzo.orgmanax.infra.dao.node.dao;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation;
import cn.axzo.orgmanax.infra.dao.node.mapper.OrganizationalTeamOuRelationMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Component;
@Component
public class TeamOuRelationDao extends ServiceImpl<OrganizationalTeamOuRelationMapper, OrganizationalTeamOuRelation> {
}

View File

@ -0,0 +1,66 @@
package cn.axzo.orgmanax.infra.dao.node.entity;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.util.Date;
@TableName(value = "organizational_team_ou_relation")
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
public class OrganizationalTeamOuRelation {
@TableId(
type = IdType.AUTO
)
protected Long id;
/**
* 平台班组ID
*/
@TableField("team_ou_id")
private Long teamOuId;
/**
* 平台班组默认节点ID
*/
@TableField("team_node_id")
private Long teamNodeId;
/**
* 企业/团队单位ID
*/
@TableField("ou_id")
private Long ouId;
/**
* 企业/团队单位下班组节点ID
*/
@TableField("node_id")
private Long nodeId;
/**
* 扩展字段
*/
@TableField(value = "extra", typeHandler = FastjsonTypeHandler.class)
private JSONObject extra;
protected Date createAt;
protected Long createBy;
protected Date updateAt;
protected Long updateBy;
@TableField("is_delete")
protected Long isDelete = 0L;
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.infra.dao.node.mapper;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrganizationalTeamOuRelationMapper extends BaseMapper<OrganizationalTeamOuRelation> {
}

View File

@ -0,0 +1,64 @@
package cn.axzo.orgmanax.infra.dao.node.repository;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation;
import cn.hutool.core.bean.BeanUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
import java.util.Optional;
public interface TeamOuRelationRepository {
/**
* 保存
* @param teamOuRelation
*/
void save(OrganizationalTeamOuRelation teamOuRelation);
/**
* 根据nodeId获取
* @param id
* @return
*/
OrganizationalTeamOuRelation getByNodeId(Long id);
List<OrganizationalTeamOuRelation> list(ListReq req);
default OrganizationalTeamOuRelation one(OneReq req) {
return oneOpt(req).orElse(null);
}
default Optional<OrganizationalTeamOuRelation> oneOpt(OneReq req) {
ListReq page = BeanUtil.toBean(req, ListReq.class);
return list(page).stream().findFirst();
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class ListReq {
@CriteriaField
private Long nodeId;
@CriteriaField
private Long teamNodeId;
@CriteriaField
private Long teamOuId;
@CriteriaField
private Long ouId;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class OneReq {
private Long nodeId;
private Long teamNodeId;
private Long teamOuId;
}
}

View File

@ -0,0 +1,36 @@
package cn.axzo.orgmanax.infra.dao.node.repository.impl;
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.orgmanax.infra.dao.node.dao.TeamOuRelationDao;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation;
import cn.axzo.orgmanax.infra.dao.node.repository.TeamOuRelationRepository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
@RequiredArgsConstructor
@Component
public class TeamOuRelationRepositoryImpl implements TeamOuRelationRepository {
private final TeamOuRelationDao teamOuRelationDao;
@Override
public void save(OrganizationalTeamOuRelation teamOuRelation) {
teamOuRelationDao.save(teamOuRelation);
}
@Override
public OrganizationalTeamOuRelation getByNodeId(Long id) {
return teamOuRelationDao.lambdaQuery()
.eq(OrganizationalTeamOuRelation::getId, id)
.one();
}
@Override
public List<OrganizationalTeamOuRelation> list(ListReq req) {
QueryWrapper<OrganizationalTeamOuRelation> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalTeamOuRelation.class);
return teamOuRelationDao.list(wrapper);
}
}

View File

@ -0,0 +1,91 @@
package cn.axzo.orgmanax.server.nodeuser.service.processor.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.DeleteNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation;
import cn.axzo.orgmanax.infra.dao.node.repository.TeamOuRelationRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserDelete;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author zr
* @Date 2025/3/7 15:54
* @Description
**/
@Component
@Slf4j
@RequiredArgsConstructor
public class DeletePlatTeamWorkerProcessor implements NodeUserProcessor {
private final TeamOuRelationRepository teamOuRelationRepository;
private final NodeUserService nodeUserService;
private final NodeUserFoundationService nodeUserFoundationService;
@Override
public ProcessResult process(ProcessContext context) {
log.info("DeletePlatTeamWorkerProcessor process context:{}", JSON.toJSONString(context));
Axssert.checkNonNull(context.getParams(), "参数不能为空");
DeleteNodeUserReq param = context.getParams().toJavaObject(DeleteNodeUserReq.class);
ListNodeUserReq nodeUserReq = ListNodeUserReq.builder()
.workspaceId(param.getWorkspaceId())
.organizationalUnitId(param.getOuId())
.personIds(param.getPersonIds()).build();
List<NodeUserDTO> nodeUserDTOS = nodeUserService.list(nodeUserReq);
List<Long> nodeIds = nodeUserDTOS.stream().map(NodeUserDTO::getOrganizationalNodeId).distinct().collect(Collectors.toList());
Map<Long, List<NodeUserDTO>> nodeUserMap = nodeUserDTOS.stream().collect(Collectors.groupingBy(NodeUserDTO::getOrganizationalNodeId));
// 获取teamouRelation数据
Map<Long, OrganizationalTeamOuRelation> teamOuRelationMap = nodeIds.stream().map(item -> {
TeamOuRelationRepository.ListReq build = TeamOuRelationRepository.ListReq.builder().nodeId(item).build();
return teamOuRelationRepository.list(build);
}).filter(Objects::nonNull).flatMap(Collection::stream)
.collect(Collectors.toMap(OrganizationalTeamOuRelation::getNodeId, Function.identity(), (x, y) -> x));
// 获取平台班组下的工人
if (CollUtil.isNotEmpty(teamOuRelationMap)) {
nodeUserMap.forEach((k, vs) -> {
OrganizationalTeamOuRelation ouRelation = teamOuRelationMap.get(k);
if (Objects.nonNull(ouRelation)) {
List<Long> deleteTeamWorkerPersonIds = vs.stream().map(NodeUserDTO::getPersonId).collect(Collectors.toList());
NodeUserDelete nodeUserDelete = NodeUserDelete.builder()
.ouId(ouRelation.getTeamOuId())
.personIds(deleteTeamWorkerPersonIds)
.isUnitDelete(Boolean.TRUE)
.build();
nodeUserFoundationService.delete(nodeUserDelete);
return ;
}
log.error("获取企业下班组与平台班组关系失败, nodeId:{}", k);
});
}
// 调用统用删除逻辑
NodeUserDelete nodeUserDelete = NodeUserDelete.builder().ouId(param.getOuId())
.workspaceId(param.getWorkspaceId())
.personIds(param.getPersonIds())
.operatorId(context.getOperatorId())
.isUnitDelete(Boolean.TRUE)
.build();
List<OrganizationalNodeUser> delete = nodeUserFoundationService.delete(nodeUserDelete);
return ProcessResult.success((JSONObject) JSON.toJSON(delete));
}
}