Merge remote-tracking branch 'refs/remotes/origin/feature/REQ-3488' into feature/REQ-3488-zhh

This commit is contained in:
zhanghonghao 2025-01-03 10:51:21 +08:00
commit 60de8fa0e7
32 changed files with 1651 additions and 1 deletions

View File

@ -0,0 +1,80 @@
package cn.axzo.orgmanax.api.invite.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.invite.dto.OrgWorkerInviteDTO;
import cn.axzo.orgmanax.dto.invite.req.ApproveOrgWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.req.CountTeamWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.req.LeaveOrgWorkerTeamReq;
import cn.axzo.orgmanax.dto.invite.req.OperateOrgWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.req.PageOrgTeamWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.req.SaveOrgWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.req.UpdateOrgWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.resp.CountTeamWorkerInviteResp;
import java.util.List;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author syl
* @date 2024/12/17
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgWorkerInviteApi {
/**
* 班组 查看邀请列表(是否需要历史申请数据)
*/
@PostMapping("/api/org-gateway/team/worker-invite/page")
ApiResult<PageResp<OrgWorkerInviteDTO>> page(@RequestBody @Valid PageOrgTeamWorkerInviteReq req);
/**
* 班组长-工友申请数量
* 分组count 查询
*/
@PostMapping("/api/org-gateway/team/worker-invite/group-count")
ApiResult<List<CountTeamWorkerInviteResp>> groupCountWorkerInvite(@RequestBody @Valid CountTeamWorkerInviteReq req);
/**
* 班组长-班组操作
* 班组长同意思或拒绝工人
*/
@PostMapping("/api/org-gateway/team/worker-invite/operate")
ApiResult<Boolean> operateWorkerInvite(@RequestBody @Valid OperateOrgWorkerInviteReq req);
/**
* 班组长-邀请工人 或者 工人-申请加入班组
* 新增工人邀请
*/
@PostMapping("/api/org-gateway/team/worker-invite/save")
ApiResult<OrgWorkerInviteDTO> saveWorkerInvite(@RequestBody @Valid SaveOrgWorkerInviteReq req);
/**
* 新增工人被退出项目
*/
@PostMapping("/api/org-gateway/team/worker-invite/quit")
ApiResult<List<OrgWorkerInviteDTO>> quitWorkerProjectTeam(@RequestBody @Valid List<SaveOrgWorkerInviteReq> param);
/**
* 工人-离开班组
*/
@PostMapping("/api/org-gateway/team/worker-invite/leave")
ApiResult<OrgWorkerInviteDTO> workerLeaveTeam(@RequestBody @Valid LeaveOrgWorkerTeamReq req);
/**
* 同意指定人在指定班组邀请记录 or 撤销班组下所有邀请记录
*/
@PostMapping("/api/org-gateway/worker-invite/approve")
ApiResult<Void> approveWorkerInvite(@RequestBody @Valid ApproveOrgWorkerInviteReq req);
/**
* 修改邀请记录
*/
@PostMapping("/api/org-gateway/worker-invite/update")
ApiResult<Boolean> update(@RequestBody @Valid UpdateOrgWorkerInviteReq req);
}

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

@ -2,8 +2,11 @@ package cn.axzo.orgmanax.api.orguser.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
import cn.axzo.orgmanax.dto.orguser.dto.OrgUserDTO;
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
import cn.axzo.orgmanax.dto.orguser.req.PageOrgUserReq;
import cn.axzo.orgmanax.dto.orguser.resp.PageOrgUserElementResp;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -32,4 +35,14 @@ public interface OrgUserApi {
@PostMapping("/api/org-user/list")
ApiResult<PageResp<OrgUserDTO>> list(@RequestBody @Validated ListOrgUserReq req);
/**
* TODO: 第三期实现
* 通用人员列表分页查询
* 和其他接口逻辑返回结构完全不同只能平迁
* @param req 分页查询入参
* @return 通用人员列表
*/
@PostMapping(value = "/api/org-user/generic/page")
ApiResult<PageResp<PageOrgUserElementResp>> page(@RequestBody @Valid PageOrgUserReq req);
}

View File

@ -0,0 +1,98 @@
package cn.axzo.orgmanax.dto.invite.dto;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author zhangran
* @Date 2022/6/17 17:16
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OrgWorkerInviteDTO {
/**
* 邀请记录ID
*/
private Long id;
/**
* 班组id
*/
private Long unitId;
/**
* 班组名称
*/
private String unitName;
/**
* 工人id
*/
private Long identityId;
/**
* 工人名称
*/
private String workerName;
/**
* 工人头像地址
*/
private String workerFaceUrl;
/**
* 基础消息id
*/
private Long msgId;
/**
* 通过消息id
*/
private Long msgSucId;
/**
* 项目通过二维码邀请id
*/
private Long projectWorkerInviteId;
/**
* 状态1-未处理2-同意3-拒绝4-撤回
*/
private Integer status;
/**
* 1.工人申请 2.班组邀请 3.项目申请 4.工人申请离开
*/
private Integer type;
/**
* 邀请记录中的工人工种列表
*/
List<WorkerInviteProfessionDTO> professions;
/**
* 项目内班组id
*/
private Long projectTeamId;
/**
* 其它备注信息 json
*/
private String ext;
/**
* 岗位id
*/
private Long jobId;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
// /**
// * 工种和技能标签
// */
// private List<OrganizationalWorkerInviteProfessionVO> workerInviteProfessions;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.orgmanax.dto.invite.dto;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 工人邀请记录-工人工种
*
* @author zhangtianyu
* @date 2023/1/29 3:36 PM
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class WorkerInviteProfessionDTO {
/**
* 工种id
*/
private Long professionId;
/**
* 工种名称
*/
private String professionName;
/**
* 技能标签列表-树形结构
*/
private List<WorkerInviteSkillTagDTO> skillTags;
/**
* 技能标签列表-平铺结构
*/
private List<WorkerInviteSkillTagDTO> expandedSkillTags;
}

View File

@ -0,0 +1,40 @@
package cn.axzo.orgmanax.dto.invite.dto;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 工人邀请记录-技能标签
* @author zhangtianyu
* @date 2023/1/29 3:36 PM
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class WorkerInviteSkillTagDTO {
/**
* 所属工种id
*/
private Long professionId;
/**
* 父技能标签code
*/
private String parentSkillTagCode;
/**
* 技能标签code
*/
private String skillTagCode;
/**
* 技能标签名称
*/
private String skillTagName;
/**
* 子技能标签列表
*/
private List<WorkerInviteSkillTagDTO> childSkillTags;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.orgmanax.dto.invite.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author syl
* @date 2024/12/19
*/
@Getter
@AllArgsConstructor
public enum TeamWorkerInviteStatusEnum {
/**
* 邀请状态
*/
UNTREATED(1, "未处理"),
AGREE(2, "同意"),
REFUSE(3, "拒绝"),
WITHDRAW(4, "撤回"),
ABORT(5, "终止"),
;
public final int value;
public final String desc;
}

View File

@ -0,0 +1,38 @@
package cn.axzo.orgmanax.dto.invite.enums;
import java.util.Arrays;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author syl
* @date 2024/12/17
*/
@Getter
@AllArgsConstructor
public enum WorkerInviteType {
/**
* 工人加入班组
*/
WORKER_JOIN_TEAM(1, "工人加入班组"),
/**
* 工人离开班组
*/
WORKER_LEAVE_TEAM(2, "工人离开班组"),
/**
* 工人离开项目部
*/
WORKER_LEAVE_WORKSPACE(3, "工人离开项目部"),
;
private final Integer code;
private final String desc;
public static WorkerInviteType getByCode(Integer code) {
return Arrays.stream(values()).filter(it -> it.getCode().equals(code))
.findFirst()
.orElse(null);
}
}

View File

@ -0,0 +1,62 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.List;
import java.util.Set;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @ClassName OrganizationalWorkTeamInviteDeleteVO
* @Author zhangran
* @Date 2023/3/4 15:14
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ApproveOrgWorkerInviteReq {
/**
* 邀请记录状态
* @see TeamWorkerInviteStatusEnum
*/
@NotNull(message = "inviteStatus can not null")
private Integer inviteStatus;
/**
* 班组id
*/
@NotNull(message = "班组不能为空")
private Long unitId;
/**
* 工人id
*/
private List<Long> identityIds;
/**
* 组织架构人员id
*/
private Long nodeUserId;
/**
* 项目内的班组id
*/
private Long projectTeamId;
/**
* 邀请记录ID 列表
*/
private Set<Long> inviteIds;
/**
* 项目内邀请id
*/
private List<Long> projectWorkerInviteIds;
/**
* 平台班组id
*/
private Long platTeamId;
}

View File

@ -0,0 +1,34 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author zhangran
* @Date 2022/6/17 17:26
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CountTeamWorkerInviteReq {
/**
* 班组id
*/
private Long unitId;
/**
* 1.工人申请 2.班组邀请 3.项目申请 4.离开班组
*/
private List<Integer> types;
/**
* 状态1-未处理2-同意3-拒绝4-撤回
*/
private List<Integer> statuses;
}

View File

@ -0,0 +1,38 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @ClassName OrganizationalWorkerLeaveTeamVO
* @Description 工人离开班组
* @Author zhangran
* @Date 2022/6/20 15:38
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class LeaveOrgWorkerTeamReq {
/**
* 身份id
*/
@NotNull
private Long identityId;
/**
* 班组id
*/
@NotNull
private List<Long> unitIds;
/**
* 工种和技能标签
*/
private List<OrgWorkerInviteProfessionReq> workerInviteProfessions;
}

View File

@ -0,0 +1,49 @@
package cn.axzo.orgmanax.dto.invite.req;
import cn.axzo.orgmanax.dto.invite.enums.WorkerInviteType;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Description 班组同意或者拒绝
* @Author zhangran
* @Date 2022/6/17 18:04
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OperateOrgWorkerInviteReq {
/**
* 班组id
*/
private Long unitId;
/**
* 邀请id
*/
@NotNull(message = "请选择工人")
private List<Long> inviteIds;
/**
* Boolean.TRUE 同意 Boolean.FALSE 拒绝
*/
@NotNull(message = "请选择审批类型")
private Boolean flagType;
/**
* 操作人personId
*/
private Long operatorPersonId;
/**
* 操作类型
* @see WorkerInviteType
*/
@NotNull(message = "type can not null")
private WorkerInviteType type;
}

View File

@ -0,0 +1,66 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @ClassName OrganizationalWorkerInviteProfessionVO
* @Author zhongjie
* @Date 2023/01/29 17:20
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OrgWorkerInviteProfessionReq {
/**
* 工种id
*/
@NotNull(message = "工种id不能为空")
private Long professionId;
/**
* 工种名称
*/
@NotEmpty(message = "工种名称不能为空")
private String professionName;
/**
* 工种code
*/
private String professionCode;
/**
* 技能标签
*/
@Valid
private List<WorkerSkillTag> skillTags;
@Data
public static class WorkerSkillTag {
/**
* 父节点技能标签Code第一级就不传
*/
private String parentSkillTagCode;
/**
* 技能标签名称
*/
@NotEmpty(message = "技能标签名称不能为空")
private String skillTagName;
/**
* 技能标签code
*/
private String skillTagCode;
}
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.dto.invite.req;
import cn.axzo.foundation.page.PageReqV2;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author zhangran
* @Date 2022/6/17 17:26
* @Desc 班组申请实体
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageOrgTeamWorkerInviteReq extends PageReqV2 {
/**
* 班组id
*/
private Long unitId;
/**
* 1.工人申请 2.班组邀请 3.项目申请 4.离开班组
*/
private List<Integer> types;
/**
* 状态1-未处理2-同意3-拒绝4-撤回
*/
private List<Integer> statuses;
/**
* 工人身份id
*/
private Long identityId;
// /**
// * 是否返回历史数据
// * 现有逻辑改造为true statuses新增值 2-同意3-拒绝
// */
// private Boolean flagHistory;
}

View File

@ -0,0 +1,91 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.Collections;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description 班组同意或者拒绝
* @Author zhangran
* @Date 2022/6/17 18:04
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SaveOrgWorkerInviteReq {
/**
* 1-工人申请 2-班组邀请
*/
@NotNull(message = "邀请类型不能为空")
private Integer teamWorkerInviteType;
/**
* 班组id
*/
@NotNull(message = "班组不能为空")
private Long unitId;
/**
* 工人身份id
*/
@NotNull(message = "请选择工人")
private Long identityId;
/**
* Boolean.TRUE 同意 Boolean.FALSE 拒绝
*/
@NotNull(message = "工人姓名")
private String workerName;
@NotNull(message = "工人姓名")
private String workerFaceUrl;
/**
* 平台班组部门nodeId
*/
// @NotNull
// @Min(value = 1)
// todo @yh 这里厍这个节点做什么没有查到有使用的地方然后pluto调用方也没有没加这个参数
Long organizationalNodeId;
/**
* 项目内班组邀请id
*/
private Long projectInviteId;
/**
* 工种和技能标签
*/
@Valid
//@NotNull(message = "工种不能为空")
//@Size(min = 1, message = "请至少选择一个工种")
private List<OrgWorkerInviteProfessionReq> workerInviteProfessions;
/**
* 项目内班组id
*/
private Long projectTeamId;
/**
* 其它备注信息
*/
private String ext;
private Integer quitWorkerStatus;
/**
* 岗位id
*/
private Long jobId;
/**
* 操作人id todo 实现待定
*/
private Long operatorId;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.orgmanax.dto.invite.req;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @Author zr
* @Date 2024/3/2 17:25
* @Description
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateOrgWorkerInviteReq {
/**
* 邀请id
*/
@NotNull(message = "邀请id不能为空")
private Long inviteId;
/**
* 项目内的邀请id
*/
@NotNull(message = "项目内的邀请id不能为空")
private Long projectWorkerInviteId;
}

View File

@ -0,0 +1,27 @@
package cn.axzo.orgmanax.dto.invite.resp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author syl
* @date 2024/12/17
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CountTeamWorkerInviteResp {
/**
* 1.工人申请 2.班组邀请 3.项目申请 4.离开班组
*/
private Integer type;
/**
* 数量
*/
private Integer count;
}

View File

@ -47,4 +47,10 @@ public interface OrgJobConstants {
* 默认岗位的标识
*/
Integer ORG_JOB_DEF_FLAG = 1;
/**
* 岗位人数无上限
*/
Long NO_LIMIT_COUNT = -1L;
}

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;
}

View File

@ -0,0 +1,21 @@
package cn.axzo.orgmanax.dto.orguser.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description
* 通用人员列表场景枚举
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum GenericUserListScenarioEnum {
ATTENDANCE("考勤");
private final String desc;
}

View File

@ -0,0 +1,24 @@
package cn.axzo.orgmanax.dto.orguser.enums;
/**
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
public interface IBaseUserFlagEnum {
/**
* 获取用户标签编码
*/
String getCode();
/**
* 获取用户标签描述
*/
String getDesc();
/**
* 标签优先级
*/
int getPriority();
}

View File

@ -0,0 +1,65 @@
package cn.axzo.orgmanax.dto.orguser.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.orguser.enums.GenericUserListScenarioEnum;
import com.alibaba.fastjson.JSON;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageOrgUserReq extends PageReqV2 {
/**
* 人员列表使用的业务场景
* ATTENDANCE: 考勤
*
* @see GenericUserListScenarioEnum
*/
@NotNull(message = "业务场景不能为空")
private String scenario;
/**
* 项目id
*/
private Long workspaceId;
/**
* 当前用户session中的单位id
*/
private Long sessionOuId;
/**
* 搜索关键字
* * 姓名模糊查询
* * 手机号身份证号精确匹配
*/
private String keyword;
/**
* 单位id列表
*/
private List<Long> ouIds;
/**
* 用户标签编码列表
*/
private List<String> userFlagCodes;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,59 @@
package cn.axzo.orgmanax.dto.orguser.resp;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @description 用户基础信息
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserBriefResp implements Serializable {
private static final long serialVersionUID = -1037841970293974523L;
/**
* 自然人id
*/
private Long personId;
/**
* 身份id
*/
private Long identityId;
/**
* 真实姓名
*/
private String realName;
/**
* 用户头像
*/
private String avatarUrl;
/**
* 性别
* 1女性
* 2男性
*/
private Integer genderCode;
/**
* 手机号
*/
private String phone;
/**
* 身份证号
*/
private String idNumber;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,45 @@
package cn.axzo.orgmanax.dto.orguser.resp;
import cn.axzo.orgmanax.dto.orguser.enums.IBaseUserFlagEnum;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description 标签实体
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserFlagEntityResp implements Serializable {
private static final long serialVersionUID = -6965721030042547822L;
/**
* 标签编码
*/
private String flagCode;
/**
* 标签描述
*/
private String flagDesc;
public static OrgUserFlagEntityResp from(IBaseUserFlagEnum userFlag) {
return OrgUserFlagEntityResp.builder()
.flagCode(userFlag.getCode())
.flagDesc(userFlag.getDesc())
.build();
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,69 @@
package cn.axzo.orgmanax.dto.orguser.resp;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author luofu
* @version 1.0
* @date 2024/8/2
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageOrgUserElementResp implements Serializable {
private static final long serialVersionUID = 4468275572308565888L;
/**
* 用户基础信息
*/
private OrgUserBriefResp brief;
/**
* 单位id
*/
private Long ouId;
/**
* 单位名称
*/
private String ouName;
/**
* 部门id
*/
private Long orgNodeId;
/**
* 部门名称
*/
private String orgNodeName;
/**
* 主管标识
*/
private Boolean managerFlag;
/**
* 岗位id - 主岗
*/
private Long jobId;
/**
* 岗位名称 - 主岗
*/
private String jobName;
/**
* 用户标签列表
*/
private List<OrgUserFlagEntityResp> userFlagEntities;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,63 @@
package cn.axzo.orgmanax.dto.project.team.dto;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 经营范围DTO
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class TeamCategoryDTO {
/**
* 邀请id/申请id
*/
private Long inviteId;
/**
* 班组id
*/
private Long projectTeamId;
/**
* 经营范围code
*/
private String categoryCode;
/**
* 经营范围名称
*/
private String categoryName;
/**
* 父级经营范围code
*/
private String parentCategoryCode;
/**
* 父级经营范围name
*/
private String parentCategoryName;
private Integer type;
private Integer valid;
/**
* 经营范围子级
*/
private List<TeamCategoryDTO> workScopes;
public TeamCategoryDTO(String categoryCode, String categoryName) {
this.categoryCode = categoryCode;
this.categoryName = categoryName;
}
public TeamCategoryDTO(Long inviteId, Long projectTeamId, String categoryCode, String categoryName) {
this.inviteId = inviteId;
this.projectTeamId = projectTeamId;
this.categoryCode = categoryCode;
this.categoryName = categoryName;
}
}

View File

@ -0,0 +1,29 @@
package cn.axzo.orgmanax.dto.project.team.resp;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/18
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class TeamCategoryResp {
/**
* 班组id
*/
private Long projectTeamId;
/**
* 经营范围列表
*/
private List<TeamCategoryDTO> categoryList;
}

View File

@ -5,6 +5,8 @@ import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.orguser.feign.OrgUserApi;
import cn.axzo.orgmanax.dto.orguser.req.ListOrgUserReq;
import cn.axzo.orgmanax.dto.orguser.dto.OrgUserDTO;
import cn.axzo.orgmanax.dto.orguser.req.PageOrgUserReq;
import cn.axzo.orgmanax.dto.orguser.resp.PageOrgUserElementResp;
import cn.axzo.orgmanax.server.orguser.service.OrgUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
@ -25,4 +27,9 @@ public class OrgUserController implements OrgUserApi {
public ApiResult<PageResp<OrgUserDTO>> list(ListOrgUserReq req) {
return ApiResult.success(orgUserService.page(req));
}
@Override
public ApiResult<PageResp<PageOrgUserElementResp>> page(PageOrgUserReq req) {
return ApiResult.success();
}
}