feat(assoc): v4.0.1 合伙人关联码、分佣账单与 H5 用户管理
订单佣金只认关联用户;合伙人备注写入独立表;H5 增加用户管理与首页统计。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -201,6 +201,7 @@ CREATE TABLE common_city (
|
||||
UNIQUE KEY uk_common_city_code (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='开城配置';
|
||||
|
||||
DROP TABLE IF EXISTS partner_user_note;
|
||||
DROP TABLE IF EXISTS partner_account;
|
||||
CREATE TABLE partner_account (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
@@ -231,11 +232,14 @@ CREATE TABLE partner_account (
|
||||
bank_branch VARCHAR(128) DEFAULT NULL,
|
||||
weekly_store_target INT DEFAULT 20,
|
||||
managed_warehouse_id BIGINT UNSIGNED DEFAULT NULL,
|
||||
assoc_qrcode_id VARCHAR(64) DEFAULT NULL,
|
||||
assoc_qrcode_resource_id BIGINT UNSIGNED DEFAULT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_partner_account_phone (phone),
|
||||
UNIQUE KEY uk_partner_account_managed_warehouse (managed_warehouse_id),
|
||||
UNIQUE KEY uk_partner_account_assoc_qrcode (assoc_qrcode_id),
|
||||
KEY idx_partner_account_city_scope (city_id, scope_type),
|
||||
KEY idx_partner_account_city_primary (city_id, is_primary),
|
||||
KEY idx_partner_account_parent (parent_account_id),
|
||||
@@ -287,6 +291,26 @@ CREATE TABLE partner_bill (
|
||||
CONSTRAINT fk_partner_bill_account FOREIGN KEY (partner_account_id) REFERENCES partner_account(id) ON DELETE RESTRICT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合伙人T+30账单';
|
||||
|
||||
DROP TABLE IF EXISTS partner_bill_item;
|
||||
CREATE TABLE partner_bill_item (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
partner_bill_id BIGINT UNSIGNED NOT NULL,
|
||||
kind VARCHAR(16) NOT NULL COMMENT 'ORDER|REDEEM',
|
||||
ref_id BIGINT UNSIGNED NOT NULL,
|
||||
ref_no VARCHAR(32) NOT NULL,
|
||||
title VARCHAR(128) DEFAULT NULL,
|
||||
extra VARCHAR(128) DEFAULT NULL,
|
||||
base_amount DECIMAL(10,2) NOT NULL,
|
||||
rate DECIMAL(5,4) NOT NULL,
|
||||
commission DECIMAL(10,2) NOT NULL,
|
||||
occurred_at DATETIME(3) NOT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_partner_bill_item_kind_ref (kind, ref_id),
|
||||
KEY idx_partner_bill_item_bill (partner_bill_id),
|
||||
CONSTRAINT fk_partner_bill_item_bill FOREIGN KEY (partner_bill_id) REFERENCES partner_bill(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合伙人账单明细';
|
||||
|
||||
-- ===================== HQ =============================
|
||||
|
||||
DROP TABLE IF EXISTS hq_account;
|
||||
@@ -307,6 +331,7 @@ CREATE TABLE hq_account (
|
||||
|
||||
-- ===================== USER =============================
|
||||
|
||||
DROP TABLE IF EXISTS partner_user_note;
|
||||
DROP TABLE IF EXISTS user_user;
|
||||
CREATE TABLE user_user (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
@@ -320,10 +345,12 @@ CREATE TABLE user_user (
|
||||
nickname VARCHAR(64) DEFAULT NULL,
|
||||
avatar_resource_id BIGINT UNSIGNED DEFAULT NULL COMMENT '头像 common_resource.id',
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
source_type VARCHAR(32) NOT NULL DEFAULT 'ORGANIC' COMMENT 'ORGANIC|PROMO_CODE|SHARE_LINK|FRIEND_REFERRAL|OFFLINE_EVENT|OTHER',
|
||||
source_type VARCHAR(32) NOT NULL DEFAULT 'ORGANIC' COMMENT 'ORGANIC|PROMO_CODE|SHARE_LINK|FRIEND_REFERRAL|OFFLINE_EVENT|PARTNER_PROXY|PARTNER_ASSOC|OTHER',
|
||||
source_ref_id BIGINT UNSIGNED DEFAULT NULL COMMENT 'promo_code_id 或 referrer_user_id',
|
||||
source_label VARCHAR(128) DEFAULT NULL COMMENT '渠道名称快照',
|
||||
referrer_user_id BIGINT UNSIGNED DEFAULT NULL COMMENT '好友推荐人 user_user.id',
|
||||
assoc_partner_account_id BIGINT UNSIGNED DEFAULT NULL,
|
||||
assoc_bound_at DATETIME(3) DEFAULT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
@@ -332,10 +359,26 @@ CREATE TABLE user_user (
|
||||
UNIQUE KEY uk_user_user_device_key (device_key),
|
||||
KEY idx_user_user_source (source_type, source_ref_id),
|
||||
KEY idx_user_user_referrer (referrer_user_id),
|
||||
KEY idx_user_user_assoc_partner (assoc_partner_account_id),
|
||||
KEY idx_user_user_merged (merged_into_user_id),
|
||||
KEY idx_user_user_wx_open (wx_open_id)
|
||||
KEY idx_user_user_wx_open (wx_open_id),
|
||||
CONSTRAINT fk_user_user_assoc_partner FOREIGN KEY (assoc_partner_account_id) REFERENCES partner_account(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='C端用户';
|
||||
|
||||
CREATE TABLE partner_user_note (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
partner_account_id BIGINT UNSIGNED NOT NULL,
|
||||
user_id BIGINT UNSIGNED NOT NULL,
|
||||
remark VARCHAR(128) NOT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_partner_user_note_partner_user (partner_account_id, user_id),
|
||||
KEY idx_partner_user_note_user (user_id),
|
||||
CONSTRAINT fk_partner_user_note_partner FOREIGN KEY (partner_account_id) REFERENCES partner_account(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_partner_user_note_user FOREIGN KEY (user_id) REFERENCES user_user(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='主合伙人对关联用户的备注';
|
||||
|
||||
DROP TABLE IF EXISTS user_address;
|
||||
CREATE TABLE user_address (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
@@ -579,6 +622,9 @@ CREATE TABLE user_store_rating (
|
||||
store_id BIGINT UNSIGNED NOT NULL,
|
||||
service_score TINYINT NOT NULL,
|
||||
env_score TINYINT NOT NULL,
|
||||
comment VARCHAR(200) NULL,
|
||||
tags JSON NULL,
|
||||
image_urls JSON NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user_store_rating_redeem (redeem_record_id),
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
-- v4.0.1:合伙人关联码 + 用户关联 + 账单明细
|
||||
|
||||
ALTER TABLE `partner_account`
|
||||
ADD COLUMN `assoc_qrcode_id` VARCHAR(64) DEFAULT NULL AFTER `managed_warehouse_id`,
|
||||
ADD COLUMN `assoc_qrcode_resource_id` BIGINT UNSIGNED DEFAULT NULL AFTER `assoc_qrcode_id`,
|
||||
ADD UNIQUE KEY `uk_partner_account_assoc_qrcode` (`assoc_qrcode_id`);
|
||||
|
||||
ALTER TABLE `user_user`
|
||||
ADD COLUMN `assoc_partner_account_id` BIGINT UNSIGNED DEFAULT NULL AFTER `referrer_user_id`,
|
||||
ADD COLUMN `assoc_bound_at` DATETIME(3) DEFAULT NULL AFTER `assoc_partner_account_id`,
|
||||
ADD KEY `idx_user_user_assoc_partner` (`assoc_partner_account_id`);
|
||||
|
||||
ALTER TABLE `user_user`
|
||||
ADD CONSTRAINT `fk_user_user_assoc_partner`
|
||||
FOREIGN KEY (`assoc_partner_account_id`) REFERENCES `partner_account`(`id`) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `partner_bill_item` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`partner_bill_id` BIGINT UNSIGNED NOT NULL,
|
||||
`kind` VARCHAR(16) NOT NULL COMMENT 'ORDER|REDEEM',
|
||||
`ref_id` BIGINT UNSIGNED NOT NULL,
|
||||
`ref_no` VARCHAR(32) NOT NULL,
|
||||
`title` VARCHAR(128) DEFAULT NULL,
|
||||
`extra` VARCHAR(128) DEFAULT NULL,
|
||||
`base_amount` DECIMAL(10,2) NOT NULL,
|
||||
`rate` DECIMAL(5,4) NOT NULL,
|
||||
`commission` DECIMAL(10,2) NOT NULL,
|
||||
`occurred_at` DATETIME(3) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_partner_bill_item_kind_ref` (`kind`, `ref_id`),
|
||||
KEY `idx_partner_bill_item_bill` (`partner_bill_id`),
|
||||
CONSTRAINT `fk_partner_bill_item_bill` FOREIGN KEY (`partner_bill_id`) REFERENCES `partner_bill`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合伙人账单明细';
|
||||
@@ -0,0 +1,16 @@
|
||||
-- v4.0.1:合伙人可见用户备注(与 HQ hq_remark 隔离)
|
||||
-- Review 后再在生产执行。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `partner_user_note` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`partner_account_id` BIGINT UNSIGNED NOT NULL,
|
||||
`user_id` BIGINT UNSIGNED NOT NULL,
|
||||
`remark` VARCHAR(128) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_partner_user_note_partner_user` (`partner_account_id`, `user_id`),
|
||||
KEY `idx_partner_user_note_user` (`user_id`),
|
||||
CONSTRAINT `fk_partner_user_note_partner` FOREIGN KEY (`partner_account_id`) REFERENCES `partner_account`(`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `fk_partner_user_note_user` FOREIGN KEY (`user_id`) REFERENCES `user_user`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='主合伙人对关联用户的备注';
|
||||
@@ -0,0 +1,5 @@
|
||||
-- v3.5.12:核销评价补充说明 / 标签 / 图片
|
||||
ALTER TABLE `user_store_rating`
|
||||
ADD COLUMN `comment` VARCHAR(200) NULL AFTER `env_score`,
|
||||
ADD COLUMN `tags` JSON NULL AFTER `comment`,
|
||||
ADD COLUMN `image_urls` JSON NULL AFTER `tags`;
|
||||
@@ -339,9 +339,15 @@ enum UserSourceType {
|
||||
FRIEND_REFERRAL
|
||||
OFFLINE_EVENT
|
||||
PARTNER_PROXY
|
||||
PARTNER_ASSOC
|
||||
OTHER
|
||||
}
|
||||
|
||||
enum PartnerBillItemKind {
|
||||
ORDER
|
||||
REDEEM
|
||||
}
|
||||
|
||||
enum OrderType {
|
||||
NORMAL
|
||||
RESHIPMENT
|
||||
@@ -636,6 +642,7 @@ model CommonResource {
|
||||
|
||||
productCovers CommonProductItem[] @relation("ProductCover")
|
||||
promoQrcodes CommonPromoCode[] @relation("PromoQrcode")
|
||||
partnerAssocQrcodes PartnerAccount[] @relation("PartnerAssocQrcode")
|
||||
userAvatars User[] @relation("UserAvatar")
|
||||
storeCovers Store[] @relation("StoreCover")
|
||||
orderImages Order[] @relation("OrderProductImage")
|
||||
@@ -1195,6 +1202,8 @@ model PartnerAccount {
|
||||
bankBranch String? @map("bank_branch") @db.VarChar(128)
|
||||
weeklyStoreTarget Int? @default(20) @map("weekly_store_target")
|
||||
managedWarehouseId BigInt? @unique @map("managed_warehouse_id") @db.UnsignedBigInt
|
||||
assocQrcodeId String? @unique @map("assoc_qrcode_id") @db.VarChar(64)
|
||||
assocQrcodeResourceId BigInt? @map("assoc_qrcode_resource_id") @db.UnsignedBigInt
|
||||
/// 测试合伙人账号
|
||||
isTest Boolean @default(false) @map("is_test")
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
@@ -1207,6 +1216,9 @@ model PartnerAccount {
|
||||
children PartnerAccount[] @relation("PartnerAccountHierarchy")
|
||||
stores Store[]
|
||||
bills PartnerBill[]
|
||||
assocUsers User[] @relation("UserPartnerAssoc")
|
||||
userNotes PartnerUserNote[]
|
||||
assocQrcodeResource CommonResource? @relation("PartnerAssocQrcode", fields: [assocQrcodeResourceId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([cityId, scopeType])
|
||||
@@index([cityId, isPrimary])
|
||||
@@ -1217,6 +1229,23 @@ model PartnerAccount {
|
||||
@@map("partner_account")
|
||||
}
|
||||
|
||||
/// 主合伙人对关联用户的备注;与 HQ hqRemark 隔离,换绑不跟随
|
||||
model PartnerUserNote {
|
||||
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
|
||||
partnerAccountId BigInt @map("partner_account_id") @db.UnsignedBigInt
|
||||
userId BigInt @map("user_id") @db.UnsignedBigInt
|
||||
remark String @db.VarChar(128)
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
|
||||
|
||||
partner PartnerAccount @relation(fields: [partnerAccountId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([partnerAccountId, userId])
|
||||
@@index([userId])
|
||||
@@map("partner_user_note")
|
||||
}
|
||||
|
||||
model PartnerBill {
|
||||
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
|
||||
billNo String @unique @map("bill_no") @db.VarChar(32)
|
||||
@@ -1235,12 +1264,34 @@ model PartnerBill {
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
|
||||
partnerAccount PartnerAccount @relation(fields: [partnerAccountId], references: [id], onDelete: Restrict)
|
||||
items PartnerBillItem[]
|
||||
|
||||
@@index([partnerAccountId, status])
|
||||
@@unique([partnerAccountId, periodStart])
|
||||
@@map("partner_bill")
|
||||
}
|
||||
|
||||
model PartnerBillItem {
|
||||
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
|
||||
partnerBillId BigInt @map("partner_bill_id") @db.UnsignedBigInt
|
||||
kind PartnerBillItemKind
|
||||
refId BigInt @map("ref_id") @db.UnsignedBigInt
|
||||
refNo String @map("ref_no") @db.VarChar(32)
|
||||
title String? @db.VarChar(128)
|
||||
extra String? @db.VarChar(128)
|
||||
baseAmount Decimal @map("base_amount") @db.Decimal(10, 2)
|
||||
rate Decimal @db.Decimal(5, 4)
|
||||
commission Decimal @db.Decimal(10, 2)
|
||||
occurredAt DateTime @map("occurred_at") @db.DateTime(3)
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
|
||||
partnerBill PartnerBill @relation(fields: [partnerBillId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([kind, refId])
|
||||
@@index([partnerBillId])
|
||||
@@map("partner_bill_item")
|
||||
}
|
||||
|
||||
// ─── HQ ───────────────────────────────────────────────
|
||||
|
||||
model HqAccount {
|
||||
@@ -1322,6 +1373,8 @@ model User {
|
||||
sourceRefId BigInt? @map("source_ref_id") @db.UnsignedBigInt
|
||||
sourceLabel String? @map("source_label") @db.VarChar(128)
|
||||
referrerUserId BigInt? @map("referrer_user_id") @db.UnsignedBigInt
|
||||
assocPartnerAccountId BigInt? @map("assoc_partner_account_id") @db.UnsignedBigInt
|
||||
assocBoundAt DateTime? @map("assoc_bound_at") @db.DateTime(3)
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
|
||||
|
||||
@@ -1329,6 +1382,8 @@ model User {
|
||||
mergedFrom User[] @relation("UserMerge")
|
||||
referrer User? @relation("UserReferrer", fields: [referrerUserId], references: [id], onDelete: SetNull)
|
||||
referrers User[] @relation("UserReferrer")
|
||||
assocPartner PartnerAccount? @relation("UserPartnerAssoc", fields: [assocPartnerAccountId], references: [id], onDelete: SetNull)
|
||||
partnerNotes PartnerUserNote[]
|
||||
avatar CommonResource? @relation("UserAvatar", fields: [avatarResourceId], references: [id], onDelete: SetNull)
|
||||
addresses UserAddress[]
|
||||
cityPreference UserCityPreference?
|
||||
@@ -1343,6 +1398,7 @@ model User {
|
||||
|
||||
@@index([sourceType, sourceRefId])
|
||||
@@index([referrerUserId])
|
||||
@@index([assocPartnerAccountId])
|
||||
@@index([mergedIntoUserId])
|
||||
@@index([wxOpenId])
|
||||
@@index([isTest])
|
||||
@@ -1877,6 +1933,9 @@ model StoreRating {
|
||||
storeId BigInt @map("store_id") @db.UnsignedBigInt
|
||||
serviceScore Int @map("service_score") @db.TinyInt
|
||||
envScore Int @map("env_score") @db.TinyInt
|
||||
comment String? @db.VarChar(200)
|
||||
tags Json?
|
||||
imageUrls Json? @map("image_urls")
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||
|
||||
redeemRecord RedeemRecord @relation(fields: [redeemRecordId], references: [id], onDelete: Cascade)
|
||||
|
||||
Reference in New Issue
Block a user