-- ============================================
-- 合同管理系统表结构SQL
-- ============================================
-- 说明：用于管理门店合同信息，自动生成月租明细，统计每个月每个门店的合同支付明细以及成本费用
-- 执行时间：2025年
-- ============================================

-- ============================================
-- 1. 创建合同表（lq_contract）
-- ============================================
CREATE TABLE IF NOT EXISTS `lq_contract` (
  `F_Id` varchar(50) NOT NULL COMMENT '主键ID',
  `F_StoreId` varchar(50) NOT NULL COMMENT '门店ID（关联lq_mdxx.F_Id）',
  `F_StoreName` varchar(200) NOT NULL COMMENT '店名（冗余字段，便于查询）',
  `F_Title` varchar(200) NOT NULL COMMENT '标题',
  `F_Category` varchar(100) DEFAULT NULL COMMENT '分类（string类型，自己填写）',
  `F_TenantName` varchar(200) DEFAULT NULL COMMENT '户名',
  `F_ContractStartDate` datetime NOT NULL COMMENT '合同起始日期',
  `F_ContractEndDate` datetime NOT NULL COMMENT '合同结束日期',
  `F_ReminderDays` int DEFAULT 0 COMMENT '提前多少天提醒',
  `F_Deposit` decimal(18,2) DEFAULT 0.00 COMMENT '押金',
  `F_NextPaymentDate` datetime DEFAULT NULL COMMENT '下次应交时间',
  `F_MonthlyRent` decimal(18,2) NOT NULL COMMENT '月租',
  `F_PaymentAmount` decimal(18,2) NOT NULL COMMENT '缴租金额（每次交租的金额，通常=月租×交租周期）',
  `F_PaymentCycle` int NOT NULL COMMENT '交租周期（数字，表示几个月，如1、3、6等）',
  `F_Remarks` varchar(1000) DEFAULT NULL COMMENT '备注',
  `F_Attachment` varchar(500) DEFAULT NULL COMMENT '附件（存储附件路径或JSON）',
  `F_CreateUser` varchar(50) NOT NULL COMMENT '创建人ID',
  `F_CreateTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `F_UpdateUser` varchar(50) DEFAULT NULL COMMENT '更新人ID',
  `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  `F_IsEffective` int DEFAULT 1 COMMENT '是否有效（1-有效，0-无效）',
  PRIMARY KEY (`F_Id`),
  KEY `idx_store_id` (`F_StoreId`),
  KEY `idx_contract_start_date` (`F_ContractStartDate`),
  KEY `idx_contract_end_date` (`F_ContractEndDate`),
  KEY `idx_next_payment_date` (`F_NextPaymentDate`),
  KEY `idx_category` (`F_Category`),
  KEY `idx_is_effective` (`F_IsEffective`),
  KEY `idx_create_time` (`F_CreateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='合同表';

-- ============================================
-- 2. 创建月租明细表（lq_contract_rent_detail）
-- ============================================
CREATE TABLE IF NOT EXISTS `lq_contract_rent_detail` (
  `F_Id` varchar(50) NOT NULL COMMENT '主键ID',
  `F_ContractId` varchar(50) NOT NULL COMMENT '合同ID（关联lq_contract.F_Id）',
  `F_PaymentMonth` datetime NOT NULL COMMENT '应缴月份（表示哪个月份，格式：YYYY-MM-01）',
  `F_DueDate` datetime NOT NULL COMMENT '应缴日期（具体应缴日期）',
  `F_DueAmount` decimal(18,2) NOT NULL COMMENT '应缴金额',
  `F_IsPaid` int DEFAULT 0 COMMENT '是否已缴（0-未缴，1-已缴）',
  `F_ActualPaymentDate` datetime DEFAULT NULL COMMENT '实际缴费时间',
  `F_ActualPaymentAmount` decimal(18,2) DEFAULT NULL COMMENT '实际缴费金额',
  `F_Remarks` varchar(500) DEFAULT NULL COMMENT '备注',
  `F_CreateUser` varchar(50) NOT NULL COMMENT '创建人ID',
  `F_CreateTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `F_UpdateUser` varchar(50) DEFAULT NULL COMMENT '更新人ID',
  `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  `F_IsEffective` int DEFAULT 1 COMMENT '是否有效（1-有效，0-无效）',
  PRIMARY KEY (`F_Id`),
  KEY `idx_contract_id` (`F_ContractId`),
  KEY `idx_payment_month` (`F_PaymentMonth`),
  KEY `idx_due_date` (`F_DueDate`),
  KEY `idx_is_paid` (`F_IsPaid`),
  KEY `idx_contract_payment_month` (`F_ContractId`, `F_PaymentMonth`),
  KEY `idx_is_effective` (`F_IsEffective`),
  KEY `idx_create_time` (`F_CreateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='月租明细表';

-- ============================================
-- 3. 添加外键约束（可选，根据实际需求决定是否添加）
-- ============================================
-- 注意：如果添加外键约束，删除合同时需要先删除明细，或者使用级联删除
-- 建议：不添加外键约束，在应用层控制数据一致性，更灵活

-- ALTER TABLE `lq_contract_rent_detail`
--   ADD CONSTRAINT `fk_contract_rent_detail_contract` 
--   FOREIGN KEY (`F_ContractId`) REFERENCES `lq_contract` (`F_Id`) 
--   ON DELETE CASCADE ON UPDATE CASCADE;

-- ============================================
-- 4. 数据示例说明
-- ============================================
-- 合同示例：
-- F_Id: '768041985045955845'
-- F_StoreId: '1649328471923847168'
-- F_StoreName: '绿纤总部'
-- F_Title: '门店租赁合同'
-- F_Category: '租赁合同'
-- F_TenantName: '张三'
-- F_ContractStartDate: '2025-01-01 00:00:00'
-- F_ContractEndDate: '2025-12-31 23:59:59'
-- F_ReminderDays: 7
-- F_Deposit: 5000.00
-- F_NextPaymentDate: '2025-01-25 00:00:00'
-- F_MonthlyRent: 1000.00
-- F_PaymentAmount: 3000.00
-- F_PaymentCycle: 3
-- F_Remarks: '季度交租'
--
-- 对应的月租明细（自动生成）：
-- 明细1: F_PaymentMonth='2025-01-01', F_DueDate='2025-01-01', F_DueAmount=3000.00, F_IsPaid=0
-- 明细2: F_PaymentMonth='2025-04-01', F_DueDate='2025-04-01', F_DueAmount=3000.00, F_IsPaid=0
-- 明细3: F_PaymentMonth='2025-07-01', F_DueDate='2025-07-01', F_DueAmount=3000.00, F_IsPaid=0
-- 明细4: F_PaymentMonth='2025-10-01', F_DueDate='2025-10-01', F_DueAmount=3000.00, F_IsPaid=0

-- ============================================
-- SQL脚本执行完成
-- ============================================
-- 说明：
-- 1. lq_contract 表：存储合同基本信息
-- 2. lq_contract_rent_detail 表：存储月租明细，根据合同自动生成
-- 3. 删除合同时需要级联删除明细（在应用层实现）
-- 4. 更新合同时如果影响明细，需要重新生成明细

