Merge remote-tracking branch 'origin/feature/REQ-3581' into feature/REQ-3581
This commit is contained in:
commit
77c4404dd4
@ -0,0 +1,29 @@
|
||||
package cn.axzo.nanopart.visa.server.config;
|
||||
|
||||
import cn.hutool.core.thread.NamedThreadFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Configuration
|
||||
@Slf4j
|
||||
public class ExecutorConfig {
|
||||
|
||||
/**
|
||||
* 异步处理线程池 - 不需要等待处理结束
|
||||
* @return
|
||||
*/
|
||||
@Bean("asyncExecutor")
|
||||
public ExecutorService asyncExecutor() {
|
||||
int coreSize = 5;
|
||||
ThreadPoolExecutor executor = new ThreadPoolExecutor(coreSize, 10, 60, TimeUnit.SECONDS,
|
||||
new ArrayBlockingQueue<>(500), new NamedThreadFactory("sync-task-", false), new ThreadPoolExecutor.CallerRunsPolicy());
|
||||
executor.prestartCoreThread();
|
||||
return executor;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,117 @@
|
||||
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
||||
|
||||
import cn.axzo.framework.rocketmq.Event;
|
||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
|
||||
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.response.mq.ProcessInstanceDTO;
|
||||
import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 完成变更签证用印申请
|
||||
* 变更签证下所有用印申请记录都审核通过时,则完成用印
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandler {
|
||||
|
||||
@Autowired
|
||||
private ChangeRecordRelationService changeRecordRelationService;
|
||||
@Autowired
|
||||
private ChangeRecordService changeRecordService;
|
||||
|
||||
@Override
|
||||
public boolean accept(ProcessInstanceDTO dto, Event event, EventConsumer.Context context) {
|
||||
return Objects.equals(dto.getProcessDefinitionKey(), "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreated(ProcessInstanceDTO dto) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStarted(ProcessInstanceDTO dto) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(ProcessInstanceDTO dto) {
|
||||
Long visaId = Long.valueOf(dto.getBusinessKey());
|
||||
Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner())
|
||||
.map(e -> Long.valueOf(e.getPersonId()))
|
||||
.orElse(null);
|
||||
|
||||
VisaRelationDto visaRelationDto = VisaRelationDto.builder()
|
||||
.visaId(visaId)
|
||||
.varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name())
|
||||
.build();
|
||||
List<ChangeRecordRelation> allRecordRelations = changeRecordRelationService.findByCondition(visaRelationDto);
|
||||
|
||||
List<ChangeRecordRelation> changeRecordRelations = allRecordRelations.stream()
|
||||
.filter(e -> Objects.equals(JSON.parseObject(e.getContent()).getString("approvalId"), dto.getProcessInstanceId()))
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(changeRecordRelations)) {
|
||||
log.warn("用印审核完成数据异常,未找到对应的用印申请记录,visaId,{}; processInstanceId,{}", visaId, dto.getProcessInstanceId());
|
||||
return;
|
||||
}
|
||||
|
||||
if (changeRecordRelations.size() > 1) {
|
||||
log.warn("用印审核完成数据异常,找到多条对应的用印申请记录,visaId,{}; processInstanceId,{}", visaId, dto.getProcessInstanceId());
|
||||
}
|
||||
ChangeRecordRelation changeRecordRelation = changeRecordRelations.stream()
|
||||
.findFirst()
|
||||
.get();
|
||||
|
||||
ChangeRecordRelation update = new ChangeRecordRelation();
|
||||
update.setId(changeRecordRelation.getId());
|
||||
update.setContentExt(BpmnProcessInstanceResultEnum.APPROVED.getStatus());
|
||||
update.setUpdateBy(operatorId);
|
||||
changeRecordRelationService.updateById(update);
|
||||
|
||||
boolean approved = allRecordRelations.stream()
|
||||
.filter(e -> Objects.equals(e.getId(), changeRecordRelation.getId()))
|
||||
.allMatch(e -> Objects.equals(BpmnProcessInstanceResultEnum.APPROVED.getStatus(), e.getContentExt()));
|
||||
if (approved) {
|
||||
changeRecordService.update(UpdateVisaChangeReq.builder()
|
||||
.visaId(visaId)
|
||||
.operatorId(operatorId)
|
||||
.visaStampAction(UpdateVisaChangeReq.VisaStampAction.COMPLETE)
|
||||
.scene("用印审批完成,自动完成用印申请")
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled(ProcessInstanceDTO dto) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRejected(ProcessInstanceDTO dto) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAborted(ProcessInstanceDTO dto) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
package cn.axzo.nanopart.visa.server.service;
|
||||
|
||||
import cn.axzo.log.platform.client.model.req.LogAddReq;
|
||||
|
||||
public interface OperateLogService {
|
||||
|
||||
void save(LogAddReq param);
|
||||
}
|
||||
@ -27,6 +27,7 @@ import cn.axzo.im.center.api.vo.req.SendChatMessageRequest;
|
||||
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.log.platform.client.model.req.LogAddReq;
|
||||
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
|
||||
import cn.axzo.maokai.api.vo.request.OrganizationalUnitQuery;
|
||||
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
|
||||
@ -92,6 +93,7 @@ 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.OperateLogService;
|
||||
import cn.axzo.nanopart.visa.server.service.VisaHelper;
|
||||
import cn.axzo.nanopart.visa.server.utils.Constants;
|
||||
import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
|
||||
@ -244,6 +246,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
private RectifyApiGateway rectifyApiGateway;
|
||||
@Resource
|
||||
private ApolloTaskOrderApiGateway taskOrderApiGateway;
|
||||
@Autowired
|
||||
private OperateLogService operateLogService;
|
||||
|
||||
/**
|
||||
* 状态变更
|
||||
@ -1934,6 +1938,17 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
ChangeRecord update = toUpdate(req, oldValue);
|
||||
|
||||
this.updateById(update);
|
||||
|
||||
operateLogService.save(LogAddReq.builder()
|
||||
.scene("UPSERT_CHANGE_RECORD")
|
||||
.level("INFO")
|
||||
.tags(Lists.newArrayList(req.getVisaId().toString()))
|
||||
.message(new JSONObject()
|
||||
.fluentPut("param", req)
|
||||
.fluentPut("oldValue", oldValue)
|
||||
.fluentPut("newValue", this.getById(req.getVisaId()))
|
||||
.toJSONString())
|
||||
.build());
|
||||
}
|
||||
|
||||
public ChangeRecord toUpdate(UpdateVisaChangeReq req, ChangeRecord oldValue) {
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
package cn.axzo.nanopart.visa.server.service.impl;
|
||||
|
||||
import cn.axzo.framework.jackson.utility.JSON;
|
||||
import cn.axzo.log.platform.client.feign.LogApi;
|
||||
import cn.axzo.log.platform.client.model.req.LogAddReq;
|
||||
import cn.axzo.nanopart.visa.server.service.OperateLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class OperateLogServiceImpl implements OperateLogService {
|
||||
|
||||
@Autowired
|
||||
private LogApi logApi;
|
||||
|
||||
@Qualifier("asyncExecutor")
|
||||
@Autowired
|
||||
private ExecutorService asyncExecutor;
|
||||
|
||||
@Override
|
||||
public void save(LogAddReq param) {
|
||||
|
||||
try {
|
||||
// 目前操作日志的记录,不是核心流程,这个方法,不抛出异常,以免影响正常业务流程。
|
||||
// 异步处理
|
||||
asyncExecutor.submit(() -> logApi.addLog(param));
|
||||
} catch (Throwable e) {
|
||||
log.warn("OperateLogServiceImpl save caught exception, msg = {}, param = {}",
|
||||
e.getMessage(), JSON.toJSONString(param), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user