-- 项目管理系统 数据库与表结构
-- 依据：《产品文档》《初始需求》
-- 数据库名：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 '项目费用（列表筛选）',
  `statistics_type` 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` varchar(512) 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 '签订日期',
  `sign_date_str` varchar(128) DEFAULT NULL COMMENT '签订日期原文：日期正常或导入字符串',
  `start_date` date DEFAULT NULL COMMENT '开工日期',
  `start_date_str` varchar(128) DEFAULT NULL COMMENT '开工日期原文：日期正常或导入字符串',
  `planned_completion_date` date DEFAULT NULL COMMENT '计划竣工日期',
  `planned_completion_date_str` varchar(128) DEFAULT NULL COMMENT '计划竣工日期原文：日期正常或导入字符串',
  `actual_completion_date` date DEFAULT NULL COMMENT '实际竣工日期',
  `actual_completion_date_str` varchar(128) DEFAULT NULL COMMENT '实际竣工日期原文：日期正常或导入字符串',
  `warranty_amount` decimal(20,4) DEFAULT NULL COMMENT '质保金（万元）',
  `warranty_end_date` varchar(256) 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(2048) DEFAULT NULL COMMENT '工程款拨付方式',
  -- 成本控制
  `total_cost` decimal(20,4) DEFAULT NULL COMMENT '总体成本',
  `is_adjusted` varchar(512) 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;
