配置中心-通知源接入指南
配置中心-通知源接入指南
该文档主要是门户网办平台,信息通知模块内展示通知类型不满足学校场景,基于现有配置组件进行二次开发,并实现通知动态提醒及配置。
接入通知源,需开发人员根据实际接口或数据表参考本文档示例规范,自行实现业务逻辑。
- 注意:此文档为开发接入手册,不涉及环境配置以及开发工具信息。
前置条件
需能访问公司内网环境,访问maven私服。
微服务环境,config-service服务。
流程说明
由开发人员实现系统通知源接入
后在网办门户扩展中心配置通知接入服务,配置完成后在信息门户验证是否接入成功
开发接入步骤
示例场景描述:以下接入步骤为新建数据提醒类通知为例进行接入
步骤一、新建通知源实现类
在 cn.com.lightcode.config.service.notice.impl 下新建通知源实现类
例如:TaskNoticeServiceImpl 类,需要实现接口通知公告基类 BaseNoticeConfigService
@Slf4j
@ArticleFactory(key = "taskNotice", name = "数据提醒", value = {@ArticleFactoryParam(key = "catState", name = "查看状态1-一已查看,0-未查看") })
@Service("taskNotice")
public class TaskNoticeServiceImpl implements BaseNoticeConfigService {
···实现方法
}注解说明
ArticleFactory 通知源标识注解
key: 编码,通知源唯一标识编码和service值一致
name: 名称,通知源名称
ArticleFactoryParam 参数配置对象数组支持多个,支持动态设置参数如通知类型标记,通知状态标记等 使通知源复用
key: 动态标记
name: 状态注释
步骤二、 根据需求实现接口方法
- 方法一、 获取信息通知列表, 此处获取对应通知源下所有通知信息数据
特殊说明:
configPo.getConfig().get("catState")获取通知状态如果状态为空则获取所有已读、未读状态的通知
@Override
public List<UserMessageVO> getNoticeList(BaseConfig configPo) {
//获取动态标识
String catState = CommonUtil.getString(configPo.getConfig().get("catState"), null);
//获取当前用户信息
LoginUserDetail currentUser = LoginUserUtil.getCurrentUser();
Criteria criteria = new Criteria();
Query query = new Query(criteria);
//如果动态标识信息不为空
if(V.notEmpty(catState)){
//根据标识信息查询通知数据
query.addCriteria(Criteria.where("catState").is(Integer.valueOf(catState)));
}
//查询特定分类下数据
query.addCriteria(Criteria.where("type").is("3"));
//当前用户数据
query.addCriteria(Criteria.where("userId").is(currentUser.getUserId().toString()));
//数据筛选
query.fields().include("id").include("userId").include("title").include("content").include("createTime")
.include("source").include("url").include("catState").include("catTime").include("customValue").include("isSys").include("type");
List<UserMessageVO> userMessageVOS = mongoTemplate.find(query, UserMessageVO.class);
userMessageVOS.forEach(x->{
if(V.notEmpty(x.getCreateTime()) && V.equals(x.getCatState(),0)){
x.setInterval(between(DateUtil.formatDateTime(x.getCreateTime())));
}
});
//返回通知信息
return userMessageVOS;
}- 接口参数说明
根据列表
此类为config-service内部调用实现接口,由开发人员根据需求决定在何处调用
请求参数:BaseConfig 实体
| 参数名称 | 数据类型 | 是否必须 | 参数说明 |
|---|---|---|---|
| factory | String | 是 | 厂商标识 |
| factoryName | String | 是 | 厂商名称 |
| config | Map | 是 | 动态配置信息 |
请求示例
{
"factory":"taskNotice",
"factoryName":"导入导出任务通知",
"config":{ "catState":"0" }
}返回结果
| 参数名称 | 数据类型 | 是否必须 | 参数说明 |
|---|---|---|---|
| id | String | 是 | 消息编号 |
| userId | String | 否 | 用户编号 |
| title | String | 是 | 消息标题 |
| content | String | 是 | 消息内容 |
| source | String | 否 | 消息来源 |
| catState | String | 是 | 查看状态:1-已查看、0-未查看 |
| customValue | String | 否 | 自定义参数 |
| isSys | int | 否 | 是否站内推送:1-站内、0-非站内 |
| type | String | 否 | 类型 |
| configId | String | 是 | 配置源id |
| interval | String | 否 | 未读时间 |
| createTime | Date | 否 | 创建时间 |
返回实例
{
"code": 0,
"msg": "操作成功",
"data": {
"result": [
{
"id": "6305fea735db1f5f227349eb",
"userId": "1",
"title": "账号信息数据导出",
"content": "/student-work-service/leaveCommon/fileDownload/6305fea59e014c772490f09e",
"createTime": "2022-08-24 18:34:15",
"source": "导入导出任务",
"catState": 0,
"customValue": "1562387804944138242",
"isSys": 1,
"type": "3",
"configId": "10000089",
"interval": "1天"
}
],
"page": {
"pageIndex": 1,
"pageSize": 10,
"totalCount": 0,
"orderBy": "id:DESC",
"totalPage": 0
}
},
"ok": true
}- 方法二、 标记消息通知为已读状态
@Override
public JsonResult updateNoticeRead(BaseConfig configPo) {
//获取当前消息ID标识
String dataId = CommonUtil.getString(configPo.getConfig().get("dataId"), null);
//获取当前用户
LoginUserDetail currentUser = LoginUserUtil.getCurrentUser();
Query query = new Query();
//查询当前用户下所有未读消息
query.addCriteria(Criteria.where("userId").is(currentUser.getUserId().toString()));
query.addCriteria(Criteria.where("catState").is(0));
//如果执行消息不为空,筛选指定消息
if(V.notEmpty(dataId)){
//筛选指定消息
query.addCriteria(Criteria.where("_id").is(dataId));
}
//标记消息为已读状态
Update update = new Update();
update.set("catState", 1);
update.set("catTime", DateUtil.date());
try {
//修改消息状态
UpdateResult result = mongoTemplate.updateMulti(query, update, "userMessage");
log.debug("一键设置已读消息,MatchedCount[{}]、getModifiedCount[{}],", result.getMatchedCount(), result.getModifiedCount());
} catch (Exception e) {
log.error("一键设置已读消息", e);
return JsonResult.FAIL_EXCEPTION("设置消息状态失败,请联系管理员");
}
return JsonResult.OK();
}- 接口参数说明
根据通知dataId与通知分类标识factory设置消息为已读状态
注 dataId不传的话当前任务类型下通知消息将全部标记为已读状态
此类为config-service内部调用实现接口,由开发人员根据需求决定在何处调用
请求参数:BaseConfig 实体
| 参数名称 | 数据类型 | 是否必须 | 参数说明 |
|---|---|---|---|
| factory | String | 是 | 厂商标识 |
| factoryName | String | 是 | 厂商名称 |
| config | Map | 是 | 动态配置信息 |
* 请求示例
```json
{
"factory":"taskNotice",
"factoryName":"导入导出任务通知",
"config":{
"catState":"0",
"dataId":"6305fea735db1f5f227349eb"
}
}返回结果
| 参数名称 | 数据类型 | 是否必须 | 参数说明 |
|---|---|---|---|
| 无 |
返回实例
{
"code": 0,
"msg": "操作成功",
"data": [],
"ok": true
}- 也可以根据业务需求新增实现接口
验证
验证一、
完成以上步骤可以调用 cn.com.lightcode.config.controller.api.NoticeController 下getFactoryList方法进行验证
@ApiOperation(value = "下拉框-查询厂商列表")
@ResponseBody
@GetMapping("/factory/list")
public JsonResult getFactoryList(){
return noticeConfigService.getFactoryList();
}返回结果中如果出现你刚创建的类则证明数据源添加成功
{
"id": "taskNotice",
"name": "数据提醒",
"params": {
"catState": "查看状态1-一已查看,0-未查看"
}
}验证二、
在后台管理-门户扩展中心-通知接入服务

在通知接入服务下新建通知分类-在新建的通知分类下新建通知源

- catState为新增
TestNoticeServiceImplc类上设置的动态标记
在系统首页通知消息处查看新建通知源下通知数据

常见问题排查
配置了通知源后在信息通知处没有出现配置的通知源
需要在系统设计引擎处将通知源信息绑定到页面
找到系统默认门户(也可以是特定页面)编辑门户选择第三步“菜单/导航配置”选择关联通知源将添加的通知源选中提交后退出登陆刷新缓存就可以获取到添加的分类通知源信息

- 通知源分类下通知错乱
仔细检查
cn.com.lightcode.config.service.notice.impl.TestNoticeServiceImpl#getNoticeList方法各个参数类型是否查询正确,以及查询方法是否正确
