-- ============================================================= -- OA 工作日报 —— 表结构 -- -- 对应代码: -- models/oa_daily_report.go -- services/oauth/dailyreport_service.go -- controllers/backend_oa_dailyreport.go(后台 PC 端) -- controllers/app_oa_dailyreport.go(小程序端) -- -- 设计要点: -- 1. 每人每天一条日报,用 (tid, user_id, report_date, is_deleted) 唯一键约束; -- user_id 存 SystemTenantUser.uid(不是 JWT 里的 identity_id)。 -- 2. 删除为软删除:is_deleted=0 表示未删除;删除时写入记录 ID 作为删除批次标记, -- 使唯一键在「删除后同一天重新填写」时不与历史软删记录冲突。 -- 评论同步软删除(is_deleted=1)。 -- 3. 同一天允许先存草稿(status=0)后提交(status=1)。 -- 4. 不显式指定 COLLATE,沿用数据库默认排序规则,避免与其他表 -- JOIN 字符串时出现 Illegal mix of collations。 -- ============================================================= SET NAMES utf8mb4; -- ---------------- 1. 工作日报主表 ---------------- CREATE TABLE IF NOT EXISTS `yz_backend_oa_daily_report` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID', `user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '作者uid(yz_system_tenant_user.uid)', `user_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '作者姓名快照', `org_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '作者部门ID(yz_backend_organization.id)', `org_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '部门名称快照', `report_date` DATE NOT NULL COMMENT '日报日期', `today_done` TEXT COMMENT '今日完成', `tomorrow_plan` TEXT COMMENT '明日计划', `issues` TEXT COMMENT '问题与建议', `attachments` TEXT COMMENT '附件JSON数组:[{"id":1,"url":"","name":"","size":0}]', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '0草稿 1已提交', `submit_time` DATETIME DEFAULT NULL COMMENT '提交时间', `is_deleted` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '软删除标记:0=未删除;删除时写入记录ID(避免唯一键冲突)', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `delete_time` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_tid_user_date` (`tid`, `user_id`, `report_date`, `is_deleted`), KEY `idx_tid_date` (`tid`, `report_date`), KEY `idx_tid_org_date` (`tid`, `org_id`, `report_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作日报'; -- ---------------- 2. 日报评论表 ---------------- -- reply_to_id 指向同表评论ID,用于两级回复(0 表示直接评论日报)。 CREATE TABLE IF NOT EXISTS `yz_backend_oa_daily_report_comment` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID', `report_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '日报ID', `user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论人uid', `user_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '评论人姓名快照', `content` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '评论内容', `reply_to_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '回复的评论ID,0=直接评论', `reply_to_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '被回复人姓名快照', `is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标记:0=未删除 1=已删除', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `delete_time` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_report` (`report_id`, `id`), KEY `idx_tid` (`tid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作日报评论';