-- =====================================================
-- 门店档案模块建表 + 菜单权限初始化
-- 日期：2026-07-09
-- 说明：新建门店档案主表、固定资产设备表、合同附件表，
--       并在运营管理下新增"门店档案管理"菜单及权限按钮
-- =====================================================

-- =====================================================
-- 1. 门店档案主表
-- =====================================================
CREATE TABLE IF NOT EXISTS `t_shop_archive` (
    `id` BIGINT NOT NULL COMMENT '主键ID（雪花算法）',
    `shop_id` BIGINT NOT NULL COMMENT '关联门店ID（t_shop.id）',
    `shop_name` VARCHAR(100) NOT NULL COMMENT '门店名称（冗余，便于查询）',
    `shop_address` VARCHAR(255) DEFAULT NULL COMMENT '门店地址（完整详细地址）',
    `venue_type` VARCHAR(20) DEFAULT NULL COMMENT '合作场地类型：CHARGING_STATION-充电站, OFFICE_BUILDING-写字楼',
    `cooperation_mode` VARCHAR(100) DEFAULT NULL COMMENT '合作模式（多选逗号分隔）：DRINKS-水饮副食, BOX_MEAL-盒饭',
    `party_b_salesman` VARCHAR(50) DEFAULT NULL COMMENT '乙方业务员姓名',
    `party_b_salesman_phone` VARCHAR(20) DEFAULT NULL COMMENT '乙方业务员手机号',
    `party_a_company` VARCHAR(200) DEFAULT NULL COMMENT '甲方公司名称（签约主体全称）',
    `party_a_manager` VARCHAR(50) DEFAULT NULL COMMENT '甲方场地管理人员姓名',
    `party_a_manager_phone` VARCHAR(20) DEFAULT NULL COMMENT '甲方场地管理人员电话',
    `business_status` VARCHAR(20) DEFAULT 'NORMAL' COMMENT '门店经营状态：NORMAL-正常营业, SUSPENDED-暂停营业, WITHDRAWN-已撤场',
    `remark` VARCHAR(500) DEFAULT NULL COMMENT '门店备注（特殊要求等）',
    `contract_no` VARCHAR(100) DEFAULT NULL COMMENT '合同编号（企业归档唯一编码）',
    `contract_sign_date` DATE DEFAULT NULL COMMENT '合同签订日期',
    `contract_start_date` DATE DEFAULT NULL COMMENT '合同起始日',
    `contract_end_date` DATE DEFAULT NULL COMMENT '合同到期日',
    `contract_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '合同状态：PENDING-待签约, ACTIVE-已生效, EXPIRING-到期待续约, TERMINATED-已解约终止',
    `rent_start_date` DATE DEFAULT NULL COMMENT '租金起始日',
    `monthly_rent` DECIMAL(10,2) DEFAULT NULL COMMENT '每月固定租金金额（元）',
    `rent_free_days` INT DEFAULT 0 COMMENT '免租期天数',
    `rent_pay_deadline_day` INT DEFAULT NULL COMMENT '租金缴纳截止日（每月几号）',
    `deposit_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '保证金（合同约定总额，元）',
    `deposit_status` VARCHAR(20) DEFAULT 'UNPAID' COMMENT '保证金缴纳状态：UNPAID-未缴纳, PARTIAL-部分缴纳, FULL-全额缴纳',
    `deposit_paid_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '保证金实缴金额（元）',
    `deposit_refund_condition` VARCHAR(500) DEFAULT NULL COMMENT '保证金退还条件',
    `billing_mode` VARCHAR(20) DEFAULT 'RENT_ONLY' COMMENT '合作计费模式：RENT_ONLY-纯租金, RENT_ELECTRIC-租金+电费, COMMISSION_ONLY-纯提成, RENT_COMMISSION-租金+提成, RENT_COMMISSION_ELECTRIC-租金+提成+电费',
    `electricity_price` DECIMAL(8,4) DEFAULT NULL COMMENT '电费结算单价（元/度）',
    `electricity_share_rule` VARCHAR(500) DEFAULT NULL COMMENT '电费公摊规则说明',
    `commission_base_type` VARCHAR(20) DEFAULT NULL COMMENT '提成基数计算口径：SALES-门店实收销售额, GROSS_PROFIT-门店毛利总额, NET_REVENUE-扣除成本后营收',
    `commission_base` DECIMAL(12,2) DEFAULT NULL COMMENT '提成基数（元）',
    `commission_rate` DECIMAL(5,2) DEFAULT NULL COMMENT '提成比例（0~100，单位%）',
    `commission_min_guarantee` DECIMAL(10,2) DEFAULT NULL COMMENT '最低保底提成金额（元）',
    `commission_period_months` INT DEFAULT 0 COMMENT '提成账期（延后N个月结算）',
    `payment_cycle` VARCHAR(20) DEFAULT 'MONTHLY' COMMENT '计费方式：MONTHLY-月付, QUARTERLY-季度付, SEMI_ANNUAL-半年付, ANNUAL-年付',
    `termination_date` DATE DEFAULT NULL COMMENT '解约日期',
    `termination_remark` VARCHAR(500) DEFAULT NULL COMMENT '解约备注',
    `payment_method` VARCHAR(20) DEFAULT NULL COMMENT '打款方式：CORPORATE-对公, PRIVATE-对私',
    `payee_account_name` VARCHAR(100) DEFAULT NULL COMMENT '甲方收款账户名称',
    `payee_bank_name` VARCHAR(100) DEFAULT NULL COMMENT '收款开户行',
    `payee_bank_account` VARCHAR(50) DEFAULT NULL COMMENT '银行账号',
    `taxpayer_id` VARCHAR(50) DEFAULT NULL COMMENT '纳税人识别号',
    `invoice_type` VARCHAR(20) DEFAULT NULL COMMENT '发票类型：SPECIAL-增值税专票, NORMAL-增值税普票',
    `invoice_tax_rate` DECIMAL(5,2) DEFAULT NULL COMMENT '开票税率（单位%）',
    `creator_id` BIGINT DEFAULT NULL COMMENT '数据创建人ID',
    `creator_name` VARCHAR(50) DEFAULT NULL COMMENT '数据创建人姓名',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `editor_id` BIGINT DEFAULT NULL COMMENT '最后编辑人ID',
    `editor_name` VARCHAR(50) DEFAULT NULL COMMENT '最后编辑人姓名',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后编辑时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_shop_id` (`shop_id`),
    KEY `idx_contract_no` (`contract_no`),
    KEY `idx_contract_status` (`contract_status`),
    KEY `idx_business_status` (`business_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='门店档案主表';

-- =====================================================
-- 2. 门店固定资产设备表
-- =====================================================
CREATE TABLE IF NOT EXISTS `t_shop_fixed_asset` (
    `id` BIGINT NOT NULL COMMENT '主键ID（雪花算法）',
    `shop_archive_id` BIGINT NOT NULL COMMENT '关联门店档案ID（t_shop_archive.id）',
    `shop_id` BIGINT NOT NULL COMMENT '关联门店ID（冗余，便于查询）',
    `asset_type` VARCHAR(20) NOT NULL COMMENT '资产类型：VENDING_MACHINE-自助售卖机, MICROWAVE-微波炉',
    `asset_name` VARCHAR(100) DEFAULT NULL COMMENT '资产名称（如售卖机名称）',
    `asset_code` VARCHAR(100) DEFAULT NULL COMMENT '资产编号（机器编号/微波炉编号）',
    `asset_status` VARCHAR(20) DEFAULT 'NORMAL' COMMENT '设备当前状态：NORMAL-正常运行, REPAIR-故障维修, IDLE-闲置撤机',
    `remark` VARCHAR(200) DEFAULT NULL COMMENT '备注',
    `creator_id` BIGINT DEFAULT NULL COMMENT '创建人ID',
    `creator_name` VARCHAR(50) DEFAULT NULL COMMENT '创建人姓名',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `editor_id` BIGINT DEFAULT NULL COMMENT '最后编辑人ID',
    `editor_name` VARCHAR(50) DEFAULT NULL COMMENT '最后编辑人姓名',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后编辑时间',
    PRIMARY KEY (`id`),
    KEY `idx_shop_archive_id` (`shop_archive_id`),
    KEY `idx_shop_id` (`shop_id`),
    KEY `idx_asset_type` (`asset_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='门店固定资产设备表';

-- =====================================================
-- 3. 门店合同附件表
-- =====================================================
CREATE TABLE IF NOT EXISTS `t_shop_contract_attachment` (
    `id` BIGINT NOT NULL COMMENT '主键ID（雪花算法）',
    `shop_archive_id` BIGINT NOT NULL COMMENT '关联门店档案ID（t_shop_archive.id）',
    `shop_id` BIGINT NOT NULL COMMENT '关联门店ID（冗余，便于查询）',
    `attachment_type` VARCHAR(30) NOT NULL COMMENT '附件类型：CONTRACT-合同附件, LEASE_AGREEMENT-场地租赁协议, ELECTRICITY_AGREEMENT-电费补充协议, DEPOSIT_RECEIPT-保证金收据, TERMINATION_AGREEMENT-解约/补充变更协议',
    `file_name` VARCHAR(200) NOT NULL COMMENT '原始文件名',
    `file_url` VARCHAR(500) NOT NULL COMMENT 'OSS文件URL',
    `file_size` BIGINT DEFAULT NULL COMMENT '文件大小（字节）',
    `file_extension` VARCHAR(20) DEFAULT NULL COMMENT '文件扩展名（pdf, jpg, png, docx等）',
    `sort_order` INT DEFAULT 0 COMMENT '排序序号',
    `creator_id` BIGINT DEFAULT NULL COMMENT '上传人ID',
    `creator_name` VARCHAR(50) DEFAULT NULL COMMENT '上传人姓名',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
    PRIMARY KEY (`id`),
    KEY `idx_shop_archive_id` (`shop_archive_id`),
    KEY `idx_shop_id` (`shop_id`),
    KEY `idx_attachment_type` (`attachment_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='门店合同附件表';

-- =====================================================
-- 4. 菜单数据（运营管理 → 门店档案管理）
-- =====================================================
INSERT INTO t_menu (id, parent_id, menu_type, title, name, path, component, `rank`, show_link, show_parent)
VALUES (306, 300, 0, '门店档案管理', 'ShopArchive', '/operation/shop-archive', '', 5, 1, 0);

-- =====================================================
-- 5. 权限按钮（挂在 门店档案管理 下，menu_type=3）
-- =====================================================
INSERT INTO t_menu (id, parent_id, menu_type, title, name, path, component, `rank`, auths, show_link, show_parent) VALUES
(30601, 306, 3, '查看', 'ShopArchiveRead',    '', '', 1, 'shop:archive:read',   1, 0),
(30602, 306, 3, '创建', 'ShopArchiveCreate',  '', '', 2, 'shop:archive:create', 1, 0),
(30603, 306, 3, '编辑', 'ShopArchiveUpdate',  '', '', 3, 'shop:archive:update', 1, 0),
(30604, 306, 3, '删除', 'ShopArchiveDelete',  '', '', 4, 'shop:archive:delete', 1, 0);

-- =====================================================
-- 6. admin 角色（role_id=1）关联新菜单与权限按钮
-- =====================================================
INSERT INTO t_role_menu (id, role_id, menu_id) VALUES
(90306, 1, 306),
(90307, 1, 30601),
(90308, 1, 30602),
(90309, 1, 30603),
(90310, 1, 30604);
