Merge branch 'release-20250218' into 'master'

feat:[REQ-3488]

See merge request universal/infrastructure/backend/orgmanax!202
This commit is contained in:
谭杰 2025-02-18 02:36:35 +00:00
commit eb798b1771
447 changed files with 22202 additions and 946 deletions

View File

@ -8,6 +8,6 @@ import org.springframework.context.annotation.Configuration;
* @date 2022/4/25 10:48
*/
@Configuration
@EnableFeignClients(basePackages = "cn.axzo.orgmanax.api.**.feign")
@EnableFeignClients(basePackages = "cn.axzo.orgmanax.api.project.worker.feign")
public class OrgmanaxApiConfig {
}

View File

@ -0,0 +1,34 @@
package cn.axzo.orgmanax.api.invite.enums;
import com.google.common.collect.Lists;
import lombok.Getter;
import java.util.List;
@Getter
public enum WorkerInviteStatusEnum {
WAIT_LEADER_APPROVE(1, "待班组审批"),
WAIT_LABOUR_APPROVE(2, "待劳务审批"),
PASS(3, "通过"),
TEAM_OWNER_REFUSE(4, "班组长拒绝"),
MANAGER_REFUSE(5, "从业人员拒绝"),
SYSTEM_END(6, "系统终止"),
CANCEL(7, "撤销"),
;
private Integer value;
private String desc;
WorkerInviteStatusEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public static List<Integer> active() {
return Lists.newArrayList(WAIT_LEADER_APPROVE.value, WAIT_LABOUR_APPROVE.value);
}
}

View File

@ -0,0 +1,44 @@
package cn.axzo.orgmanax.api.invite.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.invite.req.ApplyOrgTeamInviteReq;
import cn.axzo.orgmanax.dto.invite.req.ApproveOrgTeamInviteReq;
import cn.axzo.orgmanax.dto.invite.req.InviteBatchOrgProjectTeamReq;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
*
* TODO 三期实现
*
* 班组邀请进项目
*
* @author wangli
* @since 2024/7/17 20:36
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamInviteApi {
/**
* cms批量邀请工人加入项目
* todo 三期实现迁移至invite的package下
*/
@PostMapping("/api/project/team-group/invite-batch")
ApiResult<Void> teamOwnerBatchAgreeWorkerJoinProject(@RequestBody @Valid InviteBatchOrgProjectTeamReq req);
/**
* 班组邀请进项目申请
*/
@PostMapping("/api/project/team-invite/apply")
ApiResult<Long> fakeApplyProjectTeam(@Valid @RequestBody ApplyOrgTeamInviteReq req);
/**
* 班组邀请进项目审批
*/
@PostMapping("/api/project/team-invite/approve")
ApiResult<Void> fakeApproveApplyProjectTeam(@Valid @RequestBody ApproveOrgTeamInviteReq req);
}

View File

@ -0,0 +1,46 @@
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.project.req.CancelProjectWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.project.req.PageProjectWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.project.req.UpdateProjectWorkerInviteReq;
import cn.axzo.orgmanax.dto.invite.project.resp.OrgProjectWorkerInviteResp;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* todo:三期实现
* 项目内工人邀请api
*
* @author 夏嘉孚
* @since 2023/2/10
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectWorkerInviteApi {
/**
* 分页查询项目内工人邀请信息
*/
@PostMapping("/api/project/worker-invite/page")
ApiResult<PageResp<OrgProjectWorkerInviteResp>> page(@RequestBody @Valid PageProjectWorkerInviteReq req);
/**
* 终止邀请
*/
@PostMapping("/api/project/worker-invite/cancel")
ApiResult<Void> cancelProjectWorkerInvite(@RequestBody @Valid CancelProjectWorkerInviteReq req);
/**
* 修改接口能兼容旧逻辑
* 非请勿调修改工人邀请记录的状态
*
*/
@PostMapping("/api/project/worker-invite/update")
ApiResult<Void> update(@RequestBody @Valid UpdateProjectWorkerInviteReq req);
}

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

@ -2,9 +2,9 @@ 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.dto.NodeUserDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.SearchEntNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp;
import com.alibaba.fastjson.JSONObject;

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,11 +2,14 @@ package cn.axzo.orgmanax.api.orgjob.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.job.dto.JobGroupDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.JobTreeGroupReq;
import cn.axzo.orgmanax.dto.job.req.PageOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -32,4 +35,12 @@ public interface OrgJobApi {
*/
@PostMapping("/api/job/list")
ApiResult<PageResp<OrgJobDTO>> list(@RequestBody @Validated PageOrgJobReq req);
/**
* TODO: 第三期实现
* OMS 分组岗位树
*/
@PostMapping("/api/job/job-tree/group")
ApiResult<List<JobGroupDTO>> groupAndJobTree(@RequestBody JobTreeGroupReq 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>> genericPage(@RequestBody @Valid PageOrgUserReq req);
}

View File

@ -0,0 +1,24 @@
package cn.axzo.orgmanax.api.processrelationship.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.processrelationship.dto.BusinessProcessRelationshipDTO;
import cn.axzo.orgmanax.dto.processrelationship.req.ProcessRelationListReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author zhanghongbo
* @date 2024/12/30
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface ProcessRelationshipApi {
/**
* 查询流程关联表
*/
@PostMapping("/api/process-relationship/page")
ApiResult<PageResp<BusinessProcessRelationshipDTO>> list(@RequestBody ProcessRelationListReq req);
}

View File

@ -0,0 +1,21 @@
package cn.axzo.orgmanax.api.project.group.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.checkerframework.checker.units.qual.A;
/**
* @author weXueFeng
* @date 2022/10/20 15:12
*/
@Getter
@AllArgsConstructor
public enum ProjectGroupTypeEnum {
DIRECTLY_UNDER(0, "直属小组"),
COOPERATION(1, "合作小组"),
;
Integer value;
String desc;
}

View File

@ -0,0 +1,153 @@
package cn.axzo.orgmanax.api.project.group.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.group.req.*;
import cn.axzo.orgmanax.dto.project.group.resp.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.Valid;
import java.util.List;
/**
* 项目内小组
*
* @author wenXueFeng
* @date 2022/10/21 9:59
*/
@FeignClient(name = "org-gateway", url = "${axzo.service.org-gateway:http://org-gateway:8080}")
public interface OrgProjectGroupApi {
/**
* 项目内班组列表查询
*
* @author: zhanglei
* @date: 2023/08/21 11:03
* @param req req - 对应LabourProjectGroupQueryBo
* @return:
**/
@PostMapping("api/project-group/page")
ApiResult<List<LabourProjectGroupListV2Res>> page(@RequestBody @Valid ProjectGroupPageReq req);
/**
* CMS创建小组
* todo 三期实现
* @param req
* @return
*/
@PostMapping("api/project-group/create-group")
ApiResult<Long> create(@RequestBody @Valid GroupNodeCreateReq req);
/**
* CMS编辑小组
* todo 三期实现
*
* @param req
* @return
*/
@PostMapping("api/project-group/edit")
ApiResult<Void> edit(@RequestBody @Valid GroupNodeEditReq req);
/**
* CMS解散小组
* todo 三期实现
* @param req
* @return
*/
@PostMapping("api/project-group/delete")
ApiResult<Void> delete(@RequestBody @Valid GroupNodeDeleteReq req);
/**
* 目前用来做cms协同管理, worker里面的大部分信息都直接需要
* <p> 慎用这个接口
*
* @param workspaceId
* @return
*/
@PostMapping("api/project-group/worker/expose-workers")
ApiResult<List<ExposeGroupWorkerRespItem>> exposeWorkers(
@RequestParam("workspaceId") Long workspaceId);
// /**
// * 查询甲方班组的合作小组 TODO zhanghonghao
// */
// @PostMapping("/api/project-group/group/list")
// ApiResult<List<ProjectTeamGroupListResp>> groupList(@RequestBody ProjectTeamGroupListReq req);
/**
* 小组长权限
*
* @param groupId 小组id
* @author: wxf
* @date: 2022/11/30 14:47
* @return:
**/
@GetMapping("api/direct-group/owner/permission")
ApiResult<ProjectGroupOwnerPermissionRes> groupOwnerPermission(@RequestParam("groupId") Long groupId);
/**
* 查询没有设置小组长的小组
*
* @param workspaceId
* @return cn.axzo.apollo.core.web.Result<cn.axzo.maokai.api.labour.dto.projectgroup.ProjectGroupListRes>
* @author zhongjie
* @date 2022/11/30 16:32
**/
@GetMapping("api/direct-group/no-leader/group")
ApiResult<ProjectGroupListResp> getNoLeaderGroupList(@RequestParam("workspaceId") Long workspaceId, @RequestParam("platTeamId") Long platTeamId, @RequestParam("isReturnWorker") Boolean isReturnWorker);
/**
* 查询平台班组id + 工人id 项目内是否为小组长
*
* @param req
* @return cn.axzo.apollo.core.web.Result<cn.axzo.maokai.api.labour.dto.projectgroup.ProjectGroupRes>
* @author zhongjie
* @date 2022/11/30 16:41
**/
@PostMapping("api/direct-group/page-group-info")
ApiResult<PageResp<ProjectGroupRes>> pageGroupInfo(@RequestBody @Valid ProjectDirectGroupPageGroupReq req);
/**
* 小组成立序号
*
* @param projectTeamId
* @param groupId
* @return
*/
@GetMapping("api/direct-group/get-join-team-top-no")
ApiResult<Integer> getJoinTeamTopNo(@RequestParam("projectTeamId") Long projectTeamId,
@RequestParam("groupId") Long groupId);
/**
* 列表项目内班组班组下小组成员列表
* @param projectTeamId
* @return
*/
@GetMapping("api/direct-group/list-project-group-worker")
ApiResult<List<ProjectTeamGroupWorkerRes>> listProjectGroupWorker(@RequestParam("projectTeamId") Long projectTeamId);
/**
* @param req 与项目内小组关联节点
* @return
* @author zr
* @description 通过小组节点获取项目内小组信息
* @date 2024/1/15 17:15
**/
@PostMapping("api/direct-group/get-project-group-by-group-node-id")
ApiResult<List<ProjectGroupNodeRes>> pageProjectGroupNode(@RequestBody ProjectDirectGroupPageProjectGroupNodeReq req);
/**
* @param teamNodeId 班组节点id
* @return
* @author zr
* @description 通过班组节点获取无小组长的小组列表和未加入小组的工人列表
* @date 2024/2/4 17:15
**/
@GetMapping("api/direct-group/get-project-group-un-owner-and-worker")
ApiResult<ProjectGroupAndWorkerResp> getProjectGroupUnOwnerAndWorker(@RequestParam("teamNodeId") Long teamNodeId);
}

View File

@ -0,0 +1,27 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO;
import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* 项目内班组api
* 业务表
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamApi {
/**
* 列表接口
*/
@PostMapping("/api/org/project-team/list")
ApiResult<List<OrgProjectTeamDTO>> list(@RequestBody @Validated ListProjectTeamReq req);
}

View File

@ -0,0 +1,86 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO;
import cn.axzo.orgmanax.dto.project.team.req.OperateOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.OrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.PageOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.PreCheckRemoveTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.RemoveProjectTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.SaveProjectTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.TreeOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.resp.RemoveTeamCategoryCheckResp;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @Author: zhanglei
* @Name: ProjectTeamCategoryApi
* @Date: 2023/8/1 15:13
* @Desc: 班组分类内部接口
* @Version: 1.0
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamCategoryApi {
/**
* todo 三期实现
* 删除项目班组的分类进行check
*/
@PostMapping("/api/project/team-category/remove/check")
ApiResult<RemoveTeamCategoryCheckResp> preCheckRemoveTeamCategory(
@RequestBody @Valid PreCheckRemoveTeamCategoryReq req);
/**
* todo 三期实现
* 添加项目班组分类
* 单个班组的班组类别初始化接口逻辑相差太大无法合并
* 这里用到宽表 org_project_worker_wide
*/
@PostMapping("/api/project/team-category/add")
ApiResult<Void> save(@RequestBody @Valid SaveProjectTeamCategoryReq req);
/**
* 删除项目班组分类
* 这里用到宽表 org_project_worker_wide
* 用到 org_project_team_category 表数据
*/
@PostMapping("/api/project/team-category/remove")
ApiResult<Void> removeTeamCategory(@RequestBody @Valid RemoveProjectTeamCategoryReq req);
/**
* todo 三期实现
* 操作班组类别
*/
@PostMapping(value = "/api/project/team-category/operate")
ApiResult<Void> operate(@RequestBody @Valid OperateOrgTeamCategoryReq req);
/**
* replace实际上把老的删了更换为入参
* 入参是集合类型无法合并到通用接口
* todo 三期实现 看业务方使用场景
*/
@PostMapping(value = "/api/project/team-category/upsert")
ApiResult<Void> replace(@RequestBody @NotEmpty List<OrgTeamCategoryReq> req);
// ---------------- 新版接口 ----------------
/**
* 列表分页查询
*/
@PostMapping(value = "/api/project/team-category/list")
ApiResult<PageResp<TeamCategoryDTO>> list(@RequestBody PageOrgTeamCategoryReq req);
/**
* 查询班组-树形结构
*/
@PostMapping(value = "/api/project/team-category/tree-list")
ApiResult<List<TeamCategoryAggregateDTO>> treeList(@RequestBody TreeOrgTeamCategoryReq req);
}

View File

@ -0,0 +1,23 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamLogApi {
/**
* 创建项目班组日志
*/
@PostMapping("/api/project/team-log/create")
ApiResult<Long> create(@RequestBody ProjectTeamLogSaveReq req);
}

View File

@ -0,0 +1,45 @@
package cn.axzo.orgmanax.api.project.worker.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq;
import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupWorkerListReq;
import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp;
import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupWorkerListResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
/**
* @author zhanghongbo
* @date 2025/1/8
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectWorkerApi {
/**
* 未分组工人
*
* @param req req
* @author: wxf
* @date: 2022/11/30 11:40
* @return:
* REQ-1483
**/
@PostMapping("api/project-worker/ungrouped/worker")
ApiResult<List<ProjectDirectGroupUngroupedWorkerResp>> ungroupedWorker(@RequestBody @Valid ProjectDirectGroupUngroupedWorkerReq req);
/**
* 直属小组工人
*
* @param req req
* @author: wxf
* @date: 2022/11/30 14:04
* @return:
**/
@PostMapping("api/project-worker/direct-group/worker")
ApiResult<List<ProjectDirectGroupWorkerListResp>> workerList(@RequestBody @Valid ProjectDirectGroupWorkerListReq req);
}

View File

@ -0,0 +1,40 @@
package cn.axzo.orgmanax.api.teamlog.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author zhanghongbo
* @date 2024/12/25
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgTeamLogApi {
/**
* 分页列表接口
* XXX本接口默认分页单页最多返回1000条数据调用方使用时需注意
*
* @param req
* @return
*
*/
@PostMapping("/api/team-log/list")
ApiResult<PageResp<TeamLogDTO>> list(@RequestBody @Validated TeamLogPageReq req);
/**
* 记录班组改变日志
* @param req
* @return
*/
@PostMapping("/api/team-log/record-change-team-owner")
ApiResult<Long> recordChangeTeamOwner(@RequestBody TeamLogRecordChangeTeamOwnerReq req);
}

View File

@ -1,12 +1,16 @@
package cn.axzo.orgmanax.api.unit.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.req.CreateUnitContactReq;
import cn.axzo.orgmanax.dto.unit.resp.CreateUnitContactResp;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
/**
@ -21,14 +25,26 @@ public interface OrgUnitContactApi {
* 通过单位id获取单位联系人列表
*/
@PostMapping("/api/org/unit/contact/list")
ApiResult<List<OrgUnitContactDTO>> list(List<Long> ouIds);
ApiResult<List<OrgUnitContactDTO>> list(@RequestBody List<Long> ouIds);
/**
* 批量创建单位联系人
* 批量新增单位联系人
*/
@PostMapping("/api/org/unit/contact/create")
ApiResult<List<CreateUnitContactResp>> create(List<CreateUnitContactReq> contactReqList);
@PostMapping("/api/unit/contact/save-batch")
ApiResult<List<OrgUnitContactDTO>> saveBatch(@RequestBody @Valid SaveBatchOrgContactReq req);
/**
* 编辑单位联系人 or 删除单位联系人
*/
@PostMapping("/api/unit/contact/update")
ApiResult<OrgUnitContactDTO> update(@RequestBody @Valid OperateOrgContactReq req);
/**
* 分页获取单位联系人列表
*
* @param req
* @return
*/
@PostMapping("/api/unit/contact/page")
ApiResult<PageResp<OrgUnitContactDTO>> page(@RequestBody @Valid PageOrgContactReq req);
}

View File

@ -0,0 +1,41 @@
package cn.axzo.orgmanax.api.unit.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.privacy.req.PageOrgUnitPrivacySettingReq;
import cn.axzo.orgmanax.dto.unit.privacy.req.SaveOrgUnitPrivacySettingReq;
import cn.axzo.orgmanax.dto.unit.privacy.req.UpdateOrgUnitPrivacySettingReq;
import cn.axzo.orgmanax.dto.unit.privacy.resp.OrgUnitPrivacySettingsResp;
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
* @author syl
* @date 2024/12/16
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgUnitPrivacySettingApi {
/**
* 查询单位相关的隐私设置
*/
@PostMapping(value = "/api/unit/privacy-settings/page")
ApiResult<PageResp<OrgUnitPrivacySettingsResp>> page(@RequestBody @Valid PageOrgUnitPrivacySettingReq param);
/**
* 新增隐私设置数据
*/
@PostMapping(value = "/api/unit/privacy-settings/save")
ApiResult<String> save(@RequestBody @Valid SaveOrgUnitPrivacySettingReq param);
/**
* 新增隐私设置数据
*/
@PostMapping(value = "/api/unit/privacy-settings/update")
ApiResult<Boolean> update(@RequestBody @Valid UpdateOrgUnitPrivacySettingReq update);
}

View File

@ -1,8 +1,15 @@
package cn.axzo.orgmanax.api.unit.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationDTO;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationOuTypeDTO;
import cn.axzo.orgmanax.dto.unit.qualification.dto.OrgQualificationsApplyDTO;
import cn.axzo.orgmanax.dto.unit.qualification.req.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -23,4 +30,37 @@ public interface OrgUnitQualificationApi {
@PostMapping("api/org/qualification/types")
ApiResult<List<Integer>> getQualificationTypesByUnitId(@RequestParam("unitId") Long unitId);
/**
* 分页获取资质
*/
@PostMapping("/api/org/qualification/list")
ApiResult<PageResp<OrgQualificationDTO>> list(@RequestBody @Validated ListQualificationReq req);
/**
* 分页获取资质申请记录
*/
@PostMapping("/api/org/qualifications-apply/list")
ApiResult<PageResp<OrgQualificationsApplyDTO>> listApply(@RequestBody @Validated ListQualificationsApplyReq req);
/**
* 分页获取资质序列/单位类型
*/
@PostMapping("/api/org/qualification-ou-type/list")
ApiResult<PageResp<OrgQualificationOuTypeDTO>> listOuType(@RequestBody @Validated ListQualificationOuTypeReq req);
/**
* 批量保存资质申请记录
*/
@PostMapping("/api/org/qualifications-apply/saveBatch")
ApiResult<List<OrgQualificationsApplyDTO>> qualificationsApplySaveBatch(@RequestBody @Validated SaveBatchQualificationsApplyReq req);
@PostMapping("/api/org/qualifications-apply/update")
ApiResult<Void> updateQualificationsApply(@RequestBody @Validated UpdateQualificationsApplyReq req);
@PostMapping("/api/org/qualification/upsert")
ApiResult<Void> upsertQualification(@RequestBody @Validated UpsertQualificationReq req);
@PostMapping("/api/org/qualification-ou-type/upsert")
ApiResult<Void> upsertQualificationOuType(@RequestBody @Validated UpsertQualificationOuTypeReq req);
}

View File

@ -0,0 +1,54 @@
package cn.axzo.orgmanax.api.unit.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.register.dto.OrgUnitRegisterDTO;
import cn.axzo.orgmanax.dto.unit.register.dto.OrgUnitRegisterHistoryDTO;
import cn.axzo.orgmanax.dto.unit.register.req.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 单位注册API
*
* @author tanjie@axzo.cn
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgUnitRegisterApi {
/**
* 分页获取单位注册信息
*/
@PostMapping("/api/org/unit/register/list")
ApiResult<PageResp<OrgUnitRegisterDTO>> list(@RequestBody @Validated ListUnitRegisterReq req);
/**
* 分页获取企业入驻历史信息
*/
@PostMapping("/api/org/unit/register/history/list")
ApiResult<PageResp<OrgUnitRegisterHistoryDTO>> listHistory(@RequestBody @Validated ListUnitRegisterHistoryReq req);
/**
* 创建单位注册信息
*/
@PostMapping("/api/org/unit/register/create")
ApiResult<OrgUnitRegisterDTO> create(@RequestBody @Validated CreateUnitRegisterReq req);
/**
* 创建企业入驻历史信息
*/
@PostMapping("/api/org/unit/register/history/create")
ApiResult<OrgUnitRegisterHistoryDTO> createHistory(@RequestBody @Validated CreateUnitRegisterHistoryReq req);
/**
* 更新单位注册信息
*/
@PostMapping("/api/org/unit/register/update")
ApiResult<OrgUnitRegisterDTO> update(@RequestBody @Validated UpdateUnitRegisterReq req);
}

View File

@ -0,0 +1,100 @@
package cn.axzo.orgmanax.api.workerprofession.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionSortOutProfessionCategoryReq;
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationConfigureReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationRemoveReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationUpsertReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationValidUpdateReq;
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq;
import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author zhanghongbo
* @date 2025/1/3
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectWorkerProfessionApi {
/**
* CMS 批量设置工人工种 (小组详情) 批量指多人工种单个
*
* @param req
* @return
*/
@PostMapping("/api/labour/cms/project-worker-profession/update")
ApiResult<Void> update(@Valid @RequestBody ProjectWorkerProfessionUpdateReq req);
/**
* 获取有效的工种信息
* @param req
* @return
*/
@PostMapping("/api/labour/cms/project-worker-profession/list-valid")
ApiResult<Map<Long, List<ProfessionDTO>>> listValid(@Valid @RequestBody ProjectWorkerProfessionListValidReq req);
/**
* 计算项目内工人工种类型
*/
@PostMapping("/api/labour/project-worker-profession/sort-out-profession-category")
ApiResult<Map<Long, List<String>>> sortOutProfessionCategory(@RequestBody @Valid ProjectWorkerProfessionSortOutProfessionCategoryReq req);
/**
* 设置工人工种&技能标签
*
* @param request 工人工种&技能标签信息
*/
@PostMapping(value = "/api/worker/profession/configure")
ApiResult<Void> configure(@RequestBody @Validated WorkerProfessionTagOperationConfigureReq request);
/**
* 单个工种及其关联的技能标签列表删除
*
* @param request 工种及人员的相关信息
*/
@PostMapping(value = "/api/worker/profession/remove")
ApiResult<Void> remove(@RequestBody @Validated WorkerProfessionTagOperationRemoveReq request);
/**
* 新增工种及相关的技能标签(新增|修改)
*
* @param request 工种及其关联的技能标签列表
*/
@PostMapping(value = "/api/worker/profession/upsert")
ApiResult<Void> upsert(@RequestBody @Validated WorkerProfessionTagOperationUpsertReq request);
/**
* 设置工种为无效并将相关的技能标签置为无效
*
* @param request
*/
@PostMapping(value = "/api/worker/profession/singletonProfessionValidUpdate")
ApiResult<Void> validUpdate(@RequestBody @Validated WorkerProfessionTagOperationValidUpdateReq request);
/**
*
* 通用查询接口仅校验查询条件非空支持返回技能标签
* XXX: 通用查询接口
*
* @param req
* @return
*/
@PostMapping(value = "/api/worker/profession/page")
ApiResult<PageResp<ProjectWorkerProfessionResp>> page(@RequestBody @Validated WorkerProfessionTagQueryPageReq req);
}

View File

@ -4,84 +4,76 @@ Content-Type: application/json
Accept: application/json
{
// "searchCount": false,
// "personIds": [9000398681,9000400039],
// "personIds": [9000400039],
// "personIds": [9000400039],
// "realNameLike": "周建镐",
"organizationalNodeId": 10456,
// "organizationalNodeId": 14423,
// "subordinatePersonId": 42936,
// "managerPersonId": 44364,
// "directManagerPersonId": 9000404206,
"organizationalUnitIds": [
5144
// 5144
],
"identityTypes": [
// 2,1
],
// "organizationalJobCode": "YoElse",
// "organizationalJobCodes": ["YoElse"],
"workspaceOuPairs": [
{
"workspaceId": 335,
"ouId": 5144
}
// {
// "workspaceId": 335,
// "ouId": 5144
// }
],
// "includeDeleted": true,
// "deletedOnly": true,
// "phone": "18530039500",
// "idNumber": "410205198601221016",
// "personId": 5354,
"personId": 3305,
// "syncDataId": 737,
// "includeDeleted": true,
// "findByTopNodeId": true,
"findByAncestorNodeId": true,
// "findByTopNodeId": true,
// "findByAncestorNodeId": true,
// "pageSize": 2,
"needs": {
// "job": true,
"job": true,
// "node": true ,
// "ancestorNode": true,
// "unit": true,
// "cooperateShip": true,
"cooperateShip": true,
// "subordinateUsers": true
"personProfile": true,
// "ancestorNodes": true,
"a": true
},
// "filterIncludeUnitTypes": [1,2],
// "filterExcludeUnitTypes": [2],
// "distinctRule": {
// "distinctByFields": [
// "identityId",
// "identityType"
// ]
// },
// "filterIncludeUnitTypes": [6],
// "filterExcludeUnitTypes": [6],
"distinctRule": {
"distinctByFields": [
// "identityId",
// "identityType",
// "personId",
// "organizationalUnitId",
// "a"
]
},
"filterIncludeWorkspaceTypes": [
1,
2,
6
// 1,
// 2,
// 6,
// 8,
// 9
],
// "filterIncludeCooperateTypes": [1,2, 6],
// "filterExcludeCooperateTypes": [6],
// "filterIncludeCooperateTypes": [1,2, 6],
"filterExcludeCooperateTypes": [6,7],
// "filterDirectManagerNotNull": true,
"filterNodeStates": [
1
// 1
],
// "filterTopNodeOnly": true,
//
//
//
"a": "a"
}
###
# 分页列表接口
POST {{host}}/api/node-user/list
Content-Type: application/json
Accept: application/json
{
// "id": 984,
"organizationalNodeId": 436,
"activeFlag": 1,
"searchCount": true,
"needs": {
"childNodeUser": true
},
"distinctRule": {
"distinctByFields": [
"identityId",
"identityType"
]
}
}
}

View File

@ -45,7 +45,7 @@ Accept: application/json
###
# 查询
POST {{host}}/api/job/page
POST {{host}}/api/job/list
Content-Type: application/json
Accept: application/json
@ -54,4 +54,11 @@ Accept: application/json
"jobCodes": ["coTheprojectmanager", "cosurveyor"],
"needSaasRole": true,
"needJobGroup": true
}
}
### oms岗位树
POST {{host}}/api/job/job-tree/group
Content-Type: application/json
Accept: application/json
{}

View File

@ -0,0 +1,18 @@
###
# 分页查询班组类别
POST {{host}}/api/project/team-category/list
Content-Type: application/json
Accept: application/json
{
"orgNodeIds": [14606,14585]
}
### 班组类别-树形结构
POST {{host}}/api/project/team-category/tree-list
Content-Type: application/json
Accept: application/json
{
"orgNodeIds": [14606,14585]
}

View File

@ -0,0 +1,13 @@
# 查询
POST {{host}}/api/team-log/list
Content-Type: application/json
Accept: application/json
{
"page": 1,
"pageSize": 20,
"teamIds": [10358],
"type": "CHANGE_TEAM_OWNER"
}
###

View File

@ -28,6 +28,18 @@
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.orgmanax</groupId>
<artifactId>orgmanax-dto</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,90 @@
package cn.axzo.orgmanax.common;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.hutool.extra.validation.BeanValidationResult;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.PredefinedScopeHibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;
/**
* @Author: LiuYang
* @Date: 2024/2/1 14:13
*/
public class ValidationUtil {
/**
* 默认{@link Validator} 对象
*/
private static final Validator validator;
static {
try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()){
validator = factory.getValidator();
}
}
/**
* 校验对象
*
* @param <T> Bean类型
* @param bean bean
* @param groups 校验组
* @return {@link Set}
*/
public static <T> Set<ConstraintViolation<T>> validate(T bean, Class<?>... groups) {
return validator.validate(bean, groups);
}
/**
* 校验对象
*
* @param <T> Bean类型
* @param bean bean
* @param groups 校验组
* @return {@link BeanValidationResult}
*/
public static <T> BeanValidationResult warpValidate(T bean, Class<?>... groups) {
return warpBeanValidationResult(validate(bean, groups));
}
/**
* 校验对象, 抛出异常
*
* @param <T> Bean类型
* @param bean bean
* @param groups 校验组
* @return {@link Set}
*/
public static <T> void warpValidateThrowError(T bean, Class<?>... groups) {
BeanValidationResult validationResult = warpValidate(bean, groups);
Axssert.check(validationResult.isSuccess(), BizResultCode.INVALID_PARAM,
validationResult.getErrorMessages().stream().map(BeanValidationResult.ErrorMessage::getMessage).findFirst().orElse(""));
}
/**
* 包装校验结果
*
* @param constraintViolations 校验结果集
* @return {@link BeanValidationResult}
*/
private static <T> BeanValidationResult warpBeanValidationResult(Set<ConstraintViolation<T>> constraintViolations) {
BeanValidationResult result = new BeanValidationResult(constraintViolations.isEmpty());
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
BeanValidationResult.ErrorMessage errorMessage = new BeanValidationResult.ErrorMessage();
errorMessage.setPropertyName(constraintViolation.getPropertyPath().toString());
errorMessage.setMessage(constraintViolation.getMessage());
errorMessage.setValue(constraintViolation.getInvalidValue());
result.addErrorMessage(errorMessage);
}
return result;
}
}

View File

@ -16,6 +16,8 @@ public enum BizResultCode implements IResultCode {
INVALID_PARAM("400", "参数异常"),
ENTITY_NOT_FOUND("404", "实体不存在"),
BIZ_ERROR("500", "业务异常"),
// 900 ~ 998 二方SDK相关错误码
RPC_ERROR("900", "rpc error"),

View File

@ -42,6 +42,14 @@
<groupId>cn.axzo.trade</groupId>
<artifactId>trade-data-security-core</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.foundation</groupId>
<artifactId>event-support-lib</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package cn.axzo.orgmanax.common.model;
package cn.axzo.orgmanax.dto.common;
import java.util.List;

View File

@ -1,7 +1,5 @@
package cn.axzo.orgmanax.infra.client.profile.enums;
package cn.axzo.orgmanax.dto.common;
import cn.axzo.orgmanax.infra.client.profile.dto.model.CodeDefinition;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -14,7 +12,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum IdentityType implements IEnum, CodeDefinition<Integer> {
public enum IdentityType {
/*人员身份类型*/
NOT_SUPPORT(0, "NOT_SUPPORT", "无效类型"),
@ -24,9 +22,29 @@ public enum IdentityType implements IEnum, CodeDefinition<Integer> {
REGULATOR(4, "REGULATOR", "监管人员"),
OPERATOR(5, "OPERATOR", "运营人员"),
;
@EnumValue
@JsonValue
private final Integer code;
private final String message;
private final String desc;
}
public static IdentityType getIdentityType(Integer code) {
IdentityType[] values = values();
for (IdentityType item : values) {
if (item.getCode().equals(code)) {
return item;
}
}
return null;
}
public static IdentityType getIdentityType(String message) {
IdentityType[] values = values();
for (IdentityType item : values) {
if (item.getMessage().equals(message)) {
return item;
}
}
return null;
}
}

View File

@ -0,0 +1,19 @@
package cn.axzo.orgmanax.dto.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class RoleBriefDTO implements Serializable {
private Long roleId;
private String roleCode;
private String name;
private String roleType;
}

View File

@ -11,6 +11,14 @@ import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
public class WorkspaceOuPair {
/**
* 项目ID
*/
private Long workspaceId;
/**
* 组织单位ID
*/
private Long ouId;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.orgmanax.dto.common.util;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @author cn
* @version 1.0
* @description
* @date 2022/6/18 15:55
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public class NumberUtil {
public static boolean isPositiveNumber(Number number) {
return number != null && number.floatValue() > 0;
}
public static boolean isNotPositiveNumber(Number number) {
return !isPositiveNumber(number);
}
public static Integer appVersionParse(String appVersion) {
log.info("app version parse :{}",appVersion);
try {
appVersion = appVersion.split("-")[0];
return cn.hutool.core.util.NumberUtil.parseInt(appVersion.replace("v", "")
.replace("V", "")
.replace(".", ""));
} catch (Exception e) {
return 0;
}
}
}

View File

@ -1,6 +1,5 @@
package cn.axzo.orgmanax.common.util;
import cn.axzo.orgmanax.common.model.IBaseTree;
package cn.axzo.orgmanax.dto.common.util;
import cn.axzo.orgmanax.dto.common.IBaseTree;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Pair;
@ -243,4 +242,55 @@ public class TreeUtil {
return rootList;
}
public static <T extends IBaseTree<T, O>, O> List<T> buildTree(List<T> treeList, Comparator<T> comparator) {
if (org.springframework.util.CollectionUtils.isEmpty(treeList)) {
return treeList;
}
Set<O> codes = treeList.stream().map(IBaseTree::getNodeCode).collect(Collectors.toSet());
List<T> rootList = treeList.stream().filter(e -> !codes.contains(e.getParentNodeCode()))
.sorted(comparator)
.collect(Collectors.toList());
List<T> children = treeList.stream().filter(e -> codes.contains(e.getParentNodeCode()))
.collect(Collectors.toList());
for (T t : rootList) {
t.setNodeChildren(buildTree(children, t.getNodeCode(), comparator));
}
return rootList;
}
public static <T extends IBaseTree<T, O>, O> List<T> buildTree(List<T> treeList, O rootCode, Comparator<T> comparator) {
if (org.springframework.util.CollectionUtils.isEmpty(treeList)) {
return treeList;
}
//root级树
List<T> rootList = treeList.stream()
.sorted(comparator)
.filter(e -> Objects.equals(e.getParentNodeCode(), rootCode))
.collect(Collectors.toList());
List<T> childrenList = treeList.stream()
.filter(e -> !Objects.equals(e.getParentNodeCode(), rootCode))
.collect(Collectors.toList());
if (org.springframework.util.CollectionUtils.isEmpty(childrenList)) {
return org.springframework.util.CollectionUtils.isEmpty(rootList) ? null : rootList;
}
for (T t : rootList) {
t.setNodeChildren(buildTree(childrenList, t.getNodeCode(), comparator));
}
return org.springframework.util.CollectionUtils.isEmpty(rootList) ? null : rootList;
}
public static <T extends IBaseTree<T, O>, O> void traverseLeafNodes(List<T> treeList, Consumer<T> consumer) {
if (CollUtil.isEmpty(treeList)) {
return;
}
for (T t : treeList) {
if (CollUtil.isEmpty(t.getNodeChildren())) {
consumer.accept(t);
} else {
traverseLeafNodes(t.getNodeChildren(), consumer);
}
}
}
}

View File

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@ -19,6 +20,7 @@ public class OrgCooperateShipDTO implements Serializable {
/**
* 主健
*/
@NotNull
private Long id;
/**

View File

@ -9,7 +9,7 @@ import lombok.Getter;
public enum CooperateShipStatusEnum {
PRESENT(1, "在场"),
LEFT(2, "离场");
LEFT(0, "离场");
private final Integer code;
private final String desc;

View File

@ -1,11 +1,16 @@
package cn.axzo.orgmanax.dto.cooperateship.enums;
import lombok.AccessLevel;
import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public enum CooperateShipTypeEnum {
PROJ_PRIMARY_CONTRACTING_UNIT(1, "施工总承包"),
@ -25,4 +30,81 @@ public enum CooperateShipTypeEnum {
private final Integer code;
private final String desc;
private static final Map<Integer, CooperateShipTypeEnum> mapping = new HashMap<>();
static {
Arrays.stream(CooperateShipTypeEnum.values()).forEach(t -> mapping.put(t.getCode(), t));
}
public static CooperateShipTypeEnum getByCode(Integer code) {
return mapping.get(code);
}
/** 班组类型关系:企业/项目内班组 **/
public boolean isTeam() {
return this == ENT_TEAM || this == PROJ_TEAM;
}
/** 小组类型关系:企业/项目内小组 **/
public boolean isGroup() {
return this == ENT_GROUP || this == PROJ_GROUP;
}
public static List<CooperateShipTypeEnum> getEntEnum() {
return Arrays.asList(
ENT_COMMON
,PROJ_PRIMARY_CONTRACTING_UNIT
,PROJ_CONSTRUCTION_UNIT
,PROJ_SUPERVISION_UNIT
,PROJ_LABOR_SUBCONTRACTING
,PROJ_PROFESSIONAL_SUBCONTRACTING
,SURVEY_UNIT
,DESIGN_UNIT
,OTHER);
}
public static List<Integer> getEntEnumCode() {
return Arrays.asList(
ENT_COMMON.getCode()
,PROJ_PRIMARY_CONTRACTING_UNIT.getCode()
,PROJ_CONSTRUCTION_UNIT.getCode()
,PROJ_SUPERVISION_UNIT.getCode()
,PROJ_LABOR_SUBCONTRACTING.getCode()
,PROJ_PROFESSIONAL_SUBCONTRACTING.getCode()
,SURVEY_UNIT.getCode()
,DESIGN_UNIT.getCode()
,OTHER.getCode());
}
public static Integer convertNodeTypeToCooperateType(Integer nodeType) {
if (Objects.equals(nodeType, NodeTypeEnum.PROJECT_TEAM.getValue())) {
return PROJ_TEAM.getCode();
}
if (Objects.equals(nodeType, NodeTypeEnum.PROJECT_GROUP.getValue())) {
return PROJ_GROUP.getCode();
}
return null;
}
public boolean is(Integer code) {
return this.code.equals(code);
}
public boolean isInScopeAsNode(Integer cooperateType) {
CooperateShipTypeEnum typeByeCode = getByCode(cooperateType);
if (typeByeCode == null) {
throw new RuntimeException("Unknown cooperate type: " + cooperateType);
}
return isInScopeAsNode(typeByeCode);
}
public boolean isInScopeAsNode(CooperateShipTypeEnum type) {
if (this == type) {
return true;
}
if (this == CooperateShipTypeEnum.PROJ_TEAM) {
return type == CooperateShipTypeEnum.PROJ_GROUP;
}
return false;
}
}

View File

@ -1,110 +0,0 @@
package cn.axzo.orgmanax.dto.cooperateship.enums;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import lombok.Getter;
@Getter
public enum SaasCooperateShipCooperateTypeEnum {
PROJ_PRIMARY_CONTRACTING_UNIT(1, "施工总承包"),
PROJ_CONSTRUCTION_UNIT(2, "建设单位"),
PROJ_SUPERVISION_UNIT(3, "监理单位"),
PROJ_LABOR_SUBCONTRACTING(4, "劳务分包"),
PROJ_PROFESSIONAL_SUBCONTRACTING(5, "专业承包"),
OMS(6, "OMS"),
ENT_COMMON(7, "企业通用"),
ENT_TEAM(8, "企业内班组"),
PROJ_TEAM(9,"项目内班组"),
ENT_GROUP(10, "企业内小组"),
PROJ_GROUP(11, "项目内小组"),
SURVEY_UNIT(12, "地勘单位"),
DESIGN_UNIT(13, "设计单位"),
OTHER(30,"其他")
;
private static final Map<Integer, SaasCooperateShipCooperateTypeEnum> mapping = new HashMap<>();
static {
Arrays.stream(SaasCooperateShipCooperateTypeEnum.values()).forEach(t -> mapping.put(t.getCode(), t));
}
public final Integer code;
public final String desc;
SaasCooperateShipCooperateTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static SaasCooperateShipCooperateTypeEnum getByCode(Integer code) {
return mapping.get(code);
}
/** 班组类型关系:企业/项目内班组 **/
public boolean isTeam() {
return this == ENT_TEAM || this == PROJ_TEAM;
}
/** 小组类型关系:企业/项目内小组 **/
public boolean isGroup() {
return this == ENT_GROUP || this == PROJ_GROUP;
}
public static List<SaasCooperateShipCooperateTypeEnum> getEntEnum() {
return Arrays.asList(
ENT_COMMON
,PROJ_PRIMARY_CONTRACTING_UNIT
,PROJ_CONSTRUCTION_UNIT
,PROJ_SUPERVISION_UNIT
,PROJ_LABOR_SUBCONTRACTING
,PROJ_PROFESSIONAL_SUBCONTRACTING
,SURVEY_UNIT
,DESIGN_UNIT
,OTHER);
}
public static List<Integer> getEntEnumCode() {
return Arrays.asList(
ENT_COMMON.getCode()
,PROJ_PRIMARY_CONTRACTING_UNIT.getCode()
,PROJ_CONSTRUCTION_UNIT.getCode()
,PROJ_SUPERVISION_UNIT.getCode()
,PROJ_LABOR_SUBCONTRACTING.getCode()
,PROJ_PROFESSIONAL_SUBCONTRACTING.getCode()
,SURVEY_UNIT.getCode()
,DESIGN_UNIT.getCode()
,OTHER.getCode());
}
public static Integer convertNodeTypeToCooperateType(Integer nodeType) {
if (Objects.equals(nodeType, OrganizationalNodeTypeEnum.PROJECT_TEAM.getValue())) {
return PROJ_TEAM.getCode();
}
if (Objects.equals(nodeType, OrganizationalNodeTypeEnum.PROJECT_GROUP.getValue())) {
return PROJ_GROUP.getCode();
}
return null;
}
public boolean is(Integer code) {
return this.code.equals(code);
}
public boolean isInScopeAsNode(Integer cooperateType) {
SaasCooperateShipCooperateTypeEnum typeByeCode = getByCode(cooperateType);
if (typeByeCode == null)
throw new RuntimeException("Unknown cooperate type: " + cooperateType);
return isInScopeAsNode(typeByeCode);
}
public boolean isInScopeAsNode(SaasCooperateShipCooperateTypeEnum type) {
if (this == type)
return true;
if (this == SaasCooperateShipCooperateTypeEnum.PROJ_TEAM)
return type == SaasCooperateShipCooperateTypeEnum.PROJ_GROUP;
return false;
}
}

View File

@ -1,7 +1,7 @@
package cn.axzo.orgmanax.server.cooperateship.event.inner.payload;
package cn.axzo.orgmanax.dto.cooperateship.event;
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -12,8 +12,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@Data
@Builder
public class CoopeateShipUpsertedPayload extends AbstractDiffablePayload<SaasCooperateShip> {
private SaasCooperateShip oldValue;
private SaasCooperateShip newValue;
public class CoopeateShipUpsertedPayload extends AbstractDiffablePayload<OrgCooperateShipDTO> {
private OrgCooperateShipDTO oldValue;
private OrgCooperateShipDTO newValue;
private JSONObject ext;
}

View File

@ -0,0 +1,44 @@
package cn.axzo.orgmanax.dto.cooperateship.req;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class CreateOrgCooperateShipReq {
/**
* 工作台ID
*/
private Long workspaceId;
/**
* 组织节点ID
*/
private Long organizationalNodeId;
/**
* 上级节点非顶级节点时必填
*/
private Long parentId;
/**
* 协同关系类型
*/
private Integer cooperateType;
/**
* 协作关系
*/
private Integer partnerShip;
/**
* 操作人
*/
private Long operatorId;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.orgmanax.dto.cooperateship.req;
import cn.hutool.core.collection.CollUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -7,6 +8,7 @@ import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@NoArgsConstructor
@ -66,22 +68,33 @@ public class ListOrgCooperateShipReq {
private Set<Integer> partnerShips = Collections.emptySet();
/**
* 在场状态集合
* 在场状态集合, 默认为在场
*/
@Builder.Default
private Set<Integer> statuses = Collections.emptySet();
private Set<Integer> statuses = CollUtil.newHashSet(1);
/**
* 需要过滤的personId
* personId
* 根据人员进行节点过滤
*/
private Long filterPersonId;
private Long filterByPersonId;
/**
* personId有值时为必填项
* 1只过滤当前节点数据 2过滤当前节点及以下数据
* filterByPersonId有值时为必填项, 默认为1
* 值说明1只过滤当前节点数据 2过滤当前节点及以下数据
*/
private Integer filterPersonType;
@Builder.Default
private Integer filterMethod = 1;
/**
* 根据岗位排除进行过滤
*/
private List<String> filterByJobCodeExclusion;
/**
* 过滤人员状态集合
*/
@Builder.Default
private Boolean filterIncludeExitPerson = false;
/**
* 是否包含祖先节点

View File

@ -0,0 +1,31 @@
package cn.axzo.orgmanax.dto.cooperateship.req;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class UpdateOrgCooperateShipReq {
/**
* 协同关系ID
*/
private Long id;
/**
* 状态 1-在场0-退场
*/
private Integer status;
/**
* 退场时间
*/
private Date resignAt;
}

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,24 @@
package cn.axzo.orgmanax.dto.invite.project.req;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/19
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class CancelProjectWorkerInviteReq {
/**
* 邀请记录id
*/
@NotNull(message = "邀请记录id不能为空")
private Long inviteId;
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.dto.invite.project.req;
import cn.axzo.foundation.page.PageReqV2;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/19
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageProjectWorkerInviteReq extends PageReqV2 {
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 项目部id
*/
private Long workspaceId;
/**
* 项目班组ID
*/
private Long projectTeamId;
/**
* 工人身份ID
*/
private Long workerIdentityId;
/**
* 邀请记录ID列表
*/
private Set<Long> inviteIds;
}

View File

@ -0,0 +1,29 @@
package cn.axzo.orgmanax.dto.invite.project.req;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/19
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateProjectWorkerInviteReq {
/**
* 邀请记录id
*/
@NotNull(message = "邀请记录id不能为空")
private Long inviteId;
/**
* 状态
*/
private Integer status;
}

View File

@ -0,0 +1,85 @@
package cn.axzo.orgmanax.dto.invite.project.resp;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author 夏嘉孚
* @since 2023/2/10
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class OrgProjectWorkerInviteResp {
/**
* 邀请id 同下inviteId
*/
private Long id;
/**
* 1-待班组审批 2-待项目审批 3-审批通过已加入项目
*/
private Integer status;
/**
* 邀请id
*/
private Long inviteId;
/**
* 工人身份ID
*/
private Long workerIdentityId;
/**
* 项目id
*/
private Long workspaceId;
/**
* 总包ID
*/
private Long entId;
/**
* 所属单位ID
*/
private Long organizationalUnitId;
/**
* 项目内班组id
*/
private Long projectTeamId;
/**
* 班组长姓名
*/
private String teamOwnerName;
/**
* 更新时间
*/
private Date updateAt;
/**
* 审批人的从业人员身份id
*/
private Long approverIdentityId;
/**
* 班组长审批时间,REQ-598
*/
private Date teamLeaderAuditDate;
/**
* 经营范围
*/
private List<String> teamCategory;
/**
* 工人工种
*/
private List<String> profession;
/**
* 流程实例id
*/
private String processInstanceId;
private String contextJsonStr;
}

View File

@ -0,0 +1,68 @@
package cn.axzo.orgmanax.dto.invite.req;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO;
import java.util.List;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 班组扫码申请进入项目 REQ
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class ApplyOrgTeamInviteReq {
/**
* 工作台ID
*/
@NotNull(message = "工作台不能为空")
private Long workspaceId;
/**
* 平台班组ID
*/
@NotNull(message = "班组不能为空")
private Long teamId;
/**
* 平台班组长身份ID
*/
private Long teamLeaderId;
/**
* 所属单位
*/
@NotNull(message = "所属单位不能为空")
private Long ouId;
/**
* 所属单位类型
*/
@NotNull(message = "所属单位类型不能为空")
private Integer ouType;
/**
* 经营范围
*/
@NotEmpty(message = "经营范围不能为空")
private List<TeamCategoryAggregateDTO> categories;
/**
* 申请操作路径 1-链接-LINK 2-二维码-QRCODE
*/
@NotNull(message = "操作路径不能为空")
@Max(2)
@Min(1)
private Integer route;
/**
* 备注
*/
@Size(max = 100)
private String applyNote;
}

View File

@ -0,0 +1,24 @@
package cn.axzo.orgmanax.dto.invite.req;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 审批 班组扫码申请进入项目 REQ
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ApproveOrgTeamInviteReq {
/**
* 邀请记录ID
*/
@NotNull(message = "邀请记录ID不能为空")
private Long inviteId;
}

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,116 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class InviteBatchOrgProjectTeamReq {
/**
* 邀请类型0班组1小组
* */
@NotNull(message = "添加类型不能为空")
private Integer type;
/**
* 班组或小组的NodeId
* */
@NotNull(message = "nodeId不能为空")
private Long organizationNodeId;
/**
* 项目Id
* */
@NotNull(message = "项目信息不能为空")
private Long workspaceId;
/**
* 工人工种
*/
private List<ProfessionDTO> platWorkerProfessions;
/**
* 工人身份id列表
*/
@NotNull(message = "工人列表不能为空")
private List<Long> personIds;
@NotNull(message = "操作人不能为空")
private Long operatorId;
/**
* 发起人的personId
* */
private Long initiatorPersonId;
/**
* 工种
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public static class ProfessionDTO {
/**
* 工种id
*/
private Long professionId;
/**
* 工种名称
*/
private String professionName;
/**
* 技能标签 1普工 2技工
*/
private Integer skillType;
/**
* 技能标签列表-平铺结构
*/
//private List<T> expandedSkillTags;
/**
* 技能标签列表-树形结构
*/
private List<SkillTagDTO> skillTags = new ArrayList<>();
}
/**
* 技能标签
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public static class SkillTagDTO {
/**
* 所属工种id
*/
private Long professionId;
/**
* 父级技能标签id
*/
private String parentSkillTagCode;
/**
* 技能标签code
*/
private String skillTagCode;
/**
* 技能标签名称
*/
private String skillTagName;
/**
* 子技能标签列表
*/
private List<SkillTagDTO> skillTags;
}
}

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,90 @@
package cn.axzo.orgmanax.dto.invite.req;
import java.util.List;
import javax.validation.Valid;
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 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

@ -0,0 +1,85 @@
package cn.axzo.orgmanax.dto.job.dto;
import cn.axzo.orgmanax.dto.common.IBaseTree;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class JobGroupDTO implements Serializable, IBaseTree<JobGroupDTO, Long> {
/**
* 分组名
*/
private String name;
/**
* 分组code
*/
private String code;
/**
* 分组id
*/
private Long groupId;
/**
* 上级分组id
*/
private Long parentGroupId;
/**
* 排序
*/
private Integer priority;
/**
* 上级分组名
*/
private String parentGroupName;
/**
* 分组标识其与工作台类型及参建类型在后端进行映射
* @see cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum
*/
private String flag;
private List<JobGroupDTO> nodeChildren;
private List<OrgJobDTO> jobResList;
@Override
public Long getNodeCode() {
return groupId;
}
@Override
public Long getParentNodeCode() {
return parentGroupId;
}
@Override
public List<JobGroupDTO> getNodeChildren() {
return nodeChildren;
}
@Override
public void setNodeChildren(List<JobGroupDTO> nodeChildren) {
this.nodeChildren = nodeChildren;
}
public static JobGroupDTO buildJobGroupRes(OrgJobGroupDTO orgJobGroup) {
JobGroupDTO groupRes = new JobGroupDTO();
groupRes.setGroupId(orgJobGroup.getId());
groupRes.setParentGroupId(orgJobGroup.getParentId());
groupRes.setName(orgJobGroup.getName());
groupRes.setCode(orgJobGroup.getCode());
groupRes.setPriority(orgJobGroup.getPriority());
groupRes.setFlag(orgJobGroup.getFlag());
return groupRes;
}
}

View File

@ -37,4 +37,20 @@ public interface OrgJobConstants {
String CODE_KEY = "code";
String OLD_NEW_JOB_CODE_MAP_KEY = "job_code_mapping";
Integer JOB_PAGE_SIZE = 1000;
/**
* 系统操作人的personId
*/
Long SYSTEM_OPERATOR_ID = -1L;
/**
* 默认岗位的标识
*/
Integer ORG_JOB_DEF_FLAG = 1;
/**
* 岗位人数无上限
*/
Long NO_LIMIT_COUNT = -1L;
}

View File

@ -135,10 +135,9 @@ public class OrgJobDTO implements Serializable {
/**
* 角色信息
* todo 2024年12月30日 已和周敏确认暂不用该字段
* 二期才会用到此字段
*/
//private List<RoleDTO> saasRoles;
private List<RoleDTO> saasRoles;
public Set<Long> mergeAndDistinctRolesIds() {
Set<Long> roleIds = Sets.newHashSet();

View File

@ -1,10 +1,9 @@
package cn.axzo.orgmanax.dto.job.enums;
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipTypeEnum;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import cn.axzo.orgmanax.dto.cooperateship.enums.SaasCooperateShipCooperateTypeEnum;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -19,31 +18,34 @@ import lombok.Getter;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum OrgJobGroupFlagEnum {
/**
* 岗位分组标识
*/
WORKSPACE_ENT("job_group:workspace_ent", null, null, 1, 1, "企业"),
WORKSPACE_PROJ("job_group:workspace_proj", null, null, 1, 2, "项目"),
WORKSPACE_OMS("job_group:workspace_oms", null, null, 1, 3, "OMS"),
ENT_COMMON("job_group:ent_common", WORKSPACE_ENT, SaasCooperateShipCooperateTypeEnum.ENT_COMMON, 2, 1, "企业通用"),
ENT_TEAM("job_group:ent_team", WORKSPACE_ENT, SaasCooperateShipCooperateTypeEnum.ENT_TEAM, 2, 2, "企业班组"),
ENT_COMMON("job_group:ent_common", WORKSPACE_ENT, CooperateShipTypeEnum.ENT_COMMON, 2, 1, "企业通用"),
ENT_TEAM("job_group:ent_team", WORKSPACE_ENT, CooperateShipTypeEnum.ENT_TEAM, 2, 2, "企业班组"),
PROJ_PRIMARY_UNIT("job_group:proj_primary_unit", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.PROJ_PRIMARY_CONTRACTING_UNIT,
PROJ_PRIMARY_UNIT("job_group:proj_primary_unit", WORKSPACE_PROJ, CooperateShipTypeEnum.PROJ_PRIMARY_CONTRACTING_UNIT,
2, 1, "总包"),
PROJ_CONSTRUCTION_UNIT("job_group:proj_construction_unit", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.PROJ_CONSTRUCTION_UNIT,
PROJ_CONSTRUCTION_UNIT("job_group:proj_construction_unit", WORKSPACE_PROJ, CooperateShipTypeEnum.PROJ_CONSTRUCTION_UNIT,
2, 2, "建设单位"),
PROJ_SUPERVISION_UNIT("job_group:proj_supervision_unit", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.PROJ_SUPERVISION_UNIT,
PROJ_SUPERVISION_UNIT("job_group:proj_supervision_unit", WORKSPACE_PROJ, CooperateShipTypeEnum.PROJ_SUPERVISION_UNIT,
2, 3, "监理单位"),
PROJ_LABOR_UNIT("job_group:proj_labor_unit", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.PROJ_LABOR_SUBCONTRACTING,
PROJ_LABOR_UNIT("job_group:proj_labor_unit", WORKSPACE_PROJ, CooperateShipTypeEnum.PROJ_LABOR_SUBCONTRACTING,
2, 4, "劳务分包"),
PROJ_PROFESSIONAL_UNIT("job_group:proj_professional_unit", WORKSPACE_PROJ,
SaasCooperateShipCooperateTypeEnum.PROJ_PROFESSIONAL_SUBCONTRACTING, 2, 5, "专业分包"),
PROJ_TEAM("job_group:proj_team", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.PROJ_TEAM, 2, 9, "项目班组"),
OTHER("job_group:other", WORKSPACE_PROJ, SaasCooperateShipCooperateTypeEnum.OTHER, 2, 11, "其他"),
CooperateShipTypeEnum.PROJ_PROFESSIONAL_SUBCONTRACTING, 2, 5, "专业分包"),
PROJ_TEAM("job_group:proj_team", WORKSPACE_PROJ, CooperateShipTypeEnum.PROJ_TEAM, 2, 9, "项目班组"),
OTHER("job_group:other", WORKSPACE_PROJ, CooperateShipTypeEnum.OTHER, 2, 11, "其他"),
OMS("job_group:oms", WORKSPACE_OMS, SaasCooperateShipCooperateTypeEnum.OMS, 2, 1, "OMS通用");
OMS("job_group:oms", WORKSPACE_OMS, CooperateShipTypeEnum.OMS, 2, 1, "OMS通用");
private final String code;
private final OrgJobGroupFlagEnum parent;
private final SaasCooperateShipCooperateTypeEnum cooperateType;
private final CooperateShipTypeEnum cooperateType;
private final Integer level;
private final Integer priority;
private final String desc;
@ -99,10 +101,10 @@ public enum OrgJobGroupFlagEnum {
if (Objects.isNull(this.cooperateType)) {
return false;
}
if (SaasCooperateShipCooperateTypeEnum.ENT_COMMON.is(cooperateType)) {
if (CooperateShipTypeEnum.ENT_COMMON.is(cooperateType)) {
// 单位默认匹配上单位班组
return this.cooperateType.is(cooperateType)
|| SaasCooperateShipCooperateTypeEnum.ENT_TEAM.equals(this.cooperateType);
|| CooperateShipTypeEnum.ENT_TEAM.equals(this.cooperateType);
}
return this.cooperateType.is(cooperateType);
}

View File

@ -1,15 +1,22 @@
package cn.axzo.orgmanax.infra.client.profile.dto.model;
package cn.axzo.orgmanax.dto.job.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/24
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class IdentityPair {
private Long identityId;
private Integer identityType;
public class JobTreeGroupReq {
/**
* 根据后续需求按需传参
*/
private String ext;
}

View File

@ -0,0 +1,305 @@
package cn.axzo.orgmanax.dto.node.dto;
import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.*;
/**
* 部门Profile定义
*/
public class NodeProfile {
/**
* 项目班组Profile为了方便直观看到对应关系字段和 org_project_team 保持一致
*/
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Data
public static class ProjectTeamProfile {
// 新冗余字段
/**
* 平台班组节点id
*/
private Long platTeamNodeId;
/**
* 平台班组所属团队/单位 id
*/
private Long ouId;
// org_project_team 字段
private Long projectTeamId;
/**
* 总包ID
*/
private Long entId;
/**
* 项目外班组id
*/
private Long platTeamId;
/**
* 班组长身份id
*/
private Long teamLeaderId;
/**
* 状态1-履约中 2-已退场 3-待履约
*/
private Integer status;
/**
* 班组进场时间
*/
private Date joinAt;
/**
* 班组退场时间
*/
private Date resignAt;
/**
* 工期要求开始时间
*/
private Date beginDate;
/**
* 工期要求结束时间
*/
private Date endDate;
/**
* 班组入驻编号(前端展示)
*/
private String settledCode;
/**
* 是否删除 0: 其他删除
*/
private Integer isDelete;
/**
* 创建时间
*/
private Date createAt;
private Date updateAt;
/**
* 工人进场方式 1-普通进场 2-任务单进场
*/
private Integer enterProjectType = 1;
private Integer syncState;
}
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Data
/**
* 项目小组Profile
*/
public static class ProjectGroupProfile {
// 新冗余字段
private Long belongProjectTeamNodeId;
// org_project_group 字段
/**
* 主键id
*/
private Long projectGroupId;
/**
* 小组类型 0-直属小组 1-合作小组
*/
private Integer type;
/**
* 小组状态 0-未激活 1-已激活 2-已结束
*/
private Integer status;
/**
* 所属的项目内班组id
*/
private Long belongProjectTeamId;
/**
* 所属的平台班组id
*/
private Long belongPlatTeamId;
/**
* (合作小组才有)原项目内班组id
*/
private Long sourceProjectTeamId;
/**
* (合作小组才有)原平台班组id
*/
private Long sourcePlatTeamId;
/**
* 是否删除 0: 其他删除
*/
private Long isDelete;
/**
* 创建时间
*/
private Date createAt;
private Date updateAt;
/**
* 小组长权限集
*/
private Long permissionGroup;
/**
* 小组长工人身份id
*/
private Long ownerWorkerIdentityId;
/**
* 小组长项目内工人id
*/
private Long ownerProjectWorkerId;
/**
* 小组管理类型 0-班组管理 1-小组长管理
*/
private Integer manageType;
/**
* 是否独立小组true 独立false 非独立
*/
private Boolean independentGroup;
}
private static final Map<Integer, Class<?>> typeClassMapping = ImmutableMap.of(
NodeTypeEnum.PROJECT_TEAM.getValue(), ProjectTeamProfile.class,
NodeTypeEnum.PROJECT_GROUP.getValue(), ProjectGroupProfile.class
);
public static Class<?> resolveProfileClass(Integer nodeType) {
return typeClassMapping.getOrDefault(nodeType, JSONObject.class);
}
@Getter
@AllArgsConstructor
public enum NodeProfileResolveTypeEnum {
PROJECT_TEAM_ID("项目班组id", Long.class, Arrays.asList("projectTeamId", "belongProjectTeamId")),
PLAT_TEAM_ID("平台班组id", Long.class, Arrays.asList("platTeamId", "belongPlatTeamId")),
PROJECT_GROUP_ID("项目小组id", Long.class, Arrays.asList("projectGroupId")),
PROJECT_GROUP_OWNER_PROJECT_WORKER_ID("项目小组owner项目工人id", Long.class, Arrays.asList("ownerProjectWorkerId")),
PROJECT_GROUP_TYPE("项目小组类型", Integer.class, Arrays.asList("type")),
PROJECT_GROUP_CREATE_AT("项目小组创建时间", Integer.class, Arrays.asList("createAt")),
PROJECT_GROUP_UPDATE_AT("项目小组修改时间", Integer.class, Arrays.asList("updateAt")),
;
private String desc;
/**
* 解析类型
*/
private Class resolveClass;
/**
* 解析字段名
*/
private List<String> resolveFieldName;
}
public static <T> T resolve(OrgNodeDTO orgNodeDTO, NodeProfileResolveTypeEnum resolveType) {
return (T)Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
List<String> resolveFieldNames = resolveType.getResolveFieldName();
for (String field : resolveFieldNames) {
Object object = profile.getObject(field, resolveType.resolveClass);
if (object != null) {
return object;
}
}
return null;
}).orElse(null);
}
/**
* @return
*/
public static Long resolveProjectTeamId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("projectTeamId"))) {
return profile.getLong("projectTeamId");
}
return profile.getLong("belongProjectTeamId");
}).orElse(null);
}
/**
* @return
*/
public static Long resolveProjectTeamId(OrgNodeBriefDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeBriefDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("projectTeamId"))) {
return profile.getLong("projectTeamId");
}
return profile.getLong("belongProjectTeamId");
}).orElse(null);
}
/**
* 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
* @return
*/
public static Long resolvePlatTeamId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("platTeamId"))) {
return profile.getLong("platTeamId");
}
return profile.getLong("belongPlatTeamId");
}).orElse(null);
}
/**
* 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用
* @return
*/
public static Long resolvePlatTeamId(OrgNodeBriefDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeBriefDTO::getProfile)
.map(profile -> {
if (ObjectUtil.isNotEmpty(profile.getLong("platTeamId"))) {
return profile.getLong("platTeamId");
}
return profile.getLong("belongPlatTeamId");
}).orElse(null);
}
public static Long resolveProjectGroupId(OrgNodeDTO orgNodeDTO) {
return Optional.ofNullable(orgNodeDTO)
.map(OrgNodeDTO::getProfile)
.map(profile -> profile.getLong("projectGroupId"))
.orElse(null);
}
}

View File

@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Optional;
@NoArgsConstructor
@AllArgsConstructor
@ -56,7 +57,32 @@ public class OrgNodeBriefDTO implements Serializable {
/**
* 节点信息json不同的节点类型格式不一如班组节点的解散状态等
* @see OrgNodeBriefDTO#resolveProfile()
*/
private JSONObject profile;
/**
* 解析profile
* 调用方需要根据nodeType来解析profile自行使用正确的对象来接收<br>
* <pre>
* NodeProfile.ProjectTeamProfile projectTeamProfile = projectTeamNode.resolveProfile(); // nodeType = 4
* NodeProfile.PlatTeamProfile platTeamProfile = platTeamNode.resolveProfile(); // nodeType = 2
* JSONObject normalProfile = normalNode.resolveProfile(); // nodeType = 1
*
* </pre>
*
* @return
* @see NodeProfile#resolveProfileClass(Integer)
*/
public <T> T resolveProfile() {
if (profile == null || profile.isEmpty()) {
return (T) profile;
}
Class<?> clazz = NodeProfile.resolveProfileClass(nodeType);
if (clazz == null) {
return (T) profile;
}
return (T) Optional.ofNullable(profile).map(p -> JSONObject.parseObject(p.toString(), clazz)).orElse(null);
}
}

View File

@ -3,7 +3,6 @@ package cn.axzo.orgmanax.dto.node.dto;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@ -11,6 +10,7 @@ import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@NoArgsConstructor
@AllArgsConstructor
@ -93,6 +93,10 @@ public class OrgNodeDTO implements Serializable {
/**
* 节点信息json不同的节点类型格式不一如班组节点的解散状态等
* @see NodeProfile#resolveProjectGroupId
* @see NodeProfile#resolveProjectTeamId
* @see NodeProfile#resolvePlatTeamId
*
*/
private JSONObject profile;
@ -127,4 +131,27 @@ public class OrgNodeDTO implements Serializable {
*/
private OrgCooperateShipDTO cooperateShip;
/**
* 解析profile
* 调用方需要根据nodeType来解析profile自行使用正确的对象来接收<br>
* <pre>
* NodeProfile.ProjectTeamProfile projectTeamProfile = projectTeamNode.resolveProfile(); // nodeType = 4
* NodeProfile.PlatTeamProfile platTeamProfile = platTeamNode.resolveProfile(); // nodeType = 2
* JSONObject normalProfile = normalNode.resolveProfile(); // nodeType = 1
*
* </pre>
*
* @return
* @see NodeProfile#resolveProfileClass(Integer)
*/
public <T> T resolveProfile() {
if (profile == null || profile.isEmpty()) {
return (T) profile;
}
Class<?> clazz = NodeProfile.resolveProfileClass(nodeType);
if (clazz == null) {
return (T) profile;
}
return (T) Optional.ofNullable(profile).map(p -> JSONObject.parseObject(p.toString(), clazz)).orElse(null);
}
}

View File

@ -1,4 +1,4 @@
package cn.axzo.orgmanax.dto.cooperateship.enums;
package cn.axzo.orgmanax.dto.node.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
@ -15,7 +15,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum OrganizationalNodeTypeEnum {
public enum NodeTypeEnum {
/**
* 默认单位位为65535
@ -50,39 +50,39 @@ public enum OrganizationalNodeTypeEnum {
private final String desc;
private final Integer bitValue;
private static Map<Integer, OrganizationalNodeTypeEnum> bitMap;
private static Map<Integer, NodeTypeEnum> bitMap;
public boolean isSameOrChildNodeType(Integer nodeType) {
OrganizationalNodeTypeEnum typeByeCode = getByNodeType(nodeType);
NodeTypeEnum typeByeCode = getByNodeType(nodeType);
if (typeByeCode == null)
throw new RuntimeException("Unknown node type: " + nodeType);
return isSameOrChildNodeType(typeByeCode);
}
public boolean isSameOrChildNodeType(OrganizationalNodeTypeEnum type) {
public boolean isSameOrChildNodeType(NodeTypeEnum type) {
if (this == type)
return true;
if (this == OrganizationalNodeTypeEnum.PROJECT_TEAM)
return type == OrganizationalNodeTypeEnum.PROJECT_GROUP;
if (this == NodeTypeEnum.PROJECT_TEAM)
return type == NodeTypeEnum.PROJECT_GROUP;
return false;
}
public static OrganizationalNodeTypeEnum bitValueOf(Integer valueBit) {
public static NodeTypeEnum bitValueOf(Integer valueBit) {
if (valueBit == null) {
return null;
}
if (bitMap == null) {
bitMap = Arrays.stream(values())
.collect(
Collectors.toMap(OrganizationalNodeTypeEnum::getBitValue, Function.identity()));
Collectors.toMap(NodeTypeEnum::getBitValue, Function.identity()));
}
return bitMap.get(valueBit);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static OrganizationalNodeTypeEnum getByNodeType(Integer value) {
public static NodeTypeEnum getByNodeType(Integer value) {
return Arrays.stream(values()).filter(o -> o.getValue().equals(value)).findFirst()
.orElse(null);
}

View File

@ -2,6 +2,7 @@ package cn.axzo.orgmanax.dto.node.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -9,7 +10,9 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@EqualsAndHashCode(callSuper = true)
@ -24,6 +27,12 @@ public class ListNodeReq extends PageReqV2 {
@Builder.Default
private Set<Long> ids = Collections.emptySet();
/**
* 父级节点
*/
@Builder.Default
private Set<Long> parentIds = Collections.emptySet();
/**
* 组织单位ids
*/
@ -34,7 +43,7 @@ public class ListNodeReq extends PageReqV2 {
* 节点名称集合
*/
@Builder.Default
private Set<String> nodeNames = Collections.emptySet();;
private Set<String> nodeNames = Collections.emptySet();
/**
* 节点名称查询模糊
@ -45,18 +54,21 @@ public class ListNodeReq extends PageReqV2 {
* 指定部门类型
*/
@Builder.Default
private Set<Integer> includeOrgNodeTypes = Collections.emptySet();;
private Set<Integer> includeOrgNodeTypes = Collections.emptySet();
;
/**
* 排除部门类型
*/
@Builder.Default
private Set<Integer> excludeOrgNodeTypes = Collections.emptySet();;
private Set<Integer> excludeOrgNodeTypes = Collections.emptySet();
;
/**
* 顶级节点ID集合
*/
@Builder.Default
private Set<Long> topNodeIds = Collections.emptySet();;
private Set<Long> topNodeIds = Collections.emptySet();
;
/**
* 是否包含祖先节点
@ -110,23 +122,62 @@ public class ListNodeReq extends PageReqV2 {
* 根据workspace和ouId组合查询
*/
@Builder.Default
private Set<WorkspaceOuPair> workspaceOuPairs = Collections.emptySet();;
private Set<WorkspaceOuPair> workspaceOuPairs = Collections.emptySet();
;
/**
* 项目id集合
*/
@Builder.Default
private Set<Long> workspaceIds = Collections.emptySet();;
private Set<Long> workspaceIds = Collections.emptySet();
/**
* 岗位编码
*/
@Builder.Default
private Set<String> jobCodes = Collections.emptySet();;
private Set<String> jobCodes = Collections.emptySet();
/**
* 当前用户personId
*/
private Long personId;
}
/**
* 平台班组id
*/
@Builder.Default
private Set<Long> platTeamIds = Collections.emptySet();
/**
* 项目内班组id列表
*/
@Builder.Default
private Set<Long> projectTeamIds = Collections.emptySet();
/**
* 小组类型
* @see cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum
*/
private Integer projectGroupType;
/**
* 小组id列表
*/
private Collection<Long> projectGroupIds;
/**
* 小组长工人身份id列表
*/
private Collection<Long> ownerWorkerIdentityIds;
/**
* 小组长项目工人id列表
*/
private Collection<Long> ownerProjectWorkerIds;
/**
* 小组状态 0-未激活 1-已激活 2-已结束
* @see ProjectGroupStatusEnum
*/
private Integer projectGroupStatus;
}

View File

@ -14,10 +14,30 @@ import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
public class ProcessNodeReq {
/**
* 业务id
*/
private Long id;
/**
* 操作人
*/
private Long operatorId;
/**
* 描述
*/
private String description;
/**
* 执行行为
*/
private Action action;
/**
* 业务参数
*/
private JSONObject param;
@AllArgsConstructor(access = AccessLevel.PRIVATE)

View File

@ -65,7 +65,7 @@ public class NodeUserBriefDTO implements Serializable {
/**
* 部门管理员 1是 0否
*/
private Object manager;
private Boolean manager;
/**
* 岗位id

View File

@ -1,6 +1,7 @@
package cn.axzo.orgmanax.dto.nodeuser.dto;
import cn.axzo.orgmanax.dto.common.PersonProfileBriefDTO;
import cn.axzo.orgmanax.dto.common.RoleBriefDTO;
import cn.axzo.orgmanax.dto.common.WorkspaceBriefDTO;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobBriefDTO;
@ -16,6 +17,7 @@ import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@NoArgsConstructor
@AllArgsConstructor
@ -73,7 +75,7 @@ public class NodeUserDTO implements Serializable {
/**
* 部门管理员 1是 0否
*/
private Object manager;
private Boolean manager;
/**
* 岗位id
@ -146,6 +148,8 @@ public class NodeUserDTO implements Serializable {
private Integer activeFlag;
/**
* @see NodeUserDTO#resolveProfile()
* @see NodeUserProfile#resolveProjectWorkerId
* 部门人员信息json不同部门类型的部门用户格式不一
*/
private JSONObject profile;
@ -185,5 +189,39 @@ public class NodeUserDTO implements Serializable {
* 注意平台班组是不会返回这个的
*/
private List<NodeUserBriefDTO> subordinateUsers;
/**
* 需指定{@link ListNodeUserReq.Needs#getRole()} 为true才会返回
* 注意平台班组是不会返回这个的
*/
private List<RoleBriefDTO> roles;
/**
* 解析profile
* 调用方需要根据nodeType来解析profile自行使用正确的对象来接收<br>
* 解析对象需要 {@link #getNode()}.nodType信息请确认{@link ListNodeUserReq.Needs#getNode()} = true否则仅会返回json的profile<br>
* <pre>
* NodeUserProfile.ProjectWorkerProfile projectTeamProfile = projectTeamNodeUser.resolveProfile(); // nodeType = 4
* NodeUserProfile.PlatTeamProfile platTeamProfile = platTeamNodeUser.resolveProfile(); // nodeType = 2
* JSONObject normalProfile = normalNodeUser.resolveProfile(); // nodeType = 1
*
* </pre>
*
* @return
* @see NodeUserProfile#resolveProfileClass(Integer)
*/
public <T> T resolveProfile() {
if (profile == null || profile.isEmpty()) {
return (T) profile;
}
if (node == null || node.getNodeType() == null) {
// 没有聚合node信息的情况直接返回JSONObject的profile
return (T) profile;
}
Class<?> clazz = NodeUserProfile.resolveProfileClass(node.getNodeType());
if (clazz == null) {
return (T) profile;
}
return (T) Optional.ofNullable(profile).map(p -> JSONObject.parseObject(p.toString(), clazz)).orElse(null);
}
}

View File

@ -0,0 +1,146 @@
package cn.axzo.orgmanax.dto.nodeuser.dto;
import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
import java.util.Map;
/**
* 部门人员Profile定义
*/
public class NodeUserProfile {
/**
* 项目工人Profile为了方便直观看到对应关系字段和 org_project_team 保持一致
*/
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Data
public static class ProjectWorkerProfile {
// org_project_worker 字段
/**
* 项目班组节点id
*/
private Long projectWorkerId;
/**
* 状态0未激活 1已激活 3已退场
*/
private Integer projectWorkerStatus;
/**
* 工种类别
*/
private String professionCategoryName;
/**
* 是否删除 0:未删除 其他:已删除
*/
private Long isDelete;
/**
* 最后一次进工地的时间进场打卡更新
* 进场打卡更新
*/
private Date lastCheckInTime;
/**
* 最后一次出工地的时间出场打卡更新
*/
private Date lastCheckOutTime;
/**
* 工人施工开始时间工人所有任务单中最早开始时间
*/
private Date constructionStartTime;
/**
* 工人施工结束时间
*/
private Date constructionEndTime;
/**
* 在岗待岗
*/
private Integer occupyStatus;
/**
* 提醒推送未备案消息次数xxljob在给未备案的工人发送消息为了避免多次提醒这里记录了一个提醒的次数
* 参考 maokai代码cn.axzo.apollo.labour.service.job.PushSupervisionMsgJob#execute
*/
private Integer pushSupervisionMsgCount;
}
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Data
/**
* 项目小组人员Profile
*/
public static class ProjectGroupWorkerProfile {
/**
* 项目小组人员主键id
*/
private Long projectGroupWorkerId;
/**
* 状态 状态 0-有效 1-无效
*/
private Integer status;
//
// /**
// * 所属的项目内班组id
// */
// private Long belongProjectTeamId;
//
// /**
// * (合作小组才有)原项目内班组id
// */
// private Long sourceProjectTeamId;
// /**
// * 小组id
// */
// private Long projectGroupId;
/**
* 项目内工人id
*/
private Long projectWorkerId;
// /**
// * 小组类型 0-直属小组 1-合作小组
// */
// private Integer groupType;
/**
* 是否删除 0: 其他删除
*/
private Long isDelete;
}
private static final Map<Integer, Class<?>> typeClassMapping = ImmutableMap.of(
NodeTypeEnum.PROJECT_TEAM.getValue(), ProjectWorkerProfile.class,
NodeTypeEnum.PROJECT_GROUP.getValue(), ProjectGroupWorkerProfile.class
);
public static Class<?> resolveProfileClass(Integer nodeType) {
if (nodeType == null) {
return JSONObject.class;
}
return typeClassMapping.getOrDefault(nodeType, JSONObject.class);
}
public static Long resolveProjectWorkerId(NodeUserDTO nodeUserDTO) {
if (ObjectUtil.isEmpty(nodeUserDTO) || ObjectUtil.isEmpty(nodeUserDTO.getProfile())) {
return null;
}
JSONObject profile = nodeUserDTO.getProfile();
return profile.getLong("projectWorkerId");
}
}

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,23 @@
package cn.axzo.orgmanax.dto.nodeuser.enums;
import lombok.Getter;
/**
* @author wenXueFeng
* @date 2022/10/20 13:53
*/
@Getter
public enum ProjectGroupWorkerStatusEnum {
VALID(0, "有效"),
NO_VALID(1, "无效"),
;
Integer value;
String desc;
ProjectGroupWorkerStatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
}

View File

@ -5,6 +5,7 @@ import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.common.DistinctRule;
import cn.axzo.orgmanax.dto.common.IdentityPair;
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -76,6 +77,11 @@ public class ListNodeUserReq extends PageReqV2 {
private Collection<Long> organizationalNodeIds;
private Collection<Long> excludeOrganizationalNodeIds;
/**
* 祖先节点id parent.nodeId = xx或者parent.parent.nodeId = xxx以此类推
*/
private Collection<Long> ancestorNodeIds;
/**
* 顶级节点id
*/
@ -203,20 +209,27 @@ public class ListNodeUserReq extends PageReqV2 {
private String keyword;
/**
* 状态1未激活 2已激活 3施工中 4已退场
* @see cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum
*/
private Collection<Integer> projectWorkerStatuses; // TODO: 待实现
private Collection<Integer> projectWorkerStatuses;
/**
* 只查询顶级节点 topNodeId = id
*/
private Boolean topNodeOnly;
/**
* orgUserStatus
*/
private Collection<String> orgUserStatus; // TODO: 待实现
private Collection<Integer> orgUserStatuses; // TODO: 待实现具体看如何使用的 condition还是filter
// ~ 不同部门类型的nodeUser的差异化查询字段 项目内工人 项目班组id平台班组id等 start
private Long platTeamId; // TODO: 待实现
private Long projectTeamId; // TODO: 待实现
private Collection<Long> projectTeamIds; // TODO: 待实现
private Long projectWorkerId; // TODO: 待实现
private Long projectGroupId; // TODO: 待实现
private Long platTeamId;
private Long projectTeamId;
private Collection<Long> projectTeamIds;
private Long projectWorkerId;
private Collection<Long> projectWorkerIds;
private Long projectGroupId;
private Integer projectGroupWorkerStatus;
// ~ 结束
@ -224,6 +237,7 @@ public class ListNodeUserReq extends PageReqV2 {
/**
* 包含的单位类型
* XXXfilter的参数会破坏分页如有强分页场景需谨慎使用
* @see cn.axzo.orgmanax.dto.unit.enums.OrganizationalUnitTypeEnum
*/
private Collection<Integer> filterIncludeUnitTypes;
/**
@ -246,6 +260,16 @@ public class ListNodeUserReq extends PageReqV2 {
* XXXfilter的参数会破坏分页如有强分页场景需谨慎使用
*/
private Collection<Integer> filterExcludeCooperateTypes;
/**
* 包含的节点类型
* XXXfilter的参数会破坏分页如有强分页场景需谨慎使用
*/
private Collection<Integer> filterIncludeNodeTypes;
/**
* 排除的节点类型
* XXXfilter的参数会破坏分页如有强分页场景需谨慎使用
*/
private Collection<Integer> filterExcludeNodeTypes;
/**
* 是否只返回顶级节点
* XXXfilter的参数会破坏分页如有强分页场景需谨慎使用
@ -264,7 +288,7 @@ public class ListNodeUserReq extends PageReqV2 {
/**
* 数据权限
*/
private String dataPermissionCacheKey; // TODO: 待实现
private String dataPermissionCacheKey;
// ~ 不同部门类型的nodeUser的差异化查询字段 项目内工人 项目班组id平台班组id等 end
/**
@ -285,6 +309,8 @@ public class ListNodeUserReq extends PageReqV2 {
*/
private DistinctRule distinctRule;
//
// 指定聚合信息
/**
* 聚合信息needs
@ -310,10 +336,6 @@ public class ListNodeUserReq extends PageReqV2 {
* 是否需要部门及父级部门信息默认不返回
*/
private Boolean ancestorNodes;
/**
* 返回node and path
*/
private Boolean nodeAndPath; // TODO : 待实现
/**
* 返回参与项目数量
*/
@ -327,11 +349,6 @@ public class ListNodeUserReq extends PageReqV2 {
*/
private Boolean jobGroup; // TODO : 待实现
/**
* 是否返回下级组织人员所在节点的下级节点的
*/
private Boolean childNodeUser; // TODO: 待实现
/**
* 是否查询下属同单位directManagerPersonId等于自己的
*/
@ -340,7 +357,7 @@ public class ListNodeUserReq extends PageReqV2 {
/**
* 是否需要角色信息
*/
private Boolean role; // TODO : 待实现
private Boolean role;
private Boolean cooperateShip;

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,40 @@
package cn.axzo.orgmanax.dto.orguser.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
/**
* @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,122 @@
package cn.axzo.orgmanax.dto.orguser.event;
import cn.axzo.orgmanax.dto.orguser.enums.OrgUserChangedScenarioEnum;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @description 用户组织架构信息变更事件 (部门-岗位-角色等)
* @author luofu
* @version 1.0
* @date 2024/10/30
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserChangedEvent implements Serializable {
private static final long serialVersionUID = 6513111764022461738L;
/**
* 自然人id
*/
private Long personId;
/**
* 单位id
*/
private Long ouId;
/**
* 租户id
*/
private Long workspaceId;
/**
* 用户状态
* 1) 在职 5
* 2) 离职 6
* 3) 入场中 0
* 4) 在场 1
* 5) 离场 3
* 6) 已删除 4
*/
private Integer statusCode;
/**
* 异动时间戳
*/
private Long transferTimestamp;
/**
* 人员异动场景
* @see OrgUserChangedScenarioEnum
*/
private String scenarioCode;
/**
* 备注二维码加入 - APP端手机号添加 - CMS端
*/
private String remark;
/**
* 补充信息信息
*/
private SupplementaryInfo supplementaryInfo;
/**
* 操作人的自然人id
*/
private Long operatorId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class SupplementaryInfo implements Serializable{
private static final long serialVersionUID = -8577751204851100329L;
/**
* 部门id列表
*/
private List<Long> orgNodeIds;
/**
* 部门主管标识所在的部门id
*/
private Long majorOrgNodeId;
/**
* 岗位id列表
*/
private List<Long> jobIds;
/**
* 角色id列表
*/
private List<Long> roleIds;
/**
* 直属主管id
*/
private Long directManagerPersonId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
}

View File

@ -0,0 +1,69 @@
package cn.axzo.orgmanax.dto.orguser.event;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author luofu
* @version 1.0
* @date 2024/11/5
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgUserStatusChangedEvent implements Serializable {
private static final long serialVersionUID = 1534318491778930088L;
/**
* 自然人id
*/
private Long personId;
/**
* 单位id
*/
private Long ouId;
/**
* 租户id
*/
private Long workspaceId;
/**
* 顶级部门id
*/
private Long topNodeId;
/**
* 用户状态
* 1) 在职 5
* 2) 离职 6
* 3) 入场中 0
* 4) 在场 1
* 5) 离场 3
* 6) 已删除 4
*/
private Integer statusCode;
/**
* 异动时间戳
*/
private Long transferTimestamp;
/**
* 操作人的id
*/
private Long operatorId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -6,6 +6,7 @@ import cn.axzo.foundation.page.PageReqV2;
import lombok.*;
import lombok.experimental.SuperBuilder;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -89,18 +90,33 @@ public class ListOrgUserReq extends PageReqV2 {
@CriteriaField(field = "status", operator = Operator.IN)
private Set<Integer> statuses;
@CriteriaField(ignore = true)
@Builder.Default
private Integer page = 1;
/**
* 最大支持1000条数据不支持单页超过1000的查询接入方按需分页
*/
@Builder.Default
@CriteriaField(ignore = true)
private Integer pageSize = 1000;
@CriteriaField(ignore = true)
private List<String> sort;
@CriteriaField(ignore = true)
private Boolean needPersonProfile;
/**
* 关键字查询
* 1用户名称模糊匹配
* 2手机号身份证号精确匹配
*/
@CriteriaField(ignore = true)
private String keyword;
/**
* 离职时间筛选起始
*/
@CriteriaField(field = "transferTime", operator = Operator.GE)
private Date leaveAtStart;
/**
* 离职时间筛选结束
*/
@CriteriaField(field = "transferTime", operator = Operator.LE)
private Date leaveAtEnd;
/**
* 是都包含删除(默认走查询未删除)
*/
@CriteriaField(ignore = true)
private Boolean includeDeleted;
}

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,75 @@
package cn.axzo.orgmanax.dto.processrelationship.dto;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.Optional;
/**
* @Author zr
* @Date 2024/4/26 14:03
* @Description
**/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BusinessProcessRelationshipDTO {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private Long id;
/**
* 业务类型
* TEAM_JOIN_WORKSPACE("班组加入项目"),
* TEAM_DISSOLVE("班组解散"),
* PROJECT_TEAM_RESIGN("项目内班组离场"),
* CHANGE_TEAM_OWNER("更换班组长"),
* WORKER_APPLY_UNIT_TEAM("工人申请加入单位班组"),
*
*/
private String type;
/**
* 业务id
*/
private Long bizId;
/**
* 流程id
*/
private String processInstanceId;
/**
* 审批状态CREATED=已创建PROCESSING=审批中REJECTED=已拒绝
* APPROVED=已审批通过ABORTED=审批中止CANCELLED=已撤回DELETED=已删除
*/
private String processInstanceStatus;
private JSONObject extra;
/**
* 是否删除 0否1是
*/
private Long isDelete;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
/**
* 创建人自然人id
*/
private Long createBy;
public JSONObject nullToEmptyExtra() {
return Optional.ofNullable(extra).orElseGet(JSONObject::new);
}
}

View File

@ -0,0 +1,29 @@
package cn.axzo.orgmanax.dto.processrelationship.enums;
import lombok.Getter;
/**
* @Author zr
* @Date 2024/4/26 14:12
* @Description
**/
@Getter
public enum BusinessProcessRelationshipTypeEnum {
/**
* 班组加入项目
*/
TEAM_JOIN_WORKSPACE("班组加入项目"),
TEAM_DISSOLVE("班组解散"),
PROJECT_TEAM_RESIGN("项目内班组离场"),
CHANGE_TEAM_OWNER("更换班组长"),
WORKER_APPLY_UNIT_TEAM("工人申请加入单位班组"),
;
public final String desc;
BusinessProcessRelationshipTypeEnum(String desc) {
this.desc = desc;
}
}

View File

@ -0,0 +1,22 @@
package cn.axzo.orgmanax.dto.processrelationship.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 审批状态PROCESSING=审批中REJECTED=已拒绝
* APPROVED=已审批通过ABORTED=审批中止CANCELLED=已撤回DELETED=已删除
*/
@Getter
@AllArgsConstructor
public enum ProcessInstanceStatusEnum {
PROCESSING("审批中"),
REJECTED("已拒绝"),
APPROVED("已审批通过"),
CANCELLED("已撤回"),
ABORTED("审批中止"),
DELETED("已删除");
private final String desc;
}

View File

@ -0,0 +1,47 @@
package cn.axzo.orgmanax.dto.processrelationship.req;
import cn.axzo.orgmanax.dto.processrelationship.enums.BusinessProcessRelationshipTypeEnum;
import cn.axzo.orgmanax.dto.processrelationship.enums.ProcessInstanceStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProcessRelationListReq {
/**
* 业务类型
*
*/
private BusinessProcessRelationshipTypeEnum type;
/**
* 业务类型s
*
*/
private List<BusinessProcessRelationshipTypeEnum> typeList;
/**
* 业务id
*/
private List<Long> bizIds;
/**
* 流程id
*/
private List<String> processInstanceIds;
/**
* 审批状态CREATED=已创建PROCESSING=审批中REJECTED=已拒绝
* APPROVED=已审批通过ABORTED=审批中止CANCELLED=已撤回DELETED=已删除
*/
private List<ProcessInstanceStatusEnum> processInstanceStatusList;
private Long nodeId;
}

Some files were not shown because too many files have changed in this diff Show More