Junjie
2 天以前 acc1ce855edbb4aea27f9351979ab45dcf22b73c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
-- AI数据分析报告
CREATE TABLE IF NOT EXISTS sys_ai_data_analysis_report (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  period_type VARCHAR(20) NOT NULL COMMENT 'TODAY/YESTERDAY/THIS_WEEK/THIS_MONTH',
  period_start DATETIME COMMENT '分析周期开始时间',
  period_end DATETIME COMMENT '分析周期结束时间',
  trigger_type VARCHAR(20) NOT NULL COMMENT 'auto/manual',
  status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/running/success/failed',
  summary TEXT COMMENT 'LLM生成的自然语言分析报告',
  structured_data LONGTEXT COMMENT 'JSON格式的结构化分析数据',
  llm_call_count INT DEFAULT 0,
  prompt_tokens INT DEFAULT 0,
  completion_tokens INT DEFAULT 0,
  total_tokens INT DEFAULT 0,
  error_message VARCHAR(1024),
  local_file_path VARCHAR(512) COMMENT '本地存储文件路径',
  upload_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/uploaded/failed/skipped',
  create_time DATETIME NOT NULL,
  finish_time DATETIME,
  INDEX idx_period_type (period_type),
  INDEX idx_trigger_type (trigger_type),
  INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI数据分析报告';
 
-- AI数据分析报告上传日志
CREATE TABLE IF NOT EXISTS sys_ai_data_analysis_upload_log (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  report_id BIGINT NOT NULL COMMENT '关联报告ID',
  upload_url VARCHAR(512),
  request_body TEXT,
  response_body TEXT,
  http_status INT,
  result VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'success/failed',
  error_message VARCHAR(1024),
  retry_count INT DEFAULT 0,
  create_time DATETIME NOT NULL,
  INDEX idx_report_id (report_id),
  INDEX idx_result (result)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据分析报告上传日志';
 
-- 配置项
INSERT INTO sys_config(name, code, value, type, status, select_type)
SELECT 'AI数据分析功能开关', 'aiDataAnalysisEnabled', '0', 1, 1, 'Agent' FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'aiDataAnalysisEnabled');
 
INSERT INTO sys_config(name, code, value, type, status, select_type)
SELECT 'AI数据分析定时周期', 'aiDataAnalysisScheduledPeriods', 'YESTERDAY', 1, 1, 'Agent' FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'aiDataAnalysisScheduledPeriods');
 
INSERT INTO sys_config(name, code, value, type, status, select_type)
SELECT 'AI数据分析定时Cron', 'aiDataAnalysisCron', '0 0 1 * * ?', 1, 1, 'Agent' FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'aiDataAnalysisCron');
 
INSERT INTO sys_config(name, code, value, type, status, select_type)
SELECT 'AI数据分析上传地址', 'aiDataAnalysisUploadUrl', '', 1, 1, 'Agent' FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'aiDataAnalysisUploadUrl');
 
INSERT INTO sys_config(name, code, value, type, status, select_type)
SELECT 'AI数据分析上传开关', 'aiDataAnalysisUploadEnabled', '0', 1, 1, 'Agent' FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'aiDataAnalysisUploadEnabled');
 
-- 菜单:AI管理 -> AI数据分析
-- 执行后请在"角色授权"里给对应角色勾选 AI管理 -> AI数据分析。
SET @ai_manage_id := COALESCE(
  (
    SELECT id
    FROM sys_resource
    WHERE code = 'aiManage' AND level = 1
    ORDER BY id
    LIMIT 1
  ),
  (
    SELECT id
    FROM sys_resource
    WHERE name = 'AI管理' AND level = 1
    ORDER BY id
    LIMIT 1
  )
);
 
INSERT INTO sys_resource(code, name, resource_id, level, sort, status)
SELECT 'ai/data_analysis.html', 'AI数据分析', @ai_manage_id, 2, 5, 1
FROM dual
WHERE @ai_manage_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
    FROM sys_resource
    WHERE code = 'ai/data_analysis.html' AND level = 2
  );
 
UPDATE sys_resource
SET name = 'AI数据分析',
    resource_id = @ai_manage_id,
    level = 2,
    sort = 5,
    status = 1
WHERE code = 'ai/data_analysis.html' AND level = 2;
 
SET @ai_data_analysis_id := (
  SELECT id
  FROM sys_resource
  WHERE code = 'ai/data_analysis.html' AND level = 2
  ORDER BY id
  LIMIT 1
);
 
INSERT INTO sys_resource(code, name, resource_id, level, sort, status)
SELECT 'ai/data_analysis.html#view', '查看', @ai_data_analysis_id, 3, 1, 1
FROM dual
WHERE @ai_data_analysis_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
    FROM sys_resource
    WHERE code = 'ai/data_analysis.html#view' AND level = 3
  );
 
UPDATE sys_resource
SET name = '查看',
    resource_id = @ai_data_analysis_id,
    level = 3,
    sort = 1,
    status = 1
WHERE code = 'ai/data_analysis.html#view' AND level = 3;
 
-- 验证菜单创建结果
SELECT id, code, name, resource_id, level, sort, status
FROM sys_resource
WHERE code IN (
  'ai/data_analysis.html',
  'ai/data_analysis.html#view'
)
ORDER BY level, sort, id;
 
-- AI累计Token使用统计(独立存储,不受历史记录删除影响)
CREATE TABLE IF NOT EXISTS sys_ai_token_usage (
  id INT PRIMARY KEY DEFAULT 1,
  prompt_tokens BIGINT NOT NULL DEFAULT 0,
  completion_tokens BIGINT NOT NULL DEFAULT 0,
  total_tokens BIGINT NOT NULL DEFAULT 0,
  llm_call_count BIGINT NOT NULL DEFAULT 0,
  update_time DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI累计Token使用统计';
 
INSERT INTO sys_ai_token_usage (id, prompt_tokens, completion_tokens, total_tokens, llm_call_count, update_time)
SELECT 1, 0, 0, 0, 0, NOW() FROM dual
WHERE NOT EXISTS (SELECT 1 FROM sys_ai_token_usage WHERE id = 1);