-- ========================================== -- 能源账单模块建表 SQL(331 一期,9 张表) -- ========================================== -- ---------------------------- -- 1. energy_hydrogen_record — 加氢原始记录 -- ---------------------------- DROP TABLE IF EXISTS `energy_hydrogen_record`; CREATE TABLE `energy_hydrogen_record` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `station_id` bigint NOT NULL COMMENT '加氢站 ID(关联 asset 模块)', `plate_number` varchar(20) NOT NULL COMMENT '车牌号', `hydrogen_date` date NOT NULL COMMENT '加氢日期', `hydrogen_quantity` decimal(10,2) NOT NULL COMMENT '加氢量(KG)', `unit_price` decimal(10,2) NOT NULL COMMENT '单价(元/KG)', `amount` decimal(12,2) NOT NULL COMMENT '金额(以数据源原始值为准,不重新计算)', `mileage` decimal(12,2) DEFAULT NULL COMMENT '里程数', `source_type` tinyint NOT NULL COMMENT '数据来源(1=Excel 2=Web 3=API 4=OCR)', `match_status` tinyint NOT NULL DEFAULT 0 COMMENT '匹配状态(0=未匹配 1=已匹配 2=无法匹配)', `vehicle_id` bigint DEFAULT NULL COMMENT '匹配到的车辆 ID(匹配后填充)', `customer_id` bigint DEFAULT NULL COMMENT '匹配到的客户 ID(匹配后填充)', `upload_batch_no` varchar(64) DEFAULT NULL COMMENT '导入批次号(幂等去重)', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), KEY `idx_station_id` (`station_id`), KEY `idx_plate_number` (`plate_number`), KEY `idx_hydrogen_date` (`hydrogen_date`), KEY `idx_match_status` (`match_status`), KEY `idx_upload_batch_no` (`upload_batch_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='加氢原始记录'; -- ---------------------------- -- 2. energy_hydrogen_detail — 加氢明细 -- ---------------------------- DROP TABLE IF EXISTS `energy_hydrogen_detail`; CREATE TABLE `energy_hydrogen_detail` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `record_id` bigint NOT NULL COMMENT '关联原始记录 ID', `station_id` bigint NOT NULL COMMENT '加氢站 ID', `vehicle_id` bigint NOT NULL COMMENT '车辆 ID', `plate_number` varchar(20) NOT NULL COMMENT '车牌号(冗余)', `hydrogen_date` date NOT NULL COMMENT '加氢日期', `hydrogen_quantity` decimal(10,2) NOT NULL COMMENT '加氢量(KG)', `cost_price` decimal(10,2) NOT NULL COMMENT '成本单价(元/KG)', `cost_amount` decimal(12,2) NOT NULL COMMENT '成本金额', `customer_price` decimal(10,2) NOT NULL COMMENT '对客单价(元/KG)', `customer_amount` decimal(12,2) NOT NULL COMMENT '对客金额', `contract_id` bigint NOT NULL COMMENT '合同 ID', `customer_id` bigint NOT NULL COMMENT '客户 ID', `project_name` varchar(100) DEFAULT NULL COMMENT '项目名称(冗余)', `cost_bearer` tinyint NOT NULL COMMENT '费用承担方(1=客户承担 2=羚牛承担 3=自行结算)', `pay_method` tinyint NOT NULL COMMENT '支付方式(1=预充值 2=月结算)', `audit_status` tinyint NOT NULL DEFAULT 0 COMMENT '审核状态(0=待审核 1=已审核 2=已驳回)', `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注', `deduction_status` tinyint NOT NULL DEFAULT 0 COMMENT '扣款状态(0=未扣款 1=已扣款)', `settlement_status` tinyint NOT NULL DEFAULT 0 COMMENT '结算状态(0=未结算 1=已结算)', `bill_id` bigint DEFAULT NULL COMMENT '关联账单 ID', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), KEY `idx_record_id` (`record_id`), KEY `idx_station_id` (`station_id`), KEY `idx_vehicle_id` (`vehicle_id`), KEY `idx_customer_id` (`customer_id`), KEY `idx_contract_id` (`contract_id`), KEY `idx_bill_id` (`bill_id`), KEY `idx_audit_status` (`audit_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='加氢明细'; -- ---------------------------- -- 3. energy_bill — 能源账单 -- ---------------------------- DROP TABLE IF EXISTS `energy_bill`; CREATE TABLE `energy_bill` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `bill_code` varchar(32) NOT NULL COMMENT '账单编号(唯一)', `energy_type` tinyint NOT NULL COMMENT '能源类型(1=氢 2=电 3=ETC)', `customer_id` bigint NOT NULL COMMENT '客户 ID', `customer_name` varchar(100) DEFAULT NULL COMMENT '客户名称(冗余)', `contract_id` bigint NOT NULL COMMENT '合同 ID', `station_id` bigint DEFAULT NULL COMMENT '加氢站 ID', `station_name` varchar(100) DEFAULT NULL COMMENT '站点名称(冗余)', `bill_period_start` date NOT NULL COMMENT '账单周期开始日期', `bill_period_end` date NOT NULL COMMENT '账单周期结束日期', `receivable_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '应收总额', `actual_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '实收总额(receivable_amount + adjustment_amount)', `adjustment_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '调整总额(可正可负)', `paid_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '已收金额', `total_quantity` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '总加氢量/总度数', `detail_count` int NOT NULL DEFAULT 0 COMMENT '明细条数', `status` tinyint NOT NULL DEFAULT 0 COMMENT '账单状态(0=草稿 1=已生成 2=已作废)', `audit_status` tinyint NOT NULL DEFAULT 0 COMMENT '审核状态(0=待审核 1=已审核 2=已驳回)', `submit_status` tinyint NOT NULL DEFAULT 0 COMMENT '提交状态(0=未提交 1=已提交 2=已驳回)', `payment_status` tinyint NOT NULL DEFAULT 0 COMMENT '支付状态(0=未支付 1=部分支付 2=已结清)', `auditor_id` bigint DEFAULT NULL COMMENT '审核人 ID', `audit_time` datetime DEFAULT NULL COMMENT '审核时间', `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注', `submit_time` datetime DEFAULT NULL COMMENT '提交时间', `generate_time` datetime DEFAULT NULL COMMENT '账单生成时间', `yos_bill_code` varchar(64) DEFAULT NULL COMMENT 'YOS 账单编号', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_bill_code` (`bill_code`), KEY `idx_customer_id` (`customer_id`), KEY `idx_contract_id` (`contract_id`), KEY `idx_station_id` (`station_id`), KEY `idx_bill_period` (`bill_period_start`, `bill_period_end`), KEY `idx_status` (`status`), KEY `idx_audit_status` (`audit_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='能源账单'; -- ---------------------------- -- 4. energy_bill_adjustment — 账单调整记录 -- ---------------------------- DROP TABLE IF EXISTS `energy_bill_adjustment`; CREATE TABLE `energy_bill_adjustment` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `bill_id` bigint NOT NULL COMMENT '关联账单 ID', `detail_id` bigint DEFAULT NULL COMMENT '关联明细 ID(可选)', `adjustment_type` tinyint NOT NULL COMMENT '调整类型(1=增加 2=减少)', `amount` decimal(12,2) NOT NULL COMMENT '调整金额(正数)', `reason` varchar(500) DEFAULT NULL COMMENT '调整原因', `attachment_urls` varchar(1000) DEFAULT NULL COMMENT '附件 URL(JSON 数组)', `operator_id` bigint DEFAULT NULL COMMENT '操作人 ID', `operate_time` datetime DEFAULT NULL COMMENT '操作时间', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), KEY `idx_bill_id` (`bill_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='账单调整记录'; -- ---------------------------- -- 5. energy_account — 客户能源总账户 -- ---------------------------- DROP TABLE IF EXISTS `energy_account`; CREATE TABLE `energy_account` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `customer_id` bigint NOT NULL COMMENT '客户 ID(唯一)', `balance` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '当前余额(可为负数)', `init_balance` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '初始余额', `accumulated_recharge` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计充值', `accumulated_hydrogen` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计氢费', `accumulated_electric` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计电费', `accumulated_consume` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计消费(所有能源类型合计)', `reminder_threshold` decimal(14,2) DEFAULT NULL COMMENT '提醒阈值(低于此值触发预警)', `account_status` tinyint NOT NULL DEFAULT 0 COMMENT '账户状态(0=正常 1=预警 2=欠费)', `last_recharge_date` date DEFAULT NULL COMMENT '最后充值日期', `version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_customer_id` (`customer_id`), KEY `idx_account_status` (`account_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户能源总账户'; -- ---------------------------- -- 6. energy_project_account — 项目账户 -- ---------------------------- DROP TABLE IF EXISTS `energy_project_account`; CREATE TABLE `energy_project_account` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `account_id` bigint NOT NULL COMMENT '关联总账户 ID', `contract_id` bigint NOT NULL COMMENT '合同 ID(唯一)', `project_name` varchar(100) DEFAULT NULL COMMENT '项目名称', `project_balance` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '项目余额', `project_remit_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计划账金额', `project_hydrogen_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计氢费', `project_electric_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计电费', `project_consume_amount` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '累计消费', `reminder_threshold` decimal(14,2) DEFAULT NULL COMMENT '提醒阈值', `account_status` tinyint NOT NULL DEFAULT 0 COMMENT '账户状态(0=正常 1=预警 2=欠费)', `version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_contract_id` (`contract_id`), KEY `idx_account_id` (`account_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目账户'; -- ---------------------------- -- 7. energy_account_flow — 统一余额变更流水 -- ---------------------------- DROP TABLE IF EXISTS `energy_account_flow`; CREATE TABLE `energy_account_flow` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `account_id` bigint NOT NULL COMMENT '关联总账户 ID', `project_account_id` bigint DEFAULT NULL COMMENT '关联项目账户 ID(可选)', `flow_type` tinyint NOT NULL COMMENT '流水类型(1=充值 2=扣款 3=冲正 4=划账 5=退款)', `amount` decimal(14,2) NOT NULL COMMENT '变动金额', `balance_before` decimal(14,2) NOT NULL COMMENT '变动前余额(总账户级别)', `balance_after` decimal(14,2) NOT NULL COMMENT '变动后余额(总账户级别)', `project_balance_before` decimal(14,2) DEFAULT NULL COMMENT '变动前项目余额(仅项目账户操作时填写)', `project_balance_after` decimal(14,2) DEFAULT NULL COMMENT '变动后项目余额(仅项目账户操作时填写)', `biz_type` tinyint NOT NULL COMMENT '业务类型(1=加氢扣款 2=账单结算 3=手动调整 ...)', `biz_id` bigint DEFAULT NULL COMMENT '关联单据 ID', `biz_code` varchar(64) DEFAULT NULL COMMENT '关联单据编号', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `operator_id` bigint DEFAULT NULL COMMENT '操作人 ID', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), KEY `idx_account_id` (`account_id`), KEY `idx_project_account_id` (`project_account_id`), KEY `idx_biz_type_biz_id` (`biz_type`, `biz_id`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='统一余额变更流水'; -- ---------------------------- -- 8. energy_station_price — 加氢站客户价格 -- ---------------------------- DROP TABLE IF EXISTS `energy_station_price`; CREATE TABLE `energy_station_price` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `station_id` bigint NOT NULL COMMENT '加氢站 ID', `customer_id` bigint NOT NULL COMMENT '客户 ID', `cost_price` decimal(10,2) NOT NULL COMMENT '成本价(元/KG)', `customer_price` decimal(10,2) NOT NULL COMMENT '对客价(元/KG)', `effective_date` date NOT NULL COMMENT '生效日期', `expiry_date` date DEFAULT NULL COMMENT '失效日期(可空,空=永久生效)', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0=生效中 1=已失效)', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_station_customer_date` (`station_id`, `customer_id`, `effective_date`), KEY `idx_station_id` (`station_id`), KEY `idx_customer_id` (`customer_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='加氢站客户价格'; -- ---------------------------- -- 9. energy_station_config — 加氢站扣款配置 -- ---------------------------- DROP TABLE IF EXISTS `energy_station_config`; CREATE TABLE `energy_station_config` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `station_id` bigint NOT NULL COMMENT '加氢站 ID(唯一,每站一条记录)', `auto_deduct` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否自动扣款(1=是 0=否)', `cooperation_type` tinyint NOT NULL DEFAULT 0 COMMENT '合作类型(0=合作 1=非合作)', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_station_id` (`station_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='加氢站扣款配置';