-- VPP专属业务表 DDL
-- 来源: 虚拟电厂平台数据库设计文档 V1.0

CREATE TABLE `vpp_customer` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `account_no` VARCHAR(32) NOT NULL COMMENT '电力户号，全局唯一',
    `customer_name` VARCHAR(200) NOT NULL COMMENT '客户名称',
    `customer_type` TINYINT NOT NULL COMMENT '1高压 2低压商用 3居民充电桩 4自有资产',
    `power_company` VARCHAR(50) NOT NULL COMMENT '供电公司简称',
    `contract_capacity` DECIMAL(12,4) NOT NULL COMMENT '用电容量 kVA/kW',
    `credit_status` TINYINT NULL COMMENT '1正常 2关注 3不良',
    `lifecycle_status` TINYINT NOT NULL COMMENT '1待准入 2已准入 3已签约 4履约中 5待续约 6已续约 7已解约',
    `dr_notify_minutes` INT NULL COMMENT '需求响应提前通知分钟数，默认30',
    `dr_up_capacity_kw` DECIMAL(12,4) NULL COMMENT '登记上调能力 kW',
    `dr_down_capacity_kw` DECIMAL(12,4) NULL COMMENT '登记下调能力 kW',
    `is_group_user` TINYINT NULL COMMENT '是否集团内用户 0否 1是',
    `is_green_power` TINYINT NULL COMMENT '是否绿电用户 0否 1是',
    `is_coop_dev_user` TINYINT NULL COMMENT '是否合作开发用户 0否 1是',
    `coop_partner_name` VARCHAR(200) NULL COMMENT '合作开发单位名称',
    `province` VARCHAR(50) NULL COMMENT '省',
    `city` VARCHAR(50) NULL COMMENT '市',
    `district` VARCHAR(50) NULL COMMENT '区',
    `address` VARCHAR(500) NULL COMMENT '详细地址',
    `business_license_url` VARCHAR(500) NULL COMMENT '营业执照附件',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    `is_vpp_resource` TINYINT NOT NULL COMMENT '是否虚拟电厂资源 0否 1是',
    `vpp_category` VARCHAR(32) NULL COMMENT '虚拟电厂分类',
    `dr_resource_type` VARCHAR(32) NULL COMMENT '需求响应资源分类',
    `vpp_proxy_code` VARCHAR(64) NULL COMMENT '虚拟电厂代理编码',
    `industry` VARCHAR(32) NULL COMMENT '所属行业',
    `industry_sector` VARCHAR(32) NULL COMMENT '所属产业',
    `running_capacity` DECIMAL(12,4) NULL COMMENT '运行容量 kW',
    `production_start_date` TIME NULL COMMENT '生产经营开始时间',
    `production_end_date` TIME NULL COMMENT '生产经营结束时间',
    `power_address` VARCHAR(500) NULL COMMENT '用电地址',
    `signing_date` DATETIME(3) NULL COMMENT '签约时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_customer_account_no` (account_no),
    KEY `idx_customer_name` (customer_name),
    KEY `idx_customer_lifecycle` (lifecycle_status, deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户档案';

CREATE TABLE `vpp_customer_access` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `apply_no` VARCHAR(32) NOT NULL COMMENT '申请编号',
    `account_no` VARCHAR(32) NOT NULL COMMENT '电力户号',
    `customer_name` VARCHAR(200) NOT NULL COMMENT '客户名称',
    `customer_type` TINYINT NOT NULL COMMENT '客户类型',
    `power_company` VARCHAR(50) NOT NULL COMMENT '供电公司',
    `contract_capacity` DECIMAL(12,4) NOT NULL COMMENT '用电容量',
    `business_license_url` VARCHAR(500) NULL COMMENT '营业执照',
    `credit_status` TINYINT NULL COMMENT '信用状况',
    `access_status` TINYINT NOT NULL COMMENT '0待审核 1通过 2驳回',
    `audit_opinion` VARCHAR(500) NULL COMMENT '审核意见',
    `audit_at` DATETIME(3) NULL COMMENT '审核时间',
    `customer_id` BIGINT NULL COMMENT '关联客户ID',
    `apply_at` DATETIME(3) NOT NULL COMMENT '申请时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_access_apply_no` (apply_no),
    KEY `idx_access_status` (access_status, apply_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='准入申请';

CREATE TABLE `vpp_customer_contact` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `contact_name` VARCHAR(100) NOT NULL COMMENT '联系人姓名',
    `contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话',
    `contact_email` VARCHAR(100) NULL COMMENT '邮箱',
    `is_primary` TINYINT NOT NULL COMMENT '是否主联系人 0否 1是',
    `position` VARCHAR(50) NULL COMMENT '职务',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_contact_customer` (customer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户联系人';

CREATE TABLE `vpp_contract` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `contract_no` VARCHAR(64) NOT NULL COMMENT '合同编号',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `template_id` BIGINT NULL COMMENT '模板ID',
    `related_contract_id` BIGINT NULL COMMENT '关联合同ID',
    `contract_type` TINYINT NOT NULL COMMENT '1购售电 2需求响应合作 3聚合代理 4服务代理 5居民充电桩 6自有资产',
    `contract_name` VARCHAR(200) NOT NULL COMMENT '合同名称',
    `party_a` VARCHAR(200) NULL COMMENT '甲方',
    `party_b` VARCHAR(200) NULL COMMENT '乙方',
    `contract_amount` DECIMAL(18,4) NULL COMMENT '合同金额',
    `contract_status` TINYINT NOT NULL COMMENT '0草稿 1审核中 2已生效 3已到期 4已终止',
    `sign_date` DATE NULL COMMENT '签订日期',
    `effective_date` DATE NULL COMMENT '生效日期',
    `expire_date` DATE NULL COMMENT '到期日期',
    `file_url` VARCHAR(500) NULL COMMENT '合同文件URL',
    `customer_ratio` DECIMAL(6,4) NULL COMMENT '客户分成比例',
    `operator_ratio` DECIMAL(6,4) NULL COMMENT '运营商分成比例',
    `price_json` JSON NULL COMMENT '电价条款JSON',
    `account_info_json` JSON NULL COMMENT '分成账户信息',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_contract_no` (contract_no),
    KEY `idx_contract_customer` (customer_id),
    KEY `idx_contract_related` (related_contract_id),
    KEY `idx_contract_status` (contract_status, sign_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同';

CREATE TABLE `vpp_contract_template` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `template_code` VARCHAR(32) NOT NULL COMMENT '模板编码',
    `template_name` VARCHAR(200) NOT NULL COMMENT '模板名称',
    `contract_type` TINYINT NOT NULL COMMENT '合同类型 ',
    `template_kind` TINYINT NULL COMMENT '模板分类 1居间/层间 2普通/直网',
    `version` VARCHAR(20) NOT NULL COMMENT '版本号',
    `file_url` VARCHAR(500) NOT NULL COMMENT '模板文件URL',
    `variables_json` JSON NULL COMMENT '占位符变量定义',
    `is_enabled` TINYINT NOT NULL COMMENT '是否启用',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_template_code` (template_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同模板';

CREATE TABLE `vpp_contract_audit_log` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `contract_id` BIGINT NOT NULL COMMENT '合同ID',
    `action` TINYINT NOT NULL COMMENT '1提交 2通过 3驳回 4归档',
    `opinion` VARCHAR(500) NULL COMMENT '意见',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    PRIMARY KEY (`id`),
    KEY `idx_contract_audit_contract` (contract_id, create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同审核流水';

CREATE TABLE `vpp_resource_point` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `resource_code` VARCHAR(64) NOT NULL COMMENT '资源编号',
    `resource_name` VARCHAR(200) NOT NULL COMMENT '资源名称',
    `site_id` BIGINT NULL COMMENT '所属站点ID',
    `device_id` BIGINT NULL COMMENT '关联设备ID',
    `resource_type` VARCHAR(16) NOT NULL COMMENT 'PV/ESS/EVCS/IND_LOAD/COM_BLDG',
    `capacity_kw` DECIMAL(12,4) NOT NULL COMMENT '装机容量 kW',
    `is_control` TINYINT NULL COMMENT '是否可控 0否 1是',
    `is_support_peak` TINYINT NULL COMMENT '是否支持削峰 0否 1是',
    `is_support_fm` TINYINT NULL COMMENT '是否支持调频 0否 1是',
    `response_min` INT NULL COMMENT '最小响应时长 分钟',
    `max_up_kw` DECIMAL(12,4) NULL COMMENT '最大上调能力 kW',
    `min_down_kw` DECIMAL(12,4) NULL COMMENT '最小下调能力 kW',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_resource_code` (resource_code),
    KEY `idx_resource_site` (site_id),
    KEY `idx_resource_device` (device_id),
    KEY `idx_resource_type_deleted` (resource_type, deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='资源点';

CREATE TABLE `vpp_site_config` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `site_id` BIGINT NOT NULL COMMENT '站点ID',
    `collect_interval_sec` INT NOT NULL COMMENT '采集频率秒 60/300/900',
    `power_upper_limit` DECIMAL(12,4) NULL COMMENT '功率上限告警',
    `power_lower_limit` DECIMAL(12,4) NULL COMMENT '功率下限告警',
    `soc_upper_limit` DECIMAL(5,2) NULL COMMENT 'SOC上限%',
    `soc_lower_limit` DECIMAL(5,2) NULL COMMENT 'SOC下限%',
    `offline_timeout_sec` INT NULL COMMENT '离线超时秒',
    `alarm_rule_json` JSON NULL COMMENT '扩展告警规则',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_site_config_site` (site_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站点运行参数';

CREATE TABLE `vpp_device` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `device_code` VARCHAR(64) NOT NULL COMMENT '设备编号',
    `device_uuid` VARCHAR(64) NULL COMMENT '物联网设备唯一标识',
    `device_name` VARCHAR(200) NOT NULL COMMENT '设备名称',
    `site_id` BIGINT NULL COMMENT '所属站点ID',
    `device_type` VARCHAR(32) NOT NULL COMMENT 'INVERTER/PCS/EVCS/METER/Gateway等',
    `manufacturer` VARCHAR(100) NULL COMMENT '厂商',
    `model` VARCHAR(100) NULL COMMENT '型号',
    `rated_power_kw` DECIMAL(12,4) NULL COMMENT '额定功率',
    `firmware_version` VARCHAR(50) NULL COMMENT '固件版本',
    `last_online_at` DATETIME(3) NULL COMMENT '最后在线时间',
    `gateway_id` VARCHAR(64) NULL COMMENT 'IoT网关标识',
    `un_resource_id` VARCHAR(64) NULL COMMENT '运管资源ID',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_device_code` (device_code),
    UNIQUE KEY `uk_device_un_resource_id` (`un_resource_id`),
    KEY `idx_device_uuid` (device_uuid),
    KEY `idx_device_site` (site_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备';

CREATE TABLE `vpp_device_control_log` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `device_id` BIGINT NOT NULL COMMENT '设备ID',
    `control_type` VARCHAR(32) NOT NULL COMMENT 'START/STOP/CONFIG/OTA',
    `control_params` JSON NULL COMMENT '控制参数',
    `control_result` TINYINT NOT NULL COMMENT '0失败 1成功 2执行中',
    `result_message` VARCHAR(500) NULL COMMENT '结果说明',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    PRIMARY KEY (`id`),
    KEY `idx_control_device` (device_id, create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备远程控制日志';

CREATE TABLE `vpp_energy_reading_monthly` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `site_id` BIGINT NULL COMMENT '站点ID，可空表示户号级',
    `settle_year` VARCHAR(4) NOT NULL COMMENT '结算年',
    `settle_month` TINYINT NOT NULL COMMENT '结算月',
    `total_energy_kwh` DECIMAL(18,4) NOT NULL COMMENT '总用电量 kWh',
    `peak_energy_kwh` DECIMAL(18,4) NULL COMMENT '峰电量',
    `flat_energy_kwh` DECIMAL(18,4) NULL COMMENT '平电量',
    `valley_energy_kwh` DECIMAL(18,4) NULL COMMENT '谷电量',
    `sharp_energy_kwh` DECIMAL(18,4) NULL COMMENT '尖电量',
    `gen_energy_kwh` DECIMAL(18,4) NULL COMMENT '发电量 kWh',
    `calc_status` TINYINT NOT NULL COMMENT '0待核算 1已核算 2异常',
    `calc_at` DATETIME(3) NULL COMMENT '核算时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_energy_monthly` (customer_id, site_id, settle_year, settle_month),
    KEY `idx_energy_period` (settle_year, settle_month)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='月度电量核算';

CREATE TABLE `vpp_energy_summary_daily` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `summary_date` DATE NOT NULL COMMENT '汇总日期',
    `resource_id` BIGINT NULL COMMENT '资源点ID，NULL表示全站',
    `resource_type` VARCHAR(16) NULL COMMENT '资源类型',
    `gen_energy_kwh` DECIMAL(18,4) NULL COMMENT '发电量',
    `use_energy_kwh` DECIMAL(18,4) NULL COMMENT '用电量',
    `green_ratio` DECIMAL(5,2) NULL COMMENT '绿电消纳比例%',
    `max_power_kw` DECIMAL(12,4) NULL COMMENT '日最大有功功率',
    `avg_power_kw` DECIMAL(12,4) NULL COMMENT '日平均有功功率',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_summary_daily` (summary_date, resource_id),
    KEY `idx_summary_date` (summary_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='日度能源汇总';

CREATE TABLE `vpp_settlement_bill` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `bill_no` VARCHAR(64) NOT NULL COMMENT '账单编号',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `site_id` BIGINT NULL COMMENT '站点ID，可空表示户号级',
    `settle_year` VARCHAR(4) NOT NULL COMMENT '结算年',
    `settle_month` TINYINT NOT NULL COMMENT '结算月',
    `total_energy_kwh` DECIMAL(18,4) NOT NULL COMMENT '总用电量',
    `total_amount` DECIMAL(18,4) NOT NULL COMMENT '应付金额',
    `paid_amount` DECIMAL(18,4) NOT NULL COMMENT '已付金额，默认0',
    `payment_status` TINYINT NOT NULL COMMENT '0未缴 1部分 2已缴 3逾期',
    `due_date` DATE NULL COMMENT '缴费截止日期',
    `bill_file_url` VARCHAR(500) NULL COMMENT '账单PDF',
    `generated_at` DATETIME(3) NULL COMMENT '生成时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_bill_no` (bill_no),
    KEY `idx_bill_customer` (customer_id, settle_year, settle_month),
    KEY `idx_bill_payment` (payment_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='电费账单';

CREATE TABLE `vpp_settlement_bill_detail` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `bill_id` BIGINT NOT NULL COMMENT '账单ID',
    `time_period` TINYINT NOT NULL COMMENT '1尖 2峰 3平 4谷',
    `energy_kwh` DECIMAL(18,4) NOT NULL COMMENT '时段电量',
    `price` DECIMAL(10,4) NOT NULL COMMENT '时段电价',
    `amount` DECIMAL(18,4) NOT NULL COMMENT '时段金额',
    `tenant_id` INT NULL COMMENT '租户ID',
    PRIMARY KEY (`id`),
    KEY `idx_bill_detail_bill` (bill_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='账单分时明细';

CREATE TABLE `vpp_payment_record` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `bill_id` BIGINT NOT NULL COMMENT '账单ID',
    `payment_amount` DECIMAL(18,4) NOT NULL COMMENT '缴费金额',
    `payment_method` TINYINT NOT NULL COMMENT '1线下转账 2电费抵扣 3其他',
    `payment_date` DATE NOT NULL COMMENT '缴费日期',
    `voucher_url` VARCHAR(500) NULL COMMENT '缴费凭证',
    `remark` VARCHAR(500) NULL COMMENT '对账备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    PRIMARY KEY (`id`),
    KEY `idx_payment_bill` (bill_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='缴费记录';

CREATE TABLE `vpp_report_task` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `task_no` VARCHAR(64) NOT NULL COMMENT '任务编号',
    `task_name` VARCHAR(200) NOT NULL COMMENT '任务名称',
    `report_org` TINYINT NOT NULL COMMENT '1交易中心 2能监局 3经信委 4国网上海',
    `report_cycle` TINYINT NOT NULL COMMENT '1月报 2年报 3临时',
    `report_type` VARCHAR(64) NOT NULL COMMENT '报表类型编码',
    `deadline` DATETIME(3) NOT NULL COMMENT '截止日期',
    `task_status` TINYINT NOT NULL COMMENT '0待填报 1待审核 2报送中 3已完成 4已逾期',
    `assignee_id` BIGINT NULL COMMENT '填报人',
    `remind_days` INT NULL COMMENT '提前提醒天数',
    `site_ids` JSON NULL COMMENT '关联站点ID列表',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_report_task_no` (task_no),
    KEY `idx_report_task_status` (task_status, deadline)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报送任务';

CREATE TABLE `vpp_report_record` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `task_id` BIGINT NOT NULL COMMENT '任务ID',
    `record_no` VARCHAR(64) NOT NULL COMMENT '报送记录编号',
    `report_period` VARCHAR(32) NOT NULL COMMENT '报送周期标识 如2026-05',
    `submit_mode` TINYINT NOT NULL COMMENT '1接口推送 2手动上传',
    `record_status` TINYINT NOT NULL COMMENT '0草稿 1待审核 2报送中 3成功 4失败',
    `report_file_url` VARCHAR(500) NULL COMMENT '报送文件',
    `receipt_file_url` VARCHAR(500) NULL COMMENT '官方回执',
    `retry_count` TINYINT NOT NULL COMMENT '重试次数，默认0',
    `submitted_at` DATETIME(3) NULL COMMENT '报送时间',
    `archived_at` DATETIME(3) NULL COMMENT '归档时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_report_record_no` (record_no),
    KEY `idx_report_record_task` (task_id),
    KEY `idx_report_record_period` (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报送记录';

CREATE TABLE `vpp_report_data` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `record_id` BIGINT NOT NULL COMMENT '报送记录ID',
    `form_data` JSON NOT NULL COMMENT '填报表单JSON',
    `validation_errors` JSON NULL COMMENT '校验异常项',
    `is_draft` TINYINT NOT NULL COMMENT '是否草稿',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_report_data_record` (record_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报送填报数据';

CREATE TABLE `vpp_report_audit_log` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `record_id` BIGINT NOT NULL COMMENT '报送记录ID',
    `audit_level` TINYINT NOT NULL COMMENT '1填报 2复核 3审批',
    `action` TINYINT NOT NULL COMMENT '1提交 2通过 3驳回',
    `opinion` VARCHAR(500) NULL COMMENT '意见',
    `operator_ip` VARCHAR(64) NULL COMMENT '操作IP',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    PRIMARY KEY (`id`),
    KEY `idx_report_audit_record` (record_id, create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报送审核流水';

CREATE TABLE `vpp_dr_event` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `event_id` VARCHAR(64) NOT NULL COMMENT '运管平台事件ID',
    `event_name` VARCHAR(200) NULL COMMENT '事件名称',
    `response_type` TINYINT NOT NULL COMMENT '1日前 2日内 3秒级',
    `event_type` TINYINT NULL COMMENT '1削峰 2填谷',
    `start_time` DATETIME(3) NOT NULL COMMENT '响应开始',
    `end_time` DATETIME(3) NOT NULL COMMENT '响应结束',
    `declare_deadline` DATETIME(3) NULL COMMENT '申报截止时间',
    `invite_scope` VARCHAR(500) NULL COMMENT '邀约范围',
    `target_capacity_kw` DECIMAL(12,4) NOT NULL COMMENT '邀约规模 kW',
    `cleared_capacity_kw` DECIMAL(12,4) NULL COMMENT '出清规模 kW',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `attachment_url` VARCHAR(500) NULL COMMENT '附件URL',
    `attachment_name` VARCHAR(200) NULL COMMENT '附件名称',
    `subsidy_price` DECIMAL(10,4) NULL COMMENT '补贴标准 元/kWh',
    `floating_coefficient` DECIMAL(10,4) NULL COMMENT '下浮系数',
    `event_status` TINYINT NOT NULL COMMENT '0待参与 1已申报 2申报完成 3执行中 4已结束 5已取消',
    `raw_payload` JSON NULL COMMENT '原始邀约报文',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_dr_event_id` (event_id),
    KEY `idx_dr_event_time` (start_time, event_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='需求响应事件';

CREATE TABLE `vpp_dr_participation` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `event_id` BIGINT NOT NULL COMMENT '事件ID',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `resource_id` BIGINT NULL COMMENT '资源点ID',
    `participate_status` TINYINT NOT NULL COMMENT '0待确认 1参与 2拒绝',
    `declared_capacity_kw` DECIMAL(12,4) NULL COMMENT '申报出清容量',
    `cleared_capacity_kw` DECIMAL(12,4) NULL COMMENT '出清容量',
    `completion_rate` DECIMAL(12,4) NULL COMMENT '完成率=出清容量/申报出清容量',
    `declared_at` DATETIME(3) NULL COMMENT '申报时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_dr_part_event` (event_id),
    UNIQUE KEY `uk_dr_part` (event_id, customer_id, resource_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='事件参与记录';

CREATE TABLE `vpp_dr_invitation` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `invitation_no` VARCHAR(32) NOT NULL COMMENT '邀约编号',
    `dr_event_id` BIGINT NOT NULL COMMENT '需求响应事件ID',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `site_id` BIGINT NULL COMMENT '站点ID',
    `execute_start_date` DATE NOT NULL COMMENT '执行开始日期',
    `execute_end_date` DATE NOT NULL COMMENT '执行结束日期',
    `reply_deadline` DATETIME(3) NOT NULL COMMENT '邀约回复截止日期',
    `issue_time` DATETIME(3) NOT NULL COMMENT '下发时间',
    `transaction_type` TINYINT NULL COMMENT '交易类型 1削峰 2填谷',
    `response_type` TINYINT NOT NULL COMMENT '1日前 2日内 3秒级',
    `demand_capacity_kw` DECIMAL(12,4) NOT NULL COMMENT '需求容量/邀约规模 kW',
    `declared_capacity_kw` DECIMAL(12,4) NULL COMMENT '申报出清容量 kW',
    `actual_cleared_capacity_kw` DECIMAL(12,4) NULL COMMENT '实际出清 kW（电网审核通过）',
    `estimated_response_capacity_kw` DECIMAL(12,4) NULL COMMENT '预估响应容量 kW（响应完成后本平台评估）',
    `estimated_completion_rate` DECIMAL(12,2) NULL COMMENT '预估完成率=预估响应容量/实际出清',
    `actual_response_capacity_kw` DECIMAL(12,4) NULL COMMENT '实际响应容量 kW（电网评估最终结果）',
    `response_completion_rate` DECIMAL(12,2) NULL COMMENT '响应完成率=实际响应容量/实际出清',
    `is_winning_bid` TINYINT NULL COMMENT '是否中标 0否 1是',
    `reply_status` TINYINT NOT NULL COMMENT '0待回复 1参与 2拒绝 3超时',
    `response_status` TINYINT NOT NULL COMMENT '0待参与 1已申报 2申报完成 3执行中 4已结束 5已取消',
    `sms_notify_status` TINYINT NOT NULL DEFAULT 0 COMMENT '0未发送 1已发送 2发送失败',
    `sms_notify_at` DATETIME(3) NULL COMMENT '短信通知时间',
    `sms_contact_id` BIGINT NULL COMMENT '通知联系人ID',
    `participation_id` BIGINT NULL COMMENT '关联参与记录ID',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_dr_invitation_no` (invitation_no),
    UNIQUE KEY `uk_dr_invitation_event_customer` (dr_event_id, customer_id),
    KEY `idx_dr_invitation_customer` (customer_id, reply_status),
    KEY `idx_dr_invitation_issue` (issue_time, response_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='需求响应企业邀约';

CREATE TABLE `vpp_dr_strategy` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略编码',
    `strategy_name` VARCHAR(200) NOT NULL COMMENT '策略名称',
    `response_type` TINYINT NOT NULL COMMENT '适用响应类型',
    `adjust_step_kw` DECIMAL(12,4) NULL COMMENT '调节步长 kW',
    `execute_mode` TINYINT NOT NULL COMMENT '1并行 2串行',
    `strategy_config` JSON NULL COMMENT '策略扩展配置',
    `is_default` TINYINT NOT NULL COMMENT '是否默认策略',
    `is_enabled` TINYINT NOT NULL COMMENT '是否启用',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_dr_strategy_code` (strategy_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='响应策略';

CREATE TABLE `vpp_dr_strategy_resource` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `strategy_id` BIGINT NOT NULL COMMENT '策略ID',
    `resource_id` BIGINT NOT NULL COMMENT '资源点ID',
    `priority` TINYINT NOT NULL COMMENT '优先级序号',
    `max_adjust_kw` DECIMAL(12,4) NULL COMMENT '最大调节量',
    `tenant_id` INT NULL COMMENT '租户ID',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_strategy_resource` (strategy_id, resource_id),
    KEY `idx_strategy_resource_priority` (strategy_id, priority)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='策略-资源关联';

CREATE TABLE `vpp_dr_execution` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `event_id` BIGINT NOT NULL COMMENT '事件ID',
    `resource_id` BIGINT NOT NULL COMMENT '资源点ID',
    `target_kw` DECIMAL(12,4) NOT NULL COMMENT '目标调节量',
    `actual_kw` DECIMAL(12,4) NULL COMMENT '实际调节量',
    `execute_status` TINYINT NOT NULL COMMENT '0待执行 1执行中 2完成 3异常',
    `started_at` DATETIME(3) NULL COMMENT '开始时间',
    `finished_at` DATETIME(3) NULL COMMENT '结束时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_dr_exec_event` (event_id),
    KEY `idx_dr_exec_resource` (resource_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='响应执行明细';

CREATE TABLE `vpp_dr_evaluation` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `event_id` BIGINT NOT NULL COMMENT '事件ID',
    `actual_capacity_kw` DECIMAL(12,4) NULL COMMENT '实际响应容量',
    `response_duration_min` INT NULL COMMENT '响应时长分钟',
    `subsidy_amount` DECIMAL(18,4) NULL COMMENT '补贴金额',
    `qualified_rate` DECIMAL(5,2) NULL COMMENT '执行合格率%',
    `report_file_url` VARCHAR(500) NULL COMMENT '评估报告URL',
    `evaluated_at` DATETIME(3) NULL COMMENT '评估时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_dr_eval_event` (event_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='响应效果评估';

CREATE TABLE `vpp_registration` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `dn_id` VARCHAR(64) NOT NULL COMMENT '虚拟电厂运营商ID',
    `registration_id` VARCHAR(128) NOT NULL COMMENT '运管平台registrationID',
    `reg_status` TINYINT NOT NULL COMMENT '0未注册 1已注册 2需重新注册',
    `registered_at` DATETIME(3) NULL COMMENT '注册时间',
    `meta_report_id` VARCHAR(128) NULL COMMENT '元数据报告ID',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_vpp_dn_id` (dn_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运管平台注册信息';

CREATE TABLE `vpp_report_log` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `report_type` VARCHAR(64) NOT NULL COMMENT 'MomentData/IntervalData/RegisterReport等',
    `request_id` VARCHAR(64) NULL COMMENT '请求ID',
    `report_status` TINYINT NOT NULL COMMENT '0失败 1成功',
    `response_code` INT NULL COMMENT '响应码',
    `error_message` VARCHAR(500) NULL COMMENT '错误信息',
    `payload_size` INT NULL COMMENT '报文大小字节',
    `reported_at` DATETIME(3) NOT NULL COMMENT '上报时间',
    `tenant_id` INT NULL COMMENT '租户ID',
    PRIMARY KEY (`id`),
    KEY `idx_vpp_report_type_time` (report_type, reported_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据上报日志';

CREATE TABLE `vpp_site` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `site_code` VARCHAR(64) NOT NULL COMMENT '站点编号',
    `site_name` VARCHAR(200) NOT NULL COMMENT '站点名称',
    `customer_id` BIGINT NOT NULL COMMENT '客户ID',
    `province` VARCHAR(50) NULL COMMENT '省',
    `city` VARCHAR(50) NULL COMMENT '市',
    `district` VARCHAR(50) NULL COMMENT '区县',
    `address` VARCHAR(500) NULL COMMENT '地址',
    `longitude` DECIMAL(10,6) NULL COMMENT '经度',
    `latitude` DECIMAL(10,6) NULL COMMENT '纬度',
    `owner_name` VARCHAR(200) NULL COMMENT '业主名称',
    `contact_name` VARCHAR(100) NULL COMMENT '联系人',
    `contact_phone` VARCHAR(20) NULL COMMENT '联系电话',
    `response_priority` INT NULL COMMENT '响应优先级',
    `un_resource_id` VARCHAR(64) NULL COMMENT '运管平台资源ID',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` BIGINT NULL COMMENT '创建人',
    `updated_by` BIGINT NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    `account_no` VARCHAR(32) NULL COMMENT '电力户号',
    `street_town` VARCHAR(100) NULL COMMENT '街道乡镇',
    `avg_completion_rate` DECIMAL(12,4) NULL COMMENT '平均完成率',
    `run_status` INT NULL COMMENT '运行状态',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_site_code` (`site_code`),
    KEY `idx_site_customer` (`customer_id`),
    KEY `idx_site_region` (`province`, `city`, `district`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站点';

CREATE TABLE `vpp_dr_subsidy_prediction` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `invitation_id` BIGINT NULL COMMENT '邀约ID',
    `dr_event_id` BIGINT NULL COMMENT '需求响应事件ID',
    `site_id` BIGINT NULL COMMENT '站点ID',
    `site_name` VARCHAR(200) NULL COMMENT '站点名称',
    `customer_id` BIGINT NULL COMMENT '企业/客户ID',
    `customer_name` VARCHAR(200) NULL COMMENT '企业名称',
    `event_start_time` DATETIME(3) NULL COMMENT '事件开始时间',
    `event_end_time` DATETIME(3) NULL COMMENT '事件结束时间',
    `response_duration_min` INT NULL COMMENT '响应时长 分钟',
    `subsidy_price` DECIMAL(5,2) NULL COMMENT '补贴单价',
    `estimated_capacity_kw` DECIMAL(12,2) NULL COMMENT '预估响应容量 kW',
    `cleared_capacity_kw` DECIMAL(12,2) NULL COMMENT '出清容量 kW',
    `actual_response_grid_kw` DECIMAL(12,2) NULL COMMENT '电网实际响应容量 kW',
    `actual_response_platform_kw` DECIMAL(12,2) NULL COMMENT '平台实际响应容量 kW',
    `declared_cleared_kw` DECIMAL(12,2) NULL COMMENT '申报出清容量 kW',
    `share_ratio` DECIMAL(6,4) NULL COMMENT '分成比例',
    `price_adjustment_coefficient` DECIMAL(12,4) NULL COMMENT '价格调整系数',
    `completion_rate` DECIMAL(12,4) NULL COMMENT '完成率（百分比）=平台实际响应量/申报出清量×100',
    `deviation_rate` DECIMAL(12,4) NULL COMMENT '偏差率（百分比）=(电网实际响应量-平台实际响应量)/申报出清量×100',
    `estimated_subsidy_amount` DECIMAL(18,4) NULL COMMENT '预估补贴金额',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_subsidy_prediction_invitation` (`invitation_id`),
    KEY `idx_subsidy_prediction_event_site` (`dr_event_id`, `site_id`),
    KEY `idx_subsidy_prediction_customer` (`customer_id`, `customer_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='需求响应补贴预测';

CREATE TABLE `vpp_response_deviation_price` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `coeff_lower` DECIMAL(5,2) NULL COMMENT '响应量系数下限，NULL表示无下界',
    `coeff_upper` DECIMAL(5,2) NULL COMMENT '响应量系数上限，NULL表示无上界',
    `lower_inclusive` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '下限是否闭区间 1闭 0开',
    `upper_inclusive` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '上限是否闭区间 1闭 0开',
    `price_adjustment_coefficient` DECIMAL(5,2) NOT NULL COMMENT '价格调整系数',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_response_deviation_price_tenant` (`tenant_id`, `delete_flag`),
    KEY `idx_response_deviation_price_bounds` (`coeff_lower`, `coeff_upper`),
    KEY `idx_response_deviation_price_deleted` (`delete_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='响应量偏差价格调整表';

CREATE TABLE vpp_file_archive (
    id          BIGINT         NOT NULL AUTO_INCREMENT COMMENT '主键',
    archive_name VARCHAR(200)  NOT NULL COMMENT '档案名称',
    file_name   VARCHAR(255)   NOT NULL COMMENT '原始文件名',
    file_url    VARCHAR(500)   NOT NULL COMMENT '存储路径',
    archive_type TINYINT       NOT NULL COMMENT '档案类型',
    file_type   VARCHAR(32)    NULL COMMENT '文件类型',
    file_size   DOUBLE         NULL COMMENT '文件大小 KB',
    biz_type    VARCHAR(32)    NULL COMMENT '业务类型',
    biz_id      BIGINT         NULL COMMENT '业务主键',
    site_id     BIGINT         NOT NULL COMMENT '站点ID',
    remark      VARCHAR(500)   NULL COMMENT '备注',
    tenant_id   INT            NULL COMMENT '租户ID',
    create_time DATETIME(3)    NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    update_time DATETIME(3)    NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    created_by  VARCHAR(30)    NULL COMMENT '上传人',
    updated_by  VARCHAR(30)    NULL COMMENT '更新人',
    delete_flag INT(1)         NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    deleted_at  DATETIME(3)    NULL COMMENT '软删除时间',
    version     VARCHAR(20)    NULL DEFAULT 'V1.0' COMMENT '版本号',
    PRIMARY KEY (id),
    KEY idx_file_archive_biz (biz_type, biz_id),
    KEY idx_file_archive_site (site_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='电子档案';

CREATE TABLE `vpp_bidding_config` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `config_name` VARCHAR(200) NOT NULL COMMENT '配置名称',
    `effective_start` DATETIME(3) NOT NULL COMMENT '适用开始时间',
    `effective_end` DATETIME(3) NOT NULL COMMENT '适用结束时间',
    `attachment_url` VARCHAR(500) NULL COMMENT '附件URL',
    `attachment_name` VARCHAR(200) NULL COMMENT '附件原始文件名',
    `bidding_mode` TINYINT NOT NULL COMMENT '1分时段竞价 2整体竞价',
    `typical_coefficient` DECIMAL(6,4) NOT NULL COMMENT '典型系数',
    `notice_min_hours` decimal(5,1) DEFAULT NULL COMMENT '提前通知最小小时数（下限，不含本值，如 8 表示 >8）',
    `notice_max_hours` decimal(5,1) DEFAULT NULL COMMENT '提前通知最大小时数（上限，含本值，如 24 表示 ≤24）',
    `max_price` DECIMAL(12,4) NOT NULL COMMENT '最高价格(元)',
    `min_price` DECIMAL(12,4) NOT NULL COMMENT '最低价格(元)',
    `tenant_id` INT NULL COMMENT '租户ID',
    `create_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    `created_by` VARCHAR(30) NULL COMMENT '创建人',
    `updated_by` VARCHAR(30) NULL COMMENT '更新人',
    `delete_flag` INT(1) NOT NULL DEFAULT 0 COMMENT '删除标识 0未删除 1已删除',
    `deleted_at` DATETIME(3) NULL COMMENT '软删除时间',
    PRIMARY KEY (`id`),
    KEY `idx_bidding_config_effective` (effective_start, effective_end),
    KEY `idx_bidding_config_name` (config_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='竞价配置';

-- 已有库升级：设备表新增运管资源ID（全局唯一，NULL 不参与唯一冲突）
-- ALTER TABLE `vpp_device` ADD COLUMN `un_resource_id` VARCHAR(64) NULL COMMENT '运管资源ID' AFTER `gateway_id`;
-- ALTER TABLE `vpp_device` ADD UNIQUE KEY `uk_device_un_resource_id` (`un_resource_id`);
