airpredict/空气质量预测/源码/服务端/iapip-svr/prisma/schema.prisma

720 lines
23 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

generator client {
provider = "prisma-client-js"
binaryTargets = ["windows"]
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
// 管理员账号
model Admin {
id String @id // 账号ID A(RRRRRR)
name String @unique // 账号名
password String // 密码
username String // 用户名
type Int @default(1) // 账号类型 1 - 超级管理员, 2 - 管理员
status Int @default(1) // 账号状态 0 - 禁用, 1 - 可用
authz_hist_mgmt Int @default(1) // 历史管理
authz_tmpl_mgmt Int @default(1) // 模板管理
authz_mtrl_mgmt Int @default(1) // 材料管理
authz_audit_mgmt Int @default(1) // 审核管理
authz_acct_mgmt Int @default(1) // 账号管理
authz_sys_cfg Int @default(1) // 系统设置
templates PublicTemplate[]
materials PublicMaterial[]
applied_requests AuditRequest[] @relation("applied_requests")
reviewed_requests AuditRequest[] @relation("reviewed_requests")
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
deleted Int @default(0)
@@map("admin")
}
// 用户账号
model User {
id String @id // 账号ID U(RRRRRR)
name String @unique // 账户名
password String // 密码
username String // 用户名
status Int @default(1) // 账号状态 0 - 禁用, 1 - 可用
projects Project[]
templates SelfTemplate[]
materials SelfMaterial[]
pub_temp_colls PublicTemplateCollection[] // 收藏的公共模板
pub_mtrl_colls PublicMaterialCollection[] // 收藏的公共材料
pub_templates PublicTemplate[]
pub_materials PublicMaterial[]
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
deleted Int @default(0)
phone String? @unique // 手机号(手机注册用户)
@@map("user")
}
// ------
// 项目
model Project {
id String @id // 项目ID P(yMdHmSRR)
name String? // 项目名称
category String? // 项目类型
province String? // 所在省份
city String? // 所在城市
climatic_zone String? // 所在气候区
constr_area Float? // 建筑面积
usage_area Float? // 使用面积
spaces Space[] // 包含空间
status Int @default(0) // 状态 0 - 未生成预测报告, 1 - 已生成预测报告
predicted_at DateTime? // 预测报告生成时间
score Float? // 得分
grade String? // 评级
creator_id String?
creator_name String
creator User? @relation(fields: [creator_id], references: [id], onDelete: SetNull)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("project")
}
// 项目空间
model Space {
id String @id // 空间ID S(yMdHmSRR)
project_id String // 所属项目ID
project Project @relation(fields: [project_id], references: [id], onDelete: Cascade) // 所属项目
name String? // 空间名称
category String? // 空间类型
layout Int? // 空间布局
height Float? // 空间高度
area Float? // 空间面积
volume Float? // 空间体积
env_temp Float? // 环境温度
env_hum Float? // 环境湿度
env_vent_rate Float? // 环境通风换气率
apc_lmt_std_id String? // 空气污染物浓度限值标准ID
apc_lmt_std ApcLimitStandard? @relation(fields: [apc_lmt_std_id], references: [id], onDelete: SetNull) // 空气污染物浓度限值标准
materials Material[] // 包含材料
methanal_c Float? // 甲醛浓度
tvoc_c Float? // TVOC浓度
benzene_c Float? // 苯浓度
toluene_c Float? // 甲苯浓度
p_xylene_c Float? // 二甲苯浓度
methanal_c_exceed Int? // 甲醛是否超标
tvoc_c_exceed Int? // TVOC是否超标
benzene_c_exceed Int? // 苯是否超标
toluene_c_exceed Int? // 甲苯是否超标
p_xylene_c_exceed Int? // 二甲苯是否超标
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("space")
}
// 空间材料
model Material {
id Int @id @default(autoincrement()) // 材料ID
material_id String // 所属材料ID
project_id String // 所属项目ID
space_id String // 所属空间ID
space Space @relation(fields: [space_id], references: [id], onDelete: Cascade) // 所属空间
name String? // 材料名称
category String? // 材料类型
brand String? // 材料品牌
factory String? // 材料厂家
spec String? // 材料规格
eco_level String? // 环保等级
unit String? // 用量单位 AREA - 面积, LEN - 长度
qty Float? // 用量值
methanal Float? // 甲醛
methanal_min_be Float? // 甲醛最低平衡释放量
methanal_be_area Float? // 甲醛平衡释放量范围
methanal_be_roc Float? // 甲醛平衡释放量变化率
tvoc Float? // TVOC
tvoc_min_be Float? // TVOC最低平衡释放量
tvoc_be_area Float? // TVOC平衡释放量范围
tvoc_be_roc Float? // TVOC平衡释放量变化率
benzene Float? // 苯
benzene_min_be Float? // 苯最低平衡释放量
benzene_be_area Float? // 苯平衡释放量范围
benzene_be_roc Float? // 苯平衡释放量变化率
toluene Float? // 甲苯
toluene_min_be Float? // 甲苯最低平衡释放量
toluene_be_area Float? // 甲苯平衡释放量范围
toluene_be_roc Float? // 甲苯平衡释放量变化率
p_xylene Float? // 二甲苯
p_xylene_min_be Float? // 二甲苯最低平衡释放量
p_xylene_be_area Float? // 二甲苯平衡释放量范围
p_xylene_be_roc Float? // 二甲苯平衡释放量变化率
methanal_cr Float? // 甲醛贡献率
tvoc_cr Float? // TVOC贡献率
benzene_cr Float? // 苯贡献率
toluene_cr Float? // 甲苯贡献率
p_xylene_cr Float? // 二甲苯贡献率
methanal_cr_exceed Int? // 甲醛贡献率是否超标
tvoc_cr_exceed Int? // TVOC贡献率是否超标
benzene_cr_exceed Int? // 苯贡献率是否超标
toluene_cr_exceed Int? // 甲苯贡献率是否超标
p_xylene_cr_exceed Int? // 二甲苯贡献率是否超标
is_methanal_ps Int? // 是否为甲醛污染源
is_tvoc_ps Int? // 是否为TVOC污染源
is_benzene_ps Int? // 是否为苯污染源
is_toluene_ps Int? // 是否为甲苯污染源
is_p_xylene_ps Int? // 是否为二甲苯污染源
user_id String
user_name String
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("material")
}
// ------
// 公共项目模板
model PublicTemplate {
id String @id // PT(yMdHmSRR)
name String?
category String?
province String?
city String?
climatic_zone String?
constr_area Float?
usage_area Float?
spaces PublicTemplateSpace[]
display Int @default(0) // 是否展示
collectors PublicTemplateCollection[] // 收藏此模板的用户
pry_no Int @default(0)
score Float?
grade String?
from String?
creator_id String
creator_name String
related_user_id String?
related_user User? @relation(fields: [related_user_id], references: [id], onDelete: SetNull)
related_admin_id String?
related_admin Admin? @relation(fields: [related_admin_id], references: [id], onDelete: SetNull)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("public_template")
}
// 公共项目模板空间
model PublicTemplateSpace {
id String @id // PTS(yMdHmSRR)
project_id String
project PublicTemplate @relation(fields: [project_id], references: [id], onDelete: Cascade)
name String?
category String?
layout Int?
height Float?
area Float?
volume Float?
env_temp Float?
env_hum Float?
env_vent_rate Float?
apc_lmt_std_id String?
apc_lmt_std ApcLimitStandard? @relation(fields: [apc_lmt_std_id], references: [id], onDelete: SetNull)
materials PublicTemplateMaterial[]
methanal_c Float?
tvoc_c Float?
benzene_c Float?
toluene_c Float?
p_xylene_c Float?
methanal_c_exceed Int?
tvoc_c_exceed Int?
benzene_c_exceed Int?
toluene_c_exceed Int?
p_xylene_c_exceed Int?
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("public_template_space")
}
// 公共项目模板材料
model PublicTemplateMaterial {
id Int @id @default(autoincrement())
material_id String
project_id String
space_id String
space PublicTemplateSpace @relation(fields: [space_id], references: [id], onDelete: Cascade)
name String?
category String?
brand String?
factory String?
spec String?
eco_level String?
unit String?
qty Float?
methanal Float?
methanal_min_be Float?
methanal_be_area Float?
methanal_be_roc Float?
tvoc Float?
tvoc_min_be Float?
tvoc_be_area Float?
tvoc_be_roc Float?
benzene Float?
benzene_min_be Float?
benzene_be_area Float?
benzene_be_roc Float?
toluene Float?
toluene_min_be Float?
toluene_be_area Float?
toluene_be_roc Float?
p_xylene Float?
p_xylene_min_be Float?
p_xylene_be_area Float?
p_xylene_be_roc Float?
methanal_cr Float?
tvoc_cr Float?
benzene_cr Float?
toluene_cr Float?
p_xylene_cr Float?
methanal_cr_exceed Int?
tvoc_cr_exceed Int?
benzene_cr_exceed Int?
toluene_cr_exceed Int?
p_xylene_cr_exceed Int?
is_methanal_ps Int?
is_tvoc_ps Int?
is_benzene_ps Int?
is_toluene_ps Int?
is_p_xylene_ps Int?
user_id String
user_name String
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("public_template_material")
}
// ------
// 自建模板
model SelfTemplate {
id String // ST(yMdHmSRR)
name String?
category String?
province String?
city String?
climatic_zone String?
constr_area Float?
usage_area Float?
spaces SelfTemplateSpace[]
score Float?
grade String?
creator_id String
creator_name String
creator User @relation(fields: [creator_id], references: [id], onDelete: Cascade)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@id([id, creator_id])
@@map("self_template")
}
// 自建模板空间
model SelfTemplateSpace {
id String // STS(yMdHmSRR)
project_id String
project SelfTemplate @relation(fields: [project_id, creator_id], references: [id, creator_id], onDelete: Cascade)
name String?
category String?
layout Int?
height Float?
area Float?
volume Float?
env_temp Float?
env_hum Float?
env_vent_rate Float?
apc_lmt_std_id String?
apc_lmt_std ApcLimitStandard? @relation(fields: [apc_lmt_std_id], references: [id], onDelete: SetNull)
materials SelfTemplateMaterial[]
methanal_c Float?
tvoc_c Float?
benzene_c Float?
toluene_c Float?
p_xylene_c Float?
methanal_c_exceed Int?
tvoc_c_exceed Int?
benzene_c_exceed Int?
toluene_c_exceed Int?
p_xylene_c_exceed Int?
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@id([id, project_id])
@@map("self_template_space")
}
// 自建项目模板材料
model SelfTemplateMaterial {
id Int @id @default(autoincrement())
material_id String
project_id String
space_id String
space SelfTemplateSpace @relation(fields: [space_id, project_id], references: [id, project_id], onDelete: Cascade)
name String?
category String?
brand String?
factory String?
spec String?
eco_level String?
unit String?
qty Float?
methanal Float?
methanal_min_be Float?
methanal_be_area Float?
methanal_be_roc Float?
tvoc Float?
tvoc_min_be Float?
tvoc_be_area Float?
tvoc_be_roc Float?
benzene Float?
benzene_min_be Float?
benzene_be_area Float?
benzene_be_roc Float?
toluene Float?
toluene_min_be Float?
toluene_be_area Float?
toluene_be_roc Float?
p_xylene Float?
p_xylene_min_be Float?
p_xylene_be_area Float?
p_xylene_be_roc Float?
methanal_cr Float?
tvoc_cr Float?
benzene_cr Float?
toluene_cr Float?
p_xylene_cr Float?
methanal_cr_exceed Int?
tvoc_cr_exceed Int?
benzene_cr_exceed Int?
toluene_cr_exceed Int?
p_xylene_cr_exceed Int?
is_methanal_ps Int?
is_tvoc_ps Int?
is_benzene_ps Int?
is_toluene_ps Int?
is_p_xylene_ps Int?
user_id String
user_name String
creator_id String
creator_name String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("self_template_material")
}
// ------
// 公共材料
model PublicMaterial {
material_id String @id // PM(yMdHmSRR)
name String?
category String?
brand String?
factory String?
spec String?
eco_level String?
health_level String?
model_name String?
sample_image String?
reference_price String?
application_case String?
effect_image String?
supplier String?
contact_person String?
contact_phone String?
production_date String?
batch_no String?
sample_source String?
client_unit String?
test_date String?
test_standard String?
report_no String?
test_org String?
methanal Float?
methanal_min_be Float?
methanal_be_area Float?
methanal_be_roc Float?
tvoc Float?
tvoc_min_be Float?
tvoc_be_area Float?
tvoc_be_roc Float?
benzene Float?
benzene_min_be Float?
benzene_be_area Float?
benzene_be_roc Float?
toluene Float?
toluene_min_be Float?
toluene_be_area Float?
toluene_be_roc Float?
p_xylene Float?
p_xylene_min_be Float?
p_xylene_be_area Float?
p_xylene_be_roc Float?
sort_order Int @default(0) // 手动排序权重,升序
display Int @default(0) // 是否展示
collectors PublicMaterialCollection[] // 收藏此材料的用户
pry_no Int @default(0)
from String?
creator_id String
creator_name String
related_user_id String?
related_user User? @relation(fields: [related_user_id], references: [id], onDelete: SetNull)
related_admin_id String?
related_admin Admin? @relation(fields: [related_admin_id], references: [id], onDelete: SetNull)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("public_material")
}
// 自建材料
model SelfMaterial {
material_id String // SM(yMdHmSRR)
name String?
category String?
brand String?
factory String?
spec String?
eco_level String?
health_level String?
model_name String?
sample_image String?
reference_price String?
application_case String?
effect_image String?
supplier String?
contact_person String?
contact_phone String?
production_date String?
batch_no String?
sample_source String?
client_unit String?
test_date String?
test_standard String?
report_no String?
test_org String?
methanal Float?
methanal_min_be Float?
methanal_be_area Float?
methanal_be_roc Float?
tvoc Float?
tvoc_min_be Float?
tvoc_be_area Float?
tvoc_be_roc Float?
benzene Float?
benzene_min_be Float?
benzene_be_area Float?
benzene_be_roc Float?
toluene Float?
toluene_min_be Float?
toluene_be_area Float?
toluene_be_roc Float?
p_xylene Float?
p_xylene_min_be Float?
p_xylene_be_area Float?
p_xylene_be_roc Float?
sort_order Int @default(0)
creator_id String
creator_name String
creator User @relation(fields: [creator_id], references: [id], onDelete: Cascade)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@id([material_id, creator_id])
@@map("self_material")
}
// ------
// 用户收藏的公共模板
model PublicTemplateCollection {
user_id String
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
project_id String
project PublicTemplate @relation(fields: [project_id], references: [id], onDelete: Cascade)
@@id([user_id, project_id])
@@map("public_template_collection")
}
// 用户收藏的公共材料
model PublicMaterialCollection {
user_id String
user User @relation(fields: [user_id], references: [id], onDelete: Cascade)
material_id String
material PublicMaterial @relation(fields: [material_id], references: [material_id], onDelete: Cascade)
@@id([user_id, material_id])
@@map("public_material_collection")
}
// ------
// 审核单
model AuditRequest {
id String @id
status Int @default(0)
source_id String?
source_creator_id String?
source String
type String
desc String?
remark String?
reason String?
details AuditRequestDetails[]
auditor_id String?
auditor_name String?
auditor Admin? @relation(name: "reviewed_requests", fields: [auditor_id], references: [id], onDelete: SetNull)
audited_at DateTime?
creator_id String?
creator_name String
creator Admin? @relation(name: "applied_requests", fields: [creator_id], references: [id], onDelete: SetNull)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("audit_request")
}
// 审核单详情
model AuditRequestDetails {
id Int @id @default(autoincrement())
aduit_request_id String
audit_request AuditRequest @relation(fields: [aduit_request_id], references: [id], onDelete: Cascade)
content Json
@@map("audit_request_details")
}
// ------
// 项目-空间类型
model ProjectSpaceCategory {
pry_no_1 Int @default(0)
pry_no_2 Int @default(0)
project_category String
space_category String
@@id([project_category, space_category])
@@map("project_space_category")
}
// 材料类型
model MaterialCategory {
pry_no_1 Int @default(0)
pry_no_2 Int @default(0)
first_category String
second_category String
unit String?
@@id([first_category, second_category])
@@map("material_category")
}
// 省-市-气候区-温度-湿度
model CityInformation {
pry_no_1 Int @default(0)
pry_no_2 Int @default(0)
province String
city String
climatic_zone String?
env_temp Float
env_hum Float
@@id([province, city])
@@map("city_information")
}
// 空气污染物浓度限值标准
model ApcLimitStandard {
id String @id // 标准ID
methanal_c_lmt Float // 甲醛浓度限值
tvoc_c_lmt Float // TVOC浓度限值
benzene_c_lmt Float // 苯浓度限值
toluene_c_lmt Float // 甲苯浓度限值
p_xylene_c_lmt Float // 二甲苯浓度限值
spaces Space[] // 使用该模板的项目空间
pub_temp_spaces PublicTemplateSpace[] // 使用该标准的公共模板空间
self_temp_spaces SelfTemplateSpace[] // 使用该标准的自建模板空间
@@map("apc_limit_standard")
}
// ------ 论坛 ------
model SiteConfig {
key String @id
value String @db.Text
updated_at DateTime @updatedAt
@@map("site_config")
}
// ------ 论坛 ------
model ForumThread {
id Int @id @default(autoincrement())
board String // 板块(取值属于 FORUM_BOARDS
title String
content String @db.Text
author_id String // User.id
author_name String // 冗余 username
like_count Int @default(0)
reply_count Int @default(0)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
deleted Int @default(0)
replies ForumReply[]
likes ForumThreadLike[]
@@map("forum_thread")
}
model ForumReply {
id Int @id @default(autoincrement())
thread_id Int
thread ForumThread @relation(fields: [thread_id], references: [id], onDelete: Cascade)
floor Int // 楼层
content String @db.Text
author_id String
author_name String
created_at DateTime @default(now())
deleted Int @default(0)
@@map("forum_reply")
}
model ForumThreadLike {
thread_id Int
thread ForumThread @relation(fields: [thread_id], references: [id], onDelete: Cascade)
user_id String
created_at DateTime @default(now())
@@id([thread_id, user_id])
@@map("forum_thread_like")
}