-- 项目管理系统 数据库与表结构 -- 依据:《产品文档》《初始需求》 -- 数据库名:ocean SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- 创建数据库 -- ---------------------------- CREATE DATABASE IF NOT EXISTS `ocean` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `ocean`; -- ---------------------------- -- 用户表(角色:管理员、市场部、工程部、技经部、财务部、物贸部) -- ---------------------------- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` varchar(64) NOT NULL COMMENT '用户ID', `username` varchar(64) NOT NULL COMMENT '账号', `password_hash` varchar(255) NOT NULL COMMENT '密码哈希', `role` enum('管理员','市场部','工程部','技经部','财务部','物贸部') NOT NULL COMMENT '角色', `display_name` varchar(64) DEFAULT NULL COMMENT '显示名称', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; -- ---------------------------- -- 项目表(5 个分类合并为一张表,便于查询与列表筛选) -- 列表筛选用:progress 项目进度、cost 项目费用 -- ---------------------------- DROP TABLE IF EXISTS `projects`; CREATE TABLE `projects` ( `id` varchar(64) NOT NULL COMMENT '项目ID', `progress` varchar(32) DEFAULT NULL COMMENT '项目进度(列表筛选)', `cost` varchar(32) DEFAULT NULL COMMENT '项目费用(列表筛选)', -- 合同信息 `serial_no` varchar(32) DEFAULT NULL COMMENT '序号', `contract_code` varchar(128) NOT NULL COMMENT '合同编号', `power_bureau_contract_code` varchar(128) DEFAULT NULL COMMENT '供电局项目合同编号', `project_name` varchar(255) NOT NULL COMMENT '项目名称', `sub_item_count` int DEFAULT NULL COMMENT '子项个数', `sub_item_code` varchar(128) DEFAULT NULL COMMENT '子项编码', `total_investment` decimal(20,4) DEFAULT NULL COMMENT '项目总投资(万元)', `bid_contract_amount` decimal(20,4) DEFAULT NULL COMMENT '中标合同金额(万元)', `warranty_ratio` varchar(32) DEFAULT NULL COMMENT '质保金比例', `settlement_amount` decimal(20,4) DEFAULT NULL COMMENT '结算金额(万元)', `total_cost_estimate` decimal(20,4) DEFAULT NULL COMMENT '总成本测算', `voltage_level` varchar(64) DEFAULT NULL COMMENT '工程电压等级', `project_category` varchar(64) DEFAULT NULL COMMENT '工程类别', `owner_unit` varchar(255) DEFAULT NULL COMMENT '业主单位', `owner_contact` varchar(255) DEFAULT NULL COMMENT '业主联系人及电话', `bid_type` varchar(64) DEFAULT NULL COMMENT '中标形式', `sign_date` date DEFAULT NULL COMMENT '签订日期', `start_date` date DEFAULT NULL COMMENT '开工日期', `planned_completion_date` date DEFAULT NULL COMMENT '计划竣工日期', `actual_completion_date` date DEFAULT NULL COMMENT '实际竣工日期', `warranty_amount` decimal(20,4) DEFAULT NULL COMMENT '质保金(万元)', `warranty_end_date` date DEFAULT NULL COMMENT '质保期截止日', `actual_warranty_refund_date` date DEFAULT NULL COMMENT '实际退质保金日期', `project_department` varchar(128) DEFAULT NULL COMMENT '所属项目部', `project_leader_contact` varchar(255) DEFAULT NULL COMMENT '项目负责人及电话', `payment_method` varchar(128) DEFAULT NULL COMMENT '工程款拨付方式', -- 成本控制 `total_cost` decimal(20,4) DEFAULT NULL COMMENT '总体成本', `is_adjusted` varchar(8) DEFAULT NULL COMMENT '是否调整:是/否', `migrant_worker_plan` varchar(64) DEFAULT NULL COMMENT '农民工工资(按进度计划)', `migrant_worker_actual` decimal(20,4) DEFAULT NULL COMMENT '农民工工资(实付)', `self_supply_material_control` decimal(20,4) DEFAULT NULL COMMENT '乙供材料费(控制)', `material_payable_by_ratio` decimal(20,4) DEFAULT NULL COMMENT '应付材料费(按收款比例)', `material_actual_occurred` decimal(20,4) DEFAULT NULL COMMENT '实际发生材料费', `material_actual_paid` decimal(20,4) DEFAULT NULL COMMENT '实际支付材料费', `other_cost_control` decimal(20,4) DEFAULT NULL COMMENT '其他费用(控制)', `other_payable` decimal(20,4) DEFAULT NULL COMMENT '应付其他费', `other_actual` decimal(20,4) DEFAULT NULL COMMENT '实际其他费用', `tax` decimal(20,4) DEFAULT NULL COMMENT '税金', `profit` decimal(20,4) DEFAULT NULL COMMENT '利润(万元)', `actual_profit` decimal(20,4) DEFAULT NULL COMMENT '实际利润(万元)', `cost_settlement_amount` decimal(20,4) DEFAULT NULL COMMENT '成本结算金额(万元)', -- 应收款 `receivable_progress` decimal(20,4) DEFAULT NULL COMMENT '应收款(完成进度款)', `invoice_amount` decimal(20,4) DEFAULT NULL COMMENT '开票金额(万元)', `actual_receipt_amount` decimal(20,4) DEFAULT NULL COMMENT '实际收款金额(万元)', `actual_receipt_rate` varchar(32) DEFAULT NULL COMMENT '实际收款完成率', -- 应付款 `payable_amount` decimal(20,4) DEFAULT NULL COMMENT '应付款金额(万元)', `actual_payment_amount` decimal(20,4) DEFAULT NULL COMMENT '实际付款金额(万元)', `unreceived_amount` decimal(20,4) DEFAULT NULL COMMENT '未收款(万元)', `actual_payment_rate` varchar(32) DEFAULT NULL COMMENT '实际付款完成率', `migrant_worker_arrears` decimal(20,4) DEFAULT NULL COMMENT '民工工资清欠金额(万元)', -- 其他 `settlement_cost_estimate` decimal(20,4) DEFAULT NULL COMMENT '结算后成本测算金额', `settlement_labor_cost` decimal(20,4) DEFAULT NULL COMMENT '结算人工费', `settlement_material_cost` decimal(20,4) DEFAULT NULL COMMENT '结算材料费', `settlement_other_cost` decimal(20,4) DEFAULT NULL COMMENT '结算其他费', `due_settlement_count` int DEFAULT NULL COMMENT '到期应结算项目个数', `overdue_settlement_count` int DEFAULT NULL COMMENT '到期未完成结算个数', `existing_problems` text COMMENT '存在的问题', `suggestions` text COMMENT '建议措施', `cumulative_progress` varchar(64) DEFAULT NULL COMMENT '累计进度', `remark` text COMMENT '备注', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_contract_code` (`contract_code`), KEY `idx_project_name` (`project_name`), KEY `idx_progress` (`progress`), KEY `idx_cost` (`cost`), KEY `idx_updated_at` (`updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目表(含合同信息、成本控制、应收款、应付款、其他)'; -- ---------------------------- -- 操作日志表(修改项目信息时记录) -- ---------------------------- DROP TABLE IF EXISTS `operation_logs`; CREATE TABLE `operation_logs` ( `id` varchar(64) NOT NULL COMMENT '日志ID', `project_id` varchar(64) NOT NULL COMMENT '项目ID', `operator_id` varchar(64) NOT NULL COMMENT '操作人ID', `operated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', `summary` varchar(128) DEFAULT NULL COMMENT '修改摘要,如:合同信息、成本控制', `detail` text COMMENT '修改内容详情', PRIMARY KEY (`id`), KEY `idx_project_id` (`project_id`), KEY `idx_operator_id` (`operator_id`), KEY `idx_operated_at` (`operated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目操作日志表'; SET FOREIGN_KEY_CHECKS = 1;