• 前置条件

    在开始使用定时任务之前,要确保服务的choerodon-starters依赖在0.6.4.RELEASE版本及之上,推荐最新版0.8.1.RELEASE

    介绍

    站内信系统是用于通知用户站内消息的一个小模块, 在用户登录之后, 个人中心旁边有个铃铛按钮, 点击即可进入站内信即可查看站内通知。基于websocket长连接和redis的pub/sub实现站内信功能。

    站内信功能开发

    添加依赖

    <dependency>
        <groupId>io.choerodon</groupId>
        <artifactId>choerodon-starter-swagger</artifactId>
        <version>${choerodon.starters.version}</version>
    </dependency>
    

    定义模版

    所在服务启用后定义的模版会被notify-service自动扫扫描到

    //继承PmTemplate,确保该bean被spring托管
    @Component
    public class TestPmTemplate implements PmTemplate {
        //业务类型
        @Override
        public String businessTypeCode() {
            return "test";
        }
        //模版code,需要唯一
        @Override
        public String code() {
            return "test";
        }
        //模版名称
        @Override
        public String name() {
            return "test";
        }
        //站内信标题
        @Override
        public String title() {
            return "测试";
        }
        //站内信内容。可以直接写内容字符串,或者指定内容文件
        //模版占位符为${变量名},比如${userName}
        @Override
        public String content() {
            return "classpath://template/test.html";
        }
    }
    

    添加发送站内信代码,通过feign调用notify的发送站内信接口

    curl调用发送站内信接口:

    curl -X POST --header 'Content-Type: application/json' -d '{"code":"site-msg","id":233,"templateCode":"forgetPassword-preset","params":{"userName":"aaa"}}' 'http://api.staging.saas.hand-china.com/notify/v1/notices/ws'
    

    调用发送站内信接口的feign定义:

    @FeignClient(name = "${choerodon.notify.service:notify-service}")
    public interface NotifyClient {
    
        @PostMapping("/v1/notices/ws")
        void sendSitMsg(@RequestBody NotifySendDTO dto);
    
        class NotifySendDTO {
            private Long id;
            
            private String code;
    
            private String templateCode;
    
            private Map<String, Object> params;
    
            public Long getId() {
                return id;
            }
    
            public void setId(Long id) {
                this.id = id;
            }
    
            public String getCode() {
                return code;
            }
    
            public void setCode(String code) {
                this.code = code;
            }
    
            public String getTemplateCode() {
                return templateCode;
            }
    
            public void setTemplateCode(String templateCode) {
                this.templateCode = templateCode;
            }
    
            public Map<String, Object> getParams() {
                return params;
            }
    
            public void setParams(Map<String, Object> params) {
                this.params = params;
            }
        }
    }
    

    调用参数: