# 消息提醒对接文档
* ## **数据库**
通用消息共涉及三张表。自定义消息由业务自行建表。以下展示公共消息三张表内容(公共字段省略)</br>
**1、T_MESSAGE_SEND(消息发送详情表)**
| 字段名称 | 字段 |
| --- | --- |
| 主键 | `ID` |
| 关联消息id | `MESSAGE_ID` |
| 关联用户id | `USER_ID `|
| 状态 0默认未读 1已读 | `STATUS `|
* * *
**2、T_MESSAGE(消息表)**
| 字段名称 | 字段 |
| --- | --- |
| 主键 | `ID` |
|消息类型注册ID,系统提醒时需要用到 | `MESSAGE_TYPE_ID`|
| 标题 | `TITLE `|
| 内容 | `CONTENT `|
| 消息类型 | `TYPE `|
| 消息通道,逗号分割,XT系统 DX短信,WX微信 YX邮箱 | `CHANNEL`|
| 业务数据类型 | `BIZ_TYPE`|
| 业务数据ID | `BIZ_ID`|
| 业务数据扩展,用于存储业务扩展信息 | `BIZ_EXT`|
* * *
**3、T_MESSAGE_TYPE(消息类型表)**
| 字段名称 | 字段 |
| --- | --- |
| 主键 | `ID`|
| 消息类型 | `MESSAGE_TYPE `|
| 类引用路径 | `MESSAGE_CLASS_NAME `|
| 状态,默认1开启提醒,0不开启 | `STATUS `|
| 是否使用自定义消息类,默认0否,1是 | `IS_CUSTOM `|
* * *
</br>
* ## **界面配置**
首先在菜单中加入消息通知管理界面。

所有消息都需要在消息管理界面进行注册。分为通用消息配置和自定义消息配置。
**1、通用消息配置**

**2、自定义消息配置**

* * *
<br/>
* ## **通用消息**
调用 `MessageSendService` 有关方法获取、修改消息数据。</br>
**1、消息保存接口:**
```
/**
* 保存发送的消息
*
* @param userIds 用户id列表,用逗号隔开
* @param message 消息实体
*/
void saveMessage(String userIds, Message message);
```
**2、修改状态接口**
```
/**
* 修改消息状态为已读
*
* @param id id值
*/
void editStatusRead(String id);
/**
* 批量修改消息状态为已读
*
* @param ids id列表
*/
void batchEditStatusRead(String[] ids);
/**
* 修改已读未读状态
*
* @param id 实体id
* @param status 消息状态值(已读还是未读)
*/
void editStatus(String id, Integer status);
/**
* 批量修改已读未读状态
*
* @param ids id列表
* @param status 消息状态值(已读还是未读)
*/
void batchEditStatus(String[] ids, Integer status);
```
**3、获取消息**
```
/**
* 获取当前用户展示信息
*
* @return 当前用户展示信息
*/
List<MessageViewModel> getCurrentUserMessageView();
/**
* 获取所有信息展示数据
*
* @return 获取所有信息展示数据
*/
List<MessageViewModel> getAllMessageView();
/**
* 获取当前用户已读消息展示数据
*
* @return 已读消息展示数据
*/
List<MessageViewModel> getReadMessageView();
/**
* 获取当前用户未读消息展示数据
*
* @return 未读消息列表
*/
List<MessageViewModel> getUnReadMessageView();
```
* * *
</br>
* ## **自定义消息**
实现 `IMessage<T>`。 根据自己的需求实现对应接口,有以下几个接口可供实现:
```
/**
* 获取当前用户展示信息
*
* @return 当前用户展示信息
*/
MessageViewModel getCurrentUserMessageView();
/**
* 获取所有信息展示数据
*
* @return 获取所有信息展示数据
*/
MessageViewModel getAllMessageView();
/**
* 获取当前用户已读消息展示数据
*
* @return 已读消息展示数据
*/
MessageViewModel getReadMessageView();
/**
* 获取当前用户未读消息展示数据
*
* @return 未读消息列表
*/
MessageViewModel getUnReadMessageView();
/**
* 获取当前用户消息列表
*
* @return 获取当前用户消息
*/
List<T> getCurrentUserMessage();
/**
* 获取所有消息列表
*
* @return 获取所有消息
*/
List<T> getAllMessage();
/**
* 获取当前用户已读消息列表
*
* @return 已读消息列表
*/
List<T> getReadMessage();
/**
* 获取当前用户未读消息列表
*
* @return 未读消息列表
*/
List<T> getUnReadMessage();
```
`MessageViewModel` 为规定的消息展示模型,共有三个字段
```
/**
* 消息类型
*/
private String type;
/**
* 消息名称
*/
private String name;
/**
* 消息数量
*/
private Integer count;
```
* * *
* ## **前端调用**
无论是通用消息还是自定义消息,都只需要调用`MessageSendService`提供的有关接口就能获取到数据。
但对数据的修改自定义消息需要自行编写有关接口并调用,这里不进行统一编写。
在前端`message-manager.js` 文件中已有现成的地址可供使用。
```
const base = '/common/message'
// 获取当前用户展示信息
const getCurrentUserMessageView = `${base}/getCurrentUserMessageView`
// 获取所有信息展示数据
const getAllMessageView = `${base}/getAllMessageView`
// 获取当前用户已读消息展示数据
const getReadMessageView = `${base}/getReadMessageView`
// 获取当前用户未读消息展示数据
const getUnReadMessageView = `${base}/getUnReadMessageView`
// 修改消息状态为已读
const editStatusRead = `${base}/editStatusRead`
// 批量修改消息状态为已读
const batchEditStatusRead = `${base}/batchEditStatusRead`
// 修改状态
const editStatus = `${base}/editStatus`
// 批量修改状态
const batchEditStatus = `${base}/batchEditStatus`
```
* * *
* ## **自定义消息示例代码**
```
/**
* 自定义消息示例代码
*
*/
@Slf4j
public class MessageExample implements IMessage<ActBusiness> {
/**
* 获取当前用户展示信息
*
* @return 当前用户展示信息
*/
@Override
public MessageViewModel getCurrentUserMessageView() {
// 手动获取bean
ActBusinessService actBusinessService = SpringUtil.getBean(ActBusinessService.class);
ActBusiness actBusiness = actBusinessService.findByTableId("1321353858607931392");
System.out.println(actBusiness);
System.out.println("getCurrentUserMessageView获取成功");
MessageViewModel messageViewModel = new MessageViewModel();
messageViewModel.setCount(10);
return messageViewModel;
}
}
```
- 一、 开发环境
- 二、系统开发规范
- 1. 工程目录规范
- 1.1根目录规范
- 1.2.通用组件目录规范
- 1.3.自定义模块、项目目录规范
- 1.4.资源目录规范
- 1.5.文件命名规范
- 1.6.变量命名规范(小写驼峰)
- 1.7.函数命名规范(小写驼峰)
- 1.8.代码规范
- 1.9.参考文档
- 2. 前端编码规范
- 2.1.代码检查工具及常见规范
- 2.2.结构规范及编码逻辑
- 3. 后端编码规范
- 3.1.代码检测工具及常见规范
- 3.2.结构规范及编码逻辑
- 4. 数据库设计规范
- 4.1.参考文档
- 4.2.主流数据库字段命名长度限制
- 4.3.命名规范
- 4.4.使用规范
- 5. 系统运维规范
- 6. 安装部署规范
- 7. 组件版本规范
- 1.目标
- 2.组件概念
- 3.文件格式
- 4.组件规范
- 5.Vue 中函数的使用
- 6.提供组件 API 文档
- 7.使用 mixins
- 8、表单设计规范
- 三、自定义表单组件
- 1.设计思路
- 1.1 解决了哪些痛点
- 1.2 核心思路
- 2.1全局配置
- 2.2双向绑定
- 1.3 如何快速上手
- 2.gis-plugin基础使用说明
- 2.1 观前须知
- 2.2 基础配置
- 3. Form组件
- 3.1 基本使用
- 3.2 API说明
- 2.1 props
- 2.2 events
- 3.3 示例代码
- 3.4 常见问题
- 4.1 gis-tag-form的使用
- 4.2 gis-form配套组件的使用
- 4.2.1 gis-form-table 表单内置表格
- 4.2.2 gis-form-editor 表单内置富文本编辑器
- 4.2.3 gis-form-upload 表单内置上传组件
- 4.3 表单初始化常见问题
- 4.Table组件
- 4.1 基本使用
- 4.2 API说明
- 2.1 props
- 2.2 events
- 4.3 示例代码
- 4.4 常见问题
- 4.1 我有隐藏的查询条件,不在查询框上显示,该怎么办?
- 4.2 通过接口获取到的数据我要进一步做处理,该怎么办?
- 4.3 我使用了render,为什么字典值(dict)就无效了?
- 5.Model组件
- 5.1 基本使用
- 5.2 API说明
- 2.2 prop
- 2.2 events
- 5.3 示例代码
- 5.4 常见问题
- 6.附件上传
- 6.1 附件上传组件
- 6.2 图片上传组件
- 7. 文档处理
- Excel组件(基于POI实现)
- Word组件(基于POI实现)
- Pdf组件(基于POI实现)
- 8. 级联选择表单
- 四、自定义ArcGIS通用工具Exe
- 01. EXE接口说明
- 02. CAD转JSON接口
- 03. SHAPE转JSON接口
- 04. 从工作空间中导出文件
- 05. 从ESRIJSON导出文件
- 06. 坐标转换-ESRIJSON
- 07. 坐标转换-文件
- 08. 数据编辑-ESRIJSON
- 09. 数据编辑-新增-从CAD文件导入
- 10. 数据编辑-删除
- 11. 数据编辑-编辑-从CAD文件编辑
- 12. 面积&长度计算
- 13. 空间分析-ESRIJSON
- 14. 空间分析-工作空间
- 15. 数据编辑-从工作空间中导入
- 16. 空间分析-地图服务(一维)
- 17. 空间分析-地图服务(二维)
- 18. 空间分析-地图服务(多个)
- 19.数据编辑-从CAD文件导入(92坐标系CAD,双图层)
- 20.空间分析-验证是否闭合、是否自相交
- 21.WMF转PDF
- 22.数据统计-地图服务
- 五、项目建设规范
- 六、注意事项
- 七、常见问题
- 八、 WebGIS核心组件库
- 01.后台管理端
- 02.图形端
- 03.移动端
- 04.接口
- 九、工作流开发
- 1.前期工作
- 1.1 禁用Activiti自带登录验证
- 1.2 设置应用部署域名
- 2.流程审批步骤
- 2.1.创建模型
- 2.2.在线流程设计
- 2.3.部署发布
- 2.4.流程配置
- 2.5.流程申请
- 2.6.流程审核
- 3.流程设计demo
- 3.1.一般流程
- 3.2.带条件流程
- 3.3.会签流程
- 4.其他一些开发详解
- 4.1.关于内嵌Activiti在线流程设计器
- 4.2.关于对原框架中流程设计代码的调优
- 4.3.关于DelegateExecution对象的常用方法
- 5.工作流接入文档
- 十、框架更新日志
- 其它
- 代码生成器
- 短信平台管理与接口
- 单据编码管理与接口
- 定时任务管理与接口
- 文件管理与接口
- 地图打印管理与接口
- Excel文件导出接口
- 经典SQL语句
- 多实例运行Redis
- 多数据库操作
- 消息通知管理与接口
- 工作流数据清理
- 其他技术总结
- 发布/订阅功能使用说明
- 学习资料
- 十一、多数据源-dynamic-datasource
- 基础必读
- 连接池集成
- 连接池必读
- 集成Druid
- 集成HikariCP
- 集成BeeCP
- 集成DBCP2
- 集成Jndi
- 第三方集成
- 集成MybatisPlus
- 集成P6spy
- 集成Quartz
- 集成ShardingJdbc
- 进阶使用
- 动态添加移除数据源
- 动态解析数据源
- 数据库加密
- 启动初始化执行脚本
- 自动读写分离
- 懒启动数据源
- 无数据源启动
- 手动切换数据源
- 自定义
- 自定义注解
- 自定义数据源来源
- 自定义负载均衡策略
- 自定义切面
- 事务专栏
- 基础知识
- 本地事务
- seata事务
- 调试源码
- 常见问题
- 不可用版本
- 注意事项
- dynamic-datasource参考资料
