# Message 消息服务模块

Message 模块是 DarkM 框架的消息通知模块,提供了完整的消息发送和管理功能。支持消息模板、定时发送、消息日志、访问统计等功能,满足企业各种消息通知需求。


# 📋 模块概述

属性 说明
模块名称 Message(消息服务)
模块类型 业务模块
依赖关系 依赖 Admin 模块、Common 模块、Quartz 模块
必需性 可选(消息通知必需)
Git 仓库 framework/darkm/darkm (opens new window)

# 🎯 核心功能

# 功能清单

功能分类 功能 说明 重要性
消息配置 消息配置 消息发送配置 ⭐⭐⭐⭐⭐
发送处理器配置 发送处理器配置 ⭐⭐⭐⭐
消息模板 消息模板管理 ⭐⭐⭐⭐⭐
消息发送 消息发送 消息发送处理 ⭐⭐⭐⭐⭐
发送记录 发送记录管理 ⭐⭐⭐⭐
消息队列 消息发送队列 ⭐⭐⭐⭐
定时任务 事件管理 定时事件管理 ⭐⭐⭐⭐
事件周期 事件周期配置 ⭐⭐⭐⭐
用户协议 用户协议 用户协议管理 ⭐⭐⭐
协议记录 协议同意记录 ⭐⭐⭐
统计日志 消息日志 消息发送日志 ⭐⭐⭐⭐
访问统计 消息访问统计 ⭐⭐⭐⭐
信息公告 信息公告管理 ⭐⭐⭐

# 📦 安装配置

# NuGet 包安装

Install-Package DarkM.Module.Message.Web -Version 1.0.0
1

# NPM 包安装

npm i -S darkm-module-message
1

# 配置文件

{
  "Db": {
    "Modules": [
      {
        "Name": "Message",
        "Database": "Nm_Message",
        "Prefix": ""
      }
    ]
  },
  "Message": {
    // 是否开启消息服务
    "Enable": true,
    // 默认发送渠道
    "DefaultChannel": "SMS",
    // 消息保留天数
    "LogKeepDays": 90
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

配置说明:

配置项 说明 默认值
Enable 是否开启消息服务 true
DefaultChannel 默认发送渠道(SMS/Email/WeChat) SMS
LogKeepDays 消息日志保留天数 90

# 🗄️ 数据库表结构

# 消息配置表

表名 说明 主键
MessageConfig 消息配置表 Id (long)
MessageTemplate 消息模板表 Id (long)
SendProcessorConfig 发送处理器配置表 Id (long)

# 消息发送表

表名 说明 主键
SendMessage 发送消息表 Id (long)
SendMessageRecord 发送记录表 Id (long)
MessageLog 消息日志表 Id (long)
MessageSendQueue 消息发送队列表 Id (long)

# 定时任务表

表名 说明 主键
Events 事件表 Id (long)
EventsCycle 事件周期表 Id (long)

# 用户协议表

表名 说明 主键
UserAgreement 用户协议表 Id (long)
UserAgreementRecord 用户协议记录表 Id (long)

# 统计表

表名 说明 主键
MessageVisitTimes 消息访问统计表 Id (long)
Information 信息公告表 Id (long)

# 🔐 权限系统设计

# Controller 定义

# 1. 消息配置管理

[Description("消息配置管理")]
public class MessageConfigController : ModuleController
{
    private readonly IMessageConfigService _service;

    public MessageConfigController(IMessageConfigService service)
    {
        _service = service;
    }

    [HttpGet]
    [Description("查询")]
    public Task<IResultModel> Query([FromQuery]MessageConfigQueryModel model)
    {
        return _service.Query(model);
    }

    [HttpPost]
    [Description("添加")]
    public Task<IResultModel> Add(MessageConfigAddModel model)
    {
        return _service.Add(model);
    }

    [HttpDelete]
    [Description("删除")]
    public Task<IResultModel> Delete([BindRequired]long id)
    {
        return _service.Delete(id);
    }

    [HttpGet]
    [Description("编辑")]
    public Task<IResultModel> Edit([BindRequired]long id)
    {
        return _service.Edit(id);
    }

    [HttpPost]
    [Description("修改")]
    public Task<IResultModel> Update(MessageConfigUpdateModel model)
    {
        return _service.Update(model);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# 2. 消息模板管理

[Description("消息模板管理")]
public class MessageTemplateController : ModuleController
{
    private readonly IMessageTemplateService _service;

    public MessageTemplateController(IMessageTemplateService service)
    {
        _service = service;
    }

    [HttpGet]
    [Description("查询")]
    public Task<IResultModel> Query([FromQuery]MessageTemplateQueryModel model)
    {
        return _service.Query(model);
    }

    [HttpPost]
    [Description("添加")]
    public Task<IResultModel> Add(MessageTemplateAddModel model)
    {
        return _service.Add(model);
    }

    [HttpGet]
    [Description("编辑")]
    public Task<IResultModel> Edit([BindRequired]long id)
    {
        return _service.Edit(id);
    }

    [HttpPost]
    [Description("修改")]
    public Task<IResultModel> Update(MessageTemplateUpdateModel model)
    {
        return _service.Update(model);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 权限解析结果

权限编码 说明 访问级别
message_messageconfig_query_get 消息配置 - 查询 需授权
message_messageconfig_add_post 消息配置 - 添加 需授权
message_messageconfig_edit_get 消息配置 - 编辑 需授权
message_messageconfig_update_post 消息配置 - 修改 需授权
message_messageconfig_delete_delete 消息配置 - 删除 需授权
message_messagetemplate_query_get 消息模板 - 查询 需授权
message_messagetemplate_add_post 消息模板 - 添加 需授权
message_messagetemplate_update_post 消息模板 - 修改 需授权
message_sendmessage_post 发送消息 需授权
message_events_query_get 事件管理 - 查询 需授权

# 🎨 核心功能详解

# 一、消息配置

# 1. 消息配置实体

[Table("MessageConfig")]
public partial class MessageConfigEntity : EntityBase
{
    /// <summary>
    /// 配置名称
    /// </summary>
    [Length(100)]
    public string ConfigName { get; set; }

    /// <summary>
    /// 配置编码
    /// </summary>
    [Length(50)]
    public string ConfigCode { get; set; }

    /// <summary>
    /// 发送渠道(SMS/Email/WeChat)
    /// </summary>
    [Length(20)]
    public string Channel { get; set; }

    /// <summary>
    /// 配置内容(JSON 格式)
    /// </summary>
    [Length(2000)]
    public string ConfigContent { get; set; }

    /// <summary>
    /// 是否启用
    /// </summary>
    public bool IsEnabled { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 二、消息模板

# 1. 模板实体

[Table("MessageTemplate")]
public partial class MessageTemplateEntity : EntityBase
{
    /// <summary>
    /// 模板名称
    /// </summary>
    [Length(100)]
    public string TemplateName { get; set; }

    /// <summary>
    /// 模板编码
    /// </summary>
    [Length(50)]
    public string TemplateCode { get; set; }

    /// <summary>
    /// 模板内容
    /// </summary>
    [Length(2000)]
    public string TemplateContent { get; set; }

    /// <summary>
    /// 模板参数(JSON 格式)
    /// </summary>
    [Length(500)]
    public string TemplateParams { get; set; }

    /// <summary>
    /// 发送渠道
    /// </summary>
    [Length(20)]
    public string Channel { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 三、定时事件

# 1. 事件实体

[Table("Events")]
public partial class EventsEntity : EntityBase
{
    /// <summary>
    /// 事件名称
    /// </summary>
    [Length(100)]
    public string EventName { get; set; }

    /// <summary>
    /// 事件编码
    /// </summary>
    [Length(50)]
    public string EventCode { get; set; }

    /// <summary>
    /// 事件类型
    /// </summary>
    public EventType EventType { get; set; }

    /// <summary>
    /// 是否启用
    /// </summary>
    public bool IsEnabled { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 2. 事件周期实体

[Table("EventsCycle")]
public partial class EventsCycleEntity : EntityBase
{
    /// <summary>
    /// 事件 ID
    /// </summary>
    public long EventId { get; set; }

    /// <summary>
    /// 周期类型(Daily/Weekly/Monthly)
    /// </summary>
    [Length(20)]
    public string CycleType { get; set; }

    /// <summary>
    /// 执行时间
    /// </summary>
    public DateTime ExecuteTime { get; set; }

    /// <summary>
    /// Cron 表达式
    /// </summary>
    [Length(100)]
    public string CronExpression { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 🔧 核心服务接口

# IMessageConfigService(消息配置服务)

public interface IMessageConfigService
{
    /// <summary>
    /// 查询消息配置列表
    /// </summary>
    Task<IResultModel> Query(MessageConfigQueryModel model);

    /// <summary>
    /// 添加消息配置
    /// </summary>
    Task<IResultModel> Add(MessageConfigAddModel model);

    /// <summary>
    /// 删除消息配置
    /// </summary>
    Task<IResultModel> Delete(long id);

    /// <summary>
    /// 编辑消息配置
    /// </summary>
    Task<IResultModel> Edit(long id);

    /// <summary>
    /// 修改消息配置
    /// </summary>
    Task<IResultModel> Update(MessageConfigUpdateModel model);

    /// <summary>
    /// 获取消息配置
    /// </summary>
    Task<IResultModel> Get(string configCode);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# IMessageTemplateService(消息模板服务)

public interface IMessageTemplateService
{
    /// <summary>
    /// 查询消息模板列表
    /// </summary>
    Task<IResultModel> Query(MessageTemplateQueryModel model);

    /// <summary>
    /// 添加消息模板
    /// </summary>
    Task<IResultModel> Add(MessageTemplateAddModel model);

    /// <summary>
    /// 删除消息模板
    /// </summary>
    Task<IResultModel> Delete(long id);

    /// <summary>
    /// 编辑消息模板
    /// </summary>
    Task<IResultModel> Edit(long id);

    /// <summary>
    /// 修改消息模板
    /// </summary>
    Task<IResultModel> Update(MessageTemplateUpdateModel model);

    /// <summary>
    /// 获取消息模板
    /// </summary>
    Task<IResultModel> Get(string templateCode);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# IEventsService(事件服务)

public interface IEventsService
{
    /// <summary>
    /// 查询事件列表
    /// </summary>
    Task<IResultModel> Query(EventsQueryModel model);

    /// <summary>
    /// 添加事件
    /// </summary>
    Task<IResultModel> Add(EventsAddModel model);

    /// <summary>
    /// 删除事件
    /// </summary>
    Task<IResultModel> Delete(long id);

    /// <summary>
    /// 编辑事件
    /// </summary>
    Task<IResultModel> Edit(long id);

    /// <summary>
    /// 修改事件
    /// </summary>
    Task<IResultModel> Update(EventsUpdateModel model);

    /// <summary>
    /// 触发事件
    /// </summary>
    Task<IResultModel> Trigger(string eventCode);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 🖥️ 前端组件说明

# NPM 包信息

{
  "name": "darkm-module-message",
  "version": "1.5.0-beta-2.0",
  "code": "message",
  "title": "消息服务",
  "dependencies": {
    "darkm-module-admin": "^1.5.0-beta-2.0",
    "darkm-module-common": "^1.5.0-beta-2.0",
    "darkm-module-quartz": "^1.5.0-beta-2.0",
    "darkm-ui": "^1.5.0-beta-2.0"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 组件目录结构

src/UI/module-message/
├── src/
│   ├── views/                      # 页面组件
│   │   ├── messageConfig/          # 消息配置
│   │   ├── messageTemplate/        # 消息模板
│   │   ├── sendMessage/            # 消息发送
│   │   ├── events/                 # 事件管理
│   │   ├── eventsCycle/            # 事件周期
│   │   └── userAgreement/          # 用户协议
│   └── components/                 # 通用组件
│       ├── messageTemplate-select/ # 消息模板选择器
│       ├── messageTemplate-search-select/ # 消息模板搜索选择器
│       ├── sendProcessorConfig-select/ # 发送处理器选择器
│       └── config-message/         # 消息配置组件
└── package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 📦 通用组件详解

# 1. MessageTemplateSelect 消息模板选择器

组件路径: components/messageTemplate-select

功能: 下拉选择消息模板

使用示例:

<template>
  <messageTemplate-select 
    v-model="templateId"
    :channel="channel"
  />
</template>

<script>
import { components } from 'darkm-module-message'
const { MessageTemplateSelect } = components

export default {
  components: { MessageTemplateSelect },
  data() {
    return {
      templateId: '',
      channel: 'SMS'
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Props 参数:

参数 类型 必填 默认值 说明
value Number - 选中的模板 ID(v-model)
channel String - 发送渠道筛选(SMS/Email/WeChat)
disabled Boolean false 是否禁用

Events 事件:

事件名 参数 说明
input (value: Number) 选中值变化时触发(v-model)
change (value: Number, data: Object) 选中值变化时触发,返回完整数据

# 2. MessageTemplateSearchSelect 消息模板搜索选择器

组件路径: components/messageTemplate-search-select

功能: 弹窗式消息模板搜索选择

使用示例:

<template>
  <messageTemplate-search-select 
    v-model="templateId"
    :channel="channel"
    @change="handleChange"
  />
</template>

<script>
import { components } from 'darkm-module-message'
const { MessageTemplateSearchSelect } = components

export default {
  components: { MessageTemplateSearchSelect },
  data() {
    return {
      templateId: '',
      channel: 'SMS'
    }
  },
  methods: {
    handleChange(value, data) {
      console.log('选中的模板:', data)
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Props 参数:

参数 类型 必填 默认值 说明
value Number - 选中的模板 ID(v-model)
channel String - 发送渠道筛选
disabled Boolean false 是否禁用

Events 事件:

事件名 参数 说明
input (value: Number) 选中值变化时触发
change (value: Number, data: Object) 选中值变化时触发,返回完整数据

功能特点:

  • ✅ 支持按渠道筛选
  • ✅ 支持搜索模板名称和编码
  • ✅ 弹窗式选择界面
  • ✅ 显示模板预览

# 3. SendProcessorConfigSelect 发送处理器选择器

组件路径: components/sendProcessorConfig-select

功能: 下拉选择发送处理器配置

使用示例:

<template>
  <sendProcessorConfig-select v-model="configId" />
</template>

<script>
import { components } from 'darkm-module-message'
const { SendProcessorConfigSelect } = components

export default {
  components: { SendProcessorConfigSelect },
  data() {
    return {
      configId: ''
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Props 参数:

参数 类型 必填 默认值 说明
value Number - 选中的配置 ID(v-model)
disabled Boolean false 是否禁用

Events 事件:

事件名 参数 说明
input (value: Number) 选中值变化时触发(v-model)
change (value: Number, data: Object) 选中值变化时触发,返回完整数据

# 📋 组件使用注意事项

# 1. 组件引入方式

// 方式一:引入单个组件
import { components } from 'darkm-module-message'
const { MessageTemplateSelect } = components

// 方式二:全局注册
import Message from 'darkm-module-message'
Vue.use(Message)
1
2
3
4
5
6
7

# 2. v-model 双向绑定

所有选择器组件都支持 v-model 双向绑定:

<!-- 推荐用法 -->
<messageTemplate-select v-model="templateId" />

<!-- 等价于 -->
<messageTemplate-select 
  :value="templateId" 
  @input="templateId = $event" 
/>
1
2
3
4
5
6
7
8

# 3. 级联选择

多个选择器可以级联使用:

<template>
  <div>
    <messageConfig-select v-model="configId" />
    <messageTemplate-select v-model="templateId" :channel="channel" />
    <sendProcessorConfig-select v-model="processorId" />
  </div>
</template>
1
2
3
4
5
6
7

# 4. 数据格式

所有组件返回的数据格式:

  • 单选: 返回 ID(Number)
  • change 事件: 返回 (value, data),data 为完整对象

# 5. 组件依赖

Message 模块依赖以下模块:

  • darkm-module-admin - 权限管理
  • darkm-module-common - 通用模块
  • darkm-module-quartz - 定时任务
  • darkm-ui - UI 组件库

确保先安装依赖:

npm install darkm-module-admin --registry http://npm.woowis.com
npm install darkm-module-common --registry http://npm.woowis.com
npm install darkm-module-quartz --registry http://npm.woowis.com
npm install darkm-ui --registry http://npm.woowis.com
1
2
3
4

# 🔍 常见问题

# 1. 消息发送失败

问题: 调用发送接口报错

解决:

# 检查消息配置是否正确
# 检查发送渠道配置是否完整
# 检查模板参数是否匹配

# 查看详细错误日志
tail -f logs/message.log
1
2
3
4
5
6

# 2. 定时任务未执行

问题: 配置的定时事件未触发

解决:

  1. 检查 Quartz 模块是否正常运行
  2. 检查事件周期配置是否正确
  3. 检查 Cron 表达式是否有效
  4. 查看 Quartz 日志

# 3. 模板参数不匹配

问题: 发送消息时提示参数错误

解决:

  1. 检查模板参数定义
  2. 检查发送数据是否包含所有必填参数
  3. 检查参数类型是否匹配
  4. 查看模板预览功能

# 4. 消息日志未记录

问题: 发送消息后没有日志

解决:

# 检查日志配置
cat appsettings.json | grep Message

# 检查 MessageLog 表是否正常
# 检查日志保留天数配置
1
2
3
4
5

# 📚 相关文档


# 🔗 参考链接


最后更新: 2026-03-20