init: 初始化 dpb 桃育种系统代码库

前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
This commit is contained in:
34047007@qq.com
2026-08-06 00:17:49 +08:00
commit b95053c52c
1469 changed files with 322298 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
-- ============================================================
-- 桃育种·单株鉴定升级(手册权威结构落地)
-- 幂等:全部 IF EXISTS / IF NOT EXISTS;契约对齐生成器 ModelMixin
-- 1) 新建 性状观测明细长表 bre_trait_observation
-- 2) bre_tree 加 行向/责任人
-- 3) bre_tree_photo 加 所属鉴定/所属标签页;清理遗留 tree_no
-- 4) bre_tree_evaluation 删固定性状列(迁 trait_observation)、加综合评分、清理遗留 tree_no
-- 注:三张目标表当前均 0 行,无数据迁移负担。
-- ============================================================
-- ── 1) 性状观测明细长表(EAV)────────────────────────────────
CREATE TABLE IF NOT EXISTS bre_trait_observation (
id SERIAL PRIMARY KEY,
evaluation_id INTEGER REFERENCES bre_tree_evaluation(id) ON DELETE CASCADE,
tree_id INTEGER REFERENCES bre_tree(id) ON DELETE CASCADE,
combination_id INTEGER REFERENCES bre_cross_combination(id) ON DELETE CASCADE,
trait_id INTEGER NOT NULL REFERENCES bre_trait(id) ON DELETE CASCADE,
evaluate_year INTEGER,
value_numeric DOUBLE PRECISION,
value_text VARCHAR(255),
value_date VARCHAR(20),
remark TEXT,
-- ModelMixin 契约列
uuid VARCHAR(64) NOT NULL,
is_deleted BOOLEAN NOT NULL DEFAULT false,
created_time TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_time TIMESTAMPTZ NOT NULL DEFAULT now(),
deleted_time TIMESTAMPTZ
);
CREATE UNIQUE INDEX IF NOT EXISTS uq_bre_trait_observation_uuid ON bre_trait_observation(uuid);
CREATE INDEX IF NOT EXISTS ix_bre_trait_observation_created_deleted ON bre_trait_observation(created_time, is_deleted);
CREATE INDEX IF NOT EXISTS ix_bre_trait_observation_evaluation ON bre_trait_observation(evaluation_id);
CREATE INDEX IF NOT EXISTS ix_bre_trait_observation_tree ON bre_trait_observation(tree_id);
CREATE INDEX IF NOT EXISTS ix_bre_trait_observation_trait ON bre_trait_observation(trait_id);
CREATE INDEX IF NOT EXISTS ix_bre_trait_observation_combination ON bre_trait_observation(combination_id);
-- 同一次鉴定内同一性状仅一条(evaluation_id 为空的历史/散记录不受约束)
CREATE UNIQUE INDEX IF NOT EXISTS uq_bre_trait_observation_eval_trait
ON bre_trait_observation(evaluation_id, trait_id)
WHERE evaluation_id IS NOT NULL AND is_deleted = false;
-- ── 2) bre_tree:行向 + 责任人 ──────────────────────────
ALTER TABLE bre_tree ADD COLUMN IF NOT EXISTS row_orientation VARCHAR(50);
ALTER TABLE bre_tree ADD COLUMN IF NOT EXISTS bre_personnel_id INTEGER REFERENCES bre_personnel(id) ON DELETE SET NULL;
CREATE INDEX IF NOT EXISTS ix_bre_tree_personnel ON bre_tree(bre_personnel_id);
-- ── 3) bre_tree_photo:所属鉴定 + 所属标签页 ────────────
ALTER TABLE bre_tree_photo ADD COLUMN IF NOT EXISTS evaluation_id INTEGER REFERENCES bre_tree_evaluation(id) ON DELETE CASCADE;
ALTER TABLE bre_tree_photo ADD COLUMN IF NOT EXISTS category VARCHAR(50);
CREATE INDEX IF NOT EXISTS ix_bre_tree_photo_evaluation ON bre_tree_photo(evaluation_id);
ALTER TABLE bre_tree_photo DROP COLUMN IF EXISTS tree_no;
-- ── 4) bre_tree_evaluation:删固定性状列 + 综合评分 ──────
ALTER TABLE bre_tree_evaluation ADD COLUMN IF NOT EXISTS overall_score DOUBLE PRECISION;
ALTER TABLE bre_tree_evaluation DROP COLUMN IF EXISTS growth_vigor;
ALTER TABLE bre_tree_evaluation DROP COLUMN IF EXISTS fruit_shape;
ALTER TABLE bre_tree_evaluation DROP COLUMN IF EXISTS fruit_weight;
ALTER TABLE bre_tree_evaluation DROP COLUMN IF EXISTS sugar_content;
ALTER TABLE bre_tree_evaluation DROP COLUMN IF EXISTS tree_no;