diff --git a/docs/nacos/nacos_config_export_20250816090745.zip b/docs/nacos/nacos_config_export_20250816090745.zip deleted file mode 100644 index 1f9ec65e..00000000 Binary files a/docs/nacos/nacos_config_export_20250816090745.zip and /dev/null differ diff --git a/docs/nacos/nacos_config_export_20250827192912.zip b/docs/nacos/nacos_config_export_20250827192912.zip new file mode 100644 index 00000000..4025ca99 Binary files /dev/null and b/docs/nacos/nacos_config_export_20250827192912.zip differ diff --git a/docs/sql/luohuo_im_01.sql b/docs/sql/luohuo_im_01.sql index 59911bec..89318d78 100644 --- a/docs/sql/luohuo_im_01.sql +++ b/docs/sql/luohuo_im_01.sql @@ -3,15 +3,15 @@ Source Server : localhost Source Server Type : MySQL - Source Server Version : 80405 (8.4.5) - Source Host : localhost:3306 + Source Server Version : 80030 (8.0.30) + Source Host : 127.0.0.1:13306 Source Schema : luohuo_im_01 Target Server Type : MySQL - Target Server Version : 80405 (8.4.5) + Target Server Version : 80030 (8.0.30) File Encoding : 65001 - Date: 16/08/2025 00:27:14 + Date: 27/08/2025 19:29:52 */ SET NAMES utf8mb4; @@ -34,7 +34,7 @@ CREATE TABLE `ai_gpt_agreement` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '内容管理' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '内容管理' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_agreement @@ -70,7 +70,7 @@ CREATE TABLE `ai_gpt_assistant` ( `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, INDEX `type_id`(`type_id` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'AI助理功能' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'AI助理功能' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_assistant @@ -102,7 +102,7 @@ CREATE TABLE `ai_gpt_assistant_type` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '助手分类' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '助手分类' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_assistant_type @@ -136,215 +136,11 @@ CREATE TABLE `ai_gpt_chat` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 83706726461169702 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '聊天摘要' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 83706726461169701 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '聊天摘要' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_chat -- ---------------------------- -INSERT INTO `ai_gpt_chat` VALUES (6, '1920746450749358080', 0, 10937855681024, '你好', '', 10937855681024, '2025-05-13 10:47:15', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (9, '1920738458964459520', 0, 10937855681024, '你好', '', 10937855681024, '2025-05-09 15:11:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (28472017744384, '1922526698197352448', 0, 18344988162048, '你好啊', '', 18344988162048, '2025-05-14 14:27:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (28484529353216, '1922539211324522496', 0, 18344988162048, '你好你好', '', 18344988162048, '2025-05-14 14:27:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78178759953542144, '1897561279023939584', 0, 3, '5435435', '', 3, '2025-03-06 17:00:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862400, '1897572772838768640', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:12', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862401, '1897572760457183232', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-06 17:00:45', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862404, '1897572876027035648', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-06 17:00:41', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862406, '1897573117799301120', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:17', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862407, '1897573850011533312', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 10:20:21', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862409, '1897573924800167936', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 10:20:26', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862411, '1897574006480044032', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-06 17:05:05', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862413, '1897605517510049792', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:32', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862415, '1897606998908862464', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 10:20:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862417, '1897607178148249600', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862419, '1897608948157120512', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:44', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862420, '1897609143569743872', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:20:47', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862422, '1897609350416039936', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 10:20:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862424, '1897609755539668992', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:20:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862426, '1897609891602890752', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 10:20:58', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862428, '1897609933738868736', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 10:21:01', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78189355637862430, '1897609998079492096', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:21:05', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78229565121688576, '1897610837556854784', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:20:03', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78229565121688578, '1897611055115403264', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-07 10:20:06', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78230643158480896, '1897611880948695040', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:20:00', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78230643158480898, '1897612228673273856', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 10:19:58', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78230643158480900, '1897612518759727104', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:19:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78230643158480901, '1897612534324789248', 4, 3, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 3, '2025-03-07 10:19:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78231635295927296, '1897612838978060288', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 10:19:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78231635295927299, '1897613168482582528', 4, 3, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 3, '2025-03-07 10:19:45', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78234598823362561, '1897619567262433280', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-07 10:19:42', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78234598823362563, '1897620402373525504', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-07 10:19:39', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78243742808741893, '1897631688666775552', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:19:36', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78243742808741895, '1897631800453365760', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 09:58:20', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78450876196538368, '1897828660711391232', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 09:58:16', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500928, '1897834273151516672', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:19:32', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500929, '1897836688311451648', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 10:30:24', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500930, '1897841343355551744', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 10:48:11', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500931, '1897841561924927488', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-07 10:48:08', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500932, '1897841741671825408', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 11:32:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500933, '1897842150536773632', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 11:32:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500937, '1897842244480794624', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 11:32:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500939, '1897842342954663936', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 11:32:44', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500942, '1897842715354333184', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-07 11:32:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500943, '1897842752415203328', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 11:32:30', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78456528373500946, '1897847467106500608', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 11:32:26', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354880, '1897849642096394240', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 11:32:12', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354883, '1897849920044531712', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 11:32:09', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354886, '1897850028463095808', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 11:32:07', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354887, '1897850030782545920', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 11:32:03', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354888, '1897850448392617984', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 11:31:59', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354891, '1897850781747511296', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-07 11:31:56', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78473489199354894, '1897853447017988096', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:02:49', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78484295337073664, '1897859673458081792', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:02:47', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78484557330079744, '1897859855327297536', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 14:02:41', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78484557330079745, '1897883474648498176', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 14:02:38', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78484557330079746, '1897883778190278656', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-07 14:02:36', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597504, '1897886131987546112', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 14:02:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597507, '1897886459172618240', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 14:02:30', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597510, '1897886595130982400', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 14:02:27', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597512, '1897886680497651712', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:02:24', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597515, '1897888217009618944', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-07 14:02:22', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597518, '1897888316037136384', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 14:02:19', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597521, '1897888723144671232', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 14:02:16', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597522, '1897888723148865536', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 14:02:08', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597526, '1897888875913805824', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:02:13', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597527, '1897888958696783872', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 14:01:56', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597530, '1897889168231628800', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:02:05', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597531, '1897889204835319808', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-07 14:02:03', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597534, '1897889295130296320', 4, 3, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 3, '2025-03-07 14:02:00', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597535, '1897890689233059840', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 15:01:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597538, '1897891677272670208', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 15:01:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597541, '1897891832331894784', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 14:07:44', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78511280616597544, '1897892042470719488', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-08 13:36:27', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78519007262764032, '1897895419116126208', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-08 13:36:30', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78527253599974406, '1897903050031497216', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 14:55:35', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78527253599974411, '1897904017867145216', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 15:56:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78527253599974413, '1897904183777034240', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 15:56:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78530444760676354, '1897904743922139136', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 15:56:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78530444760676357, '1897904864076365824', 0, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 15:56:44', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78531011696360448, '1897905246995349504', 2, 3, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 3, '2025-03-07 15:56:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78531011696360451, '1897905517876084736', 0, 3, '5熱图t', '', 3, '2025-03-07 15:56:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490240, '1897911411858866176', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-07 15:56:34', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490263, '1897917117102161920', 4, 3, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 3, '2025-03-07 15:56:32', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490266, '1897917629683859456', 4, 111, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 111, '2025-03-07 15:49:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490269, '1897918718806196224', 2, 111, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 111, '2025-03-07 15:54:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490272, '1897919088634757120', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-07 15:56:29', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490275, '1897919423197609984', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-08 13:36:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490278, '1897919570321211392', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-08 13:36:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490281, '1897919684834099200', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-08 13:36:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490283, '1897919765368930304', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-08 13:36:43', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490286, '1897919834914684928', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-08 13:36:46', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490288, '1897919885497991168', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-08 13:36:49', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490290, '1897919933124313088', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-08 13:36:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490293, '1897920082139545600', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-08 13:36:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490295, '1897920131334537216', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-08 13:36:57', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490297, '1897920155967684608', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-08 13:37:00', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490300, '1897920241011392512', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-07 16:02:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490302, '1897920250536656896', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-07 16:02:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490304, '1897920259592159232', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-07 16:02:45', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490307, '1897920795812954112', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-07 16:02:43', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490310, '1897920874737172480', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-08 13:37:03', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490313, '1897921047676715008', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-08 13:37:06', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490316, '1897921177100353536', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-08 13:37:08', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490321, '1897921328518922240', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-08 13:36:19', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490323, '1897921558215786496', 1, 3, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 3, '2025-03-08 13:36:15', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490326, '1897921642445799424', 9, 3, '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:', '', 3, '2025-03-08 13:36:11', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490341, '1897922558158831616', 6, 3, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 3, '2025-03-08 13:36:08', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490344, '1897924673677688832', 1, 111, '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n', '', 111, '2025-03-07 16:17:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490347, '1897925471681773568', 2, 111, '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n', '', 111, '2025-03-07 16:21:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78535985268490350, '1897926982386188288', 0, 111, '现在是几号', '', 111, '2025-03-07 16:27:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78560462287114240, '1897935275464720384', 6, 111, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 111, '2025-03-07 17:00:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78579957143680000, '1897959941419958272', 7, 3, '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广', '', 3, '2025-03-08 13:36:05', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78815729373396994, '1898199817700638720', 0, 3, '3213', '', 3, '2025-03-08 13:35:58', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78815729373396997, '1898199911204257792', 0, 3, '32131', '', 3, '2025-03-08 13:35:53', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78815729373397000, '1898199978560585728', 0, 3, '321321', '', 3, '2025-03-08 13:36:02', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78815729373397002, '1898275167793184768', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-08 17:23:01', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207168, '1898277280820625408', 0, 3, '343242', '', 3, '2025-03-08 17:22:59', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207172, '1898294261045133312', 0, 3, '你能分析文件吗', '', 3, '2025-03-08 17:22:57', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207181, '1898294666177150976', 0, 3, '432432432', '', 3, '2025-03-08 17:22:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207186, '1898294835698335744', 0, 111, '我可以传文件的https地址给你解析吗', '', 111, '2025-03-08 16:48:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207192, '1898295534700068864', 0, 3, '4324324', '', 3, '2025-03-08 17:22:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207197, '1898297512989687808', 0, 3, '43242', '', 3, '2025-03-08 17:20:09', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207200, '1898301566977441792', 0, 3, '432432423', '', 3, '2025-03-08 17:20:06', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207205, '1898301638259638272', 0, 3, '4324324', '', 3, '2025-03-08 17:20:04', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207207, '1898301900760154112', 8, 3, '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构', '', 3, '2025-03-08 17:20:01', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207214, '1898302241186643968', 0, 3, '432432423', '', 3, '2025-03-08 17:19:59', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207217, '1898302292281655296', 0, 3, '432432423', '', 3, '2025-03-08 17:19:57', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207222, '1898303027815776256', 0, 3, '432432', '', 3, '2025-03-08 17:22:49', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207225, '1898303476820213760', 0, 3, '432432', '', 3, '2025-03-10 09:36:52', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207228, '1898303539499892736', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-10 09:36:49', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207231, '1898303759277228032', 0, 3, '4324高浮雕高浮雕', '', 3, '2025-03-10 09:36:46', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207234, '1898303864067719168', 0, 3, '543543543', '', 3, '2025-03-10 09:36:43', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207239, '1898304061288087552', 0, 3, '给DVD发v', '', 3, '2025-03-08 18:13:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207242, '1898304201755328512', 0, 3, '风大是否v', '', 3, '2025-03-08 18:13:42', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207251, '1898304957472440320', 0, 3, '广泛大概v ', '', 3, '2025-03-08 18:13:37', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207254, '1898305355121819648', 0, 3, '432424', '', 3, '2025-03-08 18:13:35', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207257, '1898305766826311680', 0, 3, '一天可以提供', '', 3, '2025-03-08 18:13:32', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207260, '1898305984963674112', 0, 3, '435人非常 从 ', '', 3, '2025-03-08 18:13:28', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207263, '1898306021517033472', 3, 3, '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化', '', 3, '2025-03-08 18:13:30', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207266, '1898306216841576448', 0, 3, '股份大股东', '', 3, '2025-03-08 18:13:25', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207271, '1898306478968799232', 0, 3, '写出选择从', '', 3, '2025-03-08 18:13:22', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207274, '1898306567644774400', 0, 3, '惹到我台风', '', 3, '2025-03-08 18:13:20', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207277, '1898306704441999360', 0, 3, '特务共分为v', '', 3, '2025-03-08 18:09:31', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207286, '1898307474591711232', 0, 3, '热望热望', '', 3, '2025-03-08 18:09:27', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207289, '1898308445925408768', 6, 111, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 111, '2025-03-08 17:42:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207290, '1898308446646829056', 6, 111, '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描', '', 111, '2025-03-08 17:42:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207294, '1898309273453199360', 0, 3, '43243242', '', 3, '2025-03-08 18:09:25', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207299, '1898309473882210304', 0, 3, '热望热望人', '', 3, '2025-03-08 18:09:22', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207304, '1898316228531978240', 0, 3, '43432432的方式v东西', '', 3, '2025-03-10 09:36:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207307, '1898316392441184256', 0, 3, '热望热望', '', 3, '2025-03-10 09:36:36', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207310, '1898316454336528384', 0, 3, '热望热望热望', '', 3, '2025-03-10 09:36:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207313, '1898316497961484288', 0, 3, '特特问题', '', 3, '2025-03-10 09:36:30', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207315, '1898316585471442944', 0, 3, 'r额外热舞', '', 3, '2025-03-08 18:24:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207318, '1898317896141111296', 0, 3, '封杀封杀', '', 3, '2025-03-08 18:22:24', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207323, '1898318339944611840', 0, 3, '额外全额完全', '', 3, '2025-03-08 18:24:38', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207326, '1898318448434479104', 0, 3, '饿我去饿我去恶趣味', '', 3, '2025-03-08 18:24:35', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207330, '1898318876928770048', 0, 3, '饿我去饿我去恶趣味', '', 3, '2025-03-08 18:24:32', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207333, '1898318967802560512', 0, 3, '发士大夫v从', '', 3, '2025-03-10 09:36:27', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207335, '1898319155032096768', 0, 3, '432432', '', 3, '2025-03-10 09:36:24', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207340, '1898319371584012288', 0, 3, '的说法萨芬', '', 3, '2025-03-10 09:36:21', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (78911494259207345, '1898320455291502592', 0, 3, '5435435', '', 3, '2025-03-10 09:36:18', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79335248617541632, '1898691012482695168', 4, 111, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 111, '2025-03-09 19:03:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79550151601177602, '1898910917542936576', 5, 3, '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,', '', 3, '2025-03-10 09:36:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462144, '1898915502877704192', 4, 3, '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅', '', 3, '2025-03-10 09:55:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462151, '1898916259999907840', 0, 3, '4324234', '', 3, '2025-03-10 09:58:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462158, '1898917842913460224', 0, 111, '1', '', 111, '2025-03-10 10:04:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462161, '1898918258657067008', 0, 3, '4324324', '', 3, '2025-03-10 10:06:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462164, '1898918383987064832', 0, 3, '4324热发电v从', '', 3, '2025-03-10 10:06:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462167, '1898918480166649856', 0, 3, '4343242范德萨v', '', 3, '2025-03-10 11:17:36', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462170, '1898918512513122304', 0, 111, '12', '', 111, '2025-03-10 10:07:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462173, '1898918643484459008', 0, 3, '432423房贷市场v徐', '', 3, '2025-03-10 11:17:33', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462176, '1898918959638511616', 0, 3, '432432vcxv 效参数', '', 3, '2025-03-10 11:17:31', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462183, '1898919199015829504', 0, 3, '4324324范德萨v出现', '', 3, '2025-03-10 11:17:28', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462187, '1898919354318323712', 0, 3, '从v程序', '', 3, '2025-03-10 11:17:25', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462192, '1898919982276935680', 0, 3, '432432范德萨v从', '', 3, '2025-03-10 11:17:10', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79565480339462195, '1898920102728957952', 0, 3, '432432发的电磁阀v', '', 3, '2025-03-10 11:17:13', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347842, '1898923387305197568', 0, 3, '4324324犯得上反对', '', 3, '2025-03-10 10:33:04', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347845, '1898924408819548160', 0, 3, '43242风大是否', '', 3, '2025-03-10 10:33:02', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347848, '1898924896805847040', 0, 3, '432423重新著从下', '', 3, '2025-03-10 10:32:59', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347852, '1898925067484659712', 0, 3, '发v的v反对', '', 3, '2025-03-10 11:17:16', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347857, '1898929373000630272', 0, 3, '范德萨范德萨v', '', 3, '2025-03-10 11:01:46', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347862, '1898930327070572544', 0, 3, '高达三百v地方', '', 3, '2025-03-10 11:01:44', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347865, '1898930402081505280', 0, 3, '范德萨VS的', '', 3, '2025-03-10 11:01:42', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347871, '1898930916357701632', 0, 3, '范德萨富士达', '', 3, '2025-03-10 11:01:39', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347880, '1898932087810031616', 0, 3, '吃撒测试', '', 3, '2025-03-10 11:01:36', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347886, '1898933678671790080', 0, 3, '持续支持第三方', '', 3, '2025-03-10 11:17:19', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79572193373347889, '1898933758199988224', 0, 3, '吃撒测试', '', 3, '2025-03-10 11:17:22', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79628874056762368, '1898983258390134784', 0, 3, '热特瑞特', '', 3, '2025-03-10 14:24:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79628874056762371, '1898985773995261952', 0, 3, 'gdfgdf', '', 3, '2025-03-10 14:34:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79640148345918464, '1898988692811415552', 0, 3, '543543543', '', 3, '2025-03-10 14:46:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79640148345918465, '1898989044977762304', 0, 3, '', '', 3, '2025-03-10 15:20:42', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79640148345918466, '1898989351099039744', 0, 3, '', '', 3, '2025-03-10 15:20:40', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79656945963020288, '1899005215894536192', 0, 3, '学生的撒', '', 3, '2025-03-10 15:51:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (79659870835750913, '1899009242417987584', 0, 3, '', '', 3, '2025-03-11 18:16:48', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (79694849049416709, '1899060774308020224', 0, 3, '?', '', 3, '2025-03-11 18:16:45', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (80689503345689600, '1900013798132154368', 0, 111, '1', '', 111, '2025-03-13 10:39:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (81404387767253087, '1900806543478226944', 0, 3, '432432', '', 3, '2025-03-15 15:09:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169664, '1902959617726611456', 0, 3, '', '', 3, '2025-03-21 13:45:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169674, '1902961030452084736', 0, 3, '', '', 3, '2025-03-21 13:50:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169684, '1902962125198983168', 0, 3, '', '', 3, '2025-03-21 14:06:57', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169697, '1902964787323731968', 0, 3, '', '', 3, '2025-03-21 14:06:54', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169698, '1902964863223857152', 0, 3, '', '', 3, '2025-03-21 14:06:51', NULL, NULL, 1); -INSERT INTO `ai_gpt_chat` VALUES (83706726461169701, '1902965176626446336', 0, 3, '', '', 3, '2025-03-21 14:07:08', NULL, NULL, 0); -- ---------------------------- -- Table structure for ai_gpt_chat_message @@ -372,989 +168,11 @@ CREATE TABLE `ai_gpt_chat_message` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 83706726461169735 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '对话消息' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 83706726461169734 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '对话消息' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_chat_message -- ---------------------------- -INSERT INTO `ai_gpt_chat_message` VALUES (26691682496000, 9, '0291edbd-c898-47ad-9959-3a4abbdf5657', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:43:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26691934154240, 9, 'facae93a-a38a-49c8-aceb-19077fc7a721', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:44:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26692320030208, 9, 'bfb93801-d64e-40bf-a248-e1c61bd109fd', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:45:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26693246971392, 9, 'eac251ca-36b9-47c6-912a-574fcaec4c36', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:49:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26694379433472, 9, 'e5073d24-ff73-4374-bcc3-3d67134af3a9', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:53:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26694442348032, 9, '659ba102-1ee4-4215-bc5c-4a07073907fc', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:54:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26694664646144, 9, 'efa14ece-abef-4664-8517-aaab22999a5d', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:55:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26695658696192, 9, 'eed356bc-7385-4a28-8a88-8659369bd060', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-09 15:59:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26699932691968, 9, 'd31ebf8c-619a-46ec-b85d-8d158102a43d', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-09 16:16:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26699941080576, 9, 'chatcmpl-681db9c2a5f22a4dd831dc48', 'd31ebf8c-619a-46ec-b85d-8d158102a43d', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你服务。有什么问题我可以帮你解答吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-09 16:16:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26701031599616, 9, 'a98cd92f-240e-4f5b-8748-71fe5a03a665', '', 'Moonshot', 'moonshot-v1-auto', '能写一首诗吗?', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-09 16:20:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26701056765440, 9, 'chatcmpl-681dbac7a5f22a4dd831eb2e', 'a98cd92f-240e-4f5b-8748-71fe5a03a665', 'Moonshot', 'moonshot-v1-auto', '当然可以,以下是我为您创作的一首诗:\n\n题目:《晨光中的希望》\n\n晨曦初照,露珠闪烁,\n绿叶轻摇,花香四溢。\n鸟儿欢唱,唤醒沉睡的大地,\n希望在心中,悄然绽放。\n\n阳光洒满,金色的田野,\n农夫辛勤,播种希望的种子。\n汗水滴落,滋润着泥土,\n期待收获,那满满的喜悦。\n\n河流蜿蜒,流向远方,\n承载着梦想,和无尽的向往。\n波光粼粼,映照着蓝天,\n希望如船,驶向未来的彼岸。\n\n在这晨光中,我们携手同行,\n不畏风雨,勇敢地追逐梦想。\n希望如灯塔,照亮前行的路,\n让我们相信,明天会更好。\n\n这首诗以晨光为背景,描绘了希望在自然和人类活动中的体现,表达了对未来的美好期待。希望您喜欢这首诗。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-09 16:20:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26701551693312, 9, 'f1acfcea-cc61-4b4c-b96c-7a4269375d90', '', 'Moonshot', 'moonshot-v1-auto', '使用js写一个防抖代码', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-09 16:22:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26701581053440, 9, 'chatcmpl-681dbb42b6f44e92f29d1c79', 'f1acfcea-cc61-4b4c-b96c-7a4269375d90', 'Moonshot', 'moonshot-v1-auto', '防抖(debounce)是一种在前端开发中常用的技术,用于限制函数在短时间内被频繁调用。这在处理诸如窗口大小调整、滚动事件等高频事件时非常有用。以下是一个简单的防抖函数的实现:\n\n```javascript\nfunction debounce(func, wait) {\n let timeout;\n\n return function(...args) {\n const context = this;\n\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n func.apply(context, args);\n }, wait);\n };\n}\n\n// 使用示例\nwindow.addEventListener(\'resize\', debounce(function() {\n console.log(\'窗口大小已调整\');\n}, 200));\n```\n\n在这个例子中,`debounce` 函数接受两个参数:`func`(需要防抖的函数)和 `wait`(防抖时间,单位为毫秒)。当事件被触发时,`debounce` 函数会创建一个定时器,如果在 `wait` 时间内再次触发事件,之前的定时器会被清除,然后重新设置一个新的定时器。只有当 `wait` 时间过后,`func` 函数才会被执行。\n\n在这个示例中,我们使用 `debounce` 函数来处理窗口大小调整事件。当窗口大小调整时,`debounce` 函数会限制 `func` 函数的执行频率,使其在 200 毫秒内最多执行一次。这样可以避免在窗口大小调整过程中频繁触发事件处理函数,提高性能。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-09 16:22:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26702294085120, 9, '59cfbf59-63fc-4c44-8aca-03dbb5848ac2', '', 'Moonshot', 'moonshot-v1-auto', 'hula是什么项目?', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-09 16:25:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26702323445248, 9, 'chatcmpl-681dbbf4f08e7f97510eaf4a', '59cfbf59-63fc-4c44-8aca-03dbb5848ac2', 'Moonshot', 'moonshot-v1-auto', 'Hula(呼拉)是一个基于区块链技术的去中心化金融(DeFi)项目。它旨在通过提供一个去中心化的金融生态系统,让用户能够自由地进行金融交易、借贷、投资和赚取收益。Hula项目的主要目标是降低传统金融体系中的中介成本,提高金融交易的透明度和安全性,以及为用户提供更多的金融自由度。\n\nHula项目的主要特点包括:\n\n1. 去中心化:Hula项目基于区块链技术,实现了去中心化的金融交易,消除了传统金融体系中的中介机构,降低了交易成本。\n\n2. 跨链兼容性:Hula项目支持多种区块链网络,如以太坊(Ethereum)、波卡(Polkadot)等,实现了不同区块链网络之间的资产互通。\n\n3. 金融产品丰富:Hula项目提供了多种金融产品,包括借贷、流动性挖矿、去中心化交易所(DEX)等,满足用户的不同金融需求。\n\n4. 安全性:Hula项目采用了多重安全机制,如智能合约审计、去中心化治理等,确保用户资产的安全。\n\n5. 社区驱动:Hula项目鼓励社区参与,通过去中心化治理机制,让用户参与项目的决策和发展方向。\n\n总之,Hula项目是一个去中心化的金融生态系统,旨在为用户提供更自由、更安全、更低成本的金融服务。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-09 16:25:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26735592664576, 9, '57d7f703-b01c-40fa-8ed0-8bb050a63034', '', 'Moonshot', 'moonshot-v1-auto', '用py写一个hello', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-09 18:37:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (26735605247488, 9, 'chatcmpl-681ddaf7b6f44e92f29f3b3e', '57d7f703-b01c-40fa-8ed0-8bb050a63034', 'Moonshot', 'moonshot-v1-auto', '当然可以!这是一个简单的 Python 程序,用于打印 \"Hello\":\n\n```python\nprint(\"Hello\")\n```\n\n只需将这段代码复制到 Python 环境中,然后运行它,你将看到 \"Hello\" 被打印在控制台上。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-09 18:37:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27481260224000, 9, '86777a49-4506-465f-ad6e-89f86d70c173', '', 'Moonshot', 'moonshot-v1-auto', '你是谁?', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 20:00:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27481268612608, 9, 'chatcmpl-6820916c14211bce715f5129', '86777a49-4506-465f-ad6e-89f86d70c173', 'Moonshot', 'moonshot-v1-auto', '你好!我是一个人工智能助手,擅长中英文对话。我在这里帮助你解答问题,提供信息。有什么可以帮你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 20:00:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27483449650688, 9, '8c92b759-f9e2-4f44-b916-1dc48a9d8b12', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 20:09:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27483453844992, 9, 'chatcmpl-68209376f08e7f9751295ac1', '8c92b759-f9e2-4f44-b916-1dc48a9d8b12', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你服务。有什么可以帮助你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 20:09:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27483969744384, 9, '3d6ef4ae-c977-40eb-8800-0a873c06e588', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 20:11:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27483973938688, 9, 'chatcmpl-682093f214211bce715f69da', '3d6ef4ae-c977-40eb-8800-0a873c06e588', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你服务。有什么可以帮助你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 20:11:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27484489838080, 9, '29f3698d-86cb-465e-87c6-6f54add72b0a', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 20:13:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27484494032384, 9, 'chatcmpl-6820946e14211bce715f6e85', '29f3698d-86cb-465e-87c6-6f54add72b0a', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你服务。有什么问题我可以帮你解答吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 20:13:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27484988960256, 6, '9014ba9a-dc8a-4653-bf95-911001bdc5c1', '', 'Moonshot', 'moonshot-v1-auto', '测试一下', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 20:15:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27484997348864, 6, 'chatcmpl-682094e514211bce715f7327', '9014ba9a-dc8a-4653-bf95-911001bdc5c1', 'Moonshot', 'moonshot-v1-auto', '你好!我是Kimi,来自月之暗面科技有限公司开发的Moonshot AI。我在这里可以帮助你解答问题、提供信息,还能处理多种语言的对话。请随时告诉我你需要什么帮助,我们可以开始聊天了!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 20:15:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27487794949632, 6, '609a20ec-91fd-46d5-b07b-fc9efe1ab5e8', '', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-11 20:26:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27488809971200, 6, '10fb58e8-2ba9-4c50-ae82-6d70f5bd6c03', '', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'user', '', 3, '', 0, NULL, '', 10937855681024, '2025-05-11 20:30:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27496556850688, 6, 'f644bcf1-f88b-4f8d-b6cc-ce13c1db79ad', '', 'SPARK', 'v1.1', '测试', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:01:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27497311825408, 6, '08be7837-8c63-4f54-9e34-a04b4ee85a63', '', 'Moonshot', 'moonshot-v1-auto', '测试', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:04:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27497316019712, 6, 'chatcmpl-6820a05ef08e7f975129cca9', '08be7837-8c63-4f54-9e34-a04b4ee85a63', 'Moonshot', 'moonshot-v1-auto', '您好!看起来您可能想要进行某种测试。请告诉我您需要测试的具体内容,比如是技术问题、知识问题还是其他方面的测试。我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 21:04:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27497349574144, 6, '50cbea7d-f640-49dc-a969-76f82550fa85', '', 'Moonshot', 'moonshot-v1-auto', '你是谁?', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:04:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27497353768448, 6, 'chatcmpl-6820a06714211bce715fe6fe', '50cbea7d-f640-49dc-a969-76f82550fa85', 'Moonshot', 'moonshot-v1-auto', '你好!我是一个人工智能助手,由 Moonshot AI 开发。我擅长进行中文和英文的对话,并且能够提供安全、有帮助、准确的回答。我在这里帮助你解答问题、提供信息,但我会避免涉及不当内容。如果你有任何问题,随时可以问我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 21:04:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27500394638848, 6, '728aa293-67cb-49a0-b3af-39438eeec813', '', 'SPARK', 'v1.1', '厕所', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:16:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27500419804672, 6, '7941f6ec-8d45-41fb-b03f-6ce7cb2e7029', '', 'Moonshot', 'moonshot-v1-auto', '测算', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:16:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27500432387584, 6, 'chatcmpl-6820a344f08e7f975129e609', '7941f6ec-8d45-41fb-b03f-6ce7cb2e7029', 'Moonshot', 'moonshot-v1-auto', '您好!“测算”这个词可以指很多不同的事物,比如数学计算、预测、评估等。请问您具体想要测算什么?如果您能提供更多的上下文或者详细信息,我会很乐意帮助您。比如,您可能需要帮助解决一个数学问题,或者需要对某个项目的成本进行估算,或者是想要预测某个事件的可能性。请告诉我具体的情况,我会尽我所能为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 21:16:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27501732621824, 6, 'bebe5400-96df-4a7e-aa9a-64bf3562f99c', '', 'Moonshot', 'moonshot-v1-auto', '帮我用js写一个python代码', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:22:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27501753593344, 6, 'chatcmpl-6820a47d14211bce7160109b', 'bebe5400-96df-4a7e-aa9a-64bf3562f99c', 'Moonshot', 'moonshot-v1-auto', '当然可以。首先,我们需要明确您想要实现的Python代码的功能。然后,我将为您提供一个JavaScript代码,该代码可以生成相应的Python代码。\n\n假设您想要一个简单的Python代码,用于计算两个数字的和。以下是JavaScript代码,用于生成这个Python代码:\n\n```javascript\nfunction generatePythonCode() {\n const pythonCode = `\ndef add_numbers(a, b):\n return a + b\n\n# 示例\nresult = add_numbers(3, 4)\nprint(\"The sum is:\", result)\n`;\n\n return pythonCode;\n}\n\nconst pythonCode = generatePythonCode();\nconsole.log(pythonCode);\n```\n\n运行这段JavaScript代码后,它将输出以下Python代码:\n\n```python\ndef add_numbers(a, b):\n return a + b\n\n# 示例\nresult = add_numbers(3, 4)\nprint(\"The sum is:\", result)\n```\n\n这个Python代码定义了一个名为`add_numbers`的函数,用于计算两个数字的和,并打印结果。您可以根据需要修改JavaScript代码,以生成不同的Python代码。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 21:22:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27501938142720, 6, '4a61bee5-76ab-4828-82d3-0cc201eb72f9', '', 'Moonshot', 'moonshot-v1-auto', '怎么使用呢?', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-11 21:22:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (27501942337024, 6, 'chatcmpl-6820a4adb6f44e92f2b5a825', '4a61bee5-76ab-4828-82d3-0cc201eb72f9', 'Moonshot', 'moonshot-v1-auto', '您好!看起来您可能需要一些帮助。请告诉我您需要使用什么,或者您遇到了什么问题,我会尽力为您提供帮助和指导。如果有任何具体的问题或者需要操作的步骤,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-11 21:22:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28193285271552, 9, '2ba5dc65-b481-4b13-9644-42bfd56815ad', '', 'Moonshot', 'moonshot-v1-auto', '总结全部编程语言的web框架有哪些,必须都是开源的', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-13 19:10:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28193318825984, 9, 'chatcmpl-6823288df08e7f9751408bf0', '2ba5dc65-b481-4b13-9644-42bfd56815ad', 'Moonshot', 'moonshot-v1-auto', '以下是一些流行的开源Web框架,涵盖了多种编程语言:\n\n1. Python:\n - Django\n - Flask\n - Pyramid\n - Tornado\n\n2. JavaScript (Node.js):\n - Express\n - Koa\n - NestJS\n - Hapi\n\n3. Ruby:\n - Ruby on Rails\n - Sinatra\n - Hanami\n\n4. PHP:\n - Laravel\n - Symfony\n - CodeIgniter\n - CakePHP\n\n5. Java:\n - Spring Boot\n - Jakarta EE (formerly Java EE)\n - Play Framework\n - Quarkus\n\n6. C#:\n - ASP.NET Core\n - NancyFx\n\n7. Go:\n - Gin\n - Echo\n - Revel\n - Buffalo\n\n8. Rust:\n - Rocket\n - Actix-web\n - Gotham\n\n9. Swift:\n - Vapor\n - Kitura\n\n10. Elixir:\n - Phoenix\n\n11. Clojure:\n - Ring\n - Compojure\n\n12. Scala:\n - Play Framework\n - Lagom\n\n13. Kotlin:\n - Ktor\n - Spring Boot (with Kotlin support)\n\n这些框架都是开源的,并且各自有其特点和优势。选择哪个框架取决于你的项目需求、团队熟悉度以及个人偏好。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-13 19:10:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473334755840, 28472017744384, 'd2a58140-d33d-483f-a944-1ad19a1f0e07', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:42:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473343144448, 28472017744384, 'chatcmpl-68242d5df08e7f97514a684d', 'd2a58140-d33d-483f-a944-1ad19a1f0e07', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你服务。有什么可以帮助你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 13:42:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473498333696, 28472017744384, '2688ffd6-4dd3-4079-b176-1d466df40e32', '', 'Internlm', 'internlm2-latest', 'hello', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:43:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473590608384, 28472017744384, 'd481985e-6107-42aa-81af-2cd5c88b7ecf', '', 'ChatGLM', 'chatGLM_6b_SSE', '哈哈哈', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:43:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473632551424, 28472017744384, 'c207346d-16ef-43b0-8401-6a6869f327ab', '', 'SPARK', 'v1.1', '9999', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:44:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473657717248, 28472017744384, 'c070262d-08ef-4010-bfda-7e618d23faf6', '', 'QIANWEN', 'qwen-turbo', '?', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105856, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好', 'text', 'assistant', 'null', 2, '', 21, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105857, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!', 'text', 'assistant', 'null', 2, '', 22, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105858, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来', 'text', 'assistant', 'null', 2, '', 23, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105859, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有', 'text', 'assistant', 'null', 2, '', 27, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105860, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有完整表述出来。', 'text', 'assistant', 'null', 2, '', 31, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105861, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有完整表述出来。请补充完整您的', 'text', 'assistant', 'null', 2, '', 35, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105862, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有完整表述出来。请补充完整您的问题,我会尽力', 'text', 'assistant', 'null', 2, '', 39, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105863, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有完整表述出来。请补充完整您的问题,我会尽力为您解答!', 'text', 'assistant', 'null', 2, '', 42, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473666105864, 28472017744384, '60911190-2d2f-958d-ae7f-85b747a3a122', 'c070262d-08ef-4010-bfda-7e618d23faf6', 'QIANWEN', 'qwen-turbo', '您好!看起来您的问题可能没有完整表述出来。请补充完整您的问题,我会尽力为您解答!', 'text', 'assistant', 'stop', 2, '', 42, NULL, '', 0, '2025-05-14 13:44:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473716437504, 28472017744384, '4606f600-1feb-4a66-a726-4dd30f0a649a', '', 'WENXIN', 'ERNIE_Bot_turbo', '?', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 13:44:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28473754186240, 28472017744384, 'fa957d06-5ed6-4098-8d82-2e6dde2c53ab', '', 'ChatGPT', 'gpt-3.5-turbo-0613', '8888', 'text', 'user', '', 3, '', 0, NULL, '', 18344988162048, '2025-05-14 13:44:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484369969664, 28472017744384, 'ccf1706c-6c2d-4311-99f3-fa7ef7c41f82', '', 'Moonshot', 'moonshot-v1-auto', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 14:26:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484378358272, 28472017744384, 'chatcmpl-682437a4b2fe3a455e7da5dc', 'ccf1706c-6c2d-4311-99f3-fa7ef7c41f82', 'Moonshot', 'moonshot-v1-auto', '你好!很高兴为你提供帮助。有什么问题我可以帮你解答吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 14:26:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484529353217, 28484529353216, '602df87a-d2a3-45e7-9773-b0b8c3b22253', '', 'Moonshot', 'moonshot-v1-auto', '你好你好', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 14:27:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484537741824, 28484529353216, 'chatcmpl-682437caf08e7f97514aeb89', '602df87a-d2a3-45e7-9773-b0b8c3b22253', 'Moonshot', 'moonshot-v1-auto', '你好!有什么可以帮助你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 14:27:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484722291200, 28484529353216, '3bb39aba-d8e0-45cc-977a-57a605402b48', '', 'Moonshot', 'moonshot-v1-auto', '你好哦', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 14:28:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484726485504, 28484529353216, 'chatcmpl-682437f8098fd69c34ed4b32', '3bb39aba-d8e0-45cc-977a-57a605402b48', 'Moonshot', 'moonshot-v1-auto', '你好!有什么可以帮助你的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 14:28:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484755845632, 28484529353216, 'cefc21f7-96b6-408f-a518-7a03fbe65f45', '', 'Moonshot', 'moonshot-v1-auto', '你在干什么', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 14:28:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28484760039936, 28484529353216, 'chatcmpl-682437fff08e7f97514aee75', 'cefc21f7-96b6-408f-a518-7a03fbe65f45', 'Moonshot', 'moonshot-v1-auto', '你好!作为一个AI助手,我在这里等待你的问题或者需要帮助的地方。请随时告诉我你需要什么帮助,我会尽我所能为你提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 14:28:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28486127383040, 28484529353216, 'bac0794f-cedc-4da3-bad0-32d8fecf9651', '', 'Moonshot', 'moonshot-v1-auto', 'Q', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-14 14:33:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (28486135771648, 28484529353216, 'chatcmpl-68243947ca1815d7f3710699', 'bac0794f-cedc-4da3-bad0-32d8fecf9651', 'Moonshot', 'moonshot-v1-auto', '您好!看起来您可能只发送了一个字母 \"Q\",这让我有些困惑。如果您有任何问题或需要帮助,请随时告诉我,我会尽我所能为您提供支持。您想要了解什么信息或者有什么具体的问题吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-14 14:33:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018566681600, 28484529353216, '034b2e72-ddc1-48db-8b86-58c1c008faff', '', 'QIANWEN', 'qwen-turbo', '你好啊', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018575070208, 28484529353216, '8e6a1f20-1b5e-9bc9-9363-3584977e932e', '034b2e72-ddc1-48db-8b86-58c1c008faff', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'assistant', 'null', 2, '', 22, NULL, '', 0, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018575070209, 28484529353216, '8e6a1f20-1b5e-9bc9-9363-3584977e932e', '034b2e72-ddc1-48db-8b86-58c1c008faff', 'QIANWEN', 'qwen-turbo', '你好!', 'text', 'assistant', 'null', 2, '', 23, NULL, '', 0, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018575070210, 28484529353216, '8e6a1f20-1b5e-9bc9-9363-3584977e932e', '034b2e72-ddc1-48db-8b86-58c1c008faff', 'QIANWEN', 'qwen-turbo', '你好!今天', 'text', 'assistant', 'null', 2, '', 24, NULL, '', 0, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018575070211, 28484529353216, '8e6a1f20-1b5e-9bc9-9363-3584977e932e', '034b2e72-ddc1-48db-8b86-58c1c008faff', 'QIANWEN', 'qwen-turbo', '你好!今天过得怎么样?', 'text', 'assistant', 'null', 2, '', 27, NULL, '', 0, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018575070212, 28484529353216, '8e6a1f20-1b5e-9bc9-9363-3584977e932e', '034b2e72-ddc1-48db-8b86-58c1c008faff', 'QIANWEN', 'qwen-turbo', '你好!今天过得怎么样?', 'text', 'assistant', 'stop', 2, '', 27, NULL, '', 0, '2025-05-18 20:03:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018747036672, 28484529353216, '7f306d63-f4b5-4446-b077-727d899b447a', '', 'QIANWEN', 'qwen-turbo', '你好啊', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018751230976, 28484529353216, '42712619-9bde-9e3f-96df-320ea124bf25', '7f306d63-f4b5-4446-b077-727d899b447a', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'assistant', 'null', 2, '', 22, NULL, '', 0, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018751230977, 28484529353216, '42712619-9bde-9e3f-96df-320ea124bf25', '7f306d63-f4b5-4446-b077-727d899b447a', 'QIANWEN', 'qwen-turbo', '你好!', 'text', 'assistant', 'null', 2, '', 23, NULL, '', 0, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018751230978, 28484529353216, '42712619-9bde-9e3f-96df-320ea124bf25', '7f306d63-f4b5-4446-b077-727d899b447a', 'QIANWEN', 'qwen-turbo', '你好!有什么', 'text', 'assistant', 'null', 2, '', 24, NULL, '', 0, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018751230979, 28484529353216, '42712619-9bde-9e3f-96df-320ea124bf25', '7f306d63-f4b5-4446-b077-727d899b447a', 'QIANWEN', 'qwen-turbo', '你好!有什么我可以帮助你的?', 'text', 'assistant', 'null', 2, '', 28, NULL, '', 0, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30018751230980, 28484529353216, '42712619-9bde-9e3f-96df-320ea124bf25', '7f306d63-f4b5-4446-b077-727d899b447a', 'QIANWEN', 'qwen-turbo', '你好!有什么我可以帮助你的?', 'text', 'assistant', 'stop', 2, '', 28, NULL, '', 0, '2025-05-18 20:03:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30019057415168, 28484529353216, '65dff57a-484c-46e6-9dd1-a176ae65231d', '', 'SPARK', 'v1.1', '你好啊', 'text', 'user', '', 2, '', 0, NULL, '', 18344988162048, '2025-05-18 20:05:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057967973376, 9, '3e03e5f6-ce07-404c-9f6f-d328648e43c1', '', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057997333504, 9, '6dee4a05-0be7-9f94-913c-7087ceb37b7f', '3e03e5f6-ce07-404c-9f6f-d328648e43c1', 'QIANWEN', 'qwen-turbo', '你好', 'text', 'assistant', 'null', 2, '', 21, NULL, '', 0, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057997333505, 9, '6dee4a05-0be7-9f94-913c-7087ceb37b7f', '3e03e5f6-ce07-404c-9f6f-d328648e43c1', 'QIANWEN', 'qwen-turbo', '你好!', 'text', 'assistant', 'null', 2, '', 22, NULL, '', 0, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057997333506, 9, '6dee4a05-0be7-9f94-913c-7087ceb37b7f', '3e03e5f6-ce07-404c-9f6f-d328648e43c1', 'QIANWEN', 'qwen-turbo', '你好!有什么', 'text', 'assistant', 'null', 2, '', 23, NULL, '', 0, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057997333507, 9, '6dee4a05-0be7-9f94-913c-7087ceb37b7f', '3e03e5f6-ce07-404c-9f6f-d328648e43c1', 'QIANWEN', 'qwen-turbo', '你好!有什么我可以帮助你的?', 'text', 'assistant', 'null', 2, '', 27, NULL, '', 0, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30057997333508, 9, '6dee4a05-0be7-9f94-913c-7087ceb37b7f', '3e03e5f6-ce07-404c-9f6f-d328648e43c1', 'QIANWEN', 'qwen-turbo', '你好!有什么我可以帮助你的?', 'text', 'assistant', 'stop', 2, '', 27, NULL, '', 0, '2025-05-18 22:39:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30058039276544, 9, '02be3bf6-042d-42ed-8896-6b861dfe7cd0', '', 'Moonshot', 'moonshot-v1-auto', '你还啥', 'text', 'user', '', 2, '', 0, NULL, '', 10937855681024, '2025-05-18 22:39:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (30058051859456, 9, 'chatcmpl-6829f13dca1815d7f3a00b01', '02be3bf6-042d-42ed-8896-6b861dfe7cd0', 'Moonshot', 'moonshot-v1-auto', '您好!看起来您的问题可能不完整或者有些模糊。如果您有任何问题或者需要帮助,请随时告诉我,我会尽力为您提供信息和支持。无论是日常知识、学术问题还是技术难题,我都在这里等着帮您解答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 0, '2025-05-18 22:39:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053952, 78094677378781184, 'f34e52b5-c853-4355-b70d-f0186fe2d356', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:49:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053953, 78094677378781184, '413a7f9e-487b-4f2f-972f-1f31a05be5a3', '', 'LocalLM', 'chatglm3-6b', '231', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:49:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053954, 78094677378781184, 'fcc2a139-e113-4d70-818e-28b31334a351', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:50:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053955, 78094677378781184, '65936610-371e-4bf3-95d9-1f4803a639f3', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:56:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053956, 78094677378781184, '83c1191f-95db-419b-8e71-c09333cc606a', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:56:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053957, 78094677378781184, '995a8bee-f4e5-4fa3-b3ba-c8eb9cd8ff31', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:56:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053958, 78094677378781184, 'b66ed562-c9fb-488a-b37f-bb04da9442e5', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:56:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053959, 78094677378781184, 'df82acc2-010f-4121-b5c4-c298b0d0e4ee', '', 'LocalLM', 'chatglm3-6b', '3214321', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 10:59:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053960, 78094677378781184, '39c82479-b918-4ab3-8087-86d289efb9d7', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:00:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053961, 78094677378781184, '37b84771-ee80-4715-93f9-216561abe8de', '', 'LocalLM', 'chatglm3-6b', '43242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:00:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053962, 78094677378781184, '28e604f2-ad0b-478d-a7e3-95a465cbe5ca', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:01:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053963, 78094677378781184, '9343d7c4-8c2d-425a-9c06-ff884c3812ac', '', 'LocalLM', 'chatglm3-6b', '呃32432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:02:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053964, 78094677378781184, '53ae8ce9-4c45-4a93-b57d-fb86c05fb6ae', '', 'LocalLM', 'chatglm3-6b', '432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:07:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053966, 78095167005053965, 'dc7b6a4d-ba1f-4e48-801c-cbfaef112bcf', '', 'LocalLM', 'chatglm3-6b', '321', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:11:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053967, 78095167005053965, '83f499c1-fde3-415a-b1b3-a7f8e16ef0c5', '', 'LocalLM', 'chatglm3-6b', '423432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:19:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78095167005053968, 78095167005053965, '7702aa82-44b3-4961-9683-82258504d2d4', '', 'LocalLM', 'chatglm3-6b', '432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:19:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977729, 78105552235977728, 'b88627e3-9421-4d0e-aab6-e36f7578f588', '', 'LocalLM', 'chatglm3-6b', 'e32432423', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:33:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977730, 78105552235977728, '06d9909e-d055-469f-b093-d4aad60040bc', '', 'LocalLM', 'chatglm3-6b', '32132', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:55:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977731, 78105552235977728, '95920cca-e268-4df6-9ecb-bf651f2d45f1', '', 'LocalLM', 'chatglm3-6b', '5432542', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:56:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977733, 78105552235977732, '50ad05b6-3368-4702-bb1a-31c25894b9f0', '', 'LocalLM', 'chatglm3-6b', '43245325', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 11:59:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977734, 78105552235977732, 'bbb739eb-dcde-494a-987b-44ab6450b515', '', 'LocalLM', 'chatglm3-6b', 'uiuiu', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:37:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78105552235977735, 78105552235977732, '497c2847-db1c-4d46-acd8-047db52caaa9', '', 'LocalLM', 'chatglm3-6b', '就hi哦好急哦i😂', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:38:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369665, 78142798192369664, '0e45f721-1d76-4cef-b36e-d0e39c993c3c', '', 'LocalLM', 'chatglm3-6b', '432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:54:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369666, 78142798192369664, '2ebb28f7-7d0d-450d-87e4-2121a8fdb912', '', 'LocalLM', 'chatglm3-6b', '321321', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:55:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369667, 78142798192369664, '4253a118-6b65-4a0d-9598-48f4df4dd465', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:55:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369669, 78142798192369668, 'd81f2b1e-5a19-41c9-91db-65fb393483b4', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:56:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369670, 78142798192369668, '5f591c8f-f77c-4ac6-84ff-7091de6f48ad', '', 'LocalLM', 'chatglm3-6b', '321321', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:57:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369672, 78142798192369671, '74c4737f-578b-44a3-a810-5487c69717f3', '', 'LocalLM', 'chatglm3-6b', '3232', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 13:58:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369673, 78142798192369671, 'b9f9c32f-282b-4d72-937d-e6818c19ef8e', '', 'LocalLM', 'chatglm3-6b', '3242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:08:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369674, 78142798192369671, 'fe582b5a-22ce-430c-b9be-419205de0898', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:09:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369675, 78142798192369671, '10e77526-d3d0-4406-863d-18c203eca864', '', 'LocalLM', 'chatglm3-6b', '42342', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:10:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369676, 78142798192369671, '0dfdd92c-1fcb-4cd6-8731-aa068557eb42', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:10:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369677, 78142798192369671, '376e2645-cd32-43c2-a3c8-f90128546996', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:10:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369678, 78142798192369671, '1a0bfd02-08a6-4ce3-88b3-8f051ebdbc4f', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:14:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369679, 78142798192369671, 'b146d10e-2a12-4b5e-8582-478f4e746295', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:15:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369680, 78142798192369671, '84845062-353e-47bc-bbb5-42faec750cf7', '', 'LocalLM', 'chatglm3-6b', '432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:17:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369681, 78142798192369671, '3d83238b-a515-4e78-9a15-dc709cf84bf8', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:17:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369683, 78142798192369682, '3cb632e1-5424-42bc-a453-7b0b5f3e30dc', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:18:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369685, 78142798192369684, '28db7c8e-8671-473d-b423-60a7a1522a7a', '', 'LocalLM', 'chatglm3-6b', '231', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:18:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369686, 78142798192369671, '5b83a897-1457-44fb-b87e-83998668d91b', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:25:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369687, 78142798192369671, 'c446d3ac-6546-47dc-8211-4ade3b67f9cd', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:26:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369689, 78142798192369688, 'd010f6b1-e477-4313-b234-df5cd1ed1dd1', '', 'LocalLM', 'chatglm3-6b', '8979', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:35:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369690, 78142798192369688, '065f523e-1c79-44ce-987a-0b320af36908', '', 'LocalLM', 'chatglm3-6b', '3213', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:38:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369692, 78142798192369691, '2e0d23e2-a2d7-47b1-b8cc-f340ef4e5483', '', 'LocalLM', 'chatglm3-6b', '3234312', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:38:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369693, 78142798192369691, '0cf6bfdb-1a3e-4569-a7fc-2cd03d97fa2c', '', 'LocalLM', 'chatglm3-6b', '4532532', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:39:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369694, 78142798192369691, '03575174-7faf-43c5-884a-90f021c60b74', '', 'LocalLM', 'chatglm3-6b', 'chatNumber', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:40:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369695, 78142798192369691, '2211ba00-70e1-4f49-b6d5-e84509e66482', '', 'LocalLM', 'chatglm3-6b', '432242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:43:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369696, 78142798192369691, 'f69531a7-4fc5-46f7-88e3-aad796095611', '', 'LocalLM', 'chatglm3-6b', '32432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:43:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369697, 78142798192369691, 'fc588b75-baf8-4304-92e2-2a4d228b1c38', '', 'LocalLM', 'chatglm3-6b', '43242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:43:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369698, 78142798192369691, 'e1370b86-56bb-43a0-9aea-e302fe00aa22', '', 'LocalLM', 'chatglm3-6b', '4324324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:46:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369699, 78142798192369691, 'bec73330-2a0c-4f21-9fa9-62b8ccf6e152', '', 'LocalLM', 'chatglm3-6b', '43242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:51:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369700, 78142798192369691, '6e2f9537-4a42-42fe-a106-d7bbe564e3af', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:52:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369701, 78142798192369691, '4b9b024c-8ebe-4b5a-affc-c6f2ca2bb006', '', 'LocalLM', 'chatglm3-6b', '43242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:53:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369702, 78142798192369691, '21e4509c-ce1b-422b-a4e7-8e9d00b04130', '', 'LocalLM', 'chatglm3-6b', '53425', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:54:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369703, 78142798192369691, 'b07c31b3-5c9b-4d68-8d3a-f745a1329ffe', '', 'LocalLM', 'chatglm3-6b', '54353', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:55:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369704, 78142798192369691, '77042392-061d-45fb-9fa5-a56434bc94a5', '', 'LocalLM', 'chatglm3-6b', '432424', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:55:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369705, 78142798192369691, 'b45a9ff2-42d3-4536-b813-dd7b93659c7d', '', 'LocalLM', 'chatglm3-6b', '43242', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 14:59:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369707, 78142798192369706, '1eb550b7-3d7b-4765-b68f-cffccd5d88cf', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:01:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369709, 78142798192369708, 'f9343591-5774-4bb4-83bc-9c1decb55d1a', '', 'LocalLM', 'chatglm3-6b', 'e21321ew21', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:08:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369711, 78142798192369710, 'fecac0e7-43e8-4bd5-ad82-76d792780d78', '', 'LocalLM', 'chatglm3-6b', '543543', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:09:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369713, 78142798192369712, '2c797413-0213-42d8-86c9-7258abed252e', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:11:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369715, 78142798192369714, 'ae283262-563d-45d7-8463-2067d946e2af', '', 'LocalLM', 'chatglm3-6b', '765765', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:12:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78142798192369717, 78142798192369716, '208e80ff-fa6b-4e2c-84d9-e65f8c0839d6', '', 'LocalLM', 'chatglm3-6b', '2424', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 15:15:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542145, 78178759953542144, '6279b4e5-73f7-412d-826b-7df267ac1f50', '', 'LocalLM', 'chatglm3-6b', '5435435', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:14:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542146, 78178759953542144, 'df76bcc4-28c3-47f1-93ba-19977ff6d317', '', 'LocalLM', 'chatglm3-6b', '54353', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:14:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542147, 78178759953542144, 'bc8c51f1-56a7-49b4-97a8-c231fb9f76e3', '', 'LocalLM', 'chatglm3-6b', '32131', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:15:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542148, 78178759953542144, '33848c9b-57bd-49cc-8b30-8189f9a11f9c', '', 'LocalLM', 'chatglm3-6b', '2321321', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:15:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542149, 78178759953542144, '7b97daa5-6982-4e7c-a46c-95315f91c74c', '', 'LocalLM', 'chatglm3-6b', '54353', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:16:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542150, 78178759953542144, '0adaf892-be57-4fbf-9210-e1a58591f780', '', 'LocalLM', 'chatglm3-6b', '4324', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:16:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542151, 78178759953542144, 'bc232011-3029-4205-8f0e-35c48ae8f70c', '', 'LocalLM', 'chatglm3-6b', '5234543', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:17:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542152, 78178759953542144, '65d0c499-c9ce-4055-8a67-bea330442dfa', '', 'LocalLM', 'chatglm3-6b', '5453', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:17:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542153, 78178759953542144, '771e7161-61d7-42bd-8c44-8dfb9fab4c46', '', 'LocalLM', 'chatglm3-6b', '32432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:18:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78178759953542154, 78178759953542144, '806e9c9d-391d-44d7-a78d-62981bc7007d', '', 'LocalLM', 'chatglm3-6b', '432432', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:21:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862402, 78189355637862400, '4e9c6600-8a11-43e3-a7b4-3892c626e3d8', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:59:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862403, 78189355637862401, '421ac62c-b3e2-45dd-967e-f73bfa9554aa', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 16:59:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862405, 78189355637862404, '424d6d0d-84d8-4437-8ec7-e72c81f64795', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 17:00:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862408, 78189355637862407, 'b6e946c6-0eba-4384-9acc-099d32d47193', '', 'LocalLM', 'chatglm3-6b', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 17:03:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862410, 78189355637862409, 'b7ea10dd-be11-49dc-95e5-cb6c58d73cfc', '', 'LocalLM', 'chatglm3-6b', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 17:04:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862412, 78189355637862411, '91f35445-09fa-4885-be23-0a5d35d1635a', '', 'LocalLM', 'chatglm3-6b', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 17:04:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862414, 78189355637862413, 'f0f25289-957f-42cd-997d-f6df21c9d769', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:09:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862416, 78189355637862415, 'c81aa5a7-181e-420c-aeb3-2e204984121a', '', 'LocalLM', 'chatglm3-6b', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:15:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862418, 78189355637862417, '9d57b578-22d8-48b5-9ffd-6c72a1aaca29', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:16:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862421, 78189355637862420, '046518ed-c1df-4b6f-afa6-8625be83ac93', '', 'LocalLM', 'chatglm3-6b', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:24:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862423, 78189355637862422, 'b53d1aac-faa8-40b7-a397-336b927ee465', '', 'LocalLM', 'chatglm3-6b', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:25:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862425, 78189355637862424, '0761bbfa-a7ca-48b9-a877-4e3cc5469f0b', '', 'LocalLM', 'chatglm3-6b', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:26:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862427, 78189355637862426, '6bb5ed1d-14b8-4fb0-8f54-0528b9386944', '', 'LocalLM', 'chatglm3-6b', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:27:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862429, 78189355637862428, 'c1836a09-8a33-442d-af20-d7228636c064', '', 'LocalLM', 'chatglm3-6b', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:27:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78189355637862431, 78189355637862430, 'cf4735a7-6214-4382-a773-bb82e3b94f02', '', 'LocalLM', 'chatglm3-6b', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 19:27:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78229565121688577, 78229565121688576, '10964312-11d0-4380-91b1-3d66c74ce166', '', 'LocalLM', 'chatglm3-6b', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:30:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78229565121688579, 78229565121688578, 'de1548a2-914f-4570-8e78-dab68a66216f', '', 'LocalLM', 'chatglm3-6b', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:34:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78230643158480897, 78230643158480896, 'e10debf7-3abc-4e02-b5e8-613f0c4a5f18', '', 'LocalLM', 'chatglm3-6b', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:36:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78230643158480899, 78230643158480898, '4cb9869c-c249-47cf-8d4c-a49e6d925102', '', 'LocalLM', 'chatglm3-6b', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:37:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78230643158480902, 78230643158480901, '3f85add5-3366-4767-9e13-b7bd7f8cfbb4', '', 'LocalLM', 'chatglm3-6b', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:38:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78231635295927297, 78231635295927296, 'ee28fa74-f4b2-415f-8a6b-5d3de0624717', '', 'LocalLM', 'chatglm3-6b', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:39:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78231635295927300, 78231635295927299, '38f7a87a-b677-48ff-85a5-643d6e6c3439', '', 'LocalLM', 'chatglm3-6b', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:40:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78231635295927302, 78231635295927299, '3ce6ec32-1867-4e21-a796-765980f21a23', '', 'LocalLM', 'chatglm3-6b', '234234', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:49:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78234598823362560, 78231635295927299, '1d7c6cb9-0bf9-4f12-bb42-ec40c48ff09f', '', 'LocalLM', 'chatglm3-6b', '234', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 19:50:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78234598823362562, 78234598823362561, '5695685f-76d8-487c-8eb9-8a8419f1801a', '', 'LocalLM', 'chatglm3-6b', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 20:08:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78234598823362564, 78234598823362563, '80c6649f-2d88-4055-bec5-c87dbda220d8', '', 'LocalLM', 'moonshot-v1-8k', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 20:10:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78240195165752320, 78234598823362563, 'd0040cef-701a-49ef-90d7-13d282c652e0', '', 'LocalLM', 'moonshot-v1-8k', '23423', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 20:12:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78240195165752321, 78234598823362563, '7e75ae59-38d6-4265-8d40-a73d61080ff4', '', 'LocalLM', 'moonshot-v1-8k', '1', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 20:13:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78240195165752322, 78234598823362563, 'faefa460-f3f3-4994-ba5b-610ff82ce619', '', 'LocalLM', 'moonshot-v1-8k', '123', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-06 20:14:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78240195165752323, 78234598823362563, 'ba146aeb-dbcf-4126-b2f7-1b23f9db6674', '', 'LocalLM', 'moonshot-v1-8k', '123', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:16:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243085678744576, 78234598823362563, '874eaa65-1b76-4959-87cd-e3a772463b63', '', 'LocalLM', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:23:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243085678744577, 78234598823362563, '343c3a73-03ac-4c5c-b374-012fb26c6275', '', 'LocalLM', 'moonshot-v1-8k', '123', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:24:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243085678744578, 78234598823362563, '78fe3d2c-db1d-41fd-ae64-84273211f849', '', 'LocalLM', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:24:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243085678744579, 78234598823362563, 'deb31c30-3615-457f-81bc-d1eecab37898', '', 'LocalLM', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:24:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741888, 78234598823362563, 'bd4a753c-f1a5-4059-b1f2-ae415ea25471', '', 'LocalLM', 'moonshot-v1-8k', '541', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:26:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741889, 78234598823362563, 'd4cf7384-e183-41e4-9e04-3452379dc8a0', '', 'Moonshot', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:28:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741890, 78234598823362563, 'chatcmpl-67c994e6c2ca4310a67f7df3', 'd4cf7384-e183-41e4-9e04-3452379dc8a0', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"234\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-06 20:28:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741891, 78234598823362563, '142fb9b1-32a6-47a5-9bda-2af881503758', '', 'Moonshot', 'moonshot-v1-8k', '你是什么模型?', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:29:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741892, 78234598823362563, 'chatcmpl-67c99521c2ca4310a67f800b', '142fb9b1-32a6-47a5-9bda-2af881503758', 'Moonshot', 'moonshot-v1-8k', '您好!我是 Moonshot AI 开发的人工智能助手,擅长中英文对话。有什么可以帮您的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-06 20:29:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741894, 78243742808741893, '2e9f663d-e11e-4364-9c1d-6213c1478a29', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-06 20:53:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741896, 78243742808741895, 'f80a6662-fd29-4d40-9c9f-40620cb5bc43', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:54:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741897, 78243742808741895, 'chatcmpl-67c99af7f856367ab0daf9ef', 'f80a6662-fd29-4d40-9c9f-40620cb5bc43', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度来分析你男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,无法及时回复消息。\n\n2. **沟通习惯**:\n - 有些人不习惯频繁查看手机,或者不喜欢即时通讯。\n\n3. **情感状态**:\n - 他可能心情不好,不想与人交流,或者你们之间可能存在一些未解决的问题。\n\n4. **技术问题**:\n - 手机或网络问题可能导致消息延迟。\n\n5. **个人空间需求**:\n - 有些人需要更多的个人空间和时间,可能不会立即回复。\n\n6. **关系变化**:\n - 如果这种行为是新出现的,可能表明他对这段关系的态度有所变化。\n\n### 合理建议和解决方法:\n\n1. **沟通**:\n - 找一个合适的时机,以非指责的方式表达你的感受和担忧。询问他是否有什么困扰或者是否需要帮助。\n\n2. **理解**:\n - 尝试理解他的工作和生活压力,给予他一定的空间和时间。\n\n3. **设定期望**:\n - 讨论并设定双方都能接受的沟通频率和方式。\n\n4. **共同活动**:\n - 增加面对面的交流和共同活动,减少对即时通讯的依赖。\n\n5. **自我反思**:\n - 检查自己是否过于依赖即时通讯,或者是否对他的回复有过高的期望。\n\n6. **技术支持**:\n - 如果是技术问题,帮助他解决或者建议他检查手机设置。\n\n7. **情感支持**:\n - 如果他心情不好,提供情感支持,让他知道你在乎他的感受。\n\n8. **专业帮助**:\n - 如果你们的关系出现了问题,考虑寻求情感咨询师的帮助。\n\n9. **调整期望**:\n - 认识到不是每个人都能或愿意即时回复消息,调整自己的期望。\n\n10. **信任**:\n - 建立信任,相信他不回消息并不是不在乎你。\n\n记住,每个人的沟通方式和需求都是不同的,重要的是找到适合你们两个人的沟通方式。通过开放和诚实的对话,你们可以更好地理解彼此,并找到解决问题的方法。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-06 20:54:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741898, 78243742808741895, '4bf4f303-6ca2-46cc-8e82-ac592f03d9de', '', 'Moonshot', 'moonshot-v1-8k', '三国演义里面有哪些人物,列举20个', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-06 20:54:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78243742808741899, 78243742808741895, 'chatcmpl-67c99b10f6c1fa20406eca1d', '4bf4f303-6ca2-46cc-8e82-ac592f03d9de', 'Moonshot', 'moonshot-v1-8k', '《三国演义》是中国古典四大名著之一,由明代小说家罗贯中创作,讲述了东汉末年到西晋初年之间的历史故事。以下是20个《三国演义》中的主要人物:\n\n1. 刘备 - 蜀汉的开国皇帝,以仁德著称。\n2. 曹操 - 魏国的奠基人,政治家、军事家、文学家。\n3. 孙权 - 吴国的开国皇帝,继承父兄基业,巩固江东。\n4. 关羽 - 刘备的义弟,蜀汉五虎上将之一,以忠义勇猛著称。\n5. 张飞 - 刘备的义弟,蜀汉五虎上将之一,性格豪迈。\n6. 诸葛亮 - 蜀汉丞相,以智谋著称,被誉为“卧龙”。\n7. 赵云 - 蜀汉五虎上将之一,勇猛忠诚。\n8. 马超 - 蜀汉五虎上将之一,西凉名将。\n9. 黄忠 - 蜀汉五虎上将之一,老当益壮。\n10. 吕布 - 以勇猛著称的武将,曾为董卓、王允等人效力。\n11. 貂蝉 - 王允的养女,以美貌和智谋协助王允除掉董卓。\n12. 周瑜 - 吴国名将,赤壁之战的主要指挥者。\n13. 黄盖 - 吴国将领,赤壁之战中以苦肉计骗过曹操。\n14. 陆逊 - 吴国名将,夷陵之战中大败刘备。\n15. 司马懿 - 魏国名将,后成为晋朝的奠基人。\n16. 张辽 - 魏国名将,以勇猛著称。\n17. 许褚 - 曹操的贴身护卫,勇猛忠诚。\n18. 典韦 - 曹操的护卫,以力大无穷著称。\n19. 郭嘉 - 曹操的谋士,以智谋著称。\n20. 庞统 - 蜀汉谋士,与诸葛亮并称“卧龙凤雏”。\n\n这些人物在《三国演义》中扮演了重要的角色,他们的故事构成了这部史诗般的历史小说的核心内容。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-06 20:54:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78450876196538369, 78450876196538368, '6d8442f4-d18e-414e-823c-3a61a4b80a64', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 09:56:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78450876196538370, 78450876196538368, 'chatcmpl-67ca524df6c1fa2040725ca4', '6d8442f4-d18e-414e-823c-3a61a4b80a64', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n亲爱的家人与朋友们,\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同步入一个浪漫的田园梦境。在这片被爱与祝福包围的土地上,我们将步入携手婚姻的殿堂。\n\n新郎:【新郎名字】\n新娘:【新娘名字】\n\n我们的幸福时刻定于:\n【婚礼日期】\n在这片绿意盎然的田园中,我们将与您共同见证爱情最美的模样。\n\n婚礼地点:\n【详细地址】\n【如果需要,可以附上地图或导航信息】\n\nRSVP详情:\n为了确保我们能为您准备最完美的婚礼体验,请在【RSVP截止日期】前通过以下方式告知您的出席意向:\n- 电话:【联系电话】\n- 邮箱:【联系邮箱】\n- 或者通过我们的婚礼网站:【婚礼网站链接】\n\n我们期待着在这个特别的日子里,与您共同分享我们的快乐与感动。请携带您最灿烂的笑容,与我们一同在这片田园中,编织一段永恒的回忆。\n\n爱与期待,\n【新郎名字】 & 【新娘名字】\n\n---\n\n请根据您的具体需求调整上述文案,以确保所有信息的准确性和个性化。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 09:56:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500934, 78456528373500933, '1e6cd57a-967e-41cf-8a42-711b2b7bd3a7', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 10:50:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500935, 78456528373500933, '6866a43f-cda8-45a6-93e0-cdf46dec9607', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 10:50:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500936, 78456528373500933, 'chatcmpl-67ca5ee5f6c1fa204072ca8b', '6866a43f-cda8-45a6-93e0-cdf46dec9607', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n亲爱的家人与朋友们,\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您加入我们,共同见证爱情在田园间绽放的美妙时刻。我们,[新郎姓名]与[新娘姓名],将在[婚礼日期]这一天,携手步入婚姻的殿堂,开启我们共同的人生旅程。\n\n婚礼主题:浪漫田园\n\n日期:[婚礼具体日期]\n时间:[婚礼开始时间]\n\n地点:[婚礼具体地点]\n地址:[详细地址]\n\n我们将在[具体地点名称]的田园风光中,举办一场温馨而浪漫的婚礼。想象一下,阳光透过树叶的缝隙,洒在绿意盎然的草地上,鲜花与藤蔓交织,营造出一个如诗如画的田园梦境。我们希望这场婚礼不仅是我们爱情的见证,也是我们与您共同分享喜悦与祝福的聚会。\n\n为了确保我们能够为您准备最完美的体验,请在[RSVP截止日期]前,通过以下方式告知我们您的出席意向:\n\nRSVP联系人:[联系人姓名]\n电话:[联系人电话]\n邮箱:[联系人邮箱]\n\n我们期待着在这个特别的日子里,与您一同感受大自然的恩赐,分享我们的幸福与喜悦。请带上您最灿烂的笑容,与我们共度这个难忘的田园婚礼。\n\n爱与期待,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述文案中的细节,以确保请柬的个性化和准确性。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 10:50:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500938, 78456528373500937, '84ae7891-a6c0-431d-82f1-4f1350c5147d', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 10:51:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500940, 78456528373500939, 'bed2cd51-682f-40fa-8c28-4cfd94d59b8c', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 10:51:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500941, 78456528373500939, 'chatcmpl-67ca5f251e1b9800b87692c8', 'bed2cd51-682f-40fa-8c28-4cfd94d59b8c', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n1. 增强儿童对自然环境的好奇心和探索欲。\n2. 通过观察和互动,提高儿童的观察力和认知能力。\n3. 培养儿童的团队合作精神和社交技能。\n4. 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n1. 选择一个安全的户外场地,如公园、植物园或自然保护区。\n2. 准备一些自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n3. 准备一些简单的自然知识卡片,上面写有关于植物、昆虫等的基本信息。\n4. 准备一些安全的小零食和水,以备活动中补充能量。\n\n活动流程:\n1. 集合与介绍(10分钟)\n - 集合所有参与的儿童和家长。\n - 简短介绍活动目的和流程。\n - 分配自然探索工具给每个儿童。\n\n2. 自然观察(20分钟)\n - 引导儿童观察周围的自然环境,如树木、花草、昆虫等。\n - 鼓励儿童使用放大镜仔细观察,并记录下他们的发现。\n - 家长可以辅助儿童,一起讨论和识别观察到的自然元素。\n\n3. 收集自然宝藏(15分钟)\n - 让儿童在家长的陪同下,收集一些自然物品,如不同形状的树叶、小石头、花瓣等。\n - 引导儿童思考这些物品的特点和用途。\n\n4. 自然知识小竞赛(10分钟)\n - 将儿童分成小组,进行自然知识小竞赛。\n - 展示自然知识卡片,让儿童竞猜卡片上的内容。\n - 鼓励儿童分享他们的观察和收集到的自然宝藏。\n\n5. 创作自然艺术(15分钟)\n - 提供彩色笔和纸张,让儿童创作一幅以自然为主题的画作。\n - 鼓励儿童将收集到的自然物品融入他们的艺术作品中。\n\n6. 分享与总结(10分钟)\n - 让每个儿童展示他们的自然艺术作品,并分享他们的探索经历。\n - 总结活动,强调自然探索的乐趣和学习的价值。\n\n活动结束后,可以鼓励家长和儿童一起将收集的自然物品带回家,继续探索和学习。这样的活动不仅能够增添趣味,还能在轻松愉快的氛围中教育儿童,让他们在自然中学习和成长。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 10:51:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500944, 78456528373500943, 'c748bc9e-3f32-4d81-8393-6e125da370fc', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 10:53:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500945, 78456528373500943, 'chatcmpl-67ca5f6fd44f088c134f28a3', 'c748bc9e-3f32-4d81-8393-6e125da370fc', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(2)\n \n username_input = self.driver.find_element(By.ID, \'loginname\')\n password_input = self.driver.find_element(By.ID, \'nloginpwd\')\n login_button = self.driver.find_element(By.ID, \'loginsubmit\')\n \n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n login_button.click()\n time.sleep(2)\n\n def navigate_to_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(2)\n\n def buy_product(self):\n buy_button = WebDriverWait(self.driver, 10).until(\n EC.element_to_be_clickable((By.XPATH, \'//button[@class=\"buy-button\"]\'))\n )\n buy_button.click()\n time.sleep(2)\n\n def close_browser(self):\n self.driver.quit()\n\n def run(self):\n while True:\n current_time = time.strftime(\'%Y-%m-%d %H:%M:%S\', time.localtime(time.time()))\n if current_time >= self.buy_time:\n self.login()\n self.navigate_to_product()\n self.buy_product()\n self.close_browser()\n break\n else:\n time.sleep(60)\n\nif __name__ == \'__main__\':\n username = \'your_username\'\n password = \'your_password\'\n target_url = \'https://www.example.com/login\'\n target_product_url = \'https://www.example.com/product\'\n buy_time = \'2023-11-11 00:00:00\'\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:封装了自动登录、导航到商品页面、购买商品和关闭浏览器的方法。\n2. `__init__` 方法:初始化类的实例,包括用户名、密码、目标URL、商品URL和购买时间。\n3. `login` 方法:自动登录购物网站。\n4. `navigate_to_product` 方法:导航到预设商品的页面。\n5. `buy_product` 方法:点击购买按钮,完成购买操作。\n6. `close_browser` 方法:关闭浏览器。\n7. `run` 方法:循环检查当前时间,当达到购买时间时,执行登录、导航和购买操作。\n\n请根据你的实际需求,替换脚本中的用户名、密码、目标URL和商品URL。希望这个脚本能帮助你在双十一当天自动抢购心仪的商品!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 10:52:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500947, 78456528373500946, '6af34810-03aa-4623-bf23-3f9d3223bc65', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:11:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78456528373500948, 78456528373500946, 'chatcmpl-67ca63d4f4060e09115bd384', '6af34810-03aa-4623-bf23-3f9d3223bc65', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外自然环境,如公园、植物园或自然保护区。\n- 准备一些简单的自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些自然观察卡片,上面有不同植物、昆虫和动物的图片和名称。\n- 准备一些安全的教育玩具,如昆虫观察盒、植物标本制作工具等。\n- 准备一些简单的自然知识小册子,供家长和儿童参考。\n\n活动流程:\n1. 集合与介绍(10分钟)\n - 集合所有参与的儿童和家长,进行简短的介绍和安全须知说明。\n - 分配自然探索工具给每个儿童。\n\n2. 自然观察游戏(20分钟)\n - 将儿童分成小组,每组由一名家长陪同。\n - 给每个小组发放自然观察卡片,让他们在自然环境中寻找卡片上的植物、昆虫或动物。\n - 鼓励儿童使用放大镜仔细观察,并记录下他们的发现。\n\n3. 自然艺术创作(15分钟)\n - 让儿童收集一些自然材料,如树叶、花瓣、小石头等。\n - 指导儿童使用这些材料创作自然艺术作品,如树叶拼贴画或石头彩绘。\n\n4. 自然知识小课堂(10分钟)\n - 利用自然知识小册子,向儿童介绍他们观察到的植物、昆虫和动物的基本特性和生态作用。\n - 通过互动问答,增加儿童的学习兴趣。\n\n5. 分享与总结(5分钟)\n - 让每个小组分享他们的发现和艺术作品。\n - 对儿童的探索精神和创造力给予表扬和鼓励。\n\n6. 清理与告别(10分钟)\n - 指导儿童和家长一起清理活动现场,培养环保意识。\n - 进行活动总结,感谢参与,并告别。\n\n安全须知:\n- 确保活动区域安全,避免有危险的地方。\n- 家长需全程陪同儿童,确保儿童的安全。\n- 准备急救包,以防不时之需。\n- 避免儿童接触有毒植物或昆虫。\n\n通过这样的活动,4-6岁的儿童不仅能够在自然中获得乐趣,还能学习到关于自然的知识,同时培养他们的观察力、创造力和团队合作能力。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:11:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354881, 78473489199354880, '91386a7b-78d0-47eb-9dc5-01628db4e1e0', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:20:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354882, 78473489199354880, 'chatcmpl-67ca65d8b008d8dad1dc6a00', '91386a7b-78d0-47eb-9dc5-01628db4e1e0', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我不能直接为您绘制图像,但我可以为您提供一个详细的描述,您可以根据这个描述来绘制这个画面。\n\n1. 首先,我们需要确定画面的背景。由于这是纽约的夜景,我们可以在画面的底部绘制一些著名的纽约建筑,如帝国大厦、克莱斯勒大厦和自由女神像。这些建筑的灯光应该闪烁,以营造出夜晚的氛围。\n\n2. 接下来,我们需要在画面的中心位置绘制钢铁侠。他应该穿着他的标志性战衣,双手展开,仿佛正在飞行。他的战衣应该发出微弱的光芒,以突出他的存在。\n\n3. 为了增加画面的深度感,我们可以在钢铁侠的前方和后方添加一些较小的建筑。这些建筑的灯光也应该闪烁,以保持画面的一致性。\n\n4. 画面的顶部应该是纽约的夜空。我们可以在天空中添加一些星星和月亮,以增加画面的美感。\n\n5. 最后,我们需要确定画面的视角。由于这是一个全景构图,平视视角,我们可以将画面的视角设置在地面上,让观众仿佛站在纽约的街道上,仰望着钢铁侠在夜空中飞行。\n\n希望这个描述能帮助您绘制出这个画面。如果您需要更多的建议或细节,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:20:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354884, 78473489199354883, '5d531a01-8cac-470f-a919-8ff29006b4da', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:21:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354885, 78473489199354883, 'chatcmpl-67ca6619b008d8dad1dc6c4d', '5d531a01-8cac-470f-a919-8ff29006b4da', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个花开的季节,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[具体地点名称]\n[详细地址]\n[城市,邮编]\n\n**仪式时间:**\n[仪式开始时间]\n\n**田园晚宴:**\n[晚宴开始时间]\n\n在这片被绿意环绕的田园中,我们将交换誓言,许下终身的承诺。我们希望您能与我们共度这个特别的日子,分享我们的喜悦与祝福。\n\n**RSVP详情:**\n请在[RSVP截止日期]前,通过以下方式告知我们您的出席意向:\n\n电话:[联系电话]\n邮箱:[联系邮箱]\n或直接回复此邀请函。\n\n我们期待着在这个浪漫田园中与您相聚,共同庆祝我们的爱情故事。\n\n以爱之名,\n\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述模板中的内容,以确保所有信息的准确性和个性化。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:21:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354889, 78473489199354888, 'c6e3beec-8bfd-4331-8ced-afef24722290', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:23:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354890, 78473489199354888, 'chatcmpl-67ca6697e686a99b0a718621', 'c6e3beec-8bfd-4331-8ced-afef24722290', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[新人名字]的浪漫田园婚礼邀请**\n\n亲爱的 [收件人姓名],\n\n在这个花开的季节,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新郎:[新郎姓名]**\n**新娘:[新娘姓名]**\n\n我们将于\n**[婚礼日期]**\n在\n**[婚礼地点]**\n举行我们的婚礼仪式。\n\n仪式结束后,我们将在\n**[晚宴地点]**\n举办晚宴,与您共享这个特别的夜晚。\n\n请在\n**[RSVP截止日期]**\n前通过以下方式告知我们您的出席:\n**[RSVP联系方式]**\n\n我们期待着在这个充满爱与温馨的田园中,与您共同庆祝我们的爱情故事。\n\n**[新郎姓名] & [新娘姓名]**\n\n---\n\n请根据您的具体需求调整上述模板中的内容。如果您需要进一步个性化或有其他特殊要求,请告知,我将很乐意帮助您完善这份请柬。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:23:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354892, 78473489199354891, 'da4ff569-5131-4a2a-9215-6bebacdb16cb', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:24:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354893, 78473489199354891, 'chatcmpl-67ca66e7b008d8dad1dc746a', 'da4ff569-5131-4a2a-9215-6bebacdb16cb', 'Moonshot', 'moonshot-v1-8k', '标题:都市丽人的清晨仪式:唤醒肌肤的自然之光\n\n正文:\n\n在繁忙的都市生活中,每一位女性都渴望拥有一份属于自己的宁静时光。清晨,当第一缕阳光透过窗帘,轻轻地拂过脸颊,我们开始了一场与自我对话的仪式。这不仅仅是一次简单的清洁,而是一次肌肤与心灵的深层交流。\n\n小雅,一位30岁的都市白领,每天的开始都是从她的专属清晨仪式开始。她相信,一个好的开始是成功的一半,而她的肌肤护理,就是她自信的源泉。\n\n“我一直在寻找一款能够真正理解我肌肤需求的洗面奶,”小雅分享道,“直到我遇到了[X品牌洗面奶],它不仅清洁力强,而且温和不刺激,让我的肌肤在忙碌的一天中保持清新和舒适。”\n\n[X品牌洗面奶]的秘密在于其独特的配方,它富含天然植物精华,能够深入毛孔,有效去除油脂和污垢,同时保持肌肤的水油平衡。这款洗面奶的pH值接近肌肤自然酸碱度,这意味着它在清洁的同时,不会破坏肌肤的天然屏障,让肌肤保持健康状态。\n\n小雅的肌肤属于混合型,T区容易出油,而两颊又偏干。[X品牌洗面奶]的温和配方让她在清洁的同时,不会感到紧绷或干燥。“每次洗完脸,我都能感受到肌肤的柔软和光滑,”她说,“它让我的肌肤看起来更加明亮,也为我的妆容打下了完美的基础。”\n\n不仅如此,[X品牌洗面奶]的泡沫细腻丰富,能够轻松覆盖全脸,即使是最顽固的彩妆也能轻松卸除。小雅说:“我再也不需要使用额外的卸妆产品,[X品牌洗面奶]让我的护肤步骤变得更加简单高效。”\n\n随着时间的推移,小雅发现她的肌肤变得更加健康,毛孔更加细腻,肤色也更加均匀。“[X品牌洗面奶]让我的肌肤焕发自然光彩,让我在忙碌的都市生活中,也能保持最佳状态。”\n\n在这个快节奏的世界里,让我们都像小雅一样,给自己一个温柔的早晨仪式,用[X品牌洗面奶]唤醒肌肤的自然之光,迎接每一个充满活力的新开始。\n\n结语:\n\n在都市的喧嚣中,找到一份属于自己的宁静,让[X品牌洗面奶]成为你肌肤护理的贴心伴侣。让我们一起迎接更加明亮、健康的肌肤,让每一天都充满自信和光彩。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:24:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354895, 78473489199354894, '7b55aebe-2d58-4d51-b81d-b31dc9188148', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 11:35:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78473489199354896, 78473489199354894, 'chatcmpl-67ca6963e686a99b0a7196d9', '7b55aebe-2d58-4d51-b81d-b31dc9188148', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个花开的季节,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[婚礼地点名称]\n[详细地址]\n[城市,邮编]\n\n**仪式时间:**\n[仪式开始时间]\n\n**田园晚宴:**\n[晚宴开始时间]\n\n在这片被自然拥抱的田园中,我们将许下永恒的誓言,与您共享这份甜蜜与喜悦。我们期待您的到来,与我们一同感受这份浪漫与温馨。\n\n**RSVP详情:**\n请在[RSVP截止日期]前,通过以下方式确认您的出席:\n电话:[联系电话]\n邮箱:[联系邮箱]\n或直接回复此邀请函。\n\n我们期待着在[婚礼日期]与您相聚,共同庆祝这个特别的日子。\n\n以爱之名,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述模板中的内容,以确保所有信息的准确性和个性化。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 11:35:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597505, 78511280616597504, '16b8ce1d-cfbf-4d28-a98a-9c3a38a8f042', '', 'Moonshot', 'moonshot-v1-8k', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:45:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597506, 78511280616597504, 'chatcmpl-67ca87d7e686a99b0a720fb0', '16b8ce1d-cfbf-4d28-a98a-9c3a38a8f042', 'Moonshot', 'moonshot-v1-8k', '为了在一个月内高效复习线性代数并达到95分的目标,你需要一个详细的复习计划。以下是一个可能的复习计划,包括每周和每天的具体任务,以及整个月的复习排期表。\n\n### 复习目标:\n- 线性代数:95分\n- 掌握所有线性代数的基本概念、定理、公式和解题技巧。\n\n### 知识点概览:\n1. 向量空间\n2. 线性变换\n3. 矩阵理论\n4. 特征值和特征向量\n5. 二次型\n6. 线性方程组\n7. 欧几里得空间\n8. 正交性和最小二乘法\n9. 线性代数的应用\n\n### 复习排期表:\n\n#### 第1周:基础概念和向量空间\n- **周一至周五:**\n - 每天复习1小时,重点理解向量空间的定义、性质和例子。\n - 完成相关习题,确保理解每个概念。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套基础概念的模拟题。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第2周:线性变换和矩阵理论\n- **周一至周五:**\n - 每天复习1小时,学习线性变换的定义、性质和矩阵表示。\n - 完成相关习题,特别是矩阵运算。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套线性变换和矩阵理论的模拟题。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第3周:特征值、特征向量和二次型\n- **周一至周五:**\n - 每天复习1小时,深入理解特征值和特征向量的概念,以及二次型的性质。\n - 完成相关习题,特别是特征值和特征向量的计算。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套特征值、特征向量和二次型的模拟题。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第4周:线性方程组和欧几里得空间\n- **周一至周五:**\n - 每天复习1小时,学习线性方程组的解法,包括高斯消元法和矩阵分解。\n - 完成相关习题,特别是解线性方程组。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套线性方程组和欧几里得空间的模拟题。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第5周:正交性和最小二乘法\n- **周一至周五:**\n - 每天复习1小时,学习正交性和最小二乘法的概念和应用。\n - 完成相关习题,特别是正交投影和最小二乘问题的求解。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套正交性和最小二乘法的模拟题。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第6周:综合复习和模拟考试\n- **周一至周五:**\n - 每天复习1小时,综合复习所有知识点,查漏补缺。\n - 每天做一套模拟题,模拟考试环境。\n- **周六:**\n - 做一套完整的模拟考试,计时并自我评分。\n - 根据模拟考试结果,针对性复习。\n- **周日:**\n - 休息或轻松复习,整理笔记,准备考试。\n\n### 每日复习策略:\n- **开始:** 回顾前一天的学习内容,确保记忆牢固。\n- **中间:** 专注于新知识点的学习,做笔记,理解概念。\n- **结束:** 完成当天的习题,复习当天的学习内容。\n\n### 注意事项:\n- 保持每天1小时的专注复习,避免分心。\n- 定期检查进度,根据实际情况调整计划。\n- 保持健康的作息,确保有足够的休息。\n- 与同学讨论难题,或寻求老师的帮助。\n\n通过遵循这个计划,你可以系统地复习线性代数,并为考试做好充分的准备。祝你考试成功!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:45:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597508, 78511280616597507, 'a08c0888-d8d3-4b0d-87ad-c353ea3ef3ae', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:46:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597509, 78511280616597507, 'chatcmpl-67ca8821f4060e09115c8f96', 'a08c0888-d8d3-4b0d-87ad-c353ea3ef3ae', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度来分析你男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,没有足够的时间及时回复消息。\n\n2. **沟通习惯**:\n - 有些人不习惯频繁地查看手机或即时回复消息,这可能是他个人的习惯。\n\n3. **情感状态**:\n - 他可能因为某些原因感到压力或情绪低落,这影响了他回复消息的速度。\n\n4. **技术问题**:\n - 手机或网络问题可能导致消息延迟或未能及时送达。\n\n5. **关系动态**:\n - 你们的关系可能正在经历一些变化,这可能影响了他的沟通方式。\n\n6. **兴趣和关注度**:\n - 他可能对当前的对话内容不感兴趣,或者觉得不需要立即回复。\n\n### 合理的建议和解决方法:\n\n1. **沟通和理解**:\n - 找一个合适的时间,以平和的方式表达你的感受和担忧,了解他回消息慢的原因。\n\n2. **设定期望**:\n - 讨论并设定双方都能接受的沟通频率和时间,以减少误解。\n\n3. **给予空间**:\n - 如果他确实很忙,给予他一些空间和时间,同时保持适度的关心。\n\n4. **共同活动**:\n - 增加面对面的交流和共同活动,减少对即时消息的依赖。\n\n5. **技术检查**:\n - 确认双方的设备和网络状况良好,以排除技术问题。\n\n6. **情感支持**:\n - 如果他情绪低落,提供情感支持和倾听,帮助他度过难关。\n\n7. **调整期望**:\n - 理解并接受每个人都有不同的沟通风格和习惯,调整你的期望以适应他的方式。\n\n8. **自我反思**:\n - 反思自己是否对即时回复有过高的期望,学会在没有即时回复时保持耐心。\n\n9. **信任建立**:\n - 通过共同的经历和时间来建立信任,减少因回复慢而产生的不安全感。\n\n10. **寻求专业帮助**:\n - 如果这个问题严重影响了你们的关系,考虑寻求情感咨询师的帮助。\n\n记住,每个人的沟通方式都是独特的,理解和适应对方的方式是建立健康关系的关键。通过开放和诚实的沟通,你们可以找到适合双方的解决方案。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:46:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597511, 78511280616597510, '62ab64ec-201d-475f-ab67-0b37b9286887', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:47:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597513, 78511280616597512, '226e87e3-c128-4f30-b493-df813abe1fc1', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 13:47:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597514, 78511280616597510, 'chatcmpl-67ca8842f4060e09115c90c8', '62ab64ec-201d-475f-ab67-0b37b9286887', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个双十一自动抢购脚本。以下是使用Python和selenium库实现的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3)\n \n username_input = self.driver.find_element(By.ID, \'loginname\')\n password_input = self.driver.find_element(By.ID, \'nloginpwd\')\n login_button = self.driver.find_element(By.ID, \'loginsubmit\')\n \n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n login_button.click()\n time.sleep(3)\n\n def navigate_to_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3)\n \n buy_button = self.driver.find_element(By.ID, \'submitOrder\')\n return buy_button\n\n def buy_product(self):\n buy_button = self.navigate_to_product()\n buy_button.click()\n time.sleep(3)\n \n confirm_button = self.driver.find_element(By.ID, \'J_Go\')\n confirm_button.click()\n time.sleep(3)\n \n print(\"Product bought successfully!\")\n\n def run(self):\n self.login()\n while True:\n current_time = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n if current_time >= self.buy_time:\n self.buy_product()\n break\n time.sleep(60)\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = \"2023-11-11 00:00:00\"\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n代码说明:\n1. `AutoBuyer` 类包含登录、导航到商品页面、购买商品和运行抢购的方法。\n2. `__init__` 方法初始化类的属性,包括用户名、密码、目标URL、商品URL和抢购时间。\n3. `login` 方法使用selenium登录购物网站。\n4. `navigate_to_product` 方法导航到预设商品页面,并返回购买按钮元素。\n5. `buy_product` 方法点击购买按钮,然后点击确认按钮完成购买。\n6. `run` 方法登录网站,然后循环检查当前时间是否达到抢购时间,如果达到则执行购买操作。\n7. 在 `if __name__ == \"__main__\":` 部分,设置用户名、密码、目标URL、商品URL和抢购时间,然后创建 `AutoBuyer` 实例并运行抢购脚本。\n\n请根据你的实际需求修改用户名、密码、目标URL、商品URL和抢购时间。希望这个脚本能帮助你成功抢购双十一商品!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:47:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597516, 78511280616597515, 'c4181336-fea2-496e-938c-32530df39142', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:53:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597517, 78511280616597515, 'chatcmpl-67ca89c5f856367ab0df4ab5', 'c4181336-fea2-496e-938c-32530df39142', 'Moonshot', 'moonshot-v1-8k', '标题:都市丽人的清晨仪式:唤醒肌肤的自然之光\n\n正文:\n\n在这个快节奏的都市生活中,每一位女性都在寻找属于自己的那份宁静与优雅。清晨,当第一缕阳光透过窗帘,轻轻地拂过脸颊,我们开始了新的一天。而对于20-35岁的都市女性来说,这个时刻不仅仅是一天的开始,更是一场与自己肌肤的私密对话。\n\n小雅,一位典型的都市白领,每天的生活就像是一场精心编排的舞蹈。她穿梭在高楼大厦之间,面对着电脑屏幕的蓝光,肌肤承受着无形的压力。然而,无论多忙,她都会在清晨给自己一个特别的仪式——使用[X品牌洗面奶],让肌肤在忙碌的一天开始前,得到最温柔的呵护。\n\n[X品牌洗面奶],以其独特的配方,成为了小雅每日护肤不可或缺的一部分。它含有的天然植物精华,能够深层清洁肌肤,同时保持肌肤的水油平衡。小雅说:“每次使用后,我都能感受到肌肤的清新与舒适,仿佛所有的疲惫都被一扫而空。”\n\n这款洗面奶的泡沫细腻而丰富,能够轻松带走肌肤表面的污垢和油脂,却不带走肌肤所需的水分。小雅分享了她的使用体验:“它的泡沫非常温和,即使是敏感肌肤也可以放心使用。每次洗脸后,我都觉得自己的肌肤变得更加柔软和光滑。”\n\n不仅如此,[X品牌洗面奶]还特别添加了抗氧化成分,帮助肌肤抵御外界环境的侵害,保持肌肤的年轻活力。小雅的肌肤因此变得更加有弹性,光彩照人。她说:“自从开始使用[X品牌洗面奶],我发现自己的笑容更加自信,每一天都充满了活力。”\n\n在这个忙碌的世界里,[X品牌洗面奶]成为了小雅和许多都市女性的秘密武器。它不仅仅是一款洗面奶,更是一种生活态度的体现——在忙碌中寻找平衡,在压力中保持优雅。每一天的清晨,都是一个新的开始,而[X品牌洗面奶],就是这个开始的守护者。\n\n结语:\n\n在这个充满挑战的都市生活中,让我们像小雅一样,给自己一个温柔的开始。选择[X品牌洗面奶],让肌肤在每一天的清晨,都能感受到自然的呵护和关爱。让我们一起迎接新的一天,以最美的姿态,绽放属于自己的光彩。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:53:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597519, 78511280616597518, '40d5fe1a-139c-4da2-9d01-4d9cf3a1b91c', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:53:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597520, 78511280616597518, 'chatcmpl-67ca89dc87f833355ad3075a', '40d5fe1a-139c-4da2-9d01-4d9cf3a1b91c', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外场地,如公园、植物园或自然保护区。\n- 准备一些自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些简单的自然知识卡片,上面写有动植物的名字和特点。\n- 准备一些安全的小零食和水,供孩子们在活动中补充能量。\n\n活动流程:\n\n1. 集合与介绍(10分钟)\n - 让孩子们围成一个圈,进行自我介绍。\n - 简要介绍活动的目的和规则。\n\n2. 自然寻宝游戏(20分钟)\n - 将孩子们分成小组,每组分发一张自然知识卡片和收集盒。\n - 指导孩子们根据卡片上的描述,在自然环境中寻找相应的动植物。\n - 鼓励孩子们使用放大镜仔细观察,并记录下他们的发现。\n\n3. 自然艺术创作(15分钟)\n - 让孩子们收集一些自然材料,如树叶、花瓣、小石头等。\n - 指导孩子们使用这些材料创作一幅自然艺术作品,可以是拼贴画或自然雕塑。\n\n4. 分享与讨论(10分钟)\n - 让孩子们展示他们的自然艺术作品,并分享他们在探索过程中的发现和感受。\n - 引导孩子们讨论他们对自然的新认识和学习到的知识。\n\n5. 总结与奖励(5分钟)\n - 对孩子们的积极参与和探索精神给予表扬。\n - 可以准备一些小奖品,如自然主题的贴纸或小徽章,作为对他们努力的奖励。\n\n安全须知:\n- 确保活动场地安全,避免有危险的地方。\n- 准备急救包,以防万一。\n- 确保每个孩子都有成人陪同,特别是在使用工具时。\n- 提醒孩子们不要随意触摸不认识的植物或动物,以防过敏或中毒。\n\n通过这样的活动,孩子们不仅能够在自然中获得乐趣,还能学习到宝贵的自然科学知识,同时培养他们的观察力、创造力和团队合作能力。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:53:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597523, 78511280616597521, '971ffd07-2e8f-4762-9844-6d73a447de9a', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:55:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597524, 78511280616597522, '6b9f8ee9-6f36-4bfc-84ae-21032acc21d4', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 13:55:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597525, 78511280616597521, 'chatcmpl-67ca8a3ef856367ab0df4da2', '971ffd07-2e8f-4762-9844-6d73a447de9a', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我不能直接为您绘制图像,但我可以为您提供一个详细的描述,您可以根据这个描述来绘制这个画面。\n\n1. 首先,我们需要确定画面的主体,即钢铁侠。钢铁侠穿着他的高科技战衣,战衣上的灯光闪烁,与纽约夜景中的建筑灯光相呼应。他在空中飞行,身体略微倾斜,以表现出飞行的速度和动感。\n\n2. 接下来,我们需要描绘纽约的夜景。在画面的背景中,我们可以画出一些著名的纽约建筑,如帝国大厦、克莱斯勒大厦和自由女神像等。这些建筑的灯光闪烁,与钢铁侠战衣上的灯光相呼应,营造出一种繁华而充满活力的氛围。\n\n3. 为了使画面更加生动,我们可以在天空中添加一些云彩和星星。云彩可以增加画面的层次感,而星星则可以增加画面的神秘感。\n\n4. 最后,我们需要确定画面的视角。根据您的要求,我们选择平视视角。这意味着观众的视线与钢铁侠的视线平行,可以更好地感受到钢铁侠飞行的速度和动感。\n\n希望这个描述能帮助您绘制出这个画面。如果您需要更多的建议或细节,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:55:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597528, 78511280616597527, '3a961ed0-3a29-4481-8473-41e8253c3495', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:56:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597529, 78511280616597527, 'chatcmpl-67ca8a75f4060e09115c9de1', '3a961ed0-3a29-4481-8473-41e8253c3495', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3)\n \n username_input = self.driver.find_element(By.ID, \"loginname\")\n password_input = self.driver.find_element(By.ID, \"nloginpwd\")\n \n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n \n login_button = self.driver.find_element(By.ID, \"loginsubmit\")\n login_button.click()\n time.sleep(3)\n\n def buy_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3)\n \n buy_button = self.driver.find_element(By.ID, \"submitOrder\")\n buy_button.click()\n time.sleep(3)\n \n confirm_button = self.driver.find_element(By.ID, \"J_SubmitStatic\")\n confirm_button.click()\n time.sleep(3)\n \n print(\"Product bought successfully!\")\n\n def run(self):\n self.login()\n time.sleep(5)\n \n while True:\n current_time = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n if current_time >= self.buy_time:\n self.buy_product()\n break\n else:\n time.sleep(60)\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = \"2023-11-11 00:00:00\"\n \n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run```()\n\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:用于自动登录和购买商品。\n2. `__init__` 方法:初始化类的属性,包括用户名、密码、目标URL、目标商品URL和购买时间。\n3. `login` 方法:自动登录购物网站。\n4. `buy_product` 方法:自动购买预设商品。\n5. `run` 方法:运行自动抢购脚本,等待指定时间后执行购买操作。\n\n请根据你的实际需求修改脚本中的用户名、密码、目标URL和购买时间等参数。希望这个脚本能帮助你实现双十一自动抢购的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:56:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597532, 78511280616597531, '7bdf836b-f2b4-4223-a3b1-7c8146cbf9ae', '', 'Moonshot', 'moonshot-v1-8k', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 13:57:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597533, 78511280616597531, 'chatcmpl-67ca8ab0e686a99b0a722849', '7bdf836b-f2b4-4223-a3b1-7c8146cbf9ae', 'Moonshot', 'moonshot-v1-8k', '作为一名职业规划师,我将帮助你从交友软件产品经理转型成为AI行业的资深产品经理。以下是你需要掌握的必备技能和知识,以及一个具体的行动计划。\n\n### 必备技能和知识:\n\n1. **AI基础知识**:\n - 理解机器学习、深度学习、自然语言处理等AI核心技术。\n - 熟悉AI在不同行业的应用案例。\n\n2. **技术理解能力**:\n - 掌握至少一种编程语言(如Python),以便理解AI产品的技术实现。\n - 了解大数据、云计算等技术,因为它们是AI产品开发的基础。\n\n3. **数据分析能力**:\n - 能够使用数据分析工具(如Excel、R、SQL)来分析用户数据和产品性能。\n - 理解统计学原理,能够进行数据驱动的决策。\n\n4. **产品设计和用户体验**:\n - 掌握用户研究方法,如用户访谈、问卷调查等。\n - 能够设计符合用户需求的产品功能和界面。\n\n5. **项目管理**:\n - 熟悉敏捷开发流程和项目管理工具(如JIRA)。\n - 能够协调跨职能团队,确保项目按时按质完成。\n\n6. **行业知识**:\n - 了解AI行业的最新趋势和法规。\n - 熟悉AI产品在特定行业的应用,如医疗、金融、教育等。\n\n7. **沟通和领导能力**:\n - 能够清晰地向非技术团队成员解释技术概念。\n - 具备领导团队和推动项目的能力。\n\n8. **商业意识**:\n - 理解商业模式和市场分析。\n - 能够识别商业机会并制定相应的产品策略。\n\n### 行动计划:\n\n1. **技能提升**:\n - 参加在线课程或工作坊,学习AI和机器学习的基础知识。\n - 学习编程语言,如Python,并尝试编写简单的AI脚本。\n\n2. **实践经验**:\n - 在当前工作中寻找机会,将AI技术应用于产品中,积累实践经验。\n - 参与开源项目或个人项目,实践AI技术。\n\n3. **建立网络**:\n - 加入AI和产品管理相关的社群,如LinkedIn群组、Meetup等。\n - 参加行业会议和研讨会,与行业专家建立联系。\n\n4. **获取认证**:\n - 考虑获得AI相关的专业认证,如Google的机器学习证书。\n\n5. **阅读和研究**:\n - 定期阅读AI领域的最新研究论文和行业报告。\n - 关注AI领域的领先公司和产品,分析它们的成功因素。\n\n6. **职业转换**:\n - 在准备好后,开始申请AI行业的产品经理职位。\n - 准备一份强调AI知识和技能的简历和作品集。\n\n7. **持续学习**:\n - 成为AI行业资深产品经理后,继续学习最新的AI技术和行业动态。\n\n通过以上计划,你可以逐步从交友软件产品经理转型为AI行业的资深产品经理。记住,这是一个持续的过程,需要不断学习和适应。祝你在职业发展的道路上取得成功!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 13:57:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597536, 78511280616597535, 'c616f80c-2e60-4d95-8b91-cd71e9d589f0', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:03:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597537, 78511280616597535, 'chatcmpl-67ca8c12f4060e09115ca9fe', 'c616f80c-2e60-4d95-8b91-cd71e9d589f0', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果还没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3)\n \n username_input = self.driver.find_element(By.ID, \'loginname\')\n password_input = self.driver.find_element(By.ID, \'nloginpwd\')\n login_button = self.driver.find_element(By.ID, \'J_Quick2Login\')\n\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n login_button.click()\n\n WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, \'J_Go\')))\n\n def buy_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3)\n \n buy_button = self.driver.find_element(By.ID, \'submitOrder\')\n buy_button.click()\n\n WebDriverWait(self.driver, 10).until(EC.presence_of__elementlocated((By.ID, \'J_SubmitOrder\')))\n\n def run(self):\n self.login()\n time.sleep(5) # 等待登录成功\n while True:\n current_time = time.strftime(\'%Y-%m-%d %H:%M:%S\', time.localtime(time.time()))\n if current_time >= self.buy_time:\n self.buy_product()\n break\n else:\n time.sleep(60) # 每分钟检查一次时间\n\nif __name__ == \'__main__\':\n username = \'your_username\'\n password = \'your_password\'\n target_url = \'https://www.jd.com\'\n target_product_url = \'https://item.jd.com/100012043978.html\'\n buy_time = \'2023-11-11 00:00:00\'\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:用于自动登录和购买商品。\n2. `__init__` 方法:初始化类的属性,包括用户名、密码、目标URL、目标商品URL和购买时间。\n3. `login` 方法:自动登录购物网站。\n4. `buy_product` 方法:自动购买预设商品。\n5. `run` 方法:运行自动抢购脚本,等待指定时间后执行购买操作。\n\n请根据你的实际需求修改脚本中的用户名、密码、目标URL和目标商品URL。希望这个脚本能帮助你成功抢购双十一商品!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:03:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597539, 78511280616597538, 'f7fbbedd-0eaf-4db2-badc-9d7d95478006', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:07:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597540, 78511280616597538, 'chatcmpl-67ca8cfeb008d8dad1ddb256', 'f7fbbedd-0eaf-4db2-badc-9d7d95478006', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果还没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3) # 等待页面加载\n\n # 输入用户名和密码\n username_input = self.driver.find_element(By.ID, \"loginname\")\n password_input = self.driver.find_element(By.ID, \"nloginpwd\")\n\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n\n # 点击登录按钮\n login_button = self.driver.find_element(By.ID, \"loginsubmit\")\n login_button.click()\n\n # 等待登录成功\n WebDriverWait(self.driver, 10).until(\n EC.presence_of_element_located((By.ID, \"J_UserName\"))\n )\n\n def buy_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3) # 等待页面加载\n\n # 点击立即购买按钮\n buy_button = self.driver.find_element(By.ID, \"submitOrder\")\n buy_button.click()\n\n # 等待订单确认页面\n WebDriverWait(self.driver, 10).until(\n EC.presence_of_element_located((By.ID, \"submitOrder\"))\n )\n\n # 点击提交订单按钮\n submit_order_button = self.driver.find_element(By.ID, \"submitOrder\")\n submit_order_button.click()\n\n def run(self):\n self.login()\n time.sleep(10) # 等待登录成功\n\n # 等待抢购时间\n while True:\n current_time = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n if current_time >= self.buy_time:\n self.buy_product()\n break\n time.sleep(60) # 每分钟检查一次时间\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = \"2023-11-11 00:00:00\"\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:用于自动登录和抢购商品。\n2. `__init__` 方法:初始化类的实例,包括用户名、密码、目标URL、目标商品URL和抢购时间。\n3. `login` 方法:自动登录购物网站。\n4. `buy_product` 方法:自动抢购预设商品。\n5. `run` 方法:运行抢购脚本,等待抢购时间,然后执行抢购操作。\n\n请根据你的实际需求修改脚本中的用户名、密码、目标URL和抢购时间等参数。希望这个脚本能帮助你成功抢购双十一商品!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:07:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597542, 78511280616597541, '770342bb-3b69-4f09-b2a6-e06ac436d4b7', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:07:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597543, 78511280616597541, 'chatcmpl-67ca8d23f6c1fa204073fa60', '770342bb-3b69-4f09-b2a6-e06ac436d4b7', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[具体地点名称]\n[详细地址]\n[城市,邮编]\n\n**仪式时间:**\n下午 [具体时间],我们将在[地点名称]的草坪上举行仪式,届时将有悠扬的小提琴伴奏,伴随着花香和鸟鸣,共同见证我们的爱情誓言。\n\n**晚宴时间:**\n仪式结束后,我们将移步至[晚宴地点名称],享受一场田园风格的晚宴。晚宴将于[具体时间]开始,届时将有精心准备的美食和美酒,以及温馨的烛光,让我们在轻松愉快的氛围中分享这份喜悦。\n\n**RSVP详情:**\n为了确保我们能够为您准备最佳的体验,请在[RSVP截止日期]前通过以下方式回复您的出席意向:\n\n电话:[联系电话]\n邮箱:[联系邮箱]\n或直接回复此邀请函。\n\n我们期待着在这个特别的日子里,与您共同创造美好的回忆。请携带您的笑容和祝福,与我们一同庆祝这个浪漫的时刻。\n\n**着装要求:**\n请穿着田园风格的服装,让我们的婚礼更加贴近自然,享受这份宁静与和谐。\n\n**特别提示:**\n如果您对婚礼有任何疑问或特殊需求,请随时与我们联系。\n\n期待在[婚礼日期]与您相聚!\n\n此致\n敬礼!\n\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述文案,以确保所有信息的准确性和个性化。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:07:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597545, 78511280616597544, '32ff9925-603b-4ea3-a536-9895b0503947', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:08:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78511280616597546, 78511280616597544, 'chatcmpl-67ca8d54f6c1fa204073fbf1', '32ff9925-603b-4ea3-a536-9895b0503947', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[具体地点名称]\n[详细地址]\n[城市,邮编]\n\n在这片被绿意环绕的田园中,我们将许下永恒的誓言,携手步入婚姻的殿堂。我们希望您能与我们共度这个特别的日子,分享我们的喜悦与幸福。\n\n**仪式时间:**\n[具体时间]\n\n**田园晚宴:**\n[晚宴开始时间]\n\n**RSVP详情:**\n为了确保我们能为您准备最完美的田园体验,请在[RSVP截止日期]前通过以下方式回复您的出席意向:\n\n电话:[联系电话]\n邮箱:[联系邮箱]\n或直接回复此邀请函。\n\n我们期待着在这个浪漫的季节里,与您一起在田园中留下难忘的回忆。\n\n**着装要求:**\n[着装要求,例如:田园风格,轻松休闲]\n\n**特别提示:**\n[如果有特别的活动或安排,如拍照时间、游戏环节等,可以在这里提及]\n\n爱与期待,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整以上模板中的内容,以确保请柬的个性化和准确性。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:08:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78519007262764033, 78519007262764032, '6c8d08b3-5777-4449-bf23-8fec84aefd3c', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:21:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78519007262764034, 78519007262764032, 'chatcmpl-67ca907a87f833355ad33711', '6c8d08b3-5777-4449-bf23-8fec84aefd3c', 'Moonshot', 'moonshot-v1-8k', '标题:都市丽人的清晨仪式:唤醒肌肤的自然之光\n\n正文:\n\n在繁忙的都市生活中,每一位女性都渴望拥有一段属于自己的宁静时光。这不仅仅是为了放松身心,更是为了在忙碌的日常中找到那份属于自己的仪式感。今天,我们要讲述的是一个关于都市女性如何在清晨唤醒肌肤,迎接新一天的故事。\n\n小雅,一位30岁的都市白领,每天的生活就像是一场战斗。从早高峰的地铁到办公室的紧张节奏,她总是忙得不可开交。然而,无论多忙,她都坚持在每天的清晨,给自己一个特别的仪式——用[X品牌洗面奶]唤醒沉睡的肌肤。\n\n这款洗面奶,以其温和而有效的配方,成为了小雅日常护肤不可或缺的一部分。它含有的天然植物精华,能够深层清洁肌肤,同时保持肌肤的水油平衡。小雅说,每次使用后,她都能感觉到肌肤的每一个毛孔都在呼吸,仿佛在告诉她:“新的一天,你准备好了吗?”\n\n[X品牌洗面奶]的泡沫细腻而丰富,能够轻松带走肌肤表面的污垢和油脂,却不带走肌肤所需的水分。它的pH值接近肌肤的自然酸碱度,这意味着它在清洁的同时,还能保护肌肤的天然屏障,避免因清洁过度而导致的肌肤干燥和敏感。\n\n小雅的同事小薇,也是这款洗面奶的忠实粉丝。她曾经因为工作压力大,肌肤状态一度很差。但在小雅的推荐下,她开始尝试[X品牌洗面奶]。短短几周,她的肌肤就变得更加光滑细腻,肤色也更加均匀。小薇说,这款洗面奶就像是她的肌肤救星,让她在忙碌的生活中也能保持最佳状态。\n\n在这个故事中,我们看到了[X品牌洗面奶]如何成为都市女性清晨仪式的一部分,它不仅仅是一款产品,更是一种生活态度的体现。它告诉我们,即使在快节奏的生活中,我们也可以找到属于自己的宁静时刻,用自然的力量唤醒肌肤,迎接每一个新的开始。\n\n结语:\n\n在这个忙碌的世界里,让我们都成为自己肌肤的守护者。选择[X品牌洗面奶],让每一次清洁都成为一场唤醒肌肤的仪式,让自然之光照亮你的每一天。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:21:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974400, 78519007262764032, '59ce0fc1-c27a-49a8-8d6d-c5656d037537', '', 'Moonshot', 'moonshot-v1-8k', '热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:50:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974401, 78519007262764032, 'chatcmpl-67ca973de686a99b0a729ca4', '59ce0fc1-c27a-49a8-8d6d-c5656d037537', 'Moonshot', 'moonshot-v1-8k', '“热望”这个词在中文里通常指的是强烈的渴望或期望。如果你有某个具体的愿望或目标,并且想要讨论它,我很乐意听你分享并提供帮助。如果你需要关于如何实现某个目标的建议,或者想要了解某个领域的信息,也可以告诉我,我会尽我所能提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:50:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974402, 78519007262764032, '92c461dd-b905-46d1-a430-61bdbc2dbf4b', '', 'Moonshot', 'moonshot-v1-8k', '4324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:50:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974403, 78519007262764032, 'chatcmpl-67ca974fe686a99b0a729d3f', '92c461dd-b905-46d1-a430-61bdbc2dbf4b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:50:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974404, 78511280616597538, '0192acbf-f1e7-42cd-a97f-c696b0dc6a6e', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:51:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974405, 78511280616597538, 'chatcmpl-67ca9772e686a99b0a729ed4', '0192acbf-f1e7-42cd-a97f-c696b0dc6a6e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:51:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974407, 78527253599974406, 'fbb0ec18-97e9-47b0-93e6-5260d6572341', '', 'Moonshot', 'moonshot-v1-8k', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:52:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974408, 78527253599974406, 'chatcmpl-67ca9795f6c1fa20407450df', 'fbb0ec18-97e9-47b0-93e6-5260d6572341', 'Moonshot', 'moonshot-v1-8k', '为了在一个月内高效复习线性代数并达到95分的目标,你需要一个详细的复习计划。以下是一个可能的复习计划,包括每周和每天的具体任务,以及整个月的复习排期表。\n\n### 复习目标:\n- 线性代数:95分\n- 掌握所有线性代数的基本概念、定理、性质和解题技巧。\n\n### 需要掌握的科目和知识点:\n1. 向量空间\n2. 线性变换\n3. 矩阵理论\n4. 特征值和特征向量\n5. 二次\n型6. 线性方程组\n7. 内积空间\n8. 欧几里得空间\n9. 正交矩阵和正交变换\n10. 线性代数的应用\n\n### 复习排期表:\n\n#### 第1周:基础概念和向量空间\n- **周一至周五:**\n - 每天复习1小时,重点理解向量空间的定义、性质和例子。\n - 完成相关的习题和练习。\n- **周六:**\n - 复习一周所学内容,解决疑难问题。\n - 做一套模拟试题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第2周:线性变换和矩阵理论\n- **周一至周五:**\n - 每天复习1小时,重点理解线性变换的定义、性质和矩阵表示。\n - 完成相关的习题和练习。\n- **周六:**\n - 复习一周所学内容,解决疑难问题。\n - 做一套模拟试题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第3周:特征值、特征向量和二次型\n- **周一至周五:**\n - 每天复习1小时,重点理解特征值和特征向量的概念、性质和计算方法。\n - 完成相关的习题和练习。\n- **周六:**\n - 复习一周所学内容,解决疑难问题。\n - 做一套模拟试题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第4周:线性方程组和内积空间\n- **周一至周五:**\n - 每天复习1小时,重点理解线性方程组的解法和内积空间的性质。\n - 完成相关的习题和练习。\n- **周六:**\n - 复习一周所学内容,解决疑难问题。\n - 做一套模拟试题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第5周:正交矩阵和正交变换\n- **周一至周五:**\n - 每天复习1小时,重点理解正交矩阵和正交变换的性质和应用。\n - 完成相关的习题和练习。\n- **周六:**\n - 复习一周所学内容,解决疑难问题。\n - 做一套模拟试题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第6周:综合复习和模拟考试\n- **周一至周五:**\n - 每天复习1小时,重点复习所有知识点,查漏补缺。\n - 完成更多的模拟试题和历年真题。\n- **周六:**\n - 全天模拟考试,模拟真实考试环境。\n- **周日:**\n - 休息或轻松复习,整理笔记,准备下一周的考试。\n\n### 每日复习计划:\n- **前30分钟:** 复习前一天的内容,巩固记忆。\n- **中间15分钟:** 学习新的内容或做习题。\n- **最后15分钟:** 总结当天的学习内容,准备第二天的复习计划。\n\n请根据你的具体情况调整这个计划,确保它适合你的学习风格和时间安排。同时,保持灵活性,根据实际进度和理解情况适时调整计划。祝你考试成功!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:52:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974409, 78519007262764032, 'e595e30d-be64-4da1-8d9f-68686b25b6ac', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:55:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974410, 78519007262764032, 'chatcmpl-67ca9874e686a99b0a72a800', 'e595e30d-be64-4da1-8d9f-68686b25b6ac', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:55:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974412, 78527253599974411, '84f293ae-7409-4aef-9973-1320f2f34af2', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-07 14:55:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78527253599974414, 78527253599974413, '0d29b487-db4a-4fcb-8ef4-5cdd593a9771', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-07 14:56:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676352, 78527253599974413, '03df3e64-e24d-4f4d-acdc-bd9e6dde423d', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:58:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676353, 78527253599974413, 'chatcmpl-67ca9915e686a99b0a72ad51', '03df3e64-e24d-4f4d-acdc-bd9e6dde423d', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:58:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676355, 78530444760676354, '2e2c6231-f41f-4ec9-8613-ca0b2acb9e1f', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:58:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676356, 78530444760676354, 'chatcmpl-67ca9929b008d8dad1de33e0', '2e2c6231-f41f-4ec9-8613-ca0b2acb9e1f', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、婚礼日期、地点和RSVP详情。\n\n---\n\n亲爱的家人与朋友们,\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同步入一个浪漫的田园梦境。在这片被爱与祝福包围的土地上,我们将携手步入婚姻的殿堂。\n\n新郎:【新郎名字】\n新娘:【新娘名字】\n\n我们的幸福时刻,期待您的见证与祝福。\n\n婚礼日期:【婚礼具体日期】\n婚礼时间:【婚礼开始时间】\n\n婚礼地点:【具体地址】\n(附上地图或导航链接,方便宾客前往)\n\nRSVP详情:\n为了确保我们能为您准备最完美的婚礼体验,请在【RSVP截止日期】前通过以下方式告知我们您的出席意向:\n\n电话:【联系电话】\n邮箱:【联系邮箱】\n或通过【其他联系方式,如微信、WhatsApp等】\n\n我们将在田园的怀抱中,为您准备一场温馨而难忘的婚礼盛宴。期待在那个特别的日子里,与您共同分享我们的爱与喜悦。\n\n爱与期待,\n【新郎名字】 & 【新娘名字】\n\n---\n\n请根据实际情况调整上述文案,确保所有信息的准确性和个性化。希望这份请柬能够为您的婚礼增添一份特别的记忆。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:59:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676358, 78530444760676357, 'ffca2a00-7689-44f5-9975-a0234e6ccaea', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 14:59:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78530444760676359, 78530444760676357, 'chatcmpl-67ca9945b008d8dad1de3535', 'ffca2a00-7689-44f5-9975-a0234e6ccaea', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n亲爱的家人与朋友们,\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同庆祝爱情的美好时刻。在一片被鲜花和绿意环绕的田园之中,我们将许下永恒的誓言,开启我们共同的人生旅程。\n\n新郎:【新郎名字】\n新娘:【新娘名字】\n\n我们荣幸地邀请您参加我们的婚礼,见证我们的爱情故事在这片浪漫的田园中绽放。\n\n婚礼日期:【婚礼具体日期】\n婚礼时间:【婚礼开始时间】\n\n婚礼地点:【详细地址】\n【如果需要,可以附上地图链接或导航信息】\n\n着装要求:田园风情,轻松优雅\n\nRSVP详情:\n为了确保我们的婚礼能够完美地为您准备,请您在【RSVP截止日期】前通过以下方式告知我们您是否能够出席:\n\n电话:【联系电话】\n邮箱:【联系邮箱】\n\n我们期待着在这个特别的日子里,与您共同分享我们的快乐与祝福。让我们在田园的怀抱中,共同编织一段难忘的回忆。\n\n爱与期待,\n【新郎名字】 & 【新娘名字】\n\n---\n\n请根据您的具体需求调整上述文案,确保所有信息都是准确无误的。希望这份请柬能够为您的婚礼增添一份特别的氛围。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 14:59:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360449, 78531011696360448, '5ade84f2-e525-454f-8457-7b3e1302e4df', '', 'Moonshot', 'moonshot-v1-8k', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:01:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360450, 78531011696360448, 'chatcmpl-67ca99a1e686a99b0a72b28c', '5ade84f2-e525-454f-8457-7b3e1302e4df', 'Moonshot', 'moonshot-v1-8k', '为了在一个月内高效复习线性代数并达到95分的目标,你需要一个详细的复习计划。以下是一个可能的复习计划,包括每周和每天的具体任务,以及整个月的复习排期表。\n\n### 复习目标:\n- 线性代数:95分\n- 掌握所有线性代数的基本概念、定理、性质和解题技巧。\n\n### 知识点概览:\n1. 向量空间\n2. 线性变换\n3. 矩阵理论\n4. 特征值和特征向量\n5. 二次型\n6. 线性方程组\n7. 欧几里得空间\n8. 正交性和最小二乘法\n9. 线性代数的应用\n\n### 复习排期表:\n\n#### 第1周:基础概念和向量空间\n- **周一至周五:**\n - 每天复习1小时,重点理解向量空间的定义、性质和例子。\n - 完成相关习题,巩固概念。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第2周:线性变换和矩阵理论\n- **周一至周五:**\n - 每天复习1小时,学习线性变换的定义、性质和矩阵表示。\n - 完成相关习题,特别是矩阵运算。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第3周:特征值、特征向量和二次型\n- **周一至周五:**\n - 每天复习1小时,深入理解特征值和特征向量的概念,以及二次型的性质。\n - 完成相关习题,特别是特征值和特征向量的计算。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第4周:线性方程组和欧几里得空间\n- **周一至周五:**\n - 每天复习1小时,学习线性方程组的解法,包括高斯消元法和矩阵分解。\n - 理解欧几里得空间的概念和性质。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第5周:正交性和最小二乘法\n- **周一至周五:**\n - 每天复习1小时,学习正交性和最小二乘法的概念和应用。\n - 完成相关习题,特别是正交投影和最小二乘问题的求解。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第6周:线性代数的应用和总复习\n- **周一至周五:**\n - 每天复习1小时,学习线性代数在不同领域的应用。\n - 每天做一套模拟题,检查整体掌握情况。\n- **周六:**\n - 总复习,解决所有疑难问题。\n - 做一套完整的模拟考试。\n- **周日:**\n - 休息或轻松复习,调整心态,准备考试。\n\n### 每日复习策略:\n- **开始:** 回顾前一天的学习内容,确保记忆的连贯性。\n- **中间:** 专注于新知识点的学习,做笔记,理解概念。\n- **结束:** 完成当天的习题,总结难点,准备第二天的复习。\n\n### 其他建议:\n- **定期检查:** 每周检查一次进度,确保按计划进行。\n- **调整计划:** 根据实际掌握情况适时调整复习计划。\n- **健康作息:** 保持充足的睡眠和适当的休息,以保持高效的学习状态。\n\n通过遵循这个复习计划,你可以系统地复习线性代数,并为考试做好充分的准备。祝你考试成功!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:01:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360452, 78531011696360451, 'afb7c6b3-0ce8-4edd-afc7-9382816090a8', '', 'Moonshot', 'moonshot-v1-8k', '5熱图t', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:01:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360453, 78531011696360451, 'chatcmpl-67ca99e1f856367ab0dfcbf2', 'afb7c6b3-0ce8-4edd-afc7-9382816090a8', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在谈论“热图”(heatmap),这是一种数据可视化技术,用于展示数据集中的值在不同区域的分布情况。热图通常用颜色来表示数据的大小或密度,颜色越深表示数值越大。\n\n如果您需要创建热图,可以使用多种工具和编程语言,例如Python中的Matplotlib、Seaborn库,或者R语言中的ggplot2等。如果您有具体的数据集和需求,可以提供更多的信息,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:01:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360454, 78531011696360451, '87b86107-b3a4-46c6-ad81-b09e8b3c37f7', '', 'Moonshot', 'moonshot-v1-8k', '今天几号', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:02:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360455, 78531011696360451, 'chatcmpl-67ca99f3e686a99b0a72b594', '87b86107-b3a4-46c6-ad81-b09e8b3c37f7', 'Moonshot', 'moonshot-v1-8k', '今天是2023年8月9日。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:02:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360456, 78531011696360451, 'fedf32f4-042e-4deb-bbff-968910128f1c', '', 'Moonshot', 'moonshot-v1-8k', '有什么吃的', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:02:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360457, 78531011696360451, 'chatcmpl-67ca9a03f6c1fa2040746438', 'fedf32f4-042e-4deb-bbff-968910128f1c', 'Moonshot', 'moonshot-v1-8k', '有很多好吃的选择,这里列举一些常见的食物:\n\n1. 中餐:宫保鸡丁、鱼香肉丝、红烧肉、麻婆豆腐、饺子、包子、炒饭、炒面等。\n\n2. 西餐:牛排、意面、披萨、汉堡、三明治、沙拉等。\n\n3. 日料:寿司、刺身、拉面、天妇罗、章鱼烧等。\n\n4. 快餐:炸鸡、薯条、汉堡、披萨等。\n\n5. 甜品:蛋糕、冰淇淋、布丁、马卡龙、巧克力等。\n\n6.零食 :薯片、巧克力、糖果、果仁、饼干等。\n\n7. 水果:苹果、香蕉、橙子、葡萄、西瓜、草莓等。\n\n8. 饮品:咖啡、茶、果汁、汽水、牛奶等。\n\n你可以根据个人口味和需求选择喜欢的食物。如果你有特定的食物或菜系需求,可以告诉我,我会提供更详细的建议。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:02:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360458, 78531011696360451, 'b107d7b9-5838-4062-890a-b2b73204f1c5', '', 'Moonshot', 'moonshot-v1-8k', '4325432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:11:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360459, 78531011696360451, 'chatcmpl-67ca9c3ae686a99b0a72cd52', 'b107d7b9-5838-4062-890a-b2b73204f1c5', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4325432\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:11:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360460, 78531011696360451, 'b82fcf9f-a468-4ae1-ab3b-9e2d140fbdb7', '', 'Moonshot', 'moonshot-v1-8k', '飓风等级能否', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:12:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360461, 78531011696360451, 'chatcmpl-67ca9c48b008d8dad1de570d', 'b82fcf9f-a468-4ae1-ab3b-9e2d140fbdb7', 'Moonshot', 'moonshot-v1-8k', '飓风等级是根据飓风的强度来划分的,通常使用萨福尔-辛普森飓风等级(Saffir-Simpson Hurricane Wind Scale)来衡量。这个等级将飓风分为五个类别,从1到5,数字越大,飓风的强度和潜在破坏力就越大。\n\n1. 飓风1级(Category 1):风速在74-95英里/小时(119-153公里/小时)之间,可能造成轻微的损害。\n2. 飓风2级(Category 2):风速在96-110英里/小时(154-177公里/小时)之间,可能造成中等程度的损害。\n3. 飓风3级(Category 3):风速在111-129英里/小时(178-208公里/小时)之间,可能造成严重的损害。\n4. 飓风4级(Category 4):风速在130-156英里/小时(209-251公里/小时)之间,可能造成极其严重的损害。\n5. 飓风5级(Category 5):风速在157英里/小时(252公里/小时)以上,可能造成灾难性的损害。\n\n飓风等级的划分有助于预测和准备可能的损害,以及采取相应的应对措施。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:12:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360462, 78531011696360451, 'e7c65e77-4102-4d6f-8726-fd0db5754959', '', 'Moonshot', 'moonshot-v1-8k', '范德萨范德萨', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:12:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360463, 78531011696360451, 'chatcmpl-67ca9c64f4060e09115d294b', 'e7c65e77-4102-4d6f-8726-fd0db5754959', 'Moonshot', 'moonshot-v1-8k', '范德萨(Edwin van der Sar)是一位已退役的荷兰足球运动员,他在球场上的位置是守门员。范德萨出生于1970年10月29日,他的职业生涯非常成功,曾效力于阿贾克斯、尤文图斯、富勒姆和曼联等俱乐部。他在曼联的时期尤为突出,帮助球队赢得了多个英超联赛冠军和欧洲冠军联赛冠军。\n\n范德萨以其出色的守门技术和冷静的场上表现而闻名,被认为是足球史上最优秀的守门员之一。他在2008年欧洲杯期间担任荷兰国家队队长,并在2010年世界杯上帮助荷兰队获得了亚军。\n\n范德萨在2011年退役后,曾短暂担任阿贾克斯的营销总监,后来成为了阿贾克斯的首席执行官。他在俱乐部管理层的角色中继续发挥着重要作用,对荷兰足球和欧洲足球都有着深远的影响。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:12:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360464, 78531011696360451, '33f735d5-0529-4a71-ac5d-9eec101d6311', '', 'Moonshot', 'moonshot-v1-8k', '432424', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:12:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360465, 78531011696360451, '27b23f52-15b8-4d6b-9ec8-a60cafd86f62', '', 'Moonshot', 'moonshot-v1-8k', '4324322', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:13:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78531011696360466, 78531011696360451, 'chatcmpl-67ca9cb087f833355ad39f1d', '27b23f52-15b8-4d6b-9ec8-a60cafd86f62', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324322\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:13:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490241, 78535985268490240, '20f25de7-a89c-44e8-9d6b-4bb397c9a0e4', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:25:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490242, 78535985268490240, 'chatcmpl-67ca9f60f4060e09115d475e', '20f25de7-a89c-44e8-9d6b-4bb397c9a0e4', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我不能直接为您绘制图像,但我可以为您提供一个详细的描述,您可以根据这个描述来绘制这幅画。\n\n1. 首先,我们需要确定画面的主体,即钢铁侠。钢铁侠穿着他的高科技战衣,战衣上的灯光闪烁,与纽约夜景中的建筑灯光相呼应。他在空中飞行,身体略微倾斜,以表现出飞行的速度和动感。\n\n2. 接下来,我们需要描绘纽约的夜景。在画面的背景中,我们可以画出一些著名的纽约地标,如帝国大厦、自由女神像等。这些建筑的灯光闪烁,与钢铁侠战衣上的灯光相呼应。同时,我们还可以在画面中加入一些较小的建筑,以增加画面层次感的。\n\n3. 为了表现出全景构图,我们需要在画面中加入一些远景元素。例如,我们可以在画面的远处画出一些模糊的建筑轮廓,以表现出纽约的繁华和广阔。\n\n4. 最后,我们需要确定画面的视角。根据您的要求,我们需要采用平视视角。这意味着我们需要将画面的地平线设置在画面中间的位置,以便观众可以平视钢铁侠和纽约的夜景。\n\n希望这个描述能帮助您绘制出这幅画。如果您需要更多的建议或细节,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:25:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490243, 78530444760676357, 'b5aa6913-94ab-491d-a0c6-d94b5b87b993', '', 'Moonshot', 'moonshot-v1-8k', '32131', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:39:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490244, 78530444760676357, 'chatcmpl-67caa29d74f0583d72df2c11', 'b5aa6913-94ab-491d-a0c6-d94b5b87b993', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"32131\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:39:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490245, 78530444760676357, '9685cc7c-f7fe-4014-bede-6a3177548760', '', 'Moonshot', 'moonshot-v1-8k', '4の2421', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:39:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490246, 78530444760676357, 'chatcmpl-67caa2cdf6c1fa204074b845', '9685cc7c-f7fe-4014-bede-6a3177548760', 'Moonshot', 'moonshot-v1-8k', '4の2421は、4を2421回足し合わせた数です。これを計算すると、\n\n4 × 2421 = 9684\n\nとなります。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:39:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490247, 78530444760676357, 'd70c1b7b-f0e0-41b2-8fae-3012d4dce31f', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:40:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490248, 78530444760676357, 'chatcmpl-67caa2d3f4060e09115d66db', 'd70c1b7b-f0e0-41b2-8fae-3012d4dce31f', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:40:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490249, 78530444760676357, '8bc29a36-b30a-4267-8aa2-fa438490e27c', '', 'Moonshot', 'moonshot-v1-8k', '4324额威风', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:40:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490250, 78530444760676357, 'chatcmpl-67caa2d7f6c1fa204074b881', '8bc29a36-b30a-4267-8aa2-fa438490e27c', 'Moonshot', 'moonshot-v1-8k', '\"4324额威风\" 这个表达看起来像是一串数字和中文词汇的组合,但它并没有明确的意义。如果你是想表达某种特定的信息或者询问某个问题,请提供更多的上下文或者详细说明,这样我才能更好地帮助你。如果这是一个密码或者某种特定的代码,请确保你提供足够的信息,以便我能够理解并提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:40:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490251, 78530444760676357, '7dbcd983-6b0d-4cc9-8d51-7f208bd80d6c', '', 'Moonshot', 'moonshot-v1-8k', '432 的人c', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:40:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490252, 78530444760676357, 'b9077915-8e6d-405c-995c-500eb4889407', '', 'Moonshot', 'moonshot-v1-8k', '432423', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:40:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490253, 78530444760676357, 'c81b8108-f091-43ed-ba21-619d00150beb', '', 'Moonshot', 'moonshot-v1-8k', '43242', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:40:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490254, 78530444760676357, '5b25d058-cc93-434d-b7ce-a37301cfd174', '', 'Moonshot', 'moonshot-v1-8k', '热热非常 ', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:41:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490255, 78530444760676357, 'chatcmpl-67caa310f856367ab0e02499', '5b25d058-cc93-434d-b7ce-a37301cfd174', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试表达某种感受或者描述某个情况,但是“热热非常”这个短语不太清晰。如果您是在说天气非常热,那么可以这样表达:\n\n\"今天的天气非常热。\"\n\n如果您是在描述某种食物或者饮料的温度,可以这样说:\n\n\"这杯咖啡非常热。\"\n\n如果您有其他具体的问题或者需要帮助,请提供更多的信息,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:41:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490256, 78530444760676357, '8e68c3d3-ac03-4818-9b3e-93fa1d96232b', '', 'Moonshot', 'moonshot-v1-8k', '热望热', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:41:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490257, 78530444760676357, 'chatcmpl-67caa322f6c1fa204074ba8d', '8e68c3d3-ac03-4818-9b3e-93fa1d96232b', 'Moonshot', 'moonshot-v1-8k', '\"热望热\"这个表达在中文里可能是不完整的,或者可能是一个打字错误。如果你是想表达对某事物的强烈渴望或者热情,那么可能你想要说的是“热望”。“热望”是一个形容词,用来描述对某事物的强烈愿望或期待。\n\n如果你有更具体的问题或者需要进一步的解释,请提供更多的上下文或者详细信息,我会尽力帮助你。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:41:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490258, 78530444760676357, '5f726bfb-a7e0-40e0-a766-d409433687b2', '', 'Moonshot', 'moonshot-v1-8k', '热望热望人', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:41:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490259, 78530444760676357, 'aaa3a45c-a7d4-45cf-9a19-f0b6a26b0ceb', '', 'Moonshot', 'moonshot-v1-8k', '热污染非常', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:42:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490260, 78530444760676357, 'chatcmpl-67caa348968a33a7508b0ed2', 'aaa3a45c-a7d4-45cf-9a19-f0b6a26b0ceb', 'Moonshot', 'moonshot-v1-8k', '热污染是一个非常严重的问题,它指的是由于人类活动产生的废热排放到环境中导致,环境温度升高的现象。热污染可以对生态系统、水资源、气候和人类健康产生负面影响。以下是一些热污染的主要来源和影响:\n\n1. **工业排放**:工厂、发电厂等工业设施在生产过程中会产生大量的废热,这些废热如果直接排放到环境中,会导致周围水域或空气温度升高。\n\n2. **城市热岛效应**:城市中的建筑物、道路和车辆等人造表面吸收和释放热量,导致城市中心区域的温度比周边郊区高,这种现象称为城市热岛效应。\n\n3. **水体污染**:工业废水和城市污水如果未经处理直接排放到河流、湖泊等水体中,会导致水温升高,影响水生生物的生存环境。\n\n4. **气候变化**:热污染会增加大气中的温室气体,加剧全球变暖现象,导致极端天气事件增多,如热浪、干旱等。\n\n5. **生态系统破坏**:温度的升高会破坏原有的生态平衡,导致某些物种无法适应新的环境而灭绝,同时可能促进某些有害物种的繁殖。\n\n6. **人类健康影响**:热污染会增加热相关疾病的风险,如中暑、心脏病发作等,特别是在城市热岛效应严重的地区。\n\n为了减少热污染,可以采取以下措施:\n\n- **提高能源效率**:通过改进技术和设备,减少能源消耗和废热产生。\n- **废物热能回收**:利用工业废热进行供暖或发电,实现能源的再利用。\n- **城市规划**:通过增加绿地、水体和使用反射率高的材料来减少城市热岛效应。\n- **环保法规**:制定和执行严格的环保法规,限制废热排放。\n\n热污染是一个全球性问题,需要政府、企业和公众共同努力来解决。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:42:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490261, 78530444760676357, 'ef661f67-7d55-4f08-9d98-b011e97e6c6a', '', 'Moonshot', 'moonshot-v1-8k', '如发热是德国v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:44:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490262, 78530444760676357, 'chatcmpl-67caa35e87f833355ad3d9c2', 'ef661f67-7d55-4f08-9d98-b011e97e6c6a', 'Moonshot', 'moonshot-v1-8k', '看起来您的问题可能不完整或者有些混淆。\"发热\"是指体温升高,这是一种常见的症状,可能由多种原因引起,如感染、炎症、药物反应等。而“德国v”这个表述不太清楚,可能是指德国的某个方面或者与德国相关的某个事物。\n\n如果您是想询问关于发热的处理方法或者与发热相关的信息,请提供更具体的问题。如果您是想讨论与德国相关的某个话题,也请提供更多的上下文,这样我才能更准确地回答您的问题。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:42:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490264, 78535985268490263, 'cbae1bd1-25b1-42ee-aaa6-9322920b6a3a', '', 'Moonshot', 'moonshot-v1-8k', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:48:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490265, 78535985268490263, 'chatcmpl-67caa4b4f856367ab0e02fb4', 'cbae1bd1-25b1-42ee-aaa6-9322920b6a3a', 'Moonshot', 'moonshot-v1-8k', '标题:【意式风情满满】老街角意式餐厅,奶酪培根意面和烤羊排的绝妙搭配,你绝对不想错过!\n\n正文:\nHey亲爱的朋友们👋,今天我要来给你们种草一家超有feel的意式餐厅——老街角意式餐厅!🍝🥩\n\n🌟 一走进这家店,就被那温馨的店内装饰给暖到了!仿佛穿越到了意大利的某个小镇,墙上挂着复古的油画,木质的桌椅散发着淡淡的木香,每个角落都透露着浓厚的意式风情。🖼️🪵\n\n🍽️ 说到菜品,我必须得提一提他们的招牌——奶酪培根意面和烤羊排!🧀🥓🐑\n\n🧀 奶酪培根意面:这可不是普通的意面,每一根面条都裹满了浓郁的奶酪和香脆的培根,每一口都是满满的幸福感!奶酪的醇厚和培根的咸香完美融合,简直是味蕾的盛宴!\n\n🥩 烤羊排:外皮烤得金黄酥脆,内里肉质鲜嫩多汁,每一口都是对味觉的极致诱惑。搭配上他们家特制的酱汁,简直是绝配!\n\n💁‍♂️ 服务员小哥哥小姐姐们也是超级亲切,服务周到,让人感觉宾至如归。他们对菜品的介绍也是头头是道,让人对每一道菜都充满了期待。\n\n🌈 总之,老街角意式餐厅绝对是一个值得一去再去的地方。无论是约会、家庭聚餐还是朋友小聚,这里都能给你一个难忘的意式美食体验。快带上你的小伙伴们,一起来感受这份意式的热情吧!👫👭👬\n\n#意式美食# #奶酪培根意面# #烤羊排# #老街角意式餐厅#', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:48:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490267, 78535985268490266, '2f9617ac-f764-49ea-b361-b419ab88fdd7', '', 'Moonshot', 'moonshot-v1-8k', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 15:50:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490268, 78535985268490266, 'chatcmpl-67caa53d87f833355ad3e591', '2f9617ac-f764-49ea-b361-b419ab88fdd7', 'Moonshot', 'moonshot-v1-8k', '标题:【意式风情满满】老街角意式餐厅,奶酪培根意面和烤羊排的绝妙邂逅!\n\n正文:\nHey亲爱的们,今天我要来给你们种草一家超有feel的意式餐厅——老街角意式餐厅!🍝🥩\n\n一走进这家店,就被那温馨的店内装饰给暖到了,仿佛穿越到了意大利的某个小镇,每个角落都散发着复古而浪漫的气息。🏰✨\n\n服务员小哥哥小姐姐们也是超级亲切,笑容满面,让人感觉宾至如归。😄💖\n\n当然,重头戏还是他们家的特色菜品——奶酪培根意面和烤羊排!🍝🥩\n\n首先说说这个奶酪培根意面,面条Q弹有嚼劲,奶酪和培根的完美结合,每一口都是满满的幸福感,浓郁的奶香和培根的烟熏味在口中交织,简直是味蕾的盛宴!🧀🥓\n\n再来就是烤羊排,外皮烤得金黄酥脆,里面的肉质鲜嫩多汁,每一口都是对味觉的极致诱惑。🔥🐑\n\n在这里,每一道菜都像是艺术品,让人在享受美食的同时,也能感受到意式生活的精致和浪漫。🎨🌹\n\n所以,如果你也是个意式美食的爱好者,或者想要体验一下异国风情,老街角意式餐厅绝对是你的不二之选!快带上你的小伙伴们,一起来这里享受一场味觉和视觉的双重盛宴吧!🥂👭👬\n\n#意式美食探店 #奶酪培根意面 #烤羊排 #老街角意式餐厅 #美食打卡地', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 15:50:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490270, 78535985268490269, '90f0a6b3-0a39-4189-892e-cf5dd83ed06c', '', 'Moonshot', 'moonshot-v1-8k', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 15:54:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490271, 78535985268490269, 'chatcmpl-67caa62fe686a99b0a732d4c', '90f0a6b3-0a39-4189-892e-cf5dd83ed06c', 'Moonshot', 'moonshot-v1-8k', '为了在一个月内高效复习线性代数并达到95分的目标,你需要一个详细的复习计划。以下是一个可能的复习计划,包括每周和每天的具体任务,以及整个月的复习排期表。\n\n### 复习目标:\n- 线性代数:95分\n- 掌握所有线性代数的基本概念、定理、性质和解题技巧。\n\n### 知识点概览:\n1. 向量空间\n2. 线性变换\n3. 矩阵理论\n4. 特征值和特征向量\n5. 二次型\n6. 线性方程组\n7. 欧几里得空间\n8. 正交性和最小二乘法\n9. 线性代数的应用\n\n### 复习排期表:\n\n#### 第1周:基础概念和向量空间\n- **周一至周五:**\n - 每天复习1小时,重点理解向量空间的定义、性质和例子。\n - 完成相关的习题,确保理解每个概念。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套模拟题,检查理解程度。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第2周:线性变换和矩阵理论\n- **周一至周五:**\n - 每天复习1小时,学习线性变换的定义、性质和矩阵表示。\n - 完成相关的习题,特别是矩阵运算。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套模拟题,检查理解程度。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第3周:特征值、特征向量和二次型\n- **周一至周五:**\n - 每天复习1小时,深入学习特征值和特征向量的概念,以及二次型的性质。\n - 完成相关的习题,特别是特征值和特征向量的计算。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套模拟题,检查理解程度。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第4周:线性方程组和欧几里得空间\n- **周一至周五:**\n - 每天复习1小时,学习线性方程组的解法,包括高斯消元法和矩阵分解。\n - 学习欧几里得空间的性质和应用。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套模拟题,检查理解程度。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第5周:正交性和最小二乘法\n- **周一至周五:**\n - 每天复习1小时,学习正交性和最小二乘法的概念和应用。\n - 完成相关的习题,特别是正交投影和最小二乘问题的求解。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套模拟题,检查理解程度。\n- **周日:**\n - 休息或轻松复习,准备下一周的学习。\n\n#### 第6周:综合复习和模拟考试\n- **周一至周五:**\n - 每天复习1小时,综合复习所有知识点,查漏补缺。\n - 每天做一套模拟题,模拟考试环境。\n- **周六:**\n - 复习一周所学,解决疑难问题。\n - 做一套完整的模拟考试,评估自己的准备情况。\n- **周日:**\n - 休息或轻松复习,调整心态,准备考试。\n\n### 注意事项:\n- 每天的复习时间固定为1小时,但可以根据实际情况适当调整。\n- 每周的模拟题和模拟考试是检验学习效果的重要手段,不可忽视。\n- 保持健康的作息,确保有足够的休息和睡眠,以保持良好的学习状态。\n- 遇到难以理解的知识点时,不要犹豫寻求帮助,可以是老师、同学或在线资源。\n\n通过这样的复习计划,你可以系统地复习线性代数的知识点,并在考试中取得优异的成绩。祝你好运!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 15:54:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490273, 78535985268490272, '4f958465-a2ef-438b-aee6-a85807a36d34', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:56:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490274, 78535985268490272, 'chatcmpl-67caa68eb008d8dad1dec84c', '4f958465-a2ef-438b-aee6-a85807a36d34', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度来分析你男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,没有足够的时间及时回复消息。\n\n2. **沟通习惯**:\n - 有些人天生不善于即时通讯,他们可能更喜欢面对面交流或者在有更多时间时回复。\n\n3. **情感状态**:\n - 他可能因为某些原因感到压力或情绪低落,这影响了他回复消息的速度。\n\n4. **技术问题**:\n - 手机或网络问题可能导致消息延迟或未能及时送达。\n\n5. **关系动态**:\n - 你们的关系可能正在经历一些变化,他可能在重新评估你们的关系。\n\n6. **个人空间需求**:\n - 有些人需要更多的个人空间和时间,这可能影响他们回复消息的频率。\n\n### 合理的建议和解决方法:\n\n1. **沟通和理解**:\n - 找一个合适的时间,以非指责的方式表达你的感受和担忧。询问他是否有什么困扰或者是否需要帮助。\n\n2. **设定期望**:\n - 讨论并设定双方都能接受的沟通频率和方式,这样可以减少误解和不必要的焦虑。\n\n3. **给予空间**:\n - 如果他需要个人空间,尊重他的需求,同时保持适度的联系,让他知道你在乎他。\n\n4. **共同活动**:\n - 计划一些共同的活动,增加面对面交流的机会,这有助于加强你们的关系。\n\n5. **自我反思**:\n - 思考一下自己的沟通方式是否有需要改进的地方,比如是否过于依赖即时通讯。\n\n6. **技术支持**:\n - 如果是技术问题,帮助他解决或者建议他检查手机设置和网络连接。\n\n7. **情感支持**:\n - 如果他正在经历困难时期,提供情感支持和鼓励,让他知道你是他可以依靠的人。\n\n8. **专业帮助**:\n - 如果情况严重,比如他长期不回消息,可能需要寻求情感咨询师的帮助。\n\n记住,每个人的情况都是独特的,所以最重要的是通过开放和诚实的沟通来理解对方的需求和感受。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:56:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490276, 78535985268490275, 'cb678ac2-801b-4ae9-8ae9-a5fe1d2a9b1c', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:57:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490277, 78535985268490275, 'chatcmpl-67caa6d52cf02d8f8e613aaf', 'cb678ac2-801b-4ae9-8ae9-a5fe1d2a9b1c', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你提供一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了selenium库和对应的WebDriver。以下是代码实现:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome() # 请确保已安装ChromeDriver\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(2) # 等待页面加载\n\n # 填写用户名和密码\n username_input = self.driver.find_element(By.ID, \"username\")\n password_input = self.driver.find_element(By.ID, \"password\")\n\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n\n # 点击登录按钮\n login_button = self.driver.find_element(By.ID, \"login_button\")\n login_button.click()\n\n def navigate_to_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(2) # 等待页面加载\n\n def buy_product(self):\n # 点击立即购买按钮\n buy_button = self.driver.find_element(By.ID, \"buy_button\")\n buy_button.click()\n\n # 等待抢购时间\n time.sleep((self.buy_time - time.time()) + 2) # 确保在抢购时间后点击\n\n # 点击提交订单按钮\n submit_button = self.driver.find_element(By.ID, \"submit_button\")\n submit_button.click()\n\n def close_browser(self):\n self.driver.quit()\n\ndef main():\n username = \"your_username\" # 替换为你的用户名\n password = \"your_password\" # 替换为你的密码\n target_url = \"https://www.example.com/login\" # 替换为目标网站登录页面URL\n target_product_url = \"https://www.example.com/product\" # 替换为目标商品页面URL\n buy_time = 1673449200 # 替换为抢购时间的Unix时间戳\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.login()\n auto_buyer.navigate_to_product()\n auto_buyer.buy_product()\n auto_buyer.close_browser()\n\nif __name__ == \"__main__\":\n main()\n```\n\n### 代码说明:\n1. **AutoBuyer类**:封装了自动登录、导航到商品页面、购买商品和关闭浏览器的方法。\n2. **login方法**:实现自动登录功能,填写用户名和密码,点击登录按钮。\n3. **navigate_to_product方法**:导航到目标商品页面。\n4. **buy_product方法**:实现自动购买功能,点击立即购买按钮,等待抢购时间,然后点击提交订单按钮。\n5. **close_browser方法**:关闭浏览器。\n\n### 使用说明:\n1. 替换`username`、`password`、`target_url`、`target_product_url`和`buy_time`的值。\n2. 确保已安装ChromeDriver,并将其路径添加到系统环境变量中。\n3. 运行脚本,脚本将在指定时间自动登录、导航到商品页面并购买商品。\n\n希望这个脚本能满足你的需求!如果有任何问题或需要进一步定制,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:57:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490279, 78535985268490278, '12a615b3-9ce8-47f2-a5e7-48034ee9e8eb', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:58:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490280, 78535985268490278, 'chatcmpl-67caa6f82cf02d8f8e613b4e', '12a615b3-9ce8-47f2-a5e7-48034ee9e8eb', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3) # 等待页面加载\n\n # 输入用户名和密码\n username_input = self.driver.find_element(By.ID, \"username\")\n password_input = self.driver.find_element(By.ID, \"password\")\n\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n\n # 点击登录按钮\n login_button = self.driver.find_element(By.ID, \"login_button\")\n login_button.click()\n\n def buy_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3) # 等待页面加载\n\n # 点击立即购买按钮\n buy_button = self.driver.find_element(By.ID, \"buy_button\")\n buy_button.click()\n\n # 等待抢购结果\n try:\n WebDriverWait(self.driver, 10).until(\n EC.text_to_be_present_in_element((By.ID, \"result\"), \"抢购成功\")\n )\n print(\"抢购成功!\")\n except:\n print(\"抢购失败!\")\n\n def run(self):\n self.login()\n time.sleep(5) # 等待登录成功\n\n # 等待抢购时间\n current_time = time.time()\n while current_time < self.buy_time:\n time.sleep(1)\n current_time = time.time()\n\n self.buy_product()\n\n self.driver.quit()\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = 1673449200 # 2024年11月11日00:00:00的Unix时间戳\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer`类:用于自动登录购物网站和抢购预设商品。\n2. `login`方法:用于自动登录购物网站。\n3. `buy_product`方法:用于抢购预设商品。\n4. `run`方法:用于运行整个抢购流程。\n\n你可以根据实际需求修改脚本中的用户名、密码、目标URL和抢购时间等参数。希望这个脚本能帮助你实现双十一自动抢购的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:58:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490282, 78535985268490281, 'f5d1f2ad-9e47-43ae-916f-6583434e35f7', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:58:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490284, 78535985268490283, '32200cbb-3987-4584-8670-904100ce7185', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:58:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490285, 78535985268490281, 'chatcmpl-67caa713b008d8dad1decdb4', 'f5d1f2ad-9e47-43ae-916f-6583434e35f7', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个双十一自动抢购脚本。以下是使用Python和selenium库实现的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3)\n \n username_input = self.driver.find_element(By.ID, \"loginname\")\n password_input = self.driver.find_element(By.ID, \"nloginpwd\")\n \n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n \n login_button = self.driver.find_element(By.ID, \"loginsubmit\")\n login_button.click()\n time.sleep(3)\n\n def navigate_to_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3)\n\n def buy_product(self):\n buy_button = self.driver.find_element(By.ID, \"submitOrder\")\n buy_button.click()\n time.sleep(3)\n\n def wait_until_buy_time(self):\n current_time = time.time()\n time_to_wait = self.buy_time - current_time\n if time_to_wait > 0:\n time.sleep(time_to_wait)\n\n def run(self):\n self.login()\n self.navigate_to_product()\n self.wait_until_buy_time()\n self.buy_product()\n self.driver.quit()\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = time.time() + 3600 # 1 hour later\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n代码说明:\n1. `AutoBuyer` 类包含登录、导航到商品页面、购买商品和等待购买时间的方法。\n2. `__init__` 方法初始化类的属性,包括用户名、密码、目标URL、商品URL和购买时间。\n3. `login` 方法使用selenium登录购物网站。\n4. `navigate_to_product` 方法导航到预设商品页面。\n5. `buy_product` 方法点击购买按钮。\n6. `wait_until_buy_time` 方法等待直到购买时间。\n7. `run` 方法执行整个购买流程。\n8. 在 `if __name__ == \"__main__\":` 部分,创建 `AutoBuyer` 实例并运行。\n\n请根据实际需求修改用户名、密码、目标URL和商品URL。同时,确保安装了selenium库和Chrome WebDriver。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:58:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490287, 78535985268490286, '9e9c4166-4ef5-4d88-b256-b1647a38477f', '', 'Moonshot', 'moonshot-v1-8k', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:58:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490289, 78535985268490288, '1e947d0c-1fd2-48d8-962d-db969b27d9c9', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:58:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490291, 78535985268490290, 'fd2a1b90-67af-4372-8ec2-cec514e526ed', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 15:59:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490292, 78535985268490290, 'chatcmpl-67caa74eb008d8dad1ded023', 'fd2a1b90-67af-4372-8ec2-cec514e526ed', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外自然环境,如公园、植物园或自然保护区。\n- 准备一些简单的自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些自然观察卡片,上面有不同植物、昆虫和动物的图片和名称。\n- 准备一些安全的教育玩具,如昆虫观察盒、植物标本制作工具等。\n- 准备一些简单的自然材料,如树叶、花瓣、小石头等,用于制作自然艺术作品。\n\n活动流程:\n1. 集合与介绍(10分钟)\n - 集合所有参与的儿童和家长。\n - 简短介绍活动目的和流程。\n - 分配自然探索工具给每个儿童。\n\n2. 自然观察游戏(20分钟)\n - 将儿童分成小组,每组配备一名成人监督。\n - 给每个小组发放自然观察卡片,让他们在自然环境中寻找卡片上的植物、昆虫或动物。\n - 鼓励儿童使用放大镜仔细观察,并记录他们的发现。\n\n3. 自然艺术创作(15分钟)\n - 引导儿童收集自然材料,如树叶、花瓣、小石头等。\n - 鼓励儿童发挥创意,使用收集的材料制作自然艺术作品,如树叶拼贴画、石头彩绘等。\n - 每个儿童可以制作一个自然艺术作品,并在活动结束时带回家。\n\n4. 自然知识小课堂(10分钟)\n - 选择一个舒适的地点,让所有儿童围坐在一起。\n - 通过故事或互动游戏的方式,向儿童介绍一些基本的自然科学知识,如植物的生长过程、昆虫的生命周期等。\n - 鼓励儿童分享他们的观察和发现。\n\n5. 活动总结与分享(5分钟)\n - 让每个儿童展示他们的自然艺术作品,并分享他们在活动中的体验和学到的知识。\n - 对儿童的参与和努力给予积极的反馈和鼓励。\n\n6. 清理与告别(10分钟)\n - 引导儿童一起清理活动区域,确保自然环境的整洁。\n - 与儿童和家长告别,感谢他们的参与。\n\n安全注意事项:\n- 确保活动区域安全,避免有危险的地方,如陡坡、深水等。\n- 每个儿童都应该在成人的监督下进行活动。\n- 准备一些基本的急救用品,如创可贴、消毒液等。\n- 确保所有儿童都穿着适合户外活动的衣物和鞋子。\n\n通过这样的活动,4-6岁的儿童不仅能够在自然中获得乐趣,还能在探索和学习中成长。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 15:59:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490294, 78535985268490293, '83b7233c-fe87-4c04-8d17-3b1a4b479069', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:00:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490296, 78535985268490295, '0131c3ab-2703-431c-96a8-b79a7cb4e062', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 15:59:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490298, 78535985268490293, 'chatcmpl-67caa772f856367ab0e04203', '83b7233c-fe87-4c04-8d17-3b1a4b479069', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外环境,如公园、植物园或自然保护区。\n- 准备一些自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些简单的自然知识卡片,上面写有关于植物、昆虫等的基本信息。\n- 准备一些安全的小零食和水,以备活动中补充能量。\n\n活动流程:\n1. 集合与介绍(10分钟)\n - 集合所有参与的儿童和家长。\n - 简短介绍活动目的和流程。\n - 分配自然探索工具给每个儿童。\n\n2. 自然观察游戏(20分钟)\n - 将儿童分成小组,每组由一名家长陪同。\n - 指导儿童使用放大镜观察植物的叶子、花朵和昆虫等。\n - 鼓励儿童描述他们观察到的事物,并记录下来。\n\n3. 寻找自然宝藏(15分钟)\n - 给每个小组一张自然知识卡片,上面有需要寻找的自然物品(如不同颜色的叶子、特定形状的石头等)。\n - 让小组在指定区域内寻找这些自然宝藏,并收集起来。\n\n4. 自然艺术创作(10分钟)\n - 让儿童使用收集到的自然物品(如树叶、花瓣、小石头)进行艺术创作。\n - 可以是拼贴画、自然风铃或者用彩色笔在纸上画出他们观察到的自然景象。\n\n5. 分享与讨论(5分钟)\n - 让每个小组展示他们的自然宝藏和艺术作品。\n - 讨论他们在探索过程中的发现和感受。\n\n6. 活动总结(5分钟)\n - 总结活动,强调自然探索的乐趣和重要性。\n - 鼓励儿童回家后继续探索自然,并与家人分享他们的发现。\n\n7. 清理与告别(5分钟)\n - 确保所有垃圾都被清理干净,保持环境整洁。\n - 与儿童和家长告别,感谢他们的参与。\n\n安全须知:\n- 确保活动区域安全,避免有危险的地方。\n- 家长或监护人应全程陪同儿童,确保他们的安全。\n- 提醒儿童不要触摸可能有毒的植物或昆虫。\n- 准备急救包,以防万一。\n\n通过这样的活动,4-6岁的儿童不仅能够在自然中获得乐趣,还能学习到关于自然的知识,同时培养他们的观察力和创造力。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:00:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490299, 78535985268490297, '3a5c93e7-28cd-4eb1-83d2-2665f5c3988f', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:00:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490301, 78535985268490300, '5b4de2a5-393f-4684-8c87-6129e9832197', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 16:00:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490303, 78535985268490302, '17856f19-d674-4024-aefe-8cd158ad9c62', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 16:00:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490305, 78535985268490304, '791fac3c-612e-4275-87f0-b1f1a05fe9f1', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 16:00:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490306, 78535985268490297, 'chatcmpl-67caa78487f833355ad3f649', '3a5c93e7-28cd-4eb1-83d2-2665f5c3988f', 'Moonshot', 'moonshot-v1-8k', '标题:都市丽人的清晨仪式:唤醒肌肤的自然之光\n\n正文:\n\n在繁忙的都市生活中,每一位女性都渴望拥有一段属于自己的宁静时光。这不仅仅是为了放松身心,更是为了在忙碌的日常中找到那份属于自己的优雅与自信。今天,我们要讲述的是一个关于都市女性如何在清晨的仪式中,唤醒肌肤的自然之光的故事。\n\n小雅,一位30岁的都市白领,每天的生活就像是一场战斗。从早高峰的地铁到办公室的紧张节奏,她总是忙得不可开交。然而,无论多忙,她都会在清晨给自己留出一段特别的时间——她的“美丽仪式”。\n\n这个仪式的第一步,就是使用一款特别的洗面奶。这款洗面奶,我们暂且称之为[X品牌洗面奶],它不仅仅是一款清洁产品,更是小雅肌肤护理的开始。[X品牌洗面奶]以其温和的配方和深层清洁能力,成为了小雅日常护肤不可或缺的一部分。\n\n[X品牌洗面奶]含有天然植物精华,能够在不破坏肌肤天然屏障的前提下,有效去除面部的油脂和污垢。它的泡沫细腻丰富,能够深入毛孔,带走深层的杂质,同时保持肌肤的水油平衡。小雅说,每次使用后,她都能感觉到肌肤的清爽和舒适,仿佛每一个毛孔都在呼吸。\n\n更令人惊喜的是,[X品牌洗面奶]还特别添加了保湿成分,即使在干燥的冬季,也能让肌肤保持水润。小雅的皮肤属于混合型,T区容易出油,而脸颊又容易干燥。[X品牌洗面奶]的保湿效果让她的肌肤在清洁的同时,也得到了充分的滋养。\n\n随着时间的推移,小雅发现,她的肌肤变得更加光滑细腻,肤色也更加均匀。同事们都羡慕她那仿佛从内而外散发的自然光泽。小雅知道,这一切都要归功于她每天的“美丽仪式”,以及[X品牌洗面奶]的神奇效果。\n\n在这个快节奏的时代,我们或许无法改变忙碌的生活,但我们可以选择如何开始新的一天。对于小雅来说,[X品牌洗面奶]不仅仅是一款洗面奶,它是一种生活态度,一种对美的追求,一种在都市中寻找自我的方式。\n\n结语:\n\n每个清晨,当小雅站在镜子前,用[X品牌洗面奶]轻轻按摩她的脸庞时,她知道,这是她与自己对话的时刻,是她唤醒肌肤自然之光的时刻。这不仅仅是一个简单的清洁过程,而是一种仪式,一种让肌肤和心灵都得到净化的仪式。让我们一起,在这个都市的清晨,找到属于自己的那份宁静与美丽。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:00:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490308, 78535985268490307, '5cb372a8-5a78-4194-af0d-51043f95ada9', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:02:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490309, 78535985268490307, 'chatcmpl-67caa81cf6c1fa204074dc9f', '5cb372a8-5a78-4194-af0d-51043f95ada9', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n亲爱的家人与朋友们,\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您加入我们,共同见证爱情在田园间绽放的美妙时刻。我们,[新郎姓名]与[新娘姓名],将在[婚礼]日期这一天,携手步入婚姻的殿堂,开启我们共同的人生旅程。\n\n婚礼主题:浪漫田园\n\n日期:[婚礼具体日期]\n时间:[婚礼开始时间]\n\n地点:[婚礼具体地点]\n地址:[详细地址]\n\n在这片被绿意环绕的田园中,我们将与大自然共同庆祝这份珍贵的爱情。我们希望您能与我们一同感受这份宁静与和谐,分享我们的喜悦与幸福。\n\nRSVP详情:\n为了确保我们能够为您准备最完美的婚礼体验,请在[RSVP截止日期]之前,通过以下方式告知我们您的出席意向:\n\n电话:[新郎或新娘的联系电话]\n邮箱:[新郎或新娘的电子邮箱]\n微信/其他社交媒体:[新郎或新娘的微信或其他社交媒体账号]\n\n我们期待着在这个特别的日子里,与您共同创造难忘的回忆。请携带您的笑容和祝福,与我们一同庆祝这个浪漫田园的婚礼。\n\n爱与期待,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述文案中的细节,以确保请柬的个性化和准确性。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:02:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490311, 78535985268490310, 'd83d6a1c-53ee-4a6e-a200-1c046a9ac275', '', 'Moonshot', 'moonshot-v1-8k', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:03:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490312, 78535985268490310, 'chatcmpl-67caa82f87f833355ad3fcc5', 'd83d6a1c-53ee-4a6e-a200-1c046a9ac275', 'Moonshot', 'moonshot-v1-8k', '作为一名职业规划师,我将帮助你从交友软件产品经理转型成为AI行业的资深产品经理。以下是为你量身定制的职业规划:\n\n### 必备技能和知识:\n\n1. **AI基础知识**:\n - 理解机器学习、深度学习、自然语言处理等AI核心技术。\n - 熟悉AI在不同行业的应用案例。\n\n2. **技术能力**:\n - 掌握至少一种编程语言(如Python),以便与技术团队沟通。\n - 了解数据结构、算法和数据库管理。\n\n3. **产品管理技能**:\n - 深入理解产品生命周期管理(PLM)。\n - 掌握敏捷开发和Scrum框架。\n - 熟悉用户体验(UX)和用户界面(UI)设计原则。\n\n4. **数据分析能力**:\n - 能够使用数据分析工具(如Excel, SQL, R, Tableau)。\n - 理解统计学原理和数据可视化。\n\n5. **项目管理**:\n - 掌握项目管理工具和方法,如PMP或PRINCE2。\n\n6. **沟通与领导力**:\n - 强大的跨部门沟通能力。\n - 领导团队和激励团队成员的能力。\n\n7. **行业知识**:\n - 了解AI行业的最新趋势和法规。\n - 熟悉AI产品在特定行业的应用,如医疗、金融、教育等。\n\n### 行动计划:\n\n1. **技能提升**:\n - 参加在线课程或研讨会,学习AI基础知识和相关技术。\n - 通过实践项目提升编程和数据分析能力。\n\n2. **行业网络构建**:\n - 加入AI相关的专业社群和论坛。\n - 参加行业会议和研讨会,与行业专家建立联系。\n\n3. **实践经验积累**:\n - 在当前工作中寻找与AI相关的项目或任务。\n - 考虑兼职或志愿者工作,以获得AI项目的实际经验。\n\n4. **证书获取**:\n - 考取相关的专业证书,如Google的机器学习证书或PMP项目管理证书。\n\n5. **职业路径规划**:\n - 设定短期和长期的职业目标,并制定实现这些目标的具体步骤。\n - 定期评估职业发展进度,并根据需要调整计划。\n\n6. **求职准备**:\n - 更新简历和LinkedIn资料,突出AI相关的技能和经验。\n - 准备面试,包括技术面试和行为面试。\n\n7. **持续学习**:\n - 订阅AI相关的新闻和博客,保持对行业动态的了解。\n - 定期参加工作坊和培训,以跟上技术发展的步伐。\n\n通过以上计划,你可以逐步从交友软件产品经理转型为AI行业的资深产品经理。记住,这是一个持续的过程,需要你不断地学习、实践和调整策略。祝你在AI行业取得成功!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:03:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490314, 78535985268490313, '8b24a699-d293-4618-a5d7-af5584308810', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:03:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490315, 78535985268490313, 'chatcmpl-67caa858f856367ab0e048a4', '8b24a699-d293-4618-a5d7-af5584308810', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外场地,如公园、植物园或自然保护区。\n- 准备一些自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些简单的自然知识卡片,上面写有动植物的名字和特点。\n- 准备一些安全的小零食和水,供孩子们在活动中补充能量。\n\n活动流程:\n\n1. 集合与介绍(10分钟)\n - 让孩子们围成一个圈,进行自我介绍。\n - 简要介绍活动的目的和规则。\n\n2. 自然寻宝游戏(20分钟)\n - 将孩子们分成小组,每组分发一张自然知识卡片和收集盒。\n - 指导孩子们根据卡片上的描述,在自然环境中寻找相应的动植物。\n - 鼓励孩子们使用放大镜仔细观察,并记录下他们的发现。\n\n3. 自然艺术创作(15分钟)\n - 让孩子们收集一些自然材料,如树叶、花瓣、小石头等。\n - 引导孩子们使用这些材料创作一幅自然艺术作品,可以是拼贴画或自然风的装饰。\n\n4. 自然知识分享(10分钟)\n - 让孩子们回到集合点,轮流展示他们的寻宝成果和艺术作品。\n - 鼓励孩子们分享他们对找到的动植物的观察和感受。\n\n5. 自然游戏(5分钟)\n - 组织一个简单的自然主题游戏,如“我是谁”(孩子们模仿他们找到的动植物),增加活动的趣味性。\n\n6. 结束与反馈(10分钟)\n - 让孩子们围坐在一起,讨论他们最喜欢的活动部分和学到的新知识。\n - 分发小零食和水,让孩子们休息。\n - 收集孩子们的反馈,以便未来改进活动。\n\n安全措施:\n- 确保活动场地安全,没有危险区域或物品。\n- 每个小组至少有一名成人陪同,以确保孩子们的安全。\n- 提前告知家长活动的具体安排和安全措施。\n- 准备急救包,以防万一。\n\n通过这样的活动,4-6岁的儿童不仅能够在自然中获得乐趣,还能在探索和游戏中学习到宝贵的自然科学知识。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:03:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490317, 78535985268490316, 'f6ac8f9e-1f3c-4149-96f5-53d84b0e8a05', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:04:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490318, 78535985268490316, 'chatcmpl-67caa87787f833355ad3ffb9', 'f6ac8f9e-1f3c-4149-96f5-53d84b0e8a05', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我不能直接为您绘制图像,但我可以为您提供一个详细的描述,您可以根据这个描述来绘制这个画面。\n\n1. 首先,我们需要确定画面的主体,即钢铁侠。钢铁侠穿着他的高科技战衣,战衣上的灯光闪烁,与纽约的夜景相呼应。他在空中飞行,身体略微倾斜,以表现出飞行的速度和动感。\n\n2. 接下来,我们需要描绘纽约的夜景。画面的背景是纽约的高楼大厦,建筑的灯光闪烁,形成一幅繁华的夜景。建筑的轮廓线要清晰,以突出建筑的立体感。\n\n3. 画面的构图是全景,所以我们需要描绘出纽约的全景。从左到右,建筑的高度逐渐降低,形成一种透视感。同时,画面的上下也要有足够的空间,以表现出钢铁侠飞行的高度。\n\n4. 画面的视角是平视,所以我们需要从钢铁侠的视角来描绘这个画面。这意味着我们需要将画面的中心放在钢铁侠的头部,而建筑和地面则分布在他的周围。\n\n5. 最后,我们需要在画面中加入一些细节,以增加画面的丰富性。例如,我们可以在钢铁侠的战衣上加入一些细节,如战衣的纹理和战衣上的灯光。同时,我们也可以在建筑上加入一些细节,如建筑的窗户和阳台。\n\n以上就是我为您提供的钢铁侠飞行在纽约上空的画面的详细描述,希望对您有所帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:04:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490319, 78535985268490266, '645f72fb-4a41-4864-8eb3-2416beca2490', '', 'Moonshot', 'moonshot-v1-8k', '1+2', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:04:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490320, 78535985268490266, 'chatcmpl-67caa899f856367ab0e04a97', '645f72fb-4a41-4864-8eb3-2416beca2490', 'Moonshot', 'moonshot-v1-8k', '1 + 2 等于 3.', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:04:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490322, 78535985268490321, '1279f03b-a9ec-4f1e-803e-4936c239dfcb', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-07 16:04:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490324, 78535985268490323, '29fa46c8-6526-4aab-81c8-588afcb8e66a', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:05:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490325, 78535985268490323, 'chatcmpl-67caa8d2b008d8dad1dee254', '29fa46c8-6526-4aab-81c8-588afcb8e66a', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个花开的季节,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[婚礼地点名称]\n[详细地址]\n[城市,邮编]\n\n**仪式时间:**\n[仪式开始时间]\n\n**田园晚宴:**\n[晚宴开始时间]\n\n在这片被绿意环绕的田园中,我们将携手步入婚姻的殿堂,期待与您共同分享这份喜悦与温馨。请携带您最灿烂的笑容,与我们一同感受这份浪漫与甜蜜。\n\n**RSVP详情:**\n为了确保我们能为您准备最完美的田园体验,请在[RSVP截止日期]前,通过以下方式告知您的出席意向:\n\n电话:[联系电话]\n邮箱:[联系邮箱]\n或直接回复此邀请函。\n\n我们期待着在这个特别的日子里,与您共同创造难忘的回忆。\n\n以爱之名,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述模板中的内容,以确保所有信息的准确性和个性化。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:05:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490327, 78535985268490326, 'bdbf0f45-d769-48eb-8939-132afeacff3f', '', 'Moonshot', 'moonshot-v1-8k', '你是一名育儿顾问,请根据以下要求策划一项增添趣味的育儿活动:\n活动主题:[探索自然的奥秘]\n目标年龄段:[4-6岁的儿童]\n活动时长:[1小时]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:06:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490328, 78535985268490326, 'chatcmpl-67caa8e587f833355ad4038e', 'bdbf0f45-d769-48eb-8939-132afeacff3f', 'Moonshot', 'moonshot-v1-8k', '活动名称:自然小探险家\n\n活动目标:\n- 增强儿童对自然环境的好奇心和探索欲。\n- 通过观察和互动,提高儿童的观察力和认知能力。\n- 培养儿童的团队合作精神和社交技能。\n- 让儿童在自然中学习基本的自然科学知识。\n\n活动准备:\n- 选择一个安全的户外场地,如公园、植物园或自然保护区。\n- 准备一些自然探索工具,如放大镜、小铲子、收集盒、彩色笔和纸张。\n- 准备一些自然物品,如不同种类的树叶、石头、昆虫模型等。\n- 准备一些简单的自然知识卡片,用于引导儿童学习和讨论。\n- 准备一些安全须知和规则,确保儿童在活动中的安全。\n\n活动流程:\n1. 集合与介绍(10分钟)\n - 集合所有参与的儿童和家长。\n - 介绍活动主题和目标。\n - 分配自然探索工具给每个儿童。\n\n2. 自然观察(20分钟)\n - 引导儿童在指定区域内自由探索,寻找不同的自然物品。\n - 鼓励儿童使用放大镜观察植物的细节,如叶子的纹理、花朵的形状等。\n - 让儿童收集一些自然物品,如树叶、小石头等。\n\n3. 自然知识分享(15分钟)\n - 让儿童展示他们收集的物品,并分享他们的发现。\n - 通过自然知识卡片,引导儿童学习这些物品的名称和特点。\n - 讨论自然物品的用途和它们在生态系统中的角色。\n\n4. 创意绘画(10分钟)\n - 提供纸张和彩色笔,让儿童画出他们最喜欢的自然物品或他们想象中的自然场景。\n - 鼓励儿童发挥创意,用色彩和形状表达他们对自然的理解和感受。\n\n5. 总结与反馈(5分钟)\n - 让儿童分享他们的绘画作品,并讨论他们在活动中的感受和学到的知识。\n - 家长和儿童一起讨论活动的意义,以及如何将自然探索的乐趣融入日常生活中。\n\n安全须知:\n- 确保所有参与者都了解基本的安全规则,如不触摸有毒植物、不追逐野生动物等。\n- 活动中应有成人监督,确保儿童的安全。\n- 准备一些基本的急救用品,如创可贴、消毒液等,以防万一。\n\n通过这样的活动,4-6岁的儿童不仅能够在自然中获得乐趣,还能在探索和学习中成长。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:06:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490329, 78535985268490266, '9da5598a-3268-4497-a0e6-49e01e561e55', '', 'Moonshot', 'moonshot-v1-8k', '/**\n * 流式响应\n *\n */\n public Boolean streamChat(HttpServletResponse response, ChatCompletion chat, Long chatId, String parentMessageId, String version, String uid, Boolean isWs) {\n chat.stream = true;\n try {\n Request request = new Request.Builder().url(ApiConstant.CHAT_COMPLETION_URL)\n .addHeader(AuthConstant.JWT_TOKEN_HEADER, AuthConstant.JWT_TOKEN_PREFIX + this.apiKey)\n .post(RequestBody.create(MediaType.parse(ContentType.JSON.getValue()), new ObjectMapper().writeValueAsString(chat))).build();\n Response callResponse = okHttpClient.newCall(request).execute();\n if (callResponse.code() != 200) {\n log.error(\"月之暗面流式响应失败: {}\", callResponse.body().string());\n return true;\n }\n SSEListener sseListener = new SSEListener(response, chatId, parentMessageId, version, uid, isWs);\n return sseListener.streamChat(callResponse);\n } catch (Exception e) {\n return true;\n }\n }\n\n\n这是我流方响应 的接口,请求次数多了他就会异常', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:06:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490330, 78535985268490266, 'chatcmpl-67caa90f2cf02d8f8e614808', '9da5598a-3268-4497-a0e6-49e01e561e55', 'Moonshot', 'moonshot-v1-8k', '从您提供的代码片段来看,您正在实现一个流式响应接口,该接口通过HTTP请求与服务器进行通信,并使用Server-Sent Events (SSE)来流式传输数据。如果请求次数多了导致异常,可能有几个原因:\n\n1. **资源限制**:服务器可能对并发连接数有限制,当请求过多时,超过了服务器的处理能力。\n\n2. **内存泄漏**:如果每次请求都没有正确释放资源,可能会导致内存泄漏,随着请求的增加,最终导致内存溢出。\n\n3. **异常处理**:代码中的异常处理可能不够完善,导致异常没有被正确捕获和处理。\n\n4. **服务器配置**:服务器可能没有配置好以处理高并发请求。\n\n5. **网络问题**:网络延迟或不稳定可能导致请求超时或失败。\n\n6. **API限制**:第三方API可能有请求频率限制。\n\n为了解决这个问题,您可以尝试以下几个步骤:\n\n- **优化异常处理**:确保所有的异常都被正确捕获,并记录详细的错误信息,这样可以帮助您更快地定位问题。\n\n- **资源管理**:确保每次请求后都正确释放资源,比如关闭HTTP连接。\n\n- **限流**:在客户端实现请求限流,避免在短时间内发送大量请求。\n\n- **服务器优化**:检查服务器配置,确保它能够处理高并发请求。\n\n- **监控**:实施实时监控,以便在问题发生时立即发现并采取措施。\n\n- **API调用限制**:如果问题是由于第三方API的限制,您可能需要调整请求策略,或者与API提供者沟通以提高请求限额。\n\n- **代码审查**:对代码进行审查,检查是否有潜在的问题,比如不正确的资源管理或逻辑错误。\n\n- **压力测试**:对系统进行压力测试,以确定在何种负载下系统会崩溃,并据此优化系统。\n\n如果您能提供更多的异常信息或者日志,可能会更容易确定问题的具体原因。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:06:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490331, 78535985268490266, 'cf3346b3-7c4d-4404-b267-499ed4ad3b80', '', 'Moonshot', 'moonshot-v1-8k', '1+2', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:08:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490332, 78535985268490266, 'chatcmpl-67caa977f856367ab0e0510f', 'cf3346b3-7c4d-4404-b267-499ed4ad3b80', 'Moonshot', 'moonshot-v1-8k', '1 + 2 等于 3.', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:08:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490333, 78535985268490266, 'f1b3a8a8-1206-48c2-9c49-dca516eba086', '', 'Moonshot', 'moonshot-v1-8k', '3+9', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:08:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490334, 78535985268490266, 'chatcmpl-67caa97cf4060e09115d925c', 'f1b3a8a8-1206-48c2-9c49-dca516eba086', 'Moonshot', 'moonshot-v1-8k', '3 + 9 equals 12.', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:08:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490335, 78535985268490266, '71d54083-2885-4e6a-bb8b-d35317d9051d', '', 'Moonshot', 'moonshot-v1-8k', '12 = 122', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-07 16:08:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490336, 78535985268490266, 'ab9ebd5c-3ac3-41f9-b08f-bf544641a659', '', 'Moonshot', 'moonshot-v1-8k', '123123', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-07 16:08:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490337, 78535985268490266, '6def2c0a-cd10-4946-a259-499d5ba669bd', '', 'Moonshot', 'moonshot-v1-8k', '123123', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-07 16:08:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490338, 78535985268490266, '9b0f3714-686e-4ae1-aecd-de53e7bb6e24', '', 'Moonshot', 'moonshot-v1-8k', '234234', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-07 16:08:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490339, 78535985268490266, 'de661b6c-1e72-4e8c-98bb-1e64710ff071', '', 'Moonshot', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:09:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490340, 78535985268490266, 'chatcmpl-67caa9a287f833355ad40aab', 'de661b6c-1e72-4e8c-98bb-1e64710ff071', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"234\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:09:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490342, 78535985268490341, 'a15c9c75-5119-494b-9f27-eb83d3003d9c', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 16:09:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490343, 78535985268490341, 'chatcmpl-67caa9c0f856367ab0e05337', 'a15c9c75-5119-494b-9f27-eb83d3003d9c', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度分析男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,无法及时回复消息。\n\n2. **沟通习惯**:\n - 有些人不习惯频繁查看手机,或者不喜欢即时通讯。\n\n3. **情感状态**:\n - 他可能心情不好,不想与人交流,或者你们之间可能存在一些未解决的问题。\n\n4. **技术问题**:\n - 手机信号不好,或者手机出现了技术故障。\n\n5. **个人空间需求**:\n - 有些人需要更多的个人空间和时间,可能不想被频繁打扰。\n\n6. **关系变化**:\n - 他可能对你们的关系有了新的看法,或者不再那么投入。\n\n### 合理的建议和解决方法:\n\n1. **沟通和理解**:\n - 找一个合适的时间,以平和的态度询问他为什么回消息慢,了解他的真实情况。\n\n2. **设定期望**:\n - 讨论并设定双方都能接受的沟通频率和方式,以减少误解。\n\n3. **给予空间**:\n - 尊重他的个人空间和时间,不要过度依赖即时通讯。\n\n4. **共同活动**:\n - 增加面对面的交流和共同活动,减少对即时通讯的依赖。\n\n5. **解决潜在问题**:\n - 如果你们之间存在问题,尝试一起解决,以改善沟通。\n\n6. **自我反思**:\n - 思考自己是否过于依赖即时通讯,或者是否给对方足够的空间。\n\n7. **技术检查**:\n - 如果怀疑是技术问题,建议他检查手机设置或寻求技术支持。\n\n8. **情感支持**:\n - 如果他心情不好,提供情感支持,让他知道你在乎他的感受。\n\n9. **调整期望**:\n - 如果他需要更多的个人空间,尝试调整你的期望,找到平衡点。\n\n10. **专业咨询**:\n - 如果问题复杂,考虑寻求情感咨询师的帮助,以获得专业的指导。\n\n记住,每个人的情况都是独特的,所以最重要的是通过开放和诚实的沟通来理解对方,并找到适合你们两个人的解决方案。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 16:09:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490345, 78535985268490344, '1dd40a2b-f4ac-493d-a421-2c44f641d35a', '', 'Moonshot', 'moonshot-v1-8k', '你是一名资深的婚礼文案师,需要为一对新人撰写一份婚礼请柬。\n主题:[浪漫田园]\n文案要点:[包含新人的名字、婚礼日期、地点、RSVP详情]', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:18:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490346, 78535985268490344, 'chatcmpl-67caabb8f6c1fa204074f693', '1dd40a2b-f4ac-493d-a421-2c44f641d35a', 'Moonshot', 'moonshot-v1-8k', '当然,以下是一份以“浪漫田园”为主题的婚礼请柬文案示例。请根据实际情况替换新人的名字、婚礼日期、地点和RSVP详情。\n\n---\n\n**[浪漫田园婚礼请柬]**\n\n亲爱的 [收件人姓名],\n\n在这个充满生机与希望的季节里,我们诚挚地邀请您与我们一同步入爱的田园,见证我们的爱情之花绽放。\n\n**新人名字:**\n新郎:[新郎姓名]\n新娘:[新娘姓名]\n\n**婚礼日期:**\n[具体日期],[年份]\n\n**地点:**\n[婚礼地点名称]\n[详细地址]\n[城市,邮编]\n\n**仪式时间:**\n[仪式开始时间]\n\n**田园晚宴:**\n[晚宴开始时间]\n\n在这片被绿意环绕的田园中,我们将携手步入婚姻的殿堂,期待与您共同分享这份喜悦与温馨。请穿上您最舒适的衣物,与我们一起在自然的怀抱中庆祝这个特别的日子。\n\n**RSVP详情:**\n为了确保我们能够为您准备最完美的田园体验,请在[RSVP截止日期]前通过以下方式告知您的出席意向:\n\n电话:[联系电话]\n邮箱:[联系邮箱]\n或通过[RSVP网站链接/二维码]\n\n我们期待着在这个浪漫田园中与您相聚,共同创造难忘的回忆。\n\n以爱之名,\n[新郎姓名] & [新娘姓名]\n\n---\n\n请根据实际情况调整上述模板中的内容,以确保请柬的个性化和准确性。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:18:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490348, 78535985268490347, '2292dbdd-37ac-4531-8aff-f2801cc6ab2c', '', 'Moonshot', 'moonshot-v1-8k', '你是一名面临重要考试的大学生,需要在最后一个月内高效复习。\n请根据以下要求制定你的复习计划:\n复习目标:[线性代数获得95分]\n复习时间:[每天1小时]\n要求:\n明确指出具体的复习目标,包括所有需要掌握的科目和知识点。\n将复习目标细化为每周或每天的具体任务,给出整个月都复习排期表,以便跟踪进度。', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:21:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490349, 78535985268490347, 'chatcmpl-67caac772cf02d8f8e615e87', '2292dbdd-37ac-4531-8aff-f2801cc6ab2c', 'Moonshot', 'moonshot-v1-8k', '为了在一个月内高效复习线性代数并达到95分的目标,你需要一个详细的复习计划。以下是一个可能的复习计划,包括每周和每天的具体任务,以及整个月的复习排期表。\n\n### 复习目标:\n- 线性代数:95分\n- 掌握所有线性代数的基本概念、定理、性质和解题技巧。\n\n### 需要掌握的科目和知识点:\n1. 向量空间\n2. 线性变换\n3. 矩阵理论\n4. 特征值和特征向量\n5. 二次型\n6. 线性方程组\n7. 欧几里得空间\n8. 正交性和最小二乘法\n9. 行列式\n10. 矩阵分解\n\n### 复习排期表:\n\n#### 第1周:基础概念和向量空间\n- **周一至周五:**\n - 每天复习1小时,重点理解向量空间的定义、性质和例子。\n - 完成相关的习题,加深理解。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第2周:线性变换和矩阵理论\n- **周一至周五:**\n - 每天复习1小时,学习线性变换的定义、性质和矩阵表示。\n - 完成相关的习题,特别是矩阵运算。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第3周:特征值、特征向量和二次型\n- **周一至周五:**\n - 每天复习1小时,深入理解特征值和特征向量的概念,以及二次型的性质。\n - 完成相关的习题,特别是特征值和特征向量的计算。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第4周:线性方程组和欧几里得空间\n- **周一至周五:**\n - 每天复习1小时,学习线性方程组的解法,包括高斯消元法和矩阵分解。\n - 完成相关的习题,特别是解线性方程组。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第5周:正交性、最小二乘法和行列式\n- **周一至周五:**\n - 每天复习1小时,学习正交性和最小二乘法的概念,以及行列式的计算。\n - 完成相关的习题,特别是正交矩阵的性质和最小二乘法的应用。\n- **周六:**\n - 复习本周内容,解决疑难问题。\n - 做一套模拟题,检查掌握情况。\n- **周日:**\n - 休息或轻松复习,整理笔记。\n\n#### 第6周:综合复习和模拟考试\n- **周一至周五:**\n - 每天复习1小时,综合复习所有知识点,查漏补缺。\n - 每天做一套模拟题,模拟考试环境。\n- **周六:**\n - 总结模拟考试中的错误和不足,针对性复习。\n- **周日:**\n - 休息或轻松复习,调整心态,准备考试。\n\n### 注意事项:\n- 每天的复习时间固定为1小时,但可以根据实际情况适当调整。\n- 每周的模拟题和疑难问题解决是关键,可以帮助你及时发现并解决问题。\n- 保持健康的作息和饮食习惯,确保有足够的精力进行复习。\n- 保持积极的心态,相信自己能够达到目标。\n\n通过这样的复习计划,你可以系统地复习线性代数的所有知识点,并在考试中取得优异的成绩。祝你好运!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:21:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490351, 78535985268490350, 'e30c92ac-10ff-4dd7-be41-d200d8909878', '', 'Moonshot', 'moonshot-v1-8k', '现在是几号', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:27:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490352, 78535985268490350, 'chatcmpl-67caaddf2cf02d8f8e61678f', 'e30c92ac-10ff-4dd7-be41-d200d8909878', 'Moonshot', 'moonshot-v1-8k', '今天是2023年11月23日。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:27:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490353, 78535985268490350, '0d1916fa-f558-4763-845d-3c4b302a759e', '', 'Moonshot', 'moonshot-v1-8k', '为什么你不能联网?', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:27:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78535985268490354, 78535985268490350, 'chatcmpl-67caadf8f6c1fa2040750735', '0d1916fa-f558-4763-845d-3c4b302a759e', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我实际上是可以联网的。我能够访问互联网来搜索信息,以便为您提供准确的答案和建议。如果您觉得我不能联网,可能是因为以下原因:\n\n1. 网络连接问题:请检查您的设备是否连接到互联网。如果设备没有连接到互联网,我将无法访问网络资源。\n\n2. 系统故障:可能是我的系统出现了故障,导致无法正常访问网络。这种情况下,您可以尝试重启设备或联系技术支持。\n\n3. 权限问题:请确保您已授予我访问网络的权限。如果没有权限,我将无法访问网络资源。\n\n4. 网络限制:某些网络环境可能限制了访问外部资源的能力。这种情况下,您可能需要更换网络环境或联系网络管理员。\n\n如果您仍然遇到问题,请提供更多详细信息,以便我为您提供更具体的帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:27:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78557756457715712, 78535985268490350, '8ea494ed-dc09-4153-b41b-4f7fe00a5c3d', '', 'Moonshot', 'moonshot-v1-8k', '123', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:46:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78557756457715713, 78535985268490350, 'chatcmpl-67cab275f6c1fa2040752726', '8ea494ed-dc09-4153-b41b-4f7fe00a5c3d', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能只是输入了一串数字 \"123\"。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:46:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78557756457715714, 78535985268490350, '7bc30eed-f645-4cdb-95ca-12ac5863befd', '', 'Moonshot', 'moonshot-v1-8k', '12412', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 16:46:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78557756457715715, 78535985268490350, 'chatcmpl-67cab283f4060e09115dd1fa', '7bc30eed-f645-4cdb-95ca-12ac5863befd', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"12412\",但似乎没有提供任何具体的问题或上下文。如果您需要关于这个数字的特定信息,或者有任何问题,请随时告诉我,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 16:46:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78557756457715716, 78535985268490350, '5e40a488-85f1-4e01-b2ec-9be833004265', '', 'Moonshot', 'moonshot-v1-8k', '11', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-07 16:48:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78560462287114241, 78560462287114240, '79ba7b99-e8dd-43a6-857f-b97231a4f5a6', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 17:02:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78560462287114242, 78560462287114240, 'chatcmpl-67cab5c587f833355ad471fe', '79ba7b99-e8dd-43a6-857f-b97231a4f5a6', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度分析男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,无法及时回复消息。\n\n2. **沟通习惯**:\n - 有些人不习惯频繁查看手机,或者不喜欢即时通讯。\n\n3. **情感状态**:\n - 他可能心情不好,不想与人交流,或者你们之间可能存在一些未解决的问题。\n\n4. **技术问题**:\n - 手机可能存在技术问题,如信号不好、电量不足或应用故障。\n\n5. **个人空间需求**:\n - 有些人需要更多的个人空间和时间,可能不会立即回复。\n\n6. **关系变化**:\n - 你们的关系可能正在经历变化,他可能在重新评估你们的关系。\n\n### 合理建议和解决方法:\n\n1. **沟通和理解**:\n - 找一个合适的时间,以平和的态度询问他是否最近很忙,或者是否有什么事情让他分心。\n\n2. **设定期望**:\n - 讨论并设定双方对于回复消息的期望,比如在特定时间内回复,或者提前告知可能的忙碌期。\n\n3. **给予空间**:\n - 尊重他的个人空间和时间,不要过度解读他的回复速度。\n\n4. **技术检查**:\n - 如果怀疑是技术问题,可以建议他检查手机设置或寻求技术支持。\n\n5. **情感支持**:\n - 如果他心情不好,提供情感支持,让他知道你在乎他的感受。\n\n6. **关系评估**:\n - 如果感觉关系有变化,可以开诚布公地讨论你们的关系状态和未来。\n\n7. **自我反思**:\n - 考虑自己是否对回复速度有不切实际的期望,或者是否过于依赖即时通讯。\n\n8. **共同活动**:\n - 增加面对面的交流和共同活动,减少对即时通讯的依赖。\n\n9. **信任建立**:\n - 建立信任,相信他不回消息并不是不在乎你,而是可能有其他原因。\n\n10. **专业咨询**:\n - 如果这个问题对你们的关系造成了严重影响,考虑寻求情感咨询师的帮助。\n\n记住,每个人的沟通方式和习惯都不同,重要的是找到适合你们双方的沟通方式,并在此基础上建立健康的关系。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 17:01:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78562493806646272, 78560462287114240, '46858de0-28fe-4f7e-b536-c4270c94910f', '', 'Moonshot', 'moonshot-v1-8k', '14', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 17:02:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78562493806646273, 78560462287114240, 'chatcmpl-67cab63ab008d8dad1df70fb', '46858de0-28fe-4f7e-b536-c4270c94910f', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能只发送了一个数字 \"14\",但没有提供任何上下文或问题。如果您有任何具体的问题或需要帮助,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 17:02:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78562493806646274, 78560462287114240, '7cba9e48-2d7c-4f85-817e-deef620f795b', '', 'Moonshot', 'moonshot-v1-8k', '234', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-07 17:03:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78562493806646275, 78560462287114240, 'chatcmpl-67cab6502cf02d8f8e619ce9', '7cba9e48-2d7c-4f85-817e-deef620f795b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"234\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-07 17:03:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78579957143680001, 78579957143680000, 'b3f745aa-79b6-4f98-9141-39345d14d128', '', 'Moonshot', 'moonshot-v1-8k', '你是一位出色的软文写手,请根据以下要求,为一个产品撰写软性广告文章:\n产品名称:[X品牌洗面奶]\n目标用户:[20-35岁的都市女性]\n内容要求:[自然融入产品参数和功能解读,结合用户故事或产品体验]\n创作要点:[隐蔽推广,文章主题与产品关联不明显]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 18:38:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78579957143680002, 78579957143680000, 'chatcmpl-67cacc9374f0583d72e006b5', 'b3f745aa-79b6-4f98-9141-39345d14d128', 'Moonshot', 'moonshot-v1-8k', '标题:都市丽人的清晨仪式:唤醒肌肤的自然之光\n\n正文:\n\n在这个快节奏的都市生活中,每一位女性都在寻找属于自己的那份宁静与美好。清晨,当第一缕阳光透过窗帘,轻轻地拂过脸颊,我们开始了新的一天。而对于20-35岁的都市女性来说,这个时刻不仅仅是一天的开始,更是一场与自己肌肤的私密对话。\n\n小雅,一位典型的都市白领,每天的生活就像是一场精心编排的舞蹈。她穿梭在高楼大厦之间,面对着电脑屏幕的蓝光,肌肤承受着无形的压力。然而,无论多忙,她都会在清晨给自己一个特别的仪式——使用[X品牌洗面奶],唤醒肌肤的自然之光。\n\n[X品牌洗面奶],以其温和而有效的配方,成为了小雅每日护肤的第一步。它含有的天然植物精华,能够深层清洁肌肤,去除一夜的油脂和污垢,同时保持肌肤的水油平衡。小雅说:“每次使用后,我都能感受到肌肤的清新和舒适,仿佛所有的疲惫都被一扫而空。”\n\n这款洗面奶的泡沫细腻而丰富,能够深入毛孔,带走隐藏的污垢,让肌肤呼吸畅通。小雅特别喜欢它那淡淡的植物香气,每次洗脸都像是在进行一场小型的芳香疗法,让她的心情也随之变得愉悦。\n\n而且,[X品牌洗面奶]的pH值接近肌肤的自然酸碱度,这意味着它非常温和,不会对肌肤造成刺激。对于小雅这样经常需要化妆的女性来说,这一点尤为重要。它不仅能够清洁肌肤,还能为后续的护肤和化妆打下良好的基础。\n\n小雅的故事,或许也是你的故事。在这个忙碌的世界里,我们都需要找到一种方式,让自己的肌肤得到呵护,让自己的心情得到放松。[X品牌洗面奶],不仅仅是一款产品,它是一种生活态度,一种对美的追求,一种对自我的关爱。\n\n结语:\n\n在这个清晨,让我们一起用[X品牌洗面奶]唤醒肌肤的自然之光,迎接新的一天。因为,每一天的开始,都值得我们用心去对待。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 18:38:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78579957143680003, 78579957143680000, '8d88891c-2110-4494-a668-8b0b83885804', '', 'Moonshot', 'moonshot-v1-8k', '自我介绍,来一段', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-07 18:41:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78579957143680004, 78579957143680000, 'chatcmpl-67cacd42e686a99b0a7464af', '8d88891c-2110-4494-a668-8b0b83885804', 'Moonshot', 'moonshot-v1-8k', '你好!我是Kimi,一个由月之暗面科技有限公司(Moonshot AI)开发的人工智能助手。我擅长中英文对话,并且能够提供安全、有帮助、准确的回答。无论你有什么问题,只要在我的能力范围内,我都会尽力帮助你。现在,有什么可以为你服务的吗?', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-07 18:41:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396992, 78535985268490341, 'de5935ee-1c69-445d-a802-4665d1ce7b00', '', 'Moonshot', 'moonshot-v1-8k', '321321', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 10:31:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396993, 78535985268490341, 'chatcmpl-67cbabf0f856367ab0e4d1c3', 'de5935ee-1c69-445d-a802-4665d1ce7b00', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"321321\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 10:31:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396995, 78815729373396994, 'b6178a90-0623-43a1-ac67-f75fc0c93d06', '', 'Moonshot', 'moonshot-v1-8k', '3213', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 10:31:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396996, 78815729373396994, 'chatcmpl-67cbabf8f856367ab0e4d1ea', 'b6178a90-0623-43a1-ac67-f75fc0c93d06', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"3213\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 10:31:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396998, 78815729373396997, '52dc43fd-cdc1-4581-8d00-0e5e5dbc133e', '', 'Moonshot', 'moonshot-v1-8k', '32131', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 10:31:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373396999, 78815729373396994, '3c2ed820-6470-40f2-9eba-0313fdc359d2', '', 'Moonshot', 'moonshot-v1-8k', '321321', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 10:31:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373397001, 78815729373397000, '17d7a58d-07da-4bfd-a228-39d67f8f66fe', '', 'Moonshot', 'moonshot-v1-8k', '321321', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 10:31:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373397003, 78815729373397002, 'bd1bc505-1e13-4ba1-8fba-4de4dd3612d8', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 15:31:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78815729373397004, 78815729373397002, 'chatcmpl-67cbf226389d06f4b11511e9', 'bd1bc505-1e13-4ba1-8fba-4de4dd3612d8', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3)\n \n username_input = self.driver.find_element(By.ID, \'loginname\')\n password_input = self.driver.find_element(By.ID, \'nloginpwd\')\n login_button = self.driver.find_element(By.ID, \'loginsubmit\')\n \n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n login_button.click()\n time.sleep(3)\n\n def navigate_to_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3)\n \n buy_button = self.driver.find_element(By.ID, \'J_LinkBuy\')\n buy_button.click()\n time.sleep(3)\n\n def buy_product(self):\n buy_button = self.driver.find_element(By.ID, \'J_Go\')\n buy_button.click()\n time.sleep(3)\n \n confirm_button = self.driver.find_element(By.ID, \'submitOrder\')\n confirm_button.click()\n time.sleep(3)\n\n def run(self):\n while True:\n current_time = time.strftime(\'%Y-%m-%d %H:%M:%S\', time.localtime(time.time()))\n if current_time >= self.buy_time:\n self.login()\n self.navigate_to_product()\n self.buy_product()\n break\n else:\n time.sleep(60)\n\nif __name__ == \'__main__\':\n username = \'your_username\'\n password = \'your_password\'\n target_url = \'https://www.example.com/login\'\n target_product_url = \'https://www.example.com/product\'\n buy_time = \'2023-11-11 00:00:00\'\n \n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:封装了自动登录、导航到商品页面和购买商品的方法。\n2. `login` 方法:自动登录购物网站。\n3. `navigate_to_product` 方法:导航到预设商品的页面。\n4. `buy_product` 方法:自动购买商品。\n5. `run` 方法:循环检查当前时间,当达到预设的购买时间时,执行登录、导航和购买操作。\n\n请根据你的实际需求,替换脚本中的用户名、密码、目标URL和购买时间等参数。希望这个脚本能帮助你实现双十一自动抢购的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 15:31:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207169, 78911494259207168, 'faef8ec5-069f-4500-90df-f19738fef2ad', '', 'Internlm', 'moonshot-v1-8k', '343242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 15:39:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207170, 78560462287114240, 'e4ce57a6-643c-45d1-b9c3-86e61b68db8b', '', 'Moonshot', 'moonshot-v1-8k', '你能解析文件吗', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:46:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207171, 78560462287114240, 'chatcmpl-67cc03cbf4060e0911634461', 'e4ce57a6-643c-45d1-b9c3-86e61b68db8b', 'Moonshot', 'moonshot-v1-8k', '当然可以,我可以帮助解析文本文件、PDF、Word文档、PPT幻灯片和Excel电子表格等格式的文件。请上传您需要解析的文件,我会阅读文件内容并根据您的问题提供相应的回答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:46:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207173, 78911494259207172, 'b30c5a91-1d1d-4279-a4f8-37d272a7cacf', '', 'Moonshot', 'moonshot-v1-8k', '你能分析文件吗', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:46:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207174, 78911494259207172, 'chatcmpl-67cc03ee9d17a5d9d0800cfb', 'b30c5a91-1d1d-4279-a4f8-37d272a7cacf', 'Moonshot', 'moonshot-v1-8k', '当然,我可以分析文件。请上传您想要我分析的文件,无论是TXT、PDF、Word文档、PPT幻灯片还是Excel电子表格等格式。上传文件后,我会阅读内容并根据您的问题提供相应的分析和回答。请注意,我能够处理的文件总字数上限为20万字。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:46:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207175, 78911494259207168, 'e1530b4f-834c-49c7-bc1e-c72f5e2d7d7e', '', 'Internlm', 'moonshot-v1-8k', '32432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207176, 78911494259207168, '753a15b6-b781-4e9c-b397-35e9b5b9ff39', '', 'Internlm', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207177, 78911494259207168, '41966758-bb68-46bc-b847-3cb5a46db3a1', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207178, 78911494259207168, 'chatcmpl-67cc0421f4060e09116345ed', '41966758-bb68-46bc-b847-3cb5a46db3a1', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207179, 78911494259207168, 'f53a512f-a063-4783-baa2-de1f02a9df87', '', 'Moonshot', 'moonshot-v1-8k', '43243242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207180, 78911494259207168, 'chatcmpl-67cc043b14278be9fbb354ad', 'f53a512f-a063-4783-baa2-de1f02a9df87', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"43243242\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:47:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207182, 78911494259207181, '30696130-7c68-4719-bc8e-489be65ed94e', '', 'Moonshot', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:48:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207183, 78911494259207181, 'chatcmpl-67cc044f14278be9fbb35569', '30696130-7c68-4719-bc8e-489be65ed94e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字序列 \"432432432\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:48:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207184, 78911494259207172, 'bf4695cc-f682-42f3-9cf7-78651c37f8ca', '', 'Moonshot', 'moonshot-v1-8k', '我可以传文件的https地址给你解析吗', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-08 16:48:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207185, 78911494259207172, 'chatcmpl-67cc046d14278be9fbb356af', 'bf4695cc-f682-42f3-9cf7-78651c37f8ca', 'Moonshot', 'moonshot-v1-8k', '当然可以。请提供您想要解析的文件的HTTPS地址,我会尽力帮助您解析文件内容。请注意,我能够处理的文件类型包括TXT、PDF、Word文档、PPT幻灯片和Excel电子表格等。如果您有其他类型的文件需要解析,请告诉我,我会尽力提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-08 16:48:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207187, 78911494259207186, '5faa66aa-fb4c-431e-ac9f-1c8f1a06b849', '', 'Moonshot', 'moonshot-v1-8k', '我可以传文件的https地址给你解析吗', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-08 16:48:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207188, 78911494259207186, '7f0d99b1-0397-4d96-a4a4-567379a203bc', '', 'Moonshot', 'moonshot-v1-8k', '我可以传文件的https地址给你解析吗', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-08 16:49:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207189, 78911494259207186, 'chatcmpl-67cc0484f856367ab0e7150e', '7f0d99b1-0397-4d96-a4a4-567379a203bc', 'Moonshot', 'moonshot-v1-8k', '当然可以。请提供您想要解析的文件的HTTPS地址,我会尽力帮助您解析文件内容。请注意,我能够处理的文件类型包括TXT、PDF、Word文档、PPT幻灯片和Excel电子表格等。如果您有其他类型的文件需要解析,请告诉我,我会尽力提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-08 16:49:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207190, 78911494259207181, '8d1e5f3a-c5ec-4f53-a557-5217b684e505', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:51:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207191, 78911494259207181, 'chatcmpl-67cc05169d17a5d9d08015af', '8d1e5f3a-c5ec-4f53-a557-5217b684e505', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:51:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207193, 78911494259207192, '90f663e5-9d4f-4656-8646-c19c5b219682', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:51:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207194, 78911494259207192, 'chatcmpl-67cc051e9d17a5d9d08015e9', '90f663e5-9d4f-4656-8646-c19c5b219682', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:51:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207195, 78911494259207186, '36d5063e-20f5-4769-a2a1-505955133af2', '', 'Moonshot', 'moonshot-v1-8k', 'https://file.xubomei.com/33333333333.pptx\n\n帮我解析这个文件', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-08 16:52:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207196, 78911494259207186, 'chatcmpl-67cc0564f4060e0911634c71', '36d5063e-20f5-4769-a2a1-505955133af2', 'Moonshot', 'moonshot-v1-8k', '很抱歉,作为一个AI助手,我无法直接访问或解析外部链接或文件。但是,我可以提供一些建议来帮助您解析PPTX文件。\n\n1. 使用Microsoft PowerPoint:您可以使用Microsoft PowerPoint打开和编辑PPTX文件。只需双击文件,它将自动在PowerPoint中打开。\n\n2. 使用在线转换器:您可以使用在线转换器将PPTX文件转换为其他格式,如PDF或图片。这样,您可以在不支持PPTX的设备上查看文件。一些流行的在线转换器包括Smallpdf、ILovePDF和Zamzar。\n\n3. 使用其他办公软件:一些其他办公软件,如Google幻灯片和LibreOffice Impress,也可以打开和编辑PPTX文件。\n\n4. 提取文本:如果您只需要提取PPTX文件中的文本,可以使用在线OCR(光学字符识别)工具,如OnlineOCR、Adobe Acrobat或ABBYY FineReader。\n\n请尝试这些方法来解析您的PPTX文件。如果您有其他问题或需要进一步的帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-08 16:52:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207198, 78911494259207197, 'c35bdbd1-b570-4eb2-ba48-3e98c64bdd95', '', 'Moonshot', 'moonshot-v1-8k', '43242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 16:59:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207199, 78911494259207197, 'chatcmpl-67cc06f625b38bb7baaf7764', 'c35bdbd1-b570-4eb2-ba48-3e98c64bdd95', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"43242\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 16:59:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207201, 78911494259207200, '1a69caca-fec2-45fc-817e-f9f12d90bfb3', '', 'Moonshot', 'moonshot-v1-8k', '432432423', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:15:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207202, 78911494259207200, 'chatcmpl-67cc0abcf856367ab0e736e3', '1a69caca-fec2-45fc-817e-f9f12d90bfb3', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字序列 \"432432423\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:15:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207203, 78911494259207197, '5fda11ff-8098-4720-bd22-e55354dab5d3', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:15:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207204, 78911494259207197, 'chatcmpl-67cc0ac69743347cdf3dec18', '5fda11ff-8098-4720-bd22-e55354dab5d3', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:15:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207206, 78911494259207205, '6944c40a-4626-45c2-b00c-1987178606cc', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 17:15:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207208, 78911494259207207, '23a6464f-53f7-4fc2-bf17-bf8d1d82d631', '', 'Moonshot', 'moonshot-v1-8k', '画一个钢铁侠飞行在纽约上空的画面,夜景中建筑灯光闪烁,全景构图,平视视角。', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:17:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207209, 78911494259207207, 'chatcmpl-67cc0b0bf856367ab0e73823', '23a6464f-53f7-4fc2-bf17-bf8d1d82d631', 'Moonshot', 'moonshot-v1-8k', '作为一个AI助手,我不能直接为您绘制图像,但我可以为您提供一个详细的描述,您可以根据这个描述来绘制图像。\n\n1. 首先,我们需要确定画面的主体,即钢铁侠。钢铁侠穿着他的高科技战衣,战衣上的灯光闪烁,与纽约夜景中的建筑灯光相呼应。他在空中飞行,身体略微倾斜,以表现出飞行的速度和动感。\n\n2. 接下来,我们需要描绘纽约的夜景。画面的背景是纽约的摩天大楼,建筑的灯光闪烁,营造出繁华的都市氛围。我们可以选择一些著名的建筑,如帝国大厦、自由女神像等,作为画面的焦点。\n\n3. 画面的构图是全景,这意味着我们需要展示整个纽约市的景观。我们可以将画面分为三个部分:前景、中景和远景。前景是钢铁侠,中景是纽约的建筑,远景是远处的天际线。\n\n4. 画面的视角是平视,这意味着我们的视线与画面中的物体保持水平。这有助于我们更好地观察和描绘画面中的物体。\n\n5. 最后,我们需要考虑画面的色彩和光影。夜景中的建筑灯光以暖色调为主,与钢铁侠战衣上的冷色调形成对比。同时,我们需要注意光影的处理,以增强画面的立体感和深度。\n\n希望这个描述能帮助您绘制出一幅钢铁侠飞行在纽约上空的画面。如果您需要进一步的帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:17:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207210, 78911494259207207, 'e2f50b24-2b1b-4dfd-8a5b-ef37a2eb3c1b', '', 'Moonshot', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:17:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207211, 78911494259207207, 'chatcmpl-67cc0b3f25b38bb7baaf9429', 'e2f50b24-2b1b-4dfd-8a5b-ef37a2eb3c1b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字序列 \"432432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:17:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207212, 78911494259207207, 'fa35e64d-aa0b-4fd0-9317-4bbda079fde2', '', 'Moonshot', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:18:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207213, 78911494259207207, 'chatcmpl-67cc0b4af856367ab0e73918', 'fa35e64d-aa0b-4fd0-9317-4bbda079fde2', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:18:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207215, 78911494259207214, 'e90b774f-6b8a-430d-a7a0-4a873d0cbc84', '', 'Moonshot', 'moonshot-v1-8k', '432432423', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:18:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207216, 78911494259207214, 'chatcmpl-67cc0b5c14278be9fbb3954b', 'e90b774f-6b8a-430d-a7a0-4a873d0cbc84', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432423\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:18:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207218, 78911494259207217, 'e8987453-6135-43e1-88a6-37b500381121', '', 'Moonshot', 'moonshot-v1-8k', '432432423', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 17:18:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207219, 78911494259207217, 'f07ca9f8-429a-45f6-a145-40097ade3dd7', '', 'Moonshot', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 17:18:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207220, 78911494259207217, 'c40b3c54-2df9-4781-8d00-98933fd13697', '', 'Moonshot', 'moonshot-v1-8k', '43242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:19:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207221, 78911494259207217, 'chatcmpl-67cc0bb514278be9fbb397e9', 'c40b3c54-2df9-4781-8d00-98933fd13697', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"43242\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:19:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207223, 78911494259207222, 'b4ae139d-71a0-4751-b86c-20dfe5b797ee', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:21:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207224, 78911494259207222, 'chatcmpl-67cc0c1814278be9fbb39baa', 'b4ae139d-71a0-4751-b86c-20dfe5b797ee', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:21:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207226, 78911494259207225, '5e919820-a1ad-4373-ae0c-e5e4ec318744', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:23:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207227, 78911494259207225, 'chatcmpl-67cc0c839743347cdf3df3c7', '5e919820-a1ad-4373-ae0c-e5e4ec318744', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:23:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207229, 78911494259207228, '59a41e1f-7393-4a54-ad46-624017432e3e', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:23:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207230, 78911494259207228, 'chatcmpl-67cc0c9214278be9fbb39fae', '59a41e1f-7393-4a54-ad46-624017432e3e', 'Moonshot', 'moonshot-v1-8k', '好的,我将为你设计一个基于Python和selenium库的双十一自动抢购脚本。这个脚本将使用面向对象编程方式,实现自动登录购物网站和定时抢购预设商品的功能。\n\n首先,你需要确保已经安装了Python和selenium库。如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n接下来,你需要下载对应浏览器的WebDriver,例如ChromeDriver或GeckoDriver,并将其路径添加到系统环境变量中。\n\n以下是双十一自动抢购脚本的代码:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, username, password, target_url, target_product_url, buy_time):\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_product_url = target_product_url\n self.buy_time = buy_time\n self.driver = webdriver.Chrome()\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(3) # 等待页面加载\n\n # 输入用户名和密码\n username_input = self.driver.find_element(By.ID, \"username\")\n password_input = self.driver.find_element(By.ID, \"password\")\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n\n # 点击登录按钮\n login_button = self.driver.find_element(By.ID, \"login\")\n login_button.click()\n time.sleep(3) # 等待登录成功\n\n def buy_product(self):\n self.driver.get(self.target_product_url)\n time.sleep(3) # 等待页面加载\n\n # 点击立即购买按钮\n buy_button = self.driver.find_element(By.ID, \"buy\")\n buy_button.click()\n time.sleep(3) # 等待跳转到结算页面\n\n # 点击提交订单按钮\n submit_button = self.driver.find_element(By.ID, \"submit\")\n submit_button.click()\n time.sleep(3) # 等待订单提交成功\n\n def run(self):\n self.login()\n time.sleep(10) # 等待到抢购时间\n\n # 循环抢购商品\n while True:\n current_time = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n if current_time >= self.buy_time:\n self.buy_product()\n break\n time.sleep(60) # 每分钟检查一次时间\n\nif __name__ == \"__main__\":\n username = \"your_username\"\n password = \"your_password\"\n target_url = \"https://www.example.com/login\"\n target_product_url = \"https://www.example.com/product\"\n buy_time = \"2023-11-11 00:00:00\"\n\n auto_buyer = AutoBuyer(username, password, target_url, target_product_url, buy_time)\n auto_buyer.run()\n```\n\n这个脚本的主要功能如下:\n\n1. `AutoBuyer` 类:用于自动登录和抢购商品。\n2. `__init__` 方法:初始化用户名、密码、目标URL、目标商品URL和抢购时间。\n3. `login` 方法:自动登录购物网站。\n4. `buy_product` 方法:自动抢购预设商品。\n5. `run` 方法:运行抢购脚本,等待到抢购时间后执行抢购操作。\n\n你可以根据实际需求修改用户名、密码、目标URL和抢购时间等参数。希望这个脚本能帮助你实现双十一自动抢购的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:23:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207232, 78911494259207231, '75434cdc-3775-41f6-a4f8-a4e3c961f024', '', 'Moonshot', 'moonshot-v1-8k', '4324高浮雕高浮雕', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:24:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207233, 78911494259207231, 'chatcmpl-67cc0cc614278be9fbb3a146', '75434cdc-3775-41f6-a4f8-a4e3c961f024', 'Moonshot', 'moonshot-v1-8k', '\"高浮雕\"是一种雕塑艺术形式,它指的是在平面上雕刻出立体形象,使形象从背景中凸起,但并不完全脱离背景。这种技术可以使雕塑作品具有更强的立体感和视觉冲击力。高浮雕在艺术史上有着悠久的传统,被广泛应用于建筑装饰、纪念碑、雕塑等。\n\n4324这个数字可能是指某个具体的高浮雕作品的编号或者是某个特定项目或系列中的一个作品。然而,没有更多的上下文信息,很难确定这个数字具体指的是什么。如果你能提供更多的信息或者上下文,我将能够给出更准确的回答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:24:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207235, 78911494259207234, '932ffd7c-14ae-4767-940c-3d43e1f255aa', '', 'Moonshot', 'moonshot-v1-8k', '543543543', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:24:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207236, 78911494259207234, 'chatcmpl-67cc0cdff856367ab0e740b4', '932ffd7c-14ae-4767-940c-3d43e1f255aa', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"543543543\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:24:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207237, 78911494259207234, 'ee71e9dd-1fb9-4769-bff5-8ad066a3fa49', '', 'Moonshot', 'moonshot-v1-8k', '范德萨范德萨', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:25:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207238, 78911494259207234, 'chatcmpl-67cc0cfef856367ab0e74137', 'ee71e9dd-1fb9-4769-bff5-8ad066a3fa49', 'Moonshot', 'moonshot-v1-8k', '范德萨(Edwin van der Sar)是一位已退役的荷兰足球运动员,他在球场上的位置是守门员。范德萨出生于1970年10月29日,他的职业生涯非常成功,曾效力于阿贾克斯、尤文图斯、富勒姆和曼联等俱乐部。在曼联,他赢得了多个英超联赛冠军和欧洲冠军联赛冠军。范德萨以其出色的守门技巧、领导能力和职业精神而闻名。\n\n范德萨也是荷兰国家队的重要成员,代表荷兰参加了多次国际大赛,包括世界杯和欧洲杯。他在2011年退役,结束了自己辉煌的足球生涯。退役后,范德萨曾担任阿贾克斯的CEO,现在则是荷兰国家队的总经理。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:25:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207240, 78911494259207239, '142a31f3-c1b3-4424-84e6-b884b1cf02f3', '', 'Moonshot', 'moonshot-v1-8k', '给DVD发v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:25:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207241, 78911494259207239, 'chatcmpl-67cc0d0ef6c1fa20407cd572', '142a31f3-c1b3-4424-84e6-b884b1cf02f3', 'Moonshot', 'moonshot-v1-8k', '看起来您可能想要发送一个DVD,但是提供的信息不够完整。如果您需要帮助,请提供更多的上下文或具体问题,我会尽力为您提供帮助。以下是一些可能的解释和建议:\n\n1. **发送DVD**:如果您想要通过邮件发送DVD,您需要确保将其妥善包装以防止损坏,并选择一个可靠的快递服务。您可能还需要考虑目的地国家的进口限制和关税。\n\n2. **DVD内容**:如果您是在询问如何将内容从DVD复制到电脑或其他设备,您需要使用DVD驱动器和相应的软件来读取和复制数据。\n\n3. **DVD播放器问题**:如果您的DVD播放器有问题,您可能需要检查连接、清洁激光头或考虑更换播放器。\n\n4. **DVD制作**:如果您是在询问如何制作DVD,您需要视频编辑软件来编辑视频,然后使用刻录软件将视频刻录到DVD。\n\n请提供更多的,信息以便我能更准确地回答您的问题。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:25:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207243, 78911494259207242, '1171a27b-70dc-4add-ba32-61a7739a5995', '', 'Moonshot', 'moonshot-v1-8k', '风大是否v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:26:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207244, 78911494259207242, 'chatcmpl-67cc0d30f856367ab0e74230', '1171a27b-70dc-4add-ba32-61a7739a5995', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您的问题可能是不完整的,或者可能是一个打字错误。如果您是在询问“风大是否”后面应该接什么,那么这可能取决于您想要表达的具体内容。例如,您可能想问的是“风大是否影响出行?”或者“风大是否会导致温度下降?”如果您能提供更多的上下文或者完整的问题,我会很乐意帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:26:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207245, 78911494259207242, 'c8d5996f-2d8e-4c50-846a-92a7adea1ae8', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 17:26:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207246, 78911494259207242, '632a1afc-861a-4264-9d01-e2f1eecd356a', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 17:26:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207247, 78911494259207242, 'f81f23fe-2476-4dce-b515-b4920f94f68b', '', 'Moonshot', 'moonshot-v1-8k', '43242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:27:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207248, 78911494259207242, 'chatcmpl-67cc0d7b9743347cdf3df74f', 'f81f23fe-2476-4dce-b515-b4920f94f68b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"43242\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:27:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207249, 78911494259207239, '036440c7-f822-4b15-86eb-39119fcb9316', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:27:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207250, 78911494259207239, 'chatcmpl-67cc0d86f6c1fa20407cd7b2', '036440c7-f822-4b15-86eb-39119fcb9316', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:27:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207252, 78911494259207251, '7217ccd0-1d06-4cdf-821c-0352e266d095', '', 'Moonshot', 'moonshot-v1-8k', '广泛大概v ', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:29:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207253, 78911494259207251, 'chatcmpl-67cc0de4f4060e0911636f8c', '7217ccd0-1d06-4cdf-821c-0352e266d095', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试输入一些信息,但是提供的内容“广泛大概v”似乎不完整或者不清晰。如果您有任何问题或者需要帮助,请提供更多的上下文或者详细描述您的问题,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:29:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207255, 78911494259207254, 'cd1c60dc-befc-46b1-aaac-0f0f054131d5', '', 'Moonshot', 'moonshot-v1-8k', '432424', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:30:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207256, 78911494259207254, 'chatcmpl-67cc0e439743347cdf3df996', 'cd1c60dc-befc-46b1-aaac-0f0f054131d5', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432424\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:30:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207258, 78911494259207257, '948d97c5-68db-4b71-bd63-8728ebf9a552', '', 'Moonshot', 'moonshot-v1-8k', '一天可以提供', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:32:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207259, 78911494259207257, 'chatcmpl-67cc0ea6f4060e091163721d', '948d97c5-68db-4b71-bd63-8728ebf9a552', 'Moonshot', 'moonshot-v1-8k', '一天可以提供很多不同的服务和活动,具体取决于您的需求和兴趣。以下是一些例子:\n\n1. **工作和学习**:一天可以提供8小时的工作或学习时间,这取决于您的工作或学习安排。\n\n2. **休息和睡眠**:一天通常包括7-9小时的睡眠时间,以确保身体和大脑得到充分的休息。\n\n3. **饮食**:一天可以提供3餐,有些人可能还会包括小吃或夜宵。\n\n4. **锻炼和运动**:一天可以提供时间进行体育活动,如跑步、游泳、健身等。\n\n5. **娱乐和休闲**:一天可以提供时间进行娱乐活动,如看电影、阅读、玩游戏等。\n\n6. **社交活动**:一天可以提供时间与家人、朋友进行社交互动。\n\n7. **个人发展**:一天可以提供时间进行个人发展活动,如学习新技能、阅读自我提升的书籍等。\n\n8. **家务和日常事务**:一天可以提供时间处理家务和日常事务,如清洁、购物、支付账单等。\n\n9. **旅行和探索**:如果有足够的时间和资源,一天也可以提供短途旅行或探索新地方的机会。\n\n10. **志愿服务和社区参与**:一天可以提供时间参与志愿服务或社区活动,为他人提供帮助。\n\n请告诉我您具体需要一天提供什么,我可以提供更具体的建议或信息。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:32:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207261, 78911494259207260, '30de7375-5f5a-4bdc-8aed-db971878e610', '', 'Moonshot', 'moonshot-v1-8k', '435人非常 从 ', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:33:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207262, 78911494259207260, 'chatcmpl-67cc0ed925b38bb7baafa7fc', '30de7375-5f5a-4bdc-8aed-db971878e610', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您的问题没有完整地表达出来。“435人非常 从”这个句子似乎缺少了一些关键信息。如果您能提供更多的上下文或者完整的问题,我会很乐意帮助您。比如,您是想要了解关于435人的某个特定情况,还是需要从某个地方获取435人的信息?请提供更多细节,以便我能更准确地回答您的问题。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:33:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207264, 78911494259207263, '0c9713d3-2d11-46ce-ab2e-ff7df95731fb', '', 'Moonshot', 'moonshot-v1-8k', '你是一名职业规划师,专注于AI行业,请根据以下要求设计个性化职业规划:\n当前职业定位:[交友软件产品经理]\n未来职业目标:[成为AI行业资深产品经理]\n必备技能和知识:[请根据市面上的招聘要求告诉我达成我的目标必备的知识和技能]\n行动计划:[请提供具体可执行的计划]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:33:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207265, 78911494259207263, 'chatcmpl-67cc0ee2f6c1fa20407cde94', '0c9713d3-2d11-46ce-ab2e-ff7df95731fb', 'Moonshot', 'moonshot-v1-8k', '作为一名职业规划师,我将为你设计一个从交友软件产品经理转型成为AI行业资深产品经理的职业规划。以下是你需要掌握的必备技能和知识,以及一个具体的行动计划。\n\n### 必备技能和知识:\n\n1. **AI基础知识**:\n - 理解机器学习、深度学习、自然语言处理等AI核心技术。\n - 熟悉AI在不同行业的应用案例。\n\n2. **编程能力**:\n - 掌握至少一种编程语言,如Python,因为它在AI领域广泛使用。\n - 了解AI相关的库和框架,如TensorFlow、PyTorch、Keras等。\n\n3. **数据分析能力**:\n - 能够使用数据分析工具(如R、Python的Pandas库)进行数据清洗、分析和可视化。\n - 理解统计学原理,能够进行假设检验和模型评估。\n\n4. **项目管理能力**:\n - 掌握敏捷开发方法论,如Scrum或Kanban。\n - 能够管理跨职能团队,协调不同部门的工作。\n\n5. **产品管理技能**:\n - 深入理解用户需求和市场趋势。\n - 能够制定产品路线图和优先级。\n - 掌握用户体验(UX)设计原则。\n\n6. **沟通与协作能力**:\n - 能够与技术团队、业务团队和高层管理人员有效沟通。\n - 具备跨文化沟通能力,尤其是在全球化的AI领域。\n\n7. **行业知识**:\n - 了解AI行业的最新动态和法规。\n - 熟悉AI在特定行业的应用,如医疗、金融、自动驾驶等。\n\n### 行动计划:\n\n1. **技能提升**:\n - 参加在线课程或工作坊,学习AI和机器学习的基础知识。\n - 通过项目实践来提升编程和数据分析能力。\n\n2. **项目经验**:\n - 在当前工作中寻找机会,将AI技术应用到产品中,积累实际经验。\n - 参与开源项目或个人项目,以展示你的技术能力和项目管理能力。\n\n3. **建立网络**:\n - 加入AI和产品管理相关的社群,如LinkedIn群组、Meetup等。\n - 参加行业会议和研讨会,与行业专家建立联系。\n\n4. **获取认证**:\n - 考虑获得AI相关的专业认证,如Google的机器学习证书或AWS的AI认证。\n\n5. **职业转换**:\n - 在准备好后,开始申请AI行业的产品经理职位。\n - 准备一份强调你的AI知识和项目管理经验的简历和求职信。\n\n6. **持续学习**:\n - 随着AI技术的快速发展,持续学习新技能和知识是非常重要的。\n - 订阅行业博客、杂志和新闻通讯,保持对最新趋势的了解。\n\n7. **反馈与调整**:\n - 在实施计划的过程中,定期评估进展,并根据反馈进行调整。\n\n通过以上步骤,你可以逐步从交友软件产品经理转型为AI行业的资深产品经理。记住,这是一个持续的过程,需要耐心和持续的努力。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:33:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207267, 78911494259207266, 'e25596c6-572a-4fdf-a654-12f045766145', '', 'Moonshot', 'moonshot-v1-8k', '股份大股东', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:34:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207268, 78911494259207266, 'chatcmpl-67cc0f1014278be9fbb3b1ce', 'e25596c6-572a-4fdf-a654-12f045766145', 'Moonshot', 'moonshot-v1-8k', '股份大股东指的是在一家公司中持有较大比例股份的股东。这些股东通常对公司的决策和运营有较大的影响力。以下是一些关于股份大股东的关键点:\n\n1. **持股比例**:大股东通常持有公司5%以上的股份,但这个比例可能因公司和地区的不同而有所差异。\n\n2. **决策权**:大股东在公司的重要决策中拥有较大的发言权,包括选举董事会成员、批准重大交易和公司政策等。\n\n3. **控制权**:在某些情况下,大股东可能拥有足够的股份来控制公司,即所谓的控股股东。\n\n4. **影响公司战略**:大股东可能会推动公司采取符合其利益的战略,这可能包括扩张、并购、分红政策等。\n\n5. **风险与责任**:作为大股东,他们对公司的财务健康和声誉负有较大的责任。如果公司表现不佳,大股东的投资可能会遭受损失。\n\n6. **监管要求**:在许多国家和地区,大股东需要遵守特定的监管要求,包括披露持股信息和交易行为。\n\n7. **市场影响**:大股东的行动,如增持或减持股份,可能会对公司的股价产生影响。\n\n8. **利益冲突**:大股东可能会面临利益冲突,特别是当他们的个人利益与公司或其他股东的利益不一致时。\n\n9. **公司治理**:大股东在公司治理中扮演重要角色,他们的参与对于确保公司透明度和公平性至关重要。\n\n10. **社会责任**:随着对企业社会责任(CSR)的重视增加,大股东也被期望在环境保护、社会贡献等方面发挥领导作用。\n\n了解股份大股东的角色和责任对于投资者、公司管理层以及监管机构都非常重要,以确保公司的健康运营和市场的公平性。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:34:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207269, 78911494259207263, 'ea832cc6-a210-4b20-829e-3208c3e3068c', '', 'Moonshot', 'moonshot-v1-8k', '北方的吧', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:34:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207270, 78911494259207263, 'chatcmpl-67cc0f22f4060e0911637410', 'ea832cc6-a210-4b20-829e-3208c3e3068c', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在谈论北方的某个话题,但是您的问题不够具体。北方可以指很多不同的事物,比如地理位置、文化、气候等。如果您能提供更多的上下文或者具体的问题,我会很乐意帮助您。比如,您可能想了解北方的旅游景点、美食、历史或者文化特色等。请随时告诉我您具体的需求!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:34:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207272, 78911494259207271, 'fb16973a-8247-482d-acc8-be8e1c7dd845', '', 'Moonshot', 'moonshot-v1-8k', '写出选择从', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:35:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207273, 78911494259207271, 'chatcmpl-67cc0f4ff856367ab0e74b56', 'fb16973a-8247-482d-acc8-be8e1c7dd845', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您的问题没有完整地表达出来。“选择从”这个短语后面应该有一些具体的选项或者上下文。如果您能提供更多的信息,我会很乐意帮助您做出选择或者提供相关的建议。比如,如果您需要在几个选项中做出选择,您可以列出这些选项,我会帮您分析每个选项的利弊。如果您是在寻找某种资源或者信息,也可以详细描述您的需求,我会尽力为您提供帮助。期待您的回复!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:35:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207275, 78911494259207274, 'bca41d48-91e6-4b1f-b1dc-3b665a718c3b', '', 'Moonshot', 'moonshot-v1-8k', '惹到我台风', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:35:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207276, 78911494259207274, 'chatcmpl-67cc0f6414278be9fbb3b413', 'bca41d48-91e6-4b1f-b1dc-3b665a718c3b', 'Moonshot', 'moonshot-v1-8k', '“惹到我台风”这个表达听起来像是在说某人或某事引起了你的强烈情绪反应,就像台风一样猛烈和不可预测。如果你需要帮助处理这种情况,或者想要讨论如何平息情绪,我可以提供一些建议或者倾听你的想法。如果你有具体的问题或者需要解决的事情,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:35:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207278, 78911494259207277, '08dadc5d-6cf7-4c21-911d-65f8ca130474', '', 'Moonshot', 'moonshot-v1-8k', '特务共分为v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:36:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207279, 78911494259207277, 'chatcmpl-67cc0f85f4060e0911637569', '08dadc5d-6cf7-4c21-911d-65f8ca130474', 'Moonshot', 'moonshot-v1-8k', '特务(spy)是指那些从事秘密情报收集、破坏、暗杀等活动的人员。他们通常为政府、军队或其他组织工作,以获取对手或敌对势力的敏感信息。特务可以分为以下几种类型:\n\n1. 情报收集员(Intelligence Collector):负责收集有关敌对势力的情报,包括政治、经济、军事等方面的信息。\n\n2. 破坏者(Saboteur):执行破坏任务,如破坏敌方设施、设备或基础设施,以削弱敌方实力。\n\n3. 暗杀者(Assassin):负责暗杀敌方重要人物,如政治家、军事领导人等,以影响敌方决策和行动。\n\n4. 双重间谍(Double Agent):同时为两个敌对势力工作,向双方提供情报,以获取信任和保护。\n\n5. 网络间谍(Cyber Spy):通过计算机和网络技术,窃取敌方敏感信息,破坏敌方网络系统。\n\n6. 卧底(Undercover Agent):潜入敌方组织,伪装成敌方成员,以获取内部情报。\n\n7. 心理战专家(Psychological Warfare Specialist):通过传播虚假信息、制造恐慌等手段,影响敌方士气和民心。\n\n这些特务类型并不是完全独立的,他们之间可能存在交叉和重叠。特务的具体任务和行动取决于他们所服务的组织和目标。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:36:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207280, 78911494259207251, '659f058b-c619-4fbb-9dc2-814c96960d3f', '', 'Moonshot', 'moonshot-v1-8k', '特温特沃他认为', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:36:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207281, 78911494259207251, 'chatcmpl-67cc0fb125b38bb7baafabfb', '659f058b-c619-4fbb-9dc2-814c96960d3f', 'Moonshot', 'moonshot-v1-8k', '特温特沃(Twente Waterloop)是荷兰的一个地区,位于荷兰东部,靠近德国边境。这个地区以其丰富的水资源和独特的地理环境而闻名,包括许多运河、河流和湖泊。特温特沃地区是荷兰的一个重要工业区,特别是在纺织和农业领域。\n\n如果您有关于特温特沃的具体问题或者需要更详细的信息,请随时告诉我,我会尽力提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:36:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207282, 78911494259207263, '97b8ed3f-9602-4533-9a2e-ccf6e96fda19', '', 'Moonshot', 'moonshot-v1-8k', '法大师傅大师傅', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:37:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207283, 78911494259207263, 'chatcmpl-67cc0fcaf6c1fa20407ce2e2', '97b8ed3f-9602-4533-9a2e-ccf6e96fda19', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试使用一些不太常见的表达方式。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持和信息。无论是法律咨询、技术问题还是其他任何事项,只要告诉我具体内容,我都会尽我所能为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:37:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207284, 78911494259207263, '603de81f-3b78-4ff0-96dc-242837366688', '', 'Moonshot', 'moonshot-v1-8k', '法大师傅大师傅', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:37:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207285, 78911494259207263, 'chatcmpl-67cc0fd9f856367ab0e74da5', '603de81f-3b78-4ff0-96dc-242837366688', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试用中文表达“法大师傅”或“大师傅”,这可能是对某个人或职业的称呼。在中国,“师傅”是对有技艺或技能的人的尊称,比如厨师、工匠等。而“法大”可能是指“法律大学”或“法学”相关的领域。如果您有具体的问题或需要帮助,请详细说明,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:37:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207287, 78911494259207286, 'a30d74b0-f856-49ab-a541-cf557bb0794d', '', 'Moonshot', 'moonshot-v1-8k', '热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:39:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207288, 78911494259207286, 'chatcmpl-67cc103cf4060e0911637774', 'a30d74b0-f856-49ab-a541-cf557bb0794d', 'Moonshot', 'moonshot-v1-8k', '“热望”这个词在中文里通常指的是强烈的渴望或期望。它可以用来描述一个人对某件事情的极度向往和追求。例如,一个人可能对成功、爱情、知识或任何其他目标抱有热望。\n\n如果你是在寻求某种帮助或信息,请提供更多的上下文,这样我可以更准确地理解你的需求并提供相应的帮助。如果你有具体的问题或需要解决的事情,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:39:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207291, 78911494259207289, 'd64f4c9a-4fe5-4b06-abe5-0f5cb06ed3e0', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-08 17:43:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207292, 78911494259207290, 'fa2a8103-8fd9-4142-b43c-1fdaf994c876', '', 'Moonshot', 'moonshot-v1-8k', '你是一名情感分析师,请为以下要求分析情况并提供建议:\n问题描述:[男朋友回消息很慢]\n分析要求:[分析可能的情况,给出合理的建议和解决方法]', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-08 17:42:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207293, 78911494259207289, 'chatcmpl-67cc1124f4060e0911637acb', 'd64f4c9a-4fe5-4b06-abe5-0f5cb06ed3e0', 'Moonshot', 'moonshot-v1-8k', '作为一名情感分析师,我会从多个角度来分析你男朋友回消息很慢的情况,并提供一些建议和解决方法。\n\n### 可能的情况分析:\n\n1. **忙碌的工作或学习**:\n - 他可能正忙于工作或学习,无法及时回复消息。\n\n2. **沟通习惯**:\n - 有些人不习惯频繁查看手机,或者不喜欢即时通讯。\n\n3. **情感状态**:\n - 他可能在情感上有些疏远,或者对关系有所保留。\n\n4. **技术问题**:\n - 手机问题、网络问题或者应用故障都可能导致消息延迟。\n\n5. **个人空间需求**:\n - 有些人需要更多的个人空间,不喜欢被频繁打扰。\n\n6. **关系动态变化**:\n - 你们的关系可能正在经历一些变化,他可能在重新评估你们的关系。\n\n### 合理的建议和解决方法:\n\n1. **沟通和理解**:\n - 找一个合适的时间,以平和的方式表达你的感受和担忧,询问他是否有特别的原因导致回复慢。\n\n2. **设定期望**:\n - 讨论并设定双方都能接受的沟通频率和方式,以减少误解。\n\n3. **给予空间**:\n - 尊重他的个人空间和时间,不要过度解读他的回复速度。\n\n4. **共同活动**:\n - 增加面对面的互动,减少对即时通讯的依赖。\n\n5. **自我反思**:\n - 思考自己是否也有回复慢的时候,以及这是否影响了你们的关系。\n\n6. **技术检查**:\n - 确认双方的通讯设备和网络状况良好,排除技术问题。\n\n7. **情感支持**:\n - 如果他正在经历困难时期,提供情感支持,而不是压力。\n\n8. **专业咨询**:\n - 如果问题持续存在,考虑寻求情感咨询师的帮助。\n\n9. **调整期望**:\n - 理解并接受每个人都有不同的沟通风格和需求。\n\n10. **信任建立**:\n - 通过共同的经历和时间来建立和加强信任。\n\n记住,每段关系都是独特的,有效的沟通和相互理解是解决问题的关键。保持开放的心态,愿意倾听和适应,可以帮助你们的关系更加稳固。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-08 17:43:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207295, 78911494259207294, 'a6d289c4-5edd-456e-b849-df44b3d6e2ea', '', 'Moonshot', 'moonshot-v1-8k', '43243242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:46:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207296, 78911494259207294, 'chatcmpl-67cc11e99743347cdf3e0463', 'a6d289c4-5edd-456e-b849-df44b3d6e2ea', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"43243242\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:46:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207297, 78911494259207286, 'eba377e3-a637-4ae9-b17f-f9166e5abf1d', '', 'Moonshot', 'moonshot-v1-8k', '恶趣味我去饿', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:46:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207298, 78911494259207286, 'chatcmpl-67cc120214278be9fbb3c73e', 'eba377e3-a637-4ae9-b17f-f9166e5abf1d', 'Moonshot', 'moonshot-v1-8k', '看起来您可能是在用拼音输入法输入时出现了错误,导致句子没有意义。如果您有任何问题或需要帮助,请重新输入您的问题,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:46:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207300, 78911494259207299, 'e0de71d2-53d5-4f23-bc05-22a4d83fd717', '', 'Moonshot', 'moonshot-v1-8k', '热望热望人', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 17:47:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207301, 78911494259207299, 'chatcmpl-67cc1219f4060e0911637d8f', 'e0de71d2-53d5-4f23-bc05-22a4d83fd717', 'Moonshot', 'moonshot-v1-8k', '“热望热望人”这个表达在中文里可能是不完整的,或者可能是一个打字错误。如果你是想表达对某人或某事的强烈渴望,那么可能你想要说的是“热切盼望”或者“热望”。\n\n如果你有更具体的问题或者需要帮助,请提供更多的上下文,我会尽力帮助你。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 17:47:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207302, 78911494259207274, '17be5331-dd6e-4f9e-b122-ccdc8dc9019c', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:13:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207303, 78911494259207274, 'chatcmpl-67cc182c14278be9fbb3f673', '17be5331-dd6e-4f9e-b122-ccdc8dc9019c', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:13:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207305, 78911494259207304, '2f0a1375-47d3-42cb-b4d5-78461835532b', '', 'Moonshot', 'moonshot-v1-8k', '43432432的方式v东西', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:13:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207306, 78911494259207304, 'chatcmpl-67cc1861f856367ab0e77571', '2f0a1375-47d3-42cb-b4d5-78461835532b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您的问题可能包含了一些输入错误或者不完整的信息。\"43432432的方式v东西\"这个表达不太清楚您想要询问的具体内容。如果您能提供更多的上下文或者重新表述您的问题,我会很乐意帮助您。\n\n如果您是在询问某种特定的计算、解释或者对某个概念的解释,请尽量提供详细的信息,这样我才能更准确地为您提供帮助。如果这是一个关于数字、代码或者其他专业领域的查询,请尽量详细描述您的需求。谢谢!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:13:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207308, 78911494259207307, '0d326948-2387-44b8-9f33-3bad4c50fe62', '', 'Moonshot', 'moonshot-v1-8k', '热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:14:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207309, 78911494259207307, 'chatcmpl-67cc1888f4060e09116395ed', '0d326948-2387-44b8-9f33-3bad4c50fe62', 'Moonshot', 'moonshot-v1-8k', '“热望”这个词在中文里通常指的是强烈的渴望或期望。它可以用来描述对某个目标、梦想或者愿望的强烈追求和向往。例如,一个人可能对成功、爱情、知识或个人成就有着热望。\n\n如果你有特定的目标或梦想,并且想要实现它们,那么“热望”就是你内心驱动力的体现。这种强烈的渴望可以激励你采取行动,克服困难,最终实现你的愿望。\n\n如果你需要关于如何实现你的热望的建议或者有其他问题,随时可以告诉我,我会尽力帮助你。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:14:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207311, 78911494259207310, 'a9bf6d58-0004-49b1-a2be-86162db059fb', '', 'Moonshot', 'moonshot-v1-8k', '热望热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:14:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207312, 78911494259207310, 'chatcmpl-67cc189625b38bb7baafdb16', 'a9bf6d58-0004-49b1-a2be-86162db059fb', 'Moonshot', 'moonshot-v1-8k', '“热望”这个词在中文里通常表示强烈的渴望或期望。如果你多次重复“热望”,可能是在强调这种渴望的程度非常强烈。如果你有什么具体的事情让你感到如此热望,或者需要帮助实现你的愿望,请告诉我,我会尽力提供帮助和建议。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:14:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207314, 78911494259207313, '2514084d-85c5-49c8-953b-d9caff284aba', '', 'Moonshot', 'moonshot-v1-8k', '特特问题', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 18:14:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207316, 78911494259207315, '3cbf6ec4-e4ca-4cc3-9814-742e0021a8cd', '', 'Moonshot', 'moonshot-v1-8k', 'r额外热舞', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:15:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207317, 78911494259207315, 'chatcmpl-67cc18b6f856367ab0e7771e', '3cbf6ec4-e4ca-4cc3-9814-742e0021a8cd', 'Moonshot', 'moonshot-v1-8k', '\"额外热舞\"这个短语可能是对某种舞蹈或者舞蹈风格的非正式描述。在不同的语境下,它可能有不同的含义。如果你是指某种特定的舞蹈风格或者想要了解更多关于舞蹈的信息,请提供更多的上下文或者具体的问题,这样我可以更好地帮助你。如果你是在寻找某种舞蹈的名称或者想要了解如何跳这种舞蹈,也请详细说明,我会尽力提供相关的信息。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:15:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207319, 78911494259207318, 'b53f7976-ca4b-4550-b86c-9ec91509a6d9', '', 'Moonshot', 'moonshot-v1-8k', '封杀封杀', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:20:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207320, 78911494259207318, 'chatcmpl-67cc19eff4060e0911639b97', 'b53f7976-ca4b-4550-b86c-9ec91509a6d9', 'Moonshot', 'moonshot-v1-8k', '“封杀”这个词通常指的是在某些领域或行业中,对某个人或组织进行限制或禁止,使其无法继续在该领域内活动。这种做法可能出于多种原因,比如违反了行业规定、法律问题、道德问题等。在不同的情境下,封杀的具体含义和执行方式可能会有所不同。\n\n如果你有关于封杀的具体问题或者需要了解更多信息,请提供更多的上下文,我会尽力提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:20:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207321, 78911494259207318, 'fb4c0a10-7306-4111-8ae8-5f0a69833fe6', '', 'Moonshot', 'moonshot-v1-8k', '32421421', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:22:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207322, 78911494259207318, 'chatcmpl-67cc1a489743347cdf3e2295', 'fb4c0a10-7306-4111-8ae8-5f0a69833fe6', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"32421421\"。请问您需要我为您做些什么?如果您有任何问题或者需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:22:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207324, 78911494259207323, 'a899d155-a4c7-429e-bd71-e68728c2de50', '', 'Moonshot', 'moonshot-v1-8k', '额外全额完全', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:22:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207325, 78911494259207323, 'chatcmpl-67cc1a58f4060e0911639d75', 'a899d155-a4c7-429e-bd71-e68728c2de50', 'Moonshot', 'moonshot-v1-8k', '\"额外全额完全\"这个短语看起来像是几个词汇的组合,但没有明确的上下文,很难确定其确切含义。这个短语可能是指:\n\n1. **额外的全额支付**:在金融或商业交易中,可能指除了正常支付之外的额外全额支付。\n2. **完全额外的金额**:指一个完整的、额外的金额,与主要金额分开。\n3. **全额的额外补偿**:在保险或赔偿中,可能指除了基本赔偿之外的额外全额补偿。\n\n如果你能提供更多的上下文或详细信息,我可以给出更准确的解释或帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:22:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207327, 78911494259207326, '4708ba6a-80e0-460f-9bd5-8d67ae7fcdaa', '', 'Moonshot', 'moonshot-v1-8k', '饿我去饿我去恶趣味', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 18:22:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207328, 78911494259207326, '0d4d3971-1357-455b-9a13-414b78feaf6e', '', 'Moonshot', 'moonshot-v1-8k', '额我确认范围', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:24:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207329, 78911494259207326, 'chatcmpl-67cc1ac7f6c1fa20407d1dfd', '0d4d3971-1357-455b-9a13-414b78feaf6e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在询问关于某个范围的问题,但是提供的信息不够具体。如果您能提供更多的上下文或者详细说明您需要确认的范围是关于哪个方面的,我会很乐意帮助您。比如,您是在询问关于数据范围、地理范围、时间范围还是其他什么范围?请提供更多细节,以便我能更准确地回答您的问题。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:24:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207331, 78911494259207330, '80a6d324-d43b-4d14-8717-8966441f6560', '', 'Moonshot', 'moonshot-v1-8k', '饿我去饿我去恶趣味', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:24:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207332, 78911494259207330, 'chatcmpl-67cc1ad8f856367ab0e781cb', '80a6d324-d43b-4d14-8717-8966441f6560', 'Moonshot', 'moonshot-v1-8k', '看起来您输入的内容可能是随机的字符组合,或者是某种方言或网络用语,我不太确定您想要表达的具体含义。如果您有任何问题或需要帮助,请尽量使用清晰和标准的语言表达,这样我才能更好地为您提供帮助。如果您需要查询信息、解决问题或者有任何疑问,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:24:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207334, 78911494259207333, '1e31ab5a-df40-4391-80b8-aae6e8ca082a', '', 'Moonshot', 'moonshot-v1-8k', '发士大夫v从', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-08 18:24:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207336, 78911494259207335, '87e9775f-e5ea-404e-a4bc-56685ef0a361', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:25:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207337, 78911494259207335, 'chatcmpl-67cc1b1bf4060e0911639fbe', '87e9775f-e5ea-404e-a4bc-56685ef0a361', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:25:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207338, 78911494259207333, 'a28f676f-9961-461d-92a5-d3e5d23bb50a', '', 'Moonshot', 'moonshot-v1-8k', '臭小子臭小子', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:25:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207339, 78911494259207333, 'chatcmpl-67cc1b3514278be9fbb40e36', 'a28f676f-9961-461d-92a5-d3e5d23bb50a', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在开玩笑或是在用一种亲昵的方式称呼某人。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:25:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207341, 78911494259207340, '70c39d27-f92c-4fb6-a061-9bd6bf82a4a1', '', 'Moonshot', 'moonshot-v1-8k', '的说法萨芬', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:26:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207342, 78911494259207340, 'chatcmpl-67cc1b4ef4060e091163a076', '70c39d27-f92c-4fb6-a061-9bd6bf82a4a1', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在提及“萨芬”,这可能是指俄罗斯前职业网球运动员马拉特·萨芬(Marat Safin)。他曾是世界排名第一的网球选手,赢得了包括2005年澳大利亚网球公开赛在内的多个大满贯赛事。如果您有关于他的具体问题或者需要更多信息,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:26:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207343, 78911494259207340, '1e5cad24-99c4-4fe1-90c3-42acbbb29824', '', 'Moonshot', 'moonshot-v1-8k', '4324234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:29:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207344, 78911494259207340, 'chatcmpl-67cc1c23f4060e091163a2ec', '1e5cad24-99c4-4fe1-90c3-42acbbb29824', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324234\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:29:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207346, 78911494259207345, '0bbf487c-fe9a-4350-8e89-ab005f67a87e', '', 'Moonshot', 'moonshot-v1-8k', '5435435', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-08 18:30:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (78911494259207347, 78911494259207345, 'chatcmpl-67cc1c5114278be9fbb415f8', '0bbf487c-fe9a-4350-8e89-ab005f67a87e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"5435435\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-08 18:30:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79335248617541633, 79335248617541632, 'c81e3bc3-7a11-455c-a20d-aa90baa26ef7', '', 'Moonshot', 'moonshot-v1-8k', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-09 19:03:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79335248617541634, 79335248617541632, 'chatcmpl-67cd756ff4060e091168b111', 'c81e3bc3-7a11-455c-a20d-aa90baa26ef7', 'Moonshot', 'moonshot-v1-8k', '标题:【意式风情满满】老街角意式餐厅,奶酪培根意面和烤羊排的绝妙邂逅!\n\n正文:\nHey亲爱的朋友们👋,今天我要和你们分享一个超级棒的发现——老街角意式餐厅!🍝🥩\n\n一走进这家餐厅,我就被那温馨的店内装饰给迷住了。墙上挂着复古的意大利风情画,暖黄色的灯光洒在每一张桌子上,仿佛置身于意大利的某个小镇,让人心情瞬间放松。🏰\n\n服务员小哥哥小姐姐们也是超级亲切,他们的笑容和热情的服务,让我感觉就像回到了自己家一样温暖。💁‍♂️💁‍♀️\n\n当然,重头戏还是他们家的特色菜品。首先,我要强烈推荐的是奶酪培根意面!🧀🥓每一根意面都裹满了香浓的奶酪和烟熏培根的香气,每一口都是满满的幸福感。奶酪的浓郁和培根的咸香完美融合,简直是味蕾的盛宴!\n\n接着是烤羊排,外皮烤得金黄酥脆,内里肉质鲜嫩多汁,搭配上特制的酱汁,每一口都是对味觉的极致诱惑。🍖\n\n在这里,每一道菜都像是艺术品,不仅味道让人难以忘怀,连摆盘都让人忍不住拍照打卡。📸\n\n总之,老街角意式餐厅绝对是一个值得一去再去的地方。无论是和朋友们小聚,还是和心爱的人约会,这里都能给你一个难忘的美食体验。👫\n\n快带上你的小伙伴们,一起来感受这份意式风情吧!🇮🇹🍽️\n\n#意式美食探店 #奶酪培根意面 #烤羊排 #老街角意式餐厅 #美食打卡地', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-09 19:03:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79335248617541635, 79335248617541632, '65ba2c77-42dc-4ea8-a5b2-0c78a890f9a7', '', 'Moonshot', 'moonshot-v1-8k', '12', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-09 19:04:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79335248617541636, 79335248617541632, 'chatcmpl-67cd75a5f4060e091168b198', '65ba2c77-42dc-4ea8-a5b2-0c78a890f9a7', 'Moonshot', 'moonshot-v1-8k', '看起来您可能在尝试访问某个资源,但收到了一个错误消息,提示“资源未找到”。如果您需要帮助解决这个问题,或者有其他问题需要解答,请随时告诉我。我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-09 19:04:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79335248617541637, 79335248617541632, 'a729248a-6830-434f-b333-185bdf114338', '', 'Moonshot', 'moonshot-v1-8k', '12', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-09 19:07:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79337189942760448, 79335248617541632, '80b82ec6-7af4-4e60-b94f-1c9a6c0eb120', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-09 19:08:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79338250799683584, 79335248617541632, '372b4378-91c7-498d-a572-668bbe96f2da', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-09 19:13:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79338701771250688, 79335248617541632, '59267058-b12c-4525-bc21-0b0e88ede85b', '', 'Moonshot', 'moonshot-v1-8k', '2', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-09 19:14:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79550151601177600, 78911494259207335, '1a470f91-b762-4be5-8571-a9a008c2bc28', '', 'Moonshot', 'moonshot-v1-8k', '4324234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:20:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79550151601177601, 78911494259207335, 'chatcmpl-67ce3e49f4060e09116ad0b6', '1a470f91-b762-4be5-8571-a9a008c2bc28', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324234\",但这个数字本身并没有提供足够的上下文来理解您想要询问的具体问题。如果您需要帮助或者想要讨论某个话题,请提供更多的信息或者详细描述您的问题,这样我才能更好地为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:20:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79550151601177603, 79550151601177602, 'c52492f4-27a5-4764-843f-626ae1490085', '', 'Moonshot', 'moonshot-v1-8k', '你是一位擅长编写各种程序的资深工程师,我需要你根据以下需求,为我生成一段Python代码:\n代码目的:[设计一个双十一自动抢购脚本]\n代码功能:[在双十一当天自动登录购物网站,定时抢购预设商品]\n代码要求:[使用面向对象编程方式,使用selenium库进行网页操作]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:37:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79550151601177604, 79550151601177602, 'chatcmpl-67ce423bc7b2b4eddc4fc6b4', 'c52492f4-27a5-4764-843f-626ae1490085', 'Moonshot', 'moonshot-v1-8k', '根据您的需求,我将为您提供一个简单的Python脚本示例,该脚本使用面向对象编程方式,并利用selenium库来模拟用户在双十一当天自动登录购物网站并抢购预设商品。请注意,这个脚本需要您提前安装selenium库以及对应的WebDriver。\n\n首先,确保您已经安装了selenium库,如果没有安装,可以通过以下命令安装:\n\n```bash\npip install selenium\n```\n\n然后,您需要下载与您的浏览器版本相匹配的WebDriver,例如Chrome浏览器的ChromeDriver,并确保它在您的系统PATH中。\n\n以下是一个简单的脚本示例:\n\n```python\nfrom selenium import webdriver\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport time\n\nclass AutoBuyer:\n def __init__(self, driver_path, username, password, target_url, target_item_id, buy_time):\n self.driver = webdriver.Chrome(executable_path=driver_path)\n self.username = username\n self.password = password\n self.target_url = target_url\n self.target_item_id = target_item_id\n self.buy_time = buy_time\n\n def login(self):\n self.driver.get(self.target_url)\n time.sleep(2) # 等待页面加载\n # 假设登录按钮的ID为\'login_button\'\n login_button = self.driver.find_element(By.ID, \'login_button\')\n login_button.click()\n time.sleep(2) # 等待跳转至登录页面\n\n # 输入用户名和密码\n username_input = self.driver.find_element(By.ID, \'username\')\n password_input = self.driver.find_element(By.ID, \'password\')\n username_input.send_keys(self.username)\n password_input.send_keys(self.password)\n password_input.send_keys(Keys.RETURN)\n time.sleep(2) # 等待登录完成\n\n def find_item(self):\n # 假设商品页面的URL包含商品ID\n item_url = f\"{self.target_url}/item/{self.target_item_id}\"\n self.driver.get(item_url)\n time.sleep(2) # 等待页面加载\n\n def buy_item(self):\n # 假设购买按钮的ID为\'buy_button\'\n buy_button = self.driver.find_element(By.ID, \'buy_button\')\n buy_button.click()\n time.sleep(2) # 等待购买流程\n\n def close(self):\n self.driver.quit()\n\n def run(self):\n current_time = time.time()\n while True:\n if current_time >= self.buy_time:\n self.login()\n self.find_item()\n self.buy_item()\n break\n else:\n time.sleep(60) # 每分钟检查一次时间\n current_time = time.time()\n\nif __name__ == \"__main__\":\n # 请替换以下参数为您的实际信息\n driver_path = \'path/to/your/chromedriver\'\n username = \'your_username\'\n password = \'your_password\'\n target_url = \'http://www.example.com\'\n target_item_id = \'12345\'\n buy_time = \'2023-11-11 00:00:00\' # 抢购时间\n\n buyer = AutoBuyer(driver_path, username, password, target_url, target_item_id, buy_time)\n buyer.run()\n buyer.close()\n```\n\n请根据您的实际情况替换脚本中的`driver_path`、`username`、`password`、`target_url`、`target_item_id`和`buy_time`等参数。此外,您需要根据实际网站的元素ID调整`login`、`find_item`和`buy_item`方法中的元素定位代码。\n\n**警告**:自动抢购脚本可能违反某些网站的服务条款,使用时请确保您的行为符合相关法律法规和网站规定。此脚本仅供学习和研究之用。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:37:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462145, 79565480339462144, '121ec1e3-3fc4-4890-ad85-d4d9fabd1430', '', 'Moonshot', 'moonshot-v1-8k', '请根据以下要求撰写一篇探店笔记:\n餐厅名称:[老街角意式餐厅]\n特色菜品:[奶酪培根意面和烤羊排]\n顾客体验:[温馨的店内装饰和亲切的服务员]\n要求:[标题参照小红书爆款标题,要吸引人眼球,语言要生动活泼,像是和好朋友热情地分享]', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:55:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462146, 79565480339462144, 'chatcmpl-67ce46812ab64f8de10ea873', '121ec1e3-3fc4-4890-ad85-d4d9fabd1430', 'Moonshot', 'moonshot-v1-8k', '标题:【意式风情满满】老街角意式餐厅,奶酪培根意面和烤羊排的绝妙邂逅!\n\n正文:\nHey亲爱的小伙伴们👋,今天我要和你们分享一个超级棒的探店经历,保证让你们看了就想去的那种!🏃‍♀️🏃‍♂️\n\n🍽️【老街角意式餐厅】,这个名字听起来是不是就很有故事感?我告诉你,这里的美食和氛围,绝对能给你一个大大的惊喜!\n\n一进门,就被那温馨的店内装饰给暖到了。🏠木质的桌椅,暖黄色的灯光,还有那些精致的小摆设,每一个细节都透露着意大利的浪漫和温馨。🌹\n\n服务员小哥哥小姐姐们也是超级亲切,笑容满面,服务周到,让人感觉就像回到了自己家一样舒适。💁‍♂️💁‍♀️\n\n重头戏来了,他们家的【奶酪培根意面】和【烤羊排】,简直是绝配!🍝🥩\n\n先说这奶酪培根意面,面条Q弹有嚼劲,奶酪和培根的香味完美融合,每一口都是满满的幸福感。🧀🥓\n\n而烤羊排,外皮烤得金黄酥脆,里面的肉质鲜嫩多汁,搭配上特制的酱料,简直是味蕾的盛宴!🔥\n\n在这里,每一道菜都能感受到厨师的用心和对美食的热爱。👨‍🍳\n\n所以,如果你也是个意式美食的爱好者,或者想要找个地方放松心情,享受美食,【老街角意式餐厅】绝对是你的不二之选!🌟\n\n快带上你的好朋友们,一起来这里享受一个美好的晚上吧!🥂\n\n#意式美食# #探店日记# #美食分享#', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:55:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462147, 79565480339462144, 'c8e6d03b-c07e-4f50-b6b3-94bc5be79346', '', 'Moonshot', 'moonshot-v1-8k', '43242342', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:55:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462148, 79565480339462144, 'chatcmpl-67ce469d2ab64f8de10ea94b', 'c8e6d03b-c07e-4f50-b6b3-94bc5be79346', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"43242342\",但这个数字本身并没有提供足够的上下文来理解您想要询问的具体问题。如果您需要帮助或者想要讨论某个话题,请提供更多的信息或者具体的问题,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:55:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462149, 79565480339462144, 'ab4be0fd-9bd3-48fc-a744-d046ff2d22a1', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:57:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462150, 79565480339462144, 'chatcmpl-67ce47062ab64f8de10eab9f', 'ab4be0fd-9bd3-48fc-a744-d046ff2d22a1', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\",但这个数字本身并没有提供足够的上下文来理解您想要询问的具体问题。如果您有任何具体的问题或者需要帮助的地方,请提供更多的信息,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:57:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462152, 79565480339462151, '9738e81d-17ee-42cc-8468-5ad4d3350aa1', '', 'Moonshot', 'moonshot-v1-8k', '4324234', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 09:58:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462153, 79565480339462151, 'chatcmpl-67ce4735f6c1fa204088653f', '9738e81d-17ee-42cc-8468-5ad4d3350aa1', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324234\",但这个数字本身并没有提供足够的上下文来理解您想要询问的具体问题。如果您有任何具体的问题或者需要帮助的地方,请提供更多的信息,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 09:58:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462154, 78911494259207186, '94bb48b1-7ee0-4623-b43e-775befe9bf33', '', 'Moonshot', 'moonshot-v1-8k', '123', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-10 09:59:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462155, 78911494259207186, 'chatcmpl-67ce47852ab64f8de10eaec1', '94bb48b1-7ee0-4623-b43e-775befe9bf33', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"123\"。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-10 09:59:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462156, 78911494259207186, '0378d059-fc30-4c3a-99c4-a5f44d5c533f', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-10 10:03:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462157, 78911494259207186, 'chatcmpl-67ce487b2ab64f8de10eb42a', '0378d059-fc30-4c3a-99c4-a5f44d5c533f', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试发送一个文件或者提供一些信息,但是我没有收到具体的文件内容。如果您有任何问题或者需要帮助,请直接告诉我,我会尽力为您提供支持。如果您需要我阅读某个文件或者提供关于某个主题的信息,请上传文件或者详细描述您的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-10 10:03:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462159, 79565480339462158, 'b0e18623-280f-4492-952d-96e9f8766ec1', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-10 10:04:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462160, 79565480339462158, 'chatcmpl-67ce48ad2ab64f8de10eb588', 'b0e18623-280f-4492-952d-96e9f8766ec1', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试发送一个文件或者提供一些信息,但是我没有收到具体的文件内容。如果您有任何问题或者需要帮助,请直接告诉我,我会尽力为您提供支持。如果您需要我阅读某个文件或者提供关于某个主题的信息,请上传文件或者详细描述您的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-10 10:04:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462162, 79565480339462161, '4ab650e3-fec1-41cf-b557-0a8425e9d268', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:06:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462163, 79565480339462161, 'chatcmpl-67ce4911f4060e09116b1289', '4ab650e3-fec1-41cf-b557-0a8425e9d268', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\",但这个数字本身并没有提供足够的上下文来理解您想要询问的问题。如果您有任何具体的问题或者需要帮助的地方,请提供更多的信息,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:06:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462165, 79565480339462164, '94cef0c5-faeb-4c1f-ba7d-584bd13fbf19', '', 'Moonshot', 'moonshot-v1-8k', '4324热发电v从', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:06:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462166, 79565480339462164, 'chatcmpl-67ce492ff856367ab0f0d0f0', '94cef0c5-faeb-4c1f-ba7d-584bd13fbf19', 'Moonshot', 'moonshot-v1-8k', '您提供的信息“4324热发电v从”看起来像是一个不完整的句子或指令。为了更好地帮助您,我需要更多的上下文和具体的问题。如果您能提供更详细的信息,比如您想要了解关于热发电的哪方面内容,或者您遇到了什么问题,我将能够提供更准确的回答和帮助。\n\n如果您需要关于热发电的一般信息,热发电是一种利用热能转换为电能的技术,通常涉及到燃烧燃料(如煤、天然气等)来产生蒸汽,进而驱动涡轮机发电。如果您有具体的问题或者需要解决特定的问题,请提供更多的细节。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:06:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462168, 79565480339462167, 'c2d455ef-59c4-406e-8d99-869a24858a0e', '', 'Moonshot', 'moonshot-v1-8k', '4343242范德萨v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:07:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462169, 79565480339462167, 'chatcmpl-67ce4946f4060e09116b13b7', 'c2d455ef-59c4-406e-8d99-869a24858a0e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送的信息包含了一串数字和“范德萨v”这样的文字,但是没有明确的问题或请求。如果您需要帮助或者有任何问题,请提供一个清晰明确的问题,我会尽力为您提供帮助。如果您需要关于“范德萨”的具体信息,或者这串数字“4343242”与“范德萨”有特定的关联,请提供更多的上下文或详细说明您的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:07:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462171, 79565480339462170, 'dd7ea444-178d-4742-b8a6-bbd06fca163b', '', 'Moonshot', 'moonshot-v1-8k', '12', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-10 10:07:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462172, 79565480339462170, 'chatcmpl-67ce494dc7b2b4eddc4ffc16', 'dd7ea444-178d-4742-b8a6-bbd06fca163b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"12\",但是没有提供具体的上下文或问题。如果您需要帮助或者有任何问题,请提供更多的信息,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-10 10:07:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462174, 79565480339462173, '36e80fa3-2122-452f-b6d8-4dda7c74939e', '', 'Moonshot', 'moonshot-v1-8k', '432423房贷市场v徐', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:07:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462175, 79565480339462173, '3576c15d-8fb0-4345-b24c-b71f9235ab2a', '', 'Moonshot', 'moonshot-v1-8k', '方式v从炸想成', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:07:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462177, 79565480339462176, '2df9622f-df4d-45fe-8d3a-b9768933d9ef', '', 'Moonshot', 'moonshot-v1-8k', '432432vcxv 效参数', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462178, 79565480339462176, 'chatcmpl-67ce49b9f6c1fa20408876ee', '2df9622f-df4d-45fe-8d3a-b9768933d9ef', 'Moonshot', 'moonshot-v1-8k', '您提供的“432432vcxv 效参数”这个信息看起来像是一个随机的字符串,并没有提供足够的上下文来理解您想要询问的具体问题。为了能够更好地帮助您,我需要更多的信息和明确的指示。\n\n如果您是想要询问关于某个具体参数的效果或者如何使用某个参数,请提供更多的背景信息和具体的问题。例如,如果您是在询问某个软件或程序中的参数设置,您可以提供以下信息:\n\n1. **清晰明确**:您想要了解的参数是什么,它在哪个软件或程序中使用。\n2. **具体细节**:这个参数的具体作用是什么,您希望它达到什么样的效果。\n3. **相关背景**:您在使用这个参数时遇到了什么问题,或者您希望解决什么问题。\n4. **合理的期望**:您希望得到什么样的帮助或解答。\n\n请提供这些信息,我将尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462179, 79565480339462173, '8ff714a0-5968-40df-9200-b2b6412e69f3', '', 'Moonshot', 'moonshot-v1-8k', '持续出现', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462180, 79565480339462173, 'chatcmpl-67ce49c2f6c1fa2040887737', '8ff714a0-5968-40df-9200-b2b6412e69f3', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在讨论如何有效地使用旭博美Ai来解决问题。旭博美Ai作为一个智能助手,确实可以帮助您处理文本创意相关的问题,检索和整理信息。您提到的“持续出现”可能是指在使用过程中,您希望得到持续的帮助或者信息更新。\n\n如果您需要具体的帮助或者有特定的问题,可以按照以下四个关键词来构建您的问题:\n\n1. **主题**:明确您想要解决的问题或讨论的主题。\n2. **细节**:提供具体的要求和例子,以便更精确地理解您的需求。\n3. **背景**:如果问题需要背景信息,提供相关背景可以帮助更准确地回答。\n4. **期望**:确保您的问题是合理的,并且符合旭博美Ai的能力和限制。\n\n例如,如果您在处理税务问题时遇到困难,您可以这样提问:“我在处理公司税务时遇到了一些困难,希望能够获得关于如何避免公司税务风险的建议。我们是一家小型企业,我们需要了解如何在合规的情况下最大限度地降低税务负担。请提供建议和指导,包括如何选择最适合我们公司的税务方案,以及如何在税务申报和报告方面遵循最佳实践。此外,请提供一些税务规划的建议,以帮助我们最大化利润,并避免任何潜在的税务问题。”\n\n如果您有具体的问题或需要进一步的帮助,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462181, 79565480339462176, '3b60da5f-935c-4e8a-957e-962257138d3c', '', 'Moonshot', 'moonshot-v1-8k', '432432非常v尺寸', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462182, 79565480339462176, 'chatcmpl-67ce49e6f856367ab0f0d617', '3b60da5f-935c-4e8a-957e-962257138d3c', 'Moonshot', 'moonshot-v1-8k', '您提供的信息“432432非常v尺寸”看起来像是一串数字和一些不完整的描述。如果您需要具体的帮助或者想要了解某个具体的信息,请提供更详细的问题或者背景信息,这样我才能更好地理解您的需求并提供相应的帮助。\n\n如果您是在询问某种产品的尺寸,那么“432432”可能是指产品的尺寸,但是没有单位和具体的上下文,很难给出准确的答案。“非常v尺寸”可能是您想要表达“非常具体的尺寸”或者“非常V型尺寸”,但是没有更多的信息,我无法确定确切的含义。\n\n请提供更多的背景信息或者明确的问题,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:09:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462184, 79565480339462183, 'cd72b4a9-575a-42fb-ba81-7c50a3d790b9', '', 'Moonshot', 'moonshot-v1-8k', '4324324范德萨v出现', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:09:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462185, 79565480339462183, '51863825-9166-40d9-900a-56cbc1257c92', '', 'Moonshot', 'moonshot-v1-8k', '432432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:10:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462186, 79565480339462183, 'chatcmpl-67ce4a0df4060e09116b18bb', '51863825-9166-40d9-900a-56cbc1257c92', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432432\",但这个数字似乎没有明确的上下文或问题。如果您需要帮助或有任何问题,请提供更多的信息,这样我才能更好地为您提供服务。如果您有任何具体的问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:10:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462188, 79565480339462187, '13feac4b-2da2-41fe-8545-d5be7bef038f', '', 'Moonshot', 'moonshot-v1-8k', '从v程序', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:10:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462189, 79565480339462187, 'chatcmpl-67ce4a172ab64f8de10ebe74', '13feac4b-2da2-41fe-8545-d5be7bef038f', 'Moonshot', 'moonshot-v1-8k', '看起来您可能想要讨论有关“从v程序”的话题,但是提供的信息不够完整。如果您是指从V语言(V语言是一种相对较新的编程语言)编写的程序,或者是从某个特定的程序(比如Visual Studio)中导出的V程序,请您提供更多的上下文信息,以便我能更准确地理解您的需求并提供帮助。\n\n如果您有具体的问题或者需要解决某个具体的问题,请按照以下步骤提供信息:\n\n1. **清晰明确**:请确保您的问题表达清晰,简短明了。\n2. **具体细节**:尽可能提供更多具体的信息,例如您想要实现的功能、遇到的问题或者特定的代码片段。\n3. **相关背景**:如果您的问题或要求需要一些背景信息,提供一些相关背景,这将有助于系统更好地理解问题。\n4. **合理的期望**:您的问题应该合理,并符合产品的能力和限制。\n\n例如,如果您想要了解如何在V语言中实现一个特定的功能,您可以这样提问:“我正在使用V语言开发一个Web应用,我需要实现用户登录功能。请问如何使用V语言来处理HTTP请求并验证用户凭证?”这样的问题是清晰明确的,提供了具体的要求和背景信息,同时也是合理的期望,因为V语言可以用来开发Web应用并处理用户登录。\n\n请提供更多的信息,以便我能更好地帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:10:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462190, 79565480339462170, 'b4bac2d1-d41e-4001-a7a0-0f5875fe0fc0', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-10 10:11:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462191, 79565480339462170, 'chatcmpl-67ce4a5825b38bb7babc9ecc', 'b4bac2d1-d41e-4001-a7a0-0f5875fe0fc0', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试发送一个文件或者提供一些信息,但是我没有收到具体的文件内容。如果您有任何问题或者需要帮助,请直接告诉我,我会尽力为您提供支持。如果您需要我阅读某个文件或者提供关于某个主题的信息,请上传文件或者详细描述您的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-10 10:11:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462193, 79565480339462192, 'dc53c0c4-e5fe-4190-8a50-6e5d66c0c7d7', '', 'Moonshot', 'moonshot-v1-8k', '432432范德萨v从', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:13:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462194, 79565480339462192, 'chatcmpl-67ce4aacf856367ab0f0db7a', 'dc53c0c4-e5fe-4190-8a50-6e5d66c0c7d7', 'Moonshot', 'moonshot-v1-8k', '您提供的信息“432432范德萨v从”看起来像是一个随机的数字和字母组合,没有明确的上下文或问题。为了更好地帮助您,我需要更多的信息或者一个具体的问题。请提供一个清晰明确的问题,包括具体细节和相关背景,这样我才能为您提供更有针对性的回答。如果您有任何疑问或需要帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:13:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462196, 79565480339462195, 'bad6868b-f496-4157-b32c-387165bbcfb2', '', 'Moonshot', 'moonshot-v1-8k', '432432发的电磁阀v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:13:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79565480339462197, 79565480339462195, 'chatcmpl-67ce4ac92ab64f8de10ec27a', 'bad6868b-f496-4157-b32c-387165bbcfb2', 'Moonshot', 'moonshot-v1-8k', '您提供的信息“432432发的电磁阀v”看起来像是一个不完整的句子或代码,它没有提供足够的上下文来理解您想要询问的具体问题。为了更好地帮助您,我需要更多的信息。以下是一些可能的问题方向,您可以根据实际情况选择或提供更多细节:\n\n1. **产品信息查询**:如果您想要了解型号为432432的电磁阀的详细信息,比如技术参数、应用场景等,请提供更完整的产品描述或型号。\n\n2. **故障诊断**:如果您的电磁阀出现了问题,需要帮助诊断,请描述电磁阀的具体症状或问题。\n\n3. **操作指导**:如果您需要知道如何操作或安装432432型号的电磁阀,请提供具体的操作环境或需求。\n\n4. **维护和保养**:如果您想要了解电磁阀的维护保养信息,请说明您关心的具体方面。\n\n请提供更多的背景信息和具体细节,这样我才能更准确地回答您的问题。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:13:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347840, 79565480339462176, 'ffdd67b9-74e6-482b-9f38-c07fd04986f4', '', 'Moonshot', 'moonshot-v1-8k', '43243242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:26:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347841, 79565480339462176, 'chatcmpl-67ce4dc92ab64f8de10ed5a6', 'ffdd67b9-74e6-482b-9f38-c07fd04986f4', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"43243242\",但这个信息对我来说有些模糊,我不确定您想要我做什么。如果您有任何具体的问题或者需要帮助的地方,请提供更多的上下文或者详细说明您的需求,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:26:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347843, 79572193373347842, 'ef1cc056-28a5-4671-9920-5491d7977ec3', '', 'Moonshot', 'moonshot-v1-8k', '4324324犯得上反对', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:26:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347844, 79572193373347842, 'chatcmpl-67ce4dd82ab64f8de10ed60d', 'ef1cc056-28a5-4671-9920-5491d7977ec3', 'Moonshot', 'moonshot-v1-8k', '您提供的内容似乎是一段关于如何有效使用旭博美Ai的说明,而不是一个具体的问题。如果您有任何具体的问题或需要帮助的地方,请按照上述说明中的指导,提出清晰明确、具体细节、相关背景和合理期望的问题,我会尽力为您提供帮助。\n\n至于您提到的“4324324犯得上反对”,这句话看起来像是一串数字后面跟着一些不完整的表述,我不太确定您想要表达的具体含义。如果您能提供更多的上下文或者详细说明您的问题,我会很乐意帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:26:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347846, 79572193373347845, 'aad68754-4c47-4b17-a53e-da7a01ad1d07', '', 'Moonshot', 'moonshot-v1-8k', '43242风大是否', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:30:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347847, 79572193373347845, 'chatcmpl-67ce4ecc25b38bb7babcc828', 'aad68754-4c47-4b17-a53e-da7a01ad1d07', 'Moonshot', 'moonshot-v1-8k', '您的问题“43242风大是否”似乎不完整,也没有提供足够的上下文信息,这使得我难以给出一个准确的回答。如果您是在询问某个特定日期或地点的风力情况,我需要更多的信息,比如具体的日期、地点等。\n\n如果您是在询问一个编号或代码“43242”的含义,并且这个编号与风力有关,那么我可能需要更多的背景信息来理解这个编号的具体含义。\n\n请提供更多的细节或背景信息,以便我能更好地帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:30:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347849, 79572193373347848, 'e543f8da-717b-49d8-a9de-28f9829b6381', '', 'Moonshot', 'moonshot-v1-8k', '432423重新著从下', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:32:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347850, 79572193373347848, 'chatcmpl-67ce4f40f4060e09116b3e40', 'e543f8da-717b-49d8-a9de-28f9829b6381', 'Moonshot', 'moonshot-v1-8k', '您好,看起来您提供的是一个HTML格式的文本内容,其中包含了关于如何有效使用旭博美Ai的指导。如果您需要我帮助您重新组织这段内容,我可以帮您梳理一下信息,使其更加清晰易懂。以下是重新组织后的内容:\n\n---\n\n**旭博美Ai的使用指南**\n\n旭博美Ai不仅仅是一个搜索引擎,它更像是您的私人助理,擅长处理文本创意相关的问题,以及检索和整理知识。与传统搜索引擎不同,旭博美Ai能够为您创造信息。\n\n**如何有效使用旭博美Ai:**\n\n1. **清晰明确**:确保您的问题表达清晰,简短明了,让旭博美Ai能够明确理解您的问题或要求。\n\n2. **具体细节**:提供尽可能多的具体信息,如关键词、例子或特定场景,以帮助旭博美Ai更好地理解您的问题。\n\n3. **相关背景**:如果问题需要背景信息,提供相关背景将有助于系统更准确地理解问题,并提供更有针对性的回答。\n\n4. **合理的期望**:您的问题应该合理,并符合旭博美Ai的能力和限制。\n\n**示例问题**:\n\n- 好的问题:“有一张excel表格,需要将T列的值全部取出,并以“,”分隔,请给出实际的例子。”这个问题清晰明确,提供了具体的要求和背景信息,同时也是合理的期望。\n\n- 更复杂的问题:“我在处理公司税务时遇到了一些困难,希望能够获得关于如何避免公司税务风险的建议。我们是一家小型企业,我们需要了解如何在合规的情况下最大限度地降低税务负担。请提供建议和指导,包括如何选择最适合我们公司的税务方案,以及如何在税务申报和报告方面遵循最佳实践。此外,请提供一些税务规划的建议,以帮助我们最大化利润,并避免任何潜在的税务问题。”\n\n**关键词**:主题,细节,背景,期望\n\n在使用旭博美Ai时,您可以根据初版答案继续对话,以完善细节和回答。\n\n---\n\n希望这样的组织方式能够帮助您更好地理解和使用旭博美Ai。如果您有其他问题或需要进一步的帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:32:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347851, 79572193373347848, '53337e75-fafa-44f5-ab7a-2d873da6ba3d', '', 'Moonshot', 'moonshot-v1-8k', '543543官方代表', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:32:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347853, 79572193373347852, '8a952431-4f2b-45a1-b780-a77503a84b00', '', 'Moonshot', 'moonshot-v1-8k', '发v的v反对', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:33:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347854, 79572193373347852, 'chatcmpl-67ce4f692ab64f8de10ee29c', '8a952431-4f2b-45a1-b780-a77503a84b00', 'Moonshot', 'moonshot-v1-8k', '您提供的内容似乎是关于如何有效使用旭博美Ai的指导说明。如果您有任何具体的问题或需要帮助的地方,请按照上述指导,提出清晰明确、具体细节、相关背景和合理期望的问题,我会尽力为您提供帮助。\n\n至于您提到的“发v的v反对”,这个表述不太清楚,如果您能提供更多的上下文或者具体的问题,我会更好地理解您的需求并给出相应的回答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:33:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347855, 79565480339462187, 'abcb44ab-05f3-4c4c-9a06-a4986afc1b0f', '', 'Moonshot', 'moonshot-v1-8k', '高浮雕高浮雕下', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:33:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347856, 79565480339462187, 'chatcmpl-67ce4f9425b38bb7babcd0b1', 'abcb44ab-05f3-4c4c-9a06-a4986afc1b0f', 'Moonshot', 'moonshot-v1-8k', '高浮雕是一种雕塑艺术形式,它在三维空间中创造出立体的形象,但与圆雕(完全立体的雕塑)不同,高浮雕的背景与周围的平面相连,形象从背景中突出,但并不完全独立。这种艺术形式在古代建筑装饰、纪念碑和艺术品中非常常见。\n\n如果你想了解更多关于高浮雕的信息,比如它的技术特点、历史发展、著名作品等,可以提出更具体的问题。如果你有特定的高浮雕作品或者想要了解某个时期的高浮雕艺术,请提供更多的细节,我会尽力为你提供相关信息。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:33:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347858, 79572193373347857, '0a8fec95-e68a-4e93-95db-fbd38543a419', '', 'Moonshot', 'moonshot-v1-8k', '范德萨范德萨v', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:50:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347859, 79572193373347857, 'chatcmpl-67ce536cf856367ab0f11e61', '0a8fec95-e68a-4e93-95db-fbd38543a419', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您输入了一些重复的词汇“范德萨”,这可能是一个名字或者是一个特定领域的术语。如果您需要关于“范德萨”的具体信息或者帮助,请提供更多的上下文或者详细的问题,这样我才能更好地为您提供帮助。如果“范德萨”是一个人物,您可能需要提供他的全名、职业背景或者其他相关信息;如果它是一个术语,那么请告诉我它所属的领域。期待您的进一步信息!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:50:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347860, 79572193373347852, '551e411e-337c-4283-a472-63b7b36f2704', '', 'Moonshot', 'moonshot-v1-8k', '范德萨范德萨', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:53:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347861, 79572193373347852, 'chatcmpl-67ce543c2ab64f8de10f1341', '551e411e-337c-4283-a472-63b7b36f2704', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试输入一些内容,但是“范德萨”这个词重复了两次,而且没有提供具体的上下文或问题。如果您需要关于“范德萨”的具体信息,或者有任何其他问题,请您提供更多的细节或者明确的问题,我会尽力为您提供帮助。如果“范德萨”是指某个人名、地名或者其他专有名词,请提供更多的背景信息,以便我能够给出更准确的回答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:53:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347863, 79572193373347862, 'ce06e967-fb29-4770-bc08-894dc7ec466f', '', 'Moonshot', 'moonshot-v1-8k', '高达三百v地方', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:54:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347864, 79572193373347862, 'chatcmpl-67ce544fd59778ba165c0107', 'ce06e967-fb29-4770-bc08-894dc7ec466f', 'Moonshot', 'moonshot-v1-8k', '您提到的“高达三百v地方”这个表述有些模糊,我猜测您可能是在询问关于电压或者某个特定地点的信息。如果您是在询问电压相关的信息,那么“300V”可能指的是一个电压值,这在电气工程中是一个常见的电压等级,可能用于某些特定的设备或系统。\n\n如果您是在询问某个具体的地点,那么“高达三百v地方”可能是指某个地名或者某个地方的特征。但是,由于这个表述不够明确,我需要更多的上下文信息来给出准确的回答。\n\n如果您能提供更多的细节或者背景信息,我将能够更好地理解您的问题,并提供更有针对性的回答。例如,如果您是在询问某个特定城市的电压标准,或者是在寻找某个以“高达三百v”命名的地方,那么请提供更多的信息,以便我能够给出更准确的答案。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:54:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347866, 79572193373347865, '3006f1ef-d0b7-4e6e-8de9-227b59601753', '', 'Moonshot', 'moonshot-v1-8k', '范德萨VS的', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 10:54:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347867, 79572193373347865, 'chatcmpl-67ce5461d59778ba165c017a', '3006f1ef-d0b7-4e6e-8de9-227b59601753', 'Moonshot', 'moonshot-v1-8k', '您提到的“范德萨VS的”似乎是一个不完整的句子或短语,我猜测您可能是想询问有关范德萨(Edwin van der Sar)的信息,他是一位已退役的荷兰足球运动员,曾是世界顶级的守门员之一。如果您有具体的问题或者需要我提供关于他的某些信息,请补充完整您的问题,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 10:54:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347868, 79565480339462170, '859e8ec2-e7c3-4057-b5e1-7df49293b650', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 10:56:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347869, 79572193373347865, 'c3f9a3be-9573-4362-95d6-ca3ef9da2416', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:56:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347870, 79572193373347865, '634ec9f0-68b0-4169-b6d2-23c5a9e2444d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:56:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347872, 79572193373347871, 'ade25169-6c32-45e2-a263-08f958d6849f', '', 'Moonshot', 'moonshot-v1-8k', '范德萨富士达', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:56:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347873, 79572193373347871, 'f71924d7-f75a-4d2c-bf45-0c8de124b3a9', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-10 10:56:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347874, 79565480339462170, '86843eec-3c7b-476d-b24d-84c24f57dce0', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 111, '2025-03-10 10:56:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347875, 79565480339462170, '8b7a886f-b988-4ff7-b689-d848336f8c4c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 10:56:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347876, 79572193373347871, 'de3ffc32-4855-4ed1-8d44-5df2baa6465f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 10:56:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347877, 79565480339462170, '5cf1362a-e20a-4cbb-91c5-c63bc486acf0', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 11:00:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347878, 79572193373347871, 'dc17c684-5d5c-4bec-9c96-e8a8319042eb', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 11:00:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347879, 79572193373347871, '99e1a93d-db6b-4ac1-9a2b-6e41a5d80785', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 11:00:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347881, 79572193373347880, 'fc1e314c-f132-4db4-9f83-f85c83554597', '', 'Moonshot', 'moonshot-v1-8k', '吃撒测试', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 11:01:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347882, 79572193373347880, 'chatcmpl-67ce55f225b38bb7babd14bd', 'fc1e314c-f132-4db4-9f83-f85c83554597', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能是想进行一个测试,但是“吃撒测试”这个表达不太清楚。如果您是想测试我这个AI助手的功能,您可以提出一个具体的问题或者任务,我会尽力为您提供帮助。比如,您可以问我一些事实性的问题,或者需要我帮助您撰写、编辑文本,或者提供一些建议等等。请随时告诉我您需要什么帮助!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 11:01:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347883, 79565480339462170, 'e0d0fef5-7c13-4cfe-985d-d73f560b73ce', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 11:01:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347884, 79572193373347880, '39005180-34ab-4c17-b46a-7464b63683bb', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 11:01:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347885, 79572193373347880, 'd95432d2-6efd-42e2-82dd-73c88f9e7fff', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 11:01:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347887, 79572193373347886, '6ca59b14-ee67-401f-b92e-15b2e151ed15', '', 'Moonshot', 'moonshot-v1-8k', '持续支持第三方', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 11:07:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347888, 79572193373347886, 'chatcmpl-67ce576e2ab64f8de10f2e1a', '6ca59b14-ee67-401f-b92e-15b2e151ed15', 'Moonshot', 'moonshot-v1-8k', '旭博美Ai作为一个智能助手,可以提供持续的支持,包括但不限于第三方服务和产品。以下是一些可能的支持方式:\n\n1. **信息检索与整合**:帮助用户收集和整理第三方服务或产品的信息,包括功能、价格、用户评价等。\n\n2. **比较分析**:对不同的第三方服务或产品进行比较,帮助用户做出更明智的选择。\n\n3. **技术支持**:提供技术层面的支持,比如如何集成第三方API到用户的应用中,或者解决兼容性问题。\n\n4. **最佳实践分享**:分享行业内的最佳实践,帮助用户更好地利用第三方服务或产品。\n\n5. **问题解决**:当用户在使用第三方服务或产品时遇到问题,提供解决方案或建议。\n\n6. **持续更新**:随着第三方服务或产品的更新,提供最新的信息和使用指南。\n\n7. **定制化建议**:根据用户的具体需求,提供定制化的第三方服务或产品推荐。\n\n8. **风险评估**:帮助用户评估使用第三方服务或产品可能带来的风险,并提供相应的规避策略。\n\n如果你有具体的需求或问题,可以直接告诉我,我会尽力提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 11:07:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347890, 79572193373347889, 'e99c8f40-1fef-4f18-bd86-9c0f374638bf', '', 'Moonshot', 'moonshot-v1-8k', '吃撒测试', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 11:07:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79572193373347891, 79572193373347889, 'chatcmpl-67ce578125b38bb7babd234d', 'e99c8f40-1fef-4f18-bd86-9c0f374638bf', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能是想进行一个测试,但是“吃撒测试”这个表达不太清楚。如果您是想测试我这个AI助手的功能,您可以提出一个具体的问题或者任务,我会尽力为您提供帮助。比如,您可以问我一些事实性的问题,或者需要我帮助您撰写、编辑文本等。请随时告诉我您需要什么帮助!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 11:07:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79628874056762369, 79628874056762368, '5d13664a-b352-4f83-85ae-146ba0e0c594', '', 'Moonshot', 'moonshot-v1-8k', '热特瑞特', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 14:24:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79628874056762370, 79628874056762368, 'chatcmpl-67ce859bf6c1fa20408a19da', '5d13664a-b352-4f83-85ae-146ba0e0c594', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试输入一些内容,但是“热特瑞特”这个词似乎没有明确的意义。如果您有任何问题或需要帮助,请尽量提供清晰、具体的问题或背景信息,这样我才能更好地理解您的需求并提供帮助。如果您需要关于某个主题的信息、建议或者解决方案,请详细说明,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 14:24:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79628874056762372, 79628874056762371, '9790561f-7ec5-4da9-abec-dd60b51d0a72', '', 'Moonshot', 'moonshot-v1-8k', 'gdfgdf', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 14:34:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79628874056762373, 79628874056762371, 'chatcmpl-67ce87f325b38bb7babecd01', '9790561f-7ec5-4da9-abec-dd60b51d0a72', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您输入了一些随机字符 \"gdfgdf\"。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。如果您需要关于某个特定主题的信息,或者有任何疑问,只需告诉我,我会尽我所能为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 14:34:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79656945963020289, 79656945963020288, '6b23910d-62cd-4f49-8ae2-88e5f46e8dd5', '', 'Moonshot', 'moonshot-v1-8k', '学生的撒', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 15:51:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79656945963020290, 79656945963020288, 'chatcmpl-67ce9a0f933746008b66f509', '6b23910d-62cd-4f49-8ae2-88e5f46e8dd5', 'Moonshot', 'moonshot-v1-8k', '看起来您的问题可能不完整或者有些混乱。如果您是想询问关于学生的事情,比如学生的生活、学习、活动等,请提供更具体的问题,这样我才能更好地帮助您。如果您有其他问题或需要帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 15:51:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79656945963020291, 79656945963020288, 'c8972703-3c26-4787-934e-e24e144d3309', '', 'Moonshot', 'moonshot-v1-8k', '热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 15:52:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79656945963020292, 79656945963020288, 'chatcmpl-67ce9a302ab64f8de11133af', 'c8972703-3c26-4787-934e-e24e144d3309', 'Moonshot', 'moonshot-v1-8k', '“热望”这个词在中文里可以有多种含义,通常指的是强烈的渴望或期望。如果你想要表达对某件事情的强烈愿望,可以说“我对这件事充满了热望”。如果你有具体的事情想要讨论或者需要帮助,请告诉我更多的信息,我会尽力帮助你。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 15:52:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750912, 79565480339462170, 'a0050423-a7fc-40e4-9aa3-797a82c16ddc', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 16:01:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750914, 79659870835750913, '2f871e01-31ff-4fbf-a940-bb7141112adb', '', 'Moonshot', 'moonshot-v1-8k', '这里面有什么内容,帮我分析一下', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 16:08:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750915, 79659870835750913, 'chatcmpl-67ce9df62ab64f8de1115494', '2f871e01-31ff-4fbf-a940-bb7141112adb', 'Moonshot', 'moonshot-v1-8k', '这段内容是关于如何有效使用旭博美Ai的指导说明。以下是内容的分析:\n\n1. **旭博美Ai的定位**:\n - 旭博美Ai与传统搜索引擎不同,它更像是一个私人助理,专注于文本创意和知识检索。\n - 它的优势在于对文本的理解、归纳、整理和发散,能够创造信息而不仅仅是检索现有信息。\n\n2. **使用旭博美Ai的方式**:\n - 使用旭博美Ai主要通过问答形式进行。\n - 提出的问题需要清晰明确、具体细节、相关背景,并有合理的期望。\n\n3. **提出问题的要求**:\n - **清晰明确**:问题要表达清晰,简短明了。\n - **具体细节**:提供更多具体信息,如关键词、例子或特定场景。\n - **相关背景**:如果问题需要背景信息,应提供相关背景。\n - **合理的期望**:问题应合理,并符合产品能力和限制。\n\n4. **举例说明**:\n - 提供了一个好问题的例子:“有一张excel表格,需要将T列的值全部取出,并以“,”分隔,请给出实际的例子。”这个问题符合上述所有要求。\n - 另一个例子是关于税务问题的建议,涉及小型企业的税务风险、合规降低税务负担、税务方案选择、税务申报和报告的最佳实践,以及税务规划的建议。\n\n5. **对话和完善**:\n - 在得到初版答案后,可以继续对话,使答案根据要求完善细节。\n\n6. **关键词**:\n - 主题、细节、背景、期望。\n\n这段内容强调了如何有效地与旭博美Ai互动,以获得最佳的服务和结果。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 16:08:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750916, 79659870835750913, '44f39ef4-2ba2-4c98-96db-f8182745d5d3', '', 'Moonshot', 'moonshot-v1-8k', 'rwrewr', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 16:12:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750917, 79659870835750913, 'chatcmpl-67ce9ecf933746008b670e90', '44f39ef4-2ba2-4c98-96db-f8182745d5d3', 'Moonshot', 'moonshot-v1-8k', '看起来您输入了一些随机字符,这似乎不是一个具体的问题。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供帮助。如果您需要关于某个主题的信息,或者需要解决某个问题,请提供更多的细节,这样我才能更好地理解您的需求并给出相应的回答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 16:12:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79659870835750918, 79659870835750913, '94a8f911-60fc-4231-822b-76ecb9adb204', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 16:19:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403968, 79565480339462170, '99414c01-e04e-40ef-b779-8907b04aec42', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 16:25:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403969, 79565480339462170, '546570d4-6816-49bd-943d-d63143410744', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 111, '2025-03-10 16:26:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403970, 79565480339462151, '63bad884-1688-45d3-b004-caf6f4987b7a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 16:57:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403971, 79659870835750913, '2d85d4a8-d415-4a78-8330-e1292a55f036', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:02:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403972, 79659870835750913, '4be03836-612c-4702-8d3e-1abe1dca9775', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:08:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403973, 79659870835750913, 'f8df44a5-a2eb-4f68-8885-b788f8c7ca6e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:10:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403974, 79659870835750913, '20f6d339-471f-42cb-901c-fb47a735785f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:13:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403975, 79659870835750913, 'bfdc6396-bf9e-41e4-ac3f-52d11a9026da', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:27:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403976, 79659870835750913, 'ad6dd3c8-0810-44dd-8e9f-dd292fb155cb', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:27:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403977, 79659870835750913, 'cf664173-861d-48a9-ae8e-f56d1b7ee7a8', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:45:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403978, 79659870835750913, '947cecec-3498-4726-a149-6c82e2d1672e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:46:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403979, 79659870835750913, 'd51e5fd7-5ee1-4ec1-9c08-790ec06f76be', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:49:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403980, 79659870835750913, '2ec00fcc-cae7-4b32-9da3-72912b0d1cd9', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:51:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403981, 79659870835750913, 'd9fb673c-9da3-4b79-b947-67a56be94d65', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:53:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403982, 79659870835750913, 'd160b77a-92ed-499c-aed0-5aa391eed4d7', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:58:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403983, 79659870835750913, 'f59cc1d1-33c9-44a6-89f0-0c899da03a8d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:58:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403984, 79659870835750913, '044ef38c-c79a-418f-b411-0e68e4a232d5', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 17:59:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403985, 79659870835750913, 'b4906581-032f-43f8-927b-300cb3f22445', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:04:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403986, 79659870835750913, 'b84301ab-aa3c-4feb-8849-79665c09807b', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:07:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79664775688403987, 79659870835750913, '940fcb5b-6423-44c6-8a36-b2a357768678', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:10:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416704, 79659870835750913, '20dd955d-14c2-421a-afd7-9cfac6552762', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:22:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416705, 79659870835750913, '7c1d7ed5-de35-4362-9a96-0ac15acc8b4e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:23:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416706, 79659870835750913, 'f41aa3b9-75fa-471e-8785-daf5142ade67', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:26:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416707, 79659870835750913, 'c282558b-df95-4750-8af2-34d74d530e38', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:26:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416708, 79659870835750913, 'ac6f2e57-8dd0-4513-a4f3-d0cbedfb7ea9', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 18:31:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416710, 79694849049416709, '388ae6cc-9270-400b-aaf0-c7eac429a199', '', 'Moonshot', 'moonshot-v1-8k', '?', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-10 19:32:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416711, 79694849049416709, 'chatcmpl-67cecdcdf6c1fa20408c102d', '388ae6cc-9270-400b-aaf0-c7eac429a199', 'Moonshot', 'moonshot-v1-8k', '看起来您发送了一个错误信息,这个信息表明您尝试访问的资源没有找到。这可能是一个网络问题,或者您尝试访问的链接或页面不存在。如果您需要帮助解决这个问题,或者有其他问题需要我协助,请告诉我具体的情况,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-10 19:32:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79694849049416712, 79694849049416709, '78fd91d1-6293-4b69-bb69-518ba848ea2f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 19:33:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79714756222834688, 79694849049416709, '9fc3127b-68f8-47b5-b056-efe1cc662022', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-10 19:40:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615872, 79694849049416709, '84675d86-db04-462d-a5a8-d7c9ae1c7868', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 13:31:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615873, 79694849049416709, '64df7213-2d6c-4c30-9a9e-45fc1515dd16', '', 'Internlm', 'moonshot-v1-8k', '', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-11 14:11:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615874, 79694849049416709, 'c6a0c5f4-66e2-4b42-9c43-2bb48ac4b13c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:11:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615875, 79694849049416709, '1788ae98-9115-40b6-880e-8dfb242aca38', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:23:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615876, 79694849049416709, 'a34c3f8f-94b3-4f39-93a5-c3168199f31e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:24:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615877, 79694849049416709, 'f92c4563-d746-4c9e-9c1a-068daa45d2df', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:25:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615878, 79694849049416709, '1178ea36-fe28-450d-b3d5-b7209d03df5f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:25:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615879, 79694849049416709, '11a4736b-a064-4c78-b34e-cc28e32cc26a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-11 14:32:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615880, 79694849049416709, '6181ad38-fb89-4948-a277-0a98fa9caadf', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 14:35:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615881, 79694849049416709, '7ecc1220-7163-4875-9aa0-22211915d1f3', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 14:42:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615882, 79694849049416709, 'f27a4e68-8010-4cd9-b91f-d720db527d61', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:25:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615883, 79694849049416709, '6e2d7a7b-700c-411b-96c4-dec47210be78', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:25:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615884, 79694849049416709, 'eb575ca3-203a-41bc-a43a-8d2c2a39b9ca', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:28:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615885, 79694849049416709, '574df81a-2698-4b42-89e9-3a3f31a8cbf5', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:29:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615886, 79694849049416709, '017a36df-56d8-4f4f-97b2-b8eb41215e3a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:30:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615887, 79694849049416709, 'ff914b41-ec0e-4986-8213-9fd387416402', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:40:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615888, 79694849049416709, '75889f4d-dd5c-472b-98a7-fda5c2d06752', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:43:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615889, 79694849049416709, '012f8d22-b9f6-4eeb-93df-5b5b5f5a8a29', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:43:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615890, 79694849049416709, '2e1166fe-97be-43e4-a453-9ff67ac86246', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:48:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615891, 79694849049416709, '7633eff5-1d55-46ae-a56f-3576d17b9cd4', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:49:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615892, 79694849049416709, 'c792dd48-b5ab-463b-a9e3-34f0170f4817', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:49:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615893, 79694849049416709, '2abf289d-4b3a-48cc-9612-5332f6442ac8', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:50:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615894, 79694849049416709, '5cfbefa6-ab1b-4291-8aff-ed846485ae52', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:53:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615895, 79694849049416709, '6c72fc6f-6d9d-43b8-8e68-035bb03d3f9e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:53:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615896, 79694849049416709, '53e52dd9-8f24-481d-928e-43c5809fbcd7', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 15:53:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615897, 79694849049416709, '42735b25-6650-4dbd-a897-0165102a4f58', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:13:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615898, 79694849049416709, '13bc5d5a-b1ec-4fb8-bd7d-538689ec03ee', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:13:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615899, 79694849049416709, '842d236c-6da9-46f9-9eec-9d8f6efbcf15', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:14:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615900, 79694849049416709, 'd7ba164b-51e6-49c5-a235-af7392d73709', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:14:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615901, 79694849049416709, '3ecbc686-2240-4bc6-ae05-f8d291cc499d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:17:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615902, 79694849049416709, '7f9fc241-269a-483f-a4da-cfc718f689fd', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:17:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615903, 79694849049416709, 'b206e5b9-e489-456d-888e-5fbab94392af', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:17:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615904, 79694849049416709, 'a7ed1c36-375f-4dc8-90f7-fd7ef9075c22', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:18:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615905, 79694849049416709, 'c386ad73-24a3-417d-b3e3-f33e5f78c15e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:18:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615906, 79694849049416709, '3501a06d-4f07-4f03-a781-e42efed9dfd2', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:21:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615907, 79694849049416709, 'e0e74452-a2ea-4c85-bc69-6d49edbc178b', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:22:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615908, 79694849049416709, '7e72a008-6422-44da-8751-44492835de0e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:24:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615909, 79694849049416709, '3af97065-c3b3-4ad3-bdea-65f879206747', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:24:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615910, 79694849049416709, '0e833c67-0b29-45b9-8569-e885d0f1acad', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:26:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615911, 79694849049416709, '46d15a6e-6c90-49a3-a6ee-011c021ddd86', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:27:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615912, 79694849049416709, '2e215b12-383a-4d8f-a25c-9736a023dd9d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:28:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615913, 79694849049416709, '143ba88e-5fc9-4a76-9317-29d5a0f7ab3f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:30:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615914, 79694849049416709, '5d2ef013-df11-419d-92b8-95152b12012a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:31:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615915, 79694849049416709, '99d8e906-0c0e-48b9-8446-735b0c9957dc', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:31:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615916, 79694849049416709, '6ce14362-0d48-447e-bb99-f99f0b5e7110', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:32:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615917, 79694849049416709, '32acf0ab-7d28-4584-98cc-4fed392698bd', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:32:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615918, 79694849049416709, '633fc26c-e998-4fe8-b234-9f8da155c22c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:33:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615919, 79694849049416709, '6b6aad9f-d2c9-4831-ba5f-0f707a636fab', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:34:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615920, 79694849049416709, 'b80a2629-75d8-447e-af5e-979fc2dc8226', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:35:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615921, 79694849049416709, '23f24087-ee1c-437b-9c0c-2a63503b8f74', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:35:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615922, 79694849049416709, '3dc2482d-df59-4d9d-ab31-a459e126fdad', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:35:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615923, 79694849049416709, '6330811a-167e-436b-a214-971c32a2f672', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:47:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615924, 79694849049416709, '3bcbeaee-58c9-41c4-a60a-dbbc2681c739', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:51:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615925, 79694849049416709, '3fb0fbb0-0927-4b70-8a81-6363813f97d6', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:54:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615926, 79694849049416709, '49340881-4101-487c-91f4-b0ce1e01cd01', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 16:54:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615927, 79694849049416709, '21ff04af-e803-4a55-8300-1afdad81ef9a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:01:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615928, 79694849049416709, 'b0b75575-661b-454e-a463-d0b1e9899a4c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:01:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615929, 79694849049416709, 'deddda5a-ad5b-4bf6-b067-8789f19a00a5', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:01:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615930, 79694849049416709, 'bdd2947d-6396-445a-abb0-ee4b4abc4e14', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:02:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615931, 79694849049416709, 'ddfb07dc-4544-4533-a383-2ce71f3ce0cf', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:02:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615932, 79694849049416709, '304abd51-4980-4a6f-81e6-6b7cd4ef1eed', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:07:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615933, 79694849049416709, '574ef371-5d20-4c88-9f64-2b1959194486', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:12:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615934, 79694849049416709, '946b5bbd-37c8-48bc-9a27-3791ef7acde9', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:13:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615935, 79694849049416709, 'b648ccb1-2a51-4144-abf2-054eea09153b', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:14:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615936, 79694849049416709, '5bd636f7-b007-498c-a3e3-3000601450ca', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:14:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615937, 79694849049416709, '4ee45353-d770-4c63-bf74-ecc7be66920f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:15:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615938, 79694849049416709, '1614fb96-86ad-4d7d-b49f-a0ae6025267f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:16:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615939, 79694849049416709, '88d8f692-9db1-4199-9de4-39bc565656f3', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:16:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615940, 79694849049416709, '4b6cd97f-4eb9-48c7-b2cc-427105723007', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:20:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615941, 79694849049416709, 'fff0ab7b-c150-4bf9-91c1-f5f6b3946e39', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:20:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615942, 79694849049416709, '320fa692-8b54-4430-86fa-0456a1d947a3', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:21:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615943, 79694849049416709, '8650caa5-13f5-4bc6-9951-67d1955fc877', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:21:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615944, 79694849049416709, '3ba8fde3-a628-41dd-8f07-fd4349ac166a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:22:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615945, 79694849049416709, '47d7d6ac-9e8d-4d71-aeb1-8e8efcbb2e81', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:22:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615946, 79694849049416709, '57606e84-0aed-4f10-8c7a-c8b3c5f2e4b1', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:22:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615947, 79694849049416709, 'c2017a99-bb94-4a33-a119-44a6125fd64d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:25:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615948, 79694849049416709, 'd1b4217e-b633-4d80-9a16-bc489585e07d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:28:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615949, 79694849049416709, '501185b2-3521-4e9c-8bf8-cb2c7f7a4d6d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:32:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615950, 79694849049416709, 'b085ad2b-9532-4973-ac2a-6b0d56366cb3', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:32:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615951, 79694849049416709, '495aa971-4648-44cf-a5a6-dcfaa56db250', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:36:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615952, 79694849049416709, '33a9a642-9b9b-4016-b900-e7ade9aae01c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:51:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615953, 79694849049416709, 'e81b5818-8ab6-4671-bb98-be2adccf5f09', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 17:51:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615954, 79694849049416709, 'b498156d-6a35-4661-a40b-3e63a1265e21', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:14:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615955, 79694849049416709, '9e6dbf3a-a0c3-419d-b18b-b0c4c1c891e6', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:14:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615956, 79694849049416709, 'e13abfee-274c-4c12-a8a4-973bead51aee', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:16:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615957, 79656945963020288, '30cf2087-7c90-49ab-8034-375ed5b3831a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:31:31', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615958, 79656945963020288, '2da8cc78-9630-4c4d-a9c1-ea7c4deb5015', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:31:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615959, 79656945963020288, 'bae1d204-0daa-492d-967b-b1dbd7625b33', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:31:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615960, 79656945963020288, '696c09b5-3ce1-4c5f-ba85-16926309411f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:31:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615961, 79656945963020288, '00f1adf1-e8d2-4626-af33-90651b83bd5e', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:31:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615962, 79656945963020288, '6d0ff0af-53c4-46a2-9547-2119d9031e43', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:32:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615963, 79656945963020288, '84f7e50e-4949-4ab2-b9ab-9f3dc6f8c3c2', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:32:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615964, 79656945963020288, 'fc15e3a0-416b-4daa-a1e5-a93841785ea1', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:32:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615965, 79656945963020288, '83970bf6-646c-47b5-bc73-1fce9293740b', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:32:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615966, 79656945963020288, 'af085ea1-b945-43eb-a022-6f50467ba6cb', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:32:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615967, 79656945963020288, 'e8e89a2d-5f64-4033-b117-004244e1536e', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:33:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (79921627617615968, 79656945963020288, 'b4422f7f-be08-474d-b63f-97e6cc91c5ac', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-11 18:33:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772224, 79656945963020288, '294d5494-93c2-4889-a6ec-e3f5bb95eebe', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:11:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772225, 79656945963020288, '9f0b8ef1-e2ec-45b8-bc83-3b12b834e26d', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:12:04', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772226, 79656945963020288, 'a251aa17-eb05-402e-9948-3f6504b492aa', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:12:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772227, 79656945963020288, '6709e3a5-0e02-4782-9fac-83aec20947d8', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:12:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772228, 79656945963020288, '19ad2ab9-cfa9-4338-a3b7-72bb27fdaa36', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:17:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772229, 79656945963020288, 'bab0d4f9-050a-4227-ba4a-f2c0bc95fd3f', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:21:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772230, 79656945963020288, '301e62cb-4aba-4749-8bcf-2cb194db2657', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:25:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772231, 79656945963020288, '691df0bc-c33e-4a5d-afd4-b385c4348e4d', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:25:07', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772232, 79656945963020288, 'aee2604d-9a17-49f8-801b-b0d78dad02d6', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:25:29', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772233, 79656945963020288, '87180e0c-8036-40b3-b4f9-c4e211f19b22', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:25:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772234, 79656945963020288, '7a6e0b29-4950-40e4-bdb7-d4a2e16a2daa', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:25:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772235, 79656945963020288, '056091e3-e36c-41cb-91cd-5c886fa1d800', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:26:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772236, 79656945963020288, '1ec99a2d-0f9c-40ee-aa9b-441f8b8f71ff', '', 'ChatGPT', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:26:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772237, 79656945963020288, '4a00f89d-cda4-4310-8a89-54bc381f6133', '', 'ChatGPT', 'moonshot-v1-8k', '// debugger\nlet controller = new AbortController();\n// const openLongReply = import.meta.env.VITE_GLOB_OPEN_LONG_REPLY === \'true\'\nconst dialog = useDialog();\n// const ms = useMessage()\n\nconst appStore = useAppStore();\nconst chatStore = useChatStore();\nconst { isMobile } = useBasicLayout();\nconst { scrollRef, scrollToBottom, scrollToBottomIfAtBottom } = useScroll();\nconst { addChat, updateChat, updateChatLoading, getChatByIndex } = useChat();\n\nconst dataSources = ref([]);\nconst loading = ref(false);\nconst inputRef = ref(null);\nconst ideaRef = ref(null);\n// 提示词\nconst prompt = ref(\'\');\n// 是否展示提示词\nconst showPrompt = ref(true);\n// 计算灵感大全-提示词高度\nconst computedHeight = ref(\'\');\n\n// 监听选中信息刷新对话内容\nwatch(\n () => chatStore.active,\n () => {\n chatStore.getChatByChatNumber(chatStore.active).then((res: any[]) => {\n dataSources.value = res;\n scrollToBottom();\n });\n }\n);\n\n// 更新聊天数据loading状态\ndataSources.value.forEach((item, index) => {\n if (item.loading) {\n updateChatLoading(chatStore.active, index, { loading: false });\n }\n});\n\n// 输入框提示\nconst placeholder = computed(() => {\n if (isMobile.value) return $t(\'chat.placeholderMobile\');\n return $t(\'ai.placeholder\');\n});\n\n// 发送按钮是否禁用\nconst buttonDisabled = computed(() => {\n return loading.value || !prompt.value || prompt.value.trim() === \'\';\n});\n\n// 内容样式\nconst indexClass = computed(() => {\n let classes = [\'w-[800px]\'];\n if (isMobile.value) classes = [\'w-full\', \'overflow-hidden\'];\n return classes;\n});\n\n// 输入框高度监听\nconst handleInput = () => {\n inputRef.value.style.height = \'auto\';\n inputRef.value.style.height = ${inputRef.value.scrollHeight - 13}px;\n};\n\n// 监听浏览器高度自动\nwindow.addEventListener(\'resize\', () => {\n computedHeight.value = ${window.innerHeight - ideaRef.value.clientHeight - 2}px;\n});\n\nonMounted(async () => {\n if (prompt.value) {\n const message = prompt.value;\n const chatNumber: string = chatStore.active;\n const messageData: Chat.MessageRequest = {\n chatNumber,\n model: chatStore.model,\n modelVersion: \'moonshot-v1-8k\',\n systemPrompt: message,\n prompt: message\n };\n // 发送内容\n const messageRes = await fetchChatMessageAPI(messageData);\n // 流式响应\n onConversation(chatNumber, messageRes.data);\n }\n chatStore.getChatByChatNumber(chatStore.active).then((res: any[]) => {\n dataSources.value = res;\n handleSubmit();\n });\n if (inputRef.value && !isMobile.value) {\n inputRef.value?.focus();\n }\n computedHeight.value = ${window.innerHeight - ideaRef.value.clientHeight - 184}px;\n inputRef.value.addEventListener(\'input\', handleInput);\n assistantType();\n scrollToBottom();\n});\n\nonUnmounted(() => {\n if (loading.value) {\n controller.abort();\n }\n});\n\n// 助手分类\ninterface AssistantType {\n id: number;\n name: string;\n icon: string;\n}\n\nconst assistantTypeId = ref(0);\nconst assistantTypeValue = ref>([]);\nconst fixedAssistantTypeValue = ref>([]);\n\n// 获取助手分类\nfunction assistantType() {\n listAssistantType>().then((res: { data: { id: number; name: string; icon: string }[] }) => {\n const assistantType: AssistantType = {\n id: 0,\n name: \'全部\',\n icon: \'ri:message-line\'\n };\n assistantTypeValue.value = res.data;\n assistantTypeValue.value.splice(0, 0, assistantType);\n fixedAssistantTypeValue.value = assistantTypeValue.value.slice(0, 5);\n });\n}\n\n// 助手分类选择\nfunction chooseType(typeId: number) {\n assistantTypeId.value = typeId;\n}\n\n// 助手分类是否选中\nfunction isActive(typeId: number) {\n return assistantTypeId.value === typeId;\n}\n\n// 选择右侧固定分类\nfunction chooseFixedType(typeId: number | null) {\n if (typeId) {\n assistantTypeId.value = typeId;\n }\n showPrompt.value = true;\n}\n\n// 触发选择助手\nfunction handAssistant(assistantId: number) {\n chatStore.setActive(\'\');\n handleSubmit(assistantId);\n}\n\n// 编辑助手\nfunction editAssistant(systemPrompt: string) {\n prompt.value = systemPrompt;\n setTimeout(() => {\n inputRef.value.style.height = \'auto\';\n inputRef.value.style.height = ${inputRef.value.scrollHeight}px;\n }, 50);\n}\n\n// 发送消息\nfunction handleEnter(event: KeyboardEvent) {\n if (!isMobile.value) {\n if (event.key === \'Enter\' && !event.shiftKey) {\n event.preventDefault();\n handleSubmit();\n }\n } else if (event.key === \'Enter\' && event.ctrlKey) {\n event.preventDefault();\n handleSubmit();\n }\n}\n\n// 停止输出\nfunction handleStop() {\n if (loading.value) {\n controller.abort();\n loading.value = false;\n }\n}\nconst uploadRef = ref();\nconst fileId = ref();\nconst fileList = ref([]); // 存储文件信息\nconst selectedFile = ref(null); // 真实的文件数据\nconst uploadedData = ref(null);\n// 处理文件变化\nconst handleFileChange = async (options: { fileList: any[] }) => {\n fileList.value = options.fileList.map(file => {\n const isImage = /\\.(jpg|jpeg|png)$/i.test(file.name);\n return {\n name: file.name,\n url: isImage ? URL.createObjectURL(file.file) : \'\',\n isImage,\n size: file.file.size\n };\n });\n\n if (options.fileList.length > 0) {\n selectedFile.value = options.fileList[0].file;\n prompt.value = \'\';\n } else {\n selectedFile.value = null;\n }\n\n if (!selectedFile.value) {\n console.error(\'No file selected\');\n return;\n }\n\n const message = prompt.value;\n const chatNumber: string = chatStore.active;\n const model: string = chatStore.model;\n const formData = new FormData();\n formData.append(\'file\', selectedFile.value);\n formData.append(\'model\', model);\n formData.append(\'chatNumber\', chatNumber);\n const chatData: Chat.ChatRequest = {\n systemPrompt: message,\n prompt: message\n };\n\n // 如果 chatNumber 不存在,则创建新的\n if (!chatNumber) {\n const chatRes = await fetchChatAPI(chatData);\n const chatNumber = chatRes.data.chatNumber;\n chatStore.setActive(chatNumber);\n await nextTick();\n }\n\n try {\n const response = await request({\n url: \'/ai/chat/upload\',\n method: \'POST\',\n data: formData,\n headers: {\n \'Content-Type\': \'multipart/form-data\'\n }\n });\n\n fileId.value = response.data.fileId;\n const messageData: Chat.MessageRequest = {\n chatNumber,\n model: chatStore.model,\n modelVersion: \'moonshot-v1-8k\',\n systemPrompt: message,\n prompt: message\n };\n\n // 发送内容\n const messageRes = await fetchChatMessageAPI(messageData);\n chatStore.setPendingMessage(messageRes.data);\n // 流式响应\n // onConversation(chatNumber, messageRes.data);\n // handleSubmit();\n } catch (error) {\n console.error(\'Upload failed:\', error);\n }\n};\n\n// 发送\nasync function handleSubmit(assistantId?: number) {\n let message = prompt.value;\n let chatNumber: string = chatStore.active;\n if (loading.value) return;\n\n // 没有选择助手的时候判断文字\n if (!assistantId) {\n if (!message || message.trim() === \'\') return;\n }\n const chatData: Chat.ChatRequest = {\n assistantId,\n systemPrompt: message,\n prompt: message\n };\n\n // 创建会话\n if (!chatNumber) {\n const chatRes = await fetchChatAPI(chatData);\n chatNumber = chatRes.data.chatNumber;\n message = chatRes.data.prompt;\n if (assistantId) {\n prompt.value = chatRes.data.prompt;\n }\n chatStore.setActive(chatNumber);\n await nextTick();\n }\n const messageData: Chat.MessageRequest = {\n chatNumber,\n model: chatStore.model,\n modelVersion: \'moonshot-v1-8k\',\n systemPrompt: message,\n prompt: message\n };\n\n // 发送内容\n const messageRes = await fetchChatMessageAPI(messageData);\n\n // 流式响应\n onConversation(chatNumber, messageRes.data);\n}\n\n/** sse对话 */\nasync function onConversation(chatNumber: string, conversationId: string) {\n const message = prompt.value;\n controller = new AbortController();\n\n addChat(chatNumber, {\n conversationId,\n dateTime: new Date().toLocaleString(),\n contentType: \'text\',\n text: message,\n model: chatStore.model,\n inversion: true,\n error: false\n });\n\n scrollToBottom();\n\n loading.value = true;\n prompt.value = \'\';\n\n setTimeout(() => {\n inputRef.value.style.height = \'auto\';\n inputRef.value.style.height = ${inputRef.value.scrollHeight - 13}px;\n }, 50);\n\n addChat(chatNumber, {\n parentMessageId: conversationId,\n dateTime: new Date().toLocaleString(),\n contentType: \'text\',\n text: \'\',\n images: [],\n model: chatStore.model,\n loading: true,\n inversion: false,\n error: false\n });\n\n scrollToBottom();\n try {\n const lastText = \'\';\n const fetchChatAPIOnce = async () => {\n await fetchChatAPIProcess({\n conversationId,\n signal: controller.signal,\n // 先调用oploadFile 接口,拿到fileId,发送消息的时候传入\n fileIds: [fileId.value],\n onDownloadProgress: ({ event }) => {\n const xhr = event.target;\n const { responseText } = xhr;\n const lastIndex = responseText.lastIndexOf(\'\\n\', responseText.length - 2);\n let chunk = responseText;\n if (lastIndex !== -1) {\n chunk = responseText.substring(lastIndex);\n }\n try {\n const data = JSON.parse(chunk);\n updateChat(chatNumber, dataSources.value.length - 1, {\n conversationId: data.conversationId,\n parentMessageId: conversationId,\n dateTime: new Date().toLocaleString(),\n contentType: data.contentType,\n text: data.contentType === \'text\' ? lastText + (data.content ?? \'\') : \'\',\n images:\n data.contentType === \'image\' && data.content\n ? data.content.map((d: { b64Image: any }) => {\n return d.b64Image;\n })\n : [],\n model: chatStore.model,\n inversion: false,\n error: false,\n loading: true\n });\n nextTick(() => {\n scrollToBottom();\n scrollToBottomIfAtBottom();\n });\n } catch (error) {\n console.info(\'回复错误:\', error);\n }\n }\n });\n updateChatLoading(chatNumber, dataSources.value.length - 1, {\n loading: false\n });\n };\n await fetchChatAPIOnce();\n } catch (error: any) {\n const errorMessage = error?.message ?? $t(\'common.wrong\');\n if (error?.message === \'canceled\') {\n updateChatLoading(chatNumber, dataSources.value.length - 1, {\n loading: false\n });\n scrollToBottomIfAtBottom();\n return;\n }\n\n const currentChat = getChatByIndex(chatNumber, dataSources.value.length - 1);\n\n if (currentChat?.text && currentChat.text !== \'\') {\n updateChatLoading(chatNumber, dataSources.value.length - 1, {\n text: ${currentChat.text}\\n[${errorMessage}],\n error: false,\n loading: false\n });\n return;\n }\n\n updateChat(chatNumber, dataSources.value.length - 1, {\n dateTime: new Date().toLocaleString(),\n contentType: \'text\',\n text: errorMessage,\n inversion: false,\n error: true,\n loading: false\n });\n scrollToBottomIfAtBottom();\n } finally {\n loading.value = false;\n }\n}\n\n/** 重新回复 */\nasync function onRegenerate(messageId?: string | null) {\n if (!messageId) return;\n fetchChatMessageById(messageId).then((res: { data: { content: string } }) => {\n prompt.value = res.data.content;\n handleSubmit();\n });\n}\n\n// 删除消息\nfunction handleDelete(index: number, messageId?: string | null) {\n if (loading.value) return;\n if (!messageId) return;\n dialog.warning({\n title: $t(\'chat.deleteMessage\'),\n content: $t(\'chat.deleteMessageConfirm\'),\n positiveText: $t(\'common.yes\'),\n negativeText: $t(\'common.no\'),\n onPositiveClick: () => {\n chatStore.deleteChatByUuid(chatStore.active, index);\n chatStore.deleteChatByUuid(chatStore.active, index - 1);\n deleteChatMessageById(messageId);\n }\n });\n}\nconst formatFileSize = size => {\n if (size < 1024) return ${size} B;\n if (size < 1024 * 1024) return ${(size / 1024).toFixed(1)} KB;\n return ${(size / (1024 * 1024)).toFixed(1)} MB;\n};\nconst deleteFile = file => {\n const index = fileList.value.findIndex(f => f.name === file.name);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n }\n};\nconst deleteButtonStyle = {\n position: \'absolute\',\n top: \'0px\',\n right: \'-14px\',\n height: \'18px\'\n};\n\n// 跳转页面\nfunction jumpToXieyi(type: number) {\n const { href } = router.resolve({\n path: \'/agreement\',\n query: { type }\n });\n // 打开新窗口\n window.open(href);\n}\n\n\n 帮我处理当我点击handleFileChange的时候 上传文件之后进行删除的话 ,那我再次点击handleFileChange就不要保留上次上传的文件 所以我要怎么改', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-12 09:38:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772238, 79656945963020288, 'e3a5630f-4599-4081-9604-56d6d69a26b7', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:53:13', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772239, 79656945963020288, '113b5b49-0733-4a96-9afa-ded77705aa98', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:53:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772240, 79656945963020288, '31c353fe-5ac7-44f2-9209-948fa78ac752', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:53:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772241, 79656945963020288, 'a4ded842-ff46-4ffd-8852-8df2a3452535', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 09:59:59', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772242, 79656945963020288, '33cd9127-f0fc-4f0f-86bf-61e5c86bdf44', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:00:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772243, 79656945963020288, 'fa2a33db-d358-4076-9230-f73ab0b4a805', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:00:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772244, 79656945963020288, 'd82585a1-91d3-4871-8ac6-6e55afdaee63', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:00:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772245, 79656945963020288, 'c8fe23a7-0a40-4cd5-b59b-fb0bd8853502', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:02:02', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772246, 79656945963020288, '42ead6d5-6936-47ca-92d7-6c503958e7ab', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:02:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772247, 79656945963020288, 'de49d396-7da5-4e04-8d5b-3651d409af0a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:02:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772248, 79656945963020288, '11c17931-9384-46b5-a398-7474ae96b613', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:02:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772249, 79656945963020288, '09a371d8-9ad1-4d78-86f3-73e8f5c83e56', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:04:23', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772250, 79656945963020288, '99bbd726-0801-4f91-83e3-d76f1d5df897', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:48:03', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772251, 79656945963020288, '1e2e7f76-3f5f-478f-96dd-994056c852d5', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 10:48:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772252, 79656945963020288, '89de9335-d397-4721-973a-298a729cb060', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:17:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772253, 79656945963020288, 'd91c2dde-6614-4849-b4be-ed68d4173fc0', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:17:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772254, 79656945963020288, '0cf1b8c9-bdee-4f17-a356-a630a28b658c', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:17:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772255, 79656945963020288, '7a862264-65c9-4b7d-bf10-5f46ad9e440e', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:17:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772256, 79656945963020288, 'e8340838-93e6-4cc3-8319-99f74efee913', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:18:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772257, 79656945963020288, '8189d61f-a39c-4915-856a-f07094b3095a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:24:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772258, 79656945963020288, '7599cde6-b262-4410-9fad-9b0e1ec33434', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:24:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772259, 79656945963020288, '032952e1-4a2b-4480-8462-77635018be5a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:24:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772260, 79656945963020288, '7ce84cb7-b2e9-4562-bf3f-60cc8a7821ae', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:25:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772261, 79656945963020288, '788796e0-05ce-4b03-92aa-72fa399972ca', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:29:14', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772262, 79656945963020288, 'c359ff31-ec20-400f-874c-8d4f7000edb2', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:33:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772263, 79656945963020288, 'd2c17baf-aad7-4f2f-bcc1-0346f428242a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:33:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772264, 79656945963020288, 'b436c864-2eb2-4625-98c6-3587ed2cab3d', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:33:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772265, 79656945963020288, 'fd3a5176-2dc5-4add-9d1e-b84862c1e080', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:34:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772266, 79656945963020288, '538611d3-b6a5-4c80-9ee1-cf13b57b14fd', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:34:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772267, 79656945963020288, '7dc04baa-1e4b-41bd-a753-ce19361b4b03', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:35:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772268, 79656945963020288, '7f28cbc7-1fb8-492f-809a-d3e79116feb3', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:36:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772269, 79656945963020288, 'ca4c5fb3-d176-4c46-b63b-c4b01b0e470b', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:36:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772270, 79656945963020288, 'bb5fd3ac-1eb2-4ce2-bebf-d786800ec80a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:36:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772271, 79656945963020288, '174fed26-9fc3-4d53-8afc-b310125c55bc', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:36:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772272, 79656945963020288, 'ce527e1e-1633-4b2e-8a53-982768ede01f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:37:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772273, 79656945963020288, 'a534e4b0-3cb2-4cea-91c7-13b286a6d5fa', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:37:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772274, 79656945963020288, '28cfbf3c-0a6d-4fb3-8b74-74a238adf237', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:37:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772275, 79656945963020288, 'cc694ec2-2729-464c-85b1-ff0fe19ab8f8', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:38:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772276, 79656945963020288, '1cde074d-2354-456e-a7d9-6e86429adf48', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:38:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772277, 79656945963020288, '46a5ba62-a655-4216-b492-4f01d864298f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:39:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772278, 79656945963020288, 'ca36d7c9-1b41-44e2-a130-56d7cdad419b', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:42:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772279, 79656945963020288, 'cf3b794c-8d32-44db-a280-f5f092ce67b5', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:42:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772280, 79656945963020288, '637005af-5782-43e2-ab36-e0606ced9678', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:42:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772281, 79656945963020288, 'e1de3b12-68d4-4e9b-a020-8a5665fd2c90', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:42:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772282, 79656945963020288, '185a2f72-e5a3-4ceb-9a65-30cf305cac77', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:43:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772283, 79656945963020288, 'fa0fc487-fd46-4006-9cb2-103a8790eebb', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:45:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772284, 79656945963020288, '9fb0d8f7-9fd5-4e23-94e9-ed7305ab915f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:45:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772285, 79656945963020288, '00837431-ff74-4e10-9722-719508186842', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:45:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772286, 79656945963020288, '6dc80074-9e0b-4f75-a607-8c5af9c745ce', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:46:00', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772287, 79656945963020288, '59083964-6128-4faa-a349-05db17218cb2', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:46:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772288, 79656945963020288, '348bcd8a-9945-4369-a3c3-1f45a895c44d', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:48:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772289, 79656945963020288, '3e112f8d-dfe1-458a-8cd1-644e117a51c2', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:48:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772290, 79656945963020288, 'eb5472fa-2a84-427f-880b-f29b34e1dadd', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:48:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772291, 79656945963020288, '2cba1e10-e129-4931-9385-3cf932109135', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:48:58', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772292, 79656945963020288, '56ddc42f-71a1-45a0-8ba6-2f64d9f05d2a', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:49:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772293, 79656945963020288, '87a526fe-123e-47d6-99eb-575a2983c1d6', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 11:49:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772294, 79656945963020288, '73fee876-d6bf-489e-a465-226be23c07ce', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:12:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772295, 79656945963020288, 'c0e6e1d2-19e5-44c6-abda-fe0095f0d54f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:12:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772296, 79656945963020288, '61b75137-09bf-468a-84f5-ff05c64844cc', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:12:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772297, 79656945963020288, 'd3a5af2a-6ad6-4bf2-9f91-f1d1d669de5f', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:12:54', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772298, 79656945963020288, '30559c86-0132-45be-afc2-35cbf61992f8', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:16:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772299, 79656945963020288, '1cd221bc-a0ff-4e80-a5d6-caccc31bd9e2', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:30:39', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772300, 79656945963020288, 'c273cb9f-a673-464e-a0f4-fad64eac6ccd', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:30:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772301, 79656945963020288, '38ec5701-d28d-4f60-8d32-fd76c0a060c4', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:31:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772302, 79656945963020288, '8b2afbc8-818c-4a74-9b38-037db86683ca', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:33:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772303, 79656945963020288, '406e7958-35ca-4774-9b53-31646830d440', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:33:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772304, 79656945963020288, 'f17c4e66-cffb-4b5c-8239-f913713f1b3e', '', 'WENXIN', 'moonshot-v1-8k', 'retrtwr', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-12 15:33:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772305, 79656945963020288, '8dba2494-38e6-4a5b-a69c-c36e1052b4bf', '', 'WENXIN', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 15:34:47', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772306, 79656945963020288, '6b8a727c-e8b0-4a44-81e3-8e3bf2c57a0a', '', 'Moonshot', 'moonshot-v1-8k', '吊袜带', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 17:41:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772307, 79656945963020288, 'e99e88b7-8583-455f-a948-e0ba0fa4df00', '', 'Moonshot', 'moonshot-v1-8k', '得到', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-12 17:41:48', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772308, 79656945963020288, 'e27d4611-fb80-4cfb-af03-fc984100b865', '', 'Moonshot', 'moonshot-v1-8k', '饿我去恶趣味', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-12 17:42:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80292352014772309, 79656945963020288, 'chatcmpl-67d15712f4060e09117c8ae3', 'e27d4611-fb80-4cfb-af03-fc984100b865', 'Moonshot', 'moonshot-v1-8k', '看起来您输入的内容可能是随机的字符组合,没有形成有意义的句子。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-12 17:42:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80682687232586752, 79656945963020288, '138b0582-c97b-47b4-a598-d455e72f2e10', '', 'Moonshot', 'moonshot-v1-8k', '最近很好', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 10:10:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80683451736766464, 79656945963020288, '52a7b380-f058-4e20-8ba5-1177235f5f27', '', 'Moonshot', 'moonshot-v1-8k', '参数的长度是', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-13 10:14:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80683451736766465, 79656945963020288, 'chatcmpl-67d23f72764e790ba19ac5a3', '52a7b380-f058-4e20-8ba5-1177235f5f27', 'Moonshot', 'moonshot-v1-8k', '您提供的信息是一个错误消息,它表明请求的资源没有找到。这个错误消息并没有包含任何参数,因此无法确定参数的长度。如果您需要帮助处理某个具体的参数或者请求,请提供更多的上下文或者详细信息,这样我才能更好地帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-13 10:14:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80688932115038208, 79565480339462170, '2839302a-0657-4d18-9699-0f22aea66e50', '', 'Moonshot', 'moonshot-v1-8k', '23', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-13 10:35:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80688932115038209, 79565480339462170, 'chatcmpl-67d24475db70411f43166b43', '2839302a-0657-4d18-9699-0f22aea66e50', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试访问某个资源,但遇到了错误信息。如果您需要帮助解决这个问题,或者有其他问题需要解答,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-13 10:35:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80689503345689601, 80689503345689600, 'd5611073-94a8-45bd-9acb-2c9aaf22bb31', '', 'Moonshot', 'moonshot-v1-8k', '1', 'text', 'user', '', 2, '', 0, NULL, '', 111, '2025-03-13 10:40:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80689503345689602, 80689503345689600, 'chatcmpl-67d245a5f4060e09118129e0', 'd5611073-94a8-45bd-9acb-2c9aaf22bb31', 'Moonshot', 'moonshot-v1-8k', '看起来您发送了一个错误信息,这个信息表明您尝试访问的资源没有找到。如果您需要帮助解决这个问题,或者有其他问题需要我协助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 111, '2025-03-13 10:40:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560064, 79550151601177602, 'f7ab068d-6713-4ec5-bf4a-a6ad83c278e0', '', 'Moonshot', 'moonshot-v1-8k', '帮我查看当前图片内容', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-13 17:25:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560065, 79550151601177602, 'chatcmpl-67d2a48995475d00240e2d40', 'f7ab068d-6713-4ec5-bf4a-a6ad83c278e0', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能遇到了一些问题,因为您发送的信息显示“资源未找到”。不过,您提到的“查看当前图片内容”让我有点困惑,因为您并没有发送图片给我。\n\n如果您需要我查看或分析图片,请确保您已经上传了图片文件。一旦您上传了图片,我就可以帮您查看图片内容了。请上传图片,我会尽快为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-13 17:25:30', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560066, 79550151601177602, '1bdab454-a4b1-4e87-bee5-863e8db65b3e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 17:57:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560067, 79550151601177602, 'dd416206-4cf4-4a3b-a7d9-d7145a63060e', '', 'Moonshot', 'moonshot-v1-8k', '热望热望', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-13 17:57:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560068, 79550151601177602, 'chatcmpl-67d2ac0f0913f589bac37c5a', 'dd416206-4cf4-4a3b-a7d9-d7145a63060e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在分享一些信息或者寻求帮助,但是“热望热望”这个表达不太清楚您想要传达的具体内容。如果您有任何问题或者需要帮助,请详细描述您的需求,我会尽力为您提供帮助。如果您需要关于某个主题的信息,或者需要解决某个问题,请告诉我具体的情况。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-13 17:57:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560069, 79550151601177602, '2ba498ad-dc69-464c-9035-5db08f9746f7', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:01:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560070, 79550151601177602, '84ccdabb-b8bc-4392-b4bd-13a96e010b29', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:03:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560071, 79550151601177602, '77e7f024-b7c8-4923-b25a-e28ffed37ae4', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:03:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560072, 79550151601177602, 'f190c9d7-77bb-4381-9fd8-4643f8da1f0d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:11:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560073, 79550151601177602, 'cb1dd366-7c5a-43fd-ba57-958c85cd3ac6', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:22:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (80708169273560074, 79550151601177602, '4b65702d-f1a3-419d-b439-8d9bc3059b2d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-13 18:23:05', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253088, 81404387767253087, 'ffbb3576-af21-4971-a6e0-2f7e9e93a6cd', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:09:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253089, 81404387767253087, 'chatcmpl-67d527ac12c21f709f229a01', 'ffbb3576-af21-4971-a6e0-2f7e9e93a6cd', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432\",但这个数字本身并没有提供足够的上下文来理解您想要讨论或询问的内容。如果您有任何具体的问题或者需要帮助的地方,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:09:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253090, 81404387767253087, 'c20a36e5-147a-4123-a35b-c907d4d2ef45', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:16:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253091, 81404387767253087, 'd5f340ea-80b5-410f-a1f1-053254d5211e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:36:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253092, 81404387767253087, 'c63eeb75-191b-4916-9677-23588b1a9d4d', '', 'Moonshot', 'moonshot-v1-8k', '3213213', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:36:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253093, 81404387767253087, 'chatcmpl-67d52dfb12c21f709f22e912', 'c63eeb75-191b-4916-9677-23588b1a9d4d', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"3213213\",但这个信息似乎没有明确的意义或上下文。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:36:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253094, 81404387767253087, 'b93f2249-3dc6-4ae7-a498-02f7392c786a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:40:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253095, 81404387767253087, '986f2493-8048-463b-8686-ae3a16b6eb03', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:40:06', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253096, 81404387767253087, 'd251d430-9ab0-4f37-b8ba-eb578c71ae47', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:40:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253097, 81404387767253087, 'chatcmpl-67d52edfacd188a7e5feb93f', 'd251d430-9ab0-4f37-b8ba-eb578c71ae47', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个营业执照的相关信息,并且提供了一串数字“432432”。不过,您没有具体说明您需要我做什么。如果您需要查询这串数字的含义,或者需要我帮您解读营业执照上的某些信息,请提供更多的上下文或者具体的问题,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:40:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253098, 81404387767253087, 'f6e1c12c-80d4-4da9-afcc-8ce7f9bf7d34', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:42:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253099, 81404387767253087, 'c9527cf7-aae7-44ff-83c3-67df76ba095e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:42:37', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253100, 81404387767253087, '9e308c4e-ba91-4d2d-921f-7b26d0c73e88', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 15:43:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253101, 81404387767253087, '16dcf517-0886-46b4-bbf1-b9b7877cb3bc', '', 'Moonshot', 'moonshot-v1-8k', '图片上都是什么内容', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:52:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253102, 81404387767253087, 'chatcmpl-67d531b312c21f709f2317da', '16dcf517-0886-46b4-bbf1-b9b7877cb3bc', 'Moonshot', 'moonshot-v1-8k', '您上传的是一个名为“区域 3@1x.png”的图片文件,但是作为一个文本和对话交互的人工智能,我无法直接查看或解析图片内容。我的功能仅限于处理和回应文本信息。\n\n如果您需要了解图片上的内容,您可以描述图片上的文字或图案,我将尽力根据您提供的信息来帮助您。或者,您可以使用图像识别软件或服务来获取图片中的文字信息。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:52:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253103, 81404387767253087, '11a1b8a3-44e4-408a-a1c9-5d52a371cfcb', '', 'Moonshot', 'moonshot-v1-8k', '3432423', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:55:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253104, 81404387767253087, 'chatcmpl-67d5325cacd188a7e5fed7a8', '11a1b8a3-44e4-408a-a1c9-5d52a371cfcb', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"3432423\",但这个数字似乎没有特定的上下文或问题。如果您需要帮助或有具体的问题,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:55:09', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253105, 81404387767253087, '35a5bbef-0f43-495f-a61f-0222c3590cda', '', 'Moonshot', 'moonshot-v1-8k', 'e\'q\'we\'q\'weqweqw ', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 15:57:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253106, 81404387767253087, 'chatcmpl-67d532feacd188a7e5fedd46', '35a5bbef-0f43-495f-a61f-0222c3590cda', 'Moonshot', 'moonshot-v1-8k', '看起来你输入了一些随机的字符,这可能是一个错误或者无意义的输入。如果你有任何问题或者需要帮助,请随时告诉我,我会尽力为你提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 15:57:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253107, 81404387767253087, 'f85247f6-0ca8-41ee-adb4-a0ecb860072a', '', 'Moonshot', 'moonshot-v1-8k', '这是什么', 'text', 'user', '', 3, '', 0, NULL, '', 3, '2025-03-15 16:06:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253108, 81404387767253087, 'e849da64-7c00-40a3-be7a-ab1addb21214', '', 'Moonshot', 'moonshot-v1-8k', '额外全额完全', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 16:15:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253109, 81404387767253087, 'chatcmpl-67d53715af84c37a2996063e', 'e849da64-7c00-40a3-be7a-ab1addb21214', 'Moonshot', 'moonshot-v1-8k', '您提供的信息“额外全额完全”似乎是一个不完整的句子或短语,我不太确定您想要表达的具体内容。如果您能提供更多的上下文或者详细的问题,我会很乐意帮助您。如果您有任何问题或者需要帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 16:15:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253110, 81404387767253087, 'ceffa119-3dca-4263-a6e8-7dbf4aea135c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:19:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253111, 81404387767253087, '795edae3-3644-4424-8b61-48d3f11589c5', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 16:19:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253112, 81404387767253087, 'chatcmpl-67d5380faf84c37a29961661', '795edae3-3644-4424-8b61-48d3f11589c5', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\",但并没有提供具体的上下文或问题。如果您需要帮助或有任何问题,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 16:19:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253113, 81404387767253087, '7bf7ef1a-7c75-41cd-897e-6b3443b2ebc9', '', 'Moonshot', 'moonshot-v1-8k', '23213', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-15 16:20:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253114, 81404387767253087, 'chatcmpl-67d53867acd188a7e5ff0e2b', '7bf7ef1a-7c75-41cd-897e-6b3443b2ebc9', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"23213\",但似乎没有提供具体的问题或上下文。这个数字可能代表很多不同的事物,比如一个日期、一个代码、一个统计数据等。如果您有任何具体的问题或需要帮助,请告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-15 16:20:56', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253115, 81404387767253087, '6a9a4bf0-5012-42db-b511-2088234e7eb4', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:27:01', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253116, 81404387767253087, 'c97b353d-a64c-4383-8676-ed497ff96753', '', 'Moonshot', 'moonshot-v1-8k', '撒SDADA', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:30:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253117, 81404387767253087, '107f9e45-5c6f-40ea-ac0c-6add99f1336e', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:36:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253118, 81404387767253087, '8e91a255-b443-437b-93af-aeaace70d62b', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:37:12', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253119, 81404387767253087, 'c85515f2-e423-4769-bda0-fbaf7c0a7db2', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:38:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253120, 81404387767253087, 'd830c0c2-7986-433b-b82b-a063abbb9edb', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:50:40', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253121, 81404387767253087, '0877273b-3f99-4329-8fb8-23047d80e81a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:50:45', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253122, 81404387767253087, '83394742-3832-498f-adf9-6b8780a9ea55', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 16:54:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (81404387767253123, 81404387767253087, '3b47c6b4-57d2-4fa9-9230-f72269ce1347', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-15 18:28:49', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169665, 83706726461169664, '53aea6d2-d0a0-42c2-8227-17aed0fff249', '', 'Moonshot', 'moonshot-v1-8k', '23213', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:45:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169666, 83706726461169664, 'chatcmpl-67dcfce6def9311024ce7efb', '53aea6d2-d0a0-42c2-8227-17aed0fff249', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个文件,但是您提供的“23213”这个数字并没有明确的含义。如果您需要我帮助您处理文件或者对文件内容有疑问,请提供更多的信息或者具体的问题。如果“23213”是您想要讨论的话题,请告诉我更多的上下文,这样我才能更好地帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:45:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169667, 83706726461169664, '04a45330-fcbe-4258-b721-f750f1dd79ca', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 13:46:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169668, 83706726461169664, 'f955b0e7-a85f-4060-b48e-acb5be231514', '', 'Moonshot', 'moonshot-v1-8k', 'dadsad', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:46:25', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169669, 83706726461169664, 'chatcmpl-67dcfd320a3bc35c71fd1acd', 'f955b0e7-a85f-4060-b48e-acb5be231514', 'Moonshot', 'moonshot-v1-8k', '看起来您发送了一些随机的字母 \"dadsad\"。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。如果您需要关于某个话题的信息,或者有任何具体的问题,都可以告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:46:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169670, 83706726461169664, 'b1528f0a-1328-4c02-a178-42ac2df7b857', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 13:47:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169671, 83706726461169664, 'a3b2e9cd-178e-4e63-bc5c-844fdf8c85b6', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 13:49:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169672, 83706726461169664, '83e2acbd-caa9-4d9d-987e-88aaf0b96424', '', 'Moonshot', 'moonshot-v1-8k', '4324324', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:49:43', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169673, 83706726461169664, 'chatcmpl-67dcfdf8bde399bd94a5fcf9', '83e2acbd-caa9-4d9d-987e-88aaf0b96424', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"4324324\",但这个数字似乎没有明确的上下文。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:49:44', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169675, 83706726461169674, '89df18e0-4bcd-4906-ba8a-ff3c334d203f', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:50:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169676, 83706726461169674, 'chatcmpl-67dcfe3bbde399bd94a5ff6c', '89df18e0-4bcd-4906-ba8a-ff3c334d203f', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个营业执照的图片信息,并且提供了一串数字“432432”。不过,您没有具体说明您需要我做什么。如果您需要我帮助您解读营业执照上的信息,或者有其他具体的问题,请告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:50:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169677, 83706726461169674, 'bdc02b8c-c89f-47ad-b890-8dd60a6d041b', '', 'Moonshot', 'moonshot-v1-8k', '嗯去为五千', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:51:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169678, 83706726461169674, 'chatcmpl-67dcfe64bde399bd94a60103', 'bdc02b8c-c89f-47ad-b890-8dd60a6d041b', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在谈论“五千”这个数字,但是您的问题不够明确。如果您能提供更多的上下文或者详细说明您的问题,我会很乐意帮助您。“五千”可以指很多东西,比如五千元人民币、五千个单位的物品、五千个数据点等等。请告诉我您具体需要什么帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:51:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169679, 83706726461169674, '2263eafd-381d-4c16-a3ab-29036880f760', '', 'Moonshot', 'moonshot-v1-8k', '飒飒', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:53:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169680, 83706726461169674, 'chatcmpl-67dcfeea85837ca25028e279', '2263eafd-381d-4c16-a3ab-29036880f760', 'Moonshot', 'moonshot-v1-8k', '\"飒飒\"这个词在中文里通常用来形容风声或者某些物体快速移动时发出的声音。它也可以形容事物迅速而有力。如果你有更具体的问题或者需要进一步的解释,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:53:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169681, 83706726461169674, '2ec2e23d-6c74-4fec-a62d-07f693c23356', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 13:54:08', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169682, 83706726461169674, 'bc2705b6-28f8-4659-b4f0-bf84e60f1d43', '', 'Moonshot', 'moonshot-v1-8k', '额外全额完全', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:54:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169683, 83706726461169674, 'chatcmpl-67dcff080a3bc35c71fd2982', 'bc2705b6-28f8-4659-b4f0-bf84e60f1d43', 'Moonshot', 'moonshot-v1-8k', '您好,看起来您发送的内容是关于一个营业执照的信息,但是您的问题“额外全额完全”似乎与营业执照的内容不相关,也不是一个完整的问题。如果您需要关于营业执照的具体信息或者有其他问题,请提供更多的上下文或者详细说明您的问题,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:54:16', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169685, 83706726461169684, '88b5308d-0cf2-4b7c-a773-a76c9e18f8be', '', 'Moonshot', 'moonshot-v1-8k', '额外全额完全', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:55:10', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169686, 83706726461169684, 'chatcmpl-67dcff3985837ca25028e478', '88b5308d-0cf2-4b7c-a773-a76c9e18f8be', 'Moonshot', 'moonshot-v1-8k', '您好,看起来您发送了两张图片,一张是关于抽奖的图片,另一张是关于营业执照的图片。不过,您提供的“额外全额完全”这个短语似乎不完整,我不太明白您想要表达的具体含义或需要我提供什么样的帮助。\n\n如果您需要我帮助解读营业执照上的信息,我可以告诉您这张营业执照上的主要信息:\n\n- 统一社会信用代码:91520102MACEC9EM04\n- 公司名称:贵州旭博美网络科技有限公司\n- 公司类型:其他有限责任公司\n- 法定代表人:李盛良\n- 经营范围:未提供具体内容\n- 注册资本:壹仟万圆整\n- 成立日期:2023年04月10日\n- 住所:贵州省贵阳市南明区小车河街道花果园路花果园项目R-2区第1栋(1)1单元4层8号[小车河办事处]\n- 登记机关:2023年27月日(这个日期可能有误,因为一个月最多31天)\n\n如果您有其他具体的问题或需要进一步的帮助,请提供更多的信息或详细说明您的需求。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:55:11', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169687, 83706726461169684, 'e25d719a-bcef-4cc5-a72c-aa7d76ebe0b3', '', 'Moonshot', 'moonshot-v1-8k', '帮我查看这文件是什么内容', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:56:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169688, 83706726461169684, 'chatcmpl-67dcffa5bde399bd94a60ce2', 'e25d719a-bcef-4cc5-a72c-aa7d76ebe0b3', 'Moonshot', 'moonshot-v1-8k', '您提供的文件内容是一张图片,其中包含了一张营业执照的信息。以下是图片中营业执照的详细信息:\n\n- **统一社会信用代码**:91520102MACEC9EM04\n- **名称**:贵州旭博美网络科技有限公司\n- **类型**:其他有限责任公司\n- **法定代表人**:李盛良\n- **经营范围**:(具体经营范围未提供)\n- **注册资本**:壹仟万圆整\n- **成立日期**:2023年04月10日\n- **住所**:贵州省贵阳市南明区小车河街道花果园路花果园项目R-2区第1栋(1)1单元4层8号[小车河办事处]\n- **登记机关**:2023年27月日(这里可能是一个错误,因为一个月最多只有31天,可能是笔误)\n\n请注意,图片中提到的“2023年27月日”可能是一个错误,因为一年中没有第27个月。如果您需要进一步的帮助或有其他问题,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:56:57', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169689, 83706726461169684, 'e1e494f0-4c6c-4152-9300-e1b3297910e7', '', 'Moonshot', 'moonshot-v1-8k', '帮我查看文档里面有什么内容,总结一下', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 13:59:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169690, 83706726461169684, 'chatcmpl-67dd0042bde399bd94a61300', 'e1e494f0-4c6c-4152-9300-e1b3297910e7', 'Moonshot', 'moonshot-v1-8k', '根据您提供的文件信息,文档中包含的内容可以总结如下:\n\n1. **刷题小程序需求**:\n - 使用技术栈:Vue 3 + TypeScript + Vite + Pinia。\n - 需要实现可交互的伪数据,例如学习进度。\n\n2. **主页设计**:\n - 包含章节练习和课程列表。\n - 可以参考提供的图片(虽然图片未提供,但可以假设有图片作为参考)。\n - 导航部分不需要实现,只需完成主页部分。\n\n3. **章节练习列表**:\n - 需要实现一个章节练习列表页面。\n - 完成一个页签即可。\n\n4. **答题内容展示**:\n - 点击列表进入答题内容页面。\n - 展示10个题目。\n\n5. **答题卡功能**:\n - 查看做对的、做错的、未做的题目。\n - 需要自行添加做错题目的显示。\n\n6. **交卷交互**:\n - 实现一个交卷的交互动作。\n\n7. **课程列表**:\n - 需要一个视频课程列表。\n - 点击进去能播放视频。\n\n8. **视频交互**:\n - 将视频分成四个部分。\n - 弹出题目,需要点击正确的部位作为答案。\n - 选对继续看视频,选错暂停10秒并给出错题解析的反馈。\n\n以上是文档内容的总结。如果您需要更详细的信息或者具体的实现步骤,可以进一步提供文档中的具体内容或者图片。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 13:59:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169691, 83706726461169684, '3be071e1-3bd7-4865-a6e7-acc14424066a', '', 'Moonshot', 'moonshot-v1-8k', '那现在这个文档又是什么内容', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:00:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169692, 83706726461169684, 'chatcmpl-67dd007cdef9311024ce8db4', '3be071e1-3bd7-4865-a6e7-acc14424066a', 'Moonshot', 'moonshot-v1-8k', '您提供的是一个包含刷题小程序需求的文档,文档中描述了小程序的功能和界面要求。以下是文档内容的概要:\n\n1. **技术栈**:使用 Vue 3、TypeScript、Vite 和 Pinia 来构建小程序。\n\n2. **主页功能**:\n - 包含章节练习和课程列表。\n - 可以参考提供的图片(虽然图片没有实际包含在文档中)。\n\n3. **章节练习列表**:\n - 需要完成一个页签。\n - 点击列表进入答题内容,展示10个题目。\n\n4. **答题卡功能**:\n - 查看做对的、做错的、未做的题目。\n - 需要自己添加做错题目的显示。\n\n5. **交卷交互**:\n - 最后有一个交卷的交互动作。\n\n6. **课程列表**:\n - 需要一个视频课程列表。\n - 点击进去能播放视频,只需要一个视频。\n\n7. **视频交互**:\n - 视频分成四个部分。\n - 弹出题目,需要点击正确的部位作为答案。\n - 选对继续看视频,选错暂停10秒并给出错题解析的反馈。\n\n文档中提到的“下图”并没有包含在您发送的文件中,因此无法提供具体的界面设计参考。如果您需要具体的代码实现或者有其他问题,请告知,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:00:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169693, 83706726461169684, 'a755063b-5bee-435a-9512-2984007c5bf7', '', 'Moonshot', 'moonshot-v1-8k', '帮我查看文档的内容是什么,总结一下', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:01:21', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169694, 83706726461169684, 'chatcmpl-67dd00ab85837ca25028ef4c', 'a755063b-5bee-435a-9512-2984007c5bf7', 'Moonshot', 'moonshot-v1-8k', '根据您提供的文件信息,文档内容是关于开发一个刷题小程序的需求说明。以下是文档内容的总结:\n\n1. **技术栈要求**:\n - 使用 Vue 3\n - 使用 TypeScript\n - 使用 Vite 作为构建工具\n - 使用 Pinia 作为状态管理库\n\n2. **主页功能**:\n - 包含章节练习和课程列表\n - 可以参考提供的图片设计(导航部分不需要实现)\n\n3. **章节练习列表**:\n - 实现一个页签功能\n - 点击列表进入答题内容,展示10个题目\n\n4. **答题卡功能**:\n - 查看做对的、做错的、未做的题目\n - 需要自行添加做错题目的显示\n\n5. **交卷交互**:\n - 实现一个交卷的交互动作\n\n6. **课程列表**:\n - 实现一个视频课程列表\n - 点击可以播放视频\n\n7. **视频交互**:\n - 将视频分成四个部分\n - 弹出题目,需要点击正确的部位作为答案\n - 选对继续看视频,选错暂停10秒并给出错题解析的反馈\n\n文档中提到的“下图”和“参考下图”可能是指文档中包含的图片,但由于您提供的是文本描述,我无法查看实际的图片内容。您需要根据这些需求来设计和实现刷题小程序的功能。如果您需要具体的代码实现帮助或者有其他问题,请随时告知。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:01:22', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169695, 83706726461169684, '2b4b57fe-474a-4bd8-8f2e-74ca02f38538', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:03:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169696, 83706726461169684, '981a8733-aad1-4356-a76c-dc2e9b6bf903', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:04:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169699, 83706726461169698, '3c962de1-a913-4cf0-a599-2a58b4ef956d', '', 'Moonshot', 'moonshot-v1-8k', '帮我分析一下图片', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:06:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169700, 83706726461169698, 'chatcmpl-67dd01db0a3bc35c71fd424d', '3c962de1-a913-4cf0-a599-2a58b4ef956d', 'Moonshot', 'moonshot-v1-8k', '您好,看起来您尝试上传了一张图片并希望我进行分析。不过,我目前只能处理文本信息,无法直接分析图片内容。如果您能提供图片中的文字描述或者具体的问题,我会很乐意帮助您解答。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:06:19', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169702, 83706726461169701, '10e94fa6-d22f-46b4-9155-c64081a7adad', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:07:17', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169703, 83706726461169701, 'chatcmpl-67dd0216bde399bd94a6245e', '10e94fa6-d22f-46b4-9155-c64081a7adad', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"432432\",但这个数字似乎没有特定的上下文或问题。如果您需要帮助或有任何问题,请随时告诉我,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:07:18', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169704, 83706726461169701, '8aff01f2-d230-40b7-8c47-761d2e42bf38', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:07:33', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169705, 83706726461169701, 'd94be17f-ec5c-4379-a428-d40fff642f00', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:07:36', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169706, 83706726461169701, '379ce353-bf60-4c6e-b047-bd04a6a9ac91', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:07:42', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169707, 83706726461169701, '7ada607d-7562-415b-8b11-86020ef0fbde', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:07:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169708, 83706726461169701, '6b962785-4814-481d-956c-d7ab3f4af8fd', '', 'Moonshot', 'moonshot-v1-8k', '额我热分为', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:07:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169709, 83706726461169701, 'chatcmpl-67dd023885837ca25028fab1', '6b962785-4814-481d-956c-d7ab3f4af8fd', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您可能在尝试发送一些信息,但是提供的内容似乎是一些图片文件的描述和数学公式。如果您有任何具体的问题或者需要帮助的地方,请直接告诉我,我会尽力为您提供帮助。如果您需要对图片内容进行解读或者有其他问题,请详细说明。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:07:53', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169710, 83706726461169701, 'a47f265f-1dc3-4363-8645-42309066bcb8', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:12:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169711, 83706726461169701, '53147831-b50a-4617-a208-daad114e0595', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:12:41', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169712, 83706726461169701, '5d8b7c3a-0659-4d87-b6fc-7aab7514b59c', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:12:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169713, 83706726461169701, 'chatcmpl-67dd0362bde399bd94a63165', '5d8b7c3a-0659-4d87-b6fc-7aab7514b59c', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一些数字 \"432432\",但这个信息似乎不完整。如果您有任何问题或需要帮助,请提供更多的上下文或详细说明您的需求,我会尽力为您提供帮助。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:12:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169714, 83706726461169701, '12a32942-fa6b-4550-8fbc-29bb968543e8', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:13:50', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169715, 83706726461169701, '530689b4-c4ac-4fba-95f8-91d89f9ef33d', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:15:52', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169716, 83706726461169701, '6de3ce5e-62e4-4bae-9295-662bc419e06c', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:15:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169717, 83706726461169701, '344e873b-45f8-413e-bdef-7abc2bddf5a4', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:16:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169718, 83706726461169701, 'chatcmpl-67dd042e0a3bc35c71fd57f2', '344e873b-45f8-413e-bdef-7abc2bddf5a4', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个文件,但是您提供的“432432”这个数字似乎与文件内容无关。如果您需要我查看文件内容或者对文件进行特定的操作,请告诉我具体的要求。如果“432432”是您想要讨论的话题或者有其他含义,请提供更多的上下文,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:16:15', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169719, 83706726461169701, 'bd1834ac-37cf-4ebb-a0a0-50218c0f3e5f', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:16:24', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169720, 83706726461169701, '89ef2485-5e1f-4d27-a68e-ccf4f19ce515', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:16:27', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169721, 83706726461169701, 'd29ceb74-f2b6-435f-ae78-c4137c3d9657', '', 'Moonshot', 'moonshot-v1-8k', '32131', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:16:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169722, 83706726461169701, 'chatcmpl-67dd04400a3bc35c71fd58a2', 'd29ceb74-f2b6-435f-ae78-c4137c3d9657', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一些文件和一串数字“32131”。请问您需要我为您做些什么呢?如果您有任何问题或需要帮助,请随时告诉我。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:16:32', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169723, 83706726461169701, 'd1443eab-ee95-49b6-890d-f64edc7a36c2', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:19:35', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169724, 83706726461169701, '97852404-7f24-4e5d-82b9-8f6c1bdaa380', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:19:38', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169725, 83706726461169701, 'dc080d19-3634-4318-9755-36032a1c605e', '', 'Moonshot', 'moonshot-v1-8k', '342432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:19:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169726, 83706726461169701, 'chatcmpl-67dd0502def9311024cea918', 'dc080d19-3634-4318-9755-36032a1c605e', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一个数字 \"342432\"。请问您需要我为您做些什么?如果您有任何问题或需要帮助,请随时告诉我!', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:19:46', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169727, 83706726461169701, '1265ea97-e355-4d2f-a18f-0bea0059903b', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:20:26', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169728, 83706726461169701, 'ebe5ec6f-3e2d-4bab-8800-13d9a1edb7be', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:20:28', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169729, 83706726461169701, '8d561f5f-bafe-4583-b6d0-bfd35d8ccda2', '', 'Moonshot', 'moonshot-v1-8k', '432432', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:20:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169730, 83706726461169701, 'chatcmpl-67dd053285837ca250291310', '8d561f5f-bafe-4583-b6d0-bfd35d8ccda2', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您发送了一串数字 \"432432\",但并没有提供具体的上下文或问题。如果您需要帮助或有任何问题,请随时告诉我,我会尽力为您提供支持。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:20:34', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169731, 83706726461169701, '19ab252d-9af9-4035-ae22-29488fb69718', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:20:51', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169732, 83706726461169701, '2879e0cb-151e-4ff8-bdf8-e17f3ac4ad4a', '', 'Moonshot', 'moonshot-v1-8k', '', 'text', 'user', '', 1, '', 0, NULL, '', 3, '2025-03-21 14:20:55', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169733, 83706726461169701, '84ab3846-62ff-4091-a47e-6886f642c649', '', 'Moonshot', 'moonshot-v1-8k', '43242', 'text', 'user', '', 2, '', 0, NULL, '', 3, '2025-03-21 14:21:20', NULL, NULL, 0); -INSERT INTO `ai_gpt_chat_message` VALUES (83706726461169734, 83706726461169701, 'chatcmpl-67dd055085837ca2502913ca', '84ab3846-62ff-4091-a47e-6886f642c649', 'Moonshot', 'moonshot-v1-8k', '您好!看起来您需要帮助完成一个刷题小程序,并且您已经提供了一些需求和参考图。不过,您发送的文件我无法直接查看,但我可以根据您提供的文字描述来给您一些指导。\n\n以下是根据您的需求,使用 Vue 3 + TypeScript + Vite + Pinia 技术栈实现刷题小程序的基本步骤:\n\n1. **项目初始化**:\n 使用 Vite 创建一个新的 Vue 3 项目,并选择 TypeScript 作为开发语言。\n\n ```bash\n npm create vite@latest my-vue-app --template vue-ts\n cd my-vue-app\n npm install\n ```\n\n2. **安装 Pinia**:\n 在项目中安装 Pinia 作为状态管理库。\n\n ```bash\n npm install pinia\n ```\n\n3. **创建 Pinia 存储**:\n 创建一个 Pinia 存储来管理学习进度等伪数据。\n\n ```typescript\n // src/stores/progress.ts\n import { defineStore } from \'pinia\';\n\n export const useProgressStore = defineStore(\'progress\', {\n state: () => ({\n progress: 0,\n }),\n actions: {\n updateProgress(value: number) {\n this.progress = value;\n },\n },\n });\n ```\n\n4. **创建主页组件**:\n 创建一个主页组件,包含章节练习和课程列表。\n\n ```vue\n \n \n\n \n ```\n\n5. **创建章节练习详情页**:\n 创建一个章节练习详情页,展示10个题目。\n\n6. **答题卡组件**:\n 创建一个答题卡组件,展示做对的、做错的、未做的题目。\n\n7. **交卷交互**:\n 实现一个交卷的交互动作,可以是按钮点击事件。\n\n8. **视频课程列表**:\n 创建一个视频课程列表,点击可以播放视频。\n\n9. **视频交互**:\n 实现视频的交互,将视频分成四个部分,并在每个部分后弹出题目。\n\n由于您提供的文件我无法查看,以上步骤仅供参考。如果您需要具体的代码实现或者有其他问题,请提供更多的信息或者直接上传代码文件,我会尽力帮助您。', 'text', 'assistant', 'stop', 2, '', 0, NULL, '', 3, '2025-03-21 14:21:20', NULL, NULL, 0); -- ---------------------------- -- Table structure for ai_gpt_comb @@ -1375,7 +193,7 @@ CREATE TABLE `ai_gpt_comb` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员套餐' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员套餐' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_comb @@ -1408,7 +226,7 @@ CREATE TABLE `ai_gpt_model` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '大模型信息' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '大模型信息' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_model @@ -1447,7 +265,7 @@ CREATE TABLE `ai_gpt_openkey` ( PRIMARY KEY (`id`) USING BTREE, INDEX `app_key`(`app_key` ASC) USING BTREE, INDEX `model`(`model` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'openai token' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'openai token' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_openkey @@ -1482,7 +300,7 @@ CREATE TABLE `ai_gpt_order` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_order @@ -1506,7 +324,7 @@ CREATE TABLE `ai_gpt_redemption` ( `updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '兑换码' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '兑换码' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_gpt_redemption @@ -1530,7 +348,7 @@ CREATE TABLE `ai_oauth_client_details` ( `autoapprove` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'false' COMMENT '自动授权', `remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`client_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '认证授权表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '认证授权表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ai_oauth_client_details @@ -1546,81 +364,35 @@ CREATE TABLE `base_config` ( `config_name` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数名称', `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键名', `config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '参数键值', + `is_del` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除', `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间', `create_by` bigint NOT NULL DEFAULT 3 COMMENT '创建人', `update_by` bigint NULL DEFAULT NULL COMMENT '最后更新人', - `is_del` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除', + `tenant_id` bigint NOT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `key`(`config_key` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '参数配置表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of base_config -- ---------------------------- -INSERT INTO `base_config` VALUES (1, 'system', '{\"title\":\"系统名称\",\"componentType\":\"text\",\"value\":\"Hula-IM\",\"configKey\":\"systemName\",\"type\":\"system\"}', 'systemName', 'HuLa', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (2, 'system', '{\"title\":\"系统Logo\",\"componentType\":\"text\",\"value\":\"/static/img/Iogo.png\",\"configKey\":\"logo\",\"type\":\"system\"}', 'logo', '/static/img/Iogo.png', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (3, 'qiniu_up_config', '{\"title\":\"空间域名 Domain\",\"componentType\":\"text\",\"value\":\"https://upload-z2.qiniup.com\",\"configKey\":\"qnUploadUrl\",\"type\":\"qiniu_up_config\"}', 'qnUploadUrl', 'https://up-as0.qiniup.com', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (4, 'qiniu_up_config', '{\"title\":\"accessKey\",\"componentType\":\"text\",\"value\":\"8si6G12t2MG9IOdkNDYmL0vGAYFTW-rHl4LgA5_\",\"configKey\":\"qnAccessKey\",\"type\":\"qiniu_up_config\"}', 'qnAccessKey', 'LXrRo6YhTn1AlX79VS8uhy5yScLzQJAQaUGUJ', '2025-07-24 16:33:39.290', '2025-08-15 11:33:45.952', 3, NULL, 0); -INSERT INTO `base_config` VALUES (5, 'qiniu_up_config', '{\"title\":\"SecretKey\",\"componentType\":\"text\",\"value\":\"MLzT2U2daTXFDEG9PuAy4TnvfR1oXvK2Yipm_eS9\",\"configKey\":\"qnSecretKey\",\"type\":\"qiniu_up_config\"}', 'qnSecretKey', 'BYKKz6nIjHSJLar1KgX6C300BlVS-llemF2Hg', '2025-07-24 16:33:39.290', '2025-08-15 11:33:47.827', 3, NULL, 0); -INSERT INTO `base_config` VALUES (6, 'qiniu_up_config', '{\"title\":\"存储空间名称\",\"componentType\":\"text\",\"value\":\"hula\",\"configKey\":\"qnStorageName\",\"type\":\"qiniu_up_config\"}', 'qnStorageName', 'hula-spark', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (7, 'qiniu_up_config', '{\"title\":\"七牛云CDN(访问图片用的)\",\"componentType\":\"text\",\"value\":\"https://file.hula.com/\",\"configKey\":\"qnStorageCDN\",\"type\":\"qiniu_up_config\"}', 'qnStorageCDN', 'https://cdn.hulaspark.com', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (8, 'system', '{\"title\":\"大群ID\",\"componentType\":\"text\",\"value\":\"1\",\"configKey\":\"roomGroupId\",\"type\":\"system\"}', 'roomGroupId', '1', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (9, 'qiniu_up_config', '{\"title\":\"超过多少MB开启分片上传\",\"componentType\":\"text\",\"value\":\"500\",\"configKey\":\"turnSharSize\",\"type\":\"qiniu_up_config\"}', 'turnSharSize', '4', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (10, 'qiniu_up_config', '{\"title\":\"分片大小\",\"componentType\":\"text\",\"value\":\"50\",\"configKey\":\"fragmentSize\",\"type\":\"shop_config\"}', 'fragmentSize', '2', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (11, 'qiniu_up_config', '{\"title\":\"OSS引擎\",\"componentType\":\"text\",\"value\":\"qiniu\",\"configKey\":\"storageDefault\",\"type\":\"shop_config\"}', 'storageDefault', 'qiniu', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (12, 'system', '{\"title\":\"Hula注册邮箱模板\",\"componentType\":\"text\",\"value\":\"\",\"configKey\":\"codeHtmlTemplate\",\"type\":\"shop_config\"}', 'codeHtmlTemplate', '{}
\"HuLa

亲爱的{}用户,您好:

首先感谢您使用{},请在验证页面输入以下验证码:

{}

本验证码{}分钟内有效,为了保障您的账户安全,请不要告诉别人
如果您有什么疑问可以联系管理员,Email: {}

{}

{}

本邮件系统自动发送,请勿回复
请保管好您的邮箱,避免账号被他人盗用

', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (13, 'system', '{\"title\":\"Hula管理员邮箱\",\"componentType\":\"text\",\"value\":\"\",\"configKey\":\"masterEmail\",\"type\":\"system\"}', 'masterEmail', '', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (14, 'system', '{\"title\":\"AI基础信息\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"baseInfo\",\"type\":\"site_config\"}', 'baseInfo', '{\"contentSecurity\":0,\"copyright\":\"© 2025 earth 湘ICP备2022002224号-1 xxxx技有限公司\",\"descrip\":\"HulaAi,基于AI大模型api实现的ChatGPT服务,支持ChatGPT(3.5、4.0)模型,同时也支持国内文心一言(支持Stable-Diffusion-XL作图)、通义千问、讯飞星火、智谱清言(ChatGLM)等主流模型,支出同步响应及流式响应,完美呈现打印机效果。\",\"keywords\":[\"通义千问\",\"ChatGPT\",\"文心一言\",\"智谱清言\"],\"proxyServer\":\"\",\"siteTitle\":\"HulaAi\",\"domain\":\"https://gpt.panday94.xyz\",\"proxyType\":2,\"siteLogo\":\"\"}', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (15, 'system', '{\"title\":\"AI 扩展配置\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"extraInfo\",\"type\":\"site_config\"}', 'extraInfo', '{\"ossType\":1,\"smsType\":0}', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (16, 'system', '{\"title\":\"AI AppInfo\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"appInfo\",\"type\":\"site_config\"}', 'appInfo', '{\"h5Url\":\"https://gpt.panday94.xyz/h5\",\"isSms\":1,\"homeNotice\":\"确保合法合规使用,在运营过程中产生的一切问题后果自负,与作者无关。!\",\"isGptLimit\":0,\"isShare\":1,\"shareRewardNum\":\"20\",\"freeNum\":\"5\",\"isRedemption\":1}', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); -INSERT INTO `base_config` VALUES (17, 'system', '{\"title\":\"AI 微信配置\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"wxInfo\",\"type\":\"site_config\"}', 'wxInfo', '{\"mpLogin\":0,\"mpPay\":0,\"maAppId\":\"xx\",\"maSecret\":\"xx\",\"mpAppId\":\"xx\",\"mpSecret\":\"xx\",\"mchNo\":\"xx\",\"v3Secret\":\"xx\"}', '2025-07-24 16:33:39.290', '2025-07-24 16:33:39.290', 3, NULL, 0); - --- ---------------------------- --- Table structure for def_user --- ---------------------------- -DROP TABLE IF EXISTS `def_user`; -CREATE TABLE `def_user` ( - `id` bigint NOT NULL COMMENT 'ID', - `system_type` tinyint NOT NULL DEFAULT 1 COMMENT '1-后台登录; 2-IM系统登录', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名;大小写数字下划线', - `nick_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '昵称', - `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱', - `avatar` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '头像', - `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '手机;1开头11位纯数字', - `id_card` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '身份证;15或18位', - `wx_open_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信OpenId', - `dd_open_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '钉钉OpenId', - `readonly` bit(1) NOT NULL DEFAULT b'0' COMMENT '内置;[0-否 1-是]', - `nation` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '民族;[01-汉族 99-其他]@Echo(api = EchoApi.DICTIONARY_ITEM_FEIGN_CLASS, dictType = EchoDictType.Global.NATION)', - `education` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '学历;[01-小学 02-中学 03-高中 04-专科 05-本科 06-硕士 07-博士 08-博士后 99-其他]@Echo(api = EchoApi.DICTIONARY_ITEM_FEIGN_CLASS, dictType = EchoDictType.Global.EDUCATION)', - `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '1' COMMENT '性别;[1-男 2-女 3-未知]\n@Echo(api = EchoApi.DICTIONARY_ITEM_FEIGN_CLASS, dictType = EchoDictType.Global.SEX)', - `state` bit(1) NULL DEFAULT b'1' COMMENT '状态;[0-禁用 1-启用]', - `work_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '工作描述', - `last_opt_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '最后上下线时间', - `ip_info` json NULL COMMENT 'ip信息', - `password_error_last_time` datetime NULL DEFAULT NULL COMMENT '输错密码时间', - `password_error_num` int NULL DEFAULT 0 COMMENT '密码错误次数', - `password_expire_time` datetime NULL DEFAULT NULL COMMENT '密码过期时间', - `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '密码', - `salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '密码盐', - `last_login_time` datetime NULL DEFAULT NULL COMMENT '最后登录时间', - `create_by` bigint NULL DEFAULT NULL COMMENT '创建人id', - `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', - `update_by` bigint NULL DEFAULT NULL COMMENT '更新人id', - `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', - `is_del` tinyint(1) NOT NULL DEFAULT 0, - `tenant_id` bigint NOT NULL DEFAULT 0, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_user_username`(`system_type` ASC, `username` ASC) USING BTREE, - UNIQUE INDEX `uk_user_email`(`email` ASC) USING BTREE, - UNIQUE INDEX `uk_user_id_card`(`id_card` ASC) USING BTREE, - UNIQUE INDEX `uk_user_mobile`(`system_type` ASC, `mobile` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of def_user --- ---------------------------- +INSERT INTO `base_config` VALUES (1, 'system', '{\"title\":\"系统名称\",\"componentType\":\"text\",\"value\":\"Hula-IM\",\"configKey\":\"systemName\",\"type\":\"system\"}', 'systemName', 'HuLa', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (2, 'system', '{\"title\":\"系统Logo\",\"componentType\":\"text\",\"value\":\"/static/img/Iogo.png\",\"configKey\":\"logo\",\"type\":\"system\"}', 'logo', '/static/img/Iogo.png', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (3, 'qiniu_up_config', '{\"title\":\"空间域名 Domain\",\"componentType\":\"text\",\"value\":\"https://upload-z2.qiniup.com\",\"configKey\":\"qnUploadUrl\",\"type\":\"qiniu_up_config\"}', 'qnUploadUrl', 'https://up-z2.qiniup.com', 0, '2025-06-26 07:42:06.404', '2025-08-18 04:29:56.616', 3, NULL, 0); +INSERT INTO `base_config` VALUES (4, 'qiniu_up_config', '{\"title\":\"accessKey\",\"componentType\":\"text\",\"value\":\"8si6G12t2MG9IOdkNDYmL0vGAYFTW-rHl4LgA5_\",\"configKey\":\"qnAccessKey\",\"type\":\"qiniu_up_config\"}', 'qnAccessKey', 'LXrRo6YhTnU0-_AlX222279VS8uhy5yScLzQJAQaUGUJ', 0, '2025-06-26 07:42:06.404', '2025-08-27 11:14:13.672', 3, NULL, 0); +INSERT INTO `base_config` VALUES (5, 'qiniu_up_config', '{\"title\":\"SecretKey\",\"componentType\":\"text\",\"value\":\"MLzT2U2daTXFDEG9PuAy4TnvfR1oXvK2Yipm_eS9\",\"configKey\":\"qnSecretKey\",\"type\":\"qiniu_up_config\"}', 'qnSecretKey', 'BYKKz6nIjHSJLarEQxLK222gX6C300BlVS-llemF2Hg', 0, '2025-06-26 07:42:06.404', '2025-08-27 11:14:11.819', 3, NULL, 0); +INSERT INTO `base_config` VALUES (6, 'qiniu_up_config', '{\"title\":\"存储空间名称\",\"componentType\":\"text\",\"value\":\"hula\",\"configKey\":\"qnStorageName\",\"type\":\"qiniu_up_config\"}', 'qnStorageName', 'hula-spark', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (7, 'qiniu_up_config', '{\"title\":\"七牛云CDN(访问图片用的)\",\"componentType\":\"text\",\"value\":\"https://file.hula.com/\",\"configKey\":\"qnStorageCDN\",\"type\":\"qiniu_up_config\"}', 'qnStorageCDN', 'https://cdn.hulaspark.com', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (8, 'system', '{\"title\":\"大群ID\",\"componentType\":\"text\",\"value\":\"1\",\"configKey\":\"roomGroupId\",\"type\":\"system\"}', 'roomGroupId', '1', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (9, 'qiniu_up_config', '{\"title\":\"超过多少MB开启分片上传\",\"componentType\":\"text\",\"value\":\"500\",\"configKey\":\"turnSharSize\",\"type\":\"qiniu_up_config\"}', 'turnSharSize', '4', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (10, 'qiniu_up_config', '{\"title\":\"分片大小\",\"componentType\":\"text\",\"value\":\"50\",\"configKey\":\"fragmentSize\",\"type\":\"shop_config\"}', 'fragmentSize', '2', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (11, 'qiniu_up_config', '{\"title\":\"OSS引擎\",\"componentType\":\"text\",\"value\":\"qiniu\",\"configKey\":\"storageDefault\",\"type\":\"shop_config\"}', 'storageDefault', 'qiniu', 0, '2025-06-26 07:42:06.404', '2025-06-26 07:42:06.494', 3, NULL, 0); +INSERT INTO `base_config` VALUES (12, 'system', '{\"title\":\"Hula管理员邮箱\",\"componentType\":\"text\",\"value\":\"\",\"configKey\":\"masterEmail\",\"type\":\"system\"}', 'masterEmail', 'nongyehong919@163.com', 0, '2025-06-26 07:42:06.404', '2025-07-16 19:58:20.816', 3, NULL, 0); +INSERT INTO `base_config` VALUES (13, 'system', '{\"title\":\"AI基础信息\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"baseInfo\",\"type\":\"site_config\"}', 'baseInfo', '{\"contentSecurity\":0,\"copyright\":\"© 2025 luohuo 粤ICP备2025455944号 深圳市络火科技有限公司\",\"descrip\":\"HulaAi,基于AI大模型api实现的ChatGPT服务,支持ChatGPT(3.5、4.0)模型,同时也支持国内文心一言(支持Stable-Diffusion-XL作图)、通义千问、讯飞星火、智谱清言(ChatGLM)等主流模型,支出同步响应及流式响应,完美呈现打印机效果。\",\"keywords\":[\"通义千问\",\"ChatGPT\",\"文心一言\",\"智谱清言\"],\"proxyServer\":\"\",\"siteTitle\":\"HulaAi\",\"domain\":\"https://gpt.panday94.xyz\",\"proxyType\":2,\"siteLogo\":\"\"}', 0, '2025-06-26 07:42:06.404', '2025-08-18 04:32:58.114', 3, NULL, 0); +INSERT INTO `base_config` VALUES (14, 'system', '{\"title\":\"AI 扩展配置\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"extraInfo\",\"type\":\"site_config\"}', 'extraInfo', '{\"ossType\":1,\"smsType\":0}', 0, '2025-06-26 07:42:06.404', '2025-07-16 19:58:23.711', 3, NULL, 0); +INSERT INTO `base_config` VALUES (15, 'system', '{\"title\":\"AI AppInfo\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"appInfo\",\"type\":\"site_config\"}', 'appInfo', '{\"h5Url\":\"https://gpt.panday94.xyz/h5\",\"isSms\":1,\"homeNotice\":\"确保合法合规使用,在运营过程中产生的一切问题后果自负,与作者无关。!\",\"isGptLimit\":0,\"isShare\":1,\"shareRewardNum\":\"20\",\"freeNum\":\"5\",\"isRedemption\":1}', 0, '2025-06-26 07:42:06.404', '2025-07-16 19:58:24.711', 3, NULL, 0); +INSERT INTO `base_config` VALUES (16, 'system', '{\"title\":\"AI 微信配置\",\"componentType\":\"text\",\"value\":\"system/material/20250305/aX3YYCCpDf.png\",\"configKey\":\"wxInfo\",\"type\":\"site_config\"}', 'wxInfo', '{\"mpLogin\":0,\"mpPay\":0,\"maAppId\":\"xx\",\"maSecret\":\"xx\",\"mpAppId\":\"xx\",\"mpSecret\":\"xx\",\"mchNo\":\"xx\",\"v3Secret\":\"xx\"}', 0, '2025-06-26 07:42:06.404', '2025-07-16 19:58:26.063', 3, NULL, 0); -- ---------------------------- -- Table structure for im_announcements @@ -1640,7 +412,7 @@ CREATE TABLE `im_announcements` ( `publish_time` datetime NULL DEFAULT NULL COMMENT '发布时间', `tenant_id` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 61882962622465 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天公告表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 66202684729345 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天公告表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_announcements @@ -1661,7 +433,7 @@ CREATE TABLE `im_announcements_read_records` ( `tenant_id` bigint NOT NULL DEFAULT 1, `create_by` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '公告是否已读表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '公告是否已读表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_announcements_read_records @@ -1684,7 +456,7 @@ CREATE TABLE `im_black` ( `tenant_id` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `idx_type_target`(`type` ASC, `target` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '黑名单' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '黑名单' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_black @@ -1716,14 +488,15 @@ CREATE TABLE `im_contact` ( UNIQUE INDEX `uniq_uid_room_id`(`uid` ASC, `room_id` ASC) USING BTREE, INDEX `idx_room_id_read_time`(`room_id` ASC, `read_time` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, - INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 60758427809732 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会话列表' ROW_FORMAT = DYNAMIC; + INDEX `idx_update_time`(`update_time` ASC) USING BTREE, + INDEX `idx_contact_room_uid_hide`(`room_id` ASC, `uid` ASC, `hide` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 65033612208054 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会话列表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_contact -- ---------------------------- -INSERT INTO `im_contact` VALUES (10937855681025, 10937855681024, 1, 0, 0, '2025-08-15 19:55:24.913', 1, 0, '2025-08-15 12:01:05.090', 62512179534336, '2025-03-27 04:23:08.420', '2025-08-15 19:55:24.914', 1, 0, 61847994706433, 0); -INSERT INTO `im_contact` VALUES (10937855681525, 1, 1, 0, 0, '2025-07-07 14:49:04.239', 1, 0, '2025-08-15 12:01:05.090', 62512179534336, '2025-03-27 04:23:08.420', '2025-08-15 04:01:06.306', 1, 0, NULL, 0); +INSERT INTO `im_contact` VALUES (10937855681025, 10937855681024, 1, 0, 0, '2025-08-25 18:33:09.986', 1, 0, '2025-08-27 19:01:44.000', 66966694008337, '2025-03-27 04:23:08.420', '2025-08-27 11:02:31.422', 1, 0, 61847994706433, 0); +INSERT INTO `im_contact` VALUES (10937855681525, 1, 1, 0, 0, '2025-07-07 14:49:04.239', 1, 0, '2025-08-27 19:01:44.000', 66966694008337, '2025-03-27 04:23:08.420', '2025-08-27 11:02:31.422', 1, 0, NULL, 0); -- ---------------------------- -- Table structure for im_feed @@ -1741,7 +514,7 @@ CREATE TABLE `im_feed` ( `is_del` tinyint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `uid`(`u_id` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_feed @@ -1761,7 +534,7 @@ CREATE TABLE `im_feed_media` ( `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈资源表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈资源表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_feed_media @@ -1781,12 +554,38 @@ CREATE TABLE `im_feed_target` ( `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈可见表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '朋友圈可见表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_feed_target -- ---------------------------- +-- ---------------------------- +-- Table structure for im_group_invite +-- ---------------------------- +DROP TABLE IF EXISTS `im_group_invite`; +CREATE TABLE `im_group_invite` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `group_id` bigint NOT NULL COMMENT '群组ID', + `inviter_uid` bigint NOT NULL COMMENT '邀请人ID', + `invitee_uid` bigint NOT NULL COMMENT '被邀请人ID', + `tenant_id` bigint NOT NULL DEFAULT 1, + `state` tinyint NOT NULL DEFAULT 0 COMMENT '0=待审批,1=已同意,2=已拒绝', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_by` bigint NOT NULL DEFAULT 1 COMMENT '创建者', + `update_by` bigint NULL DEFAULT NULL COMMENT '更新者', + `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_invitee_state`(`invitee_uid` ASC, `state` ASC) USING BTREE, + INDEX `idx_group`(`group_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 62581624628737 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '群组邀请记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of im_group_invite +-- ---------------------------- +INSERT INTO `im_group_invite` VALUES (62581624628736, 26248738827266, 10937855681024, 11013365735936, 1, 0, '2025-08-15 16:37:03', '2025-08-15 16:37:03', 10937855681024, 61847994706433, 0); + -- ---------------------------- -- Table structure for im_group_member -- ---------------------------- @@ -1809,13 +608,13 @@ CREATE TABLE `im_group_member` ( INDEX `idx_group_id_role`(`group_id` ASC, `role_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 62614600250374 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群成员表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65161763333633 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群成员表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_group_member -- ---------------------------- -INSERT INTO `im_group_member` VALUES (10937855681026, 1, 1, 3, '', 0, '', '2025-03-27 04:23:08.435', '2025-08-15 11:49:10.691', 1, 0, NULL, 0); -INSERT INTO `im_group_member` VALUES (10937855681027, 1, 10937855681024, 3, '', 0, '', '2025-03-27 04:23:08.435', '2025-03-27 04:23:08.435', 1, 0, NULL, 0); +INSERT INTO `im_group_member` VALUES (10937855681026, 1, 10937855681024, 3, '', 0, '', '2025-03-27 04:23:08.435', '2025-03-27 04:23:08.435', 1, 0, 61847994706433, 0); +INSERT INTO `im_group_member` VALUES (10937855681626, 1, 1, 3, '', 0, '', '2025-03-27 04:23:08.435', '2025-03-27 04:23:08.435', 1, 0, NULL, 0); -- ---------------------------- -- Table structure for im_item_config @@ -1835,7 +634,7 @@ CREATE TABLE `im_item_config` ( PRIMARY KEY (`id`) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '功能物品配置表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '功能物品配置表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_item_config @@ -1871,8 +670,8 @@ CREATE TABLE `im_message` ( INDEX `idx_room_id`(`room_id` ASC) USING BTREE, INDEX `idx_from_uid`(`from_uid` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, - INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 62614600250375 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表' ROW_FORMAT = DYNAMIC; + INDEX `idx_room_create_time`(`room_id` ASC, `create_time` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 66966777894428 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_message @@ -1880,9 +679,6 @@ CREATE TABLE `im_message` ( INSERT INTO `im_message` VALUES (10939168498176, 1, 10937855681024, NULL, NULL, 0, NULL, 7, '{\"recall\": null, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": null, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": {\"url\": \"https://bbs-static.miyoushe.com/static/2024/10/24/1b9f7abf6e8338291f02e882a1ffec64_7988382128756120451.png\"}, \"urlContentMap\": null}', '2025-03-27 04:28:21.410', NULL, '2025-03-27 04:28:21.431', NULL, 1, 0); INSERT INTO `im_message` VALUES (10939189469696, 1, 10937855681024, '更新咯', NULL, 0, NULL, 1, '{\"recall\": null, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": null, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": null, \"urlContentMap\": {}}', '2025-03-27 04:28:26.276', NULL, '2025-03-27 04:28:26.295', NULL, 1, 0); INSERT INTO `im_message` VALUES (10939243995648, 1, 10937855681024, '大家快来占沙发', NULL, 0, NULL, 1, '{\"recall\": null, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": null, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": null, \"urlContentMap\": {}}', '2025-03-27 04:28:39.792', NULL, '2025-03-27 04:28:39.800', NULL, 1, 0); -INSERT INTO `im_message` VALUES (10940166742528, 1, 10937855681024, NULL, NULL, 0, NULL, 7, '{\"recall\": null, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": null, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": {\"url\": \"https://bbs-static.miyoushe.com/static/2023/11/16/e03be25a7b2bc86f2b1909dddb6ca915_6686505940047795068.png\"}, \"urlContentMap\": null}', '2025-03-27 04:32:19.702', NULL, '2025-03-27 04:32:19.709', NULL, 1, 0); -INSERT INTO `im_message` VALUES (10951671718400, 1, 10937855681024, NULL, NULL, 0, NULL, 2, '{\"recall\": {\"recallUid\": 10937855681024, \"recallTime\": 1743023902823}, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": {\"url\": \"https://cdn.hulaspark.com/chat/2439646234/c64611c3bbbcd197552b7f84ac4b709b.jpg\", \"size\": 24498, \"width\": 310, \"height\": 320}, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": null, \"urlContentMap\": null}', '2025-03-27 05:18:02.008', NULL, '2025-03-27 05:18:22.834', NULL, 1, 0); -INSERT INTO `im_message` VALUES (10951743021568, 1, 10937855681024, NULL, NULL, 0, NULL, 7, '{\"recall\": null, \"fileMsg\": null, \"atUidList\": null, \"imgMsgDTO\": null, \"soundMsgDTO\": null, \"videoMsgDTO\": null, \"emojisMsgDTO\": {\"url\": \"https://cdn.hulaspark.com/chat/2439646234/c64611c3bbbcd197552b7f84ac4b709b.jpg\"}, \"urlContentMap\": null}', '2025-03-27 05:18:19.996', NULL, '2025-03-27 05:18:20.004', NULL, 1, 0); -- ---------------------------- -- Table structure for im_message_mark @@ -1905,7 +701,7 @@ CREATE TABLE `im_message_mark` ( INDEX `idx_uid`(`uid` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 60474725050369 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息标记表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 60474725050369 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息标记表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_message_mark @@ -1927,7 +723,7 @@ CREATE TABLE `im_role` ( PRIMARY KEY (`id`) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_role @@ -1955,12 +751,12 @@ CREATE TABLE `im_room` ( PRIMARY KEY (`id`) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 62614600250369 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '房间表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65146059858433 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '房间表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_room -- ---------------------------- -INSERT INTO `im_room` VALUES (1, 1, 1, '2025-08-15 12:01:05.090', 62512179534336, NULL, '2024-07-10 11:17:15.521', '2025-08-15 04:01:05.501', 1, 1, NULL, 0); +INSERT INTO `im_room` VALUES (1, 1, 1, '2025-08-27 19:02:04.507', 66966777894421, NULL, '2024-07-10 11:17:15.521', '2025-08-27 11:02:26.006', 1, 1, NULL, 0); -- ---------------------------- -- Table structure for im_room_friend @@ -1985,11 +781,13 @@ CREATE TABLE `im_room_friend` ( INDEX `idx_room_id`(`room_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 61851803134978 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '单聊房间表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 62581054203394 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '单聊房间表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_room_friend -- ---------------------------- +INSERT INTO `im_room_friend` VALUES (11229133317123, 11229133317122, 10937855681024, 1, '10937855681024,11225442329600', 0, 0, '2025-03-27 23:40:34.548', '2025-08-27 11:17:17.729', 1, 1, NULL, 0); +INSERT INTO `im_room_friend` VALUES (11367692149763, 11367692149762, 1, 10937855681024, '11003672699392,11049889735168', 0, 0, '2025-03-28 08:51:09.406', '2025-08-27 11:17:40.365', 1, 1, NULL, 0); -- ---------------------------- -- Table structure for im_room_group @@ -2012,7 +810,7 @@ CREATE TABLE `im_room_group` ( INDEX `idx_room_id`(`room_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 62614600250371 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群聊房间表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65146059858435 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '群聊房间表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_room_group @@ -2026,7 +824,7 @@ DROP TABLE IF EXISTS `im_sensitive_word`; CREATE TABLE `im_sensitive_word` ( `word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '敏感词', `tenant_id` bigint NOT NULL DEFAULT 1 -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '敏感词库' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '敏感词库' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_sensitive_word @@ -2054,7 +852,7 @@ CREATE TABLE `im_target` ( `tenant_id` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE, INDEX `employee`(`u_id` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天的标签' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天的标签' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_target @@ -2079,6 +877,7 @@ CREATE TABLE `im_user` ( `ip_info` json NULL COMMENT 'ip信息', `item_id` bigint NULL DEFAULT NULL COMMENT '佩戴的徽章id', `state` int NULL DEFAULT 0 COMMENT '使用状态 0.正常 1拉黑', + `resume` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '个人简介', `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间', `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户密码', @@ -2094,13 +893,13 @@ CREATE TABLE `im_user` ( INDEX `idx_update_time`(`update_time` ASC) USING BTREE, INDEX `idx_active_status_last_opt_time`(`last_opt_time` ASC) USING BTREE, INDEX `account_UNIQUE`(`account` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 60758427772929 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65033610564609 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user -- ---------------------------- -INSERT INTO `im_user` VALUES (1, 61847994706432, 2, 'HuLa小管家', '022', '', 'bot', NULL, '', 17, '2025-07-07 15:27:01.711', '{\"createIp\": \"206.237.119.215\", \"updateIp\": \"120.231.232.41\", \"createIpDetail\": {\"ip\": \"206.237.119.215\", \"isp\": \"XX\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"xx\", \"region\": \"XX\", \"city_id\": \"xx\", \"country\": \"美国\", \"region_id\": \"xx\", \"country_id\": \"US\"}, \"updateIpDetail\": {\"ip\": \"120.231.232.41\", \"isp\": \"移动\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"100025\", \"region\": \"广东\", \"city_id\": \"xx\", \"country\": \"中国\", \"region_id\": \"440000\", \"country_id\": \"CN\"}}', 6, 0, '2025-03-27 04:23:08.393', '2025-08-15 11:38:21.849', '123456', 0, NULL, 0, '2025-05-09 18:24:37.089', 99978, 0, 1); -INSERT INTO `im_user` VALUES (10937855681024, 61847994706433, 3, 'Dawn', 'https://cdn.hulaspark.com/avatar/2439646234/6ec99d37b8ba1296c325d2d36b46a14d.webp', '2439646234@qq.com', '2439646234', NULL, '', 12, '2025-07-30 15:31:57.651', '{\"createIp\": \"206.237.119.215\", \"updateIp\": \"120.229.24.173\", \"createIpDetail\": {\"ip\": \"206.237.119.215\", \"isp\": \"XX\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"xx\", \"region\": \"XX\", \"city_id\": \"xx\", \"country\": \"美国\", \"region_id\": \"xx\", \"country_id\": \"US\"}, \"updateIpDetail\": {\"ip\": \"120.229.24.173\", \"isp\": \"移动\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"100025\", \"region\": \"广东\", \"city_id\": \"xx\", \"country\": \"中国\", \"region_id\": \"440000\", \"country_id\": \"CN\"}}', 6, 0, '2025-03-27 04:23:08.393', '2025-08-15 11:38:15.235', '123456', 0, NULL, 0, '2025-05-09 18:24:37.089', 99978, 0, 1); +INSERT INTO `im_user` VALUES (1, 61847994706432, 2, 'HuLa小管家', '022', '', 'bot', NULL, '', 17, '2025-07-07 15:27:01.711', '{\"createIp\": \"206.237.119.215\", \"updateIp\": \"120.231.232.41\", \"createIpDetail\": {\"ip\": \"206.237.119.215\", \"isp\": \"XX\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"xx\", \"region\": \"XX\", \"city_id\": \"xx\", \"country\": \"美国\", \"region_id\": \"xx\", \"country_id\": \"US\"}, \"updateIpDetail\": {\"ip\": \"120.231.232.41\", \"isp\": \"移动\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"100025\", \"region\": \"广东\", \"city_id\": \"xx\", \"country\": \"中国\", \"region_id\": \"440000\", \"country_id\": \"CN\"}}', 6, 0, '', '2025-03-27 04:23:08.393', '2025-08-13 16:01:51.930', 'k.23772439646234', 0, NULL, 0, '2025-05-09 18:24:37.089', 99978, 0, 1); +INSERT INTO `im_user` VALUES (10937855681024, 61847994706433, 3, 'Dawn', 'https://cdn.hulaspark.com/avatar/2439646234/6ec99d37b8ba1296c325d2d36b46a14d.webp', '2439646234@qq.com', '2439646234', NULL, '', 9, '2025-07-30 15:31:57.651', '{\"createIp\": \"206.237.119.215\", \"updateIp\": \"120.229.24.173\", \"createIpDetail\": {\"ip\": \"206.237.119.215\", \"isp\": \"XX\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"xx\", \"region\": \"XX\", \"city_id\": \"xx\", \"country\": \"美国\", \"region_id\": \"xx\", \"country_id\": \"US\"}, \"updateIpDetail\": {\"ip\": \"120.229.24.173\", \"isp\": \"移动\", \"area\": \"\", \"city\": \"XX\", \"isp_id\": \"100025\", \"region\": \"广东\", \"city_id\": \"xx\", \"country\": \"中国\", \"region_id\": \"440000\", \"country_id\": \"CN\"}}', 6, 0, '', '2025-03-27 04:23:08.393', '2025-08-21 10:55:17.103', 'k.2439646234', 0, NULL, 0, '2025-05-09 18:24:37.089', 99978, 0, 1); -- ---------------------------- -- Table structure for im_user_apply @@ -2112,8 +911,9 @@ CREATE TABLE `im_user_apply` ( `type` int NOT NULL COMMENT '申请类型 1加好友 2 加群', `room_id` bigint NOT NULL COMMENT '房间id', `target_id` bigint NOT NULL COMMENT '接收对象 type: 1 -> uid; type: 2 -> roomGroupId', - `msg` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '申请信息', + `msg` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '申请信息', `status` int NOT NULL COMMENT '申请状态 1待审批 2同意', + `apply_for` tinyint NOT NULL DEFAULT 0 COMMENT '主动申请加群', `read_status` int NOT NULL COMMENT '阅读状态 1未读 2已读', `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间', @@ -2128,7 +928,7 @@ CREATE TABLE `im_user_apply` ( INDEX `idx_target_id`(`target_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 61851786357761 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户申请表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65161746556417 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户申请表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_apply @@ -2155,7 +955,7 @@ CREATE TABLE `im_user_backpack` ( INDEX `idx_uid`(`uid` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 60758427772938 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户背包表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 65033614758913 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户背包表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_backpack @@ -2175,7 +975,7 @@ CREATE TABLE `im_user_block` ( UNIQUE INDEX `uk_blocker_blocked`(`blocker_uid` ASC, `blocked_uid` ASC) USING BTREE, INDEX `idx_blocker`(`blocker_uid` ASC) USING BTREE, INDEX `idx_blocked`(`blocked_uid` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户屏蔽关系表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户屏蔽关系表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_block @@ -2197,7 +997,7 @@ CREATE TABLE `im_user_emoji` ( `update_by` bigint NULL DEFAULT NULL COMMENT '更新者', PRIMARY KEY (`id`) USING BTREE, INDEX `IDX_USER_EMOJIS_UID`(`uid` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 59075366823937 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表情包' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 59075366823937 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表情包' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_emoji @@ -2271,11 +1071,13 @@ CREATE TABLE `im_user_friend` ( INDEX `idx_uid_friend_uid`(`uid` ASC, `friend_uid` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 61851803134980 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户联系人表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 62581054203396 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户联系人表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_friend -- ---------------------------- +INSERT INTO `im_user_friend` VALUES (11367692149760, 1, 1, 10937855681024, 0, 0, 0, 0, 0, 0, 0, NULL, '2025-03-28 08:51:09.397', '2025-08-27 11:21:49.458', 1, 0, NULL); +INSERT INTO `im_user_friend` VALUES (11515012883456, 1, 10937855681024, 1, 0, 0, 0, 0, 0, 0, 0, NULL, '2025-03-28 18:36:33.214', '2025-08-27 11:21:47.141', 1, 0, NULL); -- ---------------------------- -- Table structure for im_user_privacy @@ -2301,7 +1103,7 @@ CREATE TABLE `im_user_privacy` ( `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `idx_uid`(`uid` ASC) USING BTREE COMMENT '用户ID唯一索引' -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户隐私设置表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户隐私设置表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_privacy @@ -2326,7 +1128,7 @@ CREATE TABLE `im_user_role` ( INDEX `idx_role_id`(`role_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_role @@ -2347,7 +1149,7 @@ CREATE TABLE `im_user_state` ( `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天用户状态表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '聊天用户状态表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_state @@ -2403,7 +1205,7 @@ CREATE TABLE `im_user_target_rel` ( `tenant_id` bigint NOT NULL DEFAULT 1, PRIMARY KEY (`id`) USING BTREE, INDEX `employee`(`u_id` ASC, `friend_id` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '人员标签关联表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci COMMENT = '人员标签关联表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_user_target_rel @@ -2424,7 +1226,7 @@ CREATE TABLE `im_wx_msg` ( INDEX `idx_open_id`(`open_id` ASC) USING BTREE, INDEX `idx_create_time`(`create_time` ASC) USING BTREE, INDEX `idx_update_time`(`update_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of im_wx_msg @@ -2449,7 +1251,7 @@ CREATE TABLE `secure_invoke_record` ( `is_del` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_next_retry_time`(`next_retry_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 62614600250376 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '本地消息表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 66602343194113 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '本地消息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of secure_invoke_record @@ -2468,15 +1270,10 @@ CREATE TABLE `worker_node` ( `modified` timestamp NULL DEFAULT NULL COMMENT '修改时间', `created` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 193 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'DB;WorkerID Assigner for UID Generator' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 241 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'DB;WorkerID Assigner for UID Generator' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of worker_node -- ---------------------------- -INSERT INTO `worker_node` VALUES (188, '240e:3b3:30b1:e800:fcd9:9796:fe2c:ecaa', '1755258150741-83400', 2, '2025-08-15', '2025-08-15 19:42:31', '2025-08-15 19:42:31'); -INSERT INTO `worker_node` VALUES (189, '240e:3b3:30b1:e800:fcd9:9796:fe2c:ecaa', '1755258288579-78169', 2, '2025-08-15', '2025-08-15 19:44:49', '2025-08-15 19:44:49'); -INSERT INTO `worker_node` VALUES (190, '240e:3b3:30b1:e800:fcd9:9796:fe2c:ecaa', '1755258404685-677', 2, '2025-08-15', '2025-08-15 19:46:45', '2025-08-15 19:46:45'); -INSERT INTO `worker_node` VALUES (191, '240e:3b3:30b1:e800:fcd9:9796:fe2c:ecaa', '1755258514409-43291', 2, '2025-08-15', '2025-08-15 19:48:34', '2025-08-15 19:48:34'); -INSERT INTO `worker_node` VALUES (192, '240e:3b3:30b1:e800:fcd9:9796:fe2c:ecaa', '1755258800231-88164', 2, '2025-08-15', '2025-08-15 19:53:20', '2025-08-15 19:53:20'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/luohuo-cloud/luohuo-base/luohuo-base-biz/pom.xml b/luohuo-cloud/luohuo-base/luohuo-base-biz/pom.xml index 5a95b0c9..4196931a 100644 --- a/luohuo-cloud/luohuo-base/luohuo-base-biz/pom.xml +++ b/luohuo-cloud/luohuo-base/luohuo-base-biz/pom.xml @@ -79,64 +79,6 @@ mybatis-plus-extension - - - com.huaweicloud - esdk-obs-java - - - log4j-core - org.apache.logging.log4j - - - okhttp - com.squareup.okhttp3 - - - - - - com.aliyun.oss - aliyun-sdk-oss - - - jersey-core - com.sun.jersey - - - jakarta.activation-api - jakarta.activation - - - - - - com.qiniu - qiniu-java-sdk - - - okhttp - com.squareup.okhttp3 - - - - - - com.luohuo.basic - fastdfs-client - - - - io.minio - minio - - - okhttp - com.squareup.okhttp3 - - - - org.apache.commons commons-email diff --git a/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/ExtendMsgController.java b/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/ExtendMsgController.java index 27487241..0e1f9873 100644 --- a/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/ExtendMsgController.java +++ b/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/ExtendMsgController.java @@ -1,5 +1,6 @@ package com.luohuo.flex.msg.controller; +import com.luohuo.basic.tenant.core.aop.TenantIgnore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -62,11 +63,18 @@ public class ExtendMsgController extends SuperController sendByTemplate(@RequestBody @Validated(SuperEntity.Update.class) ExtendMsgSendVO data - , @Parameter(hidden = true) @LoginUser(isEmployee = true) SysUser sysUser) { + public R sendByTemplate(@RequestBody @Validated(SuperEntity.Update.class) ExtendMsgSendVO data, @Parameter(hidden = true) @LoginUser(isEmployee = true) SysUser sysUser) { return R.success(msgBiz.sendByTemplate(data, sysUser)); } + @Operation(summary = "根据模板发送消息", description = "根据模板发送消息") + @PostMapping("/anyUser/sendByTemplate") + @WebLog("发送消息") + @TenantIgnore + public R anyUserSendByTemplate(@RequestBody @Validated(SuperEntity.Update.class) ExtendMsgSendVO data, @Parameter(hidden = true) @LoginUser(isEmployee = true) SysUser sysUser) { + return R.success(msgBiz.sendByTemplate(data, sysUser)); + } + @Operation(summary = "发布站内信", description = "发布站内信") @PostMapping("/publish") @WebLog("发布站内信") diff --git a/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/MsgController.java b/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/MsgController.java deleted file mode 100644 index edeb3878..00000000 --- a/luohuo-cloud/luohuo-base/luohuo-base-controller/src/main/java/com/luohuo/flex/msg/controller/MsgController.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.luohuo.flex.msg.controller; - -import com.luohuo.basic.annotation.log.WebLog; -import com.luohuo.basic.annotation.user.LoginUser; -import com.luohuo.basic.base.R; -import com.luohuo.basic.base.entity.SuperEntity; -import com.luohuo.basic.tenant.core.aop.TenantIgnore; -import com.luohuo.flex.model.entity.system.SysUser; -import com.luohuo.flex.msg.biz.MsgBiz; -import com.luohuo.flex.msg.vo.update.ExtendMsgSendVO; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 前端控制器 - * 消息 - *

- * - * @author zuihou - * @date 2022-07-10 11:41:17 - * @create [2022-07-10 11:41:17] [zuihou] [代码生成器生成] - */ -@Slf4j -@RequiredArgsConstructor -@Validated -@RestController -@RequestMapping("/anyUser") -@Tag(name = "消息模版") -public class MsgController { - private final MsgBiz msgBiz; - - @Operation(summary = "根据模板发送消息", description = "根据模板发送消息") - @PostMapping("/extendMsg/sendByTemplate") - @WebLog("发送消息") - @TenantIgnore - public R sendByTemplate(@RequestBody @Validated(SuperEntity.Update.class) ExtendMsgSendVO data - , @Parameter(hidden = true) @LoginUser(isEmployee = true) SysUser sysUser) { - return R.success(msgBiz.sendByTemplate(data, sysUser)); - } - -} - - diff --git a/luohuo-cloud/luohuo-base/luohuo-base-facade/luohuo-base-cloud-impl/src/main/java/com/luohuo/flex/msg/api/MsgApi.java b/luohuo-cloud/luohuo-base/luohuo-base-facade/luohuo-base-cloud-impl/src/main/java/com/luohuo/flex/msg/api/MsgApi.java index 1923825e..18692e42 100644 --- a/luohuo-cloud/luohuo-base/luohuo-base-facade/luohuo-base-cloud-impl/src/main/java/com/luohuo/flex/msg/api/MsgApi.java +++ b/luohuo-cloud/luohuo-base/luohuo-base-facade/luohuo-base-cloud-impl/src/main/java/com/luohuo/flex/msg/api/MsgApi.java @@ -1,6 +1,5 @@ package com.luohuo.flex.msg.api; - import io.swagger.v3.oas.annotations.Operation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -25,6 +24,6 @@ public interface MsgApi { * @return */ @Operation(summary = "根据模板发送消息", description = "根据模板发送消息") - @PostMapping("/anyUser/extendMsg/sendByTemplate") + @PostMapping("/extendMsg/anyUser/sendByTemplate") R sendByTemplate(@RequestBody ExtendMsgSendVO data); } diff --git a/luohuo-cloud/luohuo-base/luohuo-base-server/src/main/resources/bootstrap.yml b/luohuo-cloud/luohuo-base/luohuo-base-server/src/main/resources/bootstrap.yml index 035fef7a..50f50a76 100644 --- a/luohuo-cloud/luohuo-base/luohuo-base-server/src/main/resources/bootstrap.yml +++ b/luohuo-cloud/luohuo-base/luohuo-base-server/src/main/resources/bootstrap.yml @@ -8,6 +8,7 @@ luohuo: username: ${NACOS_USERNAME:@nacos.username@} password: ${NACOS_PASSWORD:@nacos.password@} web-port: ${NACOS_WEB_PORT:@nacos.web-port@} + local-ip: ${NACOS_LOCAL_IP:@nacos.local-ip@} seata: ip: ${SEATA_IP:@seata.ip@} port: ${SEATA_PORT:@seata.port@} @@ -53,6 +54,7 @@ spring: username: ${luohuo.nacos.username} password: ${luohuo.nacos.password} server-addr: ${luohuo.nacos.ip}:${luohuo.nacos.port} + ip: ${luohuo.nacos.local-ip} namespace: ${luohuo.nacos.namespace} metadata: # 元数据,用于权限服务实时获取各个服务的所有接口 management.context-path: ${server.servlet.context-path:}${spring.mvc.servlet.path:}${management.endpoints.web.base-path:} diff --git a/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/java/com/luohuo/flex/gateway/filter/TokenContextFilter.java b/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/java/com/luohuo/flex/gateway/filter/TokenContextFilter.java index 2dd44eb7..0a06836e 100644 --- a/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/java/com/luohuo/flex/gateway/filter/TokenContextFilter.java +++ b/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/java/com/luohuo/flex/gateway/filter/TokenContextFilter.java @@ -31,7 +31,6 @@ import com.luohuo.basic.exception.BizException; import com.luohuo.basic.exception.UnauthorizedException; import com.luohuo.basic.utils.StrPool; import com.luohuo.flex.common.properties.IgnoreProperties; -import com.luohuo.flex.common.utils.Base64Util; import static com.luohuo.basic.context.ContextConstants.*; @@ -100,17 +99,13 @@ public class TokenContextFilter implements WebFilter, Ordered { ContextUtil.setGrayVersion(getHeader(ContextConstants.GRAY_VERSION, request)); try { - // 2,解码 Authorization - parseClient(request, mutate); - - // 3, 获取 应用id + // 1 获取 应用信息 parseApplication(request, mutate); Mono token = parseToken(exchange, chain, mutate); if (token != null) { return token; } - } catch (UnauthorizedException e) { return errorResponse(response, e.getMessage(), e.getCode()); } catch (BizException e) { @@ -170,15 +165,6 @@ public class TokenContextFilter implements WebFilter, Ordered { return null; } - private void parseClient(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { - String base64Authorization = getHeader(CLIENT_KEY, request); - if (StrUtil.isNotEmpty(base64Authorization)) { - String[] client = Base64Util.getClient(base64Authorization); - ContextUtil.setClientId(client[0]); - addHeader(mutate, CLIENT_ID_HEADER, ContextUtil.getClientId()); - } - } - private void parseApplication(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { String applicationIdStr = getHeader(APPLICATION_ID_KEY, request); if (StrUtil.isNotEmpty(applicationIdStr)) { diff --git a/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/resources/bootstrap.yml b/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/resources/bootstrap.yml index 7538a701..be748997 100644 --- a/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/resources/bootstrap.yml +++ b/luohuo-cloud/luohuo-gateway/luohuo-gateway-server/src/main/resources/bootstrap.yml @@ -8,6 +8,7 @@ luohuo: username: ${NACOS_USERNAME:@nacos.username@} password: ${NACOS_PASSWORD:@nacos.password@} web-port: ${NACOS_WEB_PORT:@nacos.web-port@} + local-ip: ${NACOS_LOCAL_IP:@nacos.local-ip@} seata: ip: ${SEATA_IP:@seata.ip@} port: ${SEATA_PORT:@seata.port@} @@ -52,6 +53,7 @@ spring: password: ${luohuo.nacos.password} server-addr: ${luohuo.nacos.ip}:${luohuo.nacos.port} namespace: ${luohuo.nacos.namespace} + ip: ${luohuo.nacos.local-ip} metadata: # 元数据,用于权限服务实时获取各个服务的所有接口 management.context-path: ${server.servlet.context-path:}${spring.mvc.servlet.path:}${management.endpoints.web.base-path:} gray_version: qianqian diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/GroupMemberAddEvent.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/GroupMemberAddEvent.java index 01b3f214..1275d3e9 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/GroupMemberAddEvent.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/GroupMemberAddEvent.java @@ -13,13 +13,15 @@ public class GroupMemberAddEvent extends ApplicationEvent { // 变动的成员 private final List memberList; private final Long roomId; - private final Long cUid; - public GroupMemberAddEvent(Object source, Long roomId, List memberList, Long cUid) { + // 消息接收人 + private final Long uid; + + public GroupMemberAddEvent(Object source, Long roomId, List memberList, Long uid) { super(source); this.memberList = memberList; - this.roomId = roomId; - this.cUid = cUid; + this.roomId = roomId; + this.uid = uid; } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/TokenExpireEvent.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/TokenExpireEvent.java deleted file mode 100644 index 2cf101de..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/TokenExpireEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.luohuo.flex.im.common.event; - -import com.luohuo.flex.model.entity.ws.OffLineResp; -import lombok.Getter; -import org.springframework.context.ApplicationEvent; - -/** - * token过期事件 - * @author ZOL - */ -@Getter -public class TokenExpireEvent extends ApplicationEvent { - - private final OffLineResp offLine; - - public TokenExpireEvent(Object source, OffLineResp offLine) { - super(source); - this.offLine = offLine; - } -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/GroupMemberAddListener.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/GroupMemberAddListener.java index 2f3eb9ac..d3bac107 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/GroupMemberAddListener.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/GroupMemberAddListener.java @@ -2,6 +2,7 @@ package com.luohuo.flex.im.common.event.listener; import com.luohuo.flex.im.api.PresenceApi; import com.luohuo.flex.im.common.event.GroupMemberAddEvent; +import com.luohuo.flex.im.core.chat.dao.GroupMemberDao; import com.luohuo.flex.im.domain.vo.request.ChatMessageReq; import com.luohuo.flex.im.core.chat.service.ChatService; import com.luohuo.flex.im.core.chat.service.adapter.MemberAdapter; @@ -10,6 +11,7 @@ import com.luohuo.flex.im.core.chat.service.cache.GroupMemberCache; import com.luohuo.flex.im.domain.entity.User; import com.luohuo.flex.im.core.user.service.cache.UserInfoCache; import com.luohuo.flex.im.core.user.service.impl.PushService; +import com.luohuo.flex.model.entity.ws.ChatMember; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; @@ -33,6 +35,7 @@ public class GroupMemberAddListener { private ChatService chatService; private UserInfoCache userInfoCache; + private GroupMemberDao groupMemberDao; private GroupMemberCache groupMemberCache; private PresenceApi presenceApi; private PushService pushService; @@ -46,7 +49,7 @@ public class GroupMemberAddListener { public void sendAddMsg(GroupMemberAddEvent event) { List uidList = event.getMemberList(); Long roomId = event.getRoomId(); - User user = userInfoCache.get(event.getCUid()); + User user = userInfoCache.get(event.getUid()); ChatMessageReq chatMessageReq = RoomAdapter.buildGroupAddMessage(roomId, user, userInfoCache.getBatch(uidList)); chatService.sendMsg(chatMessageReq, user.getId()); } @@ -64,7 +67,9 @@ public class GroupMemberAddListener { // 在线的用户 List onlineUids = presenceApi.getGroupOnlineMembers(roomId).getData(); Map map = userInfoCache.getBatch(event.getMemberList()); - pushService.sendPushMsg(MemberAdapter.buildMemberAddWS(roomId, onlineUids, map), memberUidList, event.getCUid()); + + List memberResps = groupMemberDao.getMemberListByUid(event.getMemberList()); + pushService.sendPushMsg(MemberAdapter.buildMemberAddWS(roomId, onlineUids, memberResps, map), memberUidList, event.getUid()); // 移除缓存 groupMemberCache.evictMemberUidList(roomId); diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/UserApplyListener.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/UserApplyListener.java index 54a02384..2b62fbd6 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/UserApplyListener.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/event/listener/UserApplyListener.java @@ -32,8 +32,8 @@ public class UserApplyListener { @TransactionalEventListener(classes = UserApplyEvent.class, fallbackExecution = true) public void notifyFriend(UserApplyEvent event) { UserApply userApply = event.getUserApply(); - Integer unReadCount = userApplyDao.getUnReadCount(userApply.getTargetId()); - pushService.sendPushMsg(WsAdapter.buildApplySend(new WSFriendApply(userApply.getUid(), unReadCount)), userApply.getTargetId(), userApply.getUid()); + WSFriendApply resp = userApplyDao.getUnReadCount(userApply.getUid(), userApply.getTargetId()); + pushService.sendPushMsg(WsAdapter.buildApplySend(resp), userApply.getTargetId(), userApply.getUid()); } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/utils/discover/AbstractUrlDiscover.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/utils/discover/AbstractUrlDiscover.java index 6ff5bf3f..e4a46aff 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/utils/discover/AbstractUrlDiscover.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/common/utils/discover/AbstractUrlDiscover.java @@ -28,7 +28,9 @@ import java.util.stream.Collectors; @Slf4j public abstract class AbstractUrlDiscover implements UrlDiscover { //链接识别的正则 - private static final Pattern PATTERN = Pattern.compile("https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()!@:%_\\+.~#?&\\/\\/=]*)", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN = Pattern.compile( + "((https?:\\/\\/|www\\.)[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()!@:%_\\+.~#?&\\/\\/=]*))", Pattern.CASE_INSENSITIVE + ); private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool( Math.max(4, Runtime.getRuntime().availableProcessors() * 2), @@ -104,7 +106,6 @@ public abstract class AbstractUrlDiscover implements UrlDiscover { private String assemble(String url) { - if (!StrUtil.startWith(url, "http")) { return "http://" + url; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/cache/UserContactCacheKeyBuilder.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/cache/UserContactCacheKeyBuilder.java new file mode 100644 index 00000000..897f567a --- /dev/null +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/cache/UserContactCacheKeyBuilder.java @@ -0,0 +1,55 @@ +package com.luohuo.flex.im.core.chat.cache; + +import com.luohuo.basic.base.entity.SuperEntity; +import com.luohuo.basic.model.cache.CacheHashKey; +import com.luohuo.basic.model.cache.CacheKeyBuilder; +import com.luohuo.flex.common.cache.CacheKeyModular; +import com.luohuo.flex.common.cache.CacheKeyTable; + +import java.time.Duration; + +/** + * 用户所有会话信息的缓存 + * @author 乾乾 + * @date 2025-08-27 10:45 上午 + */ +public class UserContactCacheKeyBuilder implements CacheKeyBuilder { + public static CacheHashKey build(Long id) { + return new UserContactCacheKeyBuilder().hashFieldKey("concat", id); + } + + @Override + public String getTenant() { + return null; + } + + @Override + public String getTable() { + return CacheKeyTable.Chat.USER_CONTACT; + } + + @Override + public String getPrefix() { + return CacheKeyModular.PREFIX; + } + + @Override + public String getModular() { + return CacheKeyModular.CHAT; + } + + @Override + public String getField() { + return SuperEntity.ID_FIELD; + } + + @Override + public ValueType getValueType() { + return ValueType.obj; + } + + @Override + public Duration getExpire() { + return Duration.ofDays(1L); + } +} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/DebounceInfo.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/DebounceInfo.java new file mode 100644 index 00000000..4a954515 --- /dev/null +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/DebounceInfo.java @@ -0,0 +1,12 @@ +package com.luohuo.flex.im.core.chat.consumer; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class DebounceInfo { + private Long lastMessageId; + private Long lastUpdateTime; + private int pendingCount; +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/MsgSendConsumer.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/MsgSendConsumer.java index 57c9bd0e..481df7f5 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/MsgSendConsumer.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/consumer/MsgSendConsumer.java @@ -1,6 +1,7 @@ package com.luohuo.flex.im.core.chat.consumer; import com.luohuo.basic.context.ContextUtil; +import com.luohuo.basic.utils.TimeUtils; import com.luohuo.flex.common.constant.MqConstant; import com.luohuo.flex.im.core.chat.dao.ContactDao; import com.luohuo.flex.im.core.chat.dao.MessageDao; @@ -31,8 +32,10 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; /** * 发送消息更新房间收信箱,并同步给房间成员信箱 @@ -75,7 +78,7 @@ public class MsgSendConsumer implements RocketMQListener { } // 2. 更新所有群成员的会话时间, 并推送房间成员 - contactDao.refreshOrCreateActiveTime(room.getId(), memberUidList, message.getId(), message.getCreateTime()); + refreshContactActiveTimeEnhanced(room.getId(), memberUidList, message.getId(), TimeUtils.getTime(message.getCreateTime())); // 3. 与在线人员交集并进行路由 switch (MessageTypeEnum.of(message.getType())) { @@ -117,4 +120,35 @@ public class MsgSendConsumer implements RocketMQListener { } } } + + // 增强版防抖控制 + private final Map roomDebounceInfo = new ConcurrentHashMap<>(); + private static final long MAX_DEBOUNCE_TIME = 10000; + private static final int MAX_DEBOUNCE_COUNT = 1000; + + private void refreshContactActiveTimeEnhanced(Long roomId, List memberUidList, Long messageId, Long createTime) { + Long currentTime = System.currentTimeMillis(); + DebounceInfo info = roomDebounceInfo.get(roomId); + + if (info == null) { + // 首次更新 + contactDao.refreshOrCreateActiveTime(roomId, memberUidList, messageId, TimeUtils.timestampToLocalDateTime(createTime)); + roomDebounceInfo.put(roomId, new DebounceInfo(messageId, currentTime, 0)); + return; + } + + // 检查是否需要立即更新 + boolean shouldUpdate = (currentTime - info.getLastUpdateTime()) >= MAX_DEBOUNCE_TIME || info.getPendingCount() >= MAX_DEBOUNCE_COUNT; + + if (shouldUpdate) { + // 执行更新并使用最新消息ID + contactDao.refreshOrCreateActiveTime(roomId, memberUidList, messageId, TimeUtils.timestampToLocalDateTime(createTime)); + roomDebounceInfo.put(roomId, new DebounceInfo(messageId, currentTime, 0)); + log.debug("强制更新会话时间 roomId: {}, 消息ID: {}", roomId, messageId); + } else { + // 累积防抖计数 + roomDebounceInfo.put(roomId, new DebounceInfo(messageId, info.getLastUpdateTime(), info.getPendingCount() + 1)); + log.debug("防抖中 roomId: {}, 累积消息: {}", roomId, info.getPendingCount() + 1); + } + } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/ContactDao.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/ContactDao.java index 126e9716..334a76b0 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/ContactDao.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/ContactDao.java @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery; +import com.luohuo.basic.cache.repository.CachePlusOps; import com.luohuo.basic.tenant.core.aop.TenantIgnore; +import com.luohuo.flex.im.core.chat.cache.UserContactCacheKeyBuilder; +import jakarta.annotation.Resource; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.luohuo.flex.im.domain.vo.req.CursorPageBaseReq; @@ -18,10 +20,8 @@ import com.luohuo.flex.im.domain.entity.Message; import com.luohuo.flex.im.core.chat.mapper.ContactMapper; import java.time.LocalDateTime; -import java.util.Comparator; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -34,6 +34,9 @@ import java.util.stream.Collectors; @Service public class ContactDao extends ServiceImpl { + @Resource + private CachePlusOps cachePlusOps; + public Contact get(Long uid, Long roomId) { return lambdaQuery() .eq(Contact::getUid, uid) @@ -158,21 +161,7 @@ public class ContactDao extends ServiceImpl { * @return */ public List getAllContactsByUid(Long uid) { - return lambdaQuery().eq(Contact::getUid, uid).list(); + return cachePlusOps.hGet(UserContactCacheKeyBuilder.build(uid), x -> lambdaQuery().eq(Contact::getUid, uid).list(), true).getValue(); } - public Map getLastMsgIds(List roomIds) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .in(Contact::getRoomId, roomIds); - - return SimpleQuery - .group(wrapper, Contact::getRoomId, - Collectors.collectingAndThen( - Collectors.maxBy(Comparator.comparing( - Contact::getLastMsgId, - Comparator.nullsLast(Comparator.naturalOrder()) - )), - opt -> opt.map(Contact::getLastMsgId).orElse(null) - )); - } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/GroupMemberDao.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/GroupMemberDao.java index d26d2f67..77b3a842 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/GroupMemberDao.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/GroupMemberDao.java @@ -8,10 +8,14 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luohuo.flex.im.core.chat.service.cache.RoomGroupCache; import com.luohuo.flex.im.domain.entity.GroupMember; +import com.luohuo.flex.im.domain.entity.RoomGroup; import com.luohuo.flex.im.domain.enums.GroupRoleEnum; import com.luohuo.flex.im.core.chat.mapper.GroupMemberMapper; import com.luohuo.flex.im.core.chat.service.cache.GroupMemberCache; +import com.luohuo.flex.model.entity.ws.ChatMember; +import com.luohuo.flex.model.entity.ws.ChatMemberResp; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -19,7 +23,6 @@ import org.springframework.stereotype.Service; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; import static com.luohuo.flex.im.domain.enums.GroupRoleEnum.ROLE_LIST; @@ -38,6 +41,8 @@ public class GroupMemberDao extends ServiceImpl @Resource @Lazy private GroupMemberCache groupMemberCache; + @Resource + private RoomGroupCache roomGroupCache; /** * 查询群成员 @@ -97,27 +102,29 @@ public class GroupMemberDao extends ServiceImpl /** * 查询人员在群里的角色 - * @param groupId - * @param uid + * @param roomId 房间id + * @param uid 用户id * @return */ - public GroupMember getMember(Long groupId, Long uid) { - return lambdaQuery() - .eq(GroupMember::getGroupId, groupId) + public GroupMember getMember(Long roomId, Long uid) { + RoomGroup roomGroup = roomGroupCache.getByRoomId(roomId); + return lambdaQuery() + .eq(GroupMember::getGroupId, roomGroup.getId()) .eq(GroupMember::getUid, uid) .one(); } - /** - * 用户群组关系构建器 - * TODO 加上缓存,事件驱动用户加群、退群都需要清空 - * @param uid - * @return - */ - public Set getSelfAllGroup(Long uid) { - return lambdaQuery().eq(GroupMember::getUid, uid).list().stream().map(GroupMember::getGroupId).collect(Collectors.toSet()); + public GroupMember getMemberByGroupId(Long groupId, Long uid) { + return lambdaQuery() + .eq(GroupMember::getGroupId, groupId) + .eq(GroupMember::getUid, uid) + .one(); } + /** + * 查询自己创建的群聊数量 + * @param uid 当前用户 + */ public List getSelfGroup(Long uid) { return lambdaQuery() .eq(GroupMember::getUid, uid) @@ -230,18 +237,22 @@ public class GroupMemberDao extends ServiceImpl /** * 将群员设置为屏蔽该群 - * @param roomId - * @param uid + * @param roomId 房间id + * @param uid 屏蔽的人 */ public void setMemberDeFriend(Long roomId, Long uid, Boolean deFriend) { GroupMember member = getMember(roomId, uid); member.setDeFriend(deFriend); updateById(member); - groupMemberCache.evictMemberUidList(roomId); + groupMemberCache.evictExceptMemberList(roomId); + groupMemberCache.evictMemberDetail(roomId, uid); } - public List getMemberListByGroupId(Long groupId) { - return list(new LambdaQueryWrapper() - .eq(GroupMember::getGroupId, groupId)); + public List getMemberListByGroupId(Long groupId) { + return baseMapper.getMemberListByGroupId(groupId); + } + + public List getMemberListByUid(List memberList) { + return baseMapper.getMemberListByUid(memberList); } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/MessageDao.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/MessageDao.java index 388bf80a..4bafe591 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/MessageDao.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/dao/MessageDao.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.luohuo.basic.tenant.core.aop.TenantIgnore; +import com.luohuo.flex.im.domain.entity.Contact; import com.luohuo.flex.im.domain.vo.req.CursorPageBaseReq; import com.luohuo.flex.im.domain.vo.res.CursorPageBaseResp; import com.luohuo.flex.im.common.utils.CursorUtils; @@ -14,7 +15,9 @@ import com.luohuo.flex.im.core.chat.mapper.MessageMapper; import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -61,15 +64,6 @@ public class MessageDao extends ServiceImpl { .update(); } - @TenantIgnore - public Integer getUnReadCount(Long roomId, LocalDateTime readTime, Long uid) { - return Math.toIntExact(lambdaQuery() - .eq(Message::getRoomId, roomId) - .gt(Objects.nonNull(readTime), Message::getCreateTime, readTime) - .ne(Message::getFromUid, uid) - .count()); - } - /** * 根据房间ID逻辑删除消息 * @@ -87,4 +81,17 @@ public class MessageDao extends ServiceImpl { } return this.update(wrapper); } + + @TenantIgnore + public Integer getUnReadCount(Long roomId, LocalDateTime readTime, Long uid) { + return Math.toIntExact(lambdaQuery() + .eq(Message::getRoomId, roomId) + .gt(Objects.nonNull(readTime), Message::getCreateTime, readTime) + .ne(Message::getFromUid, uid) + .count()); + } + + public Map batchGetUnReadCount(Collection contactList) { + return baseMapper.batchGetUnReadCount(contactList); + } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/Contact222Mapper.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/Contact222Mapper.java deleted file mode 100644 index fc2fe09f..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/Contact222Mapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.luohuo.flex.im.core.chat.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.luohuo.flex.im.domain.entity.Message2; -import org.springframework.stereotype.Repository; - -/** - *

- * 会话列表 Mapper 接口 - *

- * - * @author nyh - */ -@Repository -public interface Contact222Mapper extends BaseMapper { - -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/GroupMemberMapper.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/GroupMemberMapper.java index 05a7c521..d6010dc4 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/GroupMemberMapper.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/GroupMemberMapper.java @@ -1,9 +1,13 @@ package com.luohuo.flex.im.core.chat.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luohuo.flex.model.entity.ws.ChatMember; +import com.luohuo.flex.model.entity.ws.ChatMemberResp; import org.springframework.stereotype.Repository; import com.luohuo.flex.im.domain.entity.GroupMember; +import java.util.List; + /** *

* 群成员表 Mapper 接口 @@ -14,4 +18,7 @@ import com.luohuo.flex.im.domain.entity.GroupMember; @Repository public interface GroupMemberMapper extends BaseMapper { + List getMemberListByGroupId(Long groupId); + + List getMemberListByUid(List memberList); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/MessageMapper.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/MessageMapper.java index f4563230..6574e012 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/MessageMapper.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/mapper/MessageMapper.java @@ -1,9 +1,14 @@ package com.luohuo.flex.im.core.chat.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luohuo.flex.im.domain.entity.Contact; +import org.apache.ibatis.annotations.MapKey; import org.springframework.stereotype.Repository; import com.luohuo.flex.im.domain.entity.Message; +import java.util.Collection; +import java.util.Map; + /** *

* 消息表 Mapper 接口 @@ -14,4 +19,6 @@ import com.luohuo.flex.im.domain.entity.Message; @Repository public interface MessageMapper extends BaseMapper { + @MapKey("room_id") + Map batchGetUnReadCount(Collection contactList); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/ContactService.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/ContactService.java index 35b6a1f4..edf30bad 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/ContactService.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/ContactService.java @@ -25,6 +25,4 @@ public interface ContactService { Integer getMsgUnReadCount(Message message); Map getMsgReadInfo(List messages); - - Map getLastMsgIds(List roomIds); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MemberAdapter.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MemberAdapter.java index 7e54fc66..65079771 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MemberAdapter.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MemberAdapter.java @@ -2,6 +2,7 @@ package com.luohuo.flex.im.core.chat.service.adapter; import com.luohuo.flex.im.domain.entity.IpDetail; import com.luohuo.flex.im.domain.entity.IpInfo; +import com.luohuo.flex.model.entity.ws.ChatMember; import com.luohuo.flex.model.enums.ChatActiveStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -20,10 +21,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import static com.luohuo.flex.model.entity.ws.WSMemberChange.CHANGE_TYPE_ADD; -import static com.luohuo.flex.model.entity.ws.WSMemberChange.CHANGE_TYPE_REMOVE; /** @@ -36,10 +37,10 @@ public class MemberAdapter { /** * 将User对象转换为ChatMemberResp对象,并注入实时在线状态 * @param list 用户列表 - * @param onlineStatusMap 实时在线状态映射表 (uid -> 是否在线) + * @param onlineUids 用户在线状态表 * @return 转换后的群成员响应对象列表 */ - public static List buildMember(List list, Map onlineStatusMap) { + public static List buildMember(List list, Set onlineUids) { return list.stream().map(user -> { ChatMemberResp resp = new ChatMemberResp(); resp.setUid(String.valueOf(user.getId())); @@ -48,7 +49,7 @@ public class MemberAdapter { resp.setAccount(user.getAccount()); resp.setLocPlace(Optional.ofNullable(user.getIpInfo()).map(IpInfo::getUpdateIpDetail).map(IpDetail::getCity).orElse(null)); resp.setUserStateId(user.getUserStateId()); - Boolean isOnline = onlineStatusMap.get(user.getId()); + Boolean isOnline = onlineUids.contains(user.getId()); resp.setActiveStatus(isOnline? ChatActiveStatusEnum.ONLINE.getStatus(): ChatActiveStatusEnum.OFFLINE.getStatus()); // 最后活跃时间(离线用户显示) if (!isOnline && user.getLastOptTime() != null) { @@ -87,38 +88,45 @@ public class MemberAdapter { * @param map 用户的基础信息 * @return */ - public static WsBaseResp buildMemberAddWS(Long roomId, List onlineUids, Map map) { - WsBaseResp wsBaseResp = new WsBaseResp<>(); - wsBaseResp.setType(WSRespTypeEnum.NEW_FRIEND_SESSION.getType()); - WSMemberChange wsMemberChange = new WSMemberChange(); + public static WsBaseResp buildMemberAddWS(Long roomId, List onlineUids, List memberResps, Map map) { + WsBaseResp wsBaseResp = new WsBaseResp<>(); + wsBaseResp.setType(WSRespTypeEnum.memberChange.getType()); + WSMemberChange wsMemberChange = new WSMemberChange(); + + memberResps.forEach(item -> { + Long uid = Long.parseLong(item.getUid()); + User user = map.get(uid); + + if (user != null) { + item.setActiveStatus(onlineUids.contains(user.getId()) ? ChatActiveStatusEnum.ONLINE.getStatus() : ChatActiveStatusEnum.OFFLINE.getStatus()); + item.setLastOptTime(user.getLastOptTime()); + item.setName(user.getName()); + item.setAvatar(user.getAvatar()); + item.setAccount(user.getAccount()); + item.setUserStateId(user.getUserStateId()+""); + } + }); - List states = map.values().stream().map(user -> { - WSMemberChange.UserState userState = new WSMemberChange.UserState(); - userState.setActiveStatus(onlineUids.contains(user.getId()) ? ChatActiveStatusEnum.ONLINE.getStatus() : ChatActiveStatusEnum.OFFLINE.getStatus()); - userState.setLastOptTime(user.getLastOptTime()); - userState.setUid(user.getId()); - return userState; - }).collect(Collectors.toList()); wsMemberChange.setChangeType(CHANGE_TYPE_ADD); - wsMemberChange.setUserList(states); - wsMemberChange.setRoomId(roomId); - wsBaseResp.setData(wsMemberChange); - return wsBaseResp; - } + wsMemberChange.setUserList(memberResps); + wsMemberChange.setRoomId(roomId+""); + wsBaseResp.setData(wsMemberChange); + return wsBaseResp; + } - public static WsBaseResp buildMemberRemoveWS(Long roomId, List uidList) { + public static WsBaseResp buildMemberRemoveWS(Long roomId, List uidList, Integer type) { WsBaseResp wsBaseResp = new WsBaseResp<>(); - wsBaseResp.setType(WSRespTypeEnum.NEW_FRIEND_SESSION.getType()); + wsBaseResp.setType(WSRespTypeEnum.memberChange.getType()); WSMemberChange wsMemberChange = new WSMemberChange(); - List states = uidList.stream().map(uid -> { - WSMemberChange.UserState userState = new WSMemberChange.UserState(); - userState.setUid(uid); - return userState; + List states = uidList.stream().map(uid -> { + ChatMember chatMember = new ChatMember(); + chatMember.setUid(uid+""); + return chatMember; }).collect(Collectors.toList()); wsMemberChange.setUserList(states); - wsMemberChange.setRoomId(roomId); - wsMemberChange.setChangeType(CHANGE_TYPE_REMOVE); + wsMemberChange.setRoomId(roomId+""); + wsMemberChange.setChangeType(type); wsBaseResp.setData(wsMemberChange); return wsBaseResp; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MessageAdapter.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MessageAdapter.java index aed2bc0c..c3332677 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MessageAdapter.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/MessageAdapter.java @@ -11,8 +11,11 @@ import com.luohuo.flex.im.domain.entity.msg.VideoCallMsgDTO; import com.luohuo.flex.im.domain.entity.msg.MergeMsg; import com.luohuo.flex.im.domain.entity.msg.MergeMsgDTO; import com.luohuo.flex.im.domain.entity.msg.NoticeMsgDTO; +import com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum; +import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import com.luohuo.flex.im.domain.vo.req.room.UserApplyResp; -import com.luohuo.flex.model.entity.ws.PendingInviteWs; +import com.luohuo.flex.model.entity.ws.WSFriendApply; import com.luohuo.flex.model.enums.MessageMarkTypeEnum; import com.luohuo.flex.im.domain.enums.MessageStatusEnum; import com.luohuo.flex.im.domain.enums.MessageTypeEnum; @@ -185,7 +188,7 @@ public class MessageAdapter { noticeMsgDTO.setTop(announcements.getTop()); noticeMsgDTO.setRoomId(announcements.getRoomId()); noticeMsgDTO.setContent(announcements.getContent()); - noticeMsgDTO.setCreateTime(TimeUtils.getTime(announcements.getCreateTime())); + noticeMsgDTO.setCreateTime(TimeUtils.getTime(announcements.getUpdateTime())); chatMessageReq.setBody(noticeMsgDTO); return chatMessageReq; } @@ -196,17 +199,18 @@ public class MessageAdapter { public static WsBaseResp buildRoomGroupMessage(Long uid, Long roomId, Long groupAdminId, String msg) { WsBaseResp wsBaseResp = new WsBaseResp<>(); wsBaseResp.setType(WSRespTypeEnum.ROOM_GROUP_MSG.getType()); - wsBaseResp.setData(new UserApplyResp(uid, 2, roomId, groupAdminId, msg, 1, 1, LocalDateTime.now())); + wsBaseResp.setData(new UserApplyResp(uid, RoomTypeEnum.GROUP.getType(), roomId, groupAdminId, msg, ApplyStatusEnum.WAIT_APPROVAL.getCode(), ApplyReadStatusEnum.UNREAD.getCode(), false, LocalDateTime.now())); return wsBaseResp; } /** * 邀请用户进群通知 + * @param resp 通知数据 */ - public static WsBaseResp buildInviteeUserAddGroupMessage(Long uid, Long inviteId, Long groupId) { - WsBaseResp wsBaseResp = new WsBaseResp<>(); - wsBaseResp.setType(WSRespTypeEnum.INVITEE_USER_ADD_GROUP.getType()); - wsBaseResp.setData(new PendingInviteWs(uid.toString(), groupId.toString(), inviteId.toString(), LocalDateTime.now())); + public static WsBaseResp buildInviteeUserAddGroupMessage(WSFriendApply resp) { + WsBaseResp wsBaseResp = new WsBaseResp<>(); + wsBaseResp.setType(WSRespTypeEnum.NEW_APPLY.getType()); + wsBaseResp.setData(resp); return wsBaseResp; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/RoomAdapter.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/RoomAdapter.java index 60d99efe..08793ddb 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/RoomAdapter.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/adapter/RoomAdapter.java @@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil; import com.luohuo.flex.im.domain.entity.Contact; import com.luohuo.flex.im.domain.entity.GroupMember; import com.luohuo.flex.im.domain.entity.Room; -import com.luohuo.flex.im.domain.entity.RoomGroup; import com.luohuo.flex.im.domain.enums.GroupRoleEnum; import com.luohuo.flex.im.domain.enums.MessageTypeEnum; import com.luohuo.flex.im.domain.vo.request.ChatMessageReq; diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/cache/GroupMemberCache.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/cache/GroupMemberCache.java index 89eb4c58..0d8f355e 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/cache/GroupMemberCache.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/cache/GroupMemberCache.java @@ -1,5 +1,6 @@ package com.luohuo.flex.im.core.chat.service.cache; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.luohuo.flex.im.core.chat.dao.GroupMemberDao; import com.luohuo.flex.im.core.chat.dao.RoomGroupDao; @@ -10,6 +11,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -31,7 +33,7 @@ public class GroupMemberCache { * @param roomId * @return */ - @Cacheable(cacheNames = "luohuo:member", key = "'all:'+#roomId") + @Cacheable(cacheNames = "luohuo:member:all", key = "#roomId") public List getMemberUidList(Long roomId) { RoomGroup roomGroup = roomGroupDao.getByRoomId(roomId); if (Objects.isNull(roomGroup)) { @@ -45,7 +47,7 @@ public class GroupMemberCache { * @param roomId * @return */ - @Cacheable(cacheNames = "luohuo:member", key = "'except:'+#roomId") + @Cacheable(cacheNames = "luohuo:member:except", key = "#roomId") public List getMemberExceptUidList(Long roomId) { RoomGroup roomGroup = roomGroupDao.getByRoomId(roomId); if (Objects.isNull(roomGroup)) { @@ -56,22 +58,17 @@ public class GroupMemberCache { /** * 获取指定成员在群中的详细信息 - * @param roomId 聊天室ID + * @param roomId 房间id * @param memberUid 成员用户ID * @return 成员详细信息 */ @Cacheable(cacheNames = "luohuo:member:info", key = "#roomId + ':' + #memberUid") public GroupMember getMemberDetail(Long roomId, Long memberUid) { - return groupMemberDao.getBaseMapper().selectOne(new QueryWrapper() - .eq("group_id", roomId) - .eq("uid", memberUid) - .last("LIMIT 1") - ); + return groupMemberDao.getMember(roomId, memberUid); } @CacheEvict(cacheNames = "luohuo:member:info", key = "#roomId + ':' + #memberUid") public void evictMemberDetail(Long roomId, Long memberUid) { - // 清理单个成员缓存 } @CacheEvict(cacheNames = "luohuo:member:info", allEntries = true) @@ -89,14 +86,12 @@ public class GroupMemberCache { } - @CacheEvict(cacheNames = "luohuo:member", key = "'except:'+#roomId") - public List evictExceptMemberList(Long roomId) { - return null; + @CacheEvict(cacheNames = "luohuo:member:except", key = "#roomId") + public void evictExceptMemberList(Long roomId) { } - @CacheEvict(cacheNames = "luohuo:member", key = "'all:'+#roomId") - public List evictMemberList(Long roomId) { - return null; + @CacheEvict(cacheNames = "luohuo:member:all", key = "#roomId") + public void evictMemberList(Long roomId) { } /** @@ -105,8 +100,11 @@ public class GroupMemberCache { * @return */ public List getJoinedRoomIds(Long uid) { - List groupIds = groupMemberDao.getBaseMapper().selectList(new QueryWrapper().eq("uid", uid)).stream().map(GroupMember::getGroupId).collect(Collectors.toList()); + List groupIds = groupMemberDao.getBaseMapper().selectList(new QueryWrapper().eq("uid", uid).eq("de_friend", 0)).stream().map(GroupMember::getGroupId).collect(Collectors.toList()); - return roomGroupDao.getRoomIdByGroupId(groupIds); + if(CollUtil.isNotEmpty(groupIds)){ + return roomGroupDao.getRoomIdByGroupId(groupIds); + } + return new ArrayList<>(); } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ChatServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ChatServiceImpl.java index 0f1896a2..904fa914 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ChatServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ChatServiceImpl.java @@ -8,6 +8,8 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; +import com.luohuo.basic.base.R; +import com.luohuo.basic.utils.SpringUtils; import com.luohuo.basic.utils.TimeUtils; import com.luohuo.flex.im.api.PresenceApi; import com.luohuo.flex.im.core.chat.dao.*; @@ -20,8 +22,6 @@ import com.luohuo.flex.model.enums.ChatActiveStatusEnum; import jakarta.annotation.Nullable; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -64,7 +64,6 @@ import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -74,14 +73,11 @@ import static com.luohuo.flex.im.common.config.ThreadPoolConfig.LUOHUO_EXECUTOR; @Slf4j @AllArgsConstructor public class ChatServiceImpl implements ChatService { - private final RoomDao roomDao; private final UserFriendDao userFriendDao; - private final RoomGroupDao roomGroupDao; private final GroupMemberCache groupMemberCache; private MsgCache msgCache; private MessageDao messageDao; private UserDao userDao; - private ApplicationEventPublisher applicationEventPublisher; private MessageMarkDao messageMarkDao; private RoomFriendDao roomFriendDao; private RoleService roleService; @@ -116,7 +112,7 @@ public class ChatServiceImpl implements ChatService { } // 发布消息发送事件 - applicationEventPublisher.publishEvent(new MessageSendEvent(this, new ChatMsgSendDto(msgId, uid))); + SpringUtils.publishEvent(new MessageSendEvent(this, new ChatMsgSendDto(msgId, uid))); return msgId; } @@ -124,10 +120,13 @@ public class ChatServiceImpl implements ChatService { Room room = roomCache.get(roomId); Assert.notNull(room, "房间不存在!"); if (room.isRoomGroup()) { - RoomGroup roomGroup = roomGroupCache.get(roomId); - GroupMember member = groupMemberDao.getMember(roomGroup.getId(), uid); +// GroupMember member = groupMemberCache.getMemberDetail(roomId, uid); + GroupMember member = groupMemberDao.getMember(roomId, uid); Assert.notNull(member, "您已经被移除该群"); Assert.isFalse(!isSend && member.getDeFriend(), "您已经屏蔽群聊!"); + if (member.getDeFriend()) { + throw new BizException("你已屏蔽群聊,无法发送消息"); + } } else { RoomFriend roomFriend = roomFriendDao.getByRoomId(roomId); boolean u1State = uid.equals(roomFriend.getUid1()); @@ -182,7 +181,7 @@ public class ChatServiceImpl implements ChatService { @Override public ChatMessageResp getMsgResp(Message message, Long receiveUid) { - return CollUtil.getFirst(getMsgRespBatch(message.getRoomId(), Collections.singletonList(message), receiveUid)); + return CollUtil.getFirst(getMsgRespBatch(Collections.singletonList(message), receiveUid)); } @Override @@ -191,14 +190,6 @@ public class ChatServiceImpl implements ChatService { return getMsgResp(msg, receiveUid); } - public Map batchGetOnlineStatus(List uidList) { - if (CollectionUtils.isEmpty(uidList)) return Collections.emptyMap(); - // 分页批量查询 - return Lists.partition(uidList, 500).stream() - .map(chunk -> presenceApi.getUsersOnlineStatus(chunk.stream().collect(Collectors.toList())).getData()) - .collect(HashMap::new, Map::putAll, Map::putAll); - } - private String generateCursor(ChatActiveStatusEnum type, String innerCursor) { return type.name() + "_" + innerCursor; } @@ -209,12 +200,9 @@ public class ChatServiceImpl implements ChatService { ChatActiveStatusEnum activeStatusEnum = pair.getKey(); String timeCursor = pair.getValue(); - // 1. 批量获取所有成员在线状态(本地缓存优化) - Map onlineStatusMap = batchGetOnlineStatus(memberUidList); - - // 2. 分离在线用户与离线用户 - List onlineUids = memberUidList.stream().filter(uid -> onlineStatusMap.get(uid)).collect(Collectors.toList()); - List offlineUids = memberUidList.stream().filter(uid -> !onlineUids.contains(uid)).collect(Collectors.toList()); + // 1. 批量获取所有成员在线状态、分离在线用户与离线用户 + Set onlineUids = presenceApi.getOnlineUsersList(memberUidList).getData(); + Set offlineUids = memberUidList.stream().filter(uid -> !onlineUids.contains(uid)).collect(Collectors.toSet()); // 3. 动态分页组装 List resultList = new ArrayList<>(); @@ -223,12 +211,12 @@ public class ChatServiceImpl implements ChatService { // 在线列表 CursorPageBaseResp onlinePage = userDao.getCursorPage(onlineUids, new CursorPageBaseReq(request.getPageSize(), timeCursor)); // 添加在线列表 - resultList.addAll(MemberAdapter.buildMember(onlinePage.getList(), onlineStatusMap)); + resultList.addAll(MemberAdapter.buildMember(onlinePage.getList(), onlineUids)); if (onlinePage.getIsLast()) { // 如果是最后一页,从离线列表再补点数据 CursorPageBaseResp offlinePage = userDao.getCursorPage(offlineUids, new CursorPageBaseReq(request.getPageSize() - onlinePage.getList().size(), null)); - resultList.addAll(MemberAdapter.buildMember(offlinePage.getList(), onlineStatusMap)); + resultList.addAll(MemberAdapter.buildMember(offlinePage.getList(), onlineUids)); timeCursor = generateCursor(ChatActiveStatusEnum.OFFLINE, offlinePage.getCursor()); isLast = offlinePage.getIsLast(); } else { @@ -239,7 +227,7 @@ public class ChatServiceImpl implements ChatService { // 离线列表 CursorPageBaseResp cursorPage = userDao.getCursorPage(offlineUids, new CursorPageBaseReq(request.getPageSize(), timeCursor)); // 添加离线线列表 - resultList.addAll(MemberAdapter.buildMember(cursorPage.getList(), onlineStatusMap)); + resultList.addAll(MemberAdapter.buildMember(cursorPage.getList(), onlineUids)); timeCursor = cursorPage.getCursor(); isLast = cursorPage.getIsLast(); } @@ -270,7 +258,7 @@ public class ChatServiceImpl implements ChatService { if (cursorPage.isEmpty()) { return CursorPageBaseResp.empty(); } - return CursorPageBaseResp.init(cursorPage, getMsgRespBatch(request.getRoomId(), cursorPage.getList(), receiveUid), cursorPage.getTotal()); + return CursorPageBaseResp.init(cursorPage, getMsgRespBatch(cursorPage.getList(), receiveUid), cursorPage.getTotal()); } // @Cacheable(value = "userRooms", key = "#uid", unless = "#result == null") @@ -291,7 +279,7 @@ public class ChatServiceImpl implements ChatService { } // 2. 批量查询所有房间的最后一条消息ID(用于权限过滤) - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper().in(Message::getRoomId, roomIds); if(ObjectUtil.isNotNull(lastOptTime) && lastOptTime > 0) { wrapper.ge(Message::getCreateTime, TimeUtils.getDateTimeOfTimestamp(lastOptTime)).le(Message::getCreateTime, LocalDateTime.now()); }else { @@ -304,7 +292,7 @@ public class ChatServiceImpl implements ChatService { // 4. 转换为响应对象并返回 List baseMessages = new ArrayList<>(); for (Long roomId : groupedMessages.keySet()) { - baseMessages.addAll(getMsgRespBatch(roomId, groupedMessages.get(roomId), receiveUid)); + baseMessages.addAll(getMsgRespBatch(groupedMessages.get(roomId), receiveUid)); } return baseMessages; } @@ -416,7 +404,7 @@ public class ChatServiceImpl implements ChatService { return messageDao.listByIds(msgIds); } - private void checkRecall(Long uid, Message message) { + private void checkRecall(Long uid, Message message) { AssertUtil.isNotEmpty(message, "消息有误"); AssertUtil.notEqual(message.getType(), MessageTypeEnum.RECALL.getType(), "消息无法撤回"); boolean isChatManager = roleService.hasRole(uid, RoleTypeEnum.CHAT_MANAGER); @@ -429,54 +417,13 @@ public class ChatServiceImpl implements ChatService { AssertUtil.isTrue(between < 2, "超过2分钟的消息不能撤回"); } - public List getMsgRespBatch(Long roomId, List messages, Long receiveUid) { + public List getMsgRespBatch(List messages, Long receiveUid) { if (CollectionUtil.isEmpty(messages)) { return new ArrayList<>(); } // 查询消息标志 List msgMark = messageMarkDao.getValidMarkByMsgIdBatch(messages.stream().map(Message::getId).collect(Collectors.toList())); - List chatMessageResp = MessageAdapter.buildMsgResp(messages, msgMark, receiveUid); - - Room room = roomDao.getById(roomId); - // 如果是群聊,设置消息的发送人的名称显示 - try { - if (Objects.equals(room.getType(), RoomTypeEnum.GROUP.getType())) { - Set uidSet = messages.stream().map(Message::getFromUid).collect(Collectors.toSet()); - RoomGroup roomGroup = roomGroupDao.getByRoomId(roomId); - Map groupMemberMap = groupMemberDao.getMemberBatch(roomGroup.getId(), uidSet).stream().collect(Collectors.toMap(GroupMember::getUid, Function.identity())); - Map userMap = userDao.getByIds(uidSet).stream().collect(Collectors.toMap(User::getId, Function.identity())); - Map userFriendMapByFriendUid = userFriendDao.getByFriends(receiveUid, uidSet) - .stream() - .filter(item ->StringUtils.isNotEmpty(item.getRemark())) - .collect(Collectors.toMap(UserFriend::getFriendUid, UserFriend::getRemark)); - - // 设置 user 名称 - chatMessageResp.forEach(item -> { - ChatMessageResp.UserInfo fromUser = item.getFromUser(); - long uid = Long.parseLong(fromUser.getUid()); - GroupMember groupMember = groupMemberMap.get(uid); - String friendRemark = userFriendMapByFriendUid.get(uid); - - // 优先显示好友备注 - if (StringUtils.isNotEmpty(friendRemark)){ - fromUser.setNickname(friendRemark); - } - else if (groupMember != null){ - String myName = groupMember.getMyName(); - if (StringUtils.isNotEmpty(myName)){ - fromUser.setNickname(myName); - }else { - User user = userMap.get(uid); - fromUser.setNickname(user.getName()); - } - } - }); - } - } catch (Exception e) { - log.error(e.getMessage()); - } - - return chatMessageResp; + return MessageAdapter.buildMsgResp(messages, msgMark, receiveUid); } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ContactServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ContactServiceImpl.java index d7d9d6fd..42d01dfb 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ContactServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/ContactServiceImpl.java @@ -62,8 +62,4 @@ public class ContactServiceImpl implements ContactService { }).collect(Collectors.toMap(MsgReadInfoDTO::getMsgId, Function.identity())); } - @Override - public Map getLastMsgIds(List roomIds) { - return contactDao.getLastMsgIds(roomIds); - } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomAppServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomAppServiceImpl.java index aaa5076d..08ff032f 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomAppServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomAppServiceImpl.java @@ -1,15 +1,17 @@ package com.luohuo.flex.im.core.chat.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Pair; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.luohuo.basic.cache.repository.CachePlusOps; import com.luohuo.basic.exception.code.ResponseEnum; import com.luohuo.basic.model.cache.CacheKey; +import com.luohuo.basic.utils.SpringUtils; +import com.luohuo.basic.utils.TimeUtils; import com.luohuo.flex.common.cache.PresenceCacheKeyBuilder; import com.luohuo.flex.im.api.PresenceApi; import com.luohuo.flex.im.core.chat.dao.RoomFriendDao; @@ -19,7 +21,6 @@ import com.luohuo.flex.im.core.user.dao.UserBackpackDao; import com.luohuo.flex.im.core.user.dao.UserFriendDao; import com.luohuo.flex.im.core.user.dao.UserPrivacyDao; import com.luohuo.flex.im.domain.entity.*; -import com.luohuo.flex.im.domain.enums.ApplyEnum; import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; import com.luohuo.flex.im.domain.vo.req.room.UserApplyResp; import com.luohuo.flex.im.domain.vo.request.admin.AdminAddReq; @@ -34,11 +35,11 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; import org.springframework.util.CollectionUtils; import com.luohuo.basic.exception.BizException; import com.luohuo.basic.exception.code.GroupErrorEnum; @@ -112,6 +113,7 @@ import java.util.stream.Collectors; import static com.luohuo.flex.im.common.config.ThreadPoolConfig.LUOHUO_EXECUTOR; import static com.luohuo.flex.im.core.chat.constant.GroupConst.MAX_MANAGE_COUNT; +import static com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum.UNREAD; @Slf4j @Service @@ -138,12 +140,12 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { private UserDao userDao; private ChatService chatService; private RoleService roleService; - private ApplicationEventPublisher applicationEventPublisher; private RoomService roomService; private GroupMemberCache groupMemberCache; private PushService pushService; private FriendService friendService; private PresenceApi presenceApi; + private TransactionTemplate transactionTemplate; private void warmUpGroupMemberCache(Long roomId) { // 1. 查询房间中所有用户 @@ -346,14 +348,13 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { @Override public CursorPageBaseResp queryApplyPage(Long uid, MemberReq req) { // 1. 校验权限 - RoomGroup group = roomGroupCache.get(req.getRoomId()); - GroupMember member = groupMemberDao.getMember(group.getId(), uid); + GroupMember member = groupMemberDao.getMember(req.getRoomId(), uid); if (member == null || member.getRoleId() == GroupRoleEnum.MEMBER.getType()) { throw new BizException("无权限查看申请列表"); } // 2. 游标查询申请进群记录 - CursorPageBaseResp userApplyPage = userApplyDao.getApplyPage(uid, 2, req); + CursorPageBaseResp userApplyPage = userApplyDao.getApplyPage(uid, RoomTypeEnum.GROUP.getType(), req); return CursorPageBaseResp.init(userApplyPage, userApplyPage.getList().stream().map(apply -> { UserApplyResp applyResp = new UserApplyResp(); @@ -377,12 +378,8 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { */ @Async(LUOHUO_EXECUTOR) public void asyncOnline(List uidList, Long roomId, boolean online) { - Map map = presenceApi.getUsersOnlineStatus(uidList).getData(); - uidList = map.entrySet().stream() - .filter(entry -> entry.getValue()) - .map(Map.Entry::getKey) - .collect(Collectors.toList()); - if(uidList.isEmpty()){ + Set onlineList = presenceApi.getOnlineUsersList(uidList).getData(); + if(CollUtil.isEmpty(onlineList)){ return; } @@ -392,7 +389,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { if(online) { // 处理在线的状态 - cachePlusOps.sAdd(ogmKey, uid.toString()); + cachePlusOps.sAdd(ogmKey, uid); cachePlusOps.sAdd(ougKey, roomId); } else { // 处理离线的状态 @@ -412,7 +409,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { throw new RuntimeException("群聊不存在!"); } - GroupMember groupMember = groupMemberDao.getMember(roomGroup.getId(), uid); + GroupMember groupMember = groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); if(ObjectUtil.isNull(groupMember)){ throw new RuntimeException(StrUtil.format("您不是{}的群成员!", roomGroup.getName())); } @@ -498,6 +495,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { announcements.setUid(uid); announcements.setTop(param.getTop()); announcements.setCreateTime(now); + announcements.setUpdateTime(now); roomService.saveAnnouncements(announcements); // 创建已读的信息 @@ -535,7 +533,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { announcements.setRoomId(param.getRoomId()); announcements.setContent(param.getContent()); announcements.setTop(param.getTop()); - announcements.setCreateTime(announcement.getCreateTime()); + announcements.setUpdateTime(TimeUtils.now()); Boolean edit = roomService.updateAnnouncement(announcements); if(edit){ chatService.sendMsg(MessageAdapter.buildAnnouncementsMsg(param.getRoomId(), announcements), uid); @@ -634,9 +632,8 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { Room room = roomCache.get(request.getRoomId()); if(room.getType().equals(RoomTypeEnum.GROUP.getType())){ // 1. 把群成员的信息设置为禁止 - RoomGroup roomGroup = roomGroupCache.get(request.getRoomId()); - name = roomGroup.getName(); - groupMemberDao.setMemberDeFriend(roomGroup.getId(), uid, request.getState()); + name = roomGroupCache.get(request.getRoomId()).getName(); + groupMemberDao.setMemberDeFriend(request.getRoomId(), uid, request.getState()); } else { // 2. 把两个人的房间全部设置为禁止 RoomFriend roomFriend = roomFriendCache.get(request.getRoomId()); @@ -695,7 +692,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { // 获取群成员数、在线人员、备注、我的群名称 Long onlineNum = map.get(room.getId()); Long memberNum = (long) groupMemberCache.getMemberUidList(roomId).size(); - GroupMember member = groupMemberDao.getMember(roomGroup.getId(), uid); + GroupMember member = groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); return MemberResp.builder() .avatar(roomGroup.getAvatar()) @@ -735,26 +732,22 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { } // 2. 获取群组和成员数据 - RoomGroup roomGroup = roomGroupCache.get(request.getRoomId()); - List groupMembers = groupMemberDao.getMemberListByGroupId(roomGroup.getId()); + List chatMemberResps = groupMemberDao.getMemberListByGroupId(roomGroupCache.get(request.getRoomId()).getId()); - // 3. 转换为响应对象 - List chatMemberResps = BeanUtil.copyToList(groupMembers, ChatMemberResp.class); - - // 5. 批量获取用户信息 + // 3. 批量获取用户信息 Set uids = chatMemberResps.stream().map(ChatMemberResp::getUid).map(Long::parseLong).collect(Collectors.toSet()); Map userInfoBatch = userCache.getUserInfoBatch(uids); - // 6. 批量获取在线状态 - Map onlineStatusMap = presenceApi.getUsersOnlineStatus(new ArrayList<>(uids)).getData(); + // 5. 批量获取在线状态 + Set onlineList = presenceApi.getOnlineUsersList(new ArrayList<>(uids)).getData(); - // 7. 填充用户信息和在线状态 + // 6. 填充用户信息和在线状态 chatMemberResps.forEach(item -> { Long uid = Long.parseLong(item.getUid()); User user = userInfoBatch.get(uid); if (user != null) { - item.setActiveStatus(onlineStatusMap.getOrDefault(uid, false) ? ChatActiveStatusEnum.ONLINE.getStatus() : ChatActiveStatusEnum.OFFLINE.getStatus()); + item.setActiveStatus(onlineList.contains(uid) ? ChatActiveStatusEnum.ONLINE.getStatus() : ChatActiveStatusEnum.OFFLINE.getStatus()); item.setLastOptTime(user.getLastOptTime()); item.setName(user.getName()); item.setAvatar(user.getAvatar()); @@ -764,18 +757,19 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { }); // 7. 群主、管理员永远在前面 - return chatMemberResps.stream() - .sorted((m1, m2) -> { - // 群主 > 管理员> 普通成员 - int roleCompare = Integer.compare(m1.getRoleId(), m2.getRoleId()); - - // 如果是相同角色 - if (roleCompare == 0) { - return Integer.compare(m1.getActiveStatus(), m2.getActiveStatus()); - } - // 不同角色:管理组始终排在普通组前面 - return roleCompare; - }).collect(Collectors.toList()); + return chatMemberResps; +// return chatMemberResps.stream() +// .sorted((m1, m2) -> { +// // 群主 > 管理员> 普通成员 +// int roleCompare = Integer.compare(m1.getRoleId(), m2.getRoleId()); +// +// // 如果是相同角色 +// if (roleCompare == 0) { +// return Integer.compare(m1.getActiveStatus(), m2.getActiveStatus()); +// } +// // 不同角色:管理组始终排在普通组前面 +// return roleCompare; +// }).collect(Collectors.toList()); } @Override @@ -795,19 +789,19 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { } @Override - @Transactional(rollbackFor = Exception.class) @RedissonLock(prefixKey = "delMember:", key = "#request.roomId") public void delMember(Long uid, MemberDelReq request) { Room room = roomCache.get(request.getRoomId()); AssertUtil.isNotEmpty(room, "房间号有误"); RoomGroup roomGroup = roomGroupCache.get(request.getRoomId()); AssertUtil.isNotEmpty(roomGroup, "房间号有误"); - GroupMember self = groupMemberDao.getMember(roomGroup.getId(), uid); + GroupMember self = groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); AssertUtil.isNotEmpty(self, GroupErrorEnum.USER_NOT_IN_GROUP, "groupMember"); // 如果房间人员小于3人 那么直接解散群聊 - Long count = cachePlusOps.sCard(PresenceCacheKeyBuilder.groupMembersKey(request.getRoomId())); - if(count < 3){ + CacheKey membersKey = PresenceCacheKeyBuilder.groupMembersKey(request.getRoomId()); + Long count = cachePlusOps.sCard(membersKey); + if(count < 3 && self.getRoleId().equals(GroupRoleEnum.LEADER.getType())) { MemberExitReq exitReq = new MemberExitReq(); exitReq.setRoomId(request.getRoomId()); exitReq.setAccount(roomGroup.getAccount()); @@ -826,54 +820,69 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { } // 1.3 普通成员 判断是否有权限操作 AssertUtil.isTrue(hasPower(self), GroupErrorEnum.NOT_ALLOWED_FOR_REMOVE); - GroupMember member = groupMemberDao.getMember(roomGroup.getId(), removedUid); + GroupMember member = groupMemberDao.getMemberByGroupId(roomGroup.getId(), removedUid); AssertUtil.isNotEmpty(member, "用户已经移除"); - groupMemberDao.removeById(member.getId()); - // 发送移除事件告知群成员 - List memberUidList = groupMemberCache.getMemberExceptUidList(roomGroup.getRoomId()); - if(!memberUidList.contains(request.getUid())){ - memberUidList.add(request.getUid()); - } - WsBaseResp ws = MemberAdapter.buildMemberRemoveWS(roomGroup.getRoomId(), Arrays.asList(member.getUid())); - pushService.sendPushMsg(ws, memberUidList, uid); - groupMemberCache.evictMemberUidList(room.getId()); - groupMemberCache.evictMemberDetail(room.getId(), removedUid); - // 新版移除群聊 - CacheKey uKey = PresenceCacheKeyBuilder.userGroupsKey(uid); - CacheKey gKey = PresenceCacheKeyBuilder.groupMembersKey(room.getId()); - cachePlusOps.sRem(gKey, uid); - cachePlusOps.sRem(uKey, room.getId()); - asyncOnline(Arrays.asList(uid), room.getId(), false); + // 发送移除事件告知群成员 + if(transactionTemplate.execute(e -> { + groupMemberDao.removeById(member.getId()); + // 1.5 移除会话 + contactDao.removeByRoomId(room.getId(), Collections.singletonList(request.getUid())); + return true; + })){ + + List memberUidList = groupMemberCache.getMemberExceptUidList(roomGroup.getRoomId()); + if(!memberUidList.contains(request.getUid())){ + memberUidList.add(request.getUid()); + } + WsBaseResp ws = MemberAdapter.buildMemberRemoveWS(roomGroup.getRoomId(), Arrays.asList(member.getUid()), WSMemberChange.CHANGE_TYPE_REMOVE); + pushService.sendPushMsg(ws, memberUidList, uid); + groupMemberCache.evictMemberUidList(room.getId()); + groupMemberCache.evictMemberDetail(room.getId(), removedUid); + + // 移除群聊缓存 + CacheKey uKey = PresenceCacheKeyBuilder.userGroupsKey(request.getUid()); + cachePlusOps.sRem(membersKey, request.getUid()); + cachePlusOps.sRem(uKey, room.getId()); + asyncOnline(Arrays.asList(request.getUid()), room.getId(), false); + } } @Override @RedissonLock(key = "#request.roomId") - @Transactional(rollbackFor = Exception.class) public void addMember(Long uid, MemberAddReq request) { // 1. 校验数据 Room room = roomCache.get(request.getRoomId()); AssertUtil.isNotEmpty(room, "房间号有误"); RoomGroup roomGroup = roomGroupCache.get(request.getRoomId()); AssertUtil.isNotEmpty(roomGroup, "房间号有误"); - GroupMember self = groupMemberDao.getMember(roomGroup.getId(), uid); + GroupMember self = groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); AssertUtil.isNotEmpty(self, "您不是群成员"); + // 已经进群了的 List memberBatch = groupMemberDao.getMemberBatch(roomGroup.getId(), request.getUidList()).stream().map(GroupMember::getUid).toList(); - Set existUid = new HashSet<>(memberBatch); - List validUids = request.getUidList().stream().filter(a -> !existUid.contains(a)).distinct().collect(Collectors.toList()); + // 已经邀请过的数据 + List existingUsers = userApplyDao.getExistingUsers(request.getRoomId(), request.getUidList()); + HashSet validUidSet = request.getUidList(); + validUidSet.removeAll(memberBatch); + validUidSet.removeAll(existingUsers); + + List validUids = new ArrayList<>(validUidSet); if (CollectionUtils.isEmpty(validUids)) { return; } // 2. 创建邀请记录 - List invites = validUids.stream().map(inviteeUid -> new UserApply(uid, ApplyEnum.GROUP.getCode(), roomGroup.getRoomId(), inviteeUid, StrUtil.format("{}邀请你加入{}", userCache.getUserInfo(uid).getName(), roomGroup.getName()), ApplyStatusEnum.WAIT_APPROVAL.getCode(), 1, 0)).collect(Collectors.toList()); - userApplyDao.saveBatch(invites); + transactionTemplate.execute(e -> { + List invites = validUids.stream().map(inviteeUid -> new UserApply(uid, RoomTypeEnum.GROUP.getType(), roomGroup.getRoomId(), inviteeUid, StrUtil.format("{}邀请你加入{}", userCache.getUserInfo(uid).getName(), roomGroup.getName()), ApplyStatusEnum.WAIT_APPROVAL.getCode(), UNREAD.getCode(), 0, false)).collect(Collectors.toList()); + userApplyDao.saveBatch(invites); + return true; + }); // 3. 通知被邀请的人进群 validUids.forEach(inviteId -> { - User invite = userCache.getUserInfo(inviteId); - if(Objects.isNull(invite)){ - pushService.sendPushMsg(MessageAdapter.buildInviteeUserAddGroupMessage(uid, inviteId, roomGroup.getId()), inviteId, uid); + User user = userCache.getUserInfo(inviteId); + if(ObjectUtil.isNotNull(user)){ + pushService.sendPushMsg(MessageAdapter.buildInviteeUserAddGroupMessage(userApplyDao.getUnReadCount(inviteId, inviteId)), inviteId, uid); } }); } @@ -885,7 +894,6 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { * @param request 请求信息 */ @Override - @Transactional(rollbackFor = Exception.class) @RedissonLock(prefixKey = "exitGroup:", key = "#request.roomId") public void exitGroup(Long uid, MemberExitReq request) { Long roomId = request.getRoomId(); @@ -901,27 +909,36 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { Boolean isGroupShip = groupMemberDao.isGroupShip(roomGroup.getRoomId(), Collections.singletonList(uid)); AssertUtil.isTrue(isGroupShip, GroupErrorEnum.USER_NOT_IN_GROUP); - // 4. 判断该用户是否是群主 + // 5. 获取要移除的群成员 Boolean isLord = groupMemberDao.isLord(roomGroup.getId(), uid); + List memberUidList; + if (isLord) { + memberUidList = groupMemberDao.getMemberUidList(roomGroup.getId(), null); + } else { + memberUidList = groupMemberCache.getMemberExceptUidList(roomGroup.getRoomId()); + } + if (isLord) { // 4.1 删除房间和群并清除缓存 - boolean isDelRoom = roomService.removeById(roomId); - roomGroupCache.removeById(roomGroup.getId()); - roomGroupCache.evictGroup(roomGroup.getAccount()); - if(StrUtil.isNotEmpty(request.getAccount())){ - roomGroupCache.evictGroup(request.getAccount()); - } - AssertUtil.isTrue(isDelRoom, ResponseEnum.SYSTEM_BUSY.getMsg()); - // 4.2 删除会话 - Boolean isDelContact = contactDao.removeByRoomId(roomId, Collections.EMPTY_LIST); - AssertUtil.isTrue(isDelContact, ResponseEnum.SYSTEM_BUSY.getMsg()); - // 4.3 获取并删除群成员 - List memberUidList = groupMemberDao.getMemberUidList(roomGroup.getId(), null); - Boolean isDelGroupMember = groupMemberDao.removeByGroupId(roomGroup.getId(), Collections.EMPTY_LIST); - AssertUtil.isTrue(isDelGroupMember, ResponseEnum.SYSTEM_BUSY.getMsg()); - // 4.4 删除消息记录 (逻辑删除) - Boolean isDelMessage = messageDao.removeByRoomId(roomId, Collections.EMPTY_LIST); - AssertUtil.isTrue(isDelMessage, ResponseEnum.SYSTEM_BUSY.getMsg()); + transactionTemplate.execute(e -> { + boolean isDelRoom = roomService.removeById(roomId); + roomGroupCache.removeById(roomGroup.getId()); + roomGroupCache.evictGroup(roomGroup.getAccount()); + if(StrUtil.isNotEmpty(request.getAccount())){ + roomGroupCache.evictGroup(request.getAccount()); + } + AssertUtil.isTrue(isDelRoom, ResponseEnum.SYSTEM_BUSY.getMsg()); + // 4.2 删除会话 + Boolean isDelContact = contactDao.removeByRoomId(roomId, Collections.EMPTY_LIST); + AssertUtil.isTrue(isDelContact, "会话移除异常"); + // 4.3 删除群成员 + Boolean isDelGroupMember = groupMemberDao.removeByGroupId(roomGroup.getId(), Collections.EMPTY_LIST); + AssertUtil.isTrue(isDelGroupMember, "群成员移除失败"); + // 4.4 删除消息记录 (逻辑删除) + Boolean isDelMessage = messageDao.removeByRoomId(roomId, Collections.EMPTY_LIST); + AssertUtil.isTrue(isDelMessage, ResponseEnum.SYSTEM_BUSY.getMsg()); + return true; + }); // 4.5 告知所有人群已经被解散, 这里要走groupMemberDao查询,缓存中可能没有屏蔽群的用户 groupMemberCache.evictMemberUidList(room.getId()); groupMemberCache.evictAllMemberDetails(); @@ -932,15 +949,17 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { asyncOnline(memberUidList, room.getId(), false); pushService.sendPushMsg(RoomAdapter.buildGroupDissolution(roomGroup.getName()), memberUidList, uid); } else { - // 4.6 删除会话 - Boolean isDelContact = contactDao.removeByRoomId(roomId, Collections.singletonList(uid)); - AssertUtil.isTrue(isDelContact, ResponseEnum.SYSTEM_BUSY.getMsg()); - // 4.7 删除群成员 - Boolean isDelGroupMember = groupMemberDao.removeByGroupId(roomGroup.getId(), Collections.singletonList(uid)); - AssertUtil.isTrue(isDelGroupMember, ResponseEnum.SYSTEM_BUSY.getMsg()); + transactionTemplate.execute(e -> { + // 4.6 删除会话 + Boolean isDelContact = contactDao.removeByRoomId(roomId, Collections.singletonList(uid)); + AssertUtil.isTrue(isDelContact, "会话移除异常"); + // 4.7 删除群成员 + Boolean isDelGroupMember = groupMemberDao.removeByGroupId(roomGroup.getId(), Collections.singletonList(uid)); + AssertUtil.isTrue(isDelGroupMember, "群成员移除失败"); + return true; + }); // 4.8 发送移除事件告知群成员 - List memberUidList = groupMemberCache.getMemberExceptUidList(roomGroup.getRoomId()); - WsBaseResp ws = MemberAdapter.buildMemberRemoveWS(roomGroup.getRoomId(), Arrays.asList(uid)); + WsBaseResp ws = MemberAdapter.buildMemberRemoveWS(roomGroup.getRoomId(), Arrays.asList(uid), WSMemberChange.CHANGE_TYPE_QUIT); pushService.sendPushMsg(ws, memberUidList, uid); groupMemberCache.evictMemberUidList(room.getId()); groupMemberCache.evictMemberDetail(room.getId(), uid); @@ -972,6 +991,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { // 处理新房间里面所有在线人员 List uidList = new ArrayList<>(request.getUidList()); uidList.add(uid); + groupMemberCache.evictMemberUidList(roomGroup.getRoomId()); CacheKey gKey = PresenceCacheKeyBuilder.groupMembersKey(roomGroup.getRoomId()); uidList.forEach(id -> { @@ -980,7 +1000,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { }); asyncOnline(uidList, roomGroup.getRoomId(), true); - applicationEventPublisher.publishEvent(new GroupMemberAddEvent(this, roomGroup.getRoomId(), request.getUidList(), uid)); + SpringUtils.publishEvent(new GroupMemberAddEvent(this, roomGroup.getRoomId(), request.getUidList(), uid)); return roomGroup.getRoomId(); } @@ -994,7 +1014,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { * 获取群角色 */ private Integer getGroupRole(Long uid, RoomGroup roomGroup, Room room) { - GroupMember member = Objects.isNull(uid) ? null : groupMemberDao.getMember(roomGroup.getId(), uid); + GroupMember member = Objects.isNull(uid) ? null : groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); if (Objects.nonNull(member)) { return GroupRoleAPPEnum.of(member.getRoleId()).getType(); } else if (isHotGroup(room)) { @@ -1031,8 +1051,7 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { Map msgMap = messages.stream().collect(Collectors.toMap(Message::getId, Function.identity())); Map lastMsgUidMap = userInfoCache.getBatch(messages.stream().map(Message::getFromUid).collect(Collectors.toList())); // 消息未读数 - Map unReadCountMap = getUnReadCountMap(uid, roomIds); - Map roomGroupMapByRoomId = roomGroupDao.listByRoomIds(roomIds).stream().collect(Collectors.toMap(RoomGroup::getRoomId, Function.identity())); + Map unReadCountMap = getUnReadCountMap(contactMap.values()); return roomBaseInfoMap.values().stream().map(room -> { ChatRoomResp resp = new ChatRoomResp(); @@ -1063,32 +1082,29 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { resp.setRemark(roomBaseInfo.getRemark()); resp.setMyName(roomBaseInfo.getMyName()); Message message = msgMap.get(room.getLastMsgId()); - if (Objects.nonNull(message)) { - AbstractMsgHandler strategyNoNull = MsgHandlerFactory.getStrategyNoNull(message.getType()); - // 判断是群聊还是单聊 - if (Objects.equals(roomBaseInfo.getType(), RoomTypeEnum.GROUP.getType())) { - RoomGroup roomGroup = roomGroupMapByRoomId.get(roomId); - GroupMember messageUser = null; - try { - messageUser = groupMemberCache.getMemberDetail(roomGroup.getId(), message.getFromUid()); - } catch (Exception e) { - log.error("群聊成员获取失败-->", e.getMessage()); - } + if(resp.getShield()){ + resp.setText("您已屏蔽该会话"); + } else { + if (Objects.nonNull(message)) { + AbstractMsgHandler strategyNoNull = MsgHandlerFactory.getStrategyNoNull(message.getType()); + // 判断是群聊还是单聊 + if (Objects.equals(roomBaseInfo.getType(), RoomTypeEnum.GROUP.getType())) { + GroupMember messageUser = groupMemberCache.getMemberDetail(roomId, message.getFromUid()); + if (ObjectUtil.isNotNull(messageUser)) { + if (StrUtil.isNotEmpty(messageUser.getMyName())) { + resp.setText(messageUser.getMyName() + ":" + strategyNoNull.showContactMsg(message)); + } - if (ObjectUtil.isNotNull(messageUser)) { - if (StrUtil.isNotEmpty(messageUser.getMyName())){ - resp.setText(messageUser.getMyName() + ":" + strategyNoNull.showContactMsg(message)); - } - - // 当自己查看时,且最后一条消息是自己发送的,那么显示群备注 - if (uid.equals(message.getFromUid()) && StrUtil.isNotEmpty(messageUser.getRemark())){ - resp.setRemark(messageUser.getRemark()); + // 当自己查看时,且最后一条消息是自己发送的,那么显示群备注 + if (uid.equals(message.getFromUid()) && StrUtil.isNotEmpty(messageUser.getRemark())){ + resp.setRemark(messageUser.getRemark()); + } + } else { + resp.setText((lastMsgUidMap.get(message.getFromUid()).getName()) + ":" + strategyNoNull.showContactMsg(message)); } } else { - resp.setText((lastMsgUidMap.get(message.getFromUid()).getName()) + ":" + strategyNoNull.showContactMsg(message)); + resp.setText(strategyNoNull.showContactMsg(message)); } - } else { - resp.setText(strategyNoNull.showContactMsg(message)); } } resp.setUnreadCount(unReadCountMap.getOrDefault(roomId, 0)); @@ -1100,16 +1116,20 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { /** * 获取未读数 */ - private Map getUnReadCountMap(Long uid, List roomIds) { - if (Objects.isNull(uid)) { + public Map getUnReadCountMap(Collection contactList) { + if (CollUtil.isEmpty(contactList)) { return new HashMap<>(); } - List contacts = contactDao.getByRoomIds(roomIds, uid); - return contacts.parallelStream() - .map(contact -> Pair.of(contact.getRoomId(), messageDao.getUnReadCount(contact.getRoomId(), contact.getReadTime(), uid))) - .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); + + return messageDao.batchGetUnReadCount(contactList); } + /** + * 返回房间id与好友的映射 + * @param roomIds + * @param uid + * @return + */ private Map getFriendRoomMap(List roomIds, Long uid) { if (CollectionUtil.isEmpty(roomIds)) { return new HashMap<>(); @@ -1135,9 +1155,6 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { // 获取好友信息 List friendRoomId = groupRoomIdMap.get(RoomTypeEnum.FRIEND.getType()); Map friendRoomMap = getFriendRoomMap(friendRoomId, uid); - - Map remove = new HashMap<>(); - Map collect = roomMap.values().stream().filter(Objects::nonNull).map(room -> { RoomBaseInfo roomBaseInfo = new RoomBaseInfo(); roomBaseInfo.setRoomId(room.getId()); @@ -1148,19 +1165,18 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { if (RoomTypeEnum.of(room.getType()) == RoomTypeEnum.GROUP) { RoomGroup roomGroup = roomInfoBatch.get(room.getId()); roomBaseInfo.setId(roomGroup.getId()); - roomBaseInfo.setName(roomGroup.getName()); roomBaseInfo.setAvatar(roomGroup.getAvatar()); roomBaseInfo.setAccount(roomGroup.getAccount()); - GroupMember member = null; - try { - member = groupMemberCache.getMemberDetail(roomBaseInfo.getId(), uid); - } catch (Exception e) { - remove.put(roomBaseInfo.getId(), uid); - } + GroupMember member = groupMemberCache.getMemberDetail(room.getId(), uid); // todo 稳定了这里可以不用判空,理论上100% 在群里 if (ObjectUtil.isNotNull(member)) { roomBaseInfo.setMyName(member.getMyName()); roomBaseInfo.setRemark(member.getRemark()); + if(StrUtil.isNotEmpty(member.getRemark())){ + roomBaseInfo.setName(member.getRemark()); + } else { + roomBaseInfo.setName(roomGroup.getName()); + } roomBaseInfo.setRoleId(member.getRoleId()); }else { roomBaseInfo.setMyName("会话异常"); @@ -1178,9 +1194,6 @@ public class RoomAppServiceImpl implements RoomAppService, InitializingBean { return roomBaseInfo; }).collect(Collectors.toMap(RoomBaseInfo::getRoomId, Function.identity())); - if (CollectionUtil.isNotEmpty(remove)) { - log.info("需要删除的数据", remove); - } return collect; } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomServiceImpl.java index 394a921b..f51d2053 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/chat/service/impl/RoomServiceImpl.java @@ -86,7 +86,7 @@ public class RoomServiceImpl implements RoomService { @Transactional(rollbackFor = Exception.class) public RoomGroup createGroupRoom(Long uid, GroupAddReq groupAddReq) { List selfGroup = groupMemberDao.getSelfGroup(uid); - AssertUtil.isTrue(selfGroup.size() < 60, "每个人只能创建五个群"); + AssertUtil.isTrue(selfGroup.size() < 5, "每个人只能创建五个群"); User user = userInfoCache.get(uid); Room room = createRoom(RoomTypeEnum.GROUP); // 插入群 diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserApplyDao.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserApplyDao.java index d2e36b61..460cb9aa 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserApplyDao.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserApplyDao.java @@ -7,14 +7,18 @@ import com.luohuo.flex.im.common.utils.CursorUtils; import com.luohuo.flex.im.domain.entity.UserApply; import com.luohuo.flex.im.domain.enums.ApplyDeletedEnum; import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; -import com.luohuo.flex.im.domain.enums.ApplyTypeEnum; import com.luohuo.flex.im.core.user.mapper.UserApplyMapper; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import com.luohuo.flex.im.domain.vo.req.CursorPageBaseReq; import com.luohuo.flex.im.domain.vo.res.CursorPageBaseResp; +import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadDto; +import com.luohuo.flex.model.entity.ws.WSFriendApply; import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.HashSet; import java.util.List; +import java.util.stream.Collectors; import static com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum.READ; import static com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum.UNREAD; @@ -34,7 +38,7 @@ public class UserApplyDao extends ServiceImpl { * 获取用户进群审批列表 */ public CursorPageBaseResp getApplyPage(Long uid, Integer type, CursorPageBaseReq request) { - return CursorUtils.getCursorPageByMysql(this, request, wrapper -> wrapper.eq(UserApply::getTargetId, uid).eq(UserApply::getType, type), UserApply::getCreateTime); + return CursorUtils.getCursorPageByMysql(this, request, wrapper -> wrapper.eq(UserApply::getTargetId, uid).eq(UserApply::getType, type).eq(UserApply::getApplyFor, true), UserApply::getCreateTime); } /** @@ -48,17 +52,31 @@ public class UserApplyDao extends ServiceImpl { return lambdaQuery().eq(UserApply::getUid, uid) .eq(UserApply::getTargetId, targetUid) .eq(UserApply::getStatus, ApplyStatusEnum.WAIT_APPROVAL.getCode()) - .eq(UserApply::getType, ApplyTypeEnum.ADD_FRIEND.getCode()) + .eq(UserApply::getType, RoomTypeEnum.FRIEND.getType()) .notIn(initiator,UserApply::getDeleted,ApplyDeletedEnum.applyDeleted()) .notIn(!initiator,UserApply::getDeleted,ApplyDeletedEnum.targetDeleted()) .one(); } - public Integer getUnReadCount(Long targetId) { - return Math.toIntExact(lambdaQuery().eq(UserApply::getTargetId, targetId) - .eq(UserApply::getReadStatus, UNREAD.getCode()) - .eq(UserApply::getDeleted,ApplyDeletedEnum.NORMAL.getCode()) - .count()); + /** + * 返回好友、群聊申请的未读数量 + * @param targetId + * @return + */ + public WSFriendApply getUnReadCount(Long uid, Long targetId) { + List unReadCountByTypeMap = baseMapper.getUnReadCountByType(targetId, UNREAD.getCode(), ApplyDeletedEnum.NORMAL.getCode()); + WSFriendApply wsFriendApply = new WSFriendApply(); + wsFriendApply.setUid(uid); + + // 构造需要的数据 + for (FriendUnreadDto friendUnreadDto : unReadCountByTypeMap) { + if(friendUnreadDto.getType().equals(RoomTypeEnum.FRIEND.getType())){ + wsFriendApply.setUnReadCount4Friend(friendUnreadDto.getCount()); + } else { + wsFriendApply.setUnReadCount4Group(friendUnreadDto.getCount()); + } + } + return wsFriendApply; } public IPage friendApplyPage(Long uid, Page page) { @@ -86,7 +104,7 @@ public class UserApplyDao extends ServiceImpl { .update(); } - public void updateStatus(Long applyId,ApplyStatusEnum statusEnum) { + public void updateStatus(Long applyId, ApplyStatusEnum statusEnum) { lambdaUpdate().set(UserApply::getStatus, statusEnum.getCode()) .set(UserApply::getUpdateTime, LocalDateTime.now()) .eq(UserApply::getId,applyId) @@ -99,4 +117,12 @@ public class UserApplyDao extends ServiceImpl { .eq(UserApply::getId, applyId) .update(); } + + public List getExistingUsers(Long roomId, HashSet uidList) { + return lambdaQuery() + .eq(UserApply::getRoomId, roomId) + .eq(UserApply::getStatus, ApplyStatusEnum.WAIT_APPROVAL.getCode()) + .in(UserApply::getTargetId, uidList) + .list().stream().map(UserApply::getTargetId).collect(Collectors.toList()); + } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserDao.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserDao.java index 82edbcd9..5dea904f 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserDao.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/dao/UserDao.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.luohuo.flex.im.common.enums.NormalOrNoEnum; import com.luohuo.flex.im.domain.vo.req.CursorPageBaseReq; +import com.luohuo.flex.im.domain.vo.req.user.ModifyNameReq; import com.luohuo.flex.im.domain.vo.res.CursorPageBaseResp; import com.luohuo.flex.im.common.utils.CursorUtils; import com.luohuo.flex.im.domain.vo.response.ChatMemberListResp; @@ -31,10 +32,11 @@ public class UserDao extends ServiceImpl { return getOne(wrapper); } - public void modifyName(Long uid, String name) { + public void modifyName(Long uid, ModifyNameReq req) { User update = new User(); update.setId(uid); - update.setName(name); + update.setName(req.getName()); + update.setResume(req.getResume()); updateById(update); } @@ -68,7 +70,7 @@ public class UserDao extends ServiceImpl { /** * @param memberUidList 在线或离线的群成员id */ - public CursorPageBaseResp getCursorPage(List memberUidList, CursorPageBaseReq request) { + public CursorPageBaseResp getCursorPage(Set memberUidList, CursorPageBaseReq request) { if(memberUidList == null || memberUidList.size() == 0){ return new CursorPageBaseResp<>(); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/mapper/UserApplyMapper.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/mapper/UserApplyMapper.java index c62f2419..93eaab86 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/mapper/UserApplyMapper.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/mapper/UserApplyMapper.java @@ -1,9 +1,13 @@ package com.luohuo.flex.im.core.user.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadDto; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.luohuo.flex.im.domain.entity.UserApply; +import java.util.List; + /** *

* 用户申请表 Mapper 接口 @@ -14,4 +18,5 @@ import com.luohuo.flex.im.domain.entity.UserApply; @Repository public interface UserApplyMapper extends BaseMapper { + List getUnReadCountByType(@Param("targetId") Long targetId, @Param("readStatus") Integer readStatus, @Param("normal") Integer normal); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/ApplyService.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/ApplyService.java index 30e78987..193ac7e0 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/ApplyService.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/ApplyService.java @@ -3,13 +3,12 @@ package com.luohuo.flex.im.core.user.service; import com.luohuo.flex.im.domain.entity.UserApply; import com.luohuo.flex.im.domain.vo.req.PageBaseReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendApplyReq; -import com.luohuo.flex.im.domain.vo.req.friend.FriendApproveReq; import com.luohuo.flex.im.domain.vo.request.RoomApplyReq; import com.luohuo.flex.im.domain.vo.request.member.ApplyReq; import com.luohuo.flex.im.domain.vo.request.member.GroupApplyHandleReq; import com.luohuo.flex.im.domain.vo.res.PageBaseResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendApplyResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; +import com.luohuo.flex.model.entity.ws.WSFriendApply; import jakarta.validation.Valid; /** @@ -28,7 +27,7 @@ public interface ApplyService { * @param request 请求 * @param uid uid */ - UserApply apply(Long uid, FriendApplyReq request); + UserApply handlerApply(Long uid, FriendApplyReq request); /** * 申请加群 @@ -49,7 +48,7 @@ public interface ApplyService { * @param uid uid * @param request 请求 */ - void acceptInvite(Long uid, @Valid ApplyReq request); + void handlerApply(Long uid, @Valid ApplyReq request); /** * 分页查询好友申请 @@ -62,25 +61,9 @@ public interface ApplyService { /** * 申请未读数 * - * @return {@link FriendUnreadResp} + * @return {@link WSFriendApply} */ - FriendUnreadResp unread(Long uid); - - /** - * 拒绝 - * - * @param uid uid - * @param request 请求 - */ - void reject(Long uid, FriendApproveReq request); - - /** - * 忽略申请 - * - * @param uid uid - * @param request 请求 - */ - void ignore(Long uid, FriendApproveReq request); + WSFriendApply unread(Long uid); /** * 删除申请 @@ -88,5 +71,5 @@ public interface ApplyService { * @param uid uid * @param request 请求 */ - void deleteApprove(Long uid, FriendApproveReq request); + void deleteApprove(Long uid, ApplyReq request); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/FriendService.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/FriendService.java index de3bfb3c..bf21b8e4 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/FriendService.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/FriendService.java @@ -9,7 +9,6 @@ import com.luohuo.flex.im.domain.vo.req.friend.FriendCheckReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendReq; import com.luohuo.flex.im.domain.vo.resp.friend.FriendCheckResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; import jakarta.validation.Valid; import java.util.List; @@ -47,13 +46,6 @@ public interface FriendService { */ void createUserApply(Long uid, Long roomId, Long targetId, String msg, Integer type); - /** - * 申请未读数 - * - * @return {@link FriendUnreadResp} - */ - FriendUnreadResp unread(Long uid); - /** * 与系统用户创建好友关系 * 与系统用户创建聊天框 diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/UserService.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/UserService.java index 64f7e89c..f873d399 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/UserService.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/UserService.java @@ -25,6 +25,12 @@ import java.util.List; */ public interface UserService { + /** + * 校验邮箱是否存在 + * @param email 邮箱 + */ + Boolean checkEmail(String email); + /** * @param defUserId 主系统的userId * @param tenantId @@ -54,7 +60,7 @@ public interface UserService { * @param uid * @param req */ - void modifyName(Long uid, ModifyNameReq req); + void modifyInfo(Long uid, ModifyNameReq req); /** diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/FriendAdapter.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/FriendAdapter.java index eee08866..c09dad1d 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/FriendAdapter.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/FriendAdapter.java @@ -2,17 +2,18 @@ package com.luohuo.flex.im.core.user.service.adapter; import com.luohuo.flex.im.domain.entity.UserApply; import com.luohuo.flex.im.domain.entity.UserFriend; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import com.luohuo.flex.model.enums.ChatActiveStatusEnum; import com.luohuo.flex.im.domain.vo.req.friend.FriendApplyReq; import com.luohuo.flex.im.domain.vo.resp.friend.FriendApplyResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendResp; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import static com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum.UNREAD; import static com.luohuo.flex.im.domain.enums.ApplyStatusEnum.WAIT_APPROVAL; -import static com.luohuo.flex.im.domain.enums.ApplyTypeEnum.ADD_FRIEND; /** @@ -26,7 +27,7 @@ public class FriendAdapter { userApplyNew.setUid(uid); userApplyNew.setRoomId(0L); userApplyNew.setMsg(request.getMsg()); - userApplyNew.setType(ADD_FRIEND.getCode()); + userApplyNew.setType(RoomTypeEnum.FRIEND.getType()); userApplyNew.setTargetId(request.getTargetUid()); userApplyNew.setStatus(WAIT_APPROVAL.getCode()); userApplyNew.setReadStatus(UNREAD.getCode()); @@ -49,10 +50,10 @@ public class FriendAdapter { /** * @param friendPage 好友列表 - * @param userOnlineMap 用户在线状态映射 + * @param onlineList 在线用户id * @return */ - public static List buildFriend(List friendPage, Map userOnlineMap) { + public static List buildFriend(List friendPage, Set onlineList) { Map friendHashMap = friendPage.stream().collect(Collectors.toMap(friend -> friend.getFriendUid(), Function.identity())); return friendPage.stream().map(userFriend -> { FriendResp resp = new FriendResp(); @@ -60,7 +61,7 @@ public class FriendAdapter { UserFriend friend = friendHashMap.get(userFriend.getFriendUid()); resp.setHideMyPosts(friend.getHideMyPosts()); resp.setHideTheirPosts(friend.getHideTheirPosts()); - resp.setActiveStatus(userOnlineMap.get(userFriend.getFriendUid())? ChatActiveStatusEnum.ONLINE.getStatus(): ChatActiveStatusEnum.OFFLINE.getStatus()); + resp.setActiveStatus(onlineList.contains(userFriend.getFriendUid())? ChatActiveStatusEnum.ONLINE.getStatus(): ChatActiveStatusEnum.OFFLINE.getStatus()); return resp; }).collect(Collectors.toList()); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/WsAdapter.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/WsAdapter.java index 39b76dd1..d8f58237 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/WsAdapter.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/adapter/WsAdapter.java @@ -1,6 +1,7 @@ package com.luohuo.flex.im.core.user.service.adapter; import cn.hutool.core.util.StrUtil; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import com.luohuo.flex.im.domain.vo.req.room.UserApplyResp; import com.luohuo.flex.model.entity.ws.*; import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; @@ -56,7 +57,9 @@ public class WsAdapter { WsBaseResp wsBaseResp = new WsBaseResp<>(); wsBaseResp.setType(WSRespTypeEnum.MSG_RECALL.getType()); WSMsgRecall recall = new WSMsgRecall(); - BeanUtils.copyProperties(recallDTO, recall); + recall.setRecallUid(recallDTO.getRecallUid()+""); + recall.setMsgId(recallDTO.getMsgId()+""); + recall.setRoomId(recallDTO.getRoomId()+""); wsBaseResp.setData(recall); return wsBaseResp; } @@ -84,7 +87,7 @@ public class WsAdapter { public static WsBaseResp buildApplySend(WSFriendApply resp) { WsBaseResp wsBaseResp = new WsBaseResp<>(); - wsBaseResp.setType(WSRespTypeEnum.REQUEST_NEW_FRIEND.getType()); + wsBaseResp.setType(WSRespTypeEnum.NEW_APPLY.getType()); wsBaseResp.setData(resp); return wsBaseResp; } @@ -116,7 +119,7 @@ public class WsAdapter { public static WsBaseResp buildApplyResultWS(Long uid, Long roomId, Long targetId, String msg, Integer status, Integer readStatus) { WsBaseResp wsBaseResp = new WsBaseResp<>(); wsBaseResp.setType(WSRespTypeEnum.GROUP_APPLY_NOTICE.getType()); - wsBaseResp.setData(new UserApplyResp(uid, 2, roomId, targetId, msg, status, readStatus, LocalDateTime.now())); + wsBaseResp.setData(new UserApplyResp(uid, RoomTypeEnum.GROUP.getType(), roomId, targetId, msg, status, readStatus, true, LocalDateTime.now())); return wsBaseResp; } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/ApplyServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/ApplyServiceImpl.java index 61b1db0d..d963de9d 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/ApplyServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/ApplyServiceImpl.java @@ -40,30 +40,33 @@ import com.luohuo.flex.im.domain.entity.User; import com.luohuo.flex.im.domain.entity.UserApply; import com.luohuo.flex.im.domain.entity.UserFriend; import com.luohuo.flex.im.domain.enums.ApplyDeletedEnum; -import com.luohuo.flex.im.domain.enums.ApplyEnum; +import com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum; import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; import com.luohuo.flex.im.domain.enums.GroupRoleEnum; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import com.luohuo.flex.im.domain.vo.req.PageBaseReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendApplyReq; -import com.luohuo.flex.im.domain.vo.req.friend.FriendApproveReq; import com.luohuo.flex.im.domain.vo.request.RoomApplyReq; import com.luohuo.flex.im.domain.vo.request.member.ApplyReq; import com.luohuo.flex.im.domain.vo.request.member.GroupApplyHandleReq; import com.luohuo.flex.im.domain.vo.res.PageBaseResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendApplyResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; +import com.luohuo.flex.model.entity.ws.WSFriendApply; import com.luohuo.flex.model.redis.annotation.RedissonLock; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; +import static com.luohuo.flex.im.domain.enums.ApplyStatusEnum.AGREE; import static com.luohuo.flex.im.domain.enums.ApplyStatusEnum.WAIT_APPROVAL; /** @@ -89,6 +92,7 @@ public class ApplyServiceImpl implements ApplyService { private FriendService friendService; private CachePlusOps cachePlusOps; private RoomAppService roomAppService; + private TransactionTemplate transactionTemplate; /** * 申请好友 @@ -96,9 +100,8 @@ public class ApplyServiceImpl implements ApplyService { * @param request 请求 */ @Override - @RedissonLock(prefixKey = "friend:apply", key = "#uid") - @Transactional(rollbackFor = Exception.class) - public UserApply apply(Long uid, FriendApplyReq request) { + @RedissonLock(prefixKey = "friend:handlerApply", key = "#uid") + public UserApply handlerApply(Long uid, FriendApplyReq request) { //是否有好友关系 UserFriend friend = userFriendDao.getByFriend(uid, request.getTargetUid()); AssertUtil.isEmpty(friend, "你们已经是好友了"); @@ -111,7 +114,7 @@ public class ApplyServiceImpl implements ApplyService { // 是否有待审批的申请记录(别人请求自己的) UserApply friendApproving = userApplyDao.getFriendApproving(request.getTargetUid(), uid, false); if (Objects.nonNull(friendApproving)) { - acceptInvite(uid, new ApplyReq(friendApproving.getId(), ApplyStatusEnum.AGREE.getCode())); + handlerApply(uid, new ApplyReq(friendApproving.getId(), AGREE.getCode())); return null; } // 申请入库 @@ -147,7 +150,7 @@ public class ApplyServiceImpl implements ApplyService { String msg = StrUtil.format("用户{}申请加入群聊{}", userInfo.getName(), roomGroup.getName()); for (Long groupAdminId : groupAdminIds) { - friendService.createUserApply(uid, roomGroup.getRoomId(), groupAdminId, msg, 2); + friendService.createUserApply(uid, roomGroup.getRoomId(), groupAdminId, msg, RoomTypeEnum.GROUP.getType()); // 给群里的管理员发送申请 pushService.sendPushMsg(MessageAdapter.buildRoomGroupMessage(uid, roomGroup.getRoomId(), groupAdminId, msg), groupAdminId, uid); @@ -156,75 +159,107 @@ public class ApplyServiceImpl implements ApplyService { } @Override - @RedissonLock(key = "#request.roomId") - @Transactional(rollbackFor = Exception.class) - public void acceptInvite(Long uid, ApplyReq request) { + @RedissonLock(key = "#request.applyId") + public void handlerApply(Long uid, ApplyReq request) { // 1. 校验邀请记录 UserApply invite = userApplyDao.getById(request.getApplyId()); if (invite == null || !invite.getTargetId().equals(uid)) { throw new BizException("无效的邀请"); } - if (!invite.getStatus().equals(ApplyStatusEnum.WAIT_APPROVAL.getCode())) { + if (request.getState().equals(WAIT_APPROVAL.getCode())) { + throw new BizException("无效的审批状态"); + } + + if (!invite.getStatus().equals(WAIT_APPROVAL.getCode())) { throw new BizException("无效的审批"); } - // 处理加好友 - invite.setStatus(request.getState()); - if(invite.getType().equals(ApplyEnum.USER_FRIEND.getCode())){ - AssertUtil.equal(invite.getStatus(), WAIT_APPROVAL.getCode(), "已同意好友申请"); - // 同意申请 - userApplyDao.agree(request.getApplyId()); + switch (request.getState()){ + case 0 -> userApplyDao.updateStatus(request.getApplyId(), ApplyStatusEnum.REJECT); + case 2 -> { + // 处理加好友 + invite.setStatus(request.getState()); + if(invite.getType().equals(RoomTypeEnum.FRIEND.getType())){ + AssertUtil.equal(invite.getStatus(), AGREE.getCode(), "已同意好友申请"); + // 同意申请 + AtomicReference atomicRoomId = null; + AtomicReference atomicIsFromTempSession = null; + transactionTemplate.execute(e -> { + userApplyDao.agree(request.getApplyId()); + UserFriend userFriend = userFriendDao.getByFriend(uid, invite.getUid()); + atomicIsFromTempSession.set(userFriend != null && userFriend.getIsTemp()); + // 如果是从临时会话升级,则修改会话状态;否则创建新会话 + if (atomicIsFromTempSession.get()) { + userFriend.setIsTemp(false); + userFriendDao.updateById(userFriend); + } else { + // 创建一个聊天房间 + RoomFriend roomFriend = roomService.createFriendRoom(Arrays.asList(uid, invite.getUid())); - // 检查是否是临时会话升级 - UserFriend userFriend = userFriendDao.getByFriend(uid, invite.getUid()); - boolean isFromTempSession = userFriend != null && userFriend.getIsTemp(); - // 如果是从临时会话升级,则修改会话状态;否则创建新会话 - if (isFromTempSession) { - userFriend.setIsTemp(false); - userFriendDao.updateById(userFriend); - } else { - // 创建一个聊天房间 - RoomFriend roomFriend = roomService.createFriendRoom(Arrays.asList(uid, invite.getUid())); + // 创建双方好友关系 + friendService.createFriend(roomFriend.getRoomId(), uid, invite.getUid()); + atomicRoomId.set(roomFriend.getRoomId()); + } + // 更新邀请状态 + userApplyDao.updateById(invite); + return true; + }); - // 创建双方好友关系 - friendService.createFriend(roomFriend.getRoomId(), uid, invite.getUid()); + // 如果是从临时会话升级,则修改会话状态;否则创建新会话 + if (!atomicIsFromTempSession.get()) { + // 添加双方好友主动关系、被动关系 + cachePlusOps.sAdd(FriendCacheKeyBuilder.userFriendsKey(uid), invite.getUid()); + cachePlusOps.sAdd(FriendCacheKeyBuilder.reverseFriendsKey(invite.getUid()), uid); + cachePlusOps.sAdd(FriendCacheKeyBuilder.userFriendsKey(invite.getUid()), uid); + cachePlusOps.sAdd(FriendCacheKeyBuilder.reverseFriendsKey(uid), invite.getUid()); + friendService.warmUpRoomMemberCache(Arrays.asList(atomicRoomId.get())); - // 添加双方好友主动关系、被动关系 - cachePlusOps.sAdd(FriendCacheKeyBuilder.userFriendsKey(uid), invite.getUid()); - cachePlusOps.sAdd(FriendCacheKeyBuilder.reverseFriendsKey(invite.getUid()), uid); - cachePlusOps.sAdd(FriendCacheKeyBuilder.userFriendsKey(invite.getUid()), uid); - cachePlusOps.sAdd(FriendCacheKeyBuilder.reverseFriendsKey(uid), invite.getUid()); - friendService.warmUpRoomMemberCache(Arrays.asList(roomFriend.getRoomId())); + // 发送一条同意消息。。我们已经是好友了,开始聊天吧 + chatService.sendMsg(MessageAdapter.buildAgreeMsg(atomicRoomId.get(), true), uid); + } - // 发送一条同意消息。。我们已经是好友了,开始聊天吧 - chatService.sendMsg(MessageAdapter.buildAgreeMsg(roomFriend.getRoomId(), true), uid); + // 通知请求方已处理好友申请 + SpringUtils.publishEvent(new UserApprovalEvent(this, RequestApprovalDto.builder().uid(uid).targetUid(invite.getUid()).build())); + } else { + // 处理加群 + RoomGroup roomGroup = roomGroupCache.getByRoomId(invite.getRoomId()); + Room room = roomCache.get(invite.getRoomId()); + GroupMember member = groupMemberDao.getMemberByGroupId(roomGroup.getId(), uid); + if(ObjectUtil.isNotNull(member)){ + throw new BizException(StrUtil.format("{}已经在{}里", userCache.getUserInfo(invite.getTargetId()).getName(), roomGroup.getName())); + } + + transactionTemplate.execute(e -> { + groupMemberDao.save(MemberAdapter.buildMemberAdd(roomGroup.getId(), invite.getTargetId())); + + // 3.2 系统下发加群信息 + if(room.isHotRoom()){ + friendService.createSystemFriend(request.getApplyId()); + } + + // 更新邀请状态 + userApplyDao.updateById(invite); + return true; + }); + + // 3.3 写入缓存 + groupMemberCache.evictMemberList(invite.getRoomId()); + groupMemberCache.evictExceptMemberList(invite.getRoomId()); + CacheKey uKey = PresenceCacheKeyBuilder.userGroupsKey(invite.getTargetId()); + CacheKey gKey = PresenceCacheKeyBuilder.groupMembersKey(room.getId()); + cachePlusOps.sAdd(uKey, room.getId()); + cachePlusOps.sAdd(gKey, invite.getTargetId()); + roomAppService.asyncOnline(Arrays.asList(invite.getTargetId()), room.getId(), true); + + SpringUtils.publishEvent(new GroupMemberAddEvent(this, room.getId(), Arrays.asList(invite.getTargetId()), invite.getUid())); + } } - - // 通知请求方已处理好友申请 - SpringUtils.publishEvent(new UserApprovalEvent(this, RequestApprovalDto.builder().uid(uid).targetUid(invite.getUid()).build())); - } else { - // 处理加群 - groupMemberDao.save(MemberAdapter.buildMemberAdd(invite.getTargetId(), invite.getTargetId())); - - // 3.2 系统下发加群信息 - Room room = roomCache.get(invite.getRoomId()); - if(room.isHotRoom()){ - friendService.createSystemFriend(request.getApplyId()); + case 3 -> { + checkRecord(request); + userApplyDao.updateStatus(request.getApplyId(), ApplyStatusEnum.IGNORE); } - - // 3.3 写入缓存 - CacheKey uKey = PresenceCacheKeyBuilder.userGroupsKey(invite.getRoomId()); - CacheKey gKey = PresenceCacheKeyBuilder.groupMembersKey(room.getId()); - cachePlusOps.sAdd(uKey, room.getId()); - cachePlusOps.sAdd(gKey, invite.getTargetId()); - roomAppService.asyncOnline(Arrays.asList(invite.getTargetId()), room.getId(), true); - - SpringUtils.publishEvent(new GroupMemberAddEvent(this, room.getId(), Arrays.asList(request.getApplyId()), uid)); } - - // 2.1 更新邀请状态 - userApplyDao.updateById(invite); } /** @@ -238,35 +273,43 @@ public class ApplyServiceImpl implements ApplyService { public void handleApply(Long uid, GroupApplyHandleReq req) { // 1. 校验申请记录 UserApply apply = userApplyDao.getById(req.getApplyId()); - if (apply == null || !apply.getType().equals(2)) { + if (apply == null || !apply.getType().equals(RoomTypeEnum.GROUP.getType())) { throw new BizException("无效的申请记录"); } // 2. 校验管理员权限 RoomGroup group = roomGroupCache.get(apply.getRoomId()); - GroupMember member = groupMemberDao.getMember(group.getId(), uid); - if (member == null || (member.getRoleId().equals(GroupRoleEnum.LEADER.getType()) && - !member.getRoleId().equals(GroupRoleEnum.MANAGER.getType()))) { + GroupMember member = groupMemberDao.getMemberByGroupId(group.getId(), uid); + if (member == null || (member.getRoleId().equals(GroupRoleEnum.LEADER.getType()) && !member.getRoleId().equals(GroupRoleEnum.MANAGER.getType()))) { throw new BizException("无审批权限"); } - // 3. 更新申请状态 + Room room = roomCache.get(group.getRoomId()); apply.setStatus(req.getStatus()); - apply.setReadStatus(1); - userApplyDao.updateById(apply); + apply.setReadStatus(ApplyReadStatusEnum.READ.getCode()); - // 5. 同意则加群 - if (req.getStatus().equals(2)) { - // 5.1 加入群聊 - groupMemberDao.save(MemberAdapter.buildMemberAdd(group.getId(), apply.getUid())); + // 3. 更新申请状态 + transactionTemplate.execute(e -> { + userApplyDao.updateById(apply); - // 5.2 处理热点群机器人好友 - Room room = roomCache.get(group.getRoomId()); - if (room.isHotRoom()) { - friendService.createSystemFriend(apply.getUid()); + // 5. 同意则加群 + if (req.getStatus().equals(2)) { + // 5.1 加入群聊 + groupMemberDao.save(MemberAdapter.buildMemberAdd(group.getId(), apply.getTargetId())); + + // 5.2 处理热点群机器人好友 + if (room.isHotRoom()) { + friendService.createSystemFriend(apply.getUid()); + } } + return true; + }); + + // 5.3 写入缓存 + if (req.getStatus().equals(2)) { + groupMemberCache.evictMemberList(group.getRoomId()); + groupMemberCache.evictExceptMemberList(group.getRoomId()); - // 5.3 写入缓存 CacheKey uKey = PresenceCacheKeyBuilder.userGroupsKey(apply.getUid()); CacheKey gKey = PresenceCacheKeyBuilder.groupMembersKey(room.getId()); cachePlusOps.sAdd(uKey, room.getId()); @@ -274,7 +317,7 @@ public class ApplyServiceImpl implements ApplyService { roomAppService.asyncOnline(Arrays.asList(apply.getUid()), room.getId(), true); // 5.5 发布成员增加事件 - SpringUtils.publishEvent(new GroupMemberAddEvent(this, room.getId(), Collections.singletonList(apply.getUid()), uid)); + SpringUtils.publishEvent(new GroupMemberAddEvent(this, room.getId(), Collections.singletonList(apply.getUid()), apply.getUid())); } // 6. 通知申请人 [这条消息需要覆盖前端] @@ -309,29 +352,16 @@ public class ApplyServiceImpl implements ApplyService { /** * 申请未读数 * - * @return {@link FriendUnreadResp} + * @return {@link WSFriendApply} */ @Override - public FriendUnreadResp unread(Long uid) { - Integer unReadCount = userApplyDao.getUnReadCount(uid); - return new FriendUnreadResp(unReadCount); - } - - @Override - public void reject(Long uid, FriendApproveReq request) { - UserApply userApply = checkRecord(request); - userApplyDao.updateStatus(request.getApplyId(), ApplyStatusEnum.REJECT); - } - - @Override - public void ignore(Long uid, FriendApproveReq request) { - checkRecord(request); - userApplyDao.updateStatus(request.getApplyId(), ApplyStatusEnum.IGNORE); + public WSFriendApply unread(Long uid) { + return userApplyDao.getUnReadCount(uid, uid); } @Override @RedissonLock(prefixKey = "friend:deleteApprove", key = "#uid") - public void deleteApprove(Long uid, FriendApproveReq request) { + public void deleteApprove(Long uid, ApplyReq request) { UserApply userApply = checkRecord(request); ApplyDeletedEnum deletedEnum; //判断谁删了这条记录 @@ -351,7 +381,7 @@ public class ApplyServiceImpl implements ApplyService { userApplyDao.deleteApprove(request.getApplyId(), deletedEnum); } - private UserApply checkRecord(FriendApproveReq request) { + private UserApply checkRecord(ApplyReq request) { UserApply userApply = userApplyDao.getById(request.getApplyId()); AssertUtil.isNotEmpty(userApply, "不存在申请记录"); AssertUtil.equal(userApply.getStatus(), WAIT_APPROVAL.getCode(), "对方已是您的好友"); diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/FriendServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/FriendServiceImpl.java index 34566ce2..92d215f5 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/FriendServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/FriendServiceImpl.java @@ -8,6 +8,8 @@ import com.luohuo.basic.model.cache.CacheKey; import com.luohuo.flex.common.cache.FriendCacheKeyBuilder; import com.luohuo.flex.common.cache.PresenceCacheKeyBuilder; import com.luohuo.flex.im.api.PresenceApi; +import com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum; +import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; import jakarta.annotation.PostConstruct; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -36,7 +38,6 @@ import com.luohuo.flex.im.domain.vo.req.friend.FriendCheckReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendReq; import com.luohuo.flex.im.domain.vo.resp.friend.FriendCheckResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; import com.luohuo.flex.im.core.user.service.FriendService; import com.luohuo.flex.im.core.user.service.adapter.FriendAdapter; import com.luohuo.flex.im.core.user.service.cache.UserCache; @@ -128,8 +129,9 @@ public class FriendServiceImpl implements FriendService, InitializingBean { userApply.setType(type); userApply.setRoomId(roomId); userApply.setTargetId(targetId); - userApply.setStatus(1); - userApply.setReadStatus(1); + userApply.setStatus(ApplyStatusEnum.WAIT_APPROVAL.getCode()); + userApply.setReadStatus(ApplyReadStatusEnum.UNREAD.getCode()); + userApply.setApplyFor(true); userApplyDao.save(userApply); } @@ -165,17 +167,6 @@ public class FriendServiceImpl implements FriendService, InitializingBean { return userFriendDao.updateById(userFriend); } - /** - * 申请未读数 - * - * @return {@link FriendUnreadResp} - */ - @Override - public FriendUnreadResp unread(Long uid) { - Integer unReadCount = userApplyDao.getUnReadCount(uid); - return new FriendUnreadResp(unReadCount); - } - @Override @Transactional(rollbackFor = Exception.class) public void createSystemFriend(Long uid){ @@ -221,8 +212,8 @@ public class FriendServiceImpl implements FriendService, InitializingBean { } List friendUids = friendPage.getList().stream().map(UserFriend::getFriendUid).collect(Collectors.toList()); - Map map = presenceApi.getUsersOnlineStatus(friendUids).getData(); - return CursorPageBaseResp.init(friendPage, FriendAdapter.buildFriend(friendPage.getList(), map), 0L); + Set onlineList = presenceApi.getOnlineUsersList(friendUids).getData(); + return CursorPageBaseResp.init(friendPage, FriendAdapter.buildFriend(friendPage.getList(), onlineList), 0L); } public void createFriend(Long roomId, Long uid, Long targetUid) { diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/PushService.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/PushService.java index 52f84055..bfd6362b 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/PushService.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/PushService.java @@ -93,16 +93,7 @@ public class PushService { * 直接发送, 单个用户直接推送 */ public void sendPushMsg(WsBaseResp msg, Long uid, Long cuid) { - // 1. 查询用户路由信息(节点 → 设备集合) - Map> nodeDevices = routerService.findNodeDeviceUser(Arrays.asList(uid)); - - // 2. 按节点批量推送设备 - nodeDevices.forEach((node, devices) -> - CompletableFuture.runAsync( - () -> mqProducer.sendMsg(MqConstant.PUSH_TOPIC + node, new NodePushDTO(msg, devices, cuid)), - getExecutorForNode(node) - ) - ); + sendPushMsg(msg, Arrays.asList(uid), cuid); } /** diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/UserServiceImpl.java b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/UserServiceImpl.java index 8e6df206..84dd34a5 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/UserServiceImpl.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/java/com/luohuo/flex/im/core/user/service/impl/UserServiceImpl.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.luohuo.basic.context.ContextUtil; import com.luohuo.basic.utils.SpringUtils; import com.luohuo.basic.utils.TimeUtils; +import com.luohuo.flex.common.cache.PresenceCacheKeyBuilder; +import com.luohuo.flex.common.constant.DefValConstants; import com.luohuo.flex.im.api.vo.UserRegisterVo; import com.luohuo.flex.im.common.event.UserRegisterEvent; import com.luohuo.flex.im.core.chat.service.ContactService; @@ -14,7 +16,6 @@ import com.luohuo.flex.im.core.chat.service.RoomService; import com.luohuo.flex.im.core.user.service.cache.DefUserCache; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.luohuo.basic.cache.redis2.CacheResult; @@ -71,7 +72,6 @@ public class UserServiceImpl implements UserService { public static final LocalDateTime MAX_DATE = LocalDateTime.of(2099, 12, 31, 00, 00, 00); private final ContactService contactService; private final RoomService roomService; - private final ApplicationEventPublisher applicationEventPublisher; private UserCache userCache; private DefUserCache defUserCache; private UserBackpackDao userBackpackDao; @@ -83,6 +83,12 @@ public class UserServiceImpl implements UserService { private UserSummaryCache userSummaryCache; private SensitiveWordBs sensitiveWordBs; + @Override + public Boolean checkEmail(String email) { + User user = userDao.getByEmail(email); + return user != null; + } + @Override public Long getUIdByUserId(Long defUserId, Long tenantId) { try { @@ -107,7 +113,7 @@ public class UserServiceImpl implements UserService { @Override @Transactional - public void modifyName(Long uid, ModifyNameReq req) { + public void modifyInfo(Long uid, ModifyNameReq req) { // 判断名字是不是重复 String newName = req.getName(); AssertUtil.isFalse(sensitiveWordBs.hasSensitiveWord(newName), "名字中包含敏感词,请重新输入"); // 判断名字中有没有敏感词 @@ -122,7 +128,7 @@ public class UserServiceImpl implements UserService { // 用乐观锁,就不用分布式锁了 if (useSuccess) { // 改名 - userDao.modifyName(uid, req.getName()); + userDao.modifyName(uid, req); // 删除缓存 userSummaryCache.delete(uid); userCache.userInfoChange(uid); @@ -322,6 +328,7 @@ public class UserServiceImpl implements UserService { .sex(userRegisterVo.getSex()) .userType(userRegisterVo.getUserType()) .name(userRegisterVo.getName()) + .resume("这个人还没有填写个人简介呢") .openId(userRegisterVo.getOpenId()) .tenantId(userRegisterVo.getTenantId()) .build(); @@ -330,11 +337,16 @@ public class UserServiceImpl implements UserService { newUser.setCreateBy(1L); userDao.save(newUser); // 创建会话 - contactService.createContact(newUser.getId(), 1L); + contactService.createContact(newUser.getId(), DefValConstants.DEF_ROOM_ID); // 创建群成员 - roomService.createGroupMember(1L, newUser.getId()); + roomService.createGroupMember(DefValConstants.DEF_GROUP_ID, newUser.getId()); + + // 注入群组信息 + cachePlusOps.sAdd(PresenceCacheKeyBuilder.groupMembersKey(DefValConstants.DEF_ROOM_ID), newUser.getId()); + cachePlusOps.sAdd(PresenceCacheKeyBuilder.userGroupsKey(newUser.getId()), DefValConstants.DEF_ROOM_ID); + // 发布用户注册消息 - applicationEventPublisher.publishEvent(new UserRegisterEvent(this, newUser)); + SpringUtils.publishEvent(new UserRegisterEvent(this, newUser)); return true; } } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/ContactMapper.xml b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/ContactMapper.xml index 7cc70e44..3ed192ee 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/ContactMapper.xml +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/ContactMapper.xml @@ -3,14 +3,14 @@ - insert into im_contact(`room_id`,`uid`,`last_msg_id`,`active_time`) - values + INSERT INTO im_contact (room_id, uid, last_msg_id, active_time, is_del) VALUES - (#{roomId},#{uid},#{msgId},#{activeTime}) + (#{roomId},#{uid},#{msgId},#{activeTime},0) - on DUPLICATE KEY UPDATE - `hide`=0, - `last_msg_id`=VALUES(last_msg_id), - `active_time`=VALUES(active_time) + ON DUPLICATE KEY UPDATE + is_del = 0, + hide = 0, + last_msg_id = VALUES(last_msg_id), + active_time = VALUES(active_time); diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/GroupMemberMapper.xml b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/GroupMemberMapper.xml index 7c33be76..2c2f6fb6 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/GroupMemberMapper.xml +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/GroupMemberMapper.xml @@ -2,4 +2,13 @@ + + diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/MessageMapper.xml b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/MessageMapper.xml index bc40323b..c777d96d 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/MessageMapper.xml +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/MessageMapper.xml @@ -2,4 +2,14 @@ + diff --git a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/RoomMapper.xml b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/RoomMapper.xml index 0e5a9789..0311284c 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/RoomMapper.xml +++ b/luohuo-cloud/luohuo-im/luohuo-im-biz/src/main/resources/mapper/chat/RoomMapper.xml @@ -3,13 +3,14 @@ + SELECT type, COUNT(*) as count + FROM im_user_apply + WHERE target_id = #{targetId} AND deleted = #{normal} AND read_status = #{readStatus} + GROUP BY type, `status` order by `status` + diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/ApplyController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/ApplyController.java index 7f30b486..d1ba0af5 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/ApplyController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/ApplyController.java @@ -6,13 +6,12 @@ import com.luohuo.flex.im.core.user.service.ApplyService; import com.luohuo.flex.im.domain.entity.UserApply; import com.luohuo.flex.im.domain.vo.req.PageBaseReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendApplyReq; -import com.luohuo.flex.im.domain.vo.req.friend.FriendApproveReq; import com.luohuo.flex.im.domain.vo.request.RoomApplyReq; import com.luohuo.flex.im.domain.vo.request.member.ApplyReq; import com.luohuo.flex.im.domain.vo.request.member.GroupApplyHandleReq; import com.luohuo.flex.im.domain.vo.res.PageBaseResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendApplyResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; +import com.luohuo.flex.model.entity.ws.WSFriendApply; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -21,7 +20,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -48,20 +46,20 @@ public class ApplyController { @PostMapping("/apply") @Operation(summary = "好友申请") public R apply(@Valid @RequestBody FriendApplyReq request) { - return R.success(applyService.apply(ContextUtil.getUid(), request)); + return R.success(applyService.handlerApply(ContextUtil.getUid(), request)); } @GetMapping("/unread") @Operation(summary = "申请未读数") - public R unread() { + public R unread() { Long uid = ContextUtil.getUid(); return R.success(applyService.unread(uid)); } @Operation(summary ="审批别人邀请的进群、好友申请") - @PostMapping("/accept") - public R acceptInvite(@Valid @RequestBody ApplyReq request) { - applyService.acceptInvite(ContextUtil.getUid(), request); + @PostMapping("/handler/apply") + public R handlerApply(@Valid @RequestBody ApplyReq request) { + applyService.handlerApply(ContextUtil.getUid(), request); return R.success(); } @@ -71,30 +69,16 @@ public class ApplyController { return R.success(applyService.applyGroup(ContextUtil.getUid(), request)); } - @PostMapping("/handle") + @PostMapping("/adminHandleApply") @Operation(summary = "处理加群申请 [仅仅管理员、群主可调用]") public R handleApply(@Valid @RequestBody GroupApplyHandleReq request) { applyService.handleApply(ContextUtil.getUid(), request); return R.success(); } - @PutMapping("/reject") - @Operation(summary = "审批拒绝") - public R reject(@Valid @RequestBody FriendApproveReq request) { - applyService.reject(ContextUtil.getUid(), request); - return R.success(); - } - - @PutMapping("/ignore") - @Operation(summary = "忽略审批") - public R ignore(@Valid @RequestBody FriendApproveReq request) { - applyService.ignore(ContextUtil.getUid(), request); - return R.success(); - } - @DeleteMapping("/delete") @Operation(summary = "删除好友申请") - public R deleteApprove(@Valid @RequestBody FriendApproveReq request) { + public R deleteApprove(@Valid @RequestBody ApplyReq request) { applyService.deleteApprove(ContextUtil.getUid(), request); return R.success(); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/ChatController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/ChatController.java index ed4c99f3..94c8b570 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/ChatController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/ChatController.java @@ -68,8 +68,8 @@ public class ChatController { // @FrequencyControl(time = 120, count = 20, target = FrequencyControl.Target.IP) public R> getMsgPage(@RequestParam(value = "lastOptTime", required = false) Long lastOptTime) { List msgPage = chatService.getMsgList(lastOptTime, ContextUtil.getUid()); - Set blackMembers = getBlackUidSet(); - msgPage.removeIf(a -> blackMembers.contains(a.getFromUser().getUid().toString())); +// Set blackMembers = getBlackUidSet(); +// msgPage.removeIf(a -> blackMembers.contains(a.getFromUser().getUid().toString())); return R.success(msgPage); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/RoomController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/RoomController.java index f3e75418..420f5daa 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/RoomController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/chat/RoomController.java @@ -160,8 +160,8 @@ public class RoomController { } @Operation(summary = "公告列表") - @GetMapping("/announcement/list/{id}") - public R> announcementList(@PathVariable("id") Long roomId, @RequestParam("current") Long current,@RequestParam("size") Long size){ + @GetMapping("/announcement/list") + public R> announcementList(@RequestParam("roomId") Long roomId, @RequestParam("current") Long current,@RequestParam("size") Long size){ IPage page = new Page<>(current,size); return R.success(roomService.announcementList(roomId, page)); } @@ -185,8 +185,8 @@ public class RoomController { } @Operation(summary = "删除公告") - @PostMapping("announcement/delete/{id}") - public R announcementDelete(@PathVariable("id") Long id){ + @PostMapping("announcement/delete") + public R announcementDelete(@RequestParam("id") Long id){ return R.success(roomService.announcementDelete(ContextUtil.getUid(), id)); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/FriendController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/FriendController.java index 727eabeb..1454f1aa 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/FriendController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/FriendController.java @@ -13,7 +13,6 @@ import com.luohuo.flex.im.domain.vo.req.friend.FriendDeleteReq; import com.luohuo.flex.im.domain.vo.req.friend.FriendReq; import com.luohuo.flex.im.domain.vo.resp.friend.FriendCheckResp; import com.luohuo.flex.im.domain.vo.resp.friend.FriendResp; -import com.luohuo.flex.im.domain.vo.resp.friend.FriendUnreadResp; import com.luohuo.flex.im.core.user.service.FriendService; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -57,13 +56,6 @@ public class FriendController { return R.success(); } - @GetMapping("/apply/unread") - @Operation(summary = "申请未读数") - public R unread() { - Long uid = ContextUtil.getUid(); - return R.success(friendService.unread(uid)); - } - @GetMapping("/page") @Operation(summary = "联系人列表") public R> friendList(@Valid CursorPageBaseReq request) { diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserController.java index 5edd806c..0bc0501c 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserController.java @@ -41,6 +41,13 @@ public class UserController { @Resource private RoleService roleService; + @GetMapping("/checkEmail") + @Operation(summary ="绑定邮箱") + @TenantIgnore + public R checkEmail(@RequestParam("email") String email) { + return R.success(userService.checkEmail(email)); + } + @GetMapping("/getById/{id}") @Operation(summary ="用户详情 [仅远程接口调用]") public R getById(@PathVariable("id") Long id) { @@ -93,8 +100,8 @@ public class UserController { @PutMapping("/name") @Operation(summary ="修改用户名") - public R modifyName(@Valid @RequestBody ModifyNameReq req) { - userService.modifyName(ContextUtil.getUid(), req); + public R modifyInfo(@Valid @RequestBody ModifyNameReq req) { + userService.modifyInfo(ContextUtil.getUid(), req); return R.success(); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserStateController.java b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserStateController.java index d5b85fc4..8adc0877 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserStateController.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-controller/src/main/java/com/luohuo/flex/im/controller/user/UserStateController.java @@ -6,11 +6,7 @@ import com.luohuo.flex.im.domain.entity.UserState; import com.luohuo.flex.im.core.user.service.UserStateService; import io.swagger.v3.oas.annotations.Operation; import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -24,9 +20,9 @@ public class UserStateController { @Resource private UserStateService userStateService; - @PostMapping("changeState/{id}") + @PostMapping("changeState") @Operation(summary = "用户状态改变") - public R changeState(@PathVariable("id") Long id){ + public R changeState(@RequestParam("id") Long id){ return R.success(userStateService.changeState(ContextUtil.getUid(), id)); } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/GroupMember.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/GroupMember.java index 696fc359..35f7e4fd 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/GroupMember.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/GroupMember.java @@ -1,6 +1,5 @@ package com.luohuo.flex.im.domain.entity; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.luohuo.basic.base.entity.Entity; import lombok.AllArgsConstructor; @@ -29,19 +28,16 @@ public class GroupMember extends Entity { /** * 群组id */ - @TableField("group_id") private Long groupId; /** * 成员uid */ - @TableField("uid") private Long uid; /** * 成员角色1群主(可撤回,可移除,可解散) 2管理员(可撤回,可移除) 3普通成员 */ - @TableField("role_id") private Integer roleId; /** diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/Message2.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/Message2.java deleted file mode 100644 index 71a3a06d..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/Message2.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.luohuo.flex.im.domain.entity; - -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; -import com.luohuo.basic.base.entity.TenantEntity; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - -/** - *

- * 消息表 - *

- * - * @author nyh - */ -@Data -@EqualsAndHashCode(callSuper = false) -@TableName(value = "im_message", autoResultMap = true) -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class Message2 extends TenantEntity { - - private static final long serialVersionUID = 1L; - - /** - * 会话表id - */ - @TableField("room_id") - private Long roomId; - - /** - * 消息发送者uid - */ - @TableField("from_uid") - private Long fromUid; - - /** - * 消息内容 - */ - @TableField("content") - private String content; - - /** - * 回复的消息内容 - */ - @TableField("reply_msg_id") - private Long replyMsgId; - - /** - * 消息状态 0正常 1删除 - */ - @TableField("status") - private Integer status; - - /** - * 与回复消息的间隔条数 - */ - @TableField("gap_count") - private Integer gapCount; - - /** - * 消息类型 1正常文本 2.撤回消息 - */ - @TableField("type") - private Integer type; - - /** - * 消息扩展字段 - */ - @TableField(value = "extra", typeHandler = FastjsonTypeHandler.class) - private JSONObject extra; -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/User.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/User.java index d5ea8922..ca102b07 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/User.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/User.java @@ -70,6 +70,12 @@ public class User extends Entity { @TableField("open_id") private String openId; + /** + * 个人简介 + */ + @TableField("resume") + private String resume; + /** * @see UserState */ @@ -121,12 +127,6 @@ public class User extends Entity { @TableField(value = "ip_info", typeHandler = JacksonTypeHandler.class) private IpInfo ipInfo; - /** - * 密码 - */ - @TableField("password") - private String password; - public void refreshIp(String ip) { if (ipInfo == null) { ipInfo = new IpInfo(); diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/UserApply.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/UserApply.java index 1ef0def9..0f0eaf0f 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/UserApply.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/entity/UserApply.java @@ -3,6 +3,8 @@ package com.luohuo.flex.im.domain.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableField; import com.luohuo.basic.base.entity.Entity; +import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,7 +33,8 @@ public class UserApply extends Entity { private Long uid; /** - * 申请类型 1加好友 2群聊 + * 申请类型 + * @see RoomTypeEnum */ @TableField("type") private Integer type; @@ -55,13 +58,15 @@ public class UserApply extends Entity { private String msg; /** - * 申请状态 1待审批 2同意 3拒绝 + * 申请状态 + * @see ApplyStatusEnum */ @TableField("status") private Integer status; /** - * 阅读状态 1未读 2已读 + * 阅读状态 + * @see com.luohuo.flex.im.domain.enums.ApplyReadStatusEnum */ @TableField("read_status") private Integer readStatus; @@ -71,4 +76,10 @@ public class UserApply extends Entity { */ @TableField("deleted") private Integer deleted; + + /** + * 主动申请加群 + */ + @TableField("apply_for") + private Boolean applyFor; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyEnum.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyEnum.java deleted file mode 100644 index ea96dce3..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyEnum.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.luohuo.flex.im.domain.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @author 乾乾 - * 申请类型枚举 - */ -@Getter -@AllArgsConstructor -public enum ApplyEnum { - - USER_FRIEND(1, "好友申请"), - - GROUP(2, "群聊邀请"); - private final Integer code; - - private final String desc; -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyTypeEnum.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyTypeEnum.java deleted file mode 100644 index 95068c17..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/enums/ApplyTypeEnum.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.luohuo.flex.im.domain.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @author nyh - */ -@Getter -@AllArgsConstructor -public enum ApplyTypeEnum { - - ADD_FRIEND(1, "加好友"); - - - private final Integer code; - - private final String desc; -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/friend/FriendApproveReq.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/friend/FriendApproveReq.java deleted file mode 100644 index 4c75b810..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/friend/FriendApproveReq.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.luohuo.flex.im.domain.vo.req.friend; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import jakarta.validation.constraints.NotNull; -import com.luohuo.basic.base.entity.BaseEntity; - - -/** - * 申请好友信息 - * @author nyh - */ -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class FriendApproveReq extends BaseEntity { - - @NotNull - @Schema(description ="申请id") - private Long applyId; - -} diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/room/UserApplyResp.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/room/UserApplyResp.java index 855d6424..38392838 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/room/UserApplyResp.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/room/UserApplyResp.java @@ -1,5 +1,7 @@ package com.luohuo.flex.im.domain.vo.req.room; +import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; +import com.luohuo.flex.im.domain.enums.RoomTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -14,7 +16,10 @@ import java.time.LocalDateTime; public class UserApplyResp implements Serializable { @Schema(description ="申请人uid") private Long uid; - @Schema(description ="申请类型 1加好友 2申请进群") + /** + * @see RoomTypeEnum + */ + @Schema(description ="申请类型 1 群 2加好友") private Integer type; @Schema(description ="type = 2 才需要房间id") private Long roomId; @@ -22,10 +27,15 @@ public class UserApplyResp implements Serializable { private Long targetId; @Schema(description ="申请消息") private String msg; - @Schema(description ="申请状态 1待审批 2同意 3拒绝") + /** + * @see ApplyStatusEnum + */ + @Schema(description ="申请状态") private Integer status; @Schema(description ="阅读状态 1未读 2已读") private Integer readStatus; + @Schema(description ="主动申请加群 true 是主动申请进群") + private Boolean applyFor; @Schema(description ="申请时间") private LocalDateTime createTime; } \ No newline at end of file diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/user/ModifyNameReq.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/user/ModifyNameReq.java index 2112b226..3455be08 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/user/ModifyNameReq.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/req/user/ModifyNameReq.java @@ -1,6 +1,5 @@ package com.luohuo.flex.im.domain.vo.req.user; -import com.luohuo.basic.base.entity.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -10,6 +9,7 @@ import org.hibernate.validator.constraints.Length; import jakarta.validation.constraints.NotNull; +import java.io.Serializable; /** @@ -20,11 +20,13 @@ import jakarta.validation.constraints.NotNull; @Builder @AllArgsConstructor @NoArgsConstructor -public class ModifyNameReq extends BaseEntity { +public class ModifyNameReq implements Serializable { @NotNull @Length(max = 8, message = "用户名可别取太长,不然我记不住噢") @Schema(description = "用户名") private String name; + @Schema(description = "个人简介") + private String resume; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/ApplyReq.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/ApplyReq.java index a59c0dde..3af65aae 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/ApplyReq.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/ApplyReq.java @@ -21,6 +21,6 @@ public class ApplyReq { private Long applyId; @NotNull(message = "请选择邀请记录") - @Schema(description ="1 = 同意 2 = 拒绝") + @Schema(description ="0 = 拒绝 2 = 同意 3 = 忽略") private Integer state; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/GroupApplyHandleReq.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/GroupApplyHandleReq.java index 8a7c749f..ed3cef87 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/GroupApplyHandleReq.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/GroupApplyHandleReq.java @@ -1,5 +1,7 @@ package com.luohuo.flex.im.domain.vo.request.member; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -8,6 +10,8 @@ public class GroupApplyHandleReq { @NotNull(message = "申请ID不能为空") private Long applyId; - @NotNull(message = "审批状态不能为空 2=同意 3=拒绝") + @NotNull(message = "审批状态不能为空 0拒绝 2同意 3忽略") + @Min(value = 0, message = "状态值不能小于0") + @Max(value = 3, message = "状态值不能大于3") private Integer status; } \ No newline at end of file diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/MemberAddReq.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/MemberAddReq.java index 471fc93b..bcec8f08 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/MemberAddReq.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/request/member/MemberAddReq.java @@ -8,7 +8,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; +import java.util.HashSet; /** * 移除群成员 @@ -26,5 +26,5 @@ public class MemberAddReq { @NotNull @Size(min = 1, max = 50) @Schema(description ="邀请的uid") - private List uidList; + private HashSet uidList; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendApplyResp.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendApplyResp.java index 2055aafe..fa296a95 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendApplyResp.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendApplyResp.java @@ -1,5 +1,6 @@ package com.luohuo.flex.im.domain.vo.resp.friend; +import com.luohuo.flex.im.domain.enums.ApplyStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -32,7 +33,11 @@ public class FriendApplyResp { @Schema(description ="申请信息") private String msg; - @Schema(description ="申请状态 1待审批 2同意") + /** + * 申请状态 + * @see ApplyStatusEnum + */ + @Schema(description ="申请状态") private Integer status; @Schema(description ="申请时间") diff --git a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadResp.java b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadDto.java similarity index 58% rename from luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadResp.java rename to luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadDto.java index b47efff6..f213e208 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadResp.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-entity/src/main/java/com/luohuo/flex/im/domain/vo/resp/friend/FriendUnreadDto.java @@ -1,24 +1,26 @@ package com.luohuo.flex.im.domain.vo.resp.friend; -import com.luohuo.basic.base.entity.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; /** * 好友校验 - * @author nyh + * @author 乾乾 */ @Data @Builder @AllArgsConstructor @NoArgsConstructor -public class FriendUnreadResp extends BaseEntity { +public class FriendUnreadDto implements Serializable { - @Schema(description ="申请列表的未读数") - private Integer unReadCount; + @Schema(description ="类型") + private Integer type; + @Schema(description ="数量") + private Integer count; } diff --git a/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/ImUserApi.java b/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/ImUserApi.java index 0c9475d1..9ce5416c 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/ImUserApi.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/ImUserApi.java @@ -4,8 +4,6 @@ import com.luohuo.basic.base.R; import com.luohuo.flex.im.api.hystrix.ImUserApiFallback; import com.luohuo.flex.im.api.vo.UserRegisterVo; import com.luohuo.flex.im.domain.vo.resp.user.UserInfoResp; -import com.luohuo.flex.model.entity.system.SysUser; -import com.luohuo.flex.model.vo.result.UserQuery; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.Valid; import org.springframework.cloud.openfeign.FeignClient; @@ -15,10 +13,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import java.io.Serializable; -import java.util.Map; -import java.util.Set; - /** * 用户 * @@ -28,10 +22,14 @@ import java.util.Set; @FeignClient(name = "luohuo-im-server", fallback = ImUserApiFallback.class) public interface ImUserApi { + @GetMapping("/user/checkEmail") + @Operation(summary ="校验邮箱是否存在 [仅远程接口调用]") + R checkEmail(@RequestParam("email") String email); + /** * 获取前端展示信息 */ - @GetMapping("/getById/{id}") + @GetMapping("/user/getById/{id}") @Operation(summary ="用户详情 [仅远程接口调用]") R getById(@PathVariable("id") Long id); @@ -42,25 +40,6 @@ public interface ImUserApi { @GetMapping("/user/findById") R findById(@RequestParam("id") Long id, @RequestParam("tenantId") Long tenantId); - /** - * 根据id查询实体 - * - * @param ids 唯一键(可能不是主键ID) - * @return - */ - @PostMapping("/echo/user/findByIds") - Map findByIds(@RequestParam(value = "ids") Set ids); - - - /** - * 根据id 查询用户详情 - * - * @param userQuery 查询条件 - * @return 系统用户 - */ - @PostMapping(value = "/anyone/getSysUserById") - R getById(@RequestBody UserQuery userQuery); - /** * 注册用户 * diff --git a/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/ImUserApiFallback.java b/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/ImUserApiFallback.java index edd3bb68..5c50d132 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/ImUserApiFallback.java +++ b/luohuo-cloud/luohuo-im/luohuo-im-facade/luohuo-im-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/ImUserApiFallback.java @@ -6,15 +6,9 @@ import com.luohuo.flex.im.domain.vo.resp.user.UserInfoResp; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import com.luohuo.basic.base.R; -import com.luohuo.flex.model.entity.system.SysUser; -import com.luohuo.flex.model.vo.result.UserQuery; import com.luohuo.flex.im.api.ImUserApi; import org.springframework.web.bind.annotation.RequestParam; -import java.io.Serializable; -import java.util.Map; -import java.util.Set; - /** * 用户API熔断 * @@ -25,6 +19,11 @@ import java.util.Set; @RequiredArgsConstructor public class ImUserApiFallback implements ImUserApi { + @Override + public R checkEmail(String email) { + return R.success(true); + } + @Override public R getById(Long id) { return R.success(new UserInfoResp()); @@ -35,16 +34,6 @@ public class ImUserApiFallback implements ImUserApi { throw BizException.wrap("ID: " + id + "用户不存在"); } - @Override - public Map findByIds(Set ids) { - return Map.of(); - } - - @Override - public R getById(UserQuery userQuery) { - return R.timeout(); - } - @Override public R register(UserRegisterVo userRegisterVo) { throw BizException.wrap("注册失败"); diff --git a/luohuo-cloud/luohuo-im/luohuo-im-server/pom.xml b/luohuo-cloud/luohuo-im/luohuo-im-server/pom.xml index 3fde0660..11101982 100644 --- a/luohuo-cloud/luohuo-im/luohuo-im-server/pom.xml +++ b/luohuo-cloud/luohuo-im/luohuo-im-server/pom.xml @@ -62,7 +62,6 @@ org.jsoup jsoup - test diff --git a/luohuo-cloud/luohuo-im/luohuo-im-server/src/test/java/com/luohuo/flex/areatest/CopyUserTest.java b/luohuo-cloud/luohuo-im/luohuo-im-server/src/test/java/com/luohuo/flex/areatest/CopyUserTest.java deleted file mode 100644 index e1b03009..00000000 --- a/luohuo-cloud/luohuo-im/luohuo-im-server/src/test/java/com/luohuo/flex/areatest/CopyUserTest.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.luohuo.flex.areatest; - -import cn.hutool.crypto.SecureUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.luohuo.basic.context.ContextUtil; -import com.luohuo.flex.base.entity.tenant.DefUser; -import com.luohuo.flex.base.service.tenant.DefUserService; -import com.luohuo.flex.im.core.chat.dao.MessageDao; -import com.luohuo.flex.im.core.chat.mapper.Contact222Mapper; -import com.luohuo.flex.im.core.user.dao.UserDao; -import com.luohuo.flex.im.domain.entity.Message; -import com.luohuo.flex.im.domain.entity.Message2; -import com.luohuo.flex.im.domain.entity.User; -import com.luohuo.flex.im.domain.entity.msg.MessageExtra; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.BeanUtils; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.List; - -@SpringBootTest -@ExtendWith(SpringExtension.class) -@Slf4j -public class CopyUserTest { - - @Resource - DefUserService defUserService; - @Resource - UserDao userDao; - @Resource - Contact222Mapper contact222Mapper; - - @Test - public void test2() { - ContextUtil.setTenantId(1L); - QueryWrapper queryWrapper = new QueryWrapper().ge("type", 12); - List messages = contact222Mapper.selectList(queryWrapper); - for (Message2 message : messages) { - JSONObject extra = message.getExtra(); - - if (extra.containsKey("audioCallMsgDTO")) { - JSONObject audioCallMsg = extra.getJSONObject("audioCallMsgDTO"); - - if(audioCallMsg != null){ - // 删除creator字段 - audioCallMsg.remove("creator"); - // 将修改后的对象放回extra中 - extra.put("audioCallMsgDTO", audioCallMsg); - } - } - - if (extra.containsKey("videoCallMsgDTO")) { - JSONObject audioCallMsg = extra.getJSONObject("videoCallMsgDTO"); - if(audioCallMsg != null){ - // 删除creator字段 - audioCallMsg.remove("creator"); - // 将修改后的对象放回extra中 - extra.put("audioCallMsgDTO", audioCallMsg); - } - } - - Message2 message2 = new Message2(); - message2.setId(message.getId()); - message2.setExtra(extra); - contact222Mapper.updateById(message2); - } - } - - /** - * 同步用户数据 - * 需要吧def_user 复制一份到luohuo_im_01 库里面 - */ - @Test - public void test() { - ContextUtil.setTenantId(1L); - List list = userDao.list(); - - for (User user : list) { - DefUser defUser = new DefUser(); - defUser.setUsername(user.getAccount()); - defUser.setNickName(user.getName()); - defUser.setWxOpenId(user.getOpenId()); - defUser.setTenantId(1L); - defUser.setLastLoginTime(user.getLastOptTime()); - defUser.setEmail(user.getEmail()); - defUser.setAvatar(user.getAvatar()); - defUser.setPasswordErrorNum(0); - if(user.getIpInfo() != null){ - com.luohuo.flex.model.entity.base.IpInfo ipInfo1 = new com.luohuo.flex.model.entity.base.IpInfo(); - BeanUtils.copyProperties(user.getIpInfo(), ipInfo1); - defUser.setIpInfo(ipInfo1); - } - defUser.setReadonly(false); - defUser.setSalt(user.getName()); - defUser.setState(true); - defUser.setSex(user.getSex()); - defUser.setSystemType(2); - defUser.setCreateTime(user.getCreateTime()); - defUser.setUpdateTime(user.getUpdateTime()); - defUser.setCreateBy(1L); - defUser.setPassword(SecureUtil.sha256("123456" + defUser.getSalt())); - defUserService.getSuperManager().save(defUser); - - User user1 = new User(); - user1.setId(user.getId()); - user1.setUserId(defUser.getId()); - userDao.updateById(user1); - } - } - -} diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/AesUtil.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/AesUtil.java new file mode 100644 index 00000000..716f4497 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/AesUtil.java @@ -0,0 +1,57 @@ +package com.luohuo.flex.oauth; + +import javax.crypto.Cipher; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.ByteBuffer; +import java.util.Base64; + +public class AesUtil { + private static final String ALGORITHM = "AES/GCM/NoPadding"; + private static final byte[] SECRET_KEY = "Lu0Huo@32ByteKey!!1234567890ABCD".getBytes(); + + public static String encrypt(String plainText) { + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY, "AES"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec); + + byte[] iv = cipher.getIV(); // GCM需要IV + byte[] encrypted = cipher.doFinal(plainText.getBytes()); + + // 组合IV+密文便于存储 + return Base64.getEncoder().encodeToString( + ByteBuffer.allocate(iv.length + encrypted.length) + .put(iv) + .put(encrypted) + .array() + ); + } catch (Exception e) { + throw new RuntimeException("加密失败", e); + } + } + + public static String decrypt(String encryptedText) { + try { + byte[] decoded = Base64.getDecoder().decode(encryptedText); + ByteBuffer buffer = ByteBuffer.wrap(decoded); + + // 提取IV + byte[] iv = new byte[12]; + buffer.get(iv); + + // 提取密文 + byte[] cipherText = new byte[buffer.remaining()]; + buffer.get(cipherText); + + // 解密 + Cipher cipher = Cipher.getInstance(ALGORITHM); + SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY, "AES"); + cipher.init(Cipher.DECRYPT_MODE, keySpec, new GCMParameterSpec(128, iv)); + + return new String(cipher.doFinal(cipherText)); + } catch (Exception e) { + return null; + } + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/cache/QrCacheKeyBuilder.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/cache/QrCacheKeyBuilder.java new file mode 100644 index 00000000..974f4017 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/cache/QrCacheKeyBuilder.java @@ -0,0 +1,29 @@ +package com.luohuo.flex.oauth.cache; + +import com.luohuo.basic.model.cache.CacheKey; +import com.luohuo.basic.model.cache.CacheKeyBuilder; +import com.luohuo.flex.common.cache.CacheKeyModular; +import com.luohuo.flex.common.cache.CacheKeyTable; + +import java.time.Duration; + +/** + * 二维码状态键示例 + */ +public class QrCacheKeyBuilder implements CacheKeyBuilder { + + public static CacheKey builder(String qrId) { + return new QrCacheKeyBuilder().key(qrId); + } + + @Override public String getPrefix() { return CacheKeyModular.PREFIX; } + @Override public String getModular() { return CacheKeyModular.OAUTH; } + @Override public String getTable() { return CacheKeyTable.OAUTH.QR; } + @Override public String getField() { return "id"; } + @Override public ValueType getValueType() { return ValueType.string; } + + @Override + public Duration getExpire() { + return Duration.ofSeconds(30); + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/emuns/QrLoginState.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/emuns/QrLoginState.java new file mode 100644 index 00000000..03e68e7c --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/emuns/QrLoginState.java @@ -0,0 +1,54 @@ +package com.luohuo.flex.oauth.emuns; + +public enum QrLoginState { + /** + * 待扫描(默认状态) + * - 有效期:30秒(半分钟) + * - 描述:二维码生成后等待用户扫描 + */ + PENDING("待扫描", "PENDING", 30_000), + + /** + * 已扫描待确认 + * - 有效期:60秒(1分钟) + * - 描述:用户已扫码但未确认登录 + */ + SCANNED("已扫描待确认", "SCANNED", 60_000), + + /** + * 已确认(可换取Token) + * - 有效期:10秒 + * - 描述:用户确认登录,等待PC端换取Token + */ + CONFIRMED("已确认", "CONFIRMED", 10_000); + + private final String description; // 状态描述 + private final String value; // 状态值 + private final int millis; // 状态有效期(毫秒) + + // 枚举构造函数 + QrLoginState(String description, String value, int millis) { + this.description = description; + this.value = value; + this.millis = millis; + } + + // 获取状态描述 + public String getDescription() { + return description; + } + + public String getValue() { + return value; + } + + // 获取状态超时时间 + public int getMillis() { + return millis; + } + + // 获取状态过期时间点 + public Long getExpireTime() { + return System.currentTimeMillis() + millis; + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/AbstractTokenGranter.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/AbstractTokenGranter.java index 304071ca..1289918f 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/AbstractTokenGranter.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/AbstractTokenGranter.java @@ -96,7 +96,7 @@ public abstract class AbstractTokenGranter implements TokenGranter { if (!result.getsuccess()) { return result; } - result = checkClient(); + result = checkAuthorization(); if (!result.getsuccess()) { return result; } @@ -132,7 +132,7 @@ public abstract class AbstractTokenGranter implements TokenGranter { defUser.refreshIp(ContextUtil.getIP()); // 10. 封装token - LoginResultVO loginResultVO = buildResult(uid, defUser, org, loginParam.getDeviceType()); + LoginResultVO loginResultVO = buildResult(uid, defUser, org, loginParam.getDeviceType(), loginParam.getClientId()); LoginStatusDTO loginStatus = LoginStatusDTO.success(defUser.getId(), uid, defUser.getSystemType(), loginParam.getDeviceType()); SpringUtils.publishEvent(new UserOnlineEvent(this, ContextUtil.getTenantId(), uid, defUser.getId(), defUser.getLastLoginTime(), defUser.getIpInfo())); SpringUtils.publishEvent(new LoginEvent(loginStatus)); @@ -172,16 +172,16 @@ public abstract class AbstractTokenGranter implements TokenGranter { * @date 2022/10/5 12:38 PM * @create [2022/10/5 12:38 PM ] [tangyh] [初始创建] */ - protected R checkClient() { - String basicHeader = JakartaServletUtil.getHeader(WebUtils.request(), CLIENT_KEY, StrPool.UTF_8); - String[] client = Base64Util.getClient(basicHeader); - DefClient defClient = defClientService.getClient(client[0], client[1]); + protected R checkAuthorization() { + String basicHeader = JakartaServletUtil.getHeader(WebUtils.request(), AUTHORIZATION_KEY, StrPool.UTF_8); + String[] authorization = Base64Util.getAuthorization(basicHeader); + DefClient defAuthorization = defClientService.getClient(authorization[0], authorization[1]); - if (defClient == null) { + if (defAuthorization == null) { return R.fail("请在.env文件中配置正确的客户端ID或者客户端秘钥"); } - if (!defClient.getState()) { - return R.fail("客户端[%s]已被禁用", defClient.getClientId()); + if (!defAuthorization.getState()) { + return R.fail("客户端[%s]已被禁用", defAuthorization.getClientId()); } return R.success(null); } @@ -370,23 +370,24 @@ public abstract class AbstractTokenGranter implements TokenGranter { * @param userInfo 员工信息 * @param org 机构信息 * @param deviceType 登录设备 + * @param clientId 设备指纹 * @return com.luohuo.flex.oauth.vo.result.LoginResultVO * @author 乾乾 */ - protected LoginResultVO buildResult(Long uid, DefUser userInfo, Org org, String deviceType) { + protected LoginResultVO buildResult(Long uid, DefUser userInfo, Org org, String deviceType, String clientId) { // 0. 处理同设备登录用户 String combinedDeviceType = kickout(uid, userInfo, deviceType); // 1. 拿到登录用户的id String loginId = userInfo.getId().toString(); StpUtil.login(loginId, combinedDeviceType); -// StpUtil.login(loginId, deviceType); // 2. 配置登录设备、租户信息等等 SaSession tokenSession = StpUtil.getTokenSession(); tokenSession.setLoginId(userInfo.getId()); tokenSession.set(JWT_KEY_SYSTEM_TYPE, userInfo.getSystemType()); tokenSession.set(JWT_KEY_DEVICE, deviceType); + tokenSession.set(CLIENT_HEADER, clientId); if (org.getCurrentTopCompanyId() != null) { tokenSession.set(JWT_KEY_TOP_COMPANY_ID, org.getCurrentTopCompanyId()); } else { @@ -472,10 +473,11 @@ public abstract class AbstractTokenGranter implements TokenGranter { if (CollUtil.isNotEmpty(sameDeviceTokens)) { for (String token : sameDeviceTokens) { try { + String clientId = StpUtil.getTokenSessionByToken(token).getString(CLIENT_HEADER); StpUtil.kickout(token); log.info("已踢出会话: token={}", token); - SpringUtils.publishEvent(new TokenExpireEvent(this, new OffLineResp(uid, deviceType, ContextUtil.getIP(), token))); + SpringUtils.publishEvent(new TokenExpireEvent(this, new OffLineResp(uid, deviceType, clientId, ContextUtil.getIP(), token))); } catch (Exception e) { log.error("踢出会话失败: token={}", token, e); } @@ -525,7 +527,7 @@ public abstract class AbstractTokenGranter implements TokenGranter { } @Override - public LoginResultVO switchOrg(Long orgId) { + public LoginResultVO switchOrg(Long orgId, String clientId) { StpUtil.checkLogin(); Long userId = ContextUtil.getUserId(); DefUser defUser = defUserService.getByIdCache(userId); @@ -588,7 +590,7 @@ public abstract class AbstractTokenGranter implements TokenGranter { .currentDeptId(deptId) .build(); - LoginResultVO loginResultVO = buildResult(ContextUtil.getUid(), defUser, org, StpUtil.getLoginType()); + LoginResultVO loginResultVO = buildResult(ContextUtil.getUid(), defUser, org, StpUtil.getLoginType(), clientId); LoginStatusDTO loginStatus = LoginStatusDTO.switchOrg(defUser.getId(), employee.getId()); SpringUtils.publishEvent(new LoginEvent(loginStatus)); diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/DeviceFingerprintValidator.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/DeviceFingerprintValidator.java new file mode 100644 index 00000000..29f019fa --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/DeviceFingerprintValidator.java @@ -0,0 +1,34 @@ +package com.luohuo.flex.oauth.granter; + +import com.luohuo.basic.context.ContextUtil; +import com.luohuo.flex.oauth.AesUtil; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class DeviceFingerprintValidator { + + /** + * 验证设备指纹的完整性与一致性 [目前仅仅判断了ip是否一致] + * @param currentFingerprint 当前设备指纹 + * @param storedFingerprint 服务端存储的原始指纹 + * @return 验证结果(true=合法设备,false=可疑设备) + */ + public static boolean validateDeviceFingerprint(String currentFingerprint, String storedFingerprint) { + // 1. 基础格式校验 + String decryptedHash = AesUtil.decrypt(storedFingerprint); + if (decryptedHash == null) { + log.warn("设备指纹解密失败"); + return false; + } + + // 2. 解析动态盐值 + String[] parts = decryptedHash.split("\\|"); + if (parts.length < 2) return false; + + String storedFullIp = parts[0]; + long timestamp = Long.parseLong(parts[1]); + + return storedFullIp.equals(ContextUtil.getIP()) && (System.currentTimeMillis() - timestamp < 3600_000); + } + +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/QrCodeGranter.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/QrCodeGranter.java new file mode 100644 index 00000000..d8c6f950 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/QrCodeGranter.java @@ -0,0 +1,171 @@ +package com.luohuo.flex.oauth.granter; + +import cn.dev33.satoken.config.SaTokenConfig; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.ObjectUtil; +import com.luohuo.basic.base.R; +import com.luohuo.basic.cache.redis2.CacheResult; +import com.luohuo.basic.cache.repository.CachePlusOps; +import com.luohuo.basic.context.ContextUtil; +import com.luohuo.basic.exception.BizException; +import com.luohuo.basic.model.cache.CacheKey; +import com.luohuo.flex.base.entity.tenant.DefUser; +import com.luohuo.flex.base.service.system.DefClientService; +import com.luohuo.flex.base.service.tenant.DefUserService; +import com.luohuo.flex.base.service.user.BaseEmployeeService; +import com.luohuo.flex.base.service.user.BaseOrgService; +import com.luohuo.flex.common.properties.SystemProperties; +import com.luohuo.flex.im.api.ImUserApi; +import com.luohuo.flex.model.redis.annotation.RedissonLock; +import com.luohuo.flex.oauth.AesUtil; +import com.luohuo.flex.oauth.cache.QrCacheKeyBuilder; +import com.luohuo.flex.oauth.emuns.QrLoginState; +import com.luohuo.flex.oauth.vo.param.ConfirmReq; +import com.luohuo.flex.oauth.vo.param.LoginParamVO; +import com.luohuo.flex.oauth.vo.param.QueryStatusReq; +import com.luohuo.flex.oauth.vo.param.ScanReq; +import com.luohuo.flex.oauth.vo.result.LoginResultVO; +import com.luohuo.flex.oauth.vo.result.LoginUserInfo; +import com.luohuo.flex.oauth.vo.result.QrCodeResp; +import com.luohuo.flex.oauth.vo.result.QrCodeStatus; +import com.luohuo.flex.oauth.vo.result.ScanResp; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.Duration; + +/** + * 二维码扫码登录 + * + * @author 乾乾 + * @date 2025年08月08日10:23:53 + */ +@Component +@Slf4j +public class QrCodeGranter extends AbstractTokenGranter { + + @Resource + protected CachePlusOps cachePlusOps; + + public QrCodeGranter(SystemProperties systemProperties, DefClientService defClientService, DefUserService defUserService, BaseEmployeeService baseEmployeeService, BaseOrgService baseOrgService, SaTokenConfig saTokenConfig, ImUserApi imUserApi) { + super(systemProperties, defClientService, defUserService, baseEmployeeService, baseOrgService, saTokenConfig, imUserApi); + } + + public QrCodeResp generateQRCode() { + QrLoginState pending = QrLoginState.PENDING; + String qrId = UUID.randomUUID().toString(); + CacheKey cacheKey = QrCacheKeyBuilder.builder(qrId); + cacheKey.setExpire(Duration.ofMillis(pending.getMillis())); + // 2. 生成设备指纹 + String ip = ContextUtil.getIP(); + String deviceHash = makeRawDeviceHash(ip); + + // 存储初始状态(含设备指纹防劫持) + QrCodeStatus state = new QrCodeStatus(pending.getValue(), deviceHash); + cachePlusOps.set(cacheKey, state, true); + return new QrCodeResp(qrId, deviceHash, ip, pending.getExpireTime()); + } + + /** + * 动态生成加密指纹 => IP+时间盐 + * @return + */ + private static String makeRawDeviceHash(String ip) { + String rawDeviceHash = ip + "|" + System.currentTimeMillis(); + return AesUtil.encrypt(rawDeviceHash); + } + + /** + * 用户扫码 + * @param req + * return 返回操作的过期时间 + */ + @RedissonLock(prefixKey ="luohuo:handleScan:", key = "#req.qrId") + public ScanResp handleScan(ScanReq req) { + CacheKey cacheKey = QrCacheKeyBuilder.builder(req.getQrId()); + + // 1. 校验二维码状态 + CacheResult cacheResult = cachePlusOps.get(cacheKey); + QrCodeStatus qrCodeStatus = cacheResult.getValue(); + if (ObjectUtil.isNull(qrCodeStatus) || !QrLoginState.PENDING.getValue().equals(qrCodeStatus.getStatus())) { + throw new BizException("二维码已失效"); + } + + // 2. 更新为已扫描状态 + String ip = ContextUtil.getIP(); + if (!DeviceFingerprintValidator.validateDeviceFingerprint(makeRawDeviceHash(ip), qrCodeStatus.getDeviceHash())) { + throw new BizException("二维码已扫描"); + } + + // 3. 更新redis 状态 + QrLoginState scanned = QrLoginState.SCANNED; + cacheKey.setExpire(Duration.ofMillis(scanned.getMillis())); + qrCodeStatus.setStatus(scanned.getValue()); + cachePlusOps.set(cacheKey, qrCodeStatus); + return new ScanResp(ip, scanned.getExpireTime()); + } + + /** + * 用户确认 + * @param req + * return 返回操作的过期时间 + */ + @RedissonLock(prefixKey ="luohuo:confirmLogin:", key = "#req.qrId") + public Long confirmLogin(ConfirmReq req) { + CacheKey statusKey = QrCacheKeyBuilder.builder(req.getQrId()); + + // 状态校验(仅允许SCANNED→CONFIRMED) + CacheResult cacheResult = cachePlusOps.get(statusKey); + QrCodeStatus qrLoginState = cacheResult.getValue(); + if (ObjectUtil.isNull(qrLoginState) || !QrLoginState.SCANNED.getValue().equals(qrLoginState.getStatus())) { + throw new BizException("二维码状态异常"); + } + + // 存储用户ID并更新状态 + QrLoginState confirmed = QrLoginState.CONFIRMED; + statusKey.setExpire(Duration.ofMillis(confirmed.getMillis())); + cachePlusOps.set(statusKey, new LoginUserInfo(confirmed.getValue(), qrLoginState.getDeviceHash(), ContextUtil.getUserId(), ContextUtil.getUid())); + return confirmed.getExpireTime(); + } + + @RedissonLock(prefixKey ="luohuo:checkStatus:", key = "#req.deviceHash") + public R checkStatus(QueryStatusReq req) { + CacheKey statusKey = QrCacheKeyBuilder.builder(req.getQrId()); + CacheResult result = cachePlusOps.get(statusKey); + LoginUserInfo userInfo = result.getValue(); + + // 1. 校验数据 + if (userInfo == null) { + throw new BizException("二维码状态异常"); + } + if (!req.getDeviceHash().equals(userInfo.getDeviceHash())) { + throw new BizException("设备状态异常"); + } + + String status = userInfo.getStatus(); + if (QrLoginState.CONFIRMED.getValue().equals(status)) { + // 2. 查询用户信息 + Long userId = userInfo.getUserId(); + Long uid = userInfo.getUid(); + DefUser defUser = defUserService.getByIdCache(userId); + + // 3. 生成token + return R.success(buildResult(uid, defUser, findOrg(defUser), req.getDeviceType(), req.getClientId())); + } else if (QrLoginState.SCANNED.getValue().equals(status)) { + return R.fail().setData("请在手机上完成确认"); + } else { + return R.fail().setData("请扫描二维码"); + } + } + + @Override + protected R checkParam(LoginParamVO loginParam) { + return null; + } + + @Override + protected DefUser getUser(LoginParamVO loginParam) { + return null; + } +} diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/TokenGranter.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/TokenGranter.java index 46b8946f..2e63f4a3 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/TokenGranter.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/granter/TokenGranter.java @@ -53,6 +53,6 @@ public interface TokenGranter { * @date 2022/9/16 1:14 PM * @create [2022/9/16 1:14 PM ] [tangyh] [初始创建] */ - LoginResultVO switchOrg(Long orgId); + LoginResultVO switchOrg(Long orgId, String clientId); } diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/UserInfoService.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/UserInfoService.java index fca3a352..93e3b8af 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/UserInfoService.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/UserInfoService.java @@ -53,4 +53,10 @@ public interface UserInfoService { * @return */ String registerByEmail(SysUser sysUser, RegisterByEmailVO register); + + /** + * 校验邮箱是否存在 + * @param email 邮箱信息 + */ + Boolean checkEmail(String email); } diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/CaptchaServiceImpl.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/CaptchaServiceImpl.java index 48f0e0e4..bdc7398c 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/CaptchaServiceImpl.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/CaptchaServiceImpl.java @@ -1,6 +1,5 @@ package com.luohuo.flex.oauth.service.impl; -import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; @@ -33,7 +32,6 @@ import com.luohuo.flex.oauth.properties.CaptchaProperties; import com.luohuo.flex.oauth.service.CaptchaService; import java.io.IOException; -import java.time.LocalDateTime; import java.util.HashMap; import static com.luohuo.basic.exception.code.ResponseEnum.CAPTCHA_ERROR; @@ -140,7 +138,11 @@ public class CaptchaServiceImpl implements CaptchaService { ArgumentAssert.isFalse(flag, "该邮箱已经被他人使用"); } - String code = RandomUtil.randomString(6); +// CacheKey imgKey = CaptchaCacheKeyBuilder.build(bindEmailReq.getClientId(), CaptchaTokenGranter.GRANT_TYPE); +// CacheResult result = cacheOps.get(imgKey); +// ArgumentAssert.isFalse(!bindEmailReq.getCode().equals(result.getValue()), "图片验证码错误"); + + String code = RandomUtil.randomNumbers(6); CacheKey cacheKey = CaptchaCacheKeyBuilder.build(bindEmailReq.getEmail(), bindEmailReq.getTemplateCode()); cacheOps.set(cacheKey, code); diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/UserInfoServiceImpl.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/UserInfoServiceImpl.java index 0c37868c..3ee60284 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/UserInfoServiceImpl.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/impl/UserInfoServiceImpl.java @@ -95,7 +95,6 @@ public class UserInfoServiceImpl implements UserInfoService { public String registerByEmail(SysUser sysUser, RegisterByEmailVO register) { // 1. 校验数据保存defUser if (systemProperties.getVerifyCaptcha()) { -// 短信验证码 CacheKey cacheKey = new CaptchaCacheKeyBuilder().key(register.getEmail(), register.getKey()); CacheResult code = cacheOps.get(cacheKey); ArgumentAssert.equals(code.getValue(), register.getCode(), "验证码不正确"); @@ -158,4 +157,14 @@ public class UserInfoServiceImpl implements UserInfoService { } }; } + + @Override + public Boolean checkEmail(String email) { + // 1. 判断系统邮箱是否存在 + boolean systemEmail = defUserService.checkEmail(email, null); + + // 2. 判断Im邮箱是否存在 + boolean imEmail = imUserApi.checkEmail(email).getData(); + return systemEmail || imEmail; + } } diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-controller/src/main/java/com/luohuo/flex/oauth/controller/RootController.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-controller/src/main/java/com/luohuo/flex/oauth/controller/RootController.java index 69122570..ecb716e5 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-controller/src/main/java/com/luohuo/flex/oauth/controller/RootController.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-controller/src/main/java/com/luohuo/flex/oauth/controller/RootController.java @@ -2,16 +2,22 @@ package com.luohuo.flex.oauth.controller; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.stp.StpUtil; -import com.alibaba.fastjson.JSONObject; import com.luohuo.basic.annotation.log.WebLog; import com.luohuo.basic.annotation.user.LoginUser; import com.luohuo.basic.tenant.core.aop.TenantIgnore; import com.luohuo.flex.base.vo.update.tenant.DefUserPasswordUpdateVO; import com.luohuo.flex.model.entity.system.SysUser; +import com.luohuo.flex.oauth.granter.QrCodeGranter; +import com.luohuo.flex.oauth.vo.param.ConfirmReq; +import com.luohuo.flex.oauth.vo.param.QueryStatusReq; import com.luohuo.flex.oauth.vo.param.RefreshTokenVO; +import com.luohuo.flex.oauth.vo.param.ScanReq; +import com.luohuo.flex.oauth.vo.result.QrCodeResp; +import com.luohuo.flex.oauth.vo.result.ScanResp; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -29,7 +35,6 @@ import com.luohuo.flex.oauth.enumeration.GrantType; import com.luohuo.flex.oauth.granter.RefreshTokenGranter; import com.luohuo.flex.oauth.granter.TokenGranterBuilder; import com.luohuo.flex.oauth.service.UserInfoService; -import com.luohuo.flex.oauth.service.storage.StorageDriver; import com.luohuo.flex.oauth.vo.param.LoginParamVO; import com.luohuo.flex.oauth.vo.param.RegisterByEmailVO; import com.luohuo.flex.oauth.vo.param.RegisterByMobileVO; @@ -48,11 +53,11 @@ import com.luohuo.flex.oauth.vo.result.LoginResultVO; @Tag(name = "登录-退出-注册") public class RootController { + private final QrCodeGranter qrCodeGranter; private final TokenGranterBuilder tokenGranterBuilder; private final RefreshTokenGranter refreshTokenGranter; private final DefUserService defUserService; private final UserInfoService userInfoService; - private final StorageDriver storageDriver; /** * 登录接口 @@ -82,8 +87,8 @@ public class RootController { @Operation(summary = "切换部门") @PutMapping("/anyone/switchTenantAndOrg") - public R switchOrg(@RequestParam(required = false) Long orgId) { - return R.success(tokenGranterBuilder.getGranter(GrantType.PASSWORD).switchOrg(orgId)); + public R switchOrg(@RequestParam(required = false) Long orgId, @RequestParam String clientId) { + return R.success(tokenGranterBuilder.getGranter(GrantType.PASSWORD).switchOrg(orgId, clientId)); } @Operation(summary = "退出", description = "退出") @@ -110,15 +115,39 @@ public class RootController { return R.success(userInfoService.registerByEmail(sysUser, register)); } - @Operation(summary = "检测手机号是否存在") + @Operation(summary = "检测邮箱是否存在") + @GetMapping("/anyTenant/checkEmail") + public R checkEmail(@RequestParam("email") String email) { + return R.success(userInfoService.checkEmail(email)); + } + + @Operation(summary = "检测手机号是否存在") @GetMapping("/anyTenant/checkMobile") - public R checkMobile(@RequestParam String mobile) { + public R checkMobile(@RequestParam("mobile") String mobile) { return R.success(defUserService.checkMobile(mobile, null)); } - @Operation(summary = "获取七牛云上传token") - @GetMapping("/anyTenant/ossToken") - public R token() { - return R.success(storageDriver.getToken()); + @GetMapping("/anyTenant/qr/generate") + @Operation(summary = "生成登录二维码") + public R generateQRCode() { + return R.success(qrCodeGranter.generateQRCode()); + } + + @GetMapping("/anyTenant/qr/status/query") + @Operation(summary = "查询二维码状态") + public R checkStatus(@Valid QueryStatusReq req) { + return qrCodeGranter.checkStatus(req); + } + + @PostMapping("/qrcode/scan") + @Operation(summary = "扫描登录二维码") + public R handleScan(@Valid @RequestBody ScanReq req) { + return R.success(qrCodeGranter.handleScan(req)); + } + + @PostMapping("/qrcode/confirm") + @Operation(summary = "用户在手机上确认登录") + public R confirmLogin(@Valid @RequestBody ConfirmReq req) { + return R.success(qrCodeGranter.confirmLogin(req)); } } diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ConfirmReq.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ConfirmReq.java new file mode 100644 index 00000000..0d1f10db --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ConfirmReq.java @@ -0,0 +1,14 @@ +package com.luohuo.flex.oauth.vo.param; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "二维码确认") +public class ConfirmReq implements Serializable { + @NotEmpty(message = "二维码参数不能为空") + private String qrId; +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/LoginParamVO.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/LoginParamVO.java index 708c9e37..9f3590bc 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/LoginParamVO.java +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/LoginParamVO.java @@ -43,6 +43,9 @@ public class LoginParamVO { @Schema(description = "手机号") private String mobile; + @Schema(description = "客户端指纹信息") + private String clientId = ""; + /** * @see com.luohuo.flex.oauth.emuns.LoginEnum */ diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/QueryStatusReq.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/QueryStatusReq.java new file mode 100644 index 00000000..952ffec7 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/QueryStatusReq.java @@ -0,0 +1,27 @@ +package com.luohuo.flex.oauth.vo.param; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "轮询二维码状态") +public class QueryStatusReq implements Serializable { + @NotEmpty(message = "二维码参数不能为空") + private String qrId; + + @NotEmpty(message = "设备信息异常") + @Schema(description = "前端指纹") + private String clientId; + + @NotEmpty(message = "设备异常") + private String deviceHash; + + @Pattern(regexp = "^(PC)$", message = "登录方式只能是 PC") + @NotEmpty(message = "登录方式只能是 PC") + @Schema(description = "请选择登录方式 PC") + private String deviceType; +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ScanReq.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ScanReq.java new file mode 100644 index 00000000..3dda72bf --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/param/ScanReq.java @@ -0,0 +1,14 @@ +package com.luohuo.flex.oauth.vo.param; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "二维码请求") +public class ScanReq implements Serializable { + @NotEmpty(message = "二维码参数不能为空") + private String qrId; +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/LoginUserInfo.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/LoginUserInfo.java new file mode 100644 index 00000000..d7bf0521 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/LoginUserInfo.java @@ -0,0 +1,32 @@ +package com.luohuo.flex.oauth.vo.result; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "用户扫码成功后的信息") +public class LoginUserInfo implements Serializable { + @Schema(description = "二维码唯一标识") + private String status; + + @Schema(description = "系统id") + private Long userId; + + @Schema(description = "用户id") + private Long uid; + + @Schema(description = "用户指纹") + private String deviceHash; + + public LoginUserInfo(String status, String deviceHash, Long userId, Long uid) { + this.status = status; + this.userId = userId; + this.uid = uid; + this.deviceHash = deviceHash; + } + + public LoginUserInfo() { + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeResp.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeResp.java new file mode 100644 index 00000000..9868a3f3 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeResp.java @@ -0,0 +1,28 @@ +package com.luohuo.flex.oauth.vo.result; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import java.io.Serializable; + +@Data +@Schema(description = "二维码生成响应体") +public class QrCodeResp implements Serializable { + @Schema(description = "二维码唯一标识(用于轮询状态)") + private String qrId; + + @Schema(description = "设备指纹") + private String deviceHash; + + @Schema(description = "二维码过期时间戳(毫秒)") + private Long expireTime; + + @Schema(description = "登录端ip") + private String ip; + + public QrCodeResp(String qrId, String deviceHash, String ip, Long expireTime) { + this.qrId = qrId; + this.deviceHash = deviceHash; + this.expireTime = expireTime; + this.ip = ip; + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeStatus.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeStatus.java new file mode 100644 index 00000000..71687dc8 --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/QrCodeStatus.java @@ -0,0 +1,24 @@ +package com.luohuo.flex.oauth.vo.result; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "二维码状态") +public class QrCodeStatus implements Serializable { + @Schema(description = "二维码唯一标识(用于轮询状态)") + private String status; + + @Schema(description = "设备指纹") + private String deviceHash; + + public QrCodeStatus(String status, String deviceHash) { + this.status = status; + this.deviceHash = deviceHash; + } + + public QrCodeStatus() { + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/ScanResp.java b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/ScanResp.java new file mode 100644 index 00000000..3f63389f --- /dev/null +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-entity/src/main/java/com/luohuo/flex/oauth/vo/result/ScanResp.java @@ -0,0 +1,21 @@ +package com.luohuo.flex.oauth.vo.result; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "扫码后展示在手机端的信息") +public class ScanResp implements Serializable { + @Schema(description = "二维码过期时间戳(毫秒)") + private Long expireTime; + + @Schema(description = "登录端ip") + private String ip; + + public ScanResp(String ip, Long expireTime) { + this.ip = ip; + this.expireTime = expireTime; + } +} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-server/src/main/resources/bootstrap.yml b/luohuo-cloud/luohuo-oauth/luohuo-oauth-server/src/main/resources/bootstrap.yml index 4161b522..0782c3b0 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-server/src/main/resources/bootstrap.yml +++ b/luohuo-cloud/luohuo-oauth/luohuo-oauth-server/src/main/resources/bootstrap.yml @@ -8,6 +8,7 @@ luohuo: username: ${NACOS_USERNAME:@nacos.username@} password: ${NACOS_PASSWORD:@nacos.password@} web-port: ${NACOS_WEB_PORT:@nacos.web-port@} + local-ip: ${NACOS_LOCAL_IP:@nacos.local-ip@} seata: ip: ${SEATA_IP:@seata.ip@} port: ${SEATA_PORT:@seata.port@} @@ -53,6 +54,7 @@ spring: password: ${luohuo.nacos.password} server-addr: ${luohuo.nacos.ip}:${luohuo.nacos.port} namespace: ${luohuo.nacos.namespace} + ip: ${luohuo.nacos.local-ip} metadata: # 元数据,用于权限服务实时获取各个服务的所有接口 management.context-path: ${server.servlet.context-path:}${spring.mvc.servlet.path:}${management.endpoints.web.base-path:} gray_version: qianqian diff --git a/luohuo-cloud/luohuo-presence/luohuo-presence-controller/src/main/java/com/luohuo/flex/OnlineController.java b/luohuo-cloud/luohuo-presence/luohuo-presence-controller/src/main/java/com/luohuo/flex/OnlineController.java index 9c2e8fb6..801cb557 100644 --- a/luohuo-cloud/luohuo-presence/luohuo-presence-controller/src/main/java/com/luohuo/flex/OnlineController.java +++ b/luohuo-cloud/luohuo-presence/luohuo-presence-controller/src/main/java/com/luohuo/flex/OnlineController.java @@ -1,5 +1,7 @@ package com.luohuo.flex; +import cn.hutool.core.collection.CollUtil; +import com.google.common.collect.Lists; import com.luohuo.basic.base.R; import com.luohuo.basic.cache.repository.CachePlusOps; import com.luohuo.basic.model.cache.CacheKey; @@ -16,9 +18,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -35,6 +40,36 @@ public class OnlineController { private CachePlusOps cachePlusOps; + /** + * 查询在线用户ID集合 + * @param uids 待查询的用户ID列表 + * @return 在线的用户ID集合 + */ + @PostMapping("/user/online-users-list") + public R> getOnlineUsersList(@RequestBody List uids) { + if (CollUtil.isEmpty(uids)) { + return R.success(Collections.emptySet()); + } + + String onlineKey = PresenceCacheKeyBuilder.globalOnlineUsersKey().getKey(); + Set onlineUsers = new HashSet<>(); + + // 分页批量查询 + Lists.partition(uids, 500).forEach(batch -> { + // 1. 批量查询分数 + List scores = cachePlusOps.getZSetScores(onlineKey, batch); + + // 2. 过滤在线用户 + for (int i = 0; i < batch.size(); i++) { + if (scores.get(i) != null) { + onlineUsers.add(batch.get(i)); + } + } + }); + + return R.success(onlineUsers); + } + /** * 查询在线的人员 * @param uids diff --git a/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/PresenceApi.java b/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/PresenceApi.java index 0df4736f..1f6ab94d 100644 --- a/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/PresenceApi.java +++ b/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/PresenceApi.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody; import java.util.List; import java.util.Map; +import java.util.Set; /** * 用户 @@ -21,6 +22,14 @@ import java.util.Map; */ @FeignClient(name = "${" + Constants.PROJECT_PREFIX + ".feign.tenant-server:luohuo-presence-server}", fallback = PresenceApiFallback.class) public interface PresenceApi { + /** + * 查询用户的在线id集合 + * + * @return 用户id + */ + @PostMapping("/online/user/online-users-list") + R> getOnlineUsersList(@RequestBody List uids); + /** * 查询用户的在线状态 * diff --git a/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/PresenceApiFallback.java b/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/PresenceApiFallback.java index 460e983f..1b6f47b1 100644 --- a/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/PresenceApiFallback.java +++ b/luohuo-cloud/luohuo-presence/luohuo-presence-facade/luohuo-presence-cloud-impl/src/main/java/com/luohuo/flex/im/api/hystrix/PresenceApiFallback.java @@ -6,8 +6,10 @@ import com.luohuo.flex.im.api.PresenceApi; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * 在线用户API熔断 @@ -17,6 +19,11 @@ import java.util.Map; */ @Component public class PresenceApiFallback implements PresenceApi { + @Override + public R> getOnlineUsersList(List uids) { + return R.success(new HashSet<>()); + } + @Override public R> getUsersOnlineStatus(List uids) { return R.success(new HashMap<>()); diff --git a/luohuo-cloud/luohuo-presence/luohuo-presence-server/src/main/resources/bootstrap.yml b/luohuo-cloud/luohuo-presence/luohuo-presence-server/src/main/resources/bootstrap.yml index 4b036703..dff9a3ed 100644 --- a/luohuo-cloud/luohuo-presence/luohuo-presence-server/src/main/resources/bootstrap.yml +++ b/luohuo-cloud/luohuo-presence/luohuo-presence-server/src/main/resources/bootstrap.yml @@ -8,6 +8,7 @@ luohuo: username: ${NACOS_USERNAME:@nacos.username@} password: ${NACOS_PASSWORD:@nacos.password@} web-port: ${NACOS_WEB_PORT:@nacos.web-port@} + local-ip: ${NACOS_LOCAL_IP:@nacos.local-ip@} seata: ip: ${SEATA_IP:@seata.ip@} port: ${SEATA_PORT:@seata.port@} @@ -54,6 +55,7 @@ spring: password: ${luohuo.nacos.password} server-addr: ${luohuo.nacos.ip}:${luohuo.nacos.port} namespace: ${luohuo.nacos.namespace} + ip: ${luohuo.nacos.local-ip} metadata: # 元数据,用于权限服务实时获取各个服务的所有接口 management.context-path: ${server.servlet.context-path:}${spring.mvc.servlet.path:}${management.endpoints.web.base-path:} grayversion: luohuo diff --git a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/CacheKeyTable.java b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/CacheKeyTable.java index d9a4e204..8058feb3 100644 --- a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/CacheKeyTable.java +++ b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/CacheKeyTable.java @@ -263,8 +263,20 @@ public interface CacheKeyTable { * 朋友圈权限 */ String FEED_TARGET = "feedTarget"; + + /** + * 会话信息 + */ + String USER_CONTACT = "user_contact"; } + interface OAUTH { + + /** + * 租户自定义字典 + */ + String QR = "qr_status"; + } /** * 消息服务缓存 start diff --git a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/PresenceCacheKeyBuilder.java b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/PresenceCacheKeyBuilder.java index 6c2a33be..a525438a 100644 --- a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/PresenceCacheKeyBuilder.java +++ b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/cache/PresenceCacheKeyBuilder.java @@ -91,6 +91,9 @@ public class PresenceCacheKeyBuilder implements CacheKeyBuilder { return new GlobalOnlineDevicesKeyBuilder().key(); } + /** + * 系统在线的所有用户 uid:clientId 的映射方式 + */ private static class GlobalOnlineDevicesKeyBuilder implements CacheKeyBuilder { @Override public String getPrefix() { return CacheKeyModular.PREFIX; } @Override public String getTenant() { return StrPool.EMPTY; } diff --git a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/constant/DefValConstants.java b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/constant/DefValConstants.java index 2a73a2a7..9972de91 100644 --- a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/constant/DefValConstants.java +++ b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/constant/DefValConstants.java @@ -11,6 +11,10 @@ import com.luohuo.basic.utils.TreeUtil; public interface DefValConstants { /** 内置的租户 */ Long DEF_TENANT_ID = 1L; + /** 内置的房间id */ + Long DEF_ROOM_ID = 1L; + /** 内置的群组id */ + Long DEF_GROUP_ID = 1L; /** * 默认的树节点 分隔符 */ diff --git a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/utils/Base64Util.java b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/utils/Base64Util.java index 7ce0f908..03311cce 100644 --- a/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/utils/Base64Util.java +++ b/luohuo-cloud/luohuo-public/luohuo-common/src/main/java/com/luohuo/flex/common/utils/Base64Util.java @@ -22,25 +22,25 @@ public class Base64Util { * authorization: base64(clientId:clientSec) * 解析请求头中存储的 client 信息 *

- * Basic clientId:clientSec -截取-> clientId:clientSec后调用 extractClient 解码 + * Basic clientId:clientSec -截取-> clientId:clientSec后调用 extractAuthorization 解码 * * @param basicHeader Basic clientId:clientSec * @return clientId:clientSec */ - public static String[] getClient(String basicHeader) { + public static String[] getAuthorization(String basicHeader) { if (StrUtil.isEmpty(basicHeader)) { throw BizException.wrap("客户端参数尚未传递"); } - return extractClient(basicHeader); + return extractAuthorization(basicHeader); } /** - * 解析请求头中存储的 client 信息 + * 解析请求头中存储的 authorization 信息 * clientId:clientSec 解码 */ - public static String[] extractClient(String client) { - String token = base64Decoder(client); + public static String[] extractAuthorization(String authorization) { + String token = base64Decoder(authorization); int index = token.indexOf(StrPool.COLON); if (index == -1) { throw BizException.wrap(JWT_BASIC_INVALID); diff --git a/luohuo-cloud/luohuo-public/luohuo-model/pom.xml b/luohuo-cloud/luohuo-public/luohuo-model/pom.xml index c4da8325..1b1547de 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/pom.xml +++ b/luohuo-cloud/luohuo-public/luohuo-model/pom.xml @@ -19,7 +19,7 @@ redisson-spring-boot-starter org.redisson - 3.26.0 + ${redisson.version} com.baomidou diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/WSRespTypeEnum.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/WSRespTypeEnum.java index ada4c4c7..b9eb4c44 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/WSRespTypeEnum.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/WSRespTypeEnum.java @@ -27,7 +27,6 @@ public enum WSRespTypeEnum { MY_ROOM_INFO_CHANGE("myRoomInfoChange", "自己修改我在群里的信息", ChatMyRoomGroupChange.class), ROOM_GROUP_MSG("roomGroupMsg", "用户申请加群通知消息", null), GROUP_APPLY_NOTICE("GroupApplyNotice", "管理员用户申请加群通知消息", null), - INVITEE_USER_ADD_GROUP("INVITEE_USER_ADD_GROUP", "邀请用户进群通知消息", null), TOKEN_EXPIRED("tokenExpired", "使前端的token失效,意味着前端需要重新登录", OffLineResp.class), INVALID_USER("invalidUser", "拉黑用户", WSBlack.class), MSG_MARK_ITEM("msgMarkItem", "消息标记", WSMsgMark.class), @@ -38,8 +37,8 @@ public enum WSRespTypeEnum { ROOM_NOTIFICATION("roomNotification", "会话消息接收类型改变", null), SHIELD("shield", "你已屏蔽好友的消息", null), UNBLOCK("unblock", "你已解除屏蔽好友的消息", null), - REQUEST_NEW_FRIEND("requestNewFriend", "好友申请", WSFriendApply.class), - NEW_FRIEND_SESSION("newFriendSession", "成员变动", WSMemberChange.class), + NEW_APPLY("newApply", "好友申请、群聊邀请", WSFriendApply.class), + memberChange("memberChange", "成员变动", WSMemberChange.class), OFFLINE("offline", "下线通知", WSOnlineNotify.class), WSReconnect("WSReconnect", "ws消息重连", null), REQUEST_APPROVAL_FRIEND("requestApprovalFriend", "同意好友请求", WSFriendApproval.class), diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMember.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMember.java new file mode 100644 index 00000000..8fd69059 --- /dev/null +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMember.java @@ -0,0 +1,42 @@ +package com.luohuo.flex.model.entity.ws; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author 乾乾 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ChatMember implements Serializable { + @Schema(description = "群成员表id") + private String id; + @Schema(description ="变动uid") + private String uid; + @Schema(description = "账号") + private String account; + @Schema(description ="在线状态 1在线 2离线") + private Integer activeStatus; + @Schema(description = "角色ID") + private Integer roleId; + @Schema(description = "IP归属地") + private String locPlace; + @Schema(description ="最后一次上下线时间") + private LocalDateTime lastOptTime; + @Schema(description = "我的群昵称") + private String myName; + @Schema(description = "用户昵称") + private String name; + @Schema(description = "头像") + private String avatar; + @Schema(description = "用户状态id") + private String userStateId; +} diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMemberResp.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMemberResp.java index 50887890..4c4ddc0d 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMemberResp.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMemberResp.java @@ -20,6 +20,7 @@ import java.time.LocalDateTime; @NoArgsConstructor public class ChatMemberResp implements Serializable { + @Schema(description = "群成员表id") private Long id; @Schema(description = "uid") diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMessageResp.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMessageResp.java index 4a983466..308130d3 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMessageResp.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/ChatMessageResp.java @@ -29,7 +29,6 @@ public class ChatMessageResp implements Serializable { public static class UserInfo { @Schema(description ="用户id") private String uid; - private String nickname; } @Data diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/OffLineResp.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/OffLineResp.java index e9b9f132..7084498f 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/OffLineResp.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/OffLineResp.java @@ -25,6 +25,9 @@ public class OffLineResp { @Schema(description = "客户端") private String client; + @Schema(description = "客户端指纹") + private String clientId; + @Schema(description = "登录ip") private String ip; @@ -34,10 +37,11 @@ public class OffLineResp { public OffLineResp() { } - public OffLineResp(Long uid, String client, String ip, String uuid) { + public OffLineResp(Long uid, String client, String clientId, String ip, String uuid) { this.ip = ip; this.uid = uid; this.client = client; + this.clientId = clientId; this.uuid = uuid; } } diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/PendingInviteWs.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/PendingInviteWs.java deleted file mode 100644 index f822ed8a..00000000 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/PendingInviteWs.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.luohuo.flex.model.entity.ws; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.time.LocalDateTime; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PendingInviteWs implements Serializable { - @Schema(description ="邀请人id") - private String inviteId; - @Schema(description ="群id") - private String groupId; - @Schema(description ="被邀请人id") - private String inviterUid; - @Schema(description ="邀请时间") - private LocalDateTime inviteTime; -} \ No newline at end of file diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSFriendApply.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSFriendApply.java index e4845f1d..3bf0d9b6 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSFriendApply.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSFriendApply.java @@ -15,8 +15,10 @@ import java.io.Serializable; @AllArgsConstructor @NoArgsConstructor public class WSFriendApply implements Serializable { - @Schema(description ="申请人") + @Schema(description ="申请人、被邀请人") private Long uid; - @Schema(description ="申请未读数") - private Integer unreadCount; + @Schema(description ="好友申请列表的未读数") + private Integer unReadCount4Friend; + @Schema(description ="群聊申请列表的未读数") + private Integer unReadCount4Group; } diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMemberChange.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMemberChange.java index a782fe5c..45619cd9 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMemberChange.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMemberChange.java @@ -7,7 +7,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.time.LocalDateTime; import java.util.List; /** @@ -20,22 +19,11 @@ import java.util.List; public class WSMemberChange implements Serializable { public static final Integer CHANGE_TYPE_ADD = 1; public static final Integer CHANGE_TYPE_REMOVE = 2; + public static final Integer CHANGE_TYPE_QUIT = 3; @Schema(description ="群组id") - private Long roomId; - @Schema(description ="变动类型 1加入群组 2移除群组") + private String roomId; + @Schema(description ="变动类型 1加入群组 2移除群组 3退出群聊") private Integer changeType; @Schema(description ="变动uid集合") - private List userList; - - @Data - @NoArgsConstructor - @AllArgsConstructor - public static class UserState implements Serializable { - @Schema(description ="变动uid") - private Long uid; - @Schema(description ="在线状态 1在线 2离线") - private Integer activeStatus; - @Schema(description ="最后一次上下线时间") - private LocalDateTime lastOptTime; - } + private List userList; } diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMsgRecall.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMsgRecall.java index f88da6c4..71f1223e 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMsgRecall.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSMsgRecall.java @@ -1,11 +1,15 @@ package com.luohuo.flex.model.entity.ws; -import com.luohuo.flex.model.entity.dto.ChatMsgRecallDTO; import lombok.Data; +import java.io.Serializable; /** * @author nyh */ @Data -public class WSMsgRecall extends ChatMsgRecallDTO { +public class WSMsgRecall implements Serializable { + private String msgId; + private String roomId; + //撤回的用户 + private String recallUid; } diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSOnlineNotify.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSOnlineNotify.java index 4f18f981..83cc2eae 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSOnlineNotify.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/entity/ws/WSOnlineNotify.java @@ -36,4 +36,13 @@ public class WSOnlineNotify { this.onlineNum = onlineNum; this.type = type; } + + public WSOnlineNotify(Long roomId, Long uid, String clientId, Long lastOptTime, Long onlineNum, Integer type) { + this.roomId = roomId; + this.uid = uid; + this.clientId = clientId; + this.lastOptTime = lastOptTime; + this.onlineNum = onlineNum; + this.type = type; + } } diff --git a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/vo/query/BindEmailReq.java b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/vo/query/BindEmailReq.java index 297b054d..3d91218e 100644 --- a/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/vo/query/BindEmailReq.java +++ b/luohuo-cloud/luohuo-public/luohuo-model/src/main/java/com/luohuo/flex/model/vo/query/BindEmailReq.java @@ -27,6 +27,9 @@ public class BindEmailReq implements Serializable { @Schema(description = "验证码") private String code; + @Schema(description = "指纹信息 [配合验证码使用的]") + private String clientId; + @Schema(description = "uuid") private String uuid; diff --git a/luohuo-cloud/luohuo-public/luohuo-router/src/main/java/com/luohuo/flex/router/NacosRouterService.java b/luohuo-cloud/luohuo-public/luohuo-router/src/main/java/com/luohuo/flex/router/NacosRouterService.java index c7ee0599..dd12f648 100644 --- a/luohuo-cloud/luohuo-public/luohuo-router/src/main/java/com/luohuo/flex/router/NacosRouterService.java +++ b/luohuo-cloud/luohuo-public/luohuo-router/src/main/java/com/luohuo/flex/router/NacosRouterService.java @@ -6,12 +6,10 @@ import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; -import com.google.common.collect.Lists; import com.luohuo.basic.exception.BizException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.Cursor; -import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @@ -41,27 +39,43 @@ public class NacosRouterService { // 查询用户设备 public Set getUserDevices(Long uid) { - String key = "luohuo:router:user-devices:" + uid; - return stringRedisTemplate.opsForSet().members(key); + String globalKey = "luohuo:router:device-node-mapping"; + // 扫描全局Hash中属于该用户的设备字段 (uid:*) + ScanOptions options = ScanOptions.scanOptions().match(uid + ":*").count(100).build(); + + Set deviceFields = new HashSet<>(); + try (Cursor> cursor = + stringRedisTemplate.opsForHash().scan(globalKey, options)) { + while (cursor.hasNext()) { + Map.Entry entry = cursor.next(); + deviceFields.add((String) entry.getKey()); + } + } + + // 提取设备ID + return deviceFields.stream().map(field -> field.split(":")[1]).collect(Collectors.toSet()); } /** * 返回用户设备所在节点 * @param uid 用户id * @param clientId 用户指纹 - * @return + * @return 节点ID,如果找不到或节点不活跃则返回null */ public String getDeviceNode(Long uid, String clientId) { - String key = "luohuo:router:user-device-nodes:" + uid + ":" + clientId; - Set nodes = stringRedisTemplate.opsForSet().members(key); - if (nodes == null) return null; + // 1. 直接从全局Hash中获取设备对应的节点 + String globalKey = "luohuo:router:device-node-mapping"; + String deviceField = uid + ":" + clientId; + String nodeId = (String) stringRedisTemplate.opsForHash().get(globalKey, deviceField); - // 过滤活跃节点 + // 2. 如果节点不存在,直接返回null + if (nodeId == null) { + return null; + } + + // 3. 检查节点是否活跃 Set activeNodes = getAllActiveNodes(); - return nodes.stream() - .filter(activeNodes::contains) - .findFirst() - .orElse(null); + return activeNodes.contains(nodeId) ? nodeId : null; } /** @@ -78,66 +92,23 @@ public class NacosRouterService { )); } + /** + * 移除用户设备路由信息 + * @param uid 用户ID + * @param clientId 设备指纹 + * @param nodeId 节点ID + */ public void removeDeviceRoute(Long uid, String clientId, String nodeId) { - // 1. 删除设备级路由键 - String deviceRouteKey = "luohuo:router:user-device-nodes:" + uid + ":" + clientId; - stringRedisTemplate.opsForSet().remove(deviceRouteKey, nodeId); + // 1. 从全局Hash中删除设备-节点映射 + String globalKey = "luohuo:router:device-node-mapping"; + String deviceField = uid + ":" + clientId; + stringRedisTemplate.opsForHash().delete(globalKey, deviceField); - // 2. 更新节点设备映射 - String nodeKey = "luohuo:router:node-devices:" + nodeId; - String userDeviceValue = uid + ":" + clientId; - stringRedisTemplate.opsForSet().remove(nodeKey, userDeviceValue); - } + // 2. 从节点设备集合中删除设备标识 + String nodeDevicesKey = "luohuo:router:node-devices:" + nodeId; + stringRedisTemplate.opsForSet().remove(nodeDevicesKey, deviceField); - /** - * 提取用户的指纹 - * @return - */ - private String extractClientId(String deviceKey, Long uid) { - String prefix = "luohuo:router:user-device-nodes:" + uid + ":"; - return deviceKey.substring(prefix.length()); - } - - /** - * 管道的方式计算用户与节点的关系 - * @param deviceKeys 用户所有的指纹信息 - */ - private Map> batchGetNodes(Set deviceKeys) { - List results = stringRedisTemplate.executePipelined((RedisCallback) connection -> { - deviceKeys.forEach(key -> connection.sMembers(key.getBytes())); - return null; - }); - - Map> nodeMap = new HashMap<>(); - Iterator keyIter = deviceKeys.iterator(); - for (Object res : results) { - if (res instanceof Set rawSet) { - Set nodes = rawSet.stream() - .map(Object::toString) - .collect(Collectors.toSet()); - nodeMap.put(keyIter.next(), nodes); - } - } - return nodeMap; - } - - /** - * 计算用户所有的指纹信息 - * @param uid - * @return - */ - private Set scanDeviceKeys(Long uid) { - Set deviceKeys = new HashSet<>(); - String pattern = "luohuo:router:user-device-nodes:" + uid + ":*"; - try (Cursor cursor = stringRedisTemplate.scan(ScanOptions.scanOptions() - .match(pattern).count(1000).build())) { - while (cursor.hasNext()) { - deviceKeys.add(cursor.next()); - } - } catch (Exception e) { - log.error("扫描设备键失败: uid={}", uid, e); - } - return deviceKeys; + log.debug("移除设备路由: uid={}, clientId={}, nodeId={}", uid, clientId, nodeId); } /** @@ -145,45 +116,45 @@ public class NacosRouterService { * @param uids 用户id */ public Map> findNodeDeviceUser(List uids) { - Map>> userNodes = findUserNodes(uids); - - // 2. 构建三级映射: 节点 → 设备指纹 → 用户ID - Map> nodeDeviceUser = new ConcurrentHashMap<>(); - - userNodes.forEach((uid, deviceMap) -> - deviceMap.forEach((clientId, nodes) -> - nodes.forEach(node -> - nodeDeviceUser.computeIfAbsent(node, k -> new ConcurrentHashMap<>()) - .put(clientId, uid) - ) - ) - ); - return nodeDeviceUser; - } - /** - * 批量查询用户所在ws服务节点 - * @param uids - * @return - */ - public Map>> findUserNodes(List uids) { + // 0. 前置校验 if (CollUtil.isEmpty(uids)) return Collections.emptyMap(); - Map>> resultMap = new HashMap<>(); - int batchSize = 5000; - Lists.partition(uids, batchSize).forEach(batch -> batch.forEach(uid -> { - // 1. SCAN 安全查询设备Key - Set deviceKeys = scanDeviceKeys(uid); - if (CollUtil.isEmpty(deviceKeys)) return; + // 1. 提取目标UID集合 + Set targetUids = new HashSet<>(uids); - // 2. Pipeline 批量获取节点 - Map> deviceNodeMap = batchGetNodes(deviceKeys); + // 2. 获取全局设备-节点映射(改用HSCAN分批加载) + String globalKey = "luohuo:router:device-node-mapping"; + Map> result = new ConcurrentHashMap<>(); - // 3. 按设备聚合结果 - Map> clientNodeMap = new HashMap<>(); - deviceKeys.forEach(key -> clientNodeMap.put(extractClientId(key, uid), deviceNodeMap.get(key))); - resultMap.put(uid, clientNodeMap); - })); - return resultMap; + // 3. 过滤活跃节点 + Set activeNodes = getAllActiveNodes(); + + // 5. 使用HSCAN游标分批遍历 + ScanOptions options = ScanOptions.scanOptions().count(500).build(); + try (Cursor> cursor = stringRedisTemplate.opsForHash().scan(globalKey, options)) { + while (cursor.hasNext()) { + Map.Entry entry = cursor.next(); + + // 5.1 直接使用字符串类型 + String field = (String) entry.getKey(); + String nodeId = (String) entry.getValue(); + if (!activeNodes.contains(nodeId)) continue; + + // 5.2 按uid过滤目标用户 + String[] parts = field.split(":"); + if (parts.length != 2) continue; + + Long uid = Long.parseLong(parts[0]); + String clientId = parts[1]; + + // 5.3 判断是否是推送数据 + if (!targetUids.contains(uid)) continue; + + // 5.5 构建映射:节点 → 设备 → UID + result.computeIfAbsent(nodeId, k -> new ConcurrentHashMap<>()).put(clientId, uid); + } + } + return result; } /** @@ -191,7 +162,7 @@ public class NacosRouterService { */ public Set getAllActiveNodes() { try { - List instances = namingService.getAllInstances("ws-cluster"); + List instances = namingService.getAllInstances("ws-cluster", "WS_GROUP"); return instances.stream() .filter(Instance::isHealthy) .map(instance -> instance.getMetadata().get("nodeId")) @@ -204,7 +175,7 @@ public class NacosRouterService { // 获取节点详情 public Instance getNodeDetail(String nodeId) { try { - return namingService.getAllInstances("ws-cluster").stream() + return namingService.getAllInstances("ws-cluster", "WS_GROUP").stream() .filter(i -> nodeId.equals(i.getMetadata().get("nodeId"))) .findFirst() .orElse(null); diff --git a/luohuo-cloud/luohuo-public/luohuo-sa-token-ext/src/main/java/com/luohuo/flex/satoken/interceptor/HeaderThreadLocalInterceptor.java b/luohuo-cloud/luohuo-public/luohuo-sa-token-ext/src/main/java/com/luohuo/flex/satoken/interceptor/HeaderThreadLocalInterceptor.java index e0bea422..51ea8676 100644 --- a/luohuo-cloud/luohuo-public/luohuo-sa-token-ext/src/main/java/com/luohuo/flex/satoken/interceptor/HeaderThreadLocalInterceptor.java +++ b/luohuo-cloud/luohuo-public/luohuo-sa-token-ext/src/main/java/com/luohuo/flex/satoken/interceptor/HeaderThreadLocalInterceptor.java @@ -40,7 +40,6 @@ public class HeaderThreadLocalInterceptor implements AsyncHandlerInterceptor { ContextUtil.setPath(WebUtils.getHeader(request, ContextConstants.PATH_HEADER)); ContextUtil.setApplicationId(WebUtils.getHeader(request, ContextConstants.APPLICATION_ID_HEADER)); - ContextUtil.setClientId(WebUtils.getHeader(request, ContextConstants.CLIENT_ID_HEADER)); ContextUtil.setLogTraceId(WebUtils.getHeader(request, ContextConstants.TRACE_ID_HEADER)); ContextUtil.setLoginDevice(WebUtils.getHeader(request, ContextConstants.JWT_KEY_DEVICE)); ContextUtil.setSystemType(WebUtils.getHeader(request, ContextConstants.JWT_KEY_SYSTEM_TYPE)); diff --git a/luohuo-cloud/luohuo-support/luohuo-boot-server/src/main/java/com/luohuo/flex/base/interceptor/TokenContextFilter.java b/luohuo-cloud/luohuo-support/luohuo-boot-server/src/main/java/com/luohuo/flex/base/interceptor/TokenContextFilter.java index edaec507..3fc49c5c 100644 --- a/luohuo-cloud/luohuo-support/luohuo-boot-server/src/main/java/com/luohuo/flex/base/interceptor/TokenContextFilter.java +++ b/luohuo-cloud/luohuo-support/luohuo-boot-server/src/main/java/com/luohuo/flex/base/interceptor/TokenContextFilter.java @@ -14,11 +14,9 @@ import com.luohuo.basic.context.ContextConstants; import com.luohuo.basic.context.ContextUtil; import com.luohuo.basic.utils.StrPool; import com.luohuo.flex.common.properties.IgnoreProperties; -import com.luohuo.flex.common.utils.Base64Util; import static com.luohuo.basic.context.ContextConstants.APPLICATION_ID_HEADER; import static com.luohuo.basic.context.ContextConstants.APPLICATION_ID_KEY; -import static com.luohuo.basic.context.ContextConstants.CLIENT_KEY; /** * 用户信息解析器 一定要在AuthenticationFilter之前执行 @@ -45,10 +43,7 @@ public class TokenContextFilter implements AsyncHandlerInterceptor { String traceId = IdUtil.fastSimpleUUID(); MDC.put(ContextConstants.TRACE_ID_HEADER, traceId); try { - // 1,解码 Authorization - parseClient(request); - - // 2, 获取 应用id + // 1, 获取 应用id parseApplication(request); @@ -60,15 +55,6 @@ public class TokenContextFilter implements AsyncHandlerInterceptor { return true; } - - private void parseClient(HttpServletRequest request) { - String base64Authorization = getHeader(CLIENT_KEY, request); - if (StrUtil.isNotEmpty(base64Authorization)) { - String[] client = Base64Util.getClient(base64Authorization); - ContextUtil.setClientId(client[0]); - } - } - private void parseApplication(HttpServletRequest request) { String applicationIdStr = getHeader(APPLICATION_ID_KEY, request); if (StrUtil.isNotEmpty(applicationIdStr)) { @@ -77,7 +63,6 @@ public class TokenContextFilter implements AsyncHandlerInterceptor { } } - private String getHeader(String name, HttpServletRequest request) { String value = request.getHeader(name); if (StrUtil.isEmpty(value)) { diff --git a/luohuo-cloud/luohuo-system/luohuo-system-biz/pom.xml b/luohuo-cloud/luohuo-system/luohuo-system-biz/pom.xml index ed919b7f..a8dcefef 100644 --- a/luohuo-cloud/luohuo-system/luohuo-system-biz/pom.xml +++ b/luohuo-cloud/luohuo-system/luohuo-system-biz/pom.xml @@ -19,6 +19,63 @@ + + + com.huaweicloud + esdk-obs-java + + + log4j-core + org.apache.logging.log4j + + + okhttp + com.squareup.okhttp3 + + + + + + com.aliyun.oss + aliyun-sdk-oss + + + jersey-core + com.sun.jersey + + + jakarta.activation-api + jakarta.activation + + + + + + com.qiniu + qiniu-java-sdk + + + okhttp + com.squareup.okhttp3 + + + + + + com.luohuo.basic + fastdfs-client + + + + io.minio + minio + + + okhttp + com.squareup.okhttp3 + + + com.luohuo.flex luohuo-system-entity diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/StorageDriver.java b/luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/StorageDriver.java similarity index 61% rename from luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/StorageDriver.java rename to luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/StorageDriver.java index db11bcc7..de9fe304 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/StorageDriver.java +++ b/luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/StorageDriver.java @@ -1,10 +1,10 @@ -package com.luohuo.flex.oauth.service.storage; +package com.luohuo.flex.storage; import com.alibaba.fastjson.JSONObject; +import com.luohuo.flex.storage.engine.QiNiuStorage; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import com.luohuo.flex.oauth.service.storage.engine.QiNiuStorage; import com.luohuo.flex.service.SysConfigService; import java.util.HashMap; @@ -28,12 +28,12 @@ public class StorageDriver { @PostConstruct public void init() { -// this.engine = sysConfigService.get("storageDefault"); -// config.put("storagePrefix", sysConfigService.get("qnStorageName")); -// config.put("qnUploadUrl", sysConfigService.get("qnUploadUrl")); -// config.put("qnAccessKey", sysConfigService.get("qnAccessKey")); -// config.put("qnSecretKey", sysConfigService.get("qnSecretKey")); -// config.put("qnStorageName", sysConfigService.get("qnStorageName")); + this.engine = sysConfigService.get("storageDefault"); + config.put("storagePrefix", sysConfigService.get("qnStorageName")); + config.put("qnUploadUrl", sysConfigService.get("qnUploadUrl")); + config.put("qnAccessKey", sysConfigService.get("qnAccessKey")); + config.put("qnSecretKey", sysConfigService.get("qnSecretKey")); + config.put("qnStorageName", sysConfigService.get("qnStorageName")); } public Map getConfig() { diff --git a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/engine/QiNiuStorage.java b/luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/engine/QiNiuStorage.java similarity index 94% rename from luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/engine/QiNiuStorage.java rename to luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/engine/QiNiuStorage.java index 98e06489..710975c4 100644 --- a/luohuo-cloud/luohuo-oauth/luohuo-oauth-biz/src/main/java/com/luohuo/flex/oauth/service/storage/engine/QiNiuStorage.java +++ b/luohuo-cloud/luohuo-system/luohuo-system-biz/src/main/java/com/luohuo/flex/storage/engine/QiNiuStorage.java @@ -1,4 +1,4 @@ -package com.luohuo.flex.oauth.service.storage.engine; +package com.luohuo.flex.storage.engine; import com.alibaba.fastjson.JSONObject; import com.qiniu.util.Auth; diff --git a/luohuo-cloud/luohuo-system/luohuo-system-controller/src/main/java/com/luohuo/flex/IndexController.java b/luohuo-cloud/luohuo-system/luohuo-system-controller/src/main/java/com/luohuo/flex/IndexController.java index cc2331b8..53bf06b5 100644 --- a/luohuo-cloud/luohuo-system/luohuo-system-controller/src/main/java/com/luohuo/flex/IndexController.java +++ b/luohuo-cloud/luohuo-system/luohuo-system-controller/src/main/java/com/luohuo/flex/IndexController.java @@ -1,8 +1,10 @@ package com.luohuo.flex; +import com.alibaba.fastjson.JSONObject; import com.luohuo.basic.base.R; import com.luohuo.flex.entity.Init; import com.luohuo.flex.service.SysConfigService; +import com.luohuo.flex.storage.StorageDriver; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -21,14 +23,21 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/anyTenant") @AllArgsConstructor -@Tag(name = "邮箱服务") +@Tag(name = "系统服务") public class IndexController { private final SysConfigService sysConfigService; + private final StorageDriver storageDriver; @GetMapping("/config/init") @Operation(summary = "获取系统全局配置") public R init() { return R.success(sysConfigService.getSystemInit()); } + + @Operation(summary = "获取七牛云上传token") + @GetMapping("/ossToken") + public R token() { + return R.success(storageDriver.getToken()); + } } diff --git a/luohuo-cloud/luohuo-system/luohuo-system-server/src/main/resources/bootstrap.yml b/luohuo-cloud/luohuo-system/luohuo-system-server/src/main/resources/bootstrap.yml index 229f81a2..1eaccec6 100644 --- a/luohuo-cloud/luohuo-system/luohuo-system-server/src/main/resources/bootstrap.yml +++ b/luohuo-cloud/luohuo-system/luohuo-system-server/src/main/resources/bootstrap.yml @@ -8,6 +8,7 @@ luohuo: username: ${NACOS_USERNAME:@nacos.username@} password: ${NACOS_PASSWORD:@nacos.password@} web-port: ${NACOS_WEB_PORT:@nacos.web-port@} + local-ip: ${NACOS_LOCAL_IP:@nacos.local-ip@} seata: ip: ${SEATA_IP:@seata.ip@} port: ${SEATA_PORT:@seata.port@} @@ -54,6 +55,7 @@ spring: password: ${luohuo.nacos.password} server-addr: ${luohuo.nacos.ip}:${luohuo.nacos.port} namespace: ${luohuo.nacos.namespace} + ip: ${luohuo.nacos.local-ip} metadata: # 元数据,用于权限服务实时获取各个服务的所有接口 management.context-path: ${server.servlet.context-path:}${spring.mvc.servlet.path:}${management.endpoints.web.base-path:} grayversion: luohuo diff --git a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/cache/RoomMetadataCacheKeyBuilder.java b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/cache/RoomMetadataCacheKeyBuilder.java index 97728b58..03142ca4 100644 --- a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/cache/RoomMetadataCacheKeyBuilder.java +++ b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/cache/RoomMetadataCacheKeyBuilder.java @@ -6,18 +6,12 @@ import com.luohuo.basic.model.cache.CacheKeyBuilder; import com.luohuo.flex.common.cache.CacheKeyModular; import com.luohuo.flex.common.cache.CacheKeyTable; -import java.io.Serializable; - /** * 房间元数据服务参数 KEY * * @author 乾乾 */ public class RoomMetadataCacheKeyBuilder implements CacheKeyBuilder { - public static CacheHashKey builder(Serializable roomId) { - return new RoomMetadataCacheKeyBuilder().hashKey(roomId); - } - public static CacheHashKey builder(Long roomId, String itemKey) { return new RoomMetadataCacheKeyBuilder().hashFieldKey(itemKey, roomId); } diff --git a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/service/PushService.java b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/service/PushService.java index 6096df31..33e84403 100644 --- a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/service/PushService.java +++ b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/service/PushService.java @@ -12,6 +12,7 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.messaging.support.MessageBuilder; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -47,7 +48,7 @@ public class PushService { private RocketMQTemplate rocketMQTemplate; @Resource private NacosRouterService routerService; - @Resource + @Resource@Lazy private SessionManager sessionManager; @Value("${luohuo.node-id}") diff --git a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/NettyShutdownConfig.java b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/NettyShutdownConfig.java index 42e012f8..14b6b36c 100644 --- a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/NettyShutdownConfig.java +++ b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/NettyShutdownConfig.java @@ -6,7 +6,6 @@ import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextClosedEvent; -import org.springframework.web.reactive.socket.CloseStatus; /** * 优雅停机 --> 清理三套会话系统 @@ -20,6 +19,6 @@ public class NettyShutdownConfig { @Bean public ApplicationListener shutdownListener() { - return event -> sessionManager.clean(CloseStatus.GOING_AWAY); + return event -> sessionManager.clean(); } } \ No newline at end of file diff --git a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/SessionManager.java b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/SessionManager.java index eb9e2fb8..2e17322a 100644 --- a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/SessionManager.java +++ b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/SessionManager.java @@ -3,16 +3,18 @@ package com.luohuo.flex.ws.websocket; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.json.JSONUtil; -import com.google.common.collect.Lists; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.luohuo.basic.cache.repository.CachePlusOps; import com.luohuo.basic.model.cache.CacheKey; +import com.luohuo.basic.utils.TimeUtils; import com.luohuo.flex.common.cache.FriendCacheKeyBuilder; import com.luohuo.flex.common.cache.PresenceCacheKeyBuilder; import com.luohuo.flex.model.entity.WSRespTypeEnum; import com.luohuo.flex.model.entity.WsBaseResp; import com.luohuo.flex.model.entity.ws.WSOnlineNotify; +import com.luohuo.flex.model.redis.annotation.RedissonLock; import com.luohuo.flex.ws.config.ThreadPoolProperties; +import com.luohuo.flex.ws.service.PushService; import com.luohuo.flex.ws.websocket.nacos.NacosSessionRegistry; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; @@ -26,8 +28,8 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; +import java.time.Duration; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -54,6 +56,8 @@ public class SessionManager { @Resource private ThreadPoolProperties threadPoolProperties; + @Resource + private PushService pushService; // 线程池实例数组(按节点分片) private ThreadPoolExecutor[] sessionExecutors; @@ -141,6 +145,251 @@ public class SessionManager { return sessions.size(); } + /** + * 查询其它设备是否在线 + * @param uid 当前用户id + * @param excludeDeviceKey 要排除的指纹 + * @return 没设备在线返回true 有设备在线返回false + */ + private boolean isFirstOrLastDevice(Long uid, String excludeDeviceKey) { + String onlineDevicesKey = PresenceCacheKeyBuilder.globalOnlineDevicesKey().getKey(); + String prefix = uid + ":"; + + // 分批获取设备 + int batchSize = 1000; + long total = cachePlusOps.zCard(onlineDevicesKey); + + for (int i = 0; i < total; i += batchSize) { + Set batchDevices = cachePlusOps.zRangeByScoreWithScores( + onlineDevicesKey, + Double.MIN_VALUE, + Double.MAX_VALUE, + i, + i + batchSize + ).stream() + .map(ZSetOperations.TypedTuple::getValue) + .collect(Collectors.toSet()); + + for (Object deviceObj : batchDevices) { + String device = deviceObj.toString(); + if (device.startsWith(prefix) && !device.equals(excludeDeviceKey)) { + return false; // 发现其他设备 + } + } + } + return true; + } + + /** + * 更新群主在线状态 + * @param roomIds 房间id + * @param uid 用户id + * @param online 在线状态 + */ + private void updateGroupPresence(List roomIds, Long uid, boolean online) { + if (CollUtil.isEmpty(roomIds)) return; + + // 2. 批量更新群组在线状态 + roomIds.forEach(roomId -> { + CacheKey onlineGroupKey = PresenceCacheKeyBuilder.onlineGroupMembersKey(roomId); + if (online) { + cachePlusOps.sAdd(onlineGroupKey, uid); + } else { + cachePlusOps.sRem(onlineGroupKey, uid); + } + }); + + // 3. 更新用户群组在线映射 + CacheKey onlineUserGroupsKey = PresenceCacheKeyBuilder.onlineUserGroupsKey(uid); + if (online) { + roomIds.forEach(roomId -> cachePlusOps.sAdd(onlineUserGroupsKey, roomId)); + } else { + roomIds.forEach(roomId -> cachePlusOps.sRem(onlineUserGroupsKey, roomId)); + } + } + + /** + * 获取用户所有的群聊 + * @param uid + * @return + */ + private List getRoomIds(Long uid) { + CacheKey ugKey = PresenceCacheKeyBuilder.userGroupsKey(uid); + return cachePlusOps.sMembers(ugKey).stream().map(obj -> Long.parseLong(obj.toString())).collect(Collectors.toList()); + } + + /** + * 1. 同步在线状态, 即使节点宕机也会被NodeDownMessageListener监听到,从而触发下线 + * 2. 用户上线之后需要主动推送给用户所有在线好友 + 用户所在群的所有在线成员。如若采用实时轮询的方式会有更多的无效请求! + * + * @param uid 用户id + * @param online 在线状态 + */ + @RedissonLock(prefixKey = "syncOnline:", key = "#uid") + public void syncOnline(Long uid, String clientId, boolean online) { + // 1. 生成用户设备key、全局在线状态key + String deviceKey = uid + ":" + clientId; + String onlineDevicesKey = PresenceCacheKeyBuilder.globalOnlineDevicesKey().getKey(); + String onlineUsersKey = PresenceCacheKeyBuilder.globalOnlineUsersKey().getKey(); + + // 2. 获取用户所有群组 + List roomIds = getRoomIds(uid); + + // 2. 检查设备状态(原子操作) + boolean noOtherDevices = isFirstOrLastDevice(uid, deviceKey); + + if (online) { + // 3. 上线逻辑 + long millis = System.currentTimeMillis(); + cachePlusOps.zAdd(onlineDevicesKey, deviceKey, millis); + // 仅仅是首个设备登录时才添加用户在线状态 + if (noOtherDevices) { + cachePlusOps.zAdd(onlineUsersKey, uid, millis); + updateGroupPresence(roomIds, uid, true); + pushDeviceStatusChange(roomIds, uid, clientId, true, onlineUsersKey); + } + } else { + // 4. 下线逻辑 + cachePlusOps.zRemove(onlineDevicesKey, deviceKey); + + // 所有设备都下线之后移除用户的在线状态 + if (noOtherDevices) { + cachePlusOps.zRemove(onlineUsersKey, uid); + updateGroupPresence(roomIds, uid, false); + pushDeviceStatusChange(roomIds, uid, clientId, false, onlineUsersKey); + } + } + } + + /** + * 通知所有与自己有关的所有人 + * @param uid 登录用户 + * @param clientId 登录设备 + * @param online 登录状态 + * @param onlineKey 全局在线用户的key + */ + private void pushDeviceStatusChange(List roomIds, Long uid, String clientId, boolean online, String onlineKey) { + String type = online ? WSRespTypeEnum.ONLINE.getType() : WSRespTypeEnum.OFFLINE.getType(); + + // 1. 获取反向好友列表(需要知道该用户在线状态的uid) [推送数据各个不一致] + CacheKey reverseFriendsKey = FriendCacheKeyBuilder.reverseFriendsKey(uid); + Set friends = cachePlusOps.sMembers(reverseFriendsKey).stream().map(obj -> Long.parseLong(obj.toString())).collect(Collectors.toSet()); + + for (Long friendUid : friends) { + // 1.0 获取该好友的全部好友列表 + CacheKey friendsKey = FriendCacheKeyBuilder.userFriendsKey(friendUid); + List hisFriends = cachePlusOps.sMembers(friendsKey).stream().map(obj -> Long.parseLong(obj.toString())).collect(Collectors.toList()); + + // 1.1 管道批量查询分数 + List scores = cachePlusOps.getZSetScores(onlineKey, hisFriends); + + // 1.2 计算当前好友的在线数量 + long onlineCount = scores.stream().filter(Objects::nonNull).count(); + + // 1.3 构建推送消息 + WsBaseResp resp = new WsBaseResp(); + resp.setType(type); + resp.setData(new WSOnlineNotify(uid, clientId, TimeUtils.getTime(), onlineCount, 2)); + + // 1.5 定向推送 + pushService.sendPushMsg(resp, friendUid, uid); + } + + List keys = roomIds.stream().map(id -> PresenceCacheKeyBuilder.onlineGroupMembersKey(id).getKey()).collect(Collectors.toList()); + List counts = cachePlusOps.sMultiCard(keys); + Map result = new HashMap<>(); + for (int i = 0; i < roomIds.size(); i++) { + Long count = counts.get(i); + if (count > 0) { + result.put(roomIds.get(i), count); + } + } + + // 2.1 推送给用户的所有群 + for (Long roomId : result.keySet()) { + CacheKey cacheKey = PresenceCacheKeyBuilder.onlineGroupMembersKey(roomId); + + // 2.2 拿到在线群成员 + List memberIdList = cachePlusOps.sMembers(cacheKey).stream().map(obj -> Long.parseLong(obj.toString())).collect(Collectors.toList()); + + WsBaseResp resp = new WsBaseResp(); + resp.setType(type); + resp.setData(new WSOnlineNotify(roomId, uid, clientId, TimeUtils.getTime(), result.get(roomId), 1)); + + // 2.3 定向分批发送 + int pageSize = 200; + for (int i = 0; i < memberIdList.size(); i += pageSize) { + List page = memberIdList.subList(i, Math.min(i+pageSize, memberIdList.size())); + pushService.sendPushMsg(resp, page, uid); + } + } + } + + /** + * 精确推送到当前服务上的连接 + * @param uid 要推送的用户id + * @param clientId 当前用户的指纹 + * @param resp 消息内容 + */ + public Mono sendToDevice(Long uid, String clientId, WsBaseResp resp) { + return Mono.defer(() -> { + Map> deviceMap = USER_DEVICE_SESSION_MAP.get(uid); + if (deviceMap == null) return Mono.empty(); + + Set sessions = deviceMap.get(clientId); + if (CollUtil.isEmpty(sessions)) return Mono.empty(); + + return Flux.fromIterable(sessions) + .filter(WebSocketSession::isOpen) + .flatMap(session -> + session.send(Mono.just(session.textMessage(JSONUtil.toJsonStr(resp))) + .onErrorResume(e -> { + log.error("发送失败: uid={}, clientId={}, sessionId={}", uid, clientId, session.getId(), e); + return Mono.empty(); + })// 将 Mono 转为 Mono + )) + .then(); + }); + } + + /** + * 清空所有会话 + */ + public void clean() { + // 1. 收集所有设备信息 + Map> offlineDevices = new HashMap<>(); + USER_DEVICE_SESSION_MAP.forEach((uid, deviceMap) -> offlineDevices.put(uid, new HashSet<>(deviceMap.keySet()))); + + // 2. 批量关闭会话 + 等待完成(超时控制) + List> closeTasks = USER_DEVICE_SESSION_MAP.values().stream() + .flatMap(deviceMap -> deviceMap.values().stream()) + .flatMap(Collection::stream) + .filter(WebSocketSession::isOpen) + .map(session -> + session.close(CloseStatus.GOING_AWAY) + .timeout(Duration.ofSeconds(3)) // 超时控制 + .onErrorResume(e -> { + log.warn("强制关闭会话失败: {}", session.getId(), e); + return Mono.empty(); + }) + ) + .collect(Collectors.toList()); + + Mono.when(closeTasks).block(Duration.ofSeconds(10)); // 阻塞等待最多10秒 + + // 3. 同步清理所有设备状态 + offlineDevices.forEach((uid, clientIds) -> clientIds.forEach(clientId -> syncOnline(uid, clientId, false))); + + // 5. 清空本地映射 + SESSION_USER_MAP.clear(); + SESSION_CLIENT_MAP.clear(); + USER_DEVICE_SESSION_MAP.clear(); + + // 6. 清理路由与节点 + nacosSessionRegistry.cleanupNodeRoutes(); + nacosSessionRegistry.deregisterNode(); + } + /** * 原子化清理设备指纹级会话 * @@ -205,245 +454,6 @@ public class SessionManager { } } - /** - * 这里有问题 - * @param uid - * @return - */ - private boolean isUserFullyOnline(Long uid) { - String onlineDevicesKey = PresenceCacheKeyBuilder.globalOnlineDevicesKey().getKey(); -// Set deviceKeys = cachePlusOps.zRangeByScore(onlineDevicesKey, uid + ":*"); - Set> deviceKeys = cachePlusOps.zReverseRangeWithScores(onlineDevicesKey + uid + ":*", 10); - return !deviceKeys.isEmpty(); - } - - private void updateGroupPresence(Long uid, boolean online) { - // 1. 获取用户所有群组 - CacheKey userGroupsKey = PresenceCacheKeyBuilder.userGroupsKey(uid); - Set groupIds = cachePlusOps.sMembers(userGroupsKey); - - if (CollUtil.isEmpty(groupIds)) return; - - // 2. 批量更新群组在线状态 - groupIds.forEach(groupId -> { - CacheKey onlineGroupKey = PresenceCacheKeyBuilder.onlineGroupMembersKey(groupId); - if (online) { - cachePlusOps.sAdd(onlineGroupKey, uid); - } else { - cachePlusOps.sRem(onlineGroupKey, uid); - } - }); - - // 3. 更新用户群组在线映射 - CacheKey onlineUserGroupsKey = PresenceCacheKeyBuilder.onlineUserGroupsKey(uid); - if (online) { - groupIds.forEach(groupId -> cachePlusOps.sAdd(onlineUserGroupsKey, groupId)); - } else { - groupIds.forEach(groupId -> cachePlusOps.sRem(onlineUserGroupsKey, groupId)); - } - } - - - /** - * 1. 同步在线状态, 即使节点宕机也会被NodeDownMessageListener监听到,从而触发下线 - * 2. 用户上线之后需要主动推送给用户所有在线好友 + 用户所在群的所有在线成员。如若采用实时轮询的方式会有更多的无效请求! - * - * @param uid 用户id - * @param online 在线状态 - */ - public void syncOnline(Long uid, String clientId, boolean online) { - // 1. 更新全局设备在线状态 - String deviceKey = uid + ":" + clientId; - String onlineDevicesKey = PresenceCacheKeyBuilder.globalOnlineDevicesKey().getKey(); - - if (online) { - cachePlusOps.zAdd(onlineDevicesKey, deviceKey, System.currentTimeMillis()); - } else { - cachePlusOps.zRemove(onlineDevicesKey, deviceKey); - } - - // 2. 计算用户全局在线状态 - boolean isUserFullyOnline = isUserFullyOnline(uid); - String onlineUsersKey = PresenceCacheKeyBuilder.globalOnlineUsersKey().getKey(); - - // 首次上线、所有设备下线才执行 - if (online) { - if (!isUserFullyOnline) { - cachePlusOps.zAdd(onlineUsersKey, uid.toString(), System.currentTimeMillis()); - updateGroupPresence(uid, true); - pushDeviceStatusChange(uid, clientId, true); - } - } else { - if (isUserFullyOnline) { - cachePlusOps.zRemove(onlineUsersKey, uid.toString()); - updateGroupPresence(uid, false); - pushDeviceStatusChange(uid, clientId, false); - } - } - } - - private Set getRelatedUsers(Long uid) { - Set result = new HashSet<>(); - - // 1. 获取双向好友关系 - CacheKey reverseFriendsKey = FriendCacheKeyBuilder.reverseFriendsKey(uid); - Set friends = cachePlusOps.sMembers(reverseFriendsKey).stream() - .map(obj -> Long.parseLong(obj.toString())) - .collect(Collectors.toSet()); - result.addAll(friends); - - // 2. 获取所在群组的成员 - CacheKey userGroupsKey = PresenceCacheKeyBuilder.userGroupsKey(uid); - List groupIds = cachePlusOps.sMembers(userGroupsKey).stream() - .map(obj -> Long.parseLong(obj.toString())) - .collect(Collectors.toList()); - - groupIds.forEach(groupId -> { - CacheKey groupMembersKey = PresenceCacheKeyBuilder.groupMembersKey(groupId); - cachePlusOps.sMembers(groupMembersKey).stream() - .map(obj -> Long.parseLong(obj.toString())) - .filter(memberId -> !memberId.equals(uid)) // 排除自己 - .forEach(result::add); - }); - - return result; - } - - /** - * 通知所有与自己有关的所有人 - * @param uid 登录用户 - * @param clientId 登录设备 - * @param online 登录状态 - */ - private void pushDeviceStatusChange(Long uid, String clientId, boolean online) { - Set notifyTargets = getRelatedUsers(uid); - String type = online ? WSRespTypeEnum.ONLINE.getType() : WSRespTypeEnum.OFFLINE.getType(); - - // 1. 构建设备状态通知 - WsBaseResp resp = new WsBaseResp(); - resp.setType(type); - resp.setData(new WSOnlineNotify(uid, clientId, System.currentTimeMillis(), 0L, 2)); - - // 2. 批量推送 - int batchSize = 200; - List> batches = Lists.partition(new ArrayList<>(notifyTargets), batchSize); - - batches.forEach(batch -> { - int index = Math.abs(batch.hashCode()) % sessionExecutors.length; - ThreadPoolExecutor executor = sessionExecutors[index]; - - // 异步推送避免阻塞 - CompletableFuture.runAsync(() -> batch.forEach(targetUid -> sendToUser(targetUid, resp)), executor); - }); - } - - /** - * 精确推送到当前服务上的连接 - * @param uid 要推送的用户id - * @param clientId 当前用户的指纹 - * @param resp 消息内容 - */ - public Mono sendToDevice(Long uid, String clientId, WsBaseResp resp) { - return Mono.defer(() -> { - Map> deviceMap = USER_DEVICE_SESSION_MAP.get(uid); - if (deviceMap == null) return Mono.empty(); - - Set sessions = deviceMap.get(clientId); - if (CollUtil.isEmpty(sessions)) return Mono.empty(); - - return Flux.fromIterable(sessions) - .filter(WebSocketSession::isOpen) - .flatMap(session -> - session.send(Mono.just(session.textMessage(JSONUtil.toJsonStr(resp))) - .onErrorResume(e -> { - log.error("发送失败: uid={}, clientId={}, sessionId={}", uid, clientId, session.getId(), e); - return Mono.empty(); - })// 将 Mono 转为 Mono - )) - .then(); - }); - } - - /** - * 清空所有会话 - */ - public void clean(CloseStatus status) { - // 1. 异步关闭所有活跃会话 - USER_DEVICE_SESSION_MAP.values().parallelStream() - .flatMap(deviceMap -> deviceMap.values().stream()) - .flatMap(Collection::stream) - .filter(WebSocketSession::isOpen) - .forEach(session -> - session.close(status) - .doOnError(e -> log.error("关闭会话失败: session={}", session.getId(), e)) - .subscribe() - ); - - // 2. 清空所有映射表 - SESSION_USER_MAP.clear(); - SESSION_CLIENT_MAP.clear(); - USER_DEVICE_SESSION_MAP.clear(); - - // 3. 清理Redis中的节点路由数据 - nacosSessionRegistry.cleanupNodeRoutes(); - - // 5. 从Nacos注销节点 - nacosSessionRegistry.deregisterNode(); - } - - /** - * 推送给本机所有连接 [用不到] - * @param resp 消息实体 - */ -// public Mono broadcast(WsBaseResp resp) { -// String jsonPayload = JSONUtil.toJsonStr(resp); -// return Flux.fromIterable(new ArrayList<>(USER_DEVICE_SESSION_MAP.values())) -// .flatMap(deviceMap -> Flux.fromIterable(deviceMap.values())) -// .flatMap(Flux::fromIterable).parallel() // 启用并行流 -// .runOn(Schedulers.parallel()) // 使用并行调度器 -// .filter(WebSocketSession::isOpen) -// .flatMap(session -> -// session.send(Mono.just(session.textMessage(jsonPayload))) -// .onErrorResume(e -> { -// log.error("广播失败 session={}", session.getId(), e); -// return Mono.empty(); -// }) -// ) -// .sequential() -// .then(); -// } - - /** - * 推送消息 - * - * @param uid 用户id - * @param resp 推送内容 - * @return - */ - public Mono sendToUser(Long uid, WsBaseResp resp) { - return Mono.fromCallable(() -> USER_DEVICE_SESSION_MAP.get(uid)) - .flatMapMany(deviceMap -> Flux.fromIterable(deviceMap.values()) // 支持多设备会话 - .flatMap(sessions -> Flux.fromIterable(sessions) // 遍历设备的所有会话 - .filter(session -> { - // 验证会话有效性 - String sessionId = session.getId(); - String clientId = SESSION_CLIENT_MAP.get(sessionId); - return session.isOpen() && clientId != null && - deviceMap.containsKey(clientId) && - deviceMap.get(clientId).contains(session); - }) - .flatMap(session -> - session.send(Mono.just(session.textMessage(JSONUtil.toJsonStr(resp)))) - .onErrorResume(e -> { - log.error("发送失败: uid={}, sessionId={}", uid, session.getId(), e); - return Mono.empty(); - }) - ) - )) - .then(); -// .doOnSuccess(v -> log.info("消息已发送至用户 {}", uid)); - } - @PostConstruct public void init() { int poolSize = Math.min(32, Math.max(1, Runtime.getRuntime().availableProcessors() * 2)); diff --git a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/nacos/NacosSessionRegistry.java b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/nacos/NacosSessionRegistry.java index ae2c3d1a..11dbe46f 100644 --- a/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/nacos/NacosSessionRegistry.java +++ b/luohuo-cloud/luohuo-ws/luohuo-ws-biz/src/main/java/com/luohuo/flex/ws/websocket/nacos/NacosSessionRegistry.java @@ -5,6 +5,7 @@ import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.luohuo.flex.ws.websocket.SessionManager; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; @@ -115,13 +116,13 @@ public class NacosSessionRegistry { */ public void addUserRoute(Long uid, String clientId) { // 1. 设备指纹→节点映射 - String deviceRouteKey = "luohuo:router:user-device-nodes:" + uid + ":" + clientId; - stringRedisTemplate.opsForSet().add(deviceRouteKey, nodeId); + String globalKey = "luohuo:router:device-node-mapping"; + String deviceField = uid + ":" + clientId; + stringRedisTemplate.opsForHash().put(globalKey, deviceField, nodeId); // 2. 节点→设备指纹映射 String nodeDevicesKey = "luohuo:router:node-devices:" + nodeId; - String userDeviceValue = uid + ":" + clientId; - stringRedisTemplate.opsForSet().add(nodeDevicesKey, userDeviceValue); + stringRedisTemplate.opsForSet().add(nodeDevicesKey, deviceField); // 3. 更新节点元数据 Map metadata = nodeInstance.getMetadata(); @@ -135,14 +136,15 @@ public class NacosSessionRegistry { * @param uid 用户id */ public void removeDeviceRoute(Long uid, String clientId) { + String globalKey = "luohuo:router:device-node-mapping"; + String deviceField = uid + ":" + clientId; + // 清理设备→节点映射 - String deviceKey = "luohuo:router:user-device-nodes:" + uid + ":" + clientId; - stringRedisTemplate.opsForSet().remove(deviceKey, nodeId); + stringRedisTemplate.opsForHash().delete(globalKey, deviceField); // 清理节点→设备映射 - String nodeDevicesKey = "luohuo:router:node-devices:" + nodeId; - String userDeviceValue = uid + ":" + clientId; - stringRedisTemplate.opsForSet().remove(nodeDevicesKey, userDeviceValue); + String nodeKey = "luohuo:router:node-devices:" + nodeId; + stringRedisTemplate.opsForSet().remove(nodeKey, deviceField); } /** @@ -151,24 +153,17 @@ public class NacosSessionRegistry { public void cleanupNodeRoutes() { // 1. 清理节点→设备映射 String nodeDevicesKey = "luohuo:router:node-devices:" + nodeId; - Set userDevices = stringRedisTemplate.opsForSet().members(nodeDevicesKey); + Set deviceFields = stringRedisTemplate.opsForSet().members(nodeDevicesKey); - if (userDevices != null) { - // 2. 遍历所有设备路由并删除 - userDevices.forEach(device -> { - String[] parts = device.split(":"); - if (parts.length == 2) { - Long uid = Long.parseLong(parts[0]); - String clientId = parts[1]; - String deviceRouteKey = "luohuo:router:user-device-nodes:" + uid + ":" + clientId; - stringRedisTemplate.opsForSet().remove(deviceRouteKey, nodeId); - } - }); + if (!CollectionUtils.isEmpty(deviceFields)) { + // 批量删除全局Hash中的映射 + String globalKey = "luohuo:router:device-node-mapping"; + stringRedisTemplate.opsForHash().delete(globalKey, deviceFields.toArray()); + + // 清理节点本地映射 + stringRedisTemplate.delete(nodeDevicesKey); } - - // 3. 删除节点自身的映射键 - stringRedisTemplate.delete(nodeDevicesKey); - log.info("节点路由清理完成: nodeId={}, 清理设备数={}", nodeId, userDevices != null ? userDevices.size() : 0); + log.info("节点路由清理完成: nodeId={}, 清理设备数={}", nodeId, deviceFields != null ? deviceFields.size() : 0); } public void deregisterNode() { diff --git a/luohuo-cloud/src/main/filters/config-dev.properties b/luohuo-cloud/src/main/filters/config-dev.properties index f14cdc1a..75b87e5f 100644 --- a/luohuo-cloud/src/main/filters/config-dev.properties +++ b/luohuo-cloud/src/main/filters/config-dev.properties @@ -1,15 +1,15 @@ -# nacos ip?? +# nacos ip地址 nacos.ip=127.0.0.1 -# nacos?????????????????? +# nacos服务端端口 nacos.port=8848 -# ???? +# 命名空间 nacos.namespace=bfa0d426-e281-4da0-b830-c3962ed883d1 -# nacos ???? +# nacos 账号 nacos.username=nacos -# nacos ???? -nacos.password=luohuo. -# web???? +nacos.password=nacos nacos.web-port=8080 +# 本地启动ip +nacos.local-ip=192.168.1.37 # \u672A\u4F7F\u7528seata\uFF0C\u53EF\u4EE5 seata.namespace=5b51e46a-4aeb-4d40-8398-8a9d33e2f0ad diff --git a/luohuo-cloud/src/main/filters/config-prod.properties b/luohuo-cloud/src/main/filters/config-prod.properties index 71c8fa2e..e5cf720d 100644 --- a/luohuo-cloud/src/main/filters/config-prod.properties +++ b/luohuo-cloud/src/main/filters/config-prod.properties @@ -9,6 +9,8 @@ nacos.web-port=8080 seata.namespace=5b51e46a-4aeb-4d40-8398-8a9d33e2f0ad seata.ip=localhost seata.port=8091 +# 本地启动ip +nacos.local-ip=172.16.0.4 logging.file.path=./logs sentinel.dashboard=127.0.0.1:8088 diff --git a/luohuo-cloud/开发必看.md b/luohuo-cloud/开发必看.md index a6f4c34d..c75b8478 100644 --- a/luohuo-cloud/开发必看.md +++ b/luohuo-cloud/开发必看.md @@ -1,4 +1,4 @@ -## 本地如何跑hula +## 本地如何跑hula 注意!! 开发环境默认大家已经安装nacos(版本我用的是3.0.2,web端端口是8080,老版本是8848)、rocketMQ、mysql、redis这些组件了 如果没有的话先看一下 [reids、mysql、rocketmq、nacos一键部署.md](install/docker/reids%E3%80%81mysql%E3%80%81rocketmq%E3%80%81nacos%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2.md) (组件部署文档) @@ -7,7 +7,7 @@ 1. 将 luohuo-cloud/pom.xml 导入IDEA 2. 导入luohuo-util项目 - ![img.png](preview/img.png)[img.png]([preview](preview)/)![img_1.png](preview/img_1.png) +![img.png](preview/img.png)[img.png]([preview](preview)/)![img_1.png](preview/img_1.png) 3. 安装luohuo-util到本地![img_2.png](preview/img_2.png) 4. 导入nacos环境,以我本地为例:127.0.0.1:8080![img5.png](preview/img5.png)![img_5.png](preview/img_5.png) 5. 修改redis.yml、mysql.yml、rocketmq.yml、luohuo-im-server.yml的配置![img6.png](preview/img6.png) diff --git a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/redis/BaseRedis.java b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/redis/BaseRedis.java index 67de5d3e..07fa677a 100644 --- a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/redis/BaseRedis.java +++ b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/redis/BaseRedis.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Range; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.*; @@ -1972,6 +1973,10 @@ public abstract class BaseRedis { return zSetOps.rangeByScoreWithScores(key, min, max); } + public Set> zRangeByScoreWithScores(@NonNull String key, double min, double max, long offset, long count) { + return zSetOps.rangeByScoreWithScores(key, min, max, offset, count); + } + /** * 返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。 * 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列。 @@ -2004,6 +2009,10 @@ public abstract class BaseRedis { return zSetOps.reverseRangeByScoreWithScores(key, min, max, offset, pageSize); } + public Long lexCount(String key, Range range) { + return zSetOps.lexCount(key, range); + } + /** * 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。 * 排名以 0 为底,也就是说, score 值最小的成员排名为 0 。 diff --git a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/CachePlusOps.java b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/CachePlusOps.java index 6d899a26..233448da 100644 --- a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/CachePlusOps.java +++ b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/CachePlusOps.java @@ -1,5 +1,6 @@ package com.luohuo.basic.cache.repository; +import org.springframework.data.domain.Range; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.lang.NonNull; import com.luohuo.basic.cache.redis2.CacheResult; @@ -284,18 +285,30 @@ public interface CachePlusOps extends CacheOps { List sMultiCard(List keys); /** - * 新增批量查询 Set 集合大小的方法 + * 批量查询 Set 集合大小的方法 * @param key 单个Set 类型的key * @param fields 要查询的key的字段 * @return 返回内容是key里面每个field 的状态 */ List getZSetScores(String key, List fields); + /** + * 批量获取key 对应的值, 并指定类型 + */ + List mGet(Collection keys, Class tClass); + /** * 批量获取key 对应的值 */ List> mGet(List frequencyKeys); + /** + * 批量设置缓存 + * + * @param map + */ + void mSet(Map map, long time); + /** * 限流脚本 * @@ -306,18 +319,6 @@ public interface CachePlusOps extends CacheOps { */ Long inc(String k, Integer time, TimeUnit unit); - /** - * 批量获取key 对应的值, 并指定类型 - */ - List mGet(Collection keys, Class tClass); - - /** - * 批量设置缓存 - * - * @param map - */ - void mSet(Map map, long time); - /** * 获取集合大小 * @@ -399,6 +400,18 @@ public interface CachePlusOps extends CacheOps { */ Set> zRangeByScoreWithScores(String key, Double hotStart, Double hotEnd); + /** + * 根据Score值查询集合元素, 从小到大排序 + * + * @param key + * @param hotStart 最小值 + * @param hotEnd 最大值 + * @param offset 游标 + * @param count 数量 + * @return + */ + Set> zRangeByScoreWithScores(String key, Double hotStart, Double hotEnd, long offset, long count); + /** * 获取有序集合(ZSet)中指定分数范围内的元素及其分数(从大到小排序) * @@ -410,6 +423,11 @@ public interface CachePlusOps extends CacheOps { */ Set> zReverseRangeByScoreWithScores(String redisKey, double v, Integer pageSize); + /** + * 获取有序集合(ZSet)中range范围内的数据 + */ + Long lexCount(String key, Range range); + /** * 对整数值进行原子自增操作并设置过期时间 * diff --git a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/CaffeineOpsImpl.java b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/CaffeineOpsImpl.java index 99eb4ce1..c601a97e 100644 --- a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/CaffeineOpsImpl.java +++ b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/CaffeineOpsImpl.java @@ -3,6 +3,7 @@ package com.luohuo.basic.cache.repository.impl; import cn.hutool.core.util.StrUtil; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.data.domain.Range; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.lang.NonNull; import com.luohuo.basic.cache.redis2.CacheResult; @@ -437,11 +438,21 @@ public class CaffeineOpsImpl implements CacheOps, CachePlusOps { return Set.of(); } + @Override + public Set> zRangeByScoreWithScores(String key, Double hotStart, Double hotEnd, long offset, long count) { + return Set.of(); + } + @Override public Set> zReverseRangeByScoreWithScores(String redisKey, double v, Integer pageSize) { return Set.of(); } + @Override + public Long lexCount(String key, Range range) { + return 0L; + } + @Override public int integerInc(String loginCode, int minutes, TimeUnit timeUnit) { return 0; diff --git a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/RedisOpsImpl.java b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/RedisOpsImpl.java index a4075a6f..c6b23362 100644 --- a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/RedisOpsImpl.java +++ b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/repository/impl/RedisOpsImpl.java @@ -3,7 +3,9 @@ package com.luohuo.basic.cache.repository.impl; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.luohuo.basic.jackson.JsonUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Range; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ZSetOperations; @@ -17,6 +19,7 @@ import com.luohuo.basic.model.cache.CacheKey; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -35,6 +38,8 @@ import java.util.stream.Collectors; @Slf4j public class RedisOpsImpl implements CacheOps, CachePlusOps { + private static final ObjectMapper mapper = JsonUtil.newInstance(); + /** * Spring Redis Template */ @@ -315,21 +320,17 @@ public class RedisOpsImpl implements CacheOps, CachePlusOps { } public static List toBeanOrNull(List list, Class tClass) { - // 创建并配置ObjectMapper - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + if (list == null || list.isEmpty()) { + return Collections.emptyList(); + } - List result = new ArrayList<>(); + List result = new ArrayList<>(list.size()); for (Object obj : list) { try { - // 将每个对象转换为指定的类型 - String jsonString = mapper.writeValueAsString(obj); - T convertedObj = mapper.readValue(jsonString, tClass); + T convertedObj = mapper.convertValue(obj, tClass); result.add(convertedObj); } catch (Exception e) { - e.printStackTrace(); - // 如果转换失败,返回null + log.error("Failed to convert object to type {}: {}", tClass.getSimpleName(), e.getMessage()); return null; } } @@ -398,6 +399,26 @@ public class RedisOpsImpl implements CacheOps, CachePlusOps { return redisOps.zRangeByScoreWithScores(key, min, max); } + /** + * 根据Score值查询集合元素, 从小到大排序 + * + * @param key + * @param min 最小值 + * @param max 最大值 + * @param offset 游标 + * @param count 数量 + * @return + */ + public Set> zRangeByScoreWithScores(String key, Double min, Double max, long offset, long count) { + if (Objects.isNull(min)) { + min = Double.MIN_VALUE; + } + if (Objects.isNull(max)) { + max = Double.MAX_VALUE; + } + return redisOps.zRangeByScoreWithScores(key, min, max, offset, count); + } + /** * 获取集合的元素, 从大到小排序, 并返回score值 * @@ -413,6 +434,10 @@ public class RedisOpsImpl implements CacheOps, CachePlusOps { return redisOps.zReverseRangeByScoreWithScores(redisKey, Double.MIN_VALUE, max, 1, pageSize); } + public Long lexCount(String key, Range range) { + return redisOps.lexCount(key, range); + } + public int integerInc(String loginCode, int minutes, TimeUnit timeUnit) { return redisOps.integerInc(loginCode, minutes, timeUnit); } diff --git a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/utils/FastJsonJsonRedisSerializer.java b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/utils/FastJsonJsonRedisSerializer.java index 06f74ac5..f53e2152 100644 --- a/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/utils/FastJsonJsonRedisSerializer.java +++ b/luohuo-util/luohuo-cache-starter/src/main/java/com/luohuo/basic/cache/utils/FastJsonJsonRedisSerializer.java @@ -4,11 +4,11 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializerFeature; -import com.luohuo.basic.utils.StrPool; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * Redis使用FastJson序列化 @@ -16,9 +16,20 @@ import java.nio.charset.Charset; * @author 乾乾 */ public class FastJsonJsonRedisSerializer implements RedisSerializer { - public static final Charset DEFAULT_CHARSET = Charset.forName(StrPool.UTF8); + private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; + private final Class clazz; + private static final ParserConfig SAFE_CONFIG = new ParserConfig(); - private Class clazz; + static { + // 1. 禁用高危特性 + SAFE_CONFIG.setAutoTypeSupport(false); + // 2. 白名单控制(按需添加) + SAFE_CONFIG.addAccept("com.luohuo.flex.im.domain."); + // 3. 启用ASM加速(非Android环境) + SAFE_CONFIG.setAsmEnable(true); + // 4. 开启安全模式(FastJSON 1.2.68+) + SAFE_CONFIG.setSafeMode(true); + } public FastJsonJsonRedisSerializer(Class clazz) { super(); @@ -30,7 +41,6 @@ public class FastJsonJsonRedisSerializer implements RedisSerializer { if (t == null) { return new byte[0]; } -// return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); } @@ -39,8 +49,19 @@ public class FastJsonJsonRedisSerializer implements RedisSerializer { if (bytes == null || bytes.length == 0) { return null; } +// return JSON.parseObject( +// bytes, // 字节数组 +// 0, // 起始偏移量 +// bytes.length, // 长度 +// DEFAULT_CHARSET, // 字符集 +// clazz, // 目标类型 +// ParserConfig.getGlobalInstance(), // 解析配置 +// null, // ParseProcess +// JSON.DEFAULT_PARSER_FEATURE, // 默认解析特性 +// Feature.SupportArrayToBean, +// Feature.DisableCircularReferenceDetect +// ); String str = new String(bytes, DEFAULT_CHARSET); -// return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType); return JSON.parseObject(str, clazz, ParserConfig.getGlobalInstance(), Feature.SupportAutoType); } } diff --git a/luohuo-util/luohuo-cloud-starter/src/main/java/com/luohuo/basic/cloud/interceptor/FeignAddHeaderRequestInterceptor.java b/luohuo-util/luohuo-cloud-starter/src/main/java/com/luohuo/basic/cloud/interceptor/FeignAddHeaderRequestInterceptor.java index b0cae5bb..83c683f8 100644 --- a/luohuo-util/luohuo-cloud-starter/src/main/java/com/luohuo/basic/cloud/interceptor/FeignAddHeaderRequestInterceptor.java +++ b/luohuo-util/luohuo-cloud-starter/src/main/java/com/luohuo/basic/cloud/interceptor/FeignAddHeaderRequestInterceptor.java @@ -27,14 +27,15 @@ import java.util.Map; public class FeignAddHeaderRequestInterceptor implements RequestInterceptor { public static final List HEADER_NAME_LIST = Arrays.asList( ContextConstants.APPLICATION_ID_KEY, ContextConstants.TOKEN_KEY, - ContextConstants.CLIENT_KEY, + ContextConstants.AUTHORIZATION_KEY, ContextConstants.JWT_KEY_USER_ID, ContextConstants.JWT_KEY_SYSTEM_TYPE, ContextConstants.JWT_KEY_DEVICE, ContextConstants.HEADER_TENANT_ID, ContextConstants.HEADER_VISIT_TENANT_ID, - ContextConstants.JWT_KEY_U_ID, ContextConstants.JWT_KEY_UUID, - ContextConstants.PATH_HEADER, ContextConstants.CLIENT_ID_HEADER, + ContextConstants.JWT_KEY_U_ID, + ContextConstants.JWT_KEY_UUID, + ContextConstants.PATH_HEADER, ContextConstants.CURRENT_COMPANY_ID_HEADER, ContextConstants.CURRENT_TOP_COMPANY_ID_HEADER, ContextConstants.CURRENT_DEPT_ID_HEADER, diff --git a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextConstants.java b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextConstants.java index a1e81b9c..de4e6969 100644 --- a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextConstants.java +++ b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextConstants.java @@ -7,11 +7,6 @@ package com.luohuo.basic.context; * @date 2018/12/21 */ public final class ContextConstants { - /** - * luohuo_defaults库 - */ - public static final Long DEF_TENANT_ID = 0L; - public static final String DEF_TENANT_ID_STR = "0"; /** * 内置租户 */ @@ -27,7 +22,7 @@ public final class ContextConstants { /** * 请求头中携带的 客户端信息 key */ - public static final String CLIENT_KEY = "Authorization"; + public static final String AUTHORIZATION_KEY = "Authorization"; /** * JWT中封装的 用户id */ @@ -99,9 +94,9 @@ public final class ContextConstants { */ public static final String TOKEN_HEADER = TOKEN_KEY; /** - * 请求头和线程变量中的 客户端id + * 请求头和线程变量中的 客户端指纹信息 */ - public static final String CLIENT_ID_HEADER = "ClientId"; + public static final String CLIENT_HEADER = "client_header"; /** * 是否boot项目 */ diff --git a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextUtil.java b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextUtil.java index 40994080..d5648673 100644 --- a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextUtil.java +++ b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/context/ContextUtil.java @@ -288,14 +288,6 @@ public final class ContextUtil { set(ContextConstants.CURRENT_DEPT_ID_HEADER, val); } - public static String getClientId() { - return get(ContextConstants.CLIENT_ID_HEADER, String.class); - } - - public static void setClientId(String val) { - set(ContextConstants.CLIENT_ID_HEADER, val); - } - private static boolean isEmptyLong(String key) { String val = getLocalMap().get(key); return StrUtil.isEmpty(val) || StrPool.NULL.equals(val) || StrPool.ZERO.equals(val); diff --git a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/jackson/JsonUtil.java b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/jackson/JsonUtil.java index 49cfd6b2..7c9f2d29 100644 --- a/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/jackson/JsonUtil.java +++ b/luohuo-util/luohuo-core/src/main/java/com/luohuo/basic/jackson/JsonUtil.java @@ -35,7 +35,7 @@ import static com.luohuo.basic.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT; */ @Slf4j public final class JsonUtil { - private static final ObjectMapper jsonMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static final ObjectMapper jsonMapper = newInstance(); private JsonUtil() { } @@ -62,7 +62,7 @@ public final class JsonUtil { return null; } try { - return getInstance().readValue(content, valueType); + return getInstance().convertValue(content, valueType); } catch (Exception e) { log.error(e.getMessage(), e); } @@ -73,84 +73,49 @@ public final class JsonUtil { if (StrUtil.isEmpty(content)) { return null; } - try { - return getInstance().readValue(content, typeReference); - } catch (IOException e) { - throw new BizException(ResponseEnum.JSON_PARSE_ERROR.getCode(), e); - } - } + return getInstance().convertValue(content, typeReference); + } public static T parse(byte[] bytes, Class valueType) { - try { - return getInstance().readValue(bytes, valueType); - } catch (IOException e) { - throw new BizException(ResponseEnum.JSON_PARSE_ERROR.getCode(), e); - } + return getInstance().convertValue(bytes, valueType); } public static T parse(byte[] bytes, TypeReference typeReference) { - try { - return getInstance().readValue(bytes, typeReference); - } catch (IOException e) { - throw new BizException(ResponseEnum.JSON_PARSE_ERROR.getCode(), e); - } + return getInstance().convertValue(bytes, typeReference); } public static T parse(InputStream in, Class valueType) { - try { - return getInstance().readValue(in, valueType); - } catch (IOException e) { - throw new BizException(ResponseEnum.JSON_PARSE_ERROR.getCode(), e); - } + return getInstance().convertValue(in, valueType); } public static T parse(InputStream in, TypeReference typeReference) { - try { - return getInstance().readValue(in, typeReference); - } catch (IOException e) { - throw new BizException(ResponseEnum.JSON_PARSE_ERROR.getCode(), e); - } + return getInstance().convertValue(in, typeReference); } public static List parseArray(String content, Class valueTypeRef) { if (StrUtil.isEmpty(content)) { return Collections.emptyList(); } - try { - if (!StrUtil.startWith(content, StrPool.LEFT_SQ_BRACKET)) { - content = StrPool.LEFT_SQ_BRACKET + content + StrPool.RIGHT_SQ_BRACKET; - } - List> list = getInstance().readValue(content, new TypeReference>>() { - }); + if (!StrUtil.startWith(content, StrPool.LEFT_SQ_BRACKET)) { + content = StrPool.LEFT_SQ_BRACKET + content + StrPool.RIGHT_SQ_BRACKET; + } + List> list = getInstance().convertValue(content, new TypeReference<>() { + }); - return list.stream().map((map) -> toPojo(map, valueTypeRef)).toList(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - return Collections.emptyList(); + return list.stream().map((map) -> toPojo(map, valueTypeRef)).toList(); } public static Map toMap(String content) { - try { - return getInstance().readValue(content, Map.class); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - return Collections.emptyMap(); + return getInstance().convertValue(content, Map.class); } public static Map toMap(String content, Class valueTypeRef) { - try { - Map> map = getInstance().readValue(content, new TypeReference>>() { - }); - Map result = new HashMap<>(CollHelper.initialCapacity(map.size())); - map.forEach((key, value) -> result.put(key, toPojo(value, valueTypeRef))); + Map> map = getInstance().convertValue(content, new TypeReference<>() { + }); + Map result = new HashMap<>(CollHelper.initialCapacity(map.size())); + map.forEach((key, value) -> result.put(key, toPojo(value, valueTypeRef))); - return result; - } catch (IOException e) { - log.error(e.getMessage(), e); - } - return Collections.emptyMap(); + return result; } public static T toPojo(Map fromValue, Class toValueType) { diff --git a/luohuo-util/luohuo-mq-starter/pom.xml b/luohuo-util/luohuo-mq-starter/pom.xml index 51641921..d5d6ede3 100644 --- a/luohuo-util/luohuo-mq-starter/pom.xml +++ b/luohuo-util/luohuo-mq-starter/pom.xml @@ -34,6 +34,7 @@ redisson-spring-boot-starter org.redisson + ${redisson.version} diff --git a/luohuo-util/luohuo-parent/pom.xml b/luohuo-util/luohuo-parent/pom.xml index 2bbc7d76..52eca4f5 100644 --- a/luohuo-util/luohuo-parent/pom.xml +++ b/luohuo-util/luohuo-parent/pom.xml @@ -44,7 +44,7 @@ 1.5.4 1.0.2 - 3.26.0 + 3.50.0 1.9.4 8.1.3.140 diff --git a/luohuo-util/luohuo-validator-starter/src/main/java/com/luohuo/basic/validator/utils/AssertUtil.java b/luohuo-util/luohuo-validator-starter/src/main/java/com/luohuo/basic/validator/utils/AssertUtil.java index 258553ef..89f7d3d3 100644 --- a/luohuo-util/luohuo-validator-starter/src/main/java/com/luohuo/basic/validator/utils/AssertUtil.java +++ b/luohuo-util/luohuo-validator-starter/src/main/java/com/luohuo/basic/validator/utils/AssertUtil.java @@ -86,7 +86,7 @@ public class AssertUtil { public static void isTrue(boolean expression, GroupErrorEnum errorEnum) { if (!expression) { - throwException(errorEnum, (Object) null); + throwException(errorEnum, ""); } } diff --git a/luohuo-util/luohuo-webmvc/src/main/java/com/luohuo/basic/boot/handler/AbstractGlobalExceptionHandler.java b/luohuo-util/luohuo-webmvc/src/main/java/com/luohuo/basic/boot/handler/AbstractGlobalExceptionHandler.java index 973ac6eb..729f9282 100644 --- a/luohuo-util/luohuo-webmvc/src/main/java/com/luohuo/basic/boot/handler/AbstractGlobalExceptionHandler.java +++ b/luohuo-util/luohuo-webmvc/src/main/java/com/luohuo/basic/boot/handler/AbstractGlobalExceptionHandler.java @@ -103,18 +103,11 @@ public abstract class AbstractGlobalExceptionHandler { return R.result(code, null, message).setPath(getPath()); } - @ResponseStatus(HttpStatus.OK) - @ExceptionHandler(ArgumentException.class) - public R bizException(ArgumentException ex) { - log.warn("ArgumentException:", ex); - return R.result(ex.getCode(), null, ResponseEnum.INTERNAL_SERVER_ERROR.getMsg()).setPath(getPath()); - } - @ExceptionHandler(ForbiddenException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public R forbiddenException(ForbiddenException ex) { log.warn("BizException:", ex); - return R.result(ex.getCode(), null, ResponseEnum.INTERNAL_SERVER_ERROR.getMsg()).setPath(getPath()); + return R.result(ex.getCode(), null, ex.getMessage()).setPath(getPath()); } @ExceptionHandler(UnauthorizedException.class) @@ -124,6 +117,13 @@ public abstract class AbstractGlobalExceptionHandler { return R.result(ex.getCode(), null, ex.getMessage()).setPath(getPath()); } + @ExceptionHandler(ArgumentException.class) + @ResponseStatus(HttpStatus.OK) + public R unauthorizedException(ArgumentException ex) { + log.warn("ArgumentException:", ex); + return R.result(ex.getCode(), null, ex.getMessage()).setPath(getPath()); + } + @ExceptionHandler(HttpMessageNotReadableException.class) @ResponseStatus(HttpStatus.OK) public R httpMessageNotReadableException(HttpMessageNotReadableException ex) { @@ -175,6 +175,13 @@ public abstract class AbstractGlobalExceptionHandler { return R.result(ResponseEnum.ILLEGAL_ARGUMENT_EX.getCode(), null, ResponseEnum.ILLEGAL_ARGUMENT_EX.getMsg()).setPath(getPath()); } + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.OK) + public R illegalArgumentException(IllegalArgumentException ex) { + log.warn("IllegalArgumentException:", ex); + return R.result(ResponseEnum.ILLEGAL_ARGUMENT_EX.getCode(), null, ResponseEnum.ILLEGAL_ARGUMENT_EX.getMsg()).setPath(getPath()); + } + @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.OK) public R missingServletRequestParameterException(MissingServletRequestParameterException ex) { @@ -189,13 +196,6 @@ public abstract class AbstractGlobalExceptionHandler { return R.result(ResponseEnum.NULL_POINT_EX.getCode(), null, ResponseEnum.NULL_POINT_EX.getMsg()).setPath(getPath()); } - @ExceptionHandler(IllegalArgumentException.class) - @ResponseStatus(HttpStatus.OK) - public R illegalArgumentException(IllegalArgumentException ex) { - log.warn("IllegalArgumentException:", ex); - return R.result(ResponseEnum.ILLEGAL_ARGUMENT_EX.getCode(), null, ResponseEnum.ILLEGAL_ARGUMENT_EX.getMsg()).setPath(getPath()); - } - @ExceptionHandler(HttpMediaTypeNotSupportedException.class) @ResponseStatus(HttpStatus.OK) public R httpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException ex) {