|
|
@@ -0,0 +1,184 @@
|
|
|
+-- ============================================================
|
|
|
+-- V1.0.143 酒店-餐厅对账模块
|
|
|
+-- 建表 + 字典 + 菜单权限 + Excel 导出配置
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- ==================== 1. 对账单主表 ====================
|
|
|
+CREATE TABLE IF NOT EXISTS `hotel_reconciliation` (
|
|
|
+ `id` bigint NOT NULL COMMENT '主键ID(雪花算法)',
|
|
|
+ `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
|
|
|
+ `reconciliation_no` varchar(20) NOT NULL COMMENT '对账单编号(DZ-YYYYMM-NNN)',
|
|
|
+ `period_start` date NOT NULL COMMENT '对账周期开始',
|
|
|
+ `period_end` date NOT NULL COMMENT '对账周期结束',
|
|
|
+ `order_count` int NOT NULL DEFAULT 0 COMMENT '订单总笔数(含排除)',
|
|
|
+ `total_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单总额',
|
|
|
+ `excluded_count` int NOT NULL DEFAULT 0 COMMENT '排除笔数',
|
|
|
+ `excluded_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '排除金额',
|
|
|
+ `settlement_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '应付金额 = total - excluded',
|
|
|
+ `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待确认 1=已确认 2=已结算',
|
|
|
+ `confirmed_by` bigint DEFAULT NULL COMMENT '确认人',
|
|
|
+ `confirmed_time` datetime DEFAULT NULL COMMENT '确认时间',
|
|
|
+ `settled_by` bigint DEFAULT NULL COMMENT '结算操作人',
|
|
|
+ `settled_time` datetime DEFAULT NULL COMMENT '结算时间',
|
|
|
+ `settled_remark` varchar(500) DEFAULT NULL COMMENT '结算备注',
|
|
|
+ `del_flag` bigint NOT NULL DEFAULT 0 COMMENT '删除标记(0=未删除,删除时写入主键ID)',
|
|
|
+ `create_by` bigint DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
+ `create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
|
|
+ `update_by` bigint DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_reconciliation_no` (`tenant_id`, `reconciliation_no`),
|
|
|
+ KEY `idx_tenant_status` (`tenant_id`, `status`),
|
|
|
+ KEY `idx_tenant_period` (`tenant_id`, `period_start`, `period_end`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='酒店-餐厅对账单主表';
|
|
|
+
|
|
|
+-- ==================== 2. 对账单明细表 ====================
|
|
|
+CREATE TABLE IF NOT EXISTS `hotel_reconciliation_item` (
|
|
|
+ `id` bigint NOT NULL COMMENT '主键ID(雪花算法)',
|
|
|
+ `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
|
|
|
+ `reconciliation_id` bigint NOT NULL COMMENT '对账单ID',
|
|
|
+ `order_id` bigint NOT NULL COMMENT '关联 hotel_order.id',
|
|
|
+ `order_no` varchar(30) DEFAULT NULL COMMENT '冗余订单号',
|
|
|
+ `room_no` varchar(10) DEFAULT NULL COMMENT '冗余房间号',
|
|
|
+ `contact_name` varchar(50) DEFAULT NULL COMMENT '联系人',
|
|
|
+ `pay_amount` decimal(10,2) DEFAULT 0.00 COMMENT '实付金额',
|
|
|
+ `order_status` tinyint DEFAULT NULL COMMENT '订单状态(冗余快照)',
|
|
|
+ `refund_status` tinyint DEFAULT NULL COMMENT '退款状态(冗余快照: 0=未退款 1=成功 2=失败可重试)',
|
|
|
+ `excluded` tinyint NOT NULL DEFAULT 0 COMMENT '是否排除: 0=否 1=是',
|
|
|
+ `exclude_reason` varchar(200) DEFAULT NULL COMMENT '排除原因',
|
|
|
+ `del_flag` bigint NOT NULL DEFAULT 0 COMMENT '删除标记(0=未删除,删除时写入主键ID)',
|
|
|
+ `create_by` bigint DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
+ `create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
|
|
+ `update_by` bigint DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `idx_reconciliation_id` (`reconciliation_id`),
|
|
|
+ KEY `idx_order_id` (`order_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='酒店-餐厅对账单明细表';
|
|
|
+
|
|
|
+-- ==================== 3. 字典:对账单状态 ====================
|
|
|
+INSERT INTO sys_dict_type (tenant_id, dict_name, dict_type, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, '对账单状态', 'hotel_reconciliation_status', 1, '酒店-餐厅对账单状态', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'hotel_reconciliation_status' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 1, '待确认', '0', 'hotel_reconciliation_status', NULL, 'warning', 'N', 1, '待确认', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_reconciliation_status' AND dict_value = '0' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 2, '已确认', '1', 'hotel_reconciliation_status', NULL, 'primary', 'N', 1, '已确认', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_reconciliation_status' AND dict_value = '1' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 3, '已结算', '2', 'hotel_reconciliation_status', NULL, 'success', 'N', 1, '已结算', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_reconciliation_status' AND dict_value = '2' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- ==================== 4. 菜单:对账管理(挂在「酒店管理」下) ====================
|
|
|
+-- 查找酒店管理目录
|
|
|
+SET @hotel_parent_id = (SELECT id FROM sys_resource WHERE resource_name = '酒店管理' AND tenant_id = 1 AND parent_id = 0 LIMIT 1);
|
|
|
+
|
|
|
+-- 对账管理目录(resource_type=1,挂在酒店管理下)
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, path, component, is_external, is_public, menu_status, visible, icon, keep_alive, always_show, remark, create_time, update_time)
|
|
|
+SELECT 1, '对账管理', @hotel_parent_id, 1, 30, '/reconciliation', NULL, 0, 0, 1, 1, 'mdi:file-document-multiple-outline', 0, 0, '酒店-餐厅对账管理', NOW(), NOW()
|
|
|
+WHERE @hotel_parent_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE resource_name = '对账管理' AND tenant_id = 1 AND parent_id = @hotel_parent_id);
|
|
|
+
|
|
|
+-- 获取对账管理目录ID
|
|
|
+SET @reconciliation_parent_id = (SELECT id FROM sys_resource WHERE resource_name = '对账管理' AND parent_id = @hotel_parent_id LIMIT 1);
|
|
|
+
|
|
|
+-- 子菜单:酒店端
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, path, component, is_external, is_public, menu_status, visible, icon, keep_alive, always_show, remark, create_time, update_time)
|
|
|
+SELECT 1, '酒店端', @reconciliation_parent_id, 2, 1, '/hotel/reconciliation', 'hotel/reconciliation', 0, 0, 1, 1, 'mdi:file-table-outline', 0, 0, '对账单管理(酒店端)', NOW(), NOW()
|
|
|
+WHERE @reconciliation_parent_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE path = '/hotel/reconciliation' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- 酒店端按钮权限
|
|
|
+SET @reconciliation_menu_id = (SELECT id FROM sys_resource WHERE resource_name = '酒店端' AND parent_id = @reconciliation_parent_id LIMIT 1);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '对账单查询', @reconciliation_menu_id, 3, 1, 'hotel:reconciliation:query', 0, 0, 1, 1, '查询对账单', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:query');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '生成对账单', @reconciliation_menu_id, 3, 2, 'hotel:reconciliation:generate', 0, 0, 1, 1, '生成对账单', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:generate');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '排除订单', @reconciliation_menu_id, 3, 3, 'hotel:reconciliation:exclude', 0, 0, 1, 1, '排除争议订单', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:exclude');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '提交对账', @reconciliation_menu_id, 3, 4, 'hotel:reconciliation:submit', 0, 0, 1, 1, '提交对账单给餐厅', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:submit');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '标记结算', @reconciliation_menu_id, 3, 5, 'hotel:reconciliation:settle', 0, 0, 1, 1, '标记对账单已结算', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:settle');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '对账单导出', @reconciliation_menu_id, 3, 6, 'hotel:reconciliation:export', 0, 0, 1, 1, '导出对账单', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:export');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '删除对账单', @reconciliation_menu_id, 3, 7, 'hotel:reconciliation:delete', 0, 0, 1, 1, '删除对账单(待确认状态或管理员)', NOW(), NOW()
|
|
|
+WHERE @reconciliation_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:delete');
|
|
|
+
|
|
|
+-- 子菜单:餐厅端
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, path, component, is_external, is_public, menu_status, visible, icon, keep_alive, always_show, remark, create_time, update_time)
|
|
|
+SELECT 1, '餐厅端', @reconciliation_parent_id, 2, 2, '/hotel/reconciliation/partner', 'hotel/reconciliationPartner', 0, 0, 1, 1, 'mdi:file-eye-outline', 0, 0, '对账单查看(餐厅端)', NOW(), NOW()
|
|
|
+WHERE @reconciliation_parent_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE path = '/hotel/reconciliation/partner' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- 餐厅端按钮权限
|
|
|
+SET @partner_menu_id = (SELECT id FROM sys_resource WHERE resource_name = '餐厅端' AND parent_id = @reconciliation_parent_id LIMIT 1);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '餐厅对账查询', @partner_menu_id, 3, 1, 'hotel:reconciliation:partner:query', 0, 0, 1, 1, '餐厅端查询对账单', NOW(), NOW()
|
|
|
+WHERE @partner_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:partner:query');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '餐厅对账确认', @partner_menu_id, 3, 2, 'hotel:reconciliation:partner:confirm', 0, 0, 1, 1, '餐厅端确认对账单', NOW(), NOW()
|
|
|
+WHERE @partner_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:partner:confirm');
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '餐厅对账导出', @partner_menu_id, 3, 3, 'hotel:reconciliation:partner:export', 0, 0, 1, 1, '餐厅端导出对账单', NOW(), NOW()
|
|
|
+WHERE @partner_menu_id IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:reconciliation:partner:export');
|
|
|
+
|
|
|
+-- ==================== 5. Excel 导出配置 ====================
|
|
|
+INSERT INTO sys_excel_export_config
|
|
|
+(config_key, config_type, export_name, sheet_name, file_name_template, data_source_bean, query_method, auto_trans, pageable, max_rows, status, allow_import, remark)
|
|
|
+SELECT 'hotel_reconciliation_export', 'EXPORT', '对账单导出', '对账数据', '对账单_{date}_{time}.xlsx', 'hotelReconciliationServiceImpl', 'queryExportList', 1, 0, 100000, 1, 0, '酒店-餐厅对账单列表导出'
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_excel_export_config WHERE config_key = 'hotel_reconciliation_export');
|
|
|
+
|
|
|
+INSERT INTO sys_excel_column_config
|
|
|
+(config_key, field_name, column_name, width, order_num, export, date_format, dict_type, importable)
|
|
|
+SELECT * FROM (
|
|
|
+ SELECT 'hotel_reconciliation_export' AS config_key, 'reconciliationNo' AS field_name, '对账单编号' AS column_name, 20 AS width, 1 AS order_num, 1 AS export, NULL AS date_format, NULL AS dict_type, 0 AS importable
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'periodStart', '周期开始', 14, 2, 1, 'yyyy-MM-dd', NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'periodEnd', '周期结束', 14, 3, 1, 'yyyy-MM-dd', NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'orderCount', '订单笔数', 10, 4, 1, NULL, NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'totalAmount', '订单总额(元)', 14, 5, 1, NULL, NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'excludedCount', '排除笔数', 10, 6, 1, NULL, NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'excludedAmount', '排除金额(元)', 14, 7, 1, NULL, NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'settlementAmount', '应付金额(元)', 14, 8, 1, NULL, NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'status', '状态', 10, 9, 1, NULL, 'hotel_reconciliation_status', 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'confirmedTime', '确认时间', 22, 10, 1, 'yyyy-MM-dd HH:mm:ss', NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'settledTime', '结算时间', 22, 11, 1, 'yyyy-MM-dd HH:mm:ss', NULL, 0
|
|
|
+ UNION ALL SELECT 'hotel_reconciliation_export', 'settledRemark', '结算备注', 30, 12, 1, NULL, NULL, 0
|
|
|
+) AS cols
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM sys_excel_column_config c
|
|
|
+ WHERE c.config_key = cols.config_key AND c.field_name = cols.field_name
|
|
|
+);
|