用责任链设计模式 优化 Task执行器的流程逻辑

pull/57/head
3y 11 months ago
parent d63f4b3959
commit 957b5678d9

@ -1,6 +1,7 @@
package com.java3y.austin.common.domain;
import com.java3y.austin.common.dto.model.ContentModel;
import com.java3y.austin.common.pipeline.ProcessModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -18,7 +19,7 @@ import java.util.Set;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TaskInfo implements Serializable {
public class TaskInfo implements Serializable, ProcessModel {
/**
* Id, , , 使 messageId

@ -7,6 +7,8 @@ import lombok.ToString;
/**
*
* <p>
* com.java3y.austin.web.utils.AnchorStateUtils#getDescriptionByState
*
* @author 3y
*/

@ -1,4 +1,4 @@
package com.java3y.austin.support.pipeline;
package com.java3y.austin.common.pipeline;
/**
*

@ -1,4 +1,4 @@
package com.java3y.austin.support.pipeline;
package com.java3y.austin.common.pipeline;
import com.java3y.austin.common.vo.BasicResultVO;
import lombok.AllArgsConstructor;

@ -1,13 +1,9 @@
package com.java3y.austin.support.pipeline;
package com.java3y.austin.common.pipeline;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.support.exception.ProcessException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
@ -18,7 +14,6 @@ import java.util.Objects;
*
* @author 3y
*/
@Slf4j
@Data
public class ProcessController {
@ -75,7 +70,7 @@ public class ProcessController {
// 业务代码
String businessCode = context.getCode();
if (StrUtil.isBlank(businessCode)) {
if (Objects.isNull(businessCode)) {
context.setResponse(BasicResultVO.fail(RespStatusEnum.BUSINESS_CODE_IS_NULL));
throw new ProcessException(context);
}
@ -89,7 +84,7 @@ public class ProcessController {
// 执行模板列表
List<BusinessProcess> processList = processTemplate.getProcessList();
if (CollUtil.isEmpty(processList)) {
if (Objects.isNull(processList) || processList.size() == 0) {
context.setResponse(BasicResultVO.fail(RespStatusEnum.PROCESS_LIST_IS_NULL));
throw new ProcessException(context);
}

@ -1,7 +1,6 @@
package com.java3y.austin.support.exception;
package com.java3y.austin.common.pipeline;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.support.pipeline.ProcessContext;
import java.util.Objects;

@ -1,4 +1,4 @@
package com.java3y.austin.support.pipeline;
package com.java3y.austin.common.pipeline;
import java.util.List;

@ -1,9 +1,14 @@
package com.java3y.austin.handler.deduplication;
package com.java3y.austin.handler.action;
import cn.hutool.core.collection.CollUtil;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.DeduplicationType;
import com.java3y.austin.common.enums.EnumUtil;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.handler.deduplication.DeduplicationHolder;
import com.java3y.austin.handler.deduplication.DeduplicationParam;
import com.java3y.austin.support.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -11,13 +16,16 @@ import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* @author 3y.
* @date 2021/12/12
*
* 1. NSlideWindowLimitService
* 2. SimpleLimitService
*
* @author 3y
*/
@Service
public class DeduplicationRuleService {
public class DeduplicationAction implements BusinessProcess<TaskInfo> {
public static final String DEDUPLICATION_RULE_KEY = "deduplicationRule";
@ -27,7 +35,10 @@ public class DeduplicationRuleService {
@Autowired
private DeduplicationHolder deduplicationHolder;
public void duplication(TaskInfo taskInfo) {
@Override
public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel();
// 配置样例:{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}
String deduplicationConfig = config.getProperty(DEDUPLICATION_RULE_KEY, CommonConstant.EMPTY_JSON_OBJECT);
@ -39,7 +50,9 @@ public class DeduplicationRuleService {
deduplicationHolder.selectService(deduplicationType).deduplication(deduplicationParam);
}
}
}
if (CollUtil.isEmpty(taskInfo.getReceiver())) {
context.setNeedBreak(true);
}
}
}

@ -1,4 +1,4 @@
package com.java3y.austin.handler.discard;
package com.java3y.austin.handler.action;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@ -6,42 +6,38 @@ import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.domain.AnchorInfo;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.AnchorState;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.support.service.ConfigService;
import com.java3y.austin.support.utils.LogUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
*
* id
*
* @author 3y.
* @author 3y
*/
@Service
public class DiscardMessageService {
public class DiscardAction implements BusinessProcess<TaskInfo> {
private static final String DISCARD_MESSAGE_KEY = "discardMsgIds";
@Autowired
private ConfigService config;
@Autowired
private LogUtils logUtils;
/**
* apollo
*
* @param taskInfo
* @return
*/
public boolean isDiscard(TaskInfo taskInfo) {
@Override
public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel();
// 配置示例: ["1","2"]
JSONArray array = JSON.parseArray(config.getProperty(DISCARD_MESSAGE_KEY, CommonConstant.EMPTY_VALUE_JSON_ARRAY));
if (array.contains(String.valueOf(taskInfo.getMessageTemplateId()))) {
logUtils.print(AnchorInfo.builder().bizId(taskInfo.getBizId()).messageId(taskInfo.getMessageId()).businessId(taskInfo.getBusinessId()).ids(taskInfo.getReceiver()).state(AnchorState.DISCARD.getCode()).build());
return true;
context.setNeedBreak(true);
}
return false;
}
}
}

@ -0,0 +1,40 @@
package com.java3y.austin.handler.action;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Sets;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.handler.handler.HandlerHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
*
* @author 3y
*/
@Service
public class SendMessageAction implements BusinessProcess<TaskInfo> {
@Autowired
private HandlerHolder handlerHolder;
@Override
public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel();
// 微信小程序&服务号只支持单人推送,为了后续逻辑统一处理,于是在这做了单发处理
if (ChannelType.MINI_PROGRAM.getCode().equals(taskInfo.getSendChannel())
|| ChannelType.OFFICIAL_ACCOUNT.getCode().equals(taskInfo.getSendChannel())) {
for (String receiver : taskInfo.getReceiver()) {
TaskInfo taskClone = ObjectUtil.cloneByStream(taskInfo);
taskClone.setReceiver(Sets.newHashSet(receiver));
handlerHolder.route(taskInfo.getSendChannel()).doHandler(taskClone);
}
return;
}
handlerHolder.route(taskInfo.getSendChannel()).doHandler(taskInfo);
}
}

@ -1,4 +1,4 @@
package com.java3y.austin.handler.shield.impl;
package com.java3y.austin.handler.action;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
@ -6,45 +6,51 @@ import com.java3y.austin.common.domain.AnchorInfo;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.AnchorState;
import com.java3y.austin.common.enums.ShieldType;
import com.java3y.austin.handler.shield.ShieldService;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.support.utils.LogUtils;
import com.java3y.austin.support.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashSet;
/**
*
*
* 1.
* 2. 9
* example:austin19
* ( )
*
* @author 3y
*/
@Service
@Slf4j
public class ShieldServiceImpl implements ShieldService {
public class ShieldAction implements BusinessProcess<TaskInfo> {
private static final String NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY = "night_shield_send";
private static final long SECONDS_OF_A_DAY = 86400L;
/**
* 8
*/
private static final int NIGHT = 8;
@Autowired
private RedisUtils redisUtils;
@Autowired
private LogUtils logUtils;
@Override
public void shield(TaskInfo taskInfo) {
public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel();
if (ShieldType.NIGHT_NO_SHIELD.getCode().equals(taskInfo.getShieldType())) {
return;
}
/**
* example:austin19
* ( )
*/
if (isNight()) {
if (LocalDateTime.now().getHour() < NIGHT) {
if (ShieldType.NIGHT_SHIELD.getCode().equals(taskInfo.getShieldType())) {
logUtils.print(AnchorInfo.builder().state(AnchorState.NIGHT_SHIELD.getCode())
.bizId(taskInfo.getBizId()).messageId(taskInfo.getMessageId()).businessId(taskInfo.getBusinessId()).ids(taskInfo.getReceiver()).build());
@ -55,18 +61,8 @@ public class ShieldServiceImpl implements ShieldService {
SECONDS_OF_A_DAY);
logUtils.print(AnchorInfo.builder().state(AnchorState.NIGHT_SHIELD_NEXT_SEND.getCode()).bizId(taskInfo.getBizId()).messageId(taskInfo.getMessageId()).businessId(taskInfo.getBusinessId()).ids(taskInfo.getReceiver()).build());
}
taskInfo.setReceiver(new HashSet<>());
context.setNeedBreak(true);
}
}
/**
* < 8 ()
*
* @return
*/
private boolean isNight() {
return LocalDateTime.now().getHour() < 8;
}
}

@ -1,18 +0,0 @@
package com.java3y.austin.handler.alipay;
import com.alipay.api.AlipayApiException;
import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
/**
* @author jwq
*
*/
public interface AlipayMiniProgramAccountService {
/**
*
*
* @param miniProgramParam
* @throws AlipayApiException alipay
*/
void send(AlipayMiniProgramParam miniProgramParam) throws AlipayApiException;
}

@ -1,69 +0,0 @@
package com.java3y.austin.handler.alipay.impl;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.domain.AlipayOpenAppMiniTemplatemessageSendModel;
import com.alipay.api.request.AlipayOpenAppMiniTemplatemessageSendRequest;
import com.java3y.austin.common.dto.account.AlipayMiniProgramAccount;
import com.java3y.austin.handler.alipay.AlipayMiniProgramAccountService;
import com.java3y.austin.handler.config.AlipayClientSingleton;
import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author jwq
*
*/
@Service
@Slf4j
public class AlipayMiniProgramAccountServiceImpl implements AlipayMiniProgramAccountService {
@Autowired
private AccountUtils accountUtils;
/**
*
*
* @param miniProgramParam
* @throws AlipayApiException alipay
*/
@Override
public void send(AlipayMiniProgramParam miniProgramParam) throws AlipayApiException {
AlipayMiniProgramAccount miniProgramAccount = accountUtils.getAccountById(miniProgramParam.getSendAccount(), AlipayMiniProgramAccount.class);
AlipayClient client = AlipayClientSingleton.getSingleton(miniProgramAccount);
List<AlipayOpenAppMiniTemplatemessageSendRequest> request = assembleReq(miniProgramParam, miniProgramAccount);
for (AlipayOpenAppMiniTemplatemessageSendRequest req : request) {
client.execute(req);
}
}
/**
*
*/
private List<AlipayOpenAppMiniTemplatemessageSendRequest> assembleReq(AlipayMiniProgramParam alipayMiniProgramParam, AlipayMiniProgramAccount alipayMiniProgramAccount) {
Set<String> receiver = alipayMiniProgramParam.getToUserId();
List<AlipayOpenAppMiniTemplatemessageSendRequest> requestList = new ArrayList<>(receiver.size());
for (String toUserId : receiver) {
AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
AlipayOpenAppMiniTemplatemessageSendModel model = new AlipayOpenAppMiniTemplatemessageSendModel();
model.setToUserId(toUserId);
model.setUserTemplateId(alipayMiniProgramAccount.getUserTemplateId());
model.setPage(alipayMiniProgramAccount.getPage());
model.setData(alipayMiniProgramParam.getData().toString());
request.setBizModel(model);
requestList.add(request);
}
return requestList;
}
}

@ -0,0 +1,66 @@
package com.java3y.austin.handler.config;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.pipeline.ProcessTemplate;
import com.java3y.austin.handler.action.DeduplicationAction;
import com.java3y.austin.handler.action.DiscardAction;
import com.java3y.austin.handler.action.SendMessageAction;
import com.java3y.austin.handler.action.ShieldAction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* handlerpipeline
*
* @author 3y
*/
@Configuration
public class TaskPipelineConfig {
public static final String PIPELINE_HANDLER_CODE = "handler";
@Autowired
private DiscardAction discardAction;
@Autowired
private ShieldAction shieldAction;
@Autowired
private DeduplicationAction deduplicationAction;
@Autowired
private SendMessageAction sendMessageAction;
/**
* MQ
* 0.
* 1.
* 2.
* 3.
*
* @return
*/
@Bean("taskTemplate")
public ProcessTemplate taskTemplate() {
ProcessTemplate processTemplate = new ProcessTemplate();
processTemplate.setProcessList(Arrays.asList(discardAction, shieldAction, deduplicationAction, sendMessageAction));
return processTemplate;
}
/**
* pipeline
* BusinessCodeProcessTemplate
*
* @return
*/
@Bean("handlerProcessController")
public ProcessController processController() {
ProcessController processController = new ProcessController();
Map<String, ProcessTemplate> templateConfig = new HashMap<>(4);
templateConfig.put(PIPELINE_HANDLER_CODE, taskTemplate());
processController.setTemplateConfig(templateConfig);
return processController;
}
}

@ -1,19 +1,28 @@
package com.java3y.austin.handler.handler.impl;
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayClient;
import com.alipay.api.domain.AlipayOpenAppMiniTemplatemessageSendModel;
import com.alipay.api.request.AlipayOpenAppMiniTemplatemessageSendRequest;
import com.google.common.base.Throwables;
import com.java3y.austin.common.domain.RecallTaskInfo;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.account.AlipayMiniProgramAccount;
import com.java3y.austin.common.dto.model.AlipayMiniProgramContentModel;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.handler.alipay.AlipayMiniProgramAccountService;
import com.java3y.austin.handler.config.AlipayClientSingleton;
import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.handler.handler.Handler;
import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author jwq
*
@ -23,7 +32,7 @@ import org.springframework.stereotype.Component;
public class AlipayMiniProgramAccountHandler extends BaseHandler implements Handler {
@Autowired
private AlipayMiniProgramAccountService alipayMiniProgramAccountService;
private AccountUtils accountUtils;
public AlipayMiniProgramAccountHandler() {
channelCode = ChannelType.ALIPAY_MINI_PROGRAM.getCode();
@ -33,7 +42,12 @@ public class AlipayMiniProgramAccountHandler extends BaseHandler implements Hand
public boolean handler(TaskInfo taskInfo) {
AlipayMiniProgramParam miniProgramParam = buildMiniProgramParam(taskInfo);
try {
alipayMiniProgramAccountService.send(miniProgramParam);
AlipayMiniProgramAccount miniProgramAccount = accountUtils.getAccountById(miniProgramParam.getSendAccount(), AlipayMiniProgramAccount.class);
AlipayClient client = AlipayClientSingleton.getSingleton(miniProgramAccount);
List<AlipayOpenAppMiniTemplatemessageSendRequest> request = assembleReq(miniProgramParam, miniProgramAccount);
for (AlipayOpenAppMiniTemplatemessageSendRequest req : request) {
client.execute(req);
}
} catch (Exception e) {
log.error("AlipayMiniProgramAccountHandler#handler fail:{},params:{}",
Throwables.getStackTraceAsString(e), JSON.toJSONString(taskInfo));
@ -60,6 +74,25 @@ public class AlipayMiniProgramAccountHandler extends BaseHandler implements Hand
return param;
}
/**
*
*/
private List<AlipayOpenAppMiniTemplatemessageSendRequest> assembleReq(AlipayMiniProgramParam alipayMiniProgramParam, AlipayMiniProgramAccount alipayMiniProgramAccount) {
Set<String> receiver = alipayMiniProgramParam.getToUserId();
List<AlipayOpenAppMiniTemplatemessageSendRequest> requestList = new ArrayList<>(receiver.size());
for (String toUserId : receiver) {
AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
AlipayOpenAppMiniTemplatemessageSendModel model = new AlipayOpenAppMiniTemplatemessageSendModel();
model.setToUserId(toUserId);
model.setUserTemplateId(alipayMiniProgramAccount.getUserTemplateId());
model.setPage(alipayMiniProgramAccount.getPage());
model.setData(alipayMiniProgramParam.getData().toString());
request.setBizModel(model);
requestList.add(request);
}
return requestList;
}
@Override
public void recall(RecallTaskInfo recallTaskInfo) {

@ -1,29 +1,23 @@
package com.java3y.austin.handler.pending;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Sets;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.handler.deduplication.DeduplicationRuleService;
import com.java3y.austin.handler.discard.DiscardMessageService;
import com.java3y.austin.handler.handler.HandlerHolder;
import com.java3y.austin.handler.shield.ShieldService;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.pipeline.ProcessModel;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.handler.config.TaskPipelineConfig;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* Task
* 0.
* 2.
* 2.
* 3.
*
* @author 3y
*/
@ -33,52 +27,17 @@ import org.springframework.stereotype.Component;
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class Task implements Runnable {
@Autowired
private HandlerHolder handlerHolder;
@Autowired
private DeduplicationRuleService deduplicationRuleService;
@Autowired
private DiscardMessageService discardMessageService;
@Autowired
private ShieldService shieldService;
private TaskInfo taskInfo;
@Autowired
@Qualifier("handlerProcessController")
private ProcessController processController;
@Override
public void run() {
// 0. 丢弃消息
if (discardMessageService.isDiscard(taskInfo)) {
return;
}
// 1. 屏蔽消息
shieldService.shield(taskInfo);
// 2.平台通用去重
if (CollUtil.isNotEmpty(taskInfo.getReceiver())) {
deduplicationRuleService.duplication(taskInfo);
}
// 3. 真正发送消息
if (CollUtil.isNotEmpty(taskInfo.getReceiver())) {
// 3.1 微信小程序&服务号只支持单人推送,为了后续逻辑统一处理,于是在这做了打散
if (ChannelType.MINI_PROGRAM.getCode().equals(taskInfo.getSendChannel())
|| ChannelType.OFFICIAL_ACCOUNT.getCode().equals(taskInfo.getSendChannel())) {
for (String receiver : taskInfo.getReceiver()) {
TaskInfo taskClone = ObjectUtil.cloneByStream(this.taskInfo);
taskClone.setReceiver(Sets.newHashSet(receiver));
handlerHolder.route(taskInfo.getSendChannel()).doHandler(taskClone);
}
return;
}
handlerHolder.route(taskInfo.getSendChannel()).doHandler(taskInfo);
}
ProcessContext<ProcessModel> context = ProcessContext.builder()
.processModel(taskInfo).code(TaskPipelineConfig.PIPELINE_HANDLER_CODE)
.needBreak(false).response(BasicResultVO.success())
.build();
processController.process(context);
}
}

@ -1,19 +0,0 @@
package com.java3y.austin.handler.shield;
import com.java3y.austin.common.domain.TaskInfo;
/**
*
*
* @author 3y
*/
public interface ShieldService {
/**
*
*
* @param taskInfo
*/
void shield(TaskInfo taskInfo);
}

@ -4,12 +4,12 @@ import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.domain.RecallTaskInfo;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.impl.domain.RecallTaskModel;
import com.java3y.austin.support.dao.MessageTemplateDao;
import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@ -5,11 +5,11 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.common.base.Throwables;
import com.java3y.austin.common.domain.RecallTaskInfo;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.impl.domain.RecallTaskModel;
import com.java3y.austin.support.mq.SendMqService;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

@ -7,10 +7,10 @@ import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.IdType;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@ -11,13 +11,13 @@ import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.model.ContentModel;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.domain.MessageParam;
import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import com.java3y.austin.support.dao.MessageTemplateDao;
import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import com.java3y.austin.support.utils.ContentHolderUtil;
import com.java3y.austin.support.utils.TaskInfoUtils;
import lombok.extern.slf4j.Slf4j;

@ -7,11 +7,11 @@ import com.google.common.base.Throwables;
import com.java3y.austin.common.domain.SimpleTaskInfo;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import com.java3y.austin.support.mq.SendMqService;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.domain.MessageParam;
import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@ -1,6 +1,8 @@
package com.java3y.austin.service.api.impl.config;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.pipeline.ProcessTemplate;
import com.java3y.austin.service.api.enums.BusinessCode;
import com.java3y.austin.service.api.impl.action.recall.RecallAssembleAction;
import com.java3y.austin.service.api.impl.action.recall.RecallMqAction;
@ -8,8 +10,6 @@ import com.java3y.austin.service.api.impl.action.send.SendAfterCheckAction;
import com.java3y.austin.service.api.impl.action.send.SendAssembleAction;
import com.java3y.austin.service.api.impl.action.send.SendMqAction;
import com.java3y.austin.service.api.impl.action.send.SendPreCheckAction;
import com.java3y.austin.support.pipeline.ProcessController;
import com.java3y.austin.support.pipeline.ProcessTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -78,8 +78,8 @@ public class PipelineConfig {
*
* @return
*/
@Bean
public ProcessController processController() {
@Bean("apiProcessController")
public ProcessController apiProcessController() {
ProcessController processController = new ProcessController();
Map<String, ProcessTemplate> templateConfig = new HashMap<>(4);
templateConfig.put(BusinessCode.COMMON_SEND.getCode(), commonSendTemplate());

@ -1,7 +1,7 @@
package com.java3y.austin.service.api.impl.domain;
import com.java3y.austin.common.domain.RecallTaskInfo;
import com.java3y.austin.support.pipeline.ProcessModel;
import com.java3y.austin.common.pipeline.ProcessModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

@ -1,8 +1,8 @@
package com.java3y.austin.service.api.impl.domain;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.pipeline.ProcessModel;
import com.java3y.austin.service.api.domain.MessageParam;
import com.java3y.austin.support.pipeline.ProcessModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

@ -1,15 +1,16 @@
package com.java3y.austin.service.api.impl.service;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.domain.SendRequest;
import com.java3y.austin.service.api.domain.SendResponse;
import com.java3y.austin.service.api.impl.domain.RecallTaskModel;
import com.java3y.austin.service.api.service.RecallService;
import com.java3y.austin.support.pipeline.ProcessContext;
import com.java3y.austin.support.pipeline.ProcessController;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@ -20,22 +21,19 @@ import org.springframework.stereotype.Service;
*/
@Service
public class RecallServiceImpl implements RecallService {
@Autowired
@Qualifier("apiProcessController")
private ProcessController processController;
@Override
public SendResponse recall(SendRequest sendRequest) {
if (ObjectUtils.isEmpty(sendRequest)) {
return new SendResponse(RespStatusEnum.CLIENT_BAD_PARAMETERS.getCode(), RespStatusEnum.CLIENT_BAD_PARAMETERS.getMsg(), null);
}
RecallTaskModel recallTaskModel = RecallTaskModel.builder().messageTemplateId(sendRequest.getMessageTemplateId())
.recallMessageId(sendRequest.getRecallMessageIds()).build();
ProcessContext context = ProcessContext.builder()
.code(sendRequest.getCode())
.processModel(recallTaskModel)
.needBreak(false)
.response(BasicResultVO.success()).build();
RecallTaskModel recallTaskModel = RecallTaskModel.builder().messageTemplateId(sendRequest.getMessageTemplateId()).recallMessageId(sendRequest.getRecallMessageIds()).build();
ProcessContext context = ProcessContext.builder().code(sendRequest.getCode()).processModel(recallTaskModel).needBreak(false).response(BasicResultVO.success()).build();
ProcessContext process = processController.process(context);
return new SendResponse(process.getResponse().getStatus(), process.getResponse().getMsg(), null);
}

@ -3,16 +3,17 @@ package com.java3y.austin.service.api.impl.service;
import cn.monitor4all.logRecord.annotation.OperationLog;
import com.java3y.austin.common.domain.SimpleTaskInfo;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.ProcessContext;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.domain.BatchSendRequest;
import com.java3y.austin.service.api.domain.SendRequest;
import com.java3y.austin.service.api.domain.SendResponse;
import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import com.java3y.austin.service.api.service.SendService;
import com.java3y.austin.support.pipeline.ProcessContext;
import com.java3y.austin.support.pipeline.ProcessController;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.Collections;
@ -27,6 +28,7 @@ import java.util.List;
public class SendServiceImpl implements SendService {
@Autowired
@Qualifier("apiProcessController")
private ProcessController processController;
@Override

@ -1,8 +1,8 @@
package com.java3y.austin.service.api.impl.service;
import com.java3y.austin.support.pipeline.BusinessProcess;
import com.java3y.austin.support.pipeline.ProcessController;
import com.java3y.austin.support.pipeline.ProcessTemplate;
import com.java3y.austin.common.pipeline.BusinessProcess;
import com.java3y.austin.common.pipeline.ProcessController;
import com.java3y.austin.common.pipeline.ProcessTemplate;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;

Loading…
Cancel
Save