diff --git a/sql/document_types.sql b/sql/document_types.sql deleted file mode 100644 index ca680b1..0000000 --- a/sql/document_types.sql +++ /dev/null @@ -1,58 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 09/07/2025 10:25:35 -*/ - - --- ---------------------------- --- Table structure for document_types --- ---------------------------- -DROP TABLE IF EXISTS "public"."document_types"; -CREATE TABLE "public"."document_types" ( - "id" int4 NOT NULL DEFAULT nextval('document_types_id_seq'::regclass), - "name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "description" text COLLATE "pg_catalog"."default", - "evaluation_point_groups_ids" jsonb, - "prompt_config" jsonb, - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now(), - "code" varchar(255) COLLATE "pg_catalog"."default" -) -; -COMMENT ON COLUMN "public"."document_types"."id" IS '类型ID,主键,自增'; -COMMENT ON COLUMN "public"."document_types"."name" IS '文档类型名称,唯一且非空'; -COMMENT ON COLUMN "public"."document_types"."description" IS '类型描述,可为空'; -COMMENT ON COLUMN "public"."document_types"."evaluation_point_groups_ids" IS '关联的评查点组ID,JSONB格式'; -COMMENT ON COLUMN "public"."document_types"."prompt_config" IS '提示词配置,JSONB格式'; -COMMENT ON COLUMN "public"."document_types"."created_at" IS '创建时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."document_types"."updated_at" IS '更新时间,带时区,默认当前时间'; -COMMENT ON TABLE "public"."document_types" IS '文档类型表'; - --- ---------------------------- --- Triggers structure for table document_types --- ---------------------------- -CREATE TRIGGER "update_document_types_updated_at" BEFORE UPDATE ON "public"."document_types" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at_column"(); - --- ---------------------------- --- Uniques structure for table document_types --- ---------------------------- -ALTER TABLE "public"."document_types" ADD CONSTRAINT "document_types_name_key" UNIQUE ("name"); - --- ---------------------------- --- Primary Key structure for table document_types --- ---------------------------- -ALTER TABLE "public"."document_types" ADD CONSTRAINT "document_types_pkey" PRIMARY KEY ("id"); diff --git a/sql/documents.sql b/sql/documents.sql deleted file mode 100644 index df817c1..0000000 --- a/sql/documents.sql +++ /dev/null @@ -1,96 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 09/07/2025 10:25:25 -*/ - - --- ---------------------------- --- Table structure for documents --- ---------------------------- -DROP TABLE IF EXISTS "public"."documents"; -CREATE TABLE "public"."documents" ( - "id" int4 NOT NULL DEFAULT nextval('documents_id_seq'::regclass), - "user_id" int4, - "type_id" int4 NOT NULL, - "name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "document_number" varchar(100) COLLATE "pg_catalog"."default", - "path" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "storage_type" varchar(20) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 'minio'::character varying, - "file_size" int4, - "upload_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP, - "is_test_document" bool DEFAULT false, - "evaluation_level" varchar(255) COLLATE "pg_catalog"."default", - "status" varchar(20) COLLATE "pg_catalog"."default" DEFAULT 'waiting'::character varying, - "ocr_result" jsonb, - "extracted_results" jsonb, - "sumary" text COLLATE "pg_catalog"."default", - "remark" text COLLATE "pg_catalog"."default", - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now(), - "evaluations_status" int4, - "audit_status" int4, - "error_massage" varchar(500) COLLATE "pg_catalog"."default" -) -; -COMMENT ON COLUMN "public"."documents"."id" IS '文档ID,主键,自增'; -COMMENT ON COLUMN "public"."documents"."user_id" IS '上传用户的ID,外键引用users表,可为空'; -COMMENT ON COLUMN "public"."documents"."type_id" IS '文档类型ID,外键引用document_types表,非空'; -COMMENT ON COLUMN "public"."documents"."name" IS '原始文件名,非空'; -COMMENT ON COLUMN "public"."documents"."document_number" IS '合同编号、许可证号等,可为空'; -COMMENT ON COLUMN "public"."documents"."path" IS '存储路径,非空'; -COMMENT ON COLUMN "public"."documents"."storage_type" IS '文件存储方式,默认minio'; -COMMENT ON COLUMN "public"."documents"."file_size" IS '文件大小,单位字节,可为空'; -COMMENT ON COLUMN "public"."documents"."upload_time" IS '上传时间,默认当前时间'; -COMMENT ON COLUMN "public"."documents"."is_test_document" IS '是否是测试文档,默认false'; -COMMENT ON COLUMN "public"."documents"."status" IS '处理状态,默认waiting(waiting: 上传时默认状态, Cutting: 切分+OCR处理中, extractioning: 大模型抽取信息中, evaluationing: 评查中, processed: 文档处理完成等待审核)'; -COMMENT ON COLUMN "public"."documents"."ocr_result" IS 'OCR处理结果,JSONB格式'; -COMMENT ON COLUMN "public"."documents"."extracted_results" IS '内容抽取结果,JSONB格式'; -COMMENT ON COLUMN "public"."documents"."sumary" IS '评查结果,可为空'; -COMMENT ON COLUMN "public"."documents"."remark" IS '备注,可为空'; -COMMENT ON COLUMN "public"."documents"."created_at" IS '创建时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."documents"."updated_at" IS '更新时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."documents"."evaluations_status" IS '评查状态: -* 通过 :1 -* 警告 :-2 -* 不通过 :-1 -* 待人工确认 :0'; -COMMENT ON COLUMN "public"."documents"."audit_status" IS '审核状态: -* 待审核:0 -* 通过:1 -* 审核中:2 -* 不通过:-1 -* 警告:-2'; -COMMENT ON TABLE "public"."documents" IS '文档表'; - --- ---------------------------- --- Triggers structure for table documents --- ---------------------------- -CREATE TRIGGER "trg_set_updated_at" BEFORE UPDATE ON "public"."documents" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at"(); -CREATE TRIGGER "update_documents_updated_at" BEFORE UPDATE ON "public"."documents" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at_column"(); - --- ---------------------------- --- Primary Key structure for table documents --- ---------------------------- -ALTER TABLE "public"."documents" ADD CONSTRAINT "documents_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Foreign Keys structure for table documents --- ---------------------------- -ALTER TABLE "public"."documents" ADD CONSTRAINT "documents_type_id_fkey" FOREIGN KEY ("type_id") REFERENCES "public"."document_types" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION; -ALTER TABLE "public"."documents" ADD CONSTRAINT "documents_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "public"."users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/sql/evaluation_points.sql b/sql/evaluation_points.sql deleted file mode 100644 index 02be58a..0000000 --- a/sql/evaluation_points.sql +++ /dev/null @@ -1,83 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 09/07/2025 16:21:17 -*/ - - --- ---------------------------- --- Table structure for evaluation_points --- ---------------------------- -DROP TABLE IF EXISTS "public"."evaluation_points"; -CREATE TABLE "public"."evaluation_points" ( - "id" int4 NOT NULL DEFAULT nextval('evaluation_points_id_seq'::regclass), - "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, - "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, - "evaluation_point_groups_id" int4, - "risk" varchar(10) COLLATE "pg_catalog"."default" NOT NULL, - "description" text COLLATE "pg_catalog"."default", - "is_enabled" bool DEFAULT true, - "references_laws" jsonb NOT NULL, - "extraction_config" jsonb NOT NULL, - "evaluation_config" jsonb NOT NULL, - "pass_message" text COLLATE "pg_catalog"."default", - "fail_message" text COLLATE "pg_catalog"."default", - "suggestion_message" text COLLATE "pg_catalog"."default", - "suggestion_message_type" varchar(20) COLLATE "pg_catalog"."default" DEFAULT 'warning'::character varying, - "post_action" varchar(50) COLLATE "pg_catalog"."default", - "action_config" text COLLATE "pg_catalog"."default", - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now(), - "evaluation_point_groups_pid" int4, - "score" numeric(5,2) DEFAULT 0.00 -) -; -COMMENT ON COLUMN "public"."evaluation_points"."id" IS '主键,自增'; -COMMENT ON COLUMN "public"."evaluation_points"."code" IS '评查点编码,唯一且非空'; -COMMENT ON COLUMN "public"."evaluation_points"."name" IS '评查点名称,非空'; -COMMENT ON COLUMN "public"."evaluation_points"."evaluation_point_groups_id" IS '所属分组ID,外键引用evaluation_point_groups表'; -COMMENT ON COLUMN "public"."evaluation_points"."risk" IS '风险等级,非空(高/中/低)'; -COMMENT ON COLUMN "public"."evaluation_points"."description" IS '评查点描述,可为空'; -COMMENT ON COLUMN "public"."evaluation_points"."is_enabled" IS '是否启用,默认true'; -COMMENT ON COLUMN "public"."evaluation_points"."references_laws" IS '引用法典,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_points"."extraction_config" IS '抽取配置,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_points"."evaluation_config" IS '评查设置,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_points"."pass_message" IS '通过提示,可为空'; -COMMENT ON COLUMN "public"."evaluation_points"."fail_message" IS '不通过提示,可为空'; -COMMENT ON COLUMN "public"."evaluation_points"."suggestion_message" IS '建议信息,可为空'; -COMMENT ON COLUMN "public"."evaluation_points"."suggestion_message_type" IS '建议信息类型,默认warning(info/warning/error)'; -COMMENT ON COLUMN "public"."evaluation_points"."post_action" IS '评查后动作类型,可为空(none/manual/replace)'; -COMMENT ON COLUMN "public"."evaluation_points"."action_config" IS '动作配置,可为空'; -COMMENT ON COLUMN "public"."evaluation_points"."created_at" IS '创建时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."evaluation_points"."updated_at" IS '更新时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."evaluation_points"."evaluation_point_groups_pid" IS '所属分组PID,外键引用evaluation_point_groups表'; -COMMENT ON COLUMN "public"."evaluation_points"."score" IS '评查点得分'; -COMMENT ON TABLE "public"."evaluation_points" IS '评查点表'; - --- ---------------------------- --- Triggers structure for table evaluation_points --- ---------------------------- -CREATE TRIGGER "update_evaluation_points_updated_at" BEFORE UPDATE ON "public"."evaluation_points" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at_column"(); - --- ---------------------------- --- Uniques structure for table evaluation_points --- ---------------------------- -ALTER TABLE "public"."evaluation_points" ADD CONSTRAINT "evaluation_points_code_key" UNIQUE ("code"); - --- ---------------------------- --- Primary Key structure for table evaluation_points --- ---------------------------- -ALTER TABLE "public"."evaluation_points" ADD CONSTRAINT "evaluation_points_pkey" PRIMARY KEY ("id"); diff --git a/sql/evaluation_results.sql b/sql/evaluation_results.sql deleted file mode 100644 index 6cde69e..0000000 --- a/sql/evaluation_results.sql +++ /dev/null @@ -1,63 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 09/07/2025 10:25:50 -*/ - - --- ---------------------------- --- Table structure for evaluation_results --- ---------------------------- -DROP TABLE IF EXISTS "public"."evaluation_results"; -CREATE TABLE "public"."evaluation_results" ( - "id" int4 NOT NULL DEFAULT nextval('evaluation_results_id_seq'::regclass), - "document_id" int4 NOT NULL, - "evaluation_point_id" int4 NOT NULL, - "status" varchar(20) COLLATE "pg_catalog"."default" NOT NULL, - "extracted_results" jsonb NOT NULL, - "rules_results" jsonb NOT NULL, - "evaluated_results" jsonb NOT NULL, - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now(), - "evaluated_point_results_log" jsonb -) -; -COMMENT ON COLUMN "public"."evaluation_results"."id" IS '主键,自增'; -COMMENT ON COLUMN "public"."evaluation_results"."document_id" IS '文档ID,外键引用documents表,非空'; -COMMENT ON COLUMN "public"."evaluation_results"."evaluation_point_id" IS '评查点ID,外键引用evaluation_points表,非空'; -COMMENT ON COLUMN "public"."evaluation_results"."status" IS '结果状态,非空(pending/extracted/evaluated/failed)'; -COMMENT ON COLUMN "public"."evaluation_results"."extracted_results" IS '抽取结果,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_results"."rules_results" IS '规则判断结果,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_results"."evaluated_results" IS '评查结果,JSONB格式,非空'; -COMMENT ON COLUMN "public"."evaluation_results"."created_at" IS '创建时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."evaluation_results"."updated_at" IS '更新时间,带时区,默认当前时间'; -COMMENT ON COLUMN "public"."evaluation_results"."evaluated_point_results_log" IS '记录每个评查点规则的评查记录'; -COMMENT ON TABLE "public"."evaluation_results" IS '评查点结果表'; - --- ---------------------------- --- Triggers structure for table evaluation_results --- ---------------------------- -CREATE TRIGGER "update_evaluation_results_updated_at" BEFORE UPDATE ON "public"."evaluation_results" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at_column"(); - --- ---------------------------- --- Primary Key structure for table evaluation_results --- ---------------------------- -ALTER TABLE "public"."evaluation_results" ADD CONSTRAINT "evaluation_results_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Foreign Keys structure for table evaluation_results --- ---------------------------- -ALTER TABLE "public"."evaluation_results" ADD CONSTRAINT "evaluation_results_evaluation_point_id_fkey" FOREIGN KEY ("evaluation_point_id") REFERENCES "public"."evaluation_points" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/sql/role_route.sql b/sql/role_route.sql deleted file mode 100644 index a339b29..0000000 --- a/sql/role_route.sql +++ /dev/null @@ -1,61 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 20/07/2025 19:51:40 -*/ - - --- ---------------------------- --- Table structure for role_route --- ---------------------------- -DROP TABLE IF EXISTS "public"."role_route"; -CREATE TABLE "public"."role_route" ( - "id" int4 NOT NULL DEFAULT nextval('role_route_id_seq'::regclass), - "role_id" int4 NOT NULL, - "route_id" int4 NOT NULL, - "permission" varchar(10) COLLATE "pg_catalog"."default" DEFAULT 'RW'::character varying, - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now() -) -; -COMMENT ON COLUMN "public"."role_route"."id" IS '主键ID'; -COMMENT ON COLUMN "public"."role_route"."role_id" IS '角色ID'; -COMMENT ON COLUMN "public"."role_route"."route_id" IS '路由ID'; -COMMENT ON COLUMN "public"."role_route"."permission" IS '权限类型(R=读, W=写, RW=读写)'; -COMMENT ON COLUMN "public"."role_route"."created_at" IS '创建时间'; -COMMENT ON COLUMN "public"."role_route"."updated_at" IS '更新时间'; -COMMENT ON TABLE "public"."role_route" IS '角色-路由权限关联表'; - --- ---------------------------- --- Triggers structure for table role_route --- ---------------------------- -CREATE TRIGGER "update_role_route_updated_at" BEFORE UPDATE ON "public"."role_route" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at"(); - --- ---------------------------- --- Uniques structure for table role_route --- ---------------------------- -ALTER TABLE "public"."role_route" ADD CONSTRAINT "role_route_role_id_route_id_key" UNIQUE ("role_id", "route_id"); - --- ---------------------------- --- Primary Key structure for table role_route --- ---------------------------- -ALTER TABLE "public"."role_route" ADD CONSTRAINT "role_route_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Foreign Keys structure for table role_route --- ---------------------------- -ALTER TABLE "public"."role_route" ADD CONSTRAINT "fk_role_route_role" FOREIGN KEY ("role_id") REFERENCES "public"."roles" ("id") ON DELETE CASCADE ON UPDATE NO ACTION; -ALTER TABLE "public"."role_route" ADD CONSTRAINT "fk_role_route_route" FOREIGN KEY ("route_id") REFERENCES "public"."sys_routes" ("id") ON DELETE CASCADE ON UPDATE NO ACTION; diff --git a/sql/role_route_insert.sql b/sql/role_route_insert.sql deleted file mode 100644 index 7a279b7..0000000 --- a/sql/role_route_insert.sql +++ /dev/null @@ -1,63 +0,0 @@ --- 角色路由权限数据插入脚本 --- 根据sys_routes_insert.sql中的路由数据和roles.sql中的角色数据进行关联 - --- 清理现有数据(可选) --- DELETE FROM role_route WHERE id > 0; - --- ---------------------------- --- 为admin角色分配全部路由权限 --- ---------------------------- -INSERT INTO role_route (role_id, route_id, permission) -SELECT 1, id, 'RW' FROM sys_routes; - --- ---------------------------- --- 为common角色分配基础路由权限 --- ---------------------------- -INSERT INTO role_route (role_id, route_id, permission) -SELECT 2, id, 'RW' FROM sys_routes WHERE name IN ( - 'home', - 'file-management', 'file-upload', 'documents', - 'rule-management', 'rule-groups', 'rules-list', 'rules-file', - 'contract-template', 'contract-search-ai', 'contract-list', - 'cross-checking' -) ON CONFLICT (role_id, route_id) DO NOTHING; - --- ---------------------------- --- 为deptLeader角色分配扩展权限 --- ---------------------------- -INSERT INTO role_route (role_id, route_id, permission) -SELECT 3, id, 'RW' FROM sys_routes WHERE name IN ( - 'home', - 'chat-with-llm', - 'file-management', 'file-upload', 'documents', - 'rule-management', 'rule-groups', 'rules-list', 'rules-file', - 'contract-template', 'contract-search-ai', 'contract-list', - 'cross-checking' -) ON CONFLICT (role_id, route_id) DO NOTHING; - --- ---------------------------- --- 为groupLeader角色分配小组权限 --- ---------------------------- -INSERT INTO role_route (role_id, route_id, permission) -SELECT 4, id, 'RW' FROM sys_routes WHERE name IN ( - 'home', - 'file-management', 'file-upload', 'documents', - 'rule-management', 'rule-groups', 'rules-list', 'rules-file', - 'contract-template', 'contract-search-ai', 'contract-list', - 'cross-checking' -) ON CONFLICT (role_id, route_id) DO NOTHING; - --- ---------------------------- --- 查询角色权限分配结果 --- ---------------------------- -SELECT - r.role_name, - sr.name as route_name, - sr.path, - sr.meta->>'title' as route_title, - rr.permission -FROM role_route rr -JOIN roles r ON rr.role_id = r.id -JOIN sys_routes sr ON rr.route_id = sr.id -WHERE sr.parent_id = 0 -- 只显示一级菜单 -ORDER BY r.id, (sr.meta->>'order')::int; \ No newline at end of file diff --git a/sql/roles.sql b/sql/roles.sql deleted file mode 100644 index 5f0292c..0000000 --- a/sql/roles.sql +++ /dev/null @@ -1,65 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 18/07/2025 20:16:41 -*/ - - --- ---------------------------- --- Table structure for roles --- ---------------------------- -DROP TABLE IF EXISTS "public"."roles"; -CREATE TABLE "public"."roles" ( - "id" int4 NOT NULL DEFAULT nextval('user_role_id_seq'::regclass), - "role_key" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, - "role_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, - "data_scope" varchar(20) COLLATE "pg_catalog"."default" DEFAULT 'SELF'::character varying, - "description" varchar(200) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now() -) -; -COMMENT ON COLUMN "public"."roles"."id" IS '角色ID'; -COMMENT ON COLUMN "public"."roles"."role_key" IS '角色标识(如:admin, common, deptLeader, groupLeader)'; -COMMENT ON COLUMN "public"."roles"."role_name" IS '角色名称(如:系统管理员, 普通员工)'; -COMMENT ON COLUMN "public"."roles"."data_scope" IS '数据权限范围(SELF=仅自己, GROUP=本组, DEPT=本部门, ALL=全部)'; -COMMENT ON COLUMN "public"."roles"."description" IS '角色描述'; -COMMENT ON COLUMN "public"."roles"."created_at" IS '创建时间'; -COMMENT ON COLUMN "public"."roles"."updated_at" IS '更新时间'; -COMMENT ON TABLE "public"."roles" IS '系统角色表'; - --- ---------------------------- --- Records of roles --- ---------------------------- -INSERT INTO "public"."roles" VALUES (1, 'admin', '系统管理员', 'ALL', '拥有系统全部操作权限', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00'); -INSERT INTO "public"."roles" VALUES (2, 'common', '普通员工', 'SELF', '仅能操作自己的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00'); -INSERT INTO "public"."roles" VALUES (3, 'deptLeader', '部门主管', 'DEPT', '可操作本部门的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00'); -INSERT INTO "public"."roles" VALUES (4, 'groupLeader', '小组组长', 'GROUP', '可操作本小组的数据', '2025-07-18 02:35:39.367459+00', '2025-07-18 02:35:39.367459+00'); - --- ---------------------------- --- Triggers structure for table roles --- ---------------------------- -CREATE TRIGGER "update_user_role_updated_at" BEFORE UPDATE ON "public"."roles" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at"(); - --- ---------------------------- --- Uniques structure for table roles --- ---------------------------- -ALTER TABLE "public"."roles" ADD CONSTRAINT "roles_role_key_key" UNIQUE ("role_key"); - --- ---------------------------- --- Primary Key structure for table roles --- ---------------------------- -ALTER TABLE "public"."roles" ADD CONSTRAINT "user_role_pkey" PRIMARY KEY ("id"); diff --git a/sql/scoring_proposals.sql b/sql/scoring_proposals.sql deleted file mode 100644 index 5cb6d4e..0000000 --- a/sql/scoring_proposals.sql +++ /dev/null @@ -1,75 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 16/07/2025 21:59:28 -*/ - - --- ---------------------------- --- Table structure for scoring_proposals --- ---------------------------- -DROP TABLE IF EXISTS "public"."scoring_proposals"; -CREATE TABLE "public"."scoring_proposals" ( - "id" int4 NOT NULL DEFAULT nextval('scoring_proposals_id_seq'::regclass), - "evaluation_result_id" int4 NOT NULL, - "proposer_id" int4 NOT NULL, - "proposed_score" numeric(10,2) NOT NULL, - "reason" text COLLATE "pg_catalog"."default" NOT NULL, - "status" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 'pending_review'::character varying, - "created_at" timestamptz(6) NOT NULL DEFAULT now(), - "updated_at" timestamptz(6) NOT NULL DEFAULT now(), - "document_id" int4 NOT NULL -) -; -COMMENT ON COLUMN "public"."scoring_proposals"."id" IS '计分提案的唯一标识符。'; -COMMENT ON COLUMN "public"."scoring_proposals"."evaluation_result_id" IS '关联的评查结果ID,外键引用 evaluation_results 表。'; -COMMENT ON COLUMN "public"."scoring_proposals"."proposer_id" IS '提出提案的用户ID,外键引用 users 表。'; -COMMENT ON COLUMN "public"."scoring_proposals"."proposed_score" IS '提案中建议的修正分数。'; -COMMENT ON COLUMN "public"."scoring_proposals"."reason" IS '修改分数的理由说明。'; -COMMENT ON COLUMN "public"."scoring_proposals"."status" IS '提案的当前状态:待审核、已批准或已否决。'; -COMMENT ON COLUMN "public"."scoring_proposals"."created_at" IS '提案创建的时间戳。'; -COMMENT ON COLUMN "public"."scoring_proposals"."updated_at" IS '提案最后更新的时间戳。'; -COMMENT ON COLUMN "public"."scoring_proposals"."document_id" IS '关联的文档ID,用于快速查询和统计'; -COMMENT ON TABLE "public"."scoring_proposals" IS '存储用户对评查结果提出的计分修改提案。'; - --- ---------------------------- --- Indexes structure for table scoring_proposals --- ---------------------------- -CREATE INDEX "idx_scoring_proposals_document_id" ON "public"."scoring_proposals" USING btree ( - "document_id" "pg_catalog"."int4_ops" ASC NULLS LAST -); -CREATE INDEX "idx_scoring_proposals_document_status" ON "public"."scoring_proposals" USING btree ( - "document_id" "pg_catalog"."int4_ops" ASC NULLS LAST, - "status" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE INDEX "idx_scoring_proposals_evaluation_result_id" ON "public"."scoring_proposals" USING btree ( - "evaluation_result_id" "pg_catalog"."int4_ops" ASC NULLS LAST -); -CREATE INDEX "idx_scoring_proposals_proposer_id" ON "public"."scoring_proposals" USING btree ( - "proposer_id" "pg_catalog"."int4_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "uq_pending_proposal" ON "public"."scoring_proposals" USING btree ( - "evaluation_result_id" "pg_catalog"."int4_ops" ASC NULLS LAST -) WHERE status::text = 'pending_review'::text; - --- ---------------------------- --- Primary Key structure for table scoring_proposals --- ---------------------------- -ALTER TABLE "public"."scoring_proposals" ADD CONSTRAINT "scoring_proposals_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Foreign Keys structure for table scoring_proposals --- ---------------------------- -ALTER TABLE "public"."scoring_proposals" ADD CONSTRAINT "scoring_proposals_evaluation_result_id_fkey" FOREIGN KEY ("evaluation_result_id") REFERENCES "public"."evaluation_results" ("id") ON DELETE CASCADE ON UPDATE NO ACTION; -ALTER TABLE "public"."scoring_proposals" ADD CONSTRAINT "scoring_proposals_proposer_id_fkey" FOREIGN KEY ("proposer_id") REFERENCES "public"."users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION; diff --git a/sql/sso_users.sql b/sql/sso_users.sql deleted file mode 100644 index c1d8c34..0000000 --- a/sql/sso_users.sql +++ /dev/null @@ -1,84 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 17/07/2025 21:07:07 -*/ - - --- ---------------------------- --- Table structure for sso_users --- ---------------------------- -DROP TABLE IF EXISTS "public"."sso_users"; -CREATE TABLE "public"."sso_users" ( - "id" uuid NOT NULL DEFAULT gen_random_uuid(), - "sub" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "username" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "nick_name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "phone_number" varchar(20) COLLATE "pg_catalog"."default", - "email" varchar(255) COLLATE "pg_catalog"."default", - "ou_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "ou_name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, - "status" int2 DEFAULT 0, - "is_leader" bool DEFAULT false, - "created_at" timestamp(6) DEFAULT CURRENT_TIMESTAMP, - "updated_at" timestamp(6) DEFAULT CURRENT_TIMESTAMP, - "deleted_at" timestamp(6) -) -; -COMMENT ON COLUMN "public"."sso_users"."id" IS '主键,数据库自增或全局唯一'; -COMMENT ON COLUMN "public"."sso_users"."sub" IS 'IDaaS用户唯一标识(身份证号级别)'; -COMMENT ON COLUMN "public"."sso_users"."username" IS '显示用户名称/工号'; -COMMENT ON COLUMN "public"."sso_users"."nick_name" IS '用户真实姓名'; -COMMENT ON COLUMN "public"."sso_users"."phone_number" IS '手机号'; -COMMENT ON COLUMN "public"."sso_users"."email" IS '邮箱地址(可为空)'; -COMMENT ON COLUMN "public"."sso_users"."ou_id" IS '所属组织单位ID(部门ID)'; -COMMENT ON COLUMN "public"."sso_users"."ou_name" IS '所属部门名称'; -COMMENT ON COLUMN "public"."sso_users"."status" IS '账户状态: 0=正常, 1=禁用'; -COMMENT ON COLUMN "public"."sso_users"."is_leader" IS '是否为部门负责人'; -COMMENT ON COLUMN "public"."sso_users"."created_at" IS '创建时间'; -COMMENT ON COLUMN "public"."sso_users"."updated_at" IS '更新时间'; -COMMENT ON COLUMN "public"."sso_users"."deleted_at" IS '删除时间(软删除)'; -COMMENT ON TABLE "public"."sso_users" IS '统一登录用户表'; - --- ---------------------------- --- Indexes structure for table sso_users --- ---------------------------- -CREATE INDEX "idx_sso_users_deleted_at" ON "public"."sso_users" USING btree ( - "deleted_at" "pg_catalog"."timestamp_ops" ASC NULLS LAST -); -CREATE INDEX "idx_sso_users_is_leader" ON "public"."sso_users" USING btree ( - "is_leader" "pg_catalog"."bool_ops" ASC NULLS LAST -); -CREATE INDEX "idx_sso_users_ou_id" ON "public"."sso_users" USING btree ( - "ou_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE INDEX "idx_sso_users_status" ON "public"."sso_users" USING btree ( - "status" "pg_catalog"."int2_ops" ASC NULLS LAST -); -CREATE INDEX "idx_sso_users_sub" ON "public"."sso_users" USING btree ( - "sub" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE INDEX "idx_sso_users_username" ON "public"."sso_users" USING btree ( - "username" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); - --- ---------------------------- --- Uniques structure for table sso_users --- ---------------------------- -ALTER TABLE "public"."sso_users" ADD CONSTRAINT "sso_users_sub_key" UNIQUE ("sub"); - --- ---------------------------- --- Primary Key structure for table sso_users --- ---------------------------- -ALTER TABLE "public"."sso_users" ADD CONSTRAINT "sso_users_pkey" PRIMARY KEY ("id"); diff --git a/sql/sys_routes.sql b/sql/sys_routes.sql deleted file mode 100644 index ef1c222..0000000 --- a/sql/sys_routes.sql +++ /dev/null @@ -1,59 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 18/07/2025 15:16:47 -*/ - - --- ---------------------------- --- Table structure for sys_routes --- ---------------------------- -DROP TABLE IF EXISTS "public"."sys_routes"; -CREATE TABLE "public"."sys_routes" ( - "id" int4 NOT NULL DEFAULT nextval('sys_route_id_seq'::regclass), - "path" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, - "name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, - "meta" json NOT NULL, - "parent_id" int4 DEFAULT 0, - "is_menu" int2 DEFAULT 1, - "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP, - "update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP -) -; -COMMENT ON COLUMN "public"."sys_routes"."id" IS '路由ID'; -COMMENT ON COLUMN "public"."sys_routes"."path" IS '路由路径(如:/user/list)'; -COMMENT ON COLUMN "public"."sys_routes"."name" IS '路由唯一标识(前端组件名)'; -COMMENT ON COLUMN "public"."sys_routes"."meta" IS '元数据(存储图标/排序/隐藏等配置)'; -COMMENT ON COLUMN "public"."sys_routes"."parent_id" IS '父路由ID(0=根节点)'; -COMMENT ON COLUMN "public"."sys_routes"."is_menu" IS '是否菜单项(0=接口权限, 1=菜单项)'; -COMMENT ON COLUMN "public"."sys_routes"."create_time" IS '创建时间'; -COMMENT ON COLUMN "public"."sys_routes"."update_time" IS '更新时间'; -COMMENT ON TABLE "public"."sys_routes" IS '系统路由权限表'; - --- ---------------------------- --- Indexes structure for table sys_routes --- ---------------------------- -CREATE INDEX "idx_parent_id" ON "public"."sys_routes" USING btree ( - "parent_id" "pg_catalog"."int4_ops" ASC NULLS LAST -); - --- ---------------------------- --- Uniques structure for table sys_routes --- ---------------------------- -ALTER TABLE "public"."sys_routes" ADD CONSTRAINT "uniq_route_name" UNIQUE ("name"); - --- ---------------------------- --- Primary Key structure for table sys_routes --- ---------------------------- -ALTER TABLE "public"."sys_routes" ADD CONSTRAINT "sys_route_pkey" PRIMARY KEY ("id"); diff --git a/sql/sys_routes_insert.sql b/sql/sys_routes_insert.sql deleted file mode 100644 index c7b8011..0000000 --- a/sql/sys_routes_insert.sql +++ /dev/null @@ -1,93 +0,0 @@ --- 根据 Sidebar.tsx 菜单项生成的 sys_routes 表插入语句 --- 智慧法务系统路由权限数据 - --- 清理现有数据(可选) --- DELETE FROM sys_routes WHERE id > 0; --- ALTER SEQUENCE sys_route_id_seq RESTART WITH 1; - --- 插入一级菜单项 -INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES --- 系统概览 -('/home', 'home', '{"title": "系统概览", "icon": "ri-home-line", "order": 1}', 0, 1), - --- AI对话 -('/chat-with-llm', 'chat-with-llm', '{"title": "AI对话", "icon": "ri-chat-smile-2-line", "order": 2}', 0, 1), - --- 文件管理(父菜单) -('/files', 'file-management', '{"title": "文件管理", "icon": "ri-folder-line", "order": 3}', 0, 1), - --- 评查规则库(父菜单) -('/rules', 'rule-management', '{"title": "评查规则库", "icon": "ri-book-3-line", "order": 4}', 0, 1), - --- 合同模板(父菜单) -('/contract-template', 'contract-template', '{"title": "合同模板", "icon": "ri-file-search-line", "order": 5}', 0, 1), - --- 系统设置(父菜单,需要developer权限) -('/settings', 'system-settings', '{"title": "系统设置", "icon": "ri-settings-4-line", "order": 6, "requiredRole": "developer"}', 0, 1); - --- 交叉评查(父菜单) -('/cross-checking', 'cross-checking', '{"title": "交叉评查", "icon": "ri-color-filter-line", "order": 7}', 0, 1); - --- 插入文件管理的子菜单项 -INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES --- 文件上传(文件管理的子菜单,parent_id需要根据实际的file-management记录ID调整) -('/files/upload', 'file-upload', '{"title": "文件上传", "icon": "ri-upload-cloud-line", "order": 1}', - (SELECT id FROM sys_routes WHERE name = 'file-management'), 1), - --- 文档列表(文件管理的子菜单) -('/documents', 'documents', '{"title": "文档列表", "icon": "ri-file-list-3-line", "order": 2}', - (SELECT id FROM sys_routes WHERE name = 'file-management'), 1); - --- 插入评查规则库的子菜单项 -INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES --- 评查点分组(评查规则库的子菜单) -('/rule-groups', 'rule-groups', '{"title": "评查点分组", "icon": "ri-folder-open-line", "order": 1}', - (SELECT id FROM sys_routes WHERE name = 'rule-management'), 1), - --- 评查点列表(评查规则库的子菜单) -('/rules', 'rules-list', '{"title": "评查点列表", "icon": "ri-list-check-3", "order": 2}', - (SELECT id FROM sys_routes WHERE name = 'rule-management'), 1), - --- 评查文件列表(评查规则库的子菜单) -('/rules-files', 'rules-file', '{"title": "评查文件列表", "icon": "ri-list-check-2", "order": 3}', - (SELECT id FROM sys_routes WHERE name = 'rule-management'), 1), - --- 插入合同模板的子菜单项 -INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES --- 智能搜索(合同模板的子菜单) -('/contract-template/search', 'contract-search-ai', '{"title": "智能搜索", "icon": "ri-search-line", "order": 1}', - (SELECT id FROM sys_routes WHERE name = 'contract-template'), 1), - --- 合同列表(合同模板的子菜单) -('/contract-template/list', 'contract-list', '{"title": "合同列表", "icon": "ri-folder-line", "order": 2}', - (SELECT id FROM sys_routes WHERE name = 'contract-template'), 1); - --- 插入系统设置的子菜单项(需要developer权限) -INSERT INTO sys_routes (path, name, meta, parent_id, is_menu) VALUES --- 配置列表(系统设置的子菜单,需要developer权限) -('/config-lists', 'config-lists', '{"title": "配置列表", "icon": "ri-list-check-3", "order": 1, "requiredRole": "developer"}', - (SELECT id FROM sys_routes WHERE name = 'system-settings'), 1), - --- 文档类型(系统设置的子菜单,需要developer权限) -('/document-types', 'document-types', '{"title": "文档类型", "icon": "ri-file-list-line", "order": 2, "requiredRole": "developer"}', - (SELECT id FROM sys_routes WHERE name = 'system-settings'), 1), - --- 提示词管理(系统设置的子菜单,需要developer权限) -('/prompts', 'prompt-management', '{"title": "提示词管理", "icon": "ri-chat-1-line", "order": 3, "requiredRole": "developer"}', - (SELECT id FROM sys_routes WHERE name = 'system-settings'), 1); - --- 查询插入结果 -SELECT - r1.id, - r1.path, - r1.name, - r1.meta, - r1.parent_id, - r2.name as parent_name, - r1.is_menu -FROM sys_routes r1 -LEFT JOIN sys_routes r2 ON r1.parent_id = r2.id -ORDER BY - CASE WHEN r1.parent_id = 0 THEN r1.id ELSE r1.parent_id END, - r1.parent_id, - (r1.meta->>'order')::int; \ No newline at end of file diff --git a/sql/test_user_setup.sql b/sql/test_user_setup.sql deleted file mode 100644 index 2da1b7f..0000000 --- a/sql/test_user_setup.sql +++ /dev/null @@ -1,46 +0,0 @@ --- 为测试用户添加默认角色的脚本 --- 测试用户信息:sub='001', username='testuser1' - --- 首先查找测试用户 -DO $$ -DECLARE - test_user_id uuid; - existing_role_count integer; -BEGIN - -- 查找测试用户的ID - SELECT id INTO test_user_id - FROM sso_users - WHERE sub = '001' AND username = 'testuser1'; - - IF test_user_id IS NOT NULL THEN - -- 检查用户是否已经有common角色(role_id = 2) - SELECT COUNT(*) INTO existing_role_count - FROM user_role - WHERE user_id = test_user_id AND role_id = 2; - - IF existing_role_count = 0 THEN - -- 为用户添加common角色 - INSERT INTO user_role (user_id, role_id) - VALUES (test_user_id, 2); - - RAISE NOTICE '已为测试用户(%)添加默认角色(common)', test_user_id; - ELSE - RAISE NOTICE '测试用户(%)已经拥有默认角色(common)', test_user_id; - END IF; - ELSE - RAISE NOTICE '测试用户不存在,请先创建用户'; - END IF; -END $$; - --- 验证结果 -SELECT - u.id, - u.sub, - u.username, - u.nick_name, - r.role_key, - r.role_name -FROM sso_users u -LEFT JOIN user_role ur ON u.id = ur.user_id -LEFT JOIN roles r ON ur.role_id = r.id -WHERE u.sub = '001' AND u.username = 'testuser1'; \ No newline at end of file diff --git a/sql/update_get_documents_with_filters.sql b/sql/update_get_documents_with_filters.sql deleted file mode 100644 index 9301640..0000000 --- a/sql/update_get_documents_with_filters.sql +++ /dev/null @@ -1,86 +0,0 @@ -CREATE OR REPLACE FUNCTION "public"."get_documents_with_filters"("search_name" text=NULL::text, "search_document_number" text=NULL::text, "search_document_types" _int4=NULL::integer[], "search_audit_status" int4=NULL::integer, "search_file_status" text=NULL::text, "search_date_from" date=NULL::date, "search_date_to" date=NULL::date, "search_user_id" int4=NULL::integer, "page" int4=1, "page_size" int4=10) - RETURNS TABLE("id" int4, "name" varchar, "document_number" varchar, "type_id" int4, "audit_status" int4, "status" varchar, "upload_time" timestamp, "updated_at" timestamptz, "file_size" int4, "path" varchar, "is_test_document" bool, "ocr_result" jsonb, "type_name" varchar, "false_count" int8) AS $BODY$ -DECLARE - offset_val integer; -BEGIN - offset_val := (page - 1) * page_size; - - -- 如果search_user_id为NULL,直接返回空结果 - IF search_user_id IS NULL THEN - RETURN; - END IF; - - RETURN QUERY - WITH paginated_documents AS ( - SELECT d.id - FROM documents d - WHERE (search_name IS NULL OR d.name ILIKE '%' || search_name || '%') - AND (search_document_number IS NULL OR d.document_number ILIKE '%' || search_document_number || '%') - AND (search_document_types IS NULL OR d.type_id = ANY(search_document_types)) - AND (search_audit_status IS NULL OR - (CASE WHEN search_audit_status = 0 THEN d.audit_status IS NULL OR d.audit_status = 0 - ELSE d.audit_status = search_audit_status END)) - AND (search_file_status IS NULL OR d.status = search_file_status) - AND (search_date_from IS NULL OR d.updated_at >= search_date_from) - AND (search_date_to IS NULL OR d.updated_at < (search_date_to + INTERVAL '1 day')) - AND d.user_id = search_user_id -- 强制要求匹配用户ID - ORDER BY d.updated_at DESC - LIMIT page_size OFFSET offset_val - ) - SELECT - d.id, - d.name, - d.document_number, - d.type_id, - d.audit_status, - d.status, - d.upload_time, - d.updated_at, - d.file_size, - d.path, - d.is_test_document, - d.ocr_result, - dt.name AS type_name, - COUNT(er.id) FILTER (WHERE (er.evaluated_results ->> 'result')::text = 'false') AS false_count - FROM documents d - JOIN paginated_documents pd ON d.id = pd.id - LEFT JOIN document_types dt ON d.type_id = dt.id - LEFT JOIN evaluation_results er ON d.id = er.document_id - GROUP BY d.id, dt.name - ORDER BY d.updated_at DESC; -END; -$BODY$ - LANGUAGE plpgsql STABLE - COST 100 - ROWS 1000 - --- 同时也需要更新 count_documents_with_filters 函数 -CREATE OR REPLACE FUNCTION "public"."count_documents_with_filters"("search_name" text=NULL::text, "search_document_number" text=NULL::text, "search_document_types" _int4=NULL::integer[], "search_audit_status" int4=NULL::integer, "search_file_status" text=NULL::text, "search_date_from" date=NULL::date, "search_date_to" date=NULL::date, "search_user_id" int4=NULL::integer) - RETURNS int4 AS $BODY$ -DECLARE - total_count integer; -BEGIN - -- 如果search_user_id为NULL,直接返回0 - IF search_user_id IS NULL THEN - RETURN 0; - END IF; - - SELECT COUNT(*) - INTO total_count - FROM documents d - WHERE (search_name IS NULL OR d.name ILIKE '%' || search_name || '%') - AND (search_document_number IS NULL OR d.document_number ILIKE '%' || search_document_number || '%') - AND (search_document_types IS NULL OR d.type_id = ANY(search_document_types)) - AND (search_audit_status IS NULL OR - (CASE WHEN search_audit_status = 0 THEN d.audit_status IS NULL OR d.audit_status = 0 - ELSE d.audit_status = search_audit_status END)) - AND (search_file_status IS NULL OR d.status = search_file_status) - AND (search_date_from IS NULL OR d.updated_at >= search_date_from) - AND (search_date_to IS NULL OR d.updated_at < (search_date_to + INTERVAL '1 day')) - AND d.user_id = search_user_id; -- 强制要求匹配用户ID - - RETURN total_count; -END; -$BODY$ - LANGUAGE plpgsql STABLE - COST 100 \ No newline at end of file diff --git a/sql/update_get_review_files_with_details.sql b/sql/update_get_review_files_with_details.sql deleted file mode 100644 index bb5e8d5..0000000 --- a/sql/update_get_review_files_with_details.sql +++ /dev/null @@ -1,118 +0,0 @@ -CREATE OR REPLACE FUNCTION "public"."get_review_files_with_details"("p_keyword" text=NULL::text, "p_typeid" _int4=NULL::integer[], "p_evaluations_status" int4=NULL::integer, "p_date_from" date=NULL::date, "p_date_to" date=NULL::date, "p_sort_order" text='created_at_desc'::text, "p_page" int4=1, "p_page_size" int4=10, "p_document_ids" _int4=NULL::integer[], "p_user_id" int4=NULL::integer) - RETURNS TABLE("id" int4, "status" varchar, "path" varchar, "file_name" varchar, "file_code" varchar, "file_type_name" varchar, "file_type_id" int4, "file_size" int4, "upload_time" timestamptz, "created_at" timestamptz, "evaluations_status" int4, "audit_status" int4, "created_by_user_id" int4, "issue_count" int8, "total_score" numeric, "pass_count" int8, "warning_count" int8, "fail_count" int8, "manual_count" int8, "issues" jsonb) AS $BODY$ -DECLARE - offset_val integer; - sort_column text; - sort_direction text; -BEGIN - offset_val := (p_page - 1) * p_page_size; - - -- 如果p_user_id为NULL,直接返回0 - IF p_user_id IS NULL THEN - RETURN; - END IF; - - SELECT - CASE - WHEN p_sort_order = 'upload_time_asc' THEN 'created_at' - WHEN p_sort_order = 'upload_time_desc' THEN 'created_at' - WHEN p_sort_order = 'issue_count_asc' THEN 'issue_count' - WHEN p_sort_order = 'issue_count_desc' THEN 'issue_count' - ELSE 'created_at' -- 默认排序字段 - END, - CASE - WHEN p_sort_order LIKE '%_asc' THEN 'ASC' - ELSE 'DESC' - END - INTO sort_column, sort_direction; - - RETURN QUERY EXECUTE format(' - WITH doc_agg AS ( - SELECT - er.document_id, - COUNT(*) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = false) AS issue_count, - SUM(ep.score) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = true) AS total_score, - COUNT(*) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = true) AS pass_count, - COUNT(*) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = false AND (ep.suggestion_message_type = ''warning'' OR ep.suggestion_message_type = ''info'')) AS warning_count, - COUNT(*) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = false AND ep.suggestion_message_type = ''error'') AS fail_count, - COUNT(*) FILTER (WHERE ep.post_action = ''manual'') AS manual_count, - jsonb_agg( - jsonb_build_object( - ''severity'', ep.suggestion_message_type, - ''message'', er.evaluated_results->>''message'' - ) - ) FILTER (WHERE (er.evaluated_results->>''result'')::boolean = false) AS issues - FROM evaluation_results er - JOIN evaluation_points ep ON er.evaluation_point_id = ep.id - GROUP BY er.document_id - ) - SELECT - d.id, - d.status, - d.path, - d.name AS file_name, - d.document_number AS file_code, - dt.name AS file_type_name, - d.type_id AS file_type_id, - d.file_size, - d.upload_time::timestamptz, - d.created_at, - d.evaluations_status, - d.audit_status, - d.user_id AS created_by_user_id, - COALESCE(agg.issue_count, 0) AS issue_count, - COALESCE(agg.total_score, 0) AS total_score, - COALESCE(agg.pass_count, 0) AS pass_count, - COALESCE(agg.warning_count, 0) AS warning_count, - COALESCE(agg.fail_count, 0) AS fail_count, - COALESCE(agg.manual_count, 0) AS manual_count, - agg.issues - FROM documents d - LEFT JOIN document_types dt ON d.type_id = dt.id - LEFT JOIN doc_agg agg ON d.id = agg.document_id - WHERE - ($1 IS NULL OR (d.name ILIKE ''%%'' || $1 || ''%%'' OR d.document_number ILIKE ''%%'' || $1 || ''%%'')) AND - ($2 IS NULL OR d.type_id = ANY($2)) AND - ($3 IS NULL OR d.evaluations_status = $3) AND - ($4 IS NULL OR d.created_at >= $4) AND - ($5 IS NULL OR d.created_at < ($5 + INTERVAL ''1 day'')) AND - ($8 IS NULL OR d.id = ANY($8)) AND - ($9 d.user_id = $9) - ORDER BY %I %s - LIMIT $6 OFFSET $7 - ', sort_column, sort_direction) - USING p_keyword, p_typeid, p_evaluations_status, p_date_from, p_date_to, p_page_size, offset_val, p_document_ids, p_user_id; -END; -$BODY$ - LANGUAGE plpgsql VOLATILE - COST 100 - ROWS 1000; - --- 同时创建或更新 count_review_files 函数 -CREATE OR REPLACE FUNCTION "public"."count_review_files"("p_keyword" text=NULL::text, "p_typeid" _int4=NULL::integer[], "p_evaluations_status" int4=NULL::integer, "p_date_from" date=NULL::date, "p_date_to" date=NULL::date, "p_document_ids" _int4=NULL::integer[], "p_user_id" int4=NULL::integer) - RETURNS int4 AS $BODY$ -DECLARE - total_count integer; -BEGIN - -- 如果p_user_id为NULL,直接返回0 - IF p_user_id IS NULL THEN - RETURN 0; - END IF; - - SELECT COUNT(*) - INTO total_count - FROM documents d - WHERE - (p_keyword IS NULL OR (d.name ILIKE '%' || p_keyword || '%' OR d.document_number ILIKE '%' || p_keyword || '%')) AND - (p_typeid IS NULL OR d.type_id = ANY(p_typeid)) AND - (p_evaluations_status IS NULL OR d.evaluations_status = p_evaluations_status) AND - (p_date_from IS NULL OR d.created_at >= p_date_from) AND - (p_date_to IS NULL OR d.created_at < (p_date_to + INTERVAL '1 day')) AND - (p_document_ids IS NULL OR d.id = ANY(p_document_ids)) AND - d.user_id = p_user_id; - - RETURN total_count; -END; -$BODY$ - LANGUAGE plpgsql STABLE - COST 100; \ No newline at end of file diff --git a/sql/user_role.sql b/sql/user_role.sql deleted file mode 100644 index b2c74f8..0000000 --- a/sql/user_role.sql +++ /dev/null @@ -1,47 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 智慧法务 - Source Server Type : PostgreSQL - Source Server Version : 170005 - Source Host : nas.7bm.co:54302 - Source Catalog : docauditai - Source Schema : public - - Target Server Type : PostgreSQL - Target Server Version : 170005 - File Encoding : 65001 - - Date: 18/07/2025 20:13:33 -*/ - - --- ---------------------------- --- Table structure for user_role --- ---------------------------- -DROP TABLE IF EXISTS "public"."user_role"; -CREATE TABLE "public"."user_role" ( - "id" int4 NOT NULL DEFAULT nextval('user_role_id_seq'::regclass), - "user_id" int4 NOT NULL, - "role_id" int4 NOT NULL, - "created_at" timestamptz(6) DEFAULT now(), - "updated_at" timestamptz(6) DEFAULT now() -) -; - --- ---------------------------- --- Triggers structure for table user_role --- ---------------------------- -CREATE TRIGGER "update_user_role_updated_at" BEFORE UPDATE ON "public"."user_role" -FOR EACH ROW -EXECUTE PROCEDURE "public"."update_updated_at"(); - --- ---------------------------- --- Uniques structure for table user_role --- ---------------------------- -ALTER TABLE "public"."user_role" ADD CONSTRAINT "user_role_user_id_role_id_key" UNIQUE ("user_id", "role_id"); - --- ---------------------------- --- Primary Key structure for table user_role --- ---------------------------- -ALTER TABLE "public"."user_role" ADD CONSTRAINT "sys_user_role_pkey" PRIMARY KEY ("id");