-- CRM与ERP客户同步功能初始化脚本
-- 执行说明：在MySQL中执行此脚本创建同步相关表

-- ========================================
-- 0. 租户与ERP公司映射表 (sys_tenant_company)
-- 用于配置租户与ERP companyid的一对多关系
-- ========================================
CREATE TABLE IF NOT EXISTS `sys_tenant_company` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` VARCHAR(20) NOT NULL COMMENT '租户编号',
  `erp_company_id` VARCHAR(50) NOT NULL COMMENT 'ERP公司ID(companyid)',
  `erp_company_name` VARCHAR(100) DEFAULT NULL COMMENT 'ERP公司名称',
  `sort` INT DEFAULT 0 COMMENT '排序',
  `status` CHAR(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
  `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
  `create_by` BIGINT DEFAULT NULL COMMENT '创建者',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` BIGINT DEFAULT NULL COMMENT '更新者',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_company` (`tenant_id`, `erp_company_id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_erp_company_id` (`erp_company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户与ERP公司映射表';

-- ========================================
-- 1. 同步日志表 (crm_sync_log)
-- ========================================
CREATE TABLE IF NOT EXISTS `crm_sync_log` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` VARCHAR(20) DEFAULT '000000' COMMENT '租户编号',
  `sync_type` VARCHAR(20) NOT NULL COMMENT '同步类型: SCHEDULED定时/MANUAL手动/ON_EDIT编辑触发',
  `sync_direction` VARCHAR(20) NOT NULL COMMENT '同步方向: ERP_TO_CRM',
  `status` VARCHAR(20) DEFAULT 'RUNNING' COMMENT '同步状态: RUNNING运行中/COMPLETED已完成/FAILED失败',
  `start_time` DATETIME NOT NULL COMMENT '开始时间',
  `end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
  `duration` INT DEFAULT NULL COMMENT '耗时(秒)',
  `total_count` INT DEFAULT 0 COMMENT '扫描总数(绑定customerCode的经销商)',
  `synced_count` INT DEFAULT 0 COMMENT '已同步数量',
  `updated_count` INT DEFAULT 0 COMMENT '更新数量(ERP覆盖字段)',
  `alert_count` INT DEFAULT 0 COMMENT '预警数量(CRM差异字段)',
  `error_count` INT DEFAULT 0 COMMENT '错误数量',
  `error_msg` TEXT DEFAULT NULL COMMENT '错误信息',
  `operator` VARCHAR(64) DEFAULT NULL COMMENT '操作人',
  `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
  `create_by` BIGINT DEFAULT NULL COMMENT '创建者',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` BIGINT DEFAULT NULL COMMENT '更新者',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_sync_type` (`sync_type`),
  KEY `idx_start_time` (`start_time`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRM同步日志表';

-- ========================================
-- 2. 同步预警表 (crm_sync_alert)
-- ========================================
CREATE TABLE IF NOT EXISTS `crm_sync_alert` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` VARCHAR(20) DEFAULT '000000' COMMENT '租户编号',
  `sync_log_id` BIGINT NOT NULL COMMENT '关联同步日志ID',
  `dealer_id` BIGINT NOT NULL COMMENT '经销商ID',
  `customer_code` VARCHAR(100) NOT NULL COMMENT 'ERP客户编码',
  `alert_type` VARCHAR(20) NOT NULL COMMENT '预警类型: CONTACT_DIFF联系人差异/ADDRESS_DIFF地址详情差异/STATUS_DIFF状态差异',
  `crm_value` TEXT DEFAULT NULL COMMENT 'CRM当前值(JSON格式)',
  `erp_value` TEXT DEFAULT NULL COMMENT 'ERP当前值(JSON格式)',
  `alert_message` VARCHAR(500) DEFAULT NULL COMMENT '预警描述',
  `status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '处理状态: PENDING待处理/ACKNOWLEDGED已确认/RESOLVED已处理/IGNORED已忽略',
  `resolved_by` BIGINT DEFAULT NULL COMMENT '处理人ID',
  `resolved_time` DATETIME DEFAULT NULL COMMENT '处理时间',
  `resolved_note` VARCHAR(500) DEFAULT NULL COMMENT '处理备注',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_sync_log_id` (`sync_log_id`),
  KEY `idx_dealer_id` (`dealer_id`),
  KEY `idx_customer_code` (`customer_code`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRM同步预警表';

-- ========================================
-- 3. 系统配置项 (sys_config)
-- ========================================
INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2046502099104342019, 'CRM同步定时任务启用', 'crm.sync.enabled', 'false', 'Y', 103, 1, NOW(), 'CRM-ERP客户同步定时任务是否启用'),
(2046502099104342020, 'CRM同步定时任务Cron表达式', 'crm.sync.cron', '0 0 2 * * ?', 'Y', 103, 1, NOW(), 'CRM-ERP客户同步定时任务执行时间，默认每日凌晨2点');

-- ========================================
-- 4. 字典类型 (sys_dict_type + sys_dict_data)
-- ========================================
-- 同步类型字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922814748053507, 'CRM同步类型', 'crm_sync_type', 103, 1, NOW(), 'CRM-ERP客户同步类型');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922815037460485, 1, '定时同步', 'SCHEDULED', 'crm_sync_type', '', 'primary', 'Y', 103, 1, NOW(), '定时任务自动执行'),
(2056922815037460486, 2, '手动同步', 'MANUAL', 'crm_sync_type', '', 'success', 'N', 103, 1, NOW(), '管理员手动触发'),
(2056922815037460487, 3, '编辑触发', 'ON_EDIT', 'crm_sync_type', '', 'info', 'N', 103, 1, NOW(), '编辑保存时触发校验');

-- 同步状态字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922814748053508, 'CRM同步状态', 'crm_sync_status', 103, 1, NOW(), 'CRM-ERP客户同步执行状态');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922815037460488, 1, '运行中', 'RUNNING', 'crm_sync_status', '', 'primary', 'Y', 103, 1, NOW(), '同步任务正在执行'),
(2056922815037460489, 2, '已完成', 'COMPLETED', 'crm_sync_status', '', 'success', 'N', 103, 1, NOW(), '同步任务执行完成'),
(2056922815037460490, 3, '失败', 'FAILED', 'crm_sync_status', '', 'danger', 'N', 103, 1, NOW(), '同步任务执行失败');

-- 预警类型字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922814748053509, 'CRM同步预警类型', 'crm_sync_alert_type', 103, 1, NOW(), 'CRM-ERP客户同步预警类型');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922815037460491, 1, '联系人差异', 'CONTACT_DIFF', 'crm_sync_alert_type', '', 'warning', 'N', 103, 1, NOW(), '联系人/电话与ERP不一致'),
(2056922815037460492, 2, '地址差异', 'ADDRESS_DIFF', 'crm_sync_alert_type', '', 'warning', 'N', 103, 1, NOW(), '地址详情与ERP不一致'),
(2056922815037460493, 3, '状态差异', 'STATUS_DIFF', 'crm_sync_alert_type', '', 'danger', 'N', 103, 1, NOW(), 'ERP客户已停用');

-- 预警处理状态字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922814748053510, 'CRM预警处理状态', 'crm_sync_alert_status', 103, 1, NOW(), 'CRM-ERP客户同步预警处理状态');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2056922815037460494, 1, '待处理', 'PENDING', 'crm_sync_alert_status', '', 'warning', 'Y', 103, 1, NOW(), '预警待人工处理'),
(2056922815037460495, 2, '已确认', 'ACKNOWLEDGED', 'crm_sync_alert_status', '', 'info', 'N', 103, 1, NOW(), '已确认差异，保持CRM值'),
(2056922815037460496, 3, '已处理', 'RESOLVED', 'crm_sync_alert_status', '', 'success', 'N', 103, 1, NOW(), '已同步ERP值到CRM'),
(2056922815037460497, 4, '已忽略', 'IGNORED', 'crm_sync_alert_status', '', 'default', 'N', 103, 1, NOW(), '忽略此差异');

-- ========================================
-- 5. 菜单配置 (sys_menu)
-- ========================================
-- CRM同步管理菜单（放在CRM模块下）
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2045402164711710722, '同步管理', 0, 6, 'crm/sync', 'crm/sync/index', NULL, 1, 0, 'C', '0', '0', '', 'sync', 103, 1, NOW(), 'CRM-ERP客户同步管理');

-- 同步管理子菜单
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`) VALUES
(2045402164711710723, '同步配置', 2045402164711710722, 1, 'config', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:config', '#', 103, 1, NOW(), ''),
(2045402164711710724, '执行同步', 2045402164711710722, 2, 'execute', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:execute', '#', 103, 1, NOW(), ''),
(2045402164711710725, '同步日志', 2045402164711710722, 3, 'logs', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:log', '#', 103, 1, NOW(), ''),
(2045402164711710726, '预警管理', 2045402164711710722, 4, 'alerts', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:alert', '#', 103, 1, NOW(), ''),
(2045402164711710727, '公司映射', 2045402164711710722, 5, 'company', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:company', '#', 103, 1, NOW(), ''),
(2045402164711710728, '统计面板', 2045402164711710722, 6, 'stats', NULL, NULL, 1, 0, 'F', '0', '0', 'crm:sync:stats', '#', 103, 1, NOW(), '');

-- ========================================
-- 完成
-- ========================================
-- 执行完成后，请检查表结构、字典数据和菜单配置是否正确创建