This commit is contained in:
2026-03-25 14:55:34 +08:00
commit 2c44b3a4b2
131 changed files with 7453 additions and 0 deletions

291
doc/db.sql Normal file
View File

@@ -0,0 +1,291 @@
CREATE TABLE IF NOT EXISTS district (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
parent_id integer NOT NULL DEFAULT 0,
code varchar(10) NOT NULL,
"name" varchar(20),
full_name varchar(100) NOT NULL,
pinyin varchar(200),
"level" smallint NOT NULL,
latitude varchar(20),
longitude varchar(20),
"order" smallint NOT NULL
);
COMMENT ON TABLE district IS '行政区划';
COMMENT ON COLUMN district.id IS '主键';
COMMENT ON COLUMN district.parent_id IS '父级id顶级时为0';
COMMENT ON COLUMN district.code IS '编码';
COMMENT ON COLUMN district.name IS '简称';
COMMENT ON COLUMN district.full_name IS '全称';
COMMENT ON COLUMN district.pinyin IS '名称拼音';
COMMENT ON COLUMN district.level IS '层级1-省/直辖市2-市/直辖市无3-区4-街道';
COMMENT ON COLUMN district.latitude IS '经度';
COMMENT ON COLUMN district.longitude IS '纬度';
COMMENT ON COLUMN district.order IS '层级中序号';
CREATE TABLE IF NOT EXISTS "user" (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
account varchar(20) NOT NULL,
nick_name varchar(50) NOT NULL,
avatar varchar(50),
"current_role" char(1) NOT NULL DEFAULT 'c',
telephone varchar(20),
"password" varchar(128) NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login_time timestamp
);
COMMENT ON TABLE "user" IS '用户';
COMMENT ON COLUMN "user".id IS '主键';
COMMENT ON COLUMN "user".account IS '登录账号';
COMMENT ON COLUMN "user".nick_name IS '昵称';
COMMENT ON COLUMN "user".avatar IS '头像图片名,后台生成链接';
COMMENT ON COLUMN "user"."current_role" IS '当前角色c-买家s-卖家';
COMMENT ON COLUMN "user".telephone IS '电话';
COMMENT ON COLUMN "user"."password" IS '密码(已加密)';
COMMENT ON COLUMN "user".create_time IS '创建时间';
COMMENT ON COLUMN "user".last_login_time IS '最后登录时间';
CREATE TABLE IF NOT EXISTS address (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id integer NOT NULL,
"name" varchar(20) NOT NULL,
telephone varchar(20) NOT NULL,
tag varchar(20),
"default" boolean NOT NULL DEFAULT FALSE,
district_level1_id integer NOT NULL,
district_level2_id integer,
district_level3_id integer NOT NULL,
district_level4_id integer NOT NULL,
detail varchar(200),
CONSTRAINT fk_UserAddress FOREIGN KEY (user_id) REFERENCES "user"(id)
);
COMMENT ON TABLE address IS '收货地址';
COMMENT ON COLUMN address.id IS '主键';
COMMENT ON COLUMN address.user_id IS '用户表id';
COMMENT ON COLUMN address.name IS '收货人地址';
COMMENT ON COLUMN address.telephone IS '联系电话';
COMMENT ON COLUMN address.tag IS '自定义标签:学校、家等';
COMMENT ON COLUMN address.default IS '是否默认地址';
COMMENT ON COLUMN address.district_level1_id IS '行政区域id表示省/直辖市';
COMMENT ON COLUMN address.district_level2_id IS '行政区域id表示市/直辖市为空';
COMMENT ON COLUMN address.district_level3_id IS '行政区域id表示区';
COMMENT ON COLUMN address.district_level4_id IS '行政区域id表示街道/镇';
COMMENT ON COLUMN address.detail IS '详细地址';
CREATE TABLE IF NOT EXISTS administrator (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
account varchar(20) NOT NULL,
nick_name varchar(50) NOT NULL,
"password" varchar(128) NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login_time timestamp NOT NULL
);
COMMENT ON TABLE administrator IS '管理员';
COMMENT ON COLUMN administrator.id IS '主键';
COMMENT ON COLUMN administrator.account IS '登录账号';
COMMENT ON COLUMN administrator.nick_name IS '昵称';
COMMENT ON COLUMN administrator.password IS '登录密码(已加密)';
COMMENT ON COLUMN administrator.create_time IS '创建时间';
COMMENT ON COLUMN administrator.last_login_time IS '最后登录时间';
CREATE TABLE IF NOT EXISTS category (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
parent_id integer NOT NULL DEFAULT 0,
"path" varchar(50) NOT NULL,
"name" varchar(50) NOT NULL,
"level" smallint NOT NULL,
logo varchar(50),
"order" smallint NOT NULL,
deleted boolean NOT NULL DEFAULT FALSE
);
COMMENT ON TABLE category IS '商品分类';
COMMENT ON COLUMN category.id IS '主键';
COMMENT ON COLUMN category.parent_id IS '父级id顶级为0';
COMMENT ON COLUMN category.path IS 'id路径枚举/1/2/3/';
COMMENT ON COLUMN category.name IS '名称';
COMMENT ON COLUMN category.level IS '层级从1开始';
COMMENT ON COLUMN category.logo IS 'logo图片名后台生成地址';
COMMENT ON COLUMN category.order IS '层级中序号';
COMMENT ON COLUMN category.deleted IS '软删除标识';
CREATE TABLE IF NOT EXISTS product (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
serial_no varchar(20) NOT NULL,
"name" varchar(100) NOT NULL,
description varchar(200),
logo varchar(50) NOT NULL,
category_id integer NOT NULL,
user_id integer NOT NULL,
minimum_unit varchar(20) NOT NULL,
unit_price numeric(11, 2) NOT NULL DEFAULT 0,
detail text,
sold_amount integer NOT NULL DEFAULT 0,
deleted boolean NOT NULL DEFAULT FALSE,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_CategoryProduct FOREIGN KEY (category_id) REFERENCES category(id)
);
COMMENT ON TABLE product IS '卖家商品表';
COMMENT ON COLUMN product.id IS '主键';
COMMENT ON COLUMN product.serial_no IS '系统唯一编号';
COMMENT ON COLUMN product.name IS '名称';
COMMENT ON COLUMN product.description IS '商品描述';
COMMENT ON COLUMN product.logo IS '商品图片';
COMMENT ON COLUMN product.category_id IS '商品分类id';
COMMENT ON COLUMN product.user_id IS '用户id';
COMMENT ON COLUMN product.minimum_unit IS '最小销售单元';
COMMENT ON COLUMN product.unit_price IS '单价';
COMMENT ON COLUMN product.detail IS '详情';
COMMENT ON COLUMN product.sold_amount IS '已售数量';
COMMENT ON COLUMN product.deleted IS '软删除标识';
COMMENT ON COLUMN product.create_time IS '添加时间';
CREATE TABLE IF NOT EXISTS request (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
serial_no varchar(20) NOT NULL,
"name" varchar(100) NOT NULL,
description varchar(1000),
category_id integer NOT NULL,
status smallint NOT NULL DEFAULT 0,
publisher_id integer NOT NULL,
publish_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deadline" date NOT NULL,
deleted boolean NOT NULL DEFAULT FALSE,
CONSTRAINT fk_CategoryRequest FOREIGN KEY (category_id) REFERENCES category(id),
CONSTRAINT fk_UserRequest FOREIGN KEY (publisher_id) REFERENCES "user"(id)
);
COMMENT ON TABLE request IS '用户需求';
COMMENT ON COLUMN request.id IS '主键';
COMMENT ON COLUMN request.serial_no IS '需求单号,系统唯一,后台生成';
COMMENT ON COLUMN request.name IS '名称';
COMMENT ON COLUMN request.description IS '需求描述';
COMMENT ON COLUMN request.category_id IS '商品分类id';
COMMENT ON COLUMN request.status IS '状态0-发布1-有竞标2-待发货3-待收货4-已完成5-已评价';
COMMENT ON COLUMN request.publisher_id IS '发布者id';
COMMENT ON COLUMN request.publish_time IS '发布时间';
COMMENT ON COLUMN request.deadline IS '截止日期';
COMMENT ON COLUMN request.deleted IS '是否已删除';
CREATE TABLE IF NOT EXISTS reply (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
product_id integer NOT NULL,
amount integer NOT NULL,
price numeric(11, 2) NOT NULL,
user_id integer NOT NULL,
reply_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
request_id integer NOT NULL,
memo varchar(200),
rejected boolean NOT NULL DEFAULT FALSE,
CONSTRAINT fk_RequestReply FOREIGN KEY (request_id) REFERENCES request(id),
CONSTRAINT fk_ReplyProduct FOREIGN KEY (product_id) REFERENCES product(id),
CONSTRAINT fk_ReplyUser FOREIGN KEY (user_id) REFERENCES "user"(id)
);
COMMENT ON TABLE reply IS '竞标表';
COMMENT ON COLUMN reply.id IS '主键';
COMMENT ON COLUMN reply.product_id IS '商品id';
COMMENT ON COLUMN reply.amount IS '数量';
COMMENT ON COLUMN reply.price IS '价格,自动计算的价格(product.unit_price * amount)之后的优惠价格';
COMMENT ON COLUMN reply.user_id IS '竞标者id';
COMMENT ON COLUMN reply.reply_time IS '回应时间';
COMMENT ON COLUMN reply.request_id IS '需求id';
COMMENT ON COLUMN reply.memo IS '留言';
COMMENT ON COLUMN reply.rejected IS '是否已拒绝';
CREATE TABLE IF NOT EXISTS logistics (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
order_no varchar(20) NOT NULL,
company varchar(30) NOT NULL,
status smallint NOT NULL,
arrival_time timestamp NOT NULL,
"location" varchar(100) NOT NULL,
context varchar(200) NOT NULL,
request_id integer NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE logistics IS '物流';
COMMENT ON COLUMN logistics.id IS '主键';
COMMENT ON COLUMN logistics.order_no IS '快递单号';
COMMENT ON COLUMN logistics.company IS '快递公司';
COMMENT ON COLUMN logistics.status IS '物流状态1-揽收0-在途5-派件6-退回4-退签3-签收2-疑难7-转投8。。。-清关';
COMMENT ON COLUMN logistics.arrival_time IS '到达时间';
COMMENT ON COLUMN logistics.location IS '到达地点';
COMMENT ON COLUMN logistics.context IS '详情';
COMMENT ON COLUMN logistics.request_id IS '需求id';
COMMENT ON COLUMN logistics.create_time IS '入库时间';
CREATE TABLE IF NOT EXISTS message (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
from_user_id integer NOT NULL,
to_user_id integer NOT NULL,
sent_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"read" boolean NOT NULL DEFAULT FALSE,
recalled boolean NOT NULL DEFAULT FALSE,
content text NOT NULL
);
COMMENT ON TABLE message IS '用户消息';
COMMENT ON COLUMN message.id IS '主键';
COMMENT ON COLUMN message.from_user_id IS '发出用户id';
COMMENT ON COLUMN message.to_user_id IS '接收用户id';
COMMENT ON COLUMN message.sent_time IS '发出时间';
COMMENT ON COLUMN message.read IS '是否已读';
COMMENT ON COLUMN message.recalled IS '是否已撤回';
COMMENT ON COLUMN message.content IS '内容';
CREATE TABLE IF NOT EXISTS notice (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content text NOT NULL,
verified boolean NOT NULL DEFAULT FALSE,
publish_time timestamp NOT NULL default CURRENT_TIMESTAMP
);
COMMENT ON TABLE notice IS '系统通知';
COMMENT ON COLUMN notice.id IS '主键';
COMMENT ON COLUMN notice.content IS '内容';
COMMENT ON COLUMN notice.verified IS '是否已审核';
COMMENT ON COLUMN notice.publish_time IS '发布时间';
CREATE TABLE IF NOT EXISTS operate_log (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
operate_type char(1) NOT NULL,
target_type integer NOT NULL,
related_id integer NOT NULL,
operater_id integer NOT NULL,
description varchar(500),
operate_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE operate_log IS '操作日志';
COMMENT ON COLUMN operate_log.id IS '主键';
COMMENT ON COLUMN operate_log.operate_type IS '操作类型c-创建u-修改d-删除';
COMMENT ON COLUMN operate_log.target_type IS '目标类型0-行政区划1-商品分类。。。';
COMMENT ON COLUMN operate_log.related_id IS '关联id目标表主键';
COMMENT ON COLUMN operate_log.operater_id IS '管理员id';
COMMENT ON COLUMN operate_log.description IS '操作描述';
COMMENT ON COLUMN operate_log.operate_time IS '操作时间';
COMMENT ON COLUMN operate_log.create_time IS '入库时间';
CREATE TABLE IF NOT EXISTS refresh_token (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id integer NOT NULL,
system_role char(1) NOT NULL,
token varchar(50) NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at timestamp NOT NULL
);
COMMENT ON TABLE refresh_token IS '刷新令牌';
COMMENT ON COLUMN refresh_token.id IS '主键';
COMMENT ON COLUMN refresh_token.user_id IS '用户/管理员id';
COMMENT ON COLUMN refresh_token.system_role IS '系统角色a-管理员u-用户';
COMMENT ON COLUMN refresh_token.token IS '令牌';
COMMENT ON COLUMN refresh_token.create_time IS '创建时间';
COMMENT ON COLUMN refresh_token.expires_at IS '失效时间';