feat(REQ-3300) - 增加变洽签废止功能

This commit is contained in:
wangli 2025-02-06 10:11:06 +08:00
parent 984af6df3e
commit ac46449b80
6 changed files with 126 additions and 7 deletions

View File

@ -2,6 +2,7 @@ package cn.axzo.nanopart.visa.api.changerecord;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -10,10 +11,10 @@ import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaDetailByIdRequest;
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
import cn.axzo.nanopart.visa.api.request.VisaRecordSelectReq;
import cn.axzo.nanopart.visa.api.response.VisaChangeInitiatorResp;
import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -104,4 +105,12 @@ public interface ChangeRecordApi {
*/
@PostMapping("/api/visa/change/initiator/list")
ApiResult<List<VisaChangeInitiatorResp>> listInitiator(@RequestBody @Validated VisaInitiatorListReq req);
/**
* 变洽签废止
*
* @return
*/
@PostMapping("/api/visa/change/record/forbid")
ApiResult<Void> forbidChangeRecord(@Validated @RequestBody ChangeRecordForbidReq req);
}

View File

@ -0,0 +1,45 @@
package cn.axzo.nanopart.visa.api.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* 变洽签废止
*
* @author wangli
* @since 2025-02-05 20:26
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ChangeRecordForbidReq {
/**
* 变洽签主键 ID
*/
@NotNull(message = "变洽签 ID 不能为空")
private Long visaId;
/**
* 操作人 personId
*/
@NotNull(message = "操作人 personId 不能为空")
private Long operatorPersonId;
/**
* 操作人 ouId
*/
@NotNull(message = "操作人 ouId 不能为空")
private Long operatorOuId;
/**
* 操作人 workspaceId
*/
@NotNull(message = "操作人 workspaceId 不能为空")
private Long operatorWorkspaceId;
}

View File

@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordApi;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -97,4 +98,10 @@ public class ChangeRecordController implements ChangeRecordApi {
public ApiResult<List<VisaChangeInitiatorResp>> listInitiator(VisaInitiatorListReq req) {
return ApiResult.ok(changeRecordService.listInitiator(req));
}
@Override
public ApiResult<Void> forbidChangeRecord(ChangeRecordForbidReq req) {
changeRecordService.forbid(req);
return ApiResult.ok();
}
}

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.visa.server.rpc;
import cn.axzo.pokonyan.util.RpcUtil;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.starter.api.WorkflowCoreService;
@ -28,6 +29,11 @@ public class WorkflowGateway {
return workflowCoreService.createProcessInstance(dto);
}
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "中止流程实例")
public void processInstanceAbort(BpmnProcessInstanceAbortDTO dto) {
workflowCoreService.abortProcessInstance(dto);
}
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "查询某个人是否是指定流程的审批人")
public Boolean checkInstanceApprover(BpmnProcessInstanceCheckApproverDTO dto) {
try {

View File

@ -2,6 +2,7 @@ package cn.axzo.nanopart.visa.server.service;
import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -95,4 +96,11 @@ public interface ChangeRecordService {
* @param req 筛查条件和导出字段
*/
void export(VisaChangeExportReq req);
/**
* 变洽签单据废止并解散 IM 群聊中止审批
*
* @param req
*/
void forbid(ChangeRecordForbidReq req);
}

View File

@ -14,7 +14,9 @@ import cn.axzo.framework.domain.ServiceException;
import cn.axzo.framework.domain.web.result.PageData;
import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.GroupCreateRequest;
import cn.axzo.im.center.api.vo.req.GroupDismissRequest;
import cn.axzo.im.center.api.vo.resp.GroupCreateResponse;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.GroupType;
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
@ -26,6 +28,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
@ -63,6 +66,7 @@ import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import cn.axzo.nanopart.visa.server.service.VisaHelper;
import cn.axzo.thor.client.model.DrawingMajorResp;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.hutool.core.bean.BeanUtil;
@ -153,6 +157,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
private ReportServiceSDK reportServiceSDK;
@Resource
private WorkflowGateway workflowGateway;
@Resource
private MsgCenterGateway msgCenterGateway;
/**
* 相关单位确认人人数限制
@ -174,8 +180,6 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
@Resource
private WorkspaceGateway workspaceGateway;
@Resource
private MsgCenterGateway msgCenterGateway;
@Resource
private VisaHelper visaHelper;
@ -483,15 +487,26 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
request.setGroupType(GroupType.VISA);
request.setBizCode(String.valueOf(visaId));
request.setName(req.getTopic());
// TODO
request.setOwner(PersonAccountAttribute.builder().build());
// 群主
request.setOwner(PersonAccountAttribute.builder()
.personId(String.valueOf(req.getOperatorPersonId()))
.ouId(req.getOperatorOuId())
.workspaceId(req.getRelationWorkspaceId())
.appType(AppTypeEnum.CMP)
.build());
// 群成员
if (CollectionUtils.isNotEmpty(req.getDiscussPersonInfoList())) {
request.setMembers(req.getDiscussPersonInfoList().stream()
.filter(i -> !i.getIsAdmin())
.map(i -> PersonAccountAttribute.builder()
// TODO
.personId(String.valueOf(i.getPersonId()))
.ouId(i.getUnitId())
.workspaceId(i.getWorkspaceId())
.appType(AppTypeEnum.CMP)
.build())
.collect(Collectors.toSet()));
}
// 群头像
request.setAvatar("");
request.setMemberLimit(100L);
request.setBizGroupInfo(Maps.of(IM_GROUP_BIZ_INFO_RECORD_ID, visaId));
@ -956,5 +971,34 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
.eq(ChangeRecord::getId, visaId).one();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void forbid(ChangeRecordForbidReq req) {
ChangeRecord record = getById(req.getVisaId());
ChangeStatusRequest changeStatusRequest = new ChangeStatusRequest();
changeStatusRequest.setVisaId(req.getVisaId());
changeStatusRequest.setUpdateStatus(VisaStatusEnum.FORBIDED);
changeStatusRequest.setPersonId(req.getOperatorPersonId());
changeStatusRequest.setOuId(req.getOperatorOuId());
changeStatusRequest.setWorkspaceId(req.getOperatorWorkspaceId());
changeStatus(changeStatusRequest);
if (Objects.nonNull(record.getImGroupId())) {
GroupDismissRequest request = new GroupDismissRequest();
req.setVisaId(req.getVisaId());
// 解散 IM 群聊
msgCenterGateway.dismissImGroup(request);
}
if (StringUtils.hasText(record.getApprovalId())) {
BpmnProcessInstanceAbortDTO abort = new BpmnProcessInstanceAbortDTO();
abort.setProcessInstanceId(record.getApprovalId());
// TODO 中止审批的原因
abort.setReason("");
abort.setAssigner(BpmnTaskDelegateAssigner.builder()
.personId(String.valueOf(req.getOperatorPersonId()))
.ouId(String.valueOf(req.getOperatorOuId()))
.tenantId(String.valueOf(req.getOperatorWorkspaceId()))
.build());
workflowGateway.processInstanceAbort(abort);
}
}
}