Merge remote-tracking branch 'origin/feature/REQ-3300' into feature/REQ-3300
This commit is contained in:
commit
3aa67ead16
@ -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);
|
||||
}
|
||||
|
||||
@ -17,6 +17,10 @@ public interface VisaConstant {
|
||||
* 用于发送待办的变量名
|
||||
*/
|
||||
String WORKFLOW_PENDING_TOPIC = "theme";
|
||||
/**
|
||||
* IM 群的扩展信息
|
||||
*/
|
||||
String IM_GROUP_BIZ_INFO_RECORD_ID = "visaId";
|
||||
// **************** 业务传入审批的表单项组件的唯一的 KEY *****************
|
||||
// 单号
|
||||
String FORM_FIELD_NO = "no";
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -34,7 +34,7 @@ public class ImGroupTipsQueryReq {
|
||||
* 当前登录人是否是群主
|
||||
*/
|
||||
@NotNull(message = "群主标识不能为空")
|
||||
private Boolean groupOwner;
|
||||
private Boolean isGroupOwner;
|
||||
|
||||
/**
|
||||
* 当前群成员总数, 包含群主
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -164,7 +164,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
.varName(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE.getCode())
|
||||
.build());
|
||||
List<ImGroupButton> buttons = new ArrayList<>();
|
||||
if (Boolean.TRUE.equals(req.getGroupOwner())) {
|
||||
if (Boolean.TRUE.equals(req.getIsGroupOwner())) {
|
||||
Map<String, Long> countMap = imGroupParticipate.stream()
|
||||
.collect(Collectors.groupingBy(ChangeRecordRelation::getVarExt, Collectors.counting()));
|
||||
Long agreeCount = countMap.getOrDefault(VisaButtonTypeEnum.AGREE.getCode(), 0L);
|
||||
|
||||
@ -12,11 +12,33 @@ import cn.axzo.basics.report.api.ReportServiceSDK;
|
||||
import cn.axzo.basics.report.api.sheet.SheetWrapper;
|
||||
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;
|
||||
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaChangeFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||
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;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||
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 cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
|
||||
@ -36,31 +58,15 @@ import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.ProjectApiGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||
import cn.axzo.thor.client.model.DrawingMajorResp;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaChangeFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
|
||||
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.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaInitiatorListReq;
|
||||
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 cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||
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;
|
||||
@ -76,6 +82,7 @@ import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.groovy.util.Maps;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -107,6 +114,7 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATIO
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_TASK_ORDER;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_VISA_ORDER;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_TOPIC;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_RECORD_ID;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_PENDING_TOPIC;
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
|
||||
|
||||
@ -149,6 +157,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
private ReportServiceSDK reportServiceSDK;
|
||||
@Resource
|
||||
private WorkflowGateway workflowGateway;
|
||||
@Resource
|
||||
private MsgCenterGateway msgCenterGateway;
|
||||
|
||||
/**
|
||||
* 相关单位确认人人数限制
|
||||
@ -170,8 +180,6 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
|
||||
@Resource
|
||||
private WorkspaceGateway workspaceGateway;
|
||||
@Resource
|
||||
private MsgCenterGateway msgCenterGateway;
|
||||
|
||||
@Resource
|
||||
private VisaHelper visaHelper;
|
||||
@ -476,6 +484,32 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
Long visaId = tempCreateVisaChangeRecord(req);
|
||||
/*创建群聊*/
|
||||
GroupCreateRequest request = new GroupCreateRequest();
|
||||
request.setGroupType(GroupType.VISA);
|
||||
request.setBizCode(String.valueOf(visaId));
|
||||
request.setName(req.getTopic());
|
||||
// 群主
|
||||
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()
|
||||
.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));
|
||||
GroupCreateResponse imGroup = msgCenterGateway.createImGroup(request);
|
||||
|
||||
updateImInfo(visaId, imGroup);
|
||||
@ -494,6 +528,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
ChangeRecord changeRecord = new ChangeRecord();
|
||||
changeRecord.setId(visaId);
|
||||
changeRecord.setImGroupId(imGroup.getTid());
|
||||
updateById(changeRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -568,7 +603,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
updateApprovalInfo(visaId, processInstanceId);
|
||||
|
||||
// 更新主表状态
|
||||
changeStatus(ChangeStatusRequest.builder()
|
||||
changeStatus(ChangeStatusRequest.builder()
|
||||
.visaId(visaId)
|
||||
.updateStatus(VisaStatusEnum.APPROVING)
|
||||
.personId(req.getOperatorPersonId())
|
||||
@ -936,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user