feat(REQ-3488): 人员异动记录api调整

This commit is contained in:
songyuanlun 2025-01-03 10:13:01 +08:00
parent 4306f13708
commit 329d349f09
6 changed files with 482 additions and 0 deletions

View File

@ -0,0 +1,27 @@
package cn.axzo.orgmanax.api.nodeuser.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.nodeuser.req.PageOrgUserChangedRecordReq;
import cn.axzo.orgmanax.dto.nodeuser.resp.OrgUserChangedRecordResp;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 组织人员异动api
* TODO: 第三期实现
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgUserChangeRecordApi {
/**
* 人员异动记录分页查询
*/
@PostMapping("/api/org/user/changed-record/page")
ApiResult<PageResp<OrgUserChangedRecordResp>> page(@RequestBody @Valid PageOrgUserChangedRecordReq req);
}

View File

@ -0,0 +1,39 @@
package cn.axzo.orgmanax.dto.nodeuser.enums;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description
* 人员异动场景
* @author luofu
* @version 1.0
* @date 2024/10/24
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum OrgUserChangedScenarioEnum {
JOINED("JOINED", "加入"),
WITHDRAW("WITHDRAW", "离开<单位:离职,项目:退场>"),
LEAVED("LEAVED", "离场"),
CHANGED("CHANGED", "部门岗位变更");
private final String code;
private final String desc;
public static Optional<OrgUserChangedScenarioEnum> codeOf(String code) {
return Arrays.stream(values())
.filter(e -> Objects.equals(code, e.code))
.findFirst();
}
public static OrgUserChangedScenarioEnum codeOfThrowException(String code) {
return codeOf(code)
.orElseThrow(() -> new RuntimeException(String.format("invalid code.[%s]", code)));
}
}

View File

@ -0,0 +1,40 @@
package cn.axzo.orgmanax.dto.nodeuser.enums;
import java.util.Arrays;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description
* 人员在组织中的状态
* @author luofu
* @version 1.0
* @date 2024/10/24
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum OrgUserStatusEnum {
INACTIVE(0, "入场中"), ACTIVE(1, "已入场"), LEAVE(3, "离场"),
WITHDRAW(4, "退场"), JOINED(5, "在职"), QUIT(6, "离职"),
NONE(-1, "非法值");
private final int code;
private final String desc;
public boolean isEqual(int code) {
return this.code == code;
}
public static Optional<OrgUserStatusEnum> codeOf(int code) {
return Arrays.stream(values())
.filter(e -> e.code == code)
.findFirst();
}
public static OrgUserStatusEnum codeOfThrowException(int code) {
return codeOf(code).orElseThrow(() -> new RuntimeException(String.format("invalid code.[%d]", code)));
}
}

View File

@ -0,0 +1,65 @@
package cn.axzo.orgmanax.dto.nodeuser.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.nodeuser.enums.OrgUserChangedScenarioEnum;
import java.util.Collection;
import java.util.Date;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageOrgUserChangedRecordReq extends PageReqV2 {
/**
* 自然人id集合
*/
private Set<Long> personIds;
/**
* 租户id
*/
private Long workspaceId;
/**
* 单位id
*/
private Collection<Long> ouIds;
/**
* 人员异动场景列表
* @see OrgUserChangedScenarioEnum
*/
private Collection<String> scenarios;
/**
* 搜素关键字
* 1姓名模糊匹配
* 2手机号精确匹配
*/
private String keyword;
/**
* 查询的开始时间
*/
private Date beginTime;
/**
* 查询的结束时间
*/
private Date endTime;
/**
* 是否需要每个person 最新的记录
* 默认 不需要
*/
private Boolean needLatestFlag;
}

View File

@ -0,0 +1,182 @@
package cn.axzo.orgmanax.dto.nodeuser.resp;
import cn.axzo.orgmanax.dto.nodeuser.enums.OrgUserStatusEnum;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author luofu
* @version 1.0
* @date 2024/10/27
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserBasicInfoResp implements Serializable {
private static final long serialVersionUID = -417565663936325962L;
/**
* 用户状态
* @see OrgUserStatusEnum
*/
private String status;
/**
* 部门列表
*/
private List<OrgUserNodeInfoDTO> orgNodes;
/**
* 岗位列表
*/
private List<OrgUserJobInfoDTO> jobs;
/**
* 角色列表
*/
private List<OrgUserRoleDTO> roles;
/**
* 直属主管信息
*/
private DirectManagerDTO directManager;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class OrgUserNodeInfoDTO implements Serializable {
private static final long serialVersionUID = 1553728683787221674L;
/**
* 部门id
*/
private Long nodeId;
/**
* 部门名称
*/
private String nodeName;
/**
* 顶级部门id
*/
private Long topNodeId;
/**
* 部门主管标识
*/
private boolean manager;
/**
* 部门名称path包含当前部门
*/
private List<String> path;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class OrgUserJobInfoDTO implements Serializable {
private static final long serialVersionUID = -4468117792583126437L;
/**
* 岗位id
*/
private Long id;
/**
* 岗位名称
*/
private String name;
/**
* 岗位编码
*/
private String code;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class OrgUserRoleDTO implements Serializable {
private static final long serialVersionUID = -6964230627747183642L;
/**
* 岗位id
*/
private Long id;
/**
* 岗位名称
*/
private String name;
/**
* 角色编码
*/
private String code;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class DirectManagerDTO implements Serializable {
private static final long serialVersionUID = 3009318843471722223L;
/**
* 直属主管id
*/
private Long personId;
/**
* 直属主管名称
*/
private String realName;
/**
* 直属主管手机号
*/
private String phone;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
}

View File

@ -0,0 +1,129 @@
package cn.axzo.orgmanax.dto.nodeuser.resp;
import cn.axzo.orgmanax.dto.nodeuser.enums.OrgUserChangedScenarioEnum;
import cn.axzo.orgmanax.dto.nodeuser.enums.OrgUserStatusEnum;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserChangedRecordResp {
/**
* 自然人id
*/
private Long personId;
/**
* 手机号,加密
*/
private String phone;
/**
* 用户真实姓名
*/
private String realName;
/**
* 单位id
*/
private Long ouId;
/**
* 单位名称
*/
private String ouName;
/**
* 租户id
*/
private Long workspaceId;
/**
* 租户名称
*/
private String workspaceName;
/**
* 租户类型
* GENERAL_ENT 总包企业级
* GENERAL_PROJECT 总包项目级
* GOVERNMENT 政务监管平台
* AGENCY_ENT 分包企业级
* OMS OMS工作台
*/
private String workspaceType;
/**
* 人员异动情景
* @see OrgUserChangedScenarioEnum
*/
private OrgUserChangedScenarioEnum scenario;
/**
* 备注
*/
private String remark;
/**
* 人员组织架构信息
*/
private OrgUserBasicInfoResp orgUserInfo;
/**
* 记录时间
*/
private Date recordTime;
/**
* 操作人的id
*/
private Long operatorId;
/**
* 操作人姓名
*/
private String operatorName;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
/**
* 用户状态
* @see OrgUserStatusEnum
*/
private String status;
/**
* 部门列表
*/
private List<OrgUserBasicInfoResp.OrgUserNodeInfoDTO> orgNodes;
/**
* 岗位列表
*/
private List<OrgUserBasicInfoResp.OrgUserJobInfoDTO> jobs;
/**
* 角色列表
*/
private List<OrgUserBasicInfoResp.OrgUserRoleDTO> roles;
/**
* 直属主管信息
*/
private OrgUserBasicInfoResp.DirectManagerDTO directManager;
}