feat: 新增项目中心——按项目组织任务/任务群/总群并一键推送

- 新表 projects / project_group_chats,partners 加 partner_type/wecom_userid,tasks 加 project_id(迁移 0010)
- 项目 CRUD、总群成员配置、任务群人工映射(群主→合作方)、任务挂项目
- 推送:总群成员逐人应用消息 + 任务群按群主企业群发,结果分项回显
This commit is contained in:
ABAPPLO
2026-08-31 16:35:17 +08:00
parent ed13262166
commit a6f5a5fd4a
11 changed files with 2557 additions and 15 deletions

View File

@@ -22,6 +22,10 @@ export const partners = mysqlTable("partners", {
claimedTotal: int("claimed_total").notNull().default(0),
completedTotal: int("completed_total").notNull().default(0),
wecomExternalUserId: varchar("wecom_external_user_id", { length: 128 }),
partnerType: varchar("partner_type", { length: 32 })
.notNull()
.default("external_koc"),
wecomUserid: varchar("wecom_userid", { length: 128 }).notNull().default(""),
createdAt: timestamp("created_at"),
});
@@ -53,6 +57,7 @@ export const tasks = mysqlTable(
mode: "string",
fsp: 3,
}),
projectId: varchar("project_id", { length: 64 }).notNull().default(""),
createdAt: timestamp("created_at"),
},
(table) => [uniqueIndex("tasks_share_token_idx").on(table.shareToken)],
@@ -282,6 +287,31 @@ export const wecomGroupPushes = mysqlTable(
(table) => [index("wecom_group_pushes_task_idx").on(table.taskId)],
);
export const projects = mysqlTable("projects", {
id: varchar("id", { length: 64 }).primaryKey(),
name: varchar("name", { length: 255 }).notNull(),
brand: varchar("brand", { length: 255 }).notNull().default(""),
mainGroupMemberIds: text("main_group_member_ids").notNull(),
status: varchar("status", { length: 32 }).notNull().default("active"),
note: text("note").notNull(),
createdAt: timestamp("created_at"),
});
export const projectGroupChats = mysqlTable(
"project_group_chats",
{
id: varchar("id", { length: 64 }).primaryKey(),
projectId: varchar("project_id", { length: 64 }).notNull(),
chatId: varchar("chat_id", { length: 128 }).notNull(),
partnerId: varchar("partner_id", { length: 64 }).notNull().default(""),
createdAt: timestamp("created_at"),
},
(table) => [
uniqueIndex("project_group_chats_uniq").on(table.projectId, table.chatId),
index("project_group_chats_project_idx").on(table.projectId),
],
);
export const backgroundJobs = mysqlTable(
"background_jobs",
{