mirror of https://github.com/ZhongFuCheng3y/austin
parent
eb7ed0d148
commit
7c1feb607d
@ -1,40 +1,23 @@
|
||||
package com.java3y.austin.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* 发送的消息类型
|
||||
*/
|
||||
@Getter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
public enum MessageType {
|
||||
NOTICE(10,"通知类消息"),
|
||||
MARKETING(20,"营销类消息"),
|
||||
AUTH_CODE(30,"验证码消息")
|
||||
;
|
||||
|
||||
/**
|
||||
* `msg_type` tinyint(4)
|
||||
* NOT NULL DEFAULT '0' COMMENT '10.通知类消息 20.营销类消息 30.验证码类消息',
|
||||
*/
|
||||
|
||||
private Integer code;
|
||||
private String description;
|
||||
|
||||
MessageType(Integer code, String description) {
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public Integer getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(Integer code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.java3y.austin.pojo.vo;
|
||||
package com.java3y.austin.vo;
|
||||
|
||||
import com.java3y.austin.constant.RespStatusEnum;
|
||||
import lombok.AllArgsConstructor;
|
@ -0,0 +1,17 @@
|
||||
package com.java3y.austin.action;
|
||||
|
||||
import com.java3y.austin.pipeline.BusinessProcess;
|
||||
import com.java3y.austin.pipeline.ProcessContext;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
* @description 拼装参数
|
||||
*/
|
||||
public class AssembleAction implements BusinessProcess {
|
||||
|
||||
@Override
|
||||
public void process(ProcessContext context) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.java3y.austin.action;
|
||||
|
||||
import com.java3y.austin.domain.SendTaskModel;
|
||||
import com.java3y.austin.pipeline.BusinessProcess;
|
||||
import com.java3y.austin.pipeline.ProcessContext;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
* @description 参数校验
|
||||
*/
|
||||
public class ParamAction implements BusinessProcess {
|
||||
@Override
|
||||
public void process(ProcessContext context) {
|
||||
SendTaskModel sendTaskModel = (SendTaskModel) context.getProcessModel();
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.java3y.austin.domain;
|
||||
|
||||
import com.java3y.austin.pipeline.ProcessModel;
|
||||
import com.java3y.austin.pojo.TaskInfo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
* @description 发送消息任务模型
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class SendTaskModel implements ProcessModel {
|
||||
|
||||
|
||||
/**
|
||||
* 请求类型 10:single 20:batch
|
||||
*/
|
||||
private int requestType;
|
||||
|
||||
/**
|
||||
* 请求参数 single 接口
|
||||
*/
|
||||
private MessageParam messageParam;
|
||||
|
||||
/**
|
||||
* 请求参数 batch 接口
|
||||
*/
|
||||
private List<MessageParam> messageParamList;
|
||||
|
||||
|
||||
/**
|
||||
* 发送任务信息
|
||||
*/
|
||||
private TaskInfo taskInfo;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.java3y.austin.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
* 请求类型
|
||||
*/
|
||||
@Getter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
public enum RequestType {
|
||||
|
||||
|
||||
SINGLE(10, "请求接口为 single 类型"),
|
||||
|
||||
BATCH(20, "请求接口为 batch 类型");
|
||||
|
||||
/**
|
||||
* code
|
||||
*/
|
||||
private Integer code;
|
||||
|
||||
/**
|
||||
* 类型说明
|
||||
*/
|
||||
private String description;
|
||||
}
|
@ -1,20 +1,61 @@
|
||||
package com.java3y.austin.service;
|
||||
|
||||
import com.java3y.austin.domain.BatchSendRequest;
|
||||
import com.java3y.austin.domain.SendRequest;
|
||||
import com.java3y.austin.domain.SendResponse;
|
||||
import com.java3y.austin.domain.SendTaskModel;
|
||||
import com.java3y.austin.enums.RequestType;
|
||||
import com.java3y.austin.pipeline.ProcessContext;
|
||||
import com.java3y.austin.pipeline.ProcessController;
|
||||
import com.java3y.austin.pojo.TaskInfo;
|
||||
import com.java3y.austin.vo.BasicResultVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 发送接口
|
||||
* @author 3y
|
||||
*/
|
||||
@Service
|
||||
public class SendServiceImpl implements SendService {
|
||||
|
||||
@Autowired
|
||||
private ProcessController processController;
|
||||
|
||||
@Override
|
||||
public SendResponse send(SendRequest sendRequest) {
|
||||
return null;
|
||||
|
||||
SendTaskModel sendTaskModel = SendTaskModel.builder()
|
||||
.requestType(RequestType.SINGLE.getCode())
|
||||
.messageParam(sendRequest.getMessageParam())
|
||||
.taskInfo(TaskInfo.builder().messageTemplateId(sendRequest.getMessageTemplateId()).build())
|
||||
.build();
|
||||
|
||||
ProcessContext context = ProcessContext.builder()
|
||||
.code(sendRequest.getCode())
|
||||
.processModel(sendTaskModel).build();
|
||||
|
||||
ProcessContext process = processController.process(context);
|
||||
|
||||
return new SendResponse(process.getResponse().getCode(), process.getResponse().getMsg());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SendResponse batchSend(SendRequest sendRequest) {
|
||||
return null;
|
||||
public SendResponse batchSend(BatchSendRequest batchSendRequest) {
|
||||
SendTaskModel sendTaskModel = SendTaskModel.builder()
|
||||
.requestType(RequestType.BATCH.getCode())
|
||||
.messageParamList(batchSendRequest.getMessageParamList())
|
||||
.taskInfo(TaskInfo.builder().messageTemplateId(batchSendRequest.getMessageTemplateId()).build())
|
||||
.build();
|
||||
|
||||
ProcessContext context = ProcessContext.builder()
|
||||
.code(batchSendRequest.getCode())
|
||||
.processModel(sendTaskModel).build();
|
||||
|
||||
ProcessContext process = processController.process(context);
|
||||
|
||||
return new SendResponse(process.getResponse().getCode(), process.getResponse().getMsg());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package com.java3y.austin.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 发送接口的参数
|
||||
* batch
|
||||
*
|
||||
* @author 3y
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class BatchSendRequest {
|
||||
|
||||
|
||||
/**
|
||||
* 执行业务类型
|
||||
*/
|
||||
private String code;
|
||||
|
||||
|
||||
/**
|
||||
* 消息模板Id
|
||||
*/
|
||||
private Long messageTemplateId;
|
||||
|
||||
|
||||
/**
|
||||
* 消息相关的参数
|
||||
*/
|
||||
private List<MessageParam> messageParamList;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.java3y.austin.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消息参数
|
||||
* single
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class MessageParam {
|
||||
|
||||
/**
|
||||
* @Description: 接收者
|
||||
* 多个用,逗号号分隔开
|
||||
*/
|
||||
private String receiver;
|
||||
|
||||
/**
|
||||
* @Description: 消息内容中的可变部分
|
||||
*/
|
||||
private Map<String, String> variables;
|
||||
|
||||
/**
|
||||
* @Description: 扩展参数
|
||||
*/
|
||||
private Map<String,String> extra;
|
||||
}
|
@ -1,4 +1,26 @@
|
||||
package com.java3y.austin.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
|
||||
/**
|
||||
* 发送接口返回值
|
||||
* @author 3y
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@AllArgsConstructor
|
||||
public class SendResponse {
|
||||
/**
|
||||
* 响应状态
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 响应编码
|
||||
*/
|
||||
private String msg;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
package com.java3y.austin.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
*/
|
||||
@Getter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
public enum BusinessCode {
|
||||
|
||||
COMMON_SEND("send", "普通发送"),
|
||||
|
||||
RECALL_SEND("recall", "撤回消息");
|
||||
|
||||
|
||||
/** code 关联着责任链的模板 */
|
||||
private String code;
|
||||
|
||||
/** 类型说明 */
|
||||
private String description;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.java3y.austin.pipeline;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.java3y.austin.constant.RespStatusEnum;
|
||||
import com.java3y.austin.vo.BasicResultVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 流程控制器
|
||||
*
|
||||
* @author 3y
|
||||
*/
|
||||
@Slf4j
|
||||
public class ProcessController {
|
||||
|
||||
/**
|
||||
* 模板映射
|
||||
*/
|
||||
private Map<String, ProcessTemplate> templateConfig = null;
|
||||
|
||||
|
||||
/**
|
||||
* 执行责任链
|
||||
*
|
||||
* @param context
|
||||
* @return 返回上下文内容
|
||||
*/
|
||||
public ProcessContext process(ProcessContext context) {
|
||||
|
||||
// 上下文
|
||||
if (context == null) {
|
||||
context.setResponse(BasicResultVO.fail(RespStatusEnum.CONTEXT_IS_NULL));
|
||||
return context;
|
||||
}
|
||||
|
||||
//业务代码
|
||||
String businessCode = context.getCode();
|
||||
if (StrUtil.isBlank(businessCode)) {
|
||||
context.setResponse(BasicResultVO.fail(RespStatusEnum.BUSINESS_CODE_IS_NULL));
|
||||
return context;
|
||||
}
|
||||
|
||||
// 执行模板
|
||||
ProcessTemplate processTemplate = templateConfig.get(businessCode);
|
||||
if (processTemplate == null) {
|
||||
context.setResponse(BasicResultVO.fail(RespStatusEnum.PROCESS_TEMPLATE_IS_NULL));
|
||||
return context;
|
||||
}
|
||||
|
||||
// 执行模板列表
|
||||
List<BusinessProcess> processList = processTemplate.getProcessList();
|
||||
if (CollUtil.isEmpty(processList)) {
|
||||
context.setResponse(BasicResultVO.fail(RespStatusEnum.PROCESS_LIST_IS_NULL));
|
||||
return context;
|
||||
}
|
||||
|
||||
//遍历某个流程节点,出现异常往外抛
|
||||
for (BusinessProcess businessProcess : processList) {
|
||||
businessProcess.process(context);
|
||||
if (context.getNeedBreak()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
public Map<String, ProcessTemplate> getTemplateConfig() {
|
||||
return templateConfig;
|
||||
}
|
||||
|
||||
public void setTemplateConfig(Map<String, ProcessTemplate> templateConfig) {
|
||||
this.templateConfig = templateConfig;
|
||||
}
|
||||
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
package com.java3y.austin.pipeline;
|
||||
|
||||
|
||||
import com.java3y.austin.vo.BasicResultVO;
|
||||
|
||||
/**
|
||||
* 真正存储着责任链的数据
|
||||
* @author 3y
|
||||
*/
|
||||
public class ProcessModel {
|
||||
public interface ProcessModel {
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.java3y.austin.pipeline;
|
||||
|
||||
import lombok.Builder;
|
||||
|
||||
/**
|
||||
* @author 3y
|
||||
* @date 2021/11/22
|
||||
* @cription 流程处理的结果
|
||||
*/
|
||||
@Builder
|
||||
public class ProcessResponse {
|
||||
|
||||
/** 返回值编码 */
|
||||
private final String code;
|
||||
|
||||
/** 返回值描述 */
|
||||
private final String description;
|
||||
|
||||
}
|
Loading…
Reference in new issue