Merge branch 'master' into feature/REQ-3540

This commit is contained in:
xudawei 2025-04-02 10:40:45 +08:00
commit d7dc42a8f9
5 changed files with 73 additions and 10 deletions

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.enums.VisaConfirmBizTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.BizActivityAssigneeDecisionReq;
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
@ -30,6 +31,7 @@ import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@ -147,7 +149,7 @@ public class ChangeRecordController implements ChangeRecordApi {
@Override
public ApiResult<List<VisaChangeApproveCreateReq.ApprovePersonInfo>> getVisaAllConfirm(FetchVisaAllConfirmReq req) {
return ApiResult.ok(changeRecordConfirmService.listAllConfirmByVisaId(req.getVisaId()));
return ApiResult.ok(changeRecordConfirmService.listAllConfirmByVisaId(req.getVisaId(), Lists.newArrayList(VisaConfirmBizTypeEnum.CONFIRM)));
}
@Override

View File

@ -46,6 +46,8 @@ public class VisaConfirmDto {
*/
private VisaConfirmBizTypeEnum bizType;
private List<VisaConfirmBizTypeEnum> bizTypes;
/**
* 确认人
*/

View File

@ -1,11 +1,14 @@
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
import cn.axzo.framework.jackson.utility.JSON;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.framework.rocketmq.EventProducer;
import cn.axzo.msg.center.api.MessageAPIV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
import cn.axzo.msg.center.service.dto.PersonV3DTO;
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
@ -18,14 +21,17 @@ import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport;
import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload;
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO;
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
import cn.azxo.framework.common.model.CommonResponse;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.groovy.util.Maps;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@ -35,6 +41,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_TOPIC;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_WORKSPACE_NAME;
@ -54,11 +61,13 @@ import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.TECHNOLOGY_APPROVED;
* @author wangli
* @since 2025-01-17 11:35
*/
@Slf4j
@Component
public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler {
protected final ChangeRecordService changeRecordService;
protected final ChangeRecordRelationService changeRecordRelationService;
protected final ChangeRecordBillService changeRecordBillService;
protected final ChangeRecordConfirmService changeRecordConfirmService;
protected final MessageAPIV3 noticeApi;
public final static List<String> SUPPORTED_DEFINITION_KEYS = Lists.newArrayList(
DESIGN_CHANGE.getProcessDefinitionKey(),
@ -72,11 +81,14 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
ChangeRecordService changeRecordService,
ChangeRecordRelationService changeRecordRelationService,
ChangeRecordBillService changeRecordBillService,
MessageAPIV3 noticeApi, RefreshableConfiguration refreshableConfiguration) {
ChangeRecordConfirmService changeRecordConfirmService,
MessageAPIV3 noticeApi,
RefreshableConfiguration refreshableConfiguration) {
super(eventProducer, visaOrganizationalNodeUserGateway);
this.changeRecordService = changeRecordService;
this.changeRecordRelationService = changeRecordRelationService;
this.changeRecordBillService = changeRecordBillService;
this.changeRecordConfirmService = changeRecordConfirmService;
this.noticeApi = noticeApi;
this.refreshableConfiguration = refreshableConfiguration;
}
@ -105,6 +117,10 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
public void onCompleted(ProcessInstanceDTO dto) {
String visaTypeDesc = parseVisaType(dto);
log.info("send complete notice");
sendCompleteNotice(dto);
log.info("send complete notice success");
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.APPROVED);
changeRecordService.lambdaUpdate()
@ -112,15 +128,23 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
.set(ChangeRecord::getStampStatus, VisaStampStatusEnum.UNPRINTED.name())
.update();
}
private void sendCompleteNotice(ProcessInstanceDTO dto) {
Map<String, Object> variables = dto.getVariables();
BpmnTaskDelegateAssigner initiator = dto.getInitiator();
MessageSendReqV3 completeNotice = new MessageSendReqV3();
completeNotice.setSender(PersonV3DTO.builder().build());
completeNotice.setReceivers(Lists.newArrayList(PersonV3DTO.builder().build()));
completeNotice.setReceivers(queryConfirm(dto));
completeNotice.setBizEventMappingCode(refreshableConfiguration.getProcessInstanceCompleteMsgEventCode());
completeNotice.setBizCode(dto.getBusinessKey());
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
completeNotice.setBizExtParams(new JSONObject(Maps.of(
"initiatorName", initiator.getAssignerName(),
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
"visaTypeDesc", VisaTypeDesc,
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
"time", sdf.format(new Date())
)));
@ -129,7 +153,22 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
"ouId", variables.getOrDefault(IM_GROUP_BIZ_INFO_INITIATOR_OU_ID, ""),
"workspaceId", variables.getOrDefault(IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID, "")
)));
noticeApi.send(completeNotice);
CommonResponse<MessageSendRespV3> response = noticeApi.send(completeNotice);
if (Objects.nonNull(response) && response.getCode() == 200) {
log.info("send complete notice result: {}", JSON.toJSONString(response.getData()));
} else {
log.error("send complete notice failed: {}", Objects.isNull(response) ? "response is null" : JSON.toJSONString(response.getMsg()));
}
}
private List<PersonV3DTO> queryConfirm(ProcessInstanceDTO dto) {
Long visaId = Long.valueOf(dto.getBusinessKey());
return changeRecordConfirmService.listAllConfirmByVisaId(visaId, Lists.newArrayList(VisaConfirmBizTypeEnum.CREATE, VisaConfirmBizTypeEnum.CONFIRM))
.stream().map(e -> PersonV3DTO.builder()
.id(e.getPersonId())
.name(e.getRealName())
.imReceiveModel(new PersonV3DTO.ReceiveModel(e.getOuId(), e.getWorkspaceId()))
.build()).collect(Collectors.toList());
}
/**
@ -160,6 +199,10 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
*/
@Override
public void onRejected(ProcessInstanceDTO dto) {
log.info("send reject notice");
sendRejectNotice(dto);
log.info("send reject notice success");
BpmnTaskDelegateAssigner lastOperationAssigner = dto.getLastOperationAssigner();
ChangeRecordLog log = ChangeRecordLog.builder()
.visaId(Long.valueOf(dto.getBusinessKey()))
@ -171,14 +214,23 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
updateChangeRecordApprovalStatus(dto, BpmnProcessInstanceResultEnum.REJECTED);
}
private void sendRejectNotice(ProcessInstanceDTO dto) {
Map<String, Object> variables = dto.getVariables();
BpmnTaskDelegateAssigner initiator = dto.getInitiator();
MessageSendReqV3 rejectNotice = new MessageSendReqV3();
rejectNotice.setSender(PersonV3DTO.builder().build());
rejectNotice.setReceivers(Lists.newArrayList(PersonV3DTO.builder().build()));
rejectNotice.setBizEventMappingCode(refreshableConfiguration.getProcessInstanceCompleteMsgEventCode());
rejectNotice.setReceivers(queryConfirm(dto));
rejectNotice.setBizEventMappingCode(refreshableConfiguration.getProcessInstanceRejectMsgEventCode());
rejectNotice.setBizCode(dto.getBusinessKey());
String visaType = (String) variables.getOrDefault(WORKFLOW_VAR_VISA_TYPE_KEY, "");
String VisaTypeDesc = StringUtils.hasText(visaType) ? VisaTypeEnum.valueOf(visaType).getDesc() : "";
rejectNotice.setBizExtParams(new JSONObject(Maps.of(
"initiatorName", initiator.getAssignerName(),
"topic", variables.getOrDefault(FORM_FIELD_TOPIC, ""),
"visaTypeDesc", VisaTypeDesc,
"workspaceName", variables.getOrDefault(FORM_FIELD_WORKSPACE_NAME, ""),
"reason", dto.getReason()
)));
@ -187,7 +239,13 @@ public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implem
"ouId", variables.getOrDefault(IM_GROUP_BIZ_INFO_INITIATOR_OU_ID, ""),
"workspaceId", variables.getOrDefault(IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID, "")
)));
noticeApi.send(rejectNotice);
CommonResponse<MessageSendRespV3> response = noticeApi.send(rejectNotice);
if (Objects.nonNull(response) && response.getCode() == 200) {
log.info("send reject notice result: {}", JSON.toJSONString(response.getData()));
} else {
log.error("send reject notice failed: {}", Objects.isNull(response) ? "response is null" : JSON.toJSONString(response.getMsg()));
}
}
@Override

View File

@ -76,7 +76,7 @@ public interface ChangeRecordConfirmService {
* @param visaId
* @return
*/
List<VisaChangeApproveCreateReq.ApprovePersonInfo> listAllConfirmByVisaId(Long visaId);
List<VisaChangeApproveCreateReq.ApprovePersonInfo> listAllConfirmByVisaId(Long visaId, List<VisaConfirmBizTypeEnum> bizTypes);
/**
* 构建公司的MaporgIdAndNameMap,key:ouId,value:ouName

View File

@ -418,6 +418,7 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
.in(CollectionUtils.isNotEmpty(dto.getProjectIds()), ChangeRecordConfirm::getProjectId, dto.getProjectIds())
.eq(Objects.nonNull(dto.getType()), ChangeRecordConfirm::getType, dto.getType())
.eq(Objects.nonNull(dto.getBizType()), ChangeRecordConfirm::getBizType, dto.getBizType())
.in(CollectionUtils.isNotEmpty(dto.getBizTypes()), ChangeRecordConfirm::getBizType, dto.getBizTypes())
.in(CollectionUtils.isNotEmpty(dto.getVisaTypes()), ChangeRecordConfirm::getVisaType, dto.getVisaTypes())
.eq(ChangeRecordConfirm::getIsDelete, 0);
}
@ -450,10 +451,10 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
}
@Override
public List<VisaChangeApproveCreateReq.ApprovePersonInfo> listAllConfirmByVisaId(Long visaId) {
public List<VisaChangeApproveCreateReq.ApprovePersonInfo> listAllConfirmByVisaId(Long visaId, List<VisaConfirmBizTypeEnum> bizTypes) {
VisaConfirmDto dto = VisaConfirmDto.builder()
.visaId(visaId)
.bizType(VisaConfirmBizTypeEnum.CONFIRM).build();
.bizTypes(bizTypes).build();
List<ChangeRecordConfirm> list = this.findByCondition(dto);
if (CollectionUtils.isEmpty(list)) {
return Lists.newArrayList();