260624-消息与待办模块设计开发文档.md 7.6 KB

消息通知与待办模块设计开发文档

一、概述

  • 消息通知模块:统一的消息发送能力,支持给企业/人员发送通知消息,记录接收人关联。
  • 待办模块:统一的待办创建与查询能力,支持给企业/人员生成待办,前端可通过目标页面路径进行跳转。

二、数据库设计

2.1 消息通知记录表

文件jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/../.docs/sql/建表语句/消息通知记录表.sql

-- 主表
CREATE TABLE notification_record (
    ID            VARCHAR(36)  NOT NULL,
    MODULE_TYPE   VARCHAR(50)           COMMENT '来源模块',
    SUBJECT       VARCHAR(200) NOT NULL COMMENT '消息主题',
    CONTENT       VARCHAR(2000)         COMMENT '消息内容',
    SENDER_ID     VARCHAR(36)           COMMENT '推送人用户ID(关联sys_user)',
    SENDER        VARCHAR(50)  NOT NULL COMMENT '推送人姓名',
    SEND_TIME     TIMESTAMP    NOT NULL COMMENT '推送时间',
    CREATE_BY     VARCHAR(50),
    CREATE_TIME   TIMESTAMP    DEFAULT CURRENT_TIMESTAMP NOT NULL,
    SYS_ORG_CODE  VARCHAR(50),
    PRIMARY KEY (ID)
);
COMMENT ON TABLE notification_record IS '消息通知记录表';

-- 后增字段
ALTER TABLE notification_record ADD EXPIRE_TIME TIMESTAMP;
COMMENT ON COLUMN notification_record.EXPIRE_TIME IS '过期时间';
ALTER TABLE notification_record ADD STATUS VARCHAR(20) DEFAULT '0';
COMMENT ON COLUMN notification_record.STATUS IS '状态: 0未读 1已读';

-- 接收人关联表
CREATE TABLE notification_target (
    NOTIFICATION_ID VARCHAR(36) NOT NULL COMMENT '消息ID',
    TARGET_TYPE     VARCHAR(20) NOT NULL COMMENT '类型: personal/enterprise',
    TARGET_ID       VARCHAR(36) NOT NULL COMMENT '目标ID'
);
COMMENT ON TABLE notification_target IS '消息接收人关联表';
CREATE INDEX idx_nt_target ON notification_target(TARGET_TYPE, TARGET_ID);
CREATE INDEX idx_nt_notify ON notification_target(NOTIFICATION_ID);
ALTER TABLE notification_target ADD STATUS VARCHAR(20) DEFAULT '0';
COMMENT ON COLUMN notification_target.STATUS IS '状态: 0未读 1已读';

2.2 待办记录表

文件jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/../.docs/sql/建表语句/待办记录表.sql

-- 主表
CREATE TABLE todo_record (
    ID            VARCHAR(36)   NOT NULL,
    MODULE_TYPE   VARCHAR(50)            COMMENT '来源模块',
    SUBJECT       VARCHAR(200)  NOT NULL COMMENT '待办标题',
    CONTENT       VARCHAR(2000)          COMMENT '待办内容',
    CREATOR_ID    VARCHAR(36)            COMMENT '发起人用户ID(关联sys_user)',
    CREATOR       VARCHAR(50)   NOT NULL COMMENT '发起人姓名',
    CREATE_TIME   TIMESTAMP     DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
    STATUS        VARCHAR(20)   DEFAULT '0' NOT NULL COMMENT '状态: 0待处理 1已完成 2已取消',
    COMPLETE_TIME TIMESTAMP              COMMENT '完成时间',
    EXPIRE_TIME   TIMESTAMP              COMMENT '过期时间',
    TARGET_PAGE   VARCHAR(500)           COMMENT '目标页面路径',
    DATA_ID       VARCHAR(36)            COMMENT '数据ID',
    PATH_PARAMS   VARCHAR(500)           COMMENT '路径参数',
    SYS_ORG_CODE  VARCHAR(50),
    PRIMARY KEY (ID)
);
COMMENT ON TABLE todo_record IS '待办记录表';

-- 接收人关联表
CREATE TABLE todo_target (
    TODO_ID     VARCHAR(36) NOT NULL COMMENT '待办ID',
    TARGET_TYPE VARCHAR(20) NOT NULL COMMENT '类型: personal/enterprise',
    TARGET_ID   VARCHAR(36) NOT NULL COMMENT '目标ID'
);
COMMENT ON TABLE todo_target IS '待办接收人关联表';
CREATE INDEX idx_tt_target ON todo_target(TARGET_TYPE, TARGET_ID);
CREATE INDEX idx_tt_todo ON todo_target(TODO_ID);
ALTER TABLE todo_target ADD STATUS VARCHAR(20) DEFAULT '0';
COMMENT ON COLUMN todo_target.STATUS IS '状态: 0待处理 1已完成 2已取消';

三、消息通知模块使用说明

3.1 引入 Service

@Autowired
private INotificationRecordService notificationRecordService;

3.2 方法签名

NotificationRecord sendMessage(
    String moduleType,      // 来源模块(如 "interview", "offer")
    String subject,         // 消息主题
    String content,         // 消息内容
    String senderId,        // 推送人用户ID(系统发起可传空字符串)
    String sender,          // 推送人姓名
    Date expireTime,        // 过期时间(不传则传 null)
    List<NotificationTarget> targets   // 接收人列表
);

3.3 调用示例

// 构建接收人
NotificationTarget target = new NotificationTarget();
target.setTargetType("enterprise");       // personal / enterprise
target.setTargetId(enterprise.getId());

// 计算过期时间:当前时间 + 1天
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);
Date expireTime = cal.getTime();

// 发送通知
notificationRecordService.sendMessage(
    "interview",                              // moduleType
    "面试反馈通知",                           // subject
    String.format("求职者【%s】已确认参加面试【%s】",
        personalName, postName),              // content
    "",                                       // senderId(系统发起)
    personalName,                             // sender
    expireTime,                               // expireTime
    Collections.singletonList(target)         // targets
);

四、待办模块使用说明

4.1 引入 Service

@Autowired
private ITodoRecordService todoRecordService;

4.2 方法签名

TodoRecord createTodo(
    String moduleType,      // 来源模块(如 "offer")
    String subject,         // 待办标题
    String content,         // 待办内容
    String creatorId,       // 发起人用户ID(系统发起可传空字符串)
    String creator,         // 发起人姓名
    String targetPage,      // 前端路由路径
    String dataId,          // 关联的业务数据主键ID
    String pathParams,      // 路径参数
    List<TodoTarget> targets                 // 接收人列表
);

4.3 调用示例

// 构建接收人
TodoTarget target = new TodoTarget();
target.setTargetType("personal");       // personal / enterprise
target.setTargetId(personal.getId());

// 生成待办
todoRecordService.createTodo(
    "offer",                              // moduleType
    "录用通知",                           // subject
    String.format("您已被【%s】的【%s】岗位录用,请前往查看并确认签约",
        enterpriseName, postName),        // content
    "",                                   // creatorId(系统发起)
    enterpriseName,                       // creator
    "pages/personal/my-jobs/index",       // targetPage
    offerId,                              // dataId
    "fromTab=2",                          // pathParams
    Collections.singletonList(target)     // targets
);

4.4 接收人列表(批量发送)

两个模块都支持批量发送,targets 参数可以传入多个接收人:

List<TodoTarget> targets = Arrays.asList(
    new TodoTarget().setTargetType("personal").setTargetId(id1),
    new TodoTarget().setTargetType("enterprise").setTargetId(id2)
);

五、过期时间规则

场景 过期时间计算
面试通知(求职者反馈给企业) 面试时间 + 1天
面试结果通知(企业回传给求职者) 面试时间 + 1天
录用待办 无过期(null)
录用反馈通知 无过期(null)

六、moduleType 取值约定

moduleType 值 说明
interview 面试相关通知/待办
offer 录用相关通知/待办