add(feature/REQ-3714) 移除平台工人时,同时终止工人入场申请
This commit is contained in:
parent
a3bce5367e
commit
0f213baf6a
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -57,6 +57,8 @@ public interface OrgProjectWorkerQueryRepository {
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class ListReq extends PageReqV2 {
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private List<Long> ids;
|
||||
|
||||
/**
|
||||
* 工作台ID
|
||||
|
||||
@ -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>
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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())
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user