add(feature/REQ-3714) 移除平台工人时,同时终止工人入场申请

This commit is contained in:
zhangran 2025-03-20 11:09:47 +08:00
parent a3bce5367e
commit 0f213baf6a
17 changed files with 733 additions and 0 deletions

View File

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

View File

@ -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<BpmnProcessInstanceAbortReq> reqs);
}

View File

@ -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<BatchOperationItemResultResp> details;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class BatchOperationItemResultResp {
/**
* 被处理数据的 ID
* 可以是实例 ID,也可以是任务 ID,根据调用的 API 不同而不同
*/
private String id;
/**
* 处理的数据类型: 业务审批, 流程审批
*/
private String type;
/**
* 该流程实例处理过程中是否发生错误
*/
private Boolean hasError = false;
/**
* 具体的错误信息
*/
private String errorMessage;
}

View File

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

View File

@ -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<ProjectWorkerInviteResp> page(ListReq req);
/**
* 列表查询
*
* @param req
* @return
*/
default List<ProjectWorkerInviteResp> list(ListReq req) {
PageResp<ProjectWorkerInviteResp> page = page(req);
if (page == null) {
return Collections.emptyList();
}
return CollUtil.emptyIfNull(page.getData());
}
void updateBatchById(List<ProjectWorkerInvite> 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<Long> 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<Long> projectTeamIds;
/**
* 工人ID
*/
@CriteriaField(field = "workerIdentityId", operator = Operator.EQ)
private Long workerIdentityId;
@CriteriaField(field = "workerIdentityId", operator = Operator.IN)
private List<Long> workerIdentityIds;
/**
* 状态1待班组审批  2待劳务审批  3通过 4拒绝
*/
@CriteriaField(field = "status", operator = Operator.EQ)
private Integer status;
@CriteriaField(field = "status", operator = Operator.IN)
private List<Integer> statusList;
/**
* 工作流流程实例id
*/
@CriteriaField(field = "processInstanceId", operator = Operator.EQ)
private String processInstanceId;
@CriteriaField(field = "processInstanceId", operator = Operator.IN)
private List<String> 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;
}
}

View File

@ -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<ProjectWorkerInviteResp> page(ListReq req) {
IPage<ProjectWorkerInvite> page = PageConverter.toMybatis(req, ProjectWorkerInvite.class);
QueryWrapper<ProjectWorkerInvite> wrapper = QueryWrapperHelper.fromBean(req, ProjectWorkerInvite.class);
if (BooleanUtils.isNotTrue(req.getIncludeDeleted())) {
wrapper.eq("is_delete", 0);
}
IPage<ProjectWorkerInviteResp> results = projectWorkerInviteDao.page(page, wrapper)
.convert(e -> BeanUtil.toBean(e, ProjectWorkerInviteResp.class));
PageResp<ProjectWorkerInviteResp> resp = PageConverter.toResp(results);
return resp;
}
@Override
public void updateBatchById(List<ProjectWorkerInvite> invites){
projectWorkerInviteDao.updateBatchById(invites);
}
}

View File

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

View File

@ -57,6 +57,8 @@ public interface OrgProjectWorkerQueryRepository {
@Data
@SuperBuilder
class ListReq extends PageReqV2 {
@CriteriaField(field = "id", operator = Operator.IN)
private List<Long> ids;
/**
* 工作台ID

View File

@ -76,6 +76,19 @@
<artifactId>data-tagger-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- 标签系统依赖 -->
<dependency>
<groupId>cn.axzo.data-tagger</groupId>
<artifactId>data-tagger-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- 工作流依赖 -->
<dependency>
<groupId>cn.axzo.workflow</groupId>
<artifactId>workflow-engine-spring-boot-starter</artifactId>
<version>1.5.2-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@ -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<BpmnProcessInstanceAbortReq> reqs) {
List<BpmnProcessInstanceAbortDTO> abortDTOS = BeanUtil.copyToList(reqs, BpmnProcessInstanceAbortDTO.class);
BatchOperationResultVO resultVO = workflowCoreService.async().batchAbortProcessInstance(abortDTOS);
return BeanUtil.copyProperties(resultVO,BatchOperationResultResp.class);
}
}

View File

@ -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<ProjectWorkerInviteRepository.ProjectWorkerInviteResp> updateBatchById(List<ProjectWorkerInviteCreator> req);
}

View File

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

View File

@ -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<ProjectWorkerInviteRepository.ProjectWorkerInviteResp> updateBatchById(List<ProjectWorkerInviteCreator> req) {
List<ProjectWorkerInvite> projectWorkerInvites = req.stream().map(item -> item.toEntity()).collect(Collectors.toList());
projectWorkerInviteRepository.updateBatchById(projectWorkerInvites);
return BeanUtil.copyToList(projectWorkerInvites, ProjectWorkerInviteRepository.ProjectWorkerInviteResp.class);
}
}

View File

@ -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<Long> 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<NodeUserDTO> nodeUserDTOS){
List<OrgNodeDTO> orgNodeDTOS = listProjectTeam(ouRelation);
if (CollUtil.isEmpty(orgNodeDTOS)) {
return ;
}
List<Long> identityIds = nodeUserDTOS.stream().map(NodeUserDTO::getIdentityId).distinct().collect(Collectors.toList());
List<Long> 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<ProjectWorkerInviteRepository.ProjectWorkerInviteResp> workerInvites = projectWorkerInviteRepository.list(queryBo);
List<Long> inviteIds = workerInvites.stream().map(ProjectWorkerInviteRepository.ProjectWorkerInviteResp::getId).collect(Collectors.toList());
List<String> processInstanceIds = workerInvites.stream().map(ProjectWorkerInviteRepository.ProjectWorkerInviteResp::getProcessInstanceId).filter(StringUtils::hasText).collect(Collectors.toList());
List<ProjectWorkerInviteCreator> 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<Long> 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<BpmnProcessInstanceAbortReq> abortReqs = processInstanceIds.stream().map(processInstanceId -> {
return BpmnProcessInstanceAbortReq.builder()
.processInstanceId(processInstanceId)
.reason("班组长已将工人移除班组")
.build();
}).collect(Collectors.toList());
workflowCoreClient.batchAbortProcessInstance(abortReqs);
}
// 现在工人退出平台班组需先从项目内班组退出
});
}
private List<OrgNodeDTO> listProjectTeam(OrganizationalTeamOuRelation ouRelation){
ListNodeReq listNodeReq = ListNodeReq.builder().platTeamIds(Sets.newHashSet(ouRelation.getTeamOuId())).build();
List<OrgNodeDTO> orgNodeDTOS = nodeService.list(listNodeReq);
if (CollectionUtils.isEmpty(orgNodeDTOS)) {
log.info("忽略平台班组长移除工人操作,平台班组platTeamId=【{}】未加入项目", ouRelation.getTeamOuId());
return Collections.emptyList();
}
return orgNodeDTOS;
}
private void sendMQ(OrganizationalTeamOuRelation ouRelation, List<NodeUserDTO> nodeUserDTOS){
PlatWorkTeamGrantPositionReq build = PlatWorkTeamGrantPositionReq.builder()
.platWorkTeamOuId(ouRelation.getTeamOuId())

View File

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

View File

@ -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<OrgProjectWorkerQueryRepository.OrgProjectWorkerResp> projectWorkerResps = orgProjectWorkerQueryRepository.list(listReq);
if (CollUtil.isEmpty(projectWorkerResps)) {
return;
}
List<OrgProjectWorker> orgProjectWorkers = projectWorkerResps.stream().map(e -> {
OrgProjectWorker orgProjectWorker = BeanUtil.toBean(e, OrgProjectWorker.class);
e.setIsDelete(e.getId());
return orgProjectWorker;
}).collect(Collectors.toList());
orgProjectWorkerUpsertRepository.batchUpdate(orgProjectWorkers);
}
}

View File

@ -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<Long> projectWorkerIds;
}