add(feature/REQ-3714)删除平台班组成员
This commit is contained in:
parent
ed7e9c7eee
commit
7f16ae4d00
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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> {
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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> {
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user