p-honggang.li
5 天以前 ac918503bb5e8fad007348e7e39ba7275b75f334
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
-- 交易模块数据库表创建脚本
-- 创建时间: 2024-08-07
-- 数据库: PostgreSQL
 
-- 1. 产品定价表 (product_pricing)
CREATE TABLE product_pricing (
    id BIGSERIAL PRIMARY KEY,
    suite_name VARCHAR(100) NOT NULL COMMENT '产品套件名称',
    sales_form VARCHAR(20) NOT NULL CHECK (sales_form IN ('买断', '租赁', '私有增包量', '公有增包量', 'OTA服务', '资源包', '个人')) COMMENT '销售形式',
    customer_type VARCHAR(10) NOT NULL CHECK (customer_type IN ('企业', '个人', '项目部')) COMMENT '客户对象',
    account_limit VARCHAR(20) DEFAULT '不限' COMMENT '账户数量',
    concurrent_nodes VARCHAR(20) DEFAULT '不限' COMMENT '并发节点数',
    price_type VARCHAR(10) NOT NULL CHECK (price_type IN ('积分', '协议', '货币', '免费')) COMMENT '价格设置',
    price_unit VARCHAR(20) NOT NULL CHECK (price_unit IN ('套', '套/年', '年', '个', '次')) COMMENT '价格单位',
    price NUMERIC(15,2) NOT NULL COMMENT '价格值',
    is_active BOOLEAN DEFAULT TRUE COMMENT '启用状态',
    product_id BIGINT NOT NULL COMMENT '关联产品ID',
    product_name VARCHAR(100) COMMENT '产品名称',
    provider_id BIGINT COMMENT '产品提供者ID',
    provider_name VARCHAR(100) COMMENT '产品提供者名称',
    description TEXT COMMENT '产品描述',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by BIGINT COMMENT '创建人ID',
    updated_by BIGINT COMMENT '更新人ID',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 2. 购物车表 (shopping_cart)
CREATE TABLE shopping_cart (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL COMMENT '用户ID',
    unit_id BIGINT COMMENT '单位ID',
    suite_name VARCHAR(100) NOT NULL COMMENT '产品套件名称',
    sales_form VARCHAR(20) NOT NULL CHECK (sales_form IN ('买断', '租赁', '私有增包量', '公有增包量', 'OTA服务', '资源包', '个人')) COMMENT '销售形式',
    customer_type VARCHAR(10) NOT NULL CHECK (customer_type IN ('企业', '个人', '项目部')) COMMENT '客户对象',
    account_limit VARCHAR(20) DEFAULT '不限' COMMENT '账户数量',
    concurrent_nodes VARCHAR(20) DEFAULT '不限' COMMENT '并发节点数',
    price_type VARCHAR(10) NOT NULL CHECK (price_type IN ('积分', '协议', '货币', '免费')) COMMENT '价格类型',
    price_unit VARCHAR(20) NOT NULL CHECK (price_unit IN ('套', '套/年', '年', '个', '次')) COMMENT '价格单位',
    unit_price NUMERIC(15,2) NOT NULL COMMENT '单价',
    quantity INTEGER NOT NULL DEFAULT 1 COMMENT '数量',
    duration INTEGER COMMENT '期限(年)',
    product_id BIGINT NOT NULL COMMENT '产品ID',
    product_name VARCHAR(100) COMMENT '产品名称',
    provider_id BIGINT COMMENT '产品提供者ID',
    provider_name VARCHAR(100) COMMENT '产品提供者名称',
    total_amount NUMERIC(15,2) COMMENT '总金额',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 购物车表
CREATE TABLE IF NOT EXISTS cart (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL COMMENT '用户ID',
    unit_id BIGINT NOT NULL COMMENT '单位ID',
    pricing_id BIGINT NOT NULL COMMENT '商品定价ID',
    product_id BIGINT NOT NULL COMMENT '商品ID',
    product_name VARCHAR(255) COMMENT '商品名称',
    suite_name VARCHAR(255) COMMENT '商品套件名称',
    sales_form VARCHAR(100) COMMENT '销售形式',
    customer_type VARCHAR(100) COMMENT '客户对象',
    account_limit VARCHAR(100) COMMENT '账户数量',
    concurrent_nodes VARCHAR(100) COMMENT '并发节点数',
    price_type VARCHAR(100) COMMENT '价格类型',
    price_unit VARCHAR(100) COMMENT '价格单位',
    unit_price DECIMAL(15,2) NOT NULL COMMENT '单价',
    quantity INTEGER NOT NULL DEFAULT 1 COMMENT '数量',
    duration INTEGER COMMENT '年限',
    total_price DECIMAL(15,2) COMMENT '小计金额',
    provider_id BIGINT COMMENT '产品提供者ID',
    provider_name VARCHAR(255) COMMENT '产品提供者名称',
    remarks TEXT COMMENT '备注',
    add_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除',
    UNIQUE KEY uk_user_unit_pricing (user_id, unit_id, pricing_id, deleted)
);
 
-- 3. 订单表 (order_info)
CREATE TABLE order_info (
    order_id VARCHAR(50) PRIMARY KEY COMMENT '订单编号',
    product_id BIGINT NOT NULL COMMENT '产品ID',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    unit_id BIGINT COMMENT '单位ID',
    product_name VARCHAR(100) NOT NULL COMMENT '产品名称',
    provider_name VARCHAR(100) NOT NULL COMMENT '产品提供者名称',
    provider_id BIGINT NOT NULL COMMENT '提供者ID',
    apply_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
    order_status VARCHAR(20) NOT NULL DEFAULT '待审批' CHECK (order_status IN ('待审批', '待审批授权', '待授权', '待上传文件', '待交易确认', '已完成', '已取消', '已驳回')) COMMENT '订单状态',
    total_amount NUMERIC(15,2) NOT NULL COMMENT '订单总金额',
    payment_type VARCHAR(20) COMMENT '支付方式(积分/货币/协议)',
    payment_status VARCHAR(20) DEFAULT '未支付' CHECK (payment_status IN ('未支付', '已支付', '支付失败', '已退款')) COMMENT '支付状态',
    workflow_id VARCHAR(50) COMMENT '工作流ID',
    current_step VARCHAR(50) COMMENT '当前审批步骤',
    approval_flow TEXT COMMENT '审批流程配置',
    buyer_remarks TEXT COMMENT '买家备注',
    seller_remarks TEXT COMMENT '卖家备注',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 4. 订单详情表 (order_detail)
CREATE TABLE order_detail (
    id BIGSERIAL PRIMARY KEY,
    order_id VARCHAR(50) NOT NULL COMMENT '关联订单ID',
    pricing_id BIGINT NOT NULL COMMENT '关联产品定价ID',
    product_id BIGINT NOT NULL COMMENT '产品ID',
    suite_name VARCHAR(100) NOT NULL COMMENT '产品套件名称',
    sales_form VARCHAR(20) NOT NULL COMMENT '销售形式',
    customer_type VARCHAR(10) NOT NULL COMMENT '客户对象',
    account_limit VARCHAR(20) COMMENT '账户数量',
    concurrent_nodes VARCHAR(20) COMMENT '并发节点数',
    price_type VARCHAR(10) NOT NULL COMMENT '价格类型',
    price_unit VARCHAR(20) NOT NULL COMMENT '价格单位',
    unit_price NUMERIC(15,2) NOT NULL COMMENT '单价',
    quantity INTEGER NOT NULL COMMENT '数量',
    duration INTEGER COMMENT '年限',
    total_price NUMERIC(15,2) NOT NULL COMMENT '小计金额',
    provider_id BIGINT NOT NULL COMMENT '产品提供者ID',
    provider_name VARCHAR(100) COMMENT '产品提供者名称',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    remarks TEXT COMMENT '备注',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 5. 订单附件表 (order_attachment)
CREATE TABLE order_attachment (
    id BIGSERIAL PRIMARY KEY,
    order_id VARCHAR(50) NOT NULL COMMENT '关联订单ID',
    file_name VARCHAR(255) NOT NULL COMMENT '附件名称',
    original_name VARCHAR(255) COMMENT '原始文件名',
    file_type VARCHAR(50) NOT NULL COMMENT '附件类型',
    file_size BIGINT NOT NULL COMMENT '附件大小(字节)',
    file_url VARCHAR(500) NOT NULL COMMENT '附件地址',
    file_path VARCHAR(500) COMMENT '文件存储路径',
    bucket_name VARCHAR(100) COMMENT 'MinIO存储桶名称',
    object_name VARCHAR(500) COMMENT 'MinIO对象名称',
    upload_user_id BIGINT COMMENT '上传用户ID',
    upload_user_name VARCHAR(100) COMMENT '上传用户名',
    attachment_type VARCHAR(50) COMMENT '附件类型(合同/发票/其他)',
    description TEXT COMMENT '附件描述',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 6. 订单审核表 (order_approval)
CREATE TABLE order_approval (
    id BIGSERIAL PRIMARY KEY,
    order_id VARCHAR(50) NOT NULL COMMENT '关联订单ID',
    approval_step VARCHAR(50) NOT NULL COMMENT '审批步骤',
    approval_type VARCHAR(20) NOT NULL CHECK (approval_type IN ('审批', '授权')) COMMENT '审批类型',
    approval_opinion TEXT COMMENT '审核意见',
    approval_result VARCHAR(20) NOT NULL CHECK (approval_result IN ('通过', '驳回', '待处理')) COMMENT '审批结果',
    approver_id BIGINT NOT NULL COMMENT '审核人ID',
    approver_name VARCHAR(100) NOT NULL COMMENT '审核人姓名',
    approver_role VARCHAR(100) COMMENT '审核人角色',
    approval_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '审核时间',
    next_approver_id BIGINT COMMENT '下一审批人ID',
    next_approver_name VARCHAR(100) COMMENT '下一审批人姓名',
    workflow_status VARCHAR(20) COMMENT '工作流状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 7. 订单评价表 (order_evaluation)
CREATE TABLE order_evaluation (
    id BIGSERIAL PRIMARY KEY,
    order_id VARCHAR(50) NOT NULL COMMENT '关联订单ID',
    evaluator_id BIGINT NOT NULL COMMENT '评价人ID',
    evaluator_name VARCHAR(100) NOT NULL COMMENT '评价人姓名',
    evaluator_type VARCHAR(20) NOT NULL CHECK (evaluator_type IN ('买家', '卖家')) COMMENT '评价人类型',
    content TEXT NOT NULL COMMENT '评价内容',
    rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5) COMMENT '评分(1-5)',
    service_rating INTEGER CHECK (service_rating >= 1 AND service_rating <= 5) COMMENT '服务评分',
    quality_rating INTEGER CHECK (quality_rating >= 1 AND quality_rating <= 5) COMMENT '质量评分',
    delivery_rating INTEGER CHECK (delivery_rating >= 1 AND delivery_rating <= 5) COMMENT '交付评分',
    is_anonymous BOOLEAN DEFAULT FALSE COMMENT '是否匿名评价',
    reply_content TEXT COMMENT '回复内容',
    reply_user_id BIGINT COMMENT '回复用户ID',
    reply_time TIMESTAMP COMMENT '回复时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 8. 积分表 (points)
CREATE TABLE points (
    id BIGSERIAL PRIMARY KEY,
    points_name VARCHAR(100) NOT NULL COMMENT '积分名称',
    points_code VARCHAR(50) NOT NULL UNIQUE COMMENT '积分编码',
    points_type VARCHAR(20) NOT NULL CHECK (points_type IN ('个人积分', '单位积分', '产品积分')) COMMENT '积分类型',
    effective_start DATE NOT NULL COMMENT '生效开始时间',
    effective_end DATE COMMENT '生效结束时间',
    modifier_id BIGINT NOT NULL COMMENT '修改人ID',
    modifier_name VARCHAR(100) NOT NULL COMMENT '修改人姓名',
    version VARCHAR(20) NOT NULL COMMENT '版本号',
    description TEXT COMMENT '积分描述',
    status VARCHAR(10) DEFAULT '启用' CHECK (status IN ('启用', '禁用')) COMMENT '状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 9. 积分规则表 (points_rule) - 更新现有表结构
ALTER TABLE points_rule ADD COLUMN IF NOT EXISTS points_id BIGINT COMMENT '关联积分ID';
ALTER TABLE points_rule ADD COLUMN IF NOT EXISTS rule_code VARCHAR(50) COMMENT '规则编码';
ALTER TABLE points_rule ADD COLUMN IF NOT EXISTS effective_start DATE COMMENT '生效开始时间';
ALTER TABLE points_rule ADD COLUMN IF NOT EXISTS effective_end DATE COMMENT '生效结束时间';
ALTER TABLE points_rule ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 0 COMMENT '优先级';
 
-- 10. 积分规则详情表 (points_rule_detail)
CREATE TABLE points_rule_detail (
    id BIGSERIAL PRIMARY KEY,
    rule_id BIGINT NOT NULL COMMENT '关联积分规则ID',
    points_id BIGINT NOT NULL COMMENT '关联积分ID',
    points_value INTEGER NOT NULL COMMENT '积分值',
    daily_limit INTEGER COMMENT '每日积分上限值',
    monthly_limit INTEGER COMMENT '每月积分上限值',
    yearly_limit INTEGER COMMENT '每年积分上限值',
    min_value INTEGER DEFAULT 0 COMMENT '最小值',
    max_value INTEGER COMMENT '最大值',
    conversion_rate NUMERIC(10,4) DEFAULT 1.0 COMMENT '转换比率',
    effective_start DATE COMMENT '生效开始时间',
    effective_end DATE COMMENT '生效结束时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 11. 积分流水表 (points_transaction) - 新增字段
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS transaction_type VARCHAR(20) COMMENT '交易类型(获取/消耗/转换)';
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS related_id VARCHAR(50) COMMENT '关联业务ID';
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS related_type VARCHAR(50) COMMENT '关联业务类型';
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS balance_after INTEGER COMMENT '变动后余额';
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS operator_id BIGINT COMMENT '操作人ID';
ALTER TABLE points_flow ADD COLUMN IF NOT EXISTS operator_name VARCHAR(100) COMMENT '操作人姓名';
 
-- 12. 积分账户表 (points_account) - 更新现有表结构
ALTER TABLE user_points ADD COLUMN IF NOT EXISTS account_type VARCHAR(20) DEFAULT '个人积分' COMMENT '账户类型(个人积分/单位积分)';
ALTER TABLE user_points ADD COLUMN IF NOT EXISTS account_status VARCHAR(20) DEFAULT '正常' COMMENT '账户状态(正常/冻结/注销)';
ALTER TABLE user_points ADD COLUMN IF NOT EXISTS last_transaction_time TIMESTAMP COMMENT '最后交易时间';
 
-- 13. 产品表 (product) - 新增产品基础表
CREATE TABLE product (
    id BIGSERIAL PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL COMMENT '产品名称',
    product_code VARCHAR(50) NOT NULL UNIQUE COMMENT '产品编码',
    product_type VARCHAR(50) COMMENT '产品类型',
    category VARCHAR(100) COMMENT '产品分类',
    description TEXT COMMENT '产品描述',
    provider_id BIGINT NOT NULL COMMENT '提供者ID',
    provider_name VARCHAR(100) NOT NULL COMMENT '提供者名称',
    provider_type VARCHAR(20) COMMENT '提供者类型(企业/个人)',
    status VARCHAR(20) DEFAULT '上架' CHECK (status IN ('上架', '下架', '审核中', '已下架')) COMMENT '产品状态',
    audit_status VARCHAR(20) DEFAULT '待审核' CHECK (audit_status IN ('待审核', '审核通过', '审核驳回')) COMMENT '审核状态',
    tags TEXT COMMENT '产品标签(JSON格式)',
    cover_image VARCHAR(500) COMMENT '封面图片',
    demo_url VARCHAR(500) COMMENT '演示地址',
    doc_url VARCHAR(500) COMMENT '文档地址',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by BIGINT COMMENT '创建人ID',
    updated_by BIGINT COMMENT '更新人ID',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 14. 用户表 (user) - 新增用户基础表
CREATE TABLE user (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(100) NOT NULL UNIQUE COMMENT '用户名',
    real_name VARCHAR(100) COMMENT '真实姓名',
    email VARCHAR(100) COMMENT '邮箱',
    phone VARCHAR(20) COMMENT '手机号',
    avatar VARCHAR(500) COMMENT '头像',
    user_type VARCHAR(20) DEFAULT '个人用户' CHECK (user_type IN ('个人用户', '单位用户')) COMMENT '用户类型',
    unit_id BIGINT COMMENT '单位ID',
    unit_name VARCHAR(100) COMMENT '单位名称',
    status VARCHAR(20) DEFAULT '正常' CHECK (status IN ('正常', '冻结', '注销')) COMMENT '用户状态',
    last_login_time TIMESTAMP COMMENT '最后登录时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 15. 单位表 (unit) - 新增单位基础表
CREATE TABLE unit (
    id BIGSERIAL PRIMARY KEY,
    unit_name VARCHAR(100) NOT NULL COMMENT '单位名称',
    unit_code VARCHAR(50) UNIQUE COMMENT '单位编码',
    unit_type VARCHAR(50) COMMENT '单位类型',
    industry VARCHAR(100) COMMENT '所属行业',
    address TEXT COMMENT '单位地址',
    contact_person VARCHAR(100) COMMENT '联系人',
    contact_phone VARCHAR(20) COMMENT '联系电话',
    contact_email VARCHAR(100) COMMENT '联系邮箱',
    business_license VARCHAR(500) COMMENT '营业执照',
    legal_person VARCHAR(100) COMMENT '法人代表',
    registered_capital NUMERIC(15,2) COMMENT '注册资本',
    establishment_date DATE COMMENT '成立日期',
    status VARCHAR(20) DEFAULT '正常' CHECK (status IN ('正常', '冻结', '注销')) COMMENT '单位状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    deleted INTEGER DEFAULT 0 COMMENT '逻辑删除:1-已删除,0-未删除'
);
 
-- 创建索引
CREATE INDEX idx_product_pricing_product_id ON product_pricing(product_id);
CREATE INDEX idx_product_pricing_status ON product_pricing(is_active);
CREATE INDEX idx_shopping_cart_user_id ON shopping_cart(user_id);
CREATE INDEX idx_shopping_cart_product_id ON shopping_cart(product_id);
CREATE INDEX idx_order_info_user_id ON order_info(user_id);
CREATE INDEX idx_order_info_provider_id ON order_info(provider_id);
CREATE INDEX idx_order_info_status ON order_info(order_status);
CREATE INDEX idx_order_info_apply_time ON order_info(apply_time);
CREATE INDEX idx_order_detail_order_id ON order_detail(order_id);
CREATE INDEX idx_order_attachment_order_id ON order_attachment(order_id);
CREATE INDEX idx_order_approval_order_id ON order_approval(order_id);
CREATE INDEX idx_order_approval_approver_id ON order_approval(approver_id);
CREATE INDEX idx_order_evaluation_order_id ON order_evaluation(order_id);
CREATE INDEX idx_order_evaluation_evaluator_id ON order_evaluation(evaluator_id);
CREATE INDEX idx_points_rule_points_id ON points_rule(points_id);
CREATE INDEX idx_points_rule_detail_rule_id ON points_rule_detail(rule_id);
CREATE INDEX idx_product_provider_id ON product(provider_id);
CREATE INDEX idx_product_status ON product(status);
CREATE INDEX idx_user_unit_id ON user(unit_id);
CREATE INDEX idx_user_status ON user(status);
 
-- 购物车表索引
CREATE INDEX idx_cart_user_unit ON cart(user_id, unit_id, deleted);
CREATE INDEX idx_cart_pricing ON cart(pricing_id, deleted);
CREATE INDEX idx_cart_product ON cart(product_id, deleted);
CREATE INDEX idx_cart_provider ON cart(provider_id, deleted);
CREATE INDEX idx_cart_add_time ON cart(add_time, deleted);
 
-- 添加外键约束
ALTER TABLE product_pricing ADD CONSTRAINT fk_product_pricing_product_id FOREIGN KEY (product_id) REFERENCES product(id);
ALTER TABLE shopping_cart ADD CONSTRAINT fk_shopping_cart_user_id FOREIGN KEY (user_id) REFERENCES user(id);
ALTER TABLE shopping_cart ADD CONSTRAINT fk_shopping_cart_product_id FOREIGN KEY (product_id) REFERENCES product(id);
ALTER TABLE order_info ADD CONSTRAINT fk_order_info_product_id FOREIGN KEY (product_id) REFERENCES product(id);
ALTER TABLE order_info ADD CONSTRAINT fk_order_info_user_id FOREIGN KEY (user_id) REFERENCES user(id);
ALTER TABLE order_info ADD CONSTRAINT fk_order_info_provider_id FOREIGN KEY (provider_id) REFERENCES user(id);
ALTER TABLE order_detail ADD CONSTRAINT fk_order_detail_order_id FOREIGN KEY (order_id) REFERENCES order_info(order_id);
ALTER TABLE order_detail ADD CONSTRAINT fk_order_detail_pricing_id FOREIGN KEY (pricing_id) REFERENCES product_pricing(id);
ALTER TABLE order_attachment ADD CONSTRAINT fk_order_attachment_order_id FOREIGN KEY (order_id) REFERENCES order_info(order_id);
ALTER TABLE order_approval ADD CONSTRAINT fk_order_approval_order_id FOREIGN KEY (order_id) REFERENCES order_info(order_id);
ALTER TABLE order_evaluation ADD CONSTRAINT fk_order_evaluation_order_id FOREIGN KEY (order_id) REFERENCES order_info(order_id);
ALTER TABLE points_rule ADD CONSTRAINT fk_points_rule_points_id FOREIGN KEY (points_id) REFERENCES points(id);
ALTER TABLE points_rule_detail ADD CONSTRAINT fk_points_rule_detail_rule_id FOREIGN KEY (points_rule_id) REFERENCES points_rule(id);
ALTER TABLE points_rule_detail ADD CONSTRAINT fk_points_rule_detail_points_id FOREIGN KEY (points_id) REFERENCES points(id);
ALTER TABLE product ADD CONSTRAINT fk_product_provider_id FOREIGN KEY (provider_id) REFERENCES user(id);
ALTER TABLE user ADD CONSTRAINT fk_user_unit_id FOREIGN KEY (unit_id) REFERENCES unit(id);
 
-- 添加表注释
COMMENT ON TABLE product_pricing IS '产品定价表';
COMMENT ON TABLE shopping_cart IS '购物车表';
COMMENT ON TABLE order_info IS '订单表';
COMMENT ON TABLE order_detail IS '订单详情表';
COMMENT ON TABLE order_attachment IS '订单附件表';
COMMENT ON TABLE order_approval IS '订单审核表';
COMMENT ON TABLE order_evaluation IS '订单评价表';
COMMENT ON TABLE points IS '积分表';
COMMENT ON TABLE points_rule_detail IS '积分规则详情表';
COMMENT ON TABLE product IS '产品表';
COMMENT ON TABLE user IS '用户表';
COMMENT ON TABLE unit IS '单位表';
 
-- 插入初始数据
INSERT INTO points (points_name, points_code, points_type, effective_start, modifier_id, modifier_name, version, description, status) VALUES
('数字化标杆个人积分', 'BENCHMARK_PERSONAL', '个人积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化标杆个人积分体系', '启用'),
('数字化标杆单位积分', 'BENCHMARK_UNIT', '单位积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化标杆单位积分体系', '启用'),
('数字化知识个人积分', 'KNOWLEDGE_PERSONAL', '个人积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化知识个人积分体系', '启用'),
('数字化知识单位积分', 'KNOWLEDGE_UNIT', '单位积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化知识单位积分体系', '启用'),
('数字化产品个人积分', 'PRODUCT_PERSONAL', '个人积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化产品个人积分体系', '启用'),
('数字化产品单位积分', 'PRODUCT_UNIT', '单位积分', '2024-01-01', 1, '系统管理员', '1.0.0', '数字化产品单位积分体系', '启用');
 
-- 插入测试单位数据
INSERT INTO unit (unit_name, unit_code, unit_type, industry, status) VALUES
('测试企业', 'TEST_ENTERPRISE', '企业', '信息技术', '正常'),
('测试单位', 'TEST_UNIT', '事业单位', '教育', '正常');
 
-- 插入测试用户数据
INSERT INTO user (username, real_name, user_type, unit_id, status) VALUES
('admin', '系统管理员', '个人用户', NULL, '正常'),
('test_user', '测试用户', '个人用户', 1, '正常'),
('test_provider', '测试提供者', '单位用户', 1, '正常');
 
-- 插入测试产品数据
INSERT INTO product (product_name, product_code, product_type, category, description, provider_id, provider_name, status, audit_status) VALUES
('测试产品1', 'TEST_PRODUCT_001', '软件产品', '企业管理', '这是一个测试产品', 3, '测试提供者', '上架', '审核通过'),
('测试产品2', 'TEST_PRODUCT_002', '服务产品', '技术服务', '这是另一个测试产品', 3, '测试提供者', '上架', '审核通过');
 
-- 插入测试产品定价数据
INSERT INTO product_pricing (suite_name, sales_form, customer_type, price_type, price_unit, price, product_id, product_name, provider_id, provider_name, is_active) VALUES
('基础版', '买断', '企业', '积分', '套', 1000, 1, '测试产品1', 3, '测试提供者', true),
('专业版', '租赁', '企业', '积分', '套/年', 500, 1, '测试产品1', 3, '测试提供者', true),
('企业版', '买断', '企业', '货币', '套', 10000, 2, '测试产品2', 3, '测试提供者', true);