跳至主要內容

接口管理

2023年4月18日大约 3 分钟功能介绍功能介绍开发运营系统接口管理

接口管理、接口日志、消息模板、消息管理、我的消息的表结构关系如下:

E-R图
E-R图

消息发送接口调用逻辑:

UML图
UML图

菜单介绍

接口管理

用于定义消息通过什么接口发送,消息包括但不限于:站内信、邮件、短信。接口管理的每条数据,对应UML图中的一个实现类。

「灯灯」已封装的接口:

  1. 邮件接口
    • 邮件(任意厂商的邮件)
  2. 短信接口
    • 腾讯云短信
    • 阿里云短信
    • 百度云短信
    • 创蓝短信
  3. 站内信接口
    • 站内消息

若上述接口不能满足贵司的开发需求,可以先在接口管理页面新增一条接口数据,并在代码中编写接口代码。

接口日志

记录接口的发送情况。如:成功执行次数、失败执行次数、消息发送明细。

消息模板

全局消息模板,调用消息发送接口发送消息时,需要提前在此配置消息模板,方可发送消息。

消息模板依赖于接口管理,意思是在定义消息模板时,就必须确定该模板需要通过什么接口进行发送,若一个业务需要同时发送短信、邮件、站内信通知,则需要配置3个模板,并绑定3个接口

个性消息模板

租户自己的消息模板,当全局消息模板的内容不满足住户的需求时,可以在此修改个性消息模板。租户修改个性消息模板后,并不会影响其他租户的消息模板。

字段说明

  1. 接口编码

    唯一标识符

  2. 执行方式

    • 实现类:配置可以通过SpringUtils.getBean(implClass, MsgStrategy.class);方法获取的Java类,实现类必须实现MsgStrategy接口

    • 脚本:在线编写groovy脚本,脚本也必须实现MsgStrategy接口。

  3. 实现类

    当执行方式选择实现类时,需要填写该字段。程序通过SpringUtils.getBean方法获取实例。

    MsgResult result;
    if (InterfaceExecModeEnum.IMPL_CLASS.eq(defInterface.getExecMode())) {
        // 实现类
        String implClass = defInterface.getImplClass();
        MsgStrategy msgStrategy = SpringUtils.getBean(implClass, MsgStrategy.class);
        ArgumentAssert.notNull(msgStrategy, "实现类[{}]不存在", implClass);
        result = msgStrategy.exec(msgParam);
    }
    




     



  4. 实现脚本

    在groovy脚本中,依然可以使用@Resouce@Autowired注解来注入服务中的其他被Spring加载的Bean

    MsgResult result;
    if (InterfaceExecModeEnum.IMPL_CLASS.eq(defInterface.getExecMode())) {
    
    } else {
        /*
         * 注意: 脚本中,不支持lombok注解
         */
        MsgStrategy msgStrategy = GlueFactory.getInstance().loadNewInstance(defInterface.getScript());
        ArgumentAssert.notNull(msgStrategy, "实现类不存在");
        result = msgStrategy.exec(msgParam);
    }
    

功能介绍

接口管理是提供给开发者使用的,在新增一个接口时,需要提前编码实现MsgStrategy类,然后在此新增数据。

  1. 新增

    新增一个消息发送接口。若“执行方式”字段选择“实现类”,“实现类”字段应该填写@Service的value值。

    提示

    消息模板想要正常使用该接口,必须在实现类或脚本中实现具体的发送逻辑。

  2. 修改

  3. 删除

  4. 接口设置

    接口设置就是方便配置不同的实现类在调用第三方接口进行发送时需要的一些动态参数。

    不同接口的实现类在执行具体发送消息逻辑时,需要的参数数量、参数名称、参数值各不相同。如:实现类在调用腾讯云短信SDK发送短信时需要传递给腾讯云的参数名称、参数数量跟阿里云短信SDK发送短信时需要传递给阿里云的参数数量和名称完全不一样,在此页面可以满足任意第三方的接口参数。

    同时,若你选择使用【实现类】来编写接口逻辑,建议定义一个接口属性类,用来接收和校验配置的接口参数。

    @Data
    public class BaiduSmsProperty extends BaseProperty {
        private final static String DEF_END_POINT = "http://smsv3.bj.baidubce.com";
        /**
         * accessKeyId
         */
        private String accessKeyId;
        /**
         * secretKey
         */
        private String secretKey;
        /**
         * 域名
         */
        private String endPoint;
    
      	// 校验参数是否合法
        @Override
        public boolean initAndValid() {
            super.initAndValid();
            if (StrUtil.isEmpty(endPoint)) {
                endPoint = DEF_END_POINT;
            }
            ArgumentAssert.notEmpty(accessKeyId, "accessKeyId 不能为空");
            ArgumentAssert.notEmpty(secretKey, "secretKey 不能为空");
            return true;
        }
    }
    

    提示

    为了方便开发、测试环境测试时乱发消息给用户,特意在系统接口参数中定义了一个固定参数:debug,用来让实现类判断是否在开发、测试等环境,若debug为true,一般情况下,不会执行第三方的发送逻辑。如:

    @Override
    public MsgResult exec(MsgParam msgParam) throws Exception {
        // 代码省略...
    
        AliSmsProperty property = new AliSmsProperty();
        BeanUtil.fillBeanWithMap(propertyParams, property, true);
        property.initAndValid();
        if (property.getDebug()) {
            SendSmsResponse result = new SendSmsResponse();
            SendSmsResponseBody body = new SendSmsResponseBody();
            body.setCode("OK");
            body.setMessage("debug模式无需发送");
            result.setBody(body);
            return MsgResult.builder().result(result).build();
        }
    
        // 代码省略...
    }
    
👆🏻👆🏻👆🏻上面是评论区,对系统、本页文档什么疑问,可以在评论区留言。
❗️❗️❗️若评论区无法显示,请使用"手机热点"或"科学上网"。
5.0.4已发布: