V3.0: 门店分级与风险等级页面、数据填充脚本、后端API
- 新增V3.0数据库表结构(12-15)和数据填充脚本(16)
- 新增后端路由: store-grade, enterprise, product, intelligence, alert, scheduler, target
- 新增前端页面: StoreGradePage, EnterprisePage, ProductLifecyclePage, IntelligencePage, AlertManagementPage, DataImportPage, SchedulerManagementPage, TargetManagementPage
- 门店分级: 自动分级算法(达成率40%+毛利率25%+会员15%+风险20%)
- 风险等级: 基于mv_store_risk_rating模型展示风险分布和原因
- 弹窗: 雷达图+详细指标+分级原因+风险原因(primary_issue)
- FilterableTable: filterOptions支持{value,label}对象格式
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
-- ============================================================
|
||||
-- 13_v3_phase1_remaining.sql
|
||||
-- Phase 1 剩余表: 产品生命周期 + 评价归因 + 数据管道 + 审计
|
||||
-- ============================================================
|
||||
|
||||
-- T-170: 产品生命周期
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_product_lifecycle (
|
||||
id SERIAL PRIMARY KEY,
|
||||
sku_code TEXT NOT NULL,
|
||||
sku_name TEXT,
|
||||
launch_date DATE NOT NULL,
|
||||
lifecycle_stage TEXT DEFAULT '爬坡', -- 爬坡/成熟/衰退/淘汰
|
||||
survival_status TEXT, -- 存活/淘汰/待判定
|
||||
first_week_report_date DATE,
|
||||
day90_report_date DATE,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(sku_code)
|
||||
);
|
||||
|
||||
-- T-171: 顾客评价数据
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_customer_review (
|
||||
id SERIAL PRIMARY KEY,
|
||||
review_source TEXT NOT NULL, -- 美团/饿了么/京东/门店
|
||||
store_code TEXT,
|
||||
store_name TEXT,
|
||||
sku_code TEXT,
|
||||
sku_name TEXT,
|
||||
rating INT,
|
||||
content TEXT,
|
||||
nlp_category TEXT, -- 口味/服务/环境/异物/分量
|
||||
nlp_sentiment TEXT, -- 正面/负面/中性
|
||||
review_date DATE NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- T-150: 数据导入日志
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_data_import_log (
|
||||
id SERIAL PRIMARY KEY,
|
||||
import_type TEXT NOT NULL, -- POS/外卖/库存/费用/薪资
|
||||
status TEXT DEFAULT 'pending', -- pending/running/success/failed
|
||||
records_count INT DEFAULT 0,
|
||||
error_message TEXT,
|
||||
started_at TIMESTAMPTZ,
|
||||
completed_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- T-153: 数据清洗规则
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_data_quality_rule (
|
||||
id SERIAL PRIMARY KEY,
|
||||
rule_name TEXT NOT NULL,
|
||||
table_name TEXT NOT NULL,
|
||||
column_name TEXT,
|
||||
rule_type TEXT NOT NULL, -- range/null_check/regex/custom
|
||||
rule_config JSONB,
|
||||
is_enabled BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- T-154: 库存快照
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_inventory_snapshot (
|
||||
id SERIAL PRIMARY KEY,
|
||||
snapshot_date DATE NOT NULL,
|
||||
store_code TEXT NOT NULL,
|
||||
sku_code TEXT NOT NULL,
|
||||
sku_name TEXT,
|
||||
quantity NUMERIC(12,2),
|
||||
unit TEXT,
|
||||
expiry_date DATE,
|
||||
is_near_expiry BOOLEAN DEFAULT false,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(snapshot_date, store_code, sku_code)
|
||||
);
|
||||
|
||||
-- T-195: 月度经营分析报告
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_monthly_report (
|
||||
id SERIAL PRIMARY KEY,
|
||||
report_month DATE NOT NULL,
|
||||
report_type TEXT NOT NULL, -- monthly/mid_month/weekly/daily
|
||||
store_code TEXT,
|
||||
region TEXT,
|
||||
content JSONB,
|
||||
summary TEXT,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(report_month, report_type, store_code)
|
||||
);
|
||||
|
||||
-- T-112: 目标偏差分析
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_target_variance (
|
||||
id SERIAL PRIMARY KEY,
|
||||
report_month DATE NOT NULL,
|
||||
store_code TEXT NOT NULL,
|
||||
store_name TEXT,
|
||||
revenue_target NUMERIC(14,2),
|
||||
revenue_actual NUMERIC(14,2),
|
||||
achievement_pct NUMERIC(5,2),
|
||||
variance_amount NUMERIC(14,2),
|
||||
variance_reasons TEXT, -- 客流/客单/成本/损耗
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(report_month, store_code)
|
||||
);
|
||||
|
||||
-- T-113: 预算锁定
|
||||
CREATE TABLE IF NOT EXISTS analytics.v3_budget_lock (
|
||||
id SERIAL PRIMARY KEY,
|
||||
lock_month DATE NOT NULL,
|
||||
store_code TEXT NOT NULL,
|
||||
lock_reason TEXT,
|
||||
root_cause_analysis TEXT,
|
||||
approval_status TEXT DEFAULT 'pending', -- pending/approved/rejected
|
||||
approved_by TEXT,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(lock_month, store_code)
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_product_lifecycle_stage ON analytics.v3_product_lifecycle(lifecycle_stage);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_customer_review_date ON analytics.v3_customer_review(review_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_customer_review_store ON analytics.v3_customer_review(store_code);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_customer_review_nlp ON analytics.v3_customer_review(nlp_category);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_data_import_log_type ON analytics.v3_data_import_log(import_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_inventory_snapshot_date ON analytics.v3_inventory_snapshot(snapshot_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_monthly_report_month ON analytics.v3_monthly_report(report_month);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_target_variance_month ON analytics.v3_target_variance(report_month);
|
||||
CREATE INDEX IF NOT EXISTS idx_v3_budget_lock_month ON analytics.v3_budget_lock(lock_month);
|
||||
Reference in New Issue
Block a user