-- =============================================
-- 车辆租赁业务流程表结构
-- 包含：备车、交车任务、交车单、还车单
-- =============================================

-- 1. 备车记录表
CREATE TABLE IF NOT EXISTS `asset_vehicle_prepare` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `vehicle_id` BIGINT NOT NULL COMMENT '车辆ID',
  `plate_no` VARCHAR(20) COMMENT '车牌号',
  `vin` VARCHAR(50) NOT NULL COMMENT '车辆识别代码',
  `vehicle_model_id` BIGINT NOT NULL COMMENT '车型ID',
  `brand` VARCHAR(100) COMMENT '品牌',
  `model` VARCHAR(100) COMMENT '型号',
  `contract_id` BIGINT COMMENT '关联合同ID',
  `contract_code` VARCHAR(50) COMMENT '合同编码',
  `has_body_ad` BIT(1) DEFAULT b'0' COMMENT '是否有车身广告',
  `body_ad_photos` VARCHAR(1000) COMMENT '广告照片（JSON数组）',
  `has_tail_lift` BIT(1) DEFAULT b'0' COMMENT '是否有尾板',
  `trailer_plate_no` VARCHAR(20) COMMENT '挂车牌号',
  `defect_photos` VARCHAR(1000) COMMENT '瑕疵照片（JSON数组）',
  `check_list` TEXT COMMENT '备车检查清单（JSON）',
  `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`),
  INDEX `idx_vehicle_id` (`vehicle_id`),
  INDEX `idx_contract_id` (`contract_id`),
  INDEX `idx_status` (`status`),
  INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='备车记录表';

-- 2. 交车任务表
CREATE TABLE IF NOT EXISTS `asset_delivery_task` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_code` VARCHAR(50) NOT NULL COMMENT '交车任务编码',
  `contract_id` BIGINT NOT NULL COMMENT '合同ID',
  `contract_code` VARCHAR(50) NOT NULL COMMENT '合同编码',
  `project_name` VARCHAR(200) NOT NULL COMMENT '项目名称',
  `customer_id` BIGINT NOT NULL COMMENT '客户ID',
  `customer_name` VARCHAR(200) NOT NULL COMMENT '客户名称',
  `expected_delivery_date_start` DATE COMMENT '预计交车开始日期',
  `expected_delivery_date_end` DATE COMMENT '预计交车结束日期',
  `billing_start_date` DATE NOT NULL COMMENT '开始计费日期',
  `delivery_province` VARCHAR(50) COMMENT '交车省份',
  `delivery_city` VARCHAR(50) COMMENT '交车城市',
  `delivery_location` VARCHAR(255) COMMENT '交车地点',
  `vehicle_count` INT NOT NULL DEFAULT 0 COMMENT '交车数量',
  `task_status` TINYINT NOT NULL DEFAULT 0 COMMENT '任务状态（0=激活 1=挂起）',
  `delivery_status` TINYINT NOT NULL DEFAULT 0 COMMENT '交车状态（0=未交车 1=已交车）',
  `need_return` BIT(1) NOT NULL DEFAULT b'1' 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_task_code` (`task_code`, `deleted`),
  INDEX `idx_contract_id` (`contract_id`),
  INDEX `idx_customer_id` (`customer_id`),
  INDEX `idx_task_status` (`task_status`),
  INDEX `idx_delivery_status` (`delivery_status`),
  INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='交车任务表';

-- 3. 交车任务车辆表
CREATE TABLE IF NOT EXISTS `asset_delivery_task_vehicle` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_id` BIGINT NOT NULL COMMENT '交车任务ID',
  `contract_vehicle_id` BIGINT NOT NULL COMMENT '合同车辆ID',
  `vehicle_id` BIGINT NOT NULL COMMENT '车辆ID',
  `plate_no` VARCHAR(20) COMMENT '车牌号',
  `vin` VARCHAR(50) NOT NULL COMMENT '车辆识别代码',
  `brand` VARCHAR(100) NOT NULL COMMENT '品牌',
  `model` VARCHAR(100) NOT NULL COMMENT '型号',
  `month_rent` DECIMAL(10,2) NOT NULL COMMENT '月租金',
  `deposit` DECIMAL(10,2) NOT NULL COMMENT '保证金',
  `actual_delivery_date` DATETIME COMMENT '实际交车日期',
  `delivery_person` VARCHAR(64) COMMENT '交车人',
  `is_delivered` BIT(1) NOT NULL DEFAULT b'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`),
  INDEX `idx_task_id` (`task_id`),
  INDEX `idx_vehicle_id` (`vehicle_id`),
  INDEX `idx_contract_vehicle_id` (`contract_vehicle_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='交车任务车辆表';

-- 4. 交车单表
CREATE TABLE IF NOT EXISTS `asset_delivery_order` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `order_code` VARCHAR(50) NOT NULL COMMENT '交车单编码',
  `task_id` BIGINT NOT NULL COMMENT '交车任务ID',
  `task_code` VARCHAR(50) NOT NULL COMMENT '交车任务编码',
  `contract_id` BIGINT NOT NULL COMMENT '合同ID',
  `contract_code` VARCHAR(50) NOT NULL COMMENT '合同编码',
  `project_name` VARCHAR(200) NOT NULL COMMENT '项目名称',
  `customer_id` BIGINT NOT NULL COMMENT '客户ID',
  `customer_name` VARCHAR(200) NOT NULL COMMENT '客户名称',
  `delivery_date` DATETIME NOT NULL COMMENT '交车日期',
  `delivery_person` VARCHAR(64) NOT NULL COMMENT '交车人',
  `delivery_location` VARCHAR(255) COMMENT '交车地点',
  `authorized_person_id` BIGINT COMMENT '被授权人ID',
  `authorized_person_name` VARCHAR(100) COMMENT '被授权人姓名',
  `authorized_person_phone` VARCHAR(20) COMMENT '被授权人电话',
  `authorized_person_id_card` VARCHAR(18) COMMENT '被授权人身份证',
  `esign_flow_id` VARCHAR(100) COMMENT 'E签宝流程ID',
  `esign_status` TINYINT DEFAULT 0 COMMENT 'E签宝状态（0=未签 1=已签）',
  `delivery_photos` VARCHAR(1000) COMMENT '交车照片（JSON数组）',
  `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_order_code` (`order_code`, `deleted`),
  INDEX `idx_task_id` (`task_id`),
  INDEX `idx_contract_id` (`contract_id`),
  INDEX `idx_status` (`status`),
  INDEX `idx_delivery_date` (`delivery_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='交车单表';

-- 5. 交车单车辆表
CREATE TABLE IF NOT EXISTS `asset_delivery_order_vehicle` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `order_id` BIGINT NOT NULL COMMENT '交车单ID',
  `task_vehicle_id` BIGINT NOT NULL COMMENT '交车任务车辆ID',
  `vehicle_id` BIGINT NOT NULL COMMENT '车辆ID',
  `plate_no` VARCHAR(20) COMMENT '车牌号',
  `vin` VARCHAR(50) NOT NULL COMMENT '车辆识别代码',
  `brand` VARCHAR(100) NOT NULL COMMENT '品牌',
  `model` VARCHAR(100) NOT NULL COMMENT '型号',
  `mileage` INT COMMENT '交车时里程',
  `hydrogen_level` DECIMAL(10,2) COMMENT '交车时氢气量（kg）',
  `creator` VARCHAR(64) DEFAULT '' COMMENT '创建者',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户编号',
  PRIMARY KEY (`id`),
  INDEX `idx_order_id` (`order_id`),
  INDEX `idx_vehicle_id` (`vehicle_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='交车单车辆表';

-- 6. 还车单表
CREATE TABLE IF NOT EXISTS `asset_return_order` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `order_code` VARCHAR(50) NOT NULL COMMENT '还车单编码',
  `contract_id` BIGINT NOT NULL COMMENT '合同ID',
  `contract_code` VARCHAR(50) NOT NULL COMMENT '合同编码',
  `project_name` VARCHAR(200) NOT NULL COMMENT '项目名称',
  `customer_id` BIGINT NOT NULL COMMENT '客户ID',
  `customer_name` VARCHAR(200) NOT NULL COMMENT '客户名称',
  `return_date` DATETIME NOT NULL COMMENT '还车日期',
  `return_person` VARCHAR(64) NOT NULL COMMENT '还车验收人',
  `return_location` VARCHAR(255) COMMENT '还车地点',
  `return_reason` VARCHAR(50) COMMENT '还车原因',
  `return_reason_desc` VARCHAR(500) COMMENT '还车原因说明',
  `total_refund_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '退还总金额',
  `deposit_refund` DECIMAL(10,2) DEFAULT 0 COMMENT '退还保证金',
  `hydrogen_refund` DECIMAL(10,2) DEFAULT 0 COMMENT '氢气退款',
  `other_charges` DECIMAL(10,2) DEFAULT 0 COMMENT '其他费用',
  `return_photos` VARCHAR(1000) COMMENT '还车照片（JSON数组）',
  `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态（0=待验车 1=验车完成 2=已结算）',
  `approval_status` TINYINT NOT NULL DEFAULT 0 COMMENT '审批状态（0=草稿 1=审批中 2=审批通过 3=审批拒绝）',
  `bpm_instance_id` VARCHAR(64) COMMENT 'BPM流程实例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`),
  UNIQUE KEY `uk_order_code` (`order_code`, `deleted`),
  INDEX `idx_contract_id` (`contract_id`),
  INDEX `idx_status` (`status`),
  INDEX `idx_approval_status` (`approval_status`),
  INDEX `idx_return_date` (`return_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='还车单表';

-- 7. 还车车辆表
CREATE TABLE IF NOT EXISTS `asset_return_order_vehicle` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `return_order_id` BIGINT NOT NULL COMMENT '还车单ID',
  `vehicle_id` BIGINT NOT NULL COMMENT '车辆ID',
  `plate_no` VARCHAR(20) COMMENT '车牌号',
  `vin` VARCHAR(50) NOT NULL COMMENT '车辆识别代码',
  `brand` VARCHAR(100) NOT NULL COMMENT '品牌',
  `model` VARCHAR(100) NOT NULL COMMENT '型号',
  `return_mileage` INT COMMENT '还车时里程',
  `return_hydrogen_level` DECIMAL(10,2) COMMENT '还车时氢气量（kg）',
  `delivery_hydrogen_level` DECIMAL(10,2) COMMENT '交车时氢气量（kg）',
  `hydrogen_diff` DECIMAL(10,2) COMMENT '氢气差值（kg）',
  `hydrogen_unit_price` DECIMAL(10,2) COMMENT '氢气单价（元/kg）',
  `hydrogen_refund_amount` DECIMAL(10,2) COMMENT '氢气退款金额',
  `check_list` TEXT COMMENT '还车检查清单（JSON）',
  `defect_photos` VARCHAR(1000) COMMENT '瑕疵照片（JSON数组）',
  `vehicle_damage_fee` DECIMAL(10,2) DEFAULT 0 COMMENT '车损费',
  `tool_damage_fee` DECIMAL(10,2) DEFAULT 0 COMMENT '工具损坏费',
  `unpaid_maintenance_fee` DECIMAL(10,2) DEFAULT 0 COMMENT '未结算保养费',
  `unpaid_repair_fee` DECIMAL(10,2) DEFAULT 0 COMMENT '未结算维修费',
  `other_fee` DECIMAL(10,2) 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`),
  INDEX `idx_return_order_id` (`return_order_id`),
  INDEX `idx_vehicle_id` (`vehicle_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='还车车辆表';
