From 0f213baf6acc8599018cb29a838f3f63c7e54346 Mon Sep 17 00:00:00 2001 From: zhangran Date: Thu, 20 Mar 2025 11:09:47 +0800 Subject: [PATCH] =?UTF-8?q?add(feature/REQ-3714)=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=B7=A5=E4=BA=BA=E6=97=B6=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E7=BB=88=E6=AD=A2=E5=B7=A5=E4=BA=BA=E5=85=A5=E5=9C=BA?= =?UTF-8?q?=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orgmanax/dto/node/dto/OrgNodeDTO.java | 4 + .../client/workflow/WorkflowCoreClient.java | 16 ++ .../dto/BatchOperationResultResp.java | 63 ++++++ .../dto/BpmnProcessInstanceAbortReq.java | 34 +++ .../ProjectWorkerInviteRepository.java | 213 ++++++++++++++++++ .../ProjectWorkerInviteRepositoryImpl.java | 32 +++ .../dao/node/entity/OrganizationalNode.java | 11 + .../OrgProjectWorkerQueryRepository.java | 2 + orgmanax-integration/pom.xml | 13 ++ .../sdk/workflow/WorkflowCoreClientImpl.java | 37 +++ .../ProjectWorkerInviteFoundationService.java | 16 ++ .../dto/ProjectWorkerInviteCreator.java | 143 ++++++++++++ ...jectWorkerInviteFoundationServiceImpl.java | 30 +++ .../impl/DeletePlatTeamWorkerProcessor.java | 81 +++++++ .../OrgProjectWorkerFoundationService.java | 4 + ...OrgProjectWorkerFoundationServiceImpl.java | 17 ++ .../req/DeleteOrgProjectWorkerReq.java | 17 ++ 17 files changed, 733 insertions(+) create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/WorkflowCoreClient.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BatchOperationResultResp.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BpmnProcessInstanceAbortReq.java create mode 100644 orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/workflow/WorkflowCoreClientImpl.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/ProjectWorkerInviteFoundationService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/dto/ProjectWorkerInviteCreator.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/impl/ProjectWorkerInviteFoundationServiceImpl.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/req/DeleteOrgProjectWorkerReq.java diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeDTO.java index af94bc4..559c25d 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeDTO.java @@ -103,6 +103,10 @@ public class OrgNodeDTO implements Serializable { */ private JSONObject profile; + private Long platTeamId; + + private Long projectTeamId; + private Date createAt; private Long createBy; private Date updateAt; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/WorkflowCoreClient.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/WorkflowCoreClient.java new file mode 100644 index 0000000..7d8362a --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/WorkflowCoreClient.java @@ -0,0 +1,16 @@ +package cn.axzo.orgmanax.infra.client.workflow; + +import cn.axzo.orgmanax.infra.client.workflow.dto.BatchOperationResultResp; +import cn.axzo.orgmanax.infra.client.workflow.dto.BpmnProcessInstanceAbortReq; + +import java.util.List; + +/** + * @Author zr + * @Date 2025/3/20 09:37 + * @Description + **/ +public interface WorkflowCoreClient { + + BatchOperationResultResp batchAbortProcessInstance(List reqs); +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BatchOperationResultResp.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BatchOperationResultResp.java new file mode 100644 index 0000000..3823eb6 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BatchOperationResultResp.java @@ -0,0 +1,63 @@ +package cn.axzo.orgmanax.infra.client.workflow.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author zr + * @Date 2025/3/20 09:44 + * @Description + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BatchOperationResultResp { + + /** + * 请求数量 + */ + private Integer requestCount = 0; + + /** + * 失败数量 + */ + private Integer failCount = 0; + + /** + * 批量操作处理详情 + */ + private List details; +} + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +class BatchOperationItemResultResp { + /** + * 被处理数据的 ID + * 可以是实例 ID,也可以是任务 ID,根据调用的 API 不同而不同 + */ + private String id; + + /** + * 处理的数据类型: 业务审批, 流程审批 + */ + private String type; + + /** + * 该流程实例处理过程中是否发生错误 + */ + private Boolean hasError = false; + + /** + * 具体的错误信息 + */ + private String errorMessage; +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BpmnProcessInstanceAbortReq.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BpmnProcessInstanceAbortReq.java new file mode 100644 index 0000000..d9b0f6a --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/workflow/dto/BpmnProcessInstanceAbortReq.java @@ -0,0 +1,34 @@ +package cn.axzo.orgmanax.infra.client.workflow.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * @Author zr + * @Date 2025/3/20 09:39 + * @Description + **/ +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BpmnProcessInstanceAbortReq { + + /** + * 中止原因 + */ + @NotBlank(message = "中止原因不能为空") + @Length(max = 100, message = "中止原因长度不能超过 100 个字符") + private String reason; + + /** + * 流程实例 ID + */ + @NotBlank(message = "流程实例 ID 不能为空") + private String processInstanceId; +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java index ead505e..8948171 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java @@ -1,8 +1,221 @@ package cn.axzo.orgmanax.infra.dao.invite.repository; +import cn.axzo.foundation.dao.support.wrapper.CriteriaField; +import cn.axzo.foundation.dao.support.wrapper.Operator; +import cn.axzo.foundation.page.PageReqV2; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.trade.datasecurity.core.annotation.CryptField; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Collections; +import java.util.Date; +import java.util.List; + /** * @author zhanghongbo * @date 2025/1/8 */ public interface ProjectWorkerInviteRepository { + + PageResp page(ListReq req); + + /** + * 列表查询 + * + * @param req + * @return + */ + default List list(ListReq req) { + PageResp page = page(req); + if (page == null) { + return Collections.emptyList(); + } + return CollUtil.emptyIfNull(page.getData()); + } + + void updateBatchById(List req); + + + + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class ListReq extends PageReqV2 { + + @CriteriaField(field = "id", operator = Operator.EQ) + private Long id; + @CriteriaField(field = "id", operator = Operator.IN) + private List ids; + + /** + * 工作台ID + */ + @CriteriaField(field = "workspaceId", operator = Operator.EQ) + private Long workspaceId; + + /** + * 项目内班组ID + */ + + @CriteriaField(field = "projectTeamId", operator = Operator.EQ) + private Long projectTeamId; + @CriteriaField(field = "projectTeamId", operator = Operator.IN) + private List projectTeamIds; + + + /** + * 工人ID + */ + + @CriteriaField(field = "workerIdentityId", operator = Operator.EQ) + private Long workerIdentityId; + @CriteriaField(field = "workerIdentityId", operator = Operator.IN) + private List workerIdentityIds; + + /** + * 状态:1、待班组审批  2、待劳务审批  3、通过 4、拒绝 + */ + @CriteriaField(field = "status", operator = Operator.EQ) + private Integer status; + @CriteriaField(field = "status", operator = Operator.IN) + private List statusList; + + + /** + * 工作流流程实例id + */ + @CriteriaField(field = "processInstanceId", operator = Operator.EQ) + private String processInstanceId; + @CriteriaField(field = "processInstanceId", operator = Operator.IN) + private List processInstanceIds; + + /** + * 查询返回数据包含,逻辑删除数据,即查询未删除和已删除的数据。 + */ + @CriteriaField(ignore = true) + private Boolean includeDeleted; + } + + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class ProjectWorkerInviteResp { + + private Long id; + + /** + * 工作台ID + */ + private Long workspaceId; + + /** + * 总包ID + */ + private Long entId; + + /** + * 项目内班组ID + */ + private Long projectTeamId; + + /** + * 项目内工人id + */ + private Long projectWorkerId; + + /** + * 所属单位ID + */ + private Long organizationalUnitId; + + /** + * 所属单位类型: 1:总包 4:专业分包 5:劳务分包 + */ + private Integer organizationalUnitType; + + /** + * 工人ID + */ + private Long workerIdentityId; + + /** + * 状态:1、待班组审批  2、待劳务审批  3、通过 4、拒绝 + */ + private Integer status; + + /** + * 类型:1、班组长邀请 2、二维码邀请 3:派单 + */ + private Integer source; + /** + * 邀请人id + */ + private Long inviterId; + + /** + * 邀请人名称 + */ + private String inviterName; + + /** + * 是否删除 0:未删除 其他:已删除 + */ + private Long isDelete; + + private Date createAt; + + private Date updateAt; + /** + * 工种类别 技工 普工 + */ + private String professionCategoryName; + /** + * 审批人的从业人员身份id + */ + private Long approverIdentityId; + + /** + * 班组长审批时间,REQ-598 + */ + private Date teamLeaderAuditDate; + + /** + * source = 4合作小组派单,记录甲方的班组id + */ + private Long belongProjectTeamId; + + /** + * 工人名称 + */ + private String workerName; + /** + * 工人电话号码 + */ + @CryptField + private String workerPhone; + + /** + * 工作流流程实例id + */ + private String processInstanceId; + /** + * 邀请的工种 + */ + private JSONObject professionExt; + + /** + * 扩展字段 + */ + private JSONObject extra; + } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java index 7053803..b927242 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java @@ -1,10 +1,21 @@ package cn.axzo.orgmanax.infra.dao.invite.repository.impl; +import cn.axzo.foundation.dao.support.converter.PageConverter; +import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.infra.dao.invite.dao.ProjectWorkerInviteDao; +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; import cn.axzo.orgmanax.infra.dao.invite.repository.ProjectWorkerInviteRepository; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Repository; +import java.util.List; + /** * @author zhanghongbo * @date 2025/1/8 @@ -13,4 +24,25 @@ import org.springframework.stereotype.Repository; @Slf4j @AllArgsConstructor public class ProjectWorkerInviteRepositoryImpl implements ProjectWorkerInviteRepository { + + private final ProjectWorkerInviteDao projectWorkerInviteDao; + + @Override + public PageResp page(ListReq req) { + IPage page = PageConverter.toMybatis(req, ProjectWorkerInvite.class); + QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, ProjectWorkerInvite.class); + if (BooleanUtils.isNotTrue(req.getIncludeDeleted())) { + wrapper.eq("is_delete", 0); + } + IPage results = projectWorkerInviteDao.page(page, wrapper) + .convert(e -> BeanUtil.toBean(e, ProjectWorkerInviteResp.class)); + + PageResp resp = PageConverter.toResp(results); + return resp; + } + + @Override + public void updateBatchById(List invites){ + projectWorkerInviteDao.updateBatchById(invites); + } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNode.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNode.java index 5b49ffa..88cb4b7 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNode.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNode.java @@ -137,6 +137,17 @@ public class OrganizationalNode implements Serializable { @TableField(value = "profile", typeHandler = FastjsonTypeHandler.class) private JSONObject profile; + /** + * 平台班组id + */ + @TableField("__vc_plat_team_id") + private Long platTeamId; + /** + * 项目班组id + */ + @TableField("__vc_project_team_id") + private Long projectTeamId; + protected Date createAt; protected Long createBy; protected Date updateAt; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/worker/repositrory/OrgProjectWorkerQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/worker/repositrory/OrgProjectWorkerQueryRepository.java index 0016707..130f8d8 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/worker/repositrory/OrgProjectWorkerQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/worker/repositrory/OrgProjectWorkerQueryRepository.java @@ -57,6 +57,8 @@ public interface OrgProjectWorkerQueryRepository { @Data @SuperBuilder class ListReq extends PageReqV2 { + @CriteriaField(field = "id", operator = Operator.IN) + private List ids; /** * 工作台ID diff --git a/orgmanax-integration/pom.xml b/orgmanax-integration/pom.xml index 4ae327f..4e6a86e 100644 --- a/orgmanax-integration/pom.xml +++ b/orgmanax-integration/pom.xml @@ -76,6 +76,19 @@ data-tagger-api 1.0.0-SNAPSHOT + + + + cn.axzo.data-tagger + data-tagger-api + 1.0.0-SNAPSHOT + + + + cn.axzo.workflow + workflow-engine-spring-boot-starter + 1.5.2-SNAPSHOT + \ No newline at end of file diff --git a/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/workflow/WorkflowCoreClientImpl.java b/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/workflow/WorkflowCoreClientImpl.java new file mode 100644 index 0000000..de87e05 --- /dev/null +++ b/orgmanax-integration/src/main/java/cn/axzo/orgmanax/integration/sdk/workflow/WorkflowCoreClientImpl.java @@ -0,0 +1,37 @@ +package cn.axzo.orgmanax.integration.sdk.workflow; + +import cn.axzo.orgmanax.infra.client.workflow.WorkflowCoreClient; +import cn.axzo.orgmanax.infra.client.workflow.dto.BatchOperationResultResp; +import cn.axzo.orgmanax.infra.client.workflow.dto.BpmnProcessInstanceAbortReq; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO; +import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO; +import cn.axzo.workflow.starter.api.WorkflowCoreService; +import cn.azxo.framework.common.logger.MethodAroundLog; +import cn.hutool.core.bean.BeanUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author zr + * @Date 2025/3/20 09:41 + * @Description + **/ +@AllArgsConstructor +@Component +@Slf4j +public class WorkflowCoreClientImpl implements WorkflowCoreClient { + + @Autowired + private final WorkflowCoreService workflowCoreService; + @Override + @MethodAroundLog(source = "orgmanax", target = "workflow", value = "批量驳回流程实例") + public BatchOperationResultResp batchAbortProcessInstance(List reqs) { + List abortDTOS = BeanUtil.copyToList(reqs, BpmnProcessInstanceAbortDTO.class); + BatchOperationResultVO resultVO = workflowCoreService.async().batchAbortProcessInstance(abortDTOS); + return BeanUtil.copyProperties(resultVO,BatchOperationResultResp.class); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/ProjectWorkerInviteFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/ProjectWorkerInviteFoundationService.java new file mode 100644 index 0000000..627307a --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/ProjectWorkerInviteFoundationService.java @@ -0,0 +1,16 @@ +package cn.axzo.orgmanax.server.invite.foundation; + +import cn.axzo.orgmanax.infra.dao.invite.repository.ProjectWorkerInviteRepository; +import cn.axzo.orgmanax.server.invite.foundation.dto.ProjectWorkerInviteCreator; + +import java.util.List; + +/** + * @Author zr + * @Date 2025/3/19 18:05 + * @Description + **/ +public interface ProjectWorkerInviteFoundationService { + + List updateBatchById(List req); +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/dto/ProjectWorkerInviteCreator.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/dto/ProjectWorkerInviteCreator.java new file mode 100644 index 0000000..5efe849 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/dto/ProjectWorkerInviteCreator.java @@ -0,0 +1,143 @@ +package cn.axzo.orgmanax.server.invite.foundation.dto; + +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.trade.datasecurity.core.annotation.CryptField; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * @Author zr + * @Date 2025/3/19 18:07 + * @Description + **/ + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ProjectWorkerInviteCreator { + private Long id; + + /** + * 工作台ID + */ + private Long workspaceId; + + /** + * 总包ID + */ + private Long entId; + + /** + * 项目内班组ID + */ + private Long projectTeamId; + + /** + * 项目内工人id + */ + private Long projectWorkerId; + + /** + * 所属单位ID + */ + private Long organizationalUnitId; + + /** + * 所属单位类型: 1:总包 4:专业分包 5:劳务分包 + */ + private Integer organizationalUnitType; + + /** + * 工人ID + */ + private Long workerIdentityId; + + /** + * 状态:1、待班组审批  2、待劳务审批  3、通过 4、拒绝 + */ + private Integer status; + + /** + * 类型:1、班组长邀请 2、二维码邀请 3:派单 + */ + private Integer source; + /** + * 邀请人id + */ + private Long inviterId; + + /** + * 邀请人名称 + */ + private String inviterName; + + /** + * 是否删除 0:未删除 其他:已删除 + */ + private Long isDelete; + + private Date createAt; + + private Date updateAt; + /** + * 工种类别 技工 普工 + */ + private String professionCategoryName; + /** + * 审批人的从业人员身份id + */ + private Long approverIdentityId; + + /** + * 班组长审批时间,REQ-598 + */ + private Date teamLeaderAuditDate; + + /** + * source = 4合作小组派单,记录甲方的班组id + */ + private Long belongProjectTeamId; + + /** + * 工人名称 + */ + private String workerName; + /** + * 工人电话号码 + */ + @CryptField + private String workerPhone; + + /** + * 工作流流程实例id + */ + private String processInstanceId; + /** + * 邀请的工种 + */ + private JSONObject professionExt; + + /** + * 扩展字段 + */ + private JSONObject extra; + + /** + * 构建实体 + * @return + */ + public ProjectWorkerInvite toEntity() { + return BeanUtil.copyProperties(this, ProjectWorkerInvite.class); + } + + +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/impl/ProjectWorkerInviteFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/impl/ProjectWorkerInviteFoundationServiceImpl.java new file mode 100644 index 0000000..7d3a8af --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/foundation/impl/ProjectWorkerInviteFoundationServiceImpl.java @@ -0,0 +1,30 @@ +package cn.axzo.orgmanax.server.invite.foundation.impl; + +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.orgmanax.infra.dao.invite.repository.ProjectWorkerInviteRepository; +import cn.axzo.orgmanax.server.invite.foundation.ProjectWorkerInviteFoundationService; +import cn.axzo.orgmanax.server.invite.foundation.dto.ProjectWorkerInviteCreator; +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author zr + * @Date 2025/3/19 18:10 + * @Description + **/ +@RequiredArgsConstructor +@Service +public class ProjectWorkerInviteFoundationServiceImpl implements ProjectWorkerInviteFoundationService { + private final ProjectWorkerInviteRepository projectWorkerInviteRepository; + + @Override + public List updateBatchById(List req) { + List projectWorkerInvites = req.stream().map(item -> item.toEntity()).collect(Collectors.toList()); + projectWorkerInviteRepository.updateBatchById(projectWorkerInvites); + return BeanUtil.copyToList(projectWorkerInvites, ProjectWorkerInviteRepository.ProjectWorkerInviteResp.class); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/processor/impl/DeletePlatTeamWorkerProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/processor/impl/DeletePlatTeamWorkerProcessor.java index 24ccbc8..6f39e87 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/processor/impl/DeletePlatTeamWorkerProcessor.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/processor/impl/DeletePlatTeamWorkerProcessor.java @@ -4,9 +4,12 @@ import cn.axzo.foundation.exception.Axssert; import cn.axzo.framework.rocketmq.EventProduceTemplate; import cn.axzo.framework.rocketmq.RocketConfigProperties; import cn.axzo.karma.client.model.request.PlatWorkTeamGrantPositionReq; +import cn.axzo.maokai.api.labour.common.enums.WorkerInviteStatusEnum; import cn.axzo.msg.center.api.v2.message.req.MessageSendV2Req; import cn.axzo.msg.center.api.v2.message.req.PersonV2DTO; import cn.axzo.orgmanax.dto.common.IdentityType; +import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; +import cn.axzo.orgmanax.dto.node.req.ListNodeReq; import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; import cn.axzo.orgmanax.dto.nodeuser.req.DeleteNodeUserReq; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; @@ -15,14 +18,20 @@ import cn.axzo.orgmanax.infra.client.eventhub.dto.OrganizationTypeEnum; import cn.axzo.orgmanax.infra.client.msg.MsgCenterGateway; import cn.axzo.orgmanax.infra.client.tyr.SaasRoleUserClient; import cn.axzo.orgmanax.infra.client.tyr.dto.OrgManaxWorkerManagerRoleUserReq; +import cn.axzo.orgmanax.infra.client.workflow.WorkflowCoreClient; +import cn.axzo.orgmanax.infra.client.workflow.dto.BpmnProcessInstanceAbortReq; import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip; import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository; +import cn.axzo.orgmanax.infra.dao.invite.repository.ProjectWorkerInviteRepository; import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalTeamOuRelation; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.node.repository.TeamOuRelationRepository; import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository; import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository; +import cn.axzo.orgmanax.server.invite.foundation.ProjectWorkerInviteFoundationService; +import cn.axzo.orgmanax.server.invite.foundation.dto.ProjectWorkerInviteCreator; +import cn.axzo.orgmanax.server.node.service.NodeService; import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService; import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserDelete; import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate; @@ -31,11 +40,14 @@ import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import cn.axzo.orgmanax.infra.client.msg.vo.JoinLeaveEnum; import cn.axzo.orgmanax.infra.client.msg.vo.MessageCodeEnum; import cn.axzo.orgmanax.infra.client.msg.vo.MessageVariableNameEnum; +import cn.axzo.orgmanax.server.project.worker.foundation.OrgProjectWorkerFoundationService; +import cn.axzo.orgmanax.server.project.worker.foundation.req.DeleteOrgProjectWorkerReq; import cn.axzo.orgmanax.server.util.AssertUtil; import cn.axzo.orgmanax.server.workerprofession.foundation.OrgProjectWorkerProfessionFoundationService; import cn.axzo.orgmanax.server.workerprofession.foundation.dto.DeleteWorkerProfession; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.common.enums.SaasPositionEnum; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; @@ -44,9 +56,13 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionTemplate; +import org.springframework.util.StringUtils; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -81,6 +97,12 @@ public class DeletePlatTeamWorkerProcessor implements NodeUserProcessor { private final EventProduceTemplate eventProduceTemplate; private final RocketConfigProperties rocketConfigProperties; private final NodeQueryRepository nodeQueryRepository; + private final NodeService nodeService; + private final ProjectWorkerInviteRepository projectWorkerInviteRepository; + private final ProjectWorkerInviteFoundationService projectWorkerInviteFoundationService; + private final OrgProjectWorkerFoundationService orgProjectWorkerFoundationService; + private final TransactionTemplate transactionTemplate; + private final WorkflowCoreClient workflowCoreClient; private static final String PROMISE_GROUP_EVENT_MODULE = "promise-group"; private static final String PROMISE_GROUP_EVENT_NAME = "promise-group-remove"; @@ -127,6 +149,8 @@ public class DeletePlatTeamWorkerProcessor implements NodeUserProcessor { if (Objects.nonNull(ouRelation)) { // 移除代班长权限 removePlatTeamManager(ouRelation, vs); + // 终止项目内正在申请中的邀约记录 + removeWorkerInvite(ouRelation, vs); // 删除平台工人 List deleteTeamWorkerPersonIds = vs.stream().map(NodeUserDTO::getPersonId).collect(Collectors.toList()); NodeUserDelete nodeUserDelete = NodeUserDelete.builder() @@ -172,6 +196,63 @@ public class DeletePlatTeamWorkerProcessor implements NodeUserProcessor { sendMQ(ouRelation, nodeUserDTOS); } + private void removeWorkerInvite(OrganizationalTeamOuRelation ouRelation, List nodeUserDTOS){ + List orgNodeDTOS = listProjectTeam(ouRelation); + if (CollUtil.isEmpty(orgNodeDTOS)) { + return ; + } + + List identityIds = nodeUserDTOS.stream().map(NodeUserDTO::getIdentityId).distinct().collect(Collectors.toList()); + + List projectTeamIds = orgNodeDTOS.stream().map(OrgNodeDTO::getProjectTeamId).filter(Objects::nonNull).collect(Collectors.toList()); + + ProjectWorkerInviteRepository.ListReq queryBo = new ProjectWorkerInviteRepository.ListReq(); + queryBo.setProjectTeamIds(projectTeamIds); + queryBo.setWorkerIdentityIds(identityIds); + queryBo.setStatusList(Arrays.asList(WorkerInviteStatusEnum.WAIT_LEADER_APPROVE.getValue(), WorkerInviteStatusEnum.WAIT_LABOUR_APPROVE.getValue())); + queryBo.setIncludeDeleted(Boolean.FALSE); + List workerInvites = projectWorkerInviteRepository.list(queryBo); + List inviteIds = workerInvites.stream().map(ProjectWorkerInviteRepository.ProjectWorkerInviteResp::getId).collect(Collectors.toList()); + List processInstanceIds = workerInvites.stream().map(ProjectWorkerInviteRepository.ProjectWorkerInviteResp::getProcessInstanceId).filter(StringUtils::hasText).collect(Collectors.toList()); + + List inviteCreators = workerInvites.stream().map(item -> { + ProjectWorkerInviteCreator projectWorkerInviteCreator = BeanUtil.copyProperties(item, ProjectWorkerInviteCreator.class); + projectWorkerInviteCreator.setStatus(WorkerInviteStatusEnum.TEAM_OWNER_REFUSE.getValue()); + return projectWorkerInviteCreator; + }).collect(Collectors.toList()); + + List projectWorkerIds = workerInvites.stream().map(ProjectWorkerInviteRepository.ProjectWorkerInviteResp::getProjectWorkerId).collect(Collectors.toList()); + + transactionTemplate.executeWithoutResult(status -> { + projectWorkerInviteFoundationService.updateBatchById(inviteCreators); + log.info("拒绝未完成的工人申请记录, workerInvites:{}", JSON.toJSONString(workerInvites)); + orgProjectWorkerFoundationService.deleteByParam(DeleteOrgProjectWorkerReq.builder().projectWorkerIds(projectWorkerIds).build()); + if (CollUtil.isNotEmpty(inviteIds)) { + log.info("撤销未加入项目的工人审批记录 inviteIds:{}", inviteIds); + List abortReqs = processInstanceIds.stream().map(processInstanceId -> { + return BpmnProcessInstanceAbortReq.builder() + .processInstanceId(processInstanceId) + .reason("班组长已将工人移除班组") + .build(); + }).collect(Collectors.toList()); + workflowCoreClient.batchAbortProcessInstance(abortReqs); + } + // 现在工人退出平台班组,需先从项目内班组退出 + }); + } + + private List listProjectTeam(OrganizationalTeamOuRelation ouRelation){ + ListNodeReq listNodeReq = ListNodeReq.builder().platTeamIds(Sets.newHashSet(ouRelation.getTeamOuId())).build(); + List orgNodeDTOS = nodeService.list(listNodeReq); + + if (CollectionUtils.isEmpty(orgNodeDTOS)) { + log.info("忽略平台班组长移除工人操作,平台班组platTeamId=【{}】未加入项目", ouRelation.getTeamOuId()); + return Collections.emptyList(); + } + return orgNodeDTOS; + } + + private void sendMQ(OrganizationalTeamOuRelation ouRelation, List nodeUserDTOS){ PlatWorkTeamGrantPositionReq build = PlatWorkTeamGrantPositionReq.builder() .platWorkTeamOuId(ouRelation.getTeamOuId()) diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/OrgProjectWorkerFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/OrgProjectWorkerFoundationService.java index 2291a9c..0303ae9 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/OrgProjectWorkerFoundationService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/OrgProjectWorkerFoundationService.java @@ -1,5 +1,6 @@ package cn.axzo.orgmanax.server.project.worker.foundation; +import cn.axzo.orgmanax.server.project.worker.foundation.req.DeleteOrgProjectWorkerReq; import cn.axzo.orgmanax.server.project.worker.foundation.req.OrgProjectWorkerWithdrawReq; import org.springframework.transaction.annotation.Transactional; @@ -7,4 +8,7 @@ public interface OrgProjectWorkerFoundationService { @Transactional(rollbackFor = Throwable.class) void batchWithdraw(OrgProjectWorkerWithdrawReq req); + + @Transactional(rollbackFor = Throwable.class) + void deleteByParam(DeleteOrgProjectWorkerReq req); } \ No newline at end of file diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/impl/OrgProjectWorkerFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/impl/OrgProjectWorkerFoundationServiceImpl.java index ea60426..60e7b0a 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/impl/OrgProjectWorkerFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/impl/OrgProjectWorkerFoundationServiceImpl.java @@ -5,6 +5,7 @@ import cn.axzo.orgmanax.infra.dao.project.worker.entity.OrgProjectWorker; import cn.axzo.orgmanax.infra.dao.project.worker.repositrory.OrgProjectWorkerQueryRepository; import cn.axzo.orgmanax.infra.dao.project.worker.repositrory.OrgProjectWorkerUpsertRepository; import cn.axzo.orgmanax.server.project.worker.foundation.OrgProjectWorkerFoundationService; +import cn.axzo.orgmanax.server.project.worker.foundation.req.DeleteOrgProjectWorkerReq; import cn.axzo.orgmanax.server.project.worker.foundation.req.OrgProjectWorkerWithdrawReq; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; @@ -49,4 +50,20 @@ public class OrgProjectWorkerFoundationServiceImpl implements OrgProjectWorkerFo }).collect(Collectors.toList()); orgProjectWorkerUpsertRepository.batchUpdate(orgProjectWorkers); } + + @Override + public void deleteByParam(DeleteOrgProjectWorkerReq req) { + OrgProjectWorkerQueryRepository.ListReq listReq = new OrgProjectWorkerQueryRepository.ListReq(); + listReq.setIds(req.getProjectWorkerIds()); + List projectWorkerResps = orgProjectWorkerQueryRepository.list(listReq); + if (CollUtil.isEmpty(projectWorkerResps)) { + return; + } + List orgProjectWorkers = projectWorkerResps.stream().map(e -> { + OrgProjectWorker orgProjectWorker = BeanUtil.toBean(e, OrgProjectWorker.class); + e.setIsDelete(e.getId()); + return orgProjectWorker; + }).collect(Collectors.toList()); + orgProjectWorkerUpsertRepository.batchUpdate(orgProjectWorkers); + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/req/DeleteOrgProjectWorkerReq.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/req/DeleteOrgProjectWorkerReq.java new file mode 100644 index 0000000..51ecef1 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/foundation/req/DeleteOrgProjectWorkerReq.java @@ -0,0 +1,17 @@ +package cn.axzo.orgmanax.server.project.worker.foundation.req; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +/** + * @Author zr + * @Date 2025/3/19 20:00 + * @Description + **/ +@Builder +@Data +public class DeleteOrgProjectWorkerReq { + private List projectWorkerIds; +}