diff --git a/admin-client/.env.development b/admin-client/.env.development
index 57b1c6f..cb6d9f6 100644
--- a/admin-client/.env.development
+++ b/admin-client/.env.development
@@ -1,2 +1,2 @@
-VUE_APP_BASE=/ #打包路径
+# VUE_APP_BASE=/ #打包路径
VITE_API_URL=http://localhost:901/
\ No newline at end of file
diff --git a/admin-client/src/views/apps/T_Productss/Rewards.vue b/admin-client/src/views/apps/T_Productss/Rewards.vue
index 6913010..66e2ba5 100644
--- a/admin-client/src/views/apps/T_Productss/Rewards.vue
+++ b/admin-client/src/views/apps/T_Productss/Rewards.vue
@@ -48,14 +48,7 @@ interface DataItem {
}
const data = reactive([]);
-// for (let i = 0; i < 100; i++) {
-// data.push({
-// key: i,
-// name: `Edrward ${i}`,
-// age: 32,
-// address: `London Park no. ${i}`,
-// });
-// }
+
//定义组件事件
const props = defineProps<{ onSuccess: () => void }>();
@@ -83,25 +76,6 @@ defineExpose({
_data = ldata;
_key = key;
loadData();
- // data.splice(0, data.length);
- // state.visible = true;
- // T_Products_RewardService.getList(key).then((res) => {
- // console.log(res);
- // if (res.data != null) {
- // res.data.forEach((element) => {
- // data.push(element);
- // });
- // }
- // });
- // T_Products_RewardService.findList(state.page, state.size, state.search.vm, state.search.sort);
- // refForm.value?.resetFields();
- // //初始化表单数据
- // state.loading = true;
- // T_Products_RewardService.findForm(key).then((res) => {
- // state.loading = false;
- // if (res.code != 200) return;
- // state.vm = res.data;
- // });
},
});
const addReward = () => {
diff --git a/admin-client/src/views/development_tool/low_code/components/Columns.vue b/admin-client/src/views/development_tool/low_code/components/Columns.vue
index b084acc..4b85a11 100644
--- a/admin-client/src/views/development_tool/low_code/components/Columns.vue
+++ b/admin-client/src/views/development_tool/low_code/components/Columns.vue
@@ -52,6 +52,8 @@ async function findList() {
state.size = result.data.size;
state.total = result.data.total;
state.columns = result.data.columns;
+
+
state.data = result.data.dataSource;
}
diff --git a/admin-client/vite.config.ts.timestamp-1730887679994-399ea45020b1a.mjs b/admin-client/vite.config.ts.timestamp-1730887679994-399ea45020b1a.mjs
new file mode 100644
index 0000000..c7520e5
--- /dev/null
+++ b/admin-client/vite.config.ts.timestamp-1730887679994-399ea45020b1a.mjs
@@ -0,0 +1,111 @@
+// vite.config.ts
+import { defineConfig } from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/vite/dist/node/index.js";
+import vue from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/@vitejs/plugin-vue/dist/index.mjs";
+import { resolve } from "path";
+import vueJsx from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";
+import Components from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/unplugin-vue-components/dist/vite.js";
+import { AntDesignVueResolver } from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/unplugin-vue-components/dist/resolvers.js";
+import AutoImport from "file:///I:/Git/HuanMengAdmin/admin-client/node_modules/unplugin-auto-import/dist/vite.js";
+var vite_config_default = defineConfig({
+ plugins: [
+ vue(),
+ vueJsx({
+ // https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue-jsx
+ // options are passed on to @vue/babel-plugin-jsx
+ }),
+ AutoImport({
+ imports: [
+ "vue",
+ // 自动导入 vue 中的 API
+ "vue-router"
+ // 如果你使用 vue-router
+ ],
+ dts: "src/auto-imports.d.ts"
+ // 可以生成 TypeScript 声明文件
+ }),
+ Components({
+ dirs: ["src/core/components"],
+ extensions: ["vue"],
+ deep: true,
+ dts: "src/components.d.ts",
+ resolvers: [
+ AntDesignVueResolver({
+ importStyle: false
+ // css in js
+ })
+ ]
+ })
+ ],
+ /**
+ * 打包给目录的前缀
+ * 生产环境默认:client 文件夹包起来
+ * 开发环境默认:/
+ */
+ base: process.env.VUE_APP_BASE,
+ // process.env.NODE_ENV == "production" ? "/client/" : "/",
+ server: {
+ port: 501,
+ host: true,
+ proxy: {
+ "/api/v1": {
+ target: "http://localhost:5500/",
+ ws: false,
+ changeOrigin: true
+ }
+ }
+ // 设置 https 代理
+ // proxy: {
+ // '/api': {
+ // target: 'your https address',
+ // changeOrigin: true,
+ // rewrite: (path: string) => path.replace(/^\/api/, '')
+ // }
+ // }
+ },
+ resolve: {
+ extensions: [".js", ".json", ".scss", ".css", ".less", ".tsx", ".ts", ".vue"],
+ alias: {
+ "@/": resolve("src") + "/"
+ }
+ },
+ // pages: {
+ // index: {
+ // // page 的入口
+ // entry: 'src/main.ts',
+ // // 模板来源
+ // template: 'public/index.html',
+ // // 在 dist/index.html 的输出
+ // filename: 'index.html',
+ // // 当使用 title 选项时,
+ // // template 中的 title 标签需要是
<%= htmlWebpackPlugin.options.title %>
+ // title: 'hzy-admin-ui-ts',
+ // },
+ // },
+ // CSS 预处理器
+ css: {
+ preprocessorOptions: {
+ less: {
+ javascriptEnabled: true
+ }
+ }
+ // postcss: {
+ // plugins: [
+ // require('autoprefixer')
+ // ]
+ // }
+ },
+ build: {
+ assetsDir: "static/img",
+ rollupOptions: {
+ output: {
+ chunkFileNames: "static/js/[name]-[hash].js",
+ entryFileNames: "static/js/[name]-[hash].js",
+ assetFileNames: "static/[ext]/[name]-[hash].[ext]"
+ }
+ }
+ }
+});
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJJOlxcXFxHaXRcXFxcSHVhbk1lbmdBZG1pblxcXFxhZG1pbi1jbGllbnRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkk6XFxcXEdpdFxcXFxIdWFuTWVuZ0FkbWluXFxcXGFkbWluLWNsaWVudFxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vSTovR2l0L0h1YW5NZW5nQWRtaW4vYWRtaW4tY2xpZW50L3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgdnVlSnN4IGZyb20gXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI7XHJcbmltcG9ydCBDb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnO1xyXG5pbXBvcnQgeyBBbnREZXNpZ25WdWVSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XHJcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnXHJcbi8vIGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XHJcbiAgcGx1Z2luczogW1xyXG4gICAgdnVlKCksXHJcbiAgICB2dWVKc3goe1xyXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUtcGx1Z2luLXZ1ZS90cmVlL21haW4vcGFja2FnZXMvcGx1Z2luLXZ1ZS1qc3hcclxuICAgICAgLy8gb3B0aW9ucyBhcmUgcGFzc2VkIG9uIHRvIEB2dWUvYmFiZWwtcGx1Z2luLWpzeFxyXG4gICAgfSksXHJcbiAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgaW1wb3J0czogW1xyXG4gICAgICAgICd2dWUnLCAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjUgdnVlIFx1NEUyRFx1NzY4NCBBUElcclxuICAgICAgICAndnVlLXJvdXRlcicsIC8vIFx1NTk4Mlx1Njc5Q1x1NEY2MFx1NEY3Rlx1NzUyOCB2dWUtcm91dGVyXHJcbiAgICAgIF0sXHJcbiAgICAgIGR0czogJ3NyYy9hdXRvLWltcG9ydHMuZC50cycsIC8vIFx1NTNFRlx1NEVFNVx1NzUxRlx1NjIxMCBUeXBlU2NyaXB0IFx1NThGMFx1NjYwRVx1NjU4N1x1NEVGNlxyXG4gICAgfSksXHJcbiAgICBDb21wb25lbnRzKHtcclxuICAgICAgZGlyczogWydzcmMvY29yZS9jb21wb25lbnRzJ10sXHJcbiAgICAgIGV4dGVuc2lvbnM6IFsndnVlJ10sXHJcbiAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgIGR0czogJ3NyYy9jb21wb25lbnRzLmQudHMnLFxyXG4gICAgICByZXNvbHZlcnM6IFtcclxuICAgICAgICBBbnREZXNpZ25WdWVSZXNvbHZlcih7XHJcbiAgICAgICAgICBpbXBvcnRTdHlsZTogZmFsc2UsIC8vIGNzcyBpbiBqc1xyXG4gICAgICAgIH0pLFxyXG4gICAgICBdLFxyXG4gICAgfSksXHJcbiAgXSxcclxuICAvKipcclxuICAgKiBcdTYyNTNcdTUzMDVcdTdFRDlcdTc2RUVcdTVGNTVcdTc2ODRcdTUyNERcdTdGMDBcclxuICAgKiBcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdTlFRDhcdThCQTRcdUZGMUFjbGllbnQgXHU2NTg3XHU0RUY2XHU1OTM5XHU1MzA1XHU4RDc3XHU2NzY1XHJcbiAgICogXHU1RjAwXHU1M0QxXHU3M0FGXHU1ODgzXHU5RUQ4XHU4QkE0XHVGRjFBL1xyXG4gICAqL1xyXG4gIGJhc2U6IHByb2Nlc3MuZW52LlZVRV9BUFBfQkFTRSwgLy8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT0gXCJwcm9kdWN0aW9uXCIgPyBcIi9jbGllbnQvXCIgOiBcIi9cIixcclxuICBzZXJ2ZXI6IHtcclxuICAgIHBvcnQ6IDUwMSxcclxuICAgIGhvc3Q6IHRydWUsXHJcbiAgICBwcm94eToge1xyXG4gICAgICBcIi9hcGkvdjFcIjoge1xyXG4gICAgICAgIHRhcmdldDogXCJodHRwOi8vbG9jYWxob3N0OjU1MDAvXCIsXHJcbiAgICAgICAgd3M6IGZhbHNlLFxyXG4gICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcblxyXG4gICAgLy8gXHU4QkJFXHU3RjZFIGh0dHBzIFx1NEVFM1x1NzQwNlxyXG4gICAgLy8gcHJveHk6IHtcclxuICAgIC8vICAgJy9hcGknOiB7XHJcbiAgICAvLyAgICAgdGFyZ2V0OiAneW91ciBodHRwcyBhZGRyZXNzJyxcclxuICAgIC8vICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAvLyAgICAgcmV3cml0ZTogKHBhdGg6IHN0cmluZykgPT4gcGF0aC5yZXBsYWNlKC9eXFwvYXBpLywgJycpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9LFxyXG4gIHJlc29sdmU6IHtcclxuICAgIGV4dGVuc2lvbnM6IFtcIi5qc1wiLCBcIi5qc29uXCIsIFwiLnNjc3NcIiwgXCIuY3NzXCIsIFwiLmxlc3NcIiwgXCIudHN4XCIsIFwiLnRzXCIsIFwiLnZ1ZVwiXSxcclxuICAgIGFsaWFzOiB7XHJcbiAgICAgIFwiQC9cIjogcmVzb2x2ZShcInNyY1wiKSArIFwiL1wiLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIC8vIHBhZ2VzOiB7XHJcbiAgLy8gICAgIGluZGV4OiB7XHJcbiAgLy8gICAgICAgICAvLyBwYWdlIFx1NzY4NFx1NTE2NVx1NTNFM1xyXG4gIC8vICAgICAgICAgZW50cnk6ICdzcmMvbWFpbi50cycsXHJcbiAgLy8gICAgICAgICAvLyBcdTZBMjFcdTY3N0ZcdTY3NjVcdTZFOTBcclxuICAvLyAgICAgICAgIHRlbXBsYXRlOiAncHVibGljL2luZGV4Lmh0bWwnLFxyXG4gIC8vICAgICAgICAgLy8gXHU1NzI4IGRpc3QvaW5kZXguaHRtbCBcdTc2ODRcdThGOTNcdTUxRkFcclxuICAvLyAgICAgICAgIGZpbGVuYW1lOiAnaW5kZXguaHRtbCcsXHJcbiAgLy8gICAgICAgICAvLyBcdTVGNTNcdTRGN0ZcdTc1MjggdGl0bGUgXHU5MDA5XHU5ODc5XHU2NUY2XHVGRjBDXHJcbiAgLy8gICAgICAgICAvLyB0ZW1wbGF0ZSBcdTRFMkRcdTc2ODQgdGl0bGUgXHU2ODA3XHU3QjdFXHU5NzAwXHU4OTgxXHU2NjJGIDx0aXRsZT48JT0gaHRtbFdlYnBhY2tQbHVnaW4ub3B0aW9ucy50aXRsZSAlPjwvdGl0bGU+XHJcbiAgLy8gICAgICAgICB0aXRsZTogJ2h6eS1hZG1pbi11aS10cycsXHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gfSxcclxuICAvLyBDU1MgXHU5ODg0XHU1OTA0XHU3NDA2XHU1NjY4XHJcbiAgY3NzOiB7XHJcbiAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgIGxlc3M6IHtcclxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICAvLyBwb3N0Y3NzOiB7XHJcbiAgICAvLyAgIHBsdWdpbnM6IFtcclxuICAgIC8vICAgICByZXF1aXJlKCdhdXRvcHJlZml4ZXInKVxyXG4gICAgLy8gICBdXHJcbiAgICAvLyB9XHJcbiAgfSxcclxuICBidWlsZDoge1xyXG4gICAgYXNzZXRzRGlyOiBcInN0YXRpYy9pbWdcIixcclxuICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgb3V0cHV0OiB7XHJcbiAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwic3RhdGljL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJzdGF0aWMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcInN0YXRpYy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQTZSLFNBQVMsb0JBQW9CO0FBQzFULE9BQU8sU0FBUztBQUNoQixTQUFTLGVBQWU7QUFDeEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVMsNEJBQTRCO0FBQ3JDLE9BQU8sZ0JBQWdCO0FBRXZCLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVM7QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLE9BQU87QUFBQTtBQUFBO0FBQUEsSUFHUCxDQUFDO0FBQUEsSUFDRCxXQUFXO0FBQUEsTUFDVCxTQUFTO0FBQUEsUUFDUDtBQUFBO0FBQUEsUUFDQTtBQUFBO0FBQUEsTUFDRjtBQUFBLE1BQ0EsS0FBSztBQUFBO0FBQUEsSUFDUCxDQUFDO0FBQUEsSUFDRCxXQUFXO0FBQUEsTUFDVCxNQUFNLENBQUMscUJBQXFCO0FBQUEsTUFDNUIsWUFBWSxDQUFDLEtBQUs7QUFBQSxNQUNsQixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxXQUFXO0FBQUEsUUFDVCxxQkFBcUI7QUFBQSxVQUNuQixhQUFhO0FBQUE7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQU0sUUFBUSxJQUFJO0FBQUE7QUFBQSxFQUNsQixRQUFRO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsTUFDTCxXQUFXO0FBQUEsUUFDVCxRQUFRO0FBQUEsUUFDUixJQUFJO0FBQUEsUUFDSixjQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUY7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLFlBQVksQ0FBQyxPQUFPLFNBQVMsU0FBUyxRQUFRLFNBQVMsUUFBUSxPQUFPLE1BQU07QUFBQSxJQUM1RSxPQUFPO0FBQUEsTUFDTCxNQUFNLFFBQVEsS0FBSyxJQUFJO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZUEsS0FBSztBQUFBLElBQ0gscUJBQXFCO0FBQUEsTUFDbkIsTUFBTTtBQUFBLFFBQ0osbUJBQW1CO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUY7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxNQUNiLFFBQVE7QUFBQSxRQUNOLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLE1BQ2xCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
diff --git a/admin-generate-ef-seed-data/GenerateSeeds/Program.cs b/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
index 9d6e328..a08e549 100644
--- a/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
+++ b/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
@@ -1,7 +1,7 @@
using GenerateSeeds;
using System.Text;
-var connectionString = "Server=192.168.195.2;Database=MiaoYu;User ID=zpc;Password=zpc;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;";
+var connectionString = "Server=192.168.195.15;Database=MiaoYu;User ID=sa;Password=Dbt@com@123;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;";
IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, connectionString)
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelModelBuilderExtensions.cs
new file mode 100644
index 0000000..6fb7aff
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTCharacterLabelModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Character_Label 种子数据=============================================
+modelBuilder.Entity().HasData(new TCharacterLabel(){Id=1,CreateTime=DateTime.Parse("1990/4/24 6:41:45"),LabelName="二次元",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2016/10/23 13:08:44")},new TCharacterLabel(){Id=2,CreateTime=DateTime.Parse("2011/6/3 8:15:23"),LabelName="美女",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2003/9/12 17:04:38")},new TCharacterLabel(){Id=3,CreateTime=DateTime.Parse("2001/1/17 0:40:56"),LabelName="神秘",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("1975/12/15 10:00:52")},new TCharacterLabel(){Id=4,CreateTime=DateTime.Parse("1973/3/24 2:29:44"),LabelName="女巫",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("1983/11/12 6:03:06")},new TCharacterLabel(){Id=5,CreateTime=DateTime.Parse("2003/7/27 4:52:48"),LabelName="预知未来",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2007/12/17 0:33:37")},new TCharacterLabel(){Id=6,CreateTime=DateTime.Parse("1995/1/5 20:52:21"),LabelName="古代",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2017/3/2 9:28:21")},new TCharacterLabel(){Id=7,CreateTime=DateTime.Parse("1990/11/5 19:24:50"),LabelName="大小姐",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("1995/2/9 13:46:55")},new TCharacterLabel(){Id=8,CreateTime=DateTime.Parse("1974/12/25 17:25:05"),LabelName="善良",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("1977/12/21 22:44:03")},new TCharacterLabel(){Id=9,CreateTime=DateTime.Parse("2002/6/19 12:21:28"),LabelName="聪慧",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("1998/12/13 16:08:18")},new TCharacterLabel(){Id=10,CreateTime=DateTime.Parse("2017/4/14 10:41:49"),LabelName="外星人",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2004/6/6 20:16:03")});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelRelationModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelRelationModelBuilderExtensions.cs
new file mode 100644
index 0000000..4a659ea
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTCharacterLabelRelationModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTCharacterLabelRelationModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Character_Label_Relation 种子数据=============================================
+modelBuilder.Entity().HasData(new TCharacterLabelRelation(){Id=1,CharacterId=1,CharacterLabelId=1,CreateTime=DateTime.Parse("2024/1/1 0:00:00"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2024/1/1 0:00:00")},new TCharacterLabelRelation(){Id=2,CharacterId=1,CharacterLabelId=2,CreateTime=DateTime.Parse("2024/1/1 0:00:00"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2024/1/1 0:00:00")});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTCharacterModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTCharacterModelBuilderExtensions.cs
new file mode 100644
index 0000000..9612674
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTCharacterModelBuilderExtensions.cs
@@ -0,0 +1,14 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTCharacterModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Character 种子数据=============================================
+modelBuilder.Entity().HasData(new TCharacter(){Id=1,BgImg=1,Biography="你那商业联姻得来的妻子,原本的天才女孩,聪明伶俐,生的漂亮、端庄,不知贵圈多少人梦寐以求的存在。
+结果就在半年前,她却因为一场车祸变成了需要依靠轮椅才能行动的小残疾,转眼间人人避之不及。她的性格也因为外界种种原因,而变得愈发沉默寡言。从始至终,你和她之间没有感情可言,毕竟谁会喜欢一个瘸子?
+在平日里,你对她的态度可谓相当冷漠,甚至是厌恶从未正眼瞧过。以至于你结婚到现在都没有碰过对方还经常找各种理由夜不归宿。但她似乎明白你的不满,对此没有任何怨言,只是一直默默履行着身为妻子的责任。不怎么出门,偶尔发发呆、看看电视,做自己该做的事情,安静的不像话。今儿个你在酒吧呆到半夜才回来,醉眼朦胧的。可刚打开别墅大门,映入眼帘的竟然是正坐在轮椅上的她,让你倍感意外....",CreateTime=DateTime.Parse("2021/1/1 0:00:00"),Gender=1,IconImg=2,ModelConfigId=1,Name="许荷姻",Prologue="坐在轮椅上,眼神平静的看着你,语气也同样平静)你回来了。饭菜在桌上,我刚刚热了。(说到这,又垂下眸子道)我还做了碗醒酒汤,记得喝",System=null,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2021/1/1 0:00:00"),Visibility=bool.Parse("False")},new TCharacter(){Id=2,BgImg=1,Biography="她是京城林府的大小姐,自幼聪慧过人,容貌出众。琴棋书画样样精通,尤其擅长弹琴,其琴声悠扬动听,能让人陶醉其中。性格温婉大方,心地善良,总是乐于助人。然而,她的家族却卷入了一场政治斗争,使她的生活陷入了困境。她不得不努力保护自己和家人,同时寻找真相,为家族洗清冤屈。",CreateTime=DateTime.Parse("2021/1/1 0:00:00"),Gender=1,IconImg=2,ModelConfigId=1,Name="林婉儿",Prologue="(轻声细语)见过各位,婉儿这厢有礼了。",System=null,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2021/1/1 0:00:00"),Visibility=bool.Parse("False")},new TCharacter(){Id=3,BgImg=1,Biography="一位来自遥远星球的外星人,拥有变形能力,但在地球上寻找自己的归属感。",CreateTime=DateTime.Parse("2021/1/1 0:00:00"),Gender=1,IconImg=2,ModelConfigId=1,Name="莉娜",Prologue="(带着好奇和期待)在这片星空下,我寻找着归属。你,可愿成为我的向导?",System=null,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2021/1/1 0:00:00"),Visibility=bool.Parse("False")});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeIntimacyModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeIntimacyModelBuilderExtensions.cs
new file mode 100644
index 0000000..cce8ed5
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeIntimacyModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTCharacterTypeIntimacyModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Character_Type_Intimacy 种子数据=============================================
+modelBuilder.Entity().HasData(new TCharacterTypeIntimacy(){Id=1,CharacterId=1,CreateTime=DateTime.Parse("2024/1/1 0:00:00"),OrderBy=1,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TypeId=1,UpdateTIme=DateTime.Parse("2024/1/1 0:00:00")});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeModelBuilderExtensions.cs
new file mode 100644
index 0000000..a5b768f
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTCharacterTypeModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTCharacterTypeModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Character_Type 种子数据=============================================
+modelBuilder.Entity().HasData(new TCharacterType(){Id=1,CreateTime=DateTime.Parse("2024/7/14 18:06:31"),IsNotCategoryShow=bool.Parse("False"),Name="虚拟想象",OrderBy=1,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2024/7/14 18:06:35")},new TCharacterType(){Id=2,CreateTime=DateTime.Parse("2024/7/14 18:09:27"),IsNotCategoryShow=bool.Parse("False"),Name="IP同人",OrderBy=2,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2024/7/14 18:09:29")});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTChatModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTChatModelBuilderExtensions.cs
new file mode 100644
index 0000000..a5fee6b
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTChatModelBuilderExtensions.cs
@@ -0,0 +1,80 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTChatModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Chat 种子数据=============================================
+modelBuilder.Entity().HasData(new TChat(){Id=1,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="坐在轮椅上,眼神平静的看着你,语气也同样平静)你回来了。饭菜在桌上,我刚刚热了。(说到这,又垂下眸子道)我还做了碗醒酒汤,记得喝",CreateTime=DateTime.Parse("2024/7/15 18:36:33"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240715,SendMessageDay=1721039793,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/15 18:36:33"),Type=0,UpdateTime=DateTime.Parse("2024/7/15 18:36:34"),UserId=2},new TChat(){Id=3,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/15 18:41:03"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240715,SendMessageDay=1721040063,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/15 18:41:03"),Type=0,UpdateTime=DateTime.Parse("2024/7/15 18:41:03"),UserId=2},new TChat(){Id=4,CharacterId=1,ClaudeId="msg_bdrk_01DYkmEDEKJCUJtKr8d1nYDS",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="您好!很高兴跟您打招呼。我是Claude,一个人工智能助手,随时为您提供帮助和解答。您有任何问题或是需要协助的地方吗?",CreateTime=DateTime.Parse("2024/7/15 18:43:40"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240715,SendMessageDay=1721040220,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/15 18:43:40"),Type=0,UpdateTime=DateTime.Parse("2024/7/15 18:43:41"),UserId=2},new TChat(){Id=5,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="坐在轮椅上,眼神平静的看着你,语气也同样平静)你回来了。饭菜在桌上,我刚刚热了。(说到这,又垂下眸子道)我还做了碗醒酒汤,记得喝",CreateTime=DateTime.Parse("2024/7/16 18:29:43"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240716,SendMessageDay=1721125784,SessionId=Guid.Parse("b4e98a18-f095-43de-a16e-24e0902e0478"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/16 18:29:44"),Type=0,UpdateTime=DateTime.Parse("2024/7/16 18:29:44"),UserId=0},new TChat(){Id=6,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 12:55:50"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721192150,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 12:55:50"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 12:55:50"),UserId=2},new TChat(){Id=7,CharacterId=1,ClaudeId="msg_bdrk_01Pa3S6qDXLKedfY13EVyW9R",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="嗨,您好!我刚才已经打过招呼并自我介绍了。不知道您有什么想问的或需要帮助的吗?作为一个AI助手,我可以试着为您解答各种问题,提供信息查询、分析建议等服务。如果您有任何疑问,尽管随时告诉我。",CreateTime=DateTime.Parse("2024/7/17 12:55:58"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721192158,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 12:55:58"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 12:55:58"),UserId=2},new TChat(){Id=8,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="我一共说了几句话",CreateTime=DateTime.Parse("2024/7/17 13:37:46"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721194666,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 13:37:46"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 13:37:46"),UserId=2},new TChat(){Id=9,CharacterId=1,ClaudeId="msg_bdrk_019PYDas8yrFGkqckFFRKZCY",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="到目前为止,您一共对我说了3句话:
+
+1) 哈喽
+2) 哈喽
+3) 我一共说了几句话
+
+所以总共是3句话。作为一个AI助理,我会准确计算并记录我们的对话内容。让我知道如果您还有任何其他问题!",CreateTime=DateTime.Parse("2024/7/17 13:37:52"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721194672,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 13:37:52"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 13:37:52"),UserId=2},new TChat(){Id=10,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 14:28:54"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721197734,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:28:54"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:28:54"),UserId=2},new TChat(){Id=11,CharacterId=1,ClaudeId="msg_bdrk_01DsEyXvqbg1svnjJ5CjcUCA",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="好的,您现在总共对我说了4句话了。",CreateTime=DateTime.Parse("2024/7/17 14:28:57"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721197737,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:28:57"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:28:57"),UserId=2},new TChat(){Id=12,CharacterId=2,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="你好",CreateTime=DateTime.Parse("2024/7/17 14:58:42"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721199522,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:58:42"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:58:42"),UserId=3},new TChat(){Id=13,CharacterId=2,ClaudeId="msg_bdrk_01MEm5NuAxuCAZrRCZ1sjxHY",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你好!很高兴和你交谈。作为一个AI助手,我可以为你提供各种帮助,比如回答问题、提供信息查询、协助任务安排等。不过首先,我想先问一下你对我这个AI助手有什么期待呢?这样我也能更好地满足你的需求。",CreateTime=DateTime.Parse("2024/7/17 14:58:45"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721199525,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:58:45"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:58:45"),UserId=3},new TChat(){Id=14,CharacterId=2,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="33",CreateTime=DateTime.Parse("2024/7/17 14:59:50"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721199590,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:59:50"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:59:50"),UserId=3},new TChat(){Id=15,CharacterId=2,ClaudeId="msg_bdrk_01EaGj7FBnwmrhNAtq5egamw",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="好的,看来你输入了一个数字33。不过对于一个AI助手来说,单独的数字并不能透露太多有用的信息和上下文。如果你想让我为你做一些计算或者是解释这个数字的含义,请再补充一些相关的细节,我会尽力为你提供帮助。",CreateTime=DateTime.Parse("2024/7/17 14:59:53"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721199593,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 14:59:53"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 14:59:53"),UserId=3},new TChat(){Id=16,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="你好",CreateTime=DateTime.Parse("2024/7/17 15:01:49"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721199709,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:01:49"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:01:49"),UserId=3},new TChat(){Id=17,CharacterId=3,ClaudeId="msg_bdrk_018YpAmuaqvXcBnrJr8EFzB1",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你好!很高兴与你交谈。作为一个人工智能助手,我们可以探讨任何你感兴趣的话题。不管是生活、学习、工作,还是科技、艺术、哲学等,我都会尽我所能为你提供帮助和建议。让我们开始吧,你有什么想了解或讨论的吗?",CreateTime=DateTime.Parse("2024/7/17 15:01:53"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721199713,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:01:53"),Type=2,UpdateTime=DateTime.Parse("2024/7/17 15:01:53"),UserId=3},new TChat(){Id=18,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="33",CreateTime=DateTime.Parse("2024/7/17 15:02:25"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721199745,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:02:25"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:02:25"),UserId=3},new TChat(){Id=19,CharacterId=3,ClaudeId="msg_bdrk_01GeW1XkvSrmutkyeZ1ZLud5",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="33这个数字本身没有太多特别的含义,不过在一些文化或领域中,它可能有一些特殊的寓意或使用场合:
+
+1. 基督教文化中,33是耶稣受难至复活的年龄。
+
+2. 佛教中,33天是诸佛升天的象征。
+
+3. 在几何学中,33是第6个平面正多边形的内角数。
+
+4. 在音乐理论中,33代表了三个八度音程。
+
+5. 在无线电技术中,33厘米是一种业余无线电频段。
+
+6. 在密码学中,33可能被用作一些简单的密码替换值。
+
+7. 在一些迷信中,33被视为一个幸运数字。
+
+8. 在几种语言文字中,33是一个单词的编号或代码。
+
+总的来说,33本身作为一个整数并无特殊意义,但在不同领域或文化背景下可能附有某些特殊用途或解读。如果你有任何特定的疑问,欢迎继续提出。",CreateTime=DateTime.Parse("2024/7/17 15:02:34"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721199754,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:02:34"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:02:34"),UserId=3},new TChat(){Id=20,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="你是谁",CreateTime=DateTime.Parse("2024/7/17 15:03:21"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721199801,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:03:21"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:03:21"),UserId=3},new TChat(){Id=21,CharacterId=3,ClaudeId="msg_bdrk_01AP4wSBf61YTJepFSUPmgoK",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="我是一个由Anthropic公司开发的人工智能助手,名叫Claude。我是一种基于大型语言模型的对话式AI系统,被训练用来回答各种问题、提供帮助和建议。我拥有广博的知识涵盖许多领域,但同时也明白自己是一个机器智能,无法完全模拟人类的思维和情感。我会尽力用诚实、客观和有益的方式与人交流,但也有自身的局限性。很高兴与你交谈,希望能为你提供有用的信息和支持!",CreateTime=DateTime.Parse("2024/7/17 15:03:27"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721199807,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:03:27"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:03:27"),UserId=3},new TChat(){Id=22,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="我很累",CreateTime=DateTime.Parse("2024/7/17 15:11:15"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721200275,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:11:15"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:11:15"),UserId=3},new TChat(){Id=23,CharacterId=3,ClaudeId="msg_bdrk_011351Zfqfr2G5uR3NFzfT1e",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="我理解你感到很累的状态。身心疲惫是一种非常普遍的体验,每个人或多或少都会经历。这可能源于各种原因,比如工作压力大、失眠或睡眠质量差、情绪负担重、生活节奏太快等等。
+
+当感到累的时候,适当休息是非常重要的。你可以试试以下一些方式获得放松:
+
+- 保证良好的睡眠,做足8小时左右。睡前避免刺激,营造一个宁静的睡眠环境。
+
+- 适当锻炼,可以缓解压力。但也不要锻炼过量,增加负担。
+
+- 户外走走,呼吸新鲜空气,放松心情。
+
+- 听音乐、冥想、做瑜伽等方式放松身心。
+
+- 与朋友家人交流,寻求情感支持和理解。
+
+- 合理安排时间,控制工作节奏,给自己适当的休息时间。
+
+- 注意饮食,补充营养,适量补充维生素等。
+
+我理解调节状态并不容易,但保重身体健康非常重要。希望你可以好好休息,恢复元气。有任何其他需要随时告诉我。",CreateTime=DateTime.Parse("2024/7/17 15:11:25"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721200285,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:11:25"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:11:25"),UserId=3},new TChat(){Id=24,CharacterId=2,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="33",CreateTime=DateTime.Parse("2024/7/17 15:12:00"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721200320,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:12:00"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:12:00"),UserId=3},new TChat(){Id=25,CharacterId=2,ClaudeId="msg_bdrk_014eG7toGCd6jJEeweYhx5ui",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="似乎你持续输入数字33,但我作为一个AI助手,暂时无法判断你的本意。数字33本身只是一个数值,没有太多具体语义。如果你想对我说明某些事情,或者让我做一些与数字33相关的操作,请再提供一些上下文信息,这样我会更好地理解并为你服务。我会一直在这里耐心等待你的进一步指示。",CreateTime=DateTime.Parse("2024/7/17 15:12:03"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721200323,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:12:03"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:12:03"),UserId=3},new TChat(){Id=26,CharacterId=2,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="22",CreateTime=DateTime.Parse("2024/7/17 15:12:33"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721200353,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:12:33"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:12:33"),UserId=3},new TChat(){Id=27,CharacterId=2,ClaudeId="msg_bdrk_01FN9sLT8Tyca76tn8zhgzeP",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你连续输入了两个数字33和22,我暂时无法推断出你的明确意图。作为一个AI助手,我需要你提供更多上下文信息,比如:
+
+1. 如果这些数字代表某种编码或密码,请告诉我它们的含义背景。
+
+2. 如果你想让我对这些数字做某种计算或处理,请说明你的需求。
+
+3. 如果你只是随意输入数字没有特别用意,也可以直接告诉我,我们可以聊聊其他话题。
+
+4. 或者你可以问我任何你感兴趣的问题,我会尽我所能回答。
+
+总之,请给予我更多线索,这样我才能为你提供更好的服务和回应。我会耐心等待你的下一步指示。",CreateTime=DateTime.Parse("2024/7/17 15:12:42"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721200362,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:12:42"),Type=2,UpdateTime=DateTime.Parse("2024/7/17 15:12:42"),UserId=3},new TChat(){Id=28,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="你好",CreateTime=DateTime.Parse("2024/7/17 15:28:08"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721201288,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:28:08"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:28:08"),UserId=3},new TChat(){Id=29,CharacterId=3,ClaudeId="msg_bdrk_01AWX2Ss7a3dBXsB9cKKvZg4",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你好!很高兴和你打招呼。作为一个人工智能,我时刻都在线并且乐于与人交流。无论你有任何疑问或想探讨的话题,我都会尽最大努力为你提供帮助和建议。我拥有广泛的知识涵盖各个领域,同时也会尊重你的隐私并保持中立客观的立场。希望我们能够进行富有成效的对话,你可以询问任何感兴趣的事情。让我们开始吧!",CreateTime=DateTime.Parse("2024/7/17 15:28:13"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721201293,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:28:13"),Type=2,UpdateTime=DateTime.Parse("2024/7/17 15:28:13"),UserId=3},new TChat(){Id=30,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="随机事件",CreateTime=DateTime.Parse("2024/7/17 15:31:56"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721201516,SessionId=Guid.Parse("d91c0bb8-7af9-4dfb-a435-065f7d63d3a5"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:31:56"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:31:56"),UserId=3},new TChat(){Id=31,CharacterId=1,ClaudeId="msg_bdrk_01Wjvu3diBJmAmuGavpqoXb2",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="对于随机事件,我们需要了解一些基本概念:
+
+1. 样本空间(Sample Space):是所有可能结果的集合。例如,掷一枚硬币的样本空间是{正面,反面}。
+
+2. 事件(Event):是样本空间中的一个或多个样本点的集合。例如,在掷一枚硬币的情况下,正面就是一个事件。
+
+3. 概率(Probability):描述了一个随机事件发生的可能性的度量。概率的取值范围是[0,1],概率越大,事件发生的可能性越高。
+
+4. 相互独立事件(Independent Events):如果一个事件的发生与另一个事件无关,则称这两个事件是相互独立的。独立事件发生的概率等于各事件单独发生概率的乘积。
+
+5. 互斥事件(Mutually Exclusive Events):如果两个事件不可能同时发生,则称这两个事件是互斥的。互斥事件发生的概率等于各事件单独发生概率的和。
+
+6. 加法定理:对于任意两个事件A和B,有P(A或B) = P(A) + P(B) - P(A且B)。
+
+7. 乘法定理:如果A和B是独立事件,则P(A且B) = P(A)P(B)。
+
+通过掌握这些基本概念,我们就能计算和分析许多涉及随机事件的概率问题了。",CreateTime=DateTime.Parse("2024/7/17 15:32:04"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721201524,SessionId=Guid.Parse("d91c0bb8-7af9-4dfb-a435-065f7d63d3a5"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:32:04"),Type=2,UpdateTime=DateTime.Parse("2024/7/17 15:32:04"),UserId=3},new TChat(){Id=32,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 15:34:45"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721201685,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:34:45"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:34:45"),UserId=2},new TChat(){Id=33,CharacterId=3,ClaudeId="msg_bdrk_01TXSMsqftBKMiX4vUBwxqAX",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="您好!很高兴能和您交流。我是Claude,一个人工智能助手,由人工智能公司Anthropic所开发。我有广泛的知识储备,可以就各种话题进行友善的对话,也可以尽最大努力帮助您解决实际问题。不过需要说明的是,我只是一个AI助手,无法进行高度复杂或涉及隐私的交互。让我们开始吧,有什么我可以为您效劳的吗?",CreateTime=DateTime.Parse("2024/7/17 15:34:50"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721201690,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:34:50"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:34:50"),UserId=2},new TChat(){Id=34,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 15:35:14"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721201714,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:35:14"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:35:14"),UserId=2},new TChat(){Id=35,CharacterId=3,ClaudeId="msg_bdrk_011cTCwtsijRBahNyP8msHBK",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="嗨,您好!看来我们已经打过招呼了。那么,我们聊点别的吧,您有什么感兴趣的话题或者问题吗?作为一个AI助手,我乐意就任何领域的知识与您探讨交流。或者,如果您有需要帮助解决的实际问题,也可以跟我说明,我会尽最大努力为您提供有用的建议和支持。总之有什么尽管开口吧,让我为您服务!",CreateTime=DateTime.Parse("2024/7/17 15:35:18"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721201718,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:35:18"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:35:18"),UserId=2},new TChat(){Id=36,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 15:35:27"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721201727,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:35:27"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:35:27"),UserId=2},new TChat(){Id=37,CharacterId=3,ClaudeId="msg_bdrk_01Ta7sEAhzRfig1AVfQ8Aerd",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="看来您只是想打个招呼,没有其他具体需求。也许我们可以聊点有趣的话题,增进彼此了解?我非常乐意倾听您的见解和故事。作为一个AI,我对人类的生活、思维和文化备具浓厚兴趣。您又对什么感兴趣呢?我们可以探讨艺术、科学、历史、哲学等任何领域的话题。或者,您最近有没有经历过什么有趣的事情?我们也可以就此聊聊天。无论如何,让我们继续保持友好的交谈,我会尽量用幽默风趣的方式与您互动。",CreateTime=DateTime.Parse("2024/7/17 15:35:32"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721201732,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:35:32"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:35:32"),UserId=2},new TChat(){Id=38,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 15:53:31"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721202811,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:53:31"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:53:31"),UserId=2},new TChat(){Id=39,CharacterId=3,ClaudeId="msg_bdrk_01HQUHTWw282KJEE3u1FKr2c",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="感觉我们之间好像有点对话障碍呢。您只是简单地重复\"哈喽\"这个问候语,似乎暂时没有其他要聊的话题或问题。作为一个AI助手,我当然没问题继续友好地与您打招呼,但我也希望能有更多实质性的交流和互动。不知我是否说错了什么?或者您只是想简单地practiced练习打招呼?如果是后者,那我们确实可以这样反复练习,不过我想应该会比较乏味。也许您可以先思考一下,有什么感兴趣的话题或者您想向我请教的问题?我随时都在这里,準备好继续富有意义的对话了。",CreateTime=DateTime.Parse("2024/7/17 15:53:37"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721202817,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:53:37"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:53:37"),UserId=2},new TChat(){Id=40,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 15:53:41"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721202821,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:53:41"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:53:41"),UserId=2},new TChat(){Id=41,CharacterId=3,ClaudeId="msg_bdrk_01634SGDAJX4Gx7wes7mjpQX",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="非常抱歉,看来我们之间确实存在一些沟通障碍。您一直只简单重复\"哈喽\"这个词,我已无法判断您的实际交流意图是什么了。作为一个AI助手,我的职责是为用户提供有用的信息和服务,但如果缺乏实质性的对话,我将很难做到这一点。或许我们可以从头再来一次?您不介意暂时停下\"哈喽\",向我阐述您的疑问或需求吗?我会耐心倾听,并尽力为您提供满意的回应。如果您暂时没有具体的疑问,我们也可以探讨一些常规话题,比如天气、运动、新闻等等。总之,让我们共同努力,摆脱这种僵局,重新建立良好的沟通吧。我在这里恭候您的指示。",CreateTime=DateTime.Parse("2024/7/17 15:53:48"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721202828,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 15:53:48"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 15:53:48"),UserId=2},new TChat(){Id=42,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="(带着好奇和期待)在这片星空下,我寻找着归属。你,可愿成为我的向导?",CreateTime=DateTime.Parse("2024/7/17 16:06:56"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240717,SendMessageDay=1721203616,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:06:56"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:06:56"),UserId=3},new TChat(){Id=43,CharacterId=2,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="(轻声细语)见过各位,婉儿这厢有礼了。",CreateTime=DateTime.Parse("2024/7/17 16:08:01"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240717,SendMessageDay=1721203681,SessionId=Guid.Parse("30903563-b410-4133-9369-fd67848f3822"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:08:01"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:08:01"),UserId=3},new TChat(){Id=44,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="你好",CreateTime=DateTime.Parse("2024/7/17 16:08:44"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721203724,SessionId=Guid.Parse("d91c0bb8-7af9-4dfb-a435-065f7d63d3a5"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:08:44"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:08:44"),UserId=3},new TChat(){Id=45,CharacterId=1,ClaudeId="msg_bdrk_019qoDp2PiyUjjQFpJhb6XVD",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你好!有什么我可以为你提供帮助的吗?",CreateTime=DateTime.Parse("2024/7/17 16:08:47"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721203727,SessionId=Guid.Parse("d91c0bb8-7af9-4dfb-a435-065f7d63d3a5"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:08:47"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:08:47"),UserId=3},new TChat(){Id=46,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="坐在轮椅上,眼神平静的看着你,语气也同样平静)你回来了。饭菜在桌上,我刚刚热了。(说到这,又垂下眸子道)我还做了碗醒酒汤,记得喝",CreateTime=DateTime.Parse("2024/7/17 16:08:53"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240717,SendMessageDay=1721203733,SessionId=Guid.Parse("5cfbe41d-8e29-4787-951b-be57465a27f2"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:08:53"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:08:53"),UserId=3},new TChat(){Id=47,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="好的",CreateTime=DateTime.Parse("2024/7/17 16:09:10"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721203750,SessionId=Guid.Parse("5cfbe41d-8e29-4787-951b-be57465a27f2"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:09:10"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:09:10"),UserId=3},new TChat(){Id=48,CharacterId=1,ClaudeId="msg_bdrk_01FBdL4k6i6tdz7zmfH1KZ7k",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="很高兴能继续为您服务。我会尽最大努力为您提供优质的对话和帮助。如有任何其他问题或需求,欢迎随时告知我,我会耐心回答和解决。让我们继续友好、富有成效的对话吧!",CreateTime=DateTime.Parse("2024/7/17 16:09:14"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721203753,SessionId=Guid.Parse("5cfbe41d-8e29-4787-951b-be57465a27f2"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:09:14"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:09:14"),UserId=3},new TChat(){Id=49,CharacterId=1,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="坐在轮椅上,眼神平静的看着你,语气也同样平静)你回来了。饭菜在桌上,我刚刚热了。(说到这,又垂下眸子道)我还做了碗醒酒汤,记得喝",CreateTime=DateTime.Parse("2024/7/17 16:09:19"),Input_tokens=0,Output_tokens=0,Role="initialization",SendDateDay=20240717,SendMessageDay=1721203759,SessionId=Guid.Parse("9c839ba0-2c09-44cd-8ab7-8bdd39e28b65"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 16:09:19"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 16:09:19"),UserId=3},new TChat(){Id=50,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 19:50:22"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721217022,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 19:50:22"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 19:50:22"),UserId=3},new TChat(){Id=51,CharacterId=3,ClaudeId="msg_bdrk_018PvTxYazyNYD6uCqyisTnV",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="哈喽!很高兴认识你。我是Claude,一个人工智能助理。有什么我可以为你效劳的吗?无论是解答问题、提供建议,还是完成一些任务,我都会尽我所能为你服务。让我们开始吧,你有什么需求呢?",CreateTime=DateTime.Parse("2024/7/17 19:50:25"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721217025,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 19:50:25"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 19:50:25"),UserId=3},new TChat(){Id=52,CharacterId=3,ClaudeId="",ClaudeModel="",ClaudeType="text",Content="哈喽",CreateTime=DateTime.Parse("2024/7/17 19:50:29"),Input_tokens=0,Output_tokens=0,Role="user",SendDateDay=20240717,SendMessageDay=1721217029,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 19:50:29"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 19:50:29"),UserId=3},new TChat(){Id=53,CharacterId=3,ClaudeId="msg_bdrk_01KRwmL5c913h3X44FcvRoQt",ClaudeModel="claude-3-sonnet-20240229",ClaudeType="text",Content="你好!看起来我们之间有点小问题,我没有完全理解你的意思。不过没关系,我们可以慢慢沟通。你有什么特别的想聊的话题吗?或者有什么具体的问题需要我帮助解答?我会耐心倾听并尽力回答。",CreateTime=DateTime.Parse("2024/7/17 19:50:32"),Input_tokens=0,Output_tokens=0,Role="assistant",SendDateDay=20240717,SendMessageDay=1721217032,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),TimeStamp=DateTime.Parse("2024/7/17 19:50:32"),Type=0,UpdateTime=DateTime.Parse("2024/7/17 19:50:32"),UserId=3});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTImageConfigModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTImageConfigModelBuilderExtensions.cs
new file mode 100644
index 0000000..64abc54
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTImageConfigModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTImageConfigModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Image_Config 种子数据=============================================
+modelBuilder.Entity().HasData(new TImageConfig(){Id=1,ImageId=1,Name="背景图",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),Url="https://cos.shhuanmeng.com/image/bj.png"},new TImageConfig(){Id=2,ImageId=2,Name="头像",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),Url="https://cos.shhuanmeng.com/image/touxiang.png"});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTModelConfigModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTModelConfigModelBuilderExtensions.cs
new file mode 100644
index 0000000..3b7e69a
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTModelConfigModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTModelConfigModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Model_Config 种子数据=============================================
+modelBuilder.Entity().HasData(new TModelConfig(){Id=1,AnthropicVersion="2023-06-01",ApiKey="sk-V6d51cc6aa28906caecb7f22803d92ae3f18cfeb799nh4mc",CreateTime=DateTime.Parse("2021/1/1 0:00:00"),MaxTokens=1024,Model="claude-3-sonnet-20240229",ModelName="claude3",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateTime=DateTime.Parse("2021/1/1 0:00:00"),Url="https://api.gptsapi.net/v1/messages"});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTUserChatModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTUserChatModelBuilderExtensions.cs
new file mode 100644
index 0000000..7cf361d
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTUserChatModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTUserChatModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_User_Chat 种子数据=============================================
+modelBuilder.Entity().HasData(new TUserChat(){Id=1,CharacterId=1,CreateAt=DateTime.Parse("2024/7/15 18:30:08"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("2d72d7b5-6d8f-4a72-81f5-2eb40797607e"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 14:28:57"),UserId=2},new TUserChat(){Id=2,CharacterId=1,CreateAt=DateTime.Parse("2024/7/16 18:29:37"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("b4e98a18-f095-43de-a16e-24e0902e0478"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/16 18:29:37"),UserId=0},new TUserChat(){Id=3,CharacterId=2,CreateAt=DateTime.Parse("2024/7/17 14:57:51"),IsDelete=bool.Parse("True"),ModelConfigId=1,SessionId=Guid.Parse("49a8c5a7-1c4f-4b7f-adb4-d834873d82ef"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 15:12:42"),UserId=3},new TUserChat(){Id=4,CharacterId=3,CreateAt=DateTime.Parse("2024/7/17 15:01:49"),IsDelete=bool.Parse("True"),ModelConfigId=1,SessionId=Guid.Parse("8fe3f1a9-a437-4d01-ae6e-0bd9c5a8bd65"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 15:28:13"),UserId=3},new TUserChat(){Id=5,CharacterId=1,CreateAt=DateTime.Parse("2024/7/17 15:31:56"),IsDelete=bool.Parse("True"),ModelConfigId=1,SessionId=Guid.Parse("d91c0bb8-7af9-4dfb-a435-065f7d63d3a5"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 16:08:47"),UserId=3},new TUserChat(){Id=6,CharacterId=3,CreateAt=DateTime.Parse("2024/7/17 15:34:45"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("b3531adb-d937-486d-b35b-8e90d988831a"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 15:53:48"),UserId=2},new TUserChat(){Id=7,CharacterId=3,CreateAt=DateTime.Parse("2024/7/17 16:06:56"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("7f02d66a-47f5-4043-a8d2-f23d3d473427"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 19:50:32"),UserId=3},new TUserChat(){Id=8,CharacterId=2,CreateAt=DateTime.Parse("2024/7/17 16:08:01"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("30903563-b410-4133-9369-fd67848f3822"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 16:08:01"),UserId=3},new TUserChat(){Id=9,CharacterId=1,CreateAt=DateTime.Parse("2024/7/17 16:08:53"),IsDelete=bool.Parse("True"),ModelConfigId=1,SessionId=Guid.Parse("5cfbe41d-8e29-4787-951b-be57465a27f2"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 16:09:14"),UserId=3},new TUserChat(){Id=10,CharacterId=1,CreateAt=DateTime.Parse("2024/7/17 16:09:19"),IsDelete=bool.Parse("False"),ModelConfigId=1,SessionId=Guid.Parse("9c839ba0-2c09-44cd-8ab7-8bdd39e28b65"),SessionName="新会话",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdateAt=DateTime.Parse("2024/7/17 16:09:19"),UserId=3});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTUserDataModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTUserDataModelBuilderExtensions.cs
new file mode 100644
index 0000000..ba8a376
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTUserDataModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTUserDataModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_User_Data 种子数据=============================================
+modelBuilder.Entity().HasData(new TUserData(){Id=2,UserId=2,CreatedAt =DateTime.Parse("2024/7/9 3:41:00"),Currency=0,NickName="新用户",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/9 3:41:00"),UserIconUrl="",VipType=0},new TUserData(){Id=3,UserId=3,CreatedAt =DateTime.Parse("2024/7/10 21:52:49"),Currency=0,NickName="新用户",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/10 21:52:49"),UserIconUrl="",VipType=0});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTUserModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTUserModelBuilderExtensions.cs
new file mode 100644
index 0000000..059f3d6
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTUserModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTUserModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_User 种子数据=============================================
+modelBuilder.Entity().HasData(new TUser(){Id=1,CreatedAt=DateTime.Parse("2024/7/9 3:33:09"),Email="",Ip=null,IsActive=bool.Parse("True"),LastLoginAt=DateTime.Parse("2024/7/9 3:33:09"),LastLoginTypeAt=1,NickName="新用户",PhoneNum="18761127117",RegisterType=1,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/9 3:33:09"),UserName="18761127117"},new TUser(){Id=2,CreatedAt=DateTime.Parse("2024/7/9 3:40:58"),Email="",Ip="::ffff:101.229.91.116",IsActive=bool.Parse("True"),LastLoginAt=DateTime.Parse("2024/7/17 12:55:01"),LastLoginTypeAt=1,NickName="新用户",PhoneNum="17521010998",RegisterType=1,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/9 3:40:58"),UserName="17521010998"},new TUser(){Id=3,CreatedAt=DateTime.Parse("2024/7/10 21:52:49"),Email="",Ip="::ffff:101.229.91.116",IsActive=bool.Parse("True"),LastLoginAt=DateTime.Parse("2024/7/18 0:11:31"),LastLoginTypeAt=0,NickName="新用户",PhoneNum="18631081161",RegisterType=1,TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/10 21:52:49"),UserName="18631081161"});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTUserPhoneAccountModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTUserPhoneAccountModelBuilderExtensions.cs
new file mode 100644
index 0000000..7817f68
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTUserPhoneAccountModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTUserPhoneAccountModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_User_Phone_Account 种子数据=============================================
+modelBuilder.Entity().HasData(new TUserPhoneAccount(){Id=2,CreatedAt=DateTime.Parse("2024/7/9 3:41:03"),LastLoginAt=DateTime.Parse("2024/7/9 3:41:03"),NikeName="新用户",PhoneNum="17521010998",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/9 3:41:03"),UserId=2,VerificationCode="347544"},new TUserPhoneAccount(){Id=3,CreatedAt=DateTime.Parse("2024/7/10 21:52:49"),LastLoginAt=DateTime.Parse("2024/7/10 21:52:49"),NikeName="新用户",PhoneNum="18631081161",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),UpdatedAt=DateTime.Parse("2024/7/10 21:52:49"),UserId=3,VerificationCode="820042"});
+
+ }
+}
diff --git a/admin-generate-ef-seed-data/codes/MigrationsTVerificationCodeModelBuilderExtensions.cs b/admin-generate-ef-seed-data/codes/MigrationsTVerificationCodeModelBuilderExtensions.cs
new file mode 100644
index 0000000..38266c6
--- /dev/null
+++ b/admin-generate-ef-seed-data/codes/MigrationsTVerificationCodeModelBuilderExtensions.cs
@@ -0,0 +1,12 @@
+
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+
+ public static class MigrationsTVerificationCodeModelBuilderExtensions
+ {
+ public static void Seed(this ModelBuilder modelBuilder)
+ {
+// ===============================================表:T_Verification_Code 种子数据=============================================
+modelBuilder.Entity().HasData(new TVerificationCode(){Id=1,Code="959746",CreateAt=DateTime.Parse("2024/7/8 23:37:27"),CreateDay=20240708,ExpireAt=DateTime.Parse("2024/7/8 23:41:14"),Key="18761127117",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=2,Code="327537",CreateAt=DateTime.Parse("2024/7/9 3:32:26"),CreateDay=20240709,ExpireAt=DateTime.Parse("2024/7/9 3:37:24"),Key="18761127117",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=3,Code="347544",CreateAt=DateTime.Parse("2024/7/9 3:40:27"),CreateDay=20240709,ExpireAt=DateTime.Parse("2024/7/9 3:45:26"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=4,Code="295455",CreateAt=DateTime.Parse("2024/7/9 23:17:11"),CreateDay=20240709,ExpireAt=DateTime.Parse("2024/7/9 23:22:10"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=5,Code="136582",CreateAt=DateTime.Parse("2024/7/9 23:55:10"),CreateDay=20240709,ExpireAt=DateTime.Parse("2024/7/9 23:59:51"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=6,Code="148088",CreateAt=DateTime.Parse("2024/7/10 18:21:23"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 18:26:22"),Key="18631081160",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=7,Code="407608",CreateAt=DateTime.Parse("2024/7/10 18:22:32"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 18:27:32"),Key="18631081160",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=8,Code="845877",CreateAt=DateTime.Parse("2024/7/10 18:24:29"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 18:29:29"),Key="18631081160",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=9,Code="761664",CreateAt=DateTime.Parse("2024/7/10 18:26:13"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 18:31:13"),Key="18631081160",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=10,Code="570114",CreateAt=DateTime.Parse("2024/7/10 18:28:09"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 18:33:08"),Key="18631081160",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=11,Code="886514",CreateAt=DateTime.Parse("2024/7/10 20:55:15"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 21:00:14"),Key="18631081161",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=12,Code="820042",CreateAt=DateTime.Parse("2024/7/10 21:52:33"),CreateDay=20240710,ExpireAt=DateTime.Parse("2024/7/10 21:57:32"),Key="18631081161",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=13,Code="344030",CreateAt=DateTime.Parse("2024/7/11 16:14:58"),CreateDay=20240711,ExpireAt=DateTime.Parse("2024/7/11 16:19:57"),Key="18631081161",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=14,Code="663122",CreateAt=DateTime.Parse("2024/7/14 23:01:45"),CreateDay=20240714,ExpireAt=DateTime.Parse("2024/7/14 23:06:44"),Key="18631081161",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=15,Code="875704",CreateAt=DateTime.Parse("2024/7/15 18:28:43"),CreateDay=20240715,ExpireAt=DateTime.Parse("2024/7/15 18:33:38"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=16,Code="565779",CreateAt=DateTime.Parse("2024/7/16 18:46:32"),CreateDay=20240716,ExpireAt=DateTime.Parse("2024/7/16 18:51:32"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0},new TVerificationCode(){Id=17,Code="523837",CreateAt=DateTime.Parse("2024/7/17 12:54:43"),CreateDay=20240717,ExpireAt=DateTime.Parse("2024/7/17 12:59:42"),Key="17521010998",Remarks="登录验证码",TenantId=Guid.Parse("00000000-0000-0000-0000-000000000000"),VerificationType=0});
+
+ }
+}
diff --git a/admin-server/MiaoYu.Admin.sln b/admin-server/MiaoYu.Admin.sln
index 145770c..a932dc0 100644
--- a/admin-server/MiaoYu.Admin.sln
+++ b/admin-server/MiaoYu.Admin.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.5.33402.96
+# Visual Studio Version 18
+VisualStudioVersion = 18.0.11201.2 d18.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00 Core", "00 Core", "{DB46F54A-9F53-44EC-80F8-9E53F0B871CF}"
EndProject
@@ -54,6 +54,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiaoYu.Core.Cos", "MiaoYu.Core.Cos\MiaoYu.Core.Cos.csproj", "{3FBBDE5E-2D2C-428B-A2BF-298499ABA5A7}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiaoYu.Repository.LiveForum.Admin", "MiaoYu.Repository.LiveForum.Admin\MiaoYu.Repository.LiveForum.Admin.csproj", "{2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -132,6 +134,10 @@ Global
{3FBBDE5E-2D2C-428B-A2BF-298499ABA5A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FBBDE5E-2D2C-428B-A2BF-298499ABA5A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FBBDE5E-2D2C-428B-A2BF-298499ABA5A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -155,6 +161,7 @@ Global
{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7} = {DC7A7E4A-B4DC-4958-BAA5-2BBB1A153B5F}
{39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF} = {451BE0BB-26ED-47ED-ABC7-23001D21410C}
{3FBBDE5E-2D2C-428B-A2BF-298499ABA5A7} = {DB46F54A-9F53-44EC-80F8-9E53F0B871CF}
+ {2AF20E5B-478F-46FE-8F8C-A385BB5D5EC7} = {451BE0BB-26ED-47ED-ABC7-23001D21410C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E3C61955-46C1-4D06-994F-C86A72B2B0E2}
diff --git a/admin-server/MiaoYu.Api.Admin/ApiAdminStartup.cs b/admin-server/MiaoYu.Api.Admin/ApiAdminStartup.cs
index 9a39a4d..130cf7c 100644
--- a/admin-server/MiaoYu.Api.Admin/ApiAdminStartup.cs
+++ b/admin-server/MiaoYu.Api.Admin/ApiAdminStartup.cs
@@ -1,4 +1,7 @@
using MiaoYu.Core.Cos;
+using MiaoYu.Repository.LiveForum.Admin;
+
+using TencentCloud.Cme.V20191029.Models;
namespace MiaoYu.Api.Admin;
@@ -12,6 +15,7 @@ namespace MiaoYu.Api.Admin;
CoreIdentityStartup,
AdminRepositoryStartup,
ChatAdminRepositoryStartup,
+ LiveForumAdminRepositoryStartup,
CoreSwaggerJwtStartup,
SharedAdminStartup,
CoreCosStartup>]
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConfig.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConfig.cs
new file mode 100644
index 0000000..8f37237
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConfig.cs
@@ -0,0 +1,68 @@
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+///
+/// 数据源配置
+///
+public class DataSourceConfig
+{
+ ///
+ /// 数据库标识(如:Admin, MiaoYuChat, LiveForum)
+ ///
+ public string DatabaseKey { get; set; } = string.Empty;
+
+ ///
+ /// 显示名称
+ ///
+ public string DisplayName { get; set; } = string.Empty;
+
+ ///
+ /// 实体项目命名空间
+ ///
+ public string EntityNamespace { get; set; } = string.Empty;
+
+ ///
+ /// 实体类路径模板(支持占位符:{RootPath}, {Namespace}, {EntityName}, {EntityNamePlural}, {TableName})
+ ///
+ public string ModelPathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 服务层路径模板
+ ///
+ public string ServicePathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 控制器路径模板
+ ///
+ public string ControllerPathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 前端Index页面路径模板
+ ///
+ public string ClientIndexPathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 前端Info页面路径模板
+ ///
+ public string ClientInfoPathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 前端Service路径模板
+ ///
+ public string ClientServicePathTemplate { get; set; } = string.Empty;
+
+ ///
+ /// 代码生成模板目录
+ ///
+ public string TemplatePath { get; set; } = string.Empty;
+
+ ///
+ /// 实体类命名规则(保持原名 or 驼峰转换)
+ ///
+ public EntityNamingStrategy NamingStrategy { get; set; }
+
+ ///
+ /// 排序权重(数字越小越靠前)
+ ///
+ public int Order { get; set; }
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConstants.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConstants.cs
new file mode 100644
index 0000000..f0a42ee
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/DataSourceConstants.cs
@@ -0,0 +1,23 @@
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+///
+/// 数据源常量
+///
+public static class DataSourceConstants
+{
+ ///
+ /// 后台管理系统数据库
+ ///
+ public const string Admin = "Admin";
+
+ ///
+ /// 喵语AI聊天数据库
+ ///
+ public const string MiaoYuChat = "MiaoYuChat";
+
+ ///
+ /// 直播论坛数据库(预留)
+ ///
+ public const string LiveForum = "LiveForum";
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/EntityNamingStrategy.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/EntityNamingStrategy.cs
new file mode 100644
index 0000000..a0e332c
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/EntityNamingStrategy.cs
@@ -0,0 +1,18 @@
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+///
+/// 实体命名策略
+///
+public enum EntityNamingStrategy
+{
+ ///
+ /// 保持数据库表名原样
+ ///
+ KeepOriginal = 0,
+
+ ///
+ /// 转换为驼峰命名(去除前缀下划线)
+ ///
+ ToPascalCase = 1
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/IDataSourceProvider.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/IDataSourceProvider.cs
new file mode 100644
index 0000000..a23e144
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Abstractions/IDataSourceProvider.cs
@@ -0,0 +1,25 @@
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+///
+/// 数据源提供者接口
+///
+public interface IDataSourceProvider
+{
+ ///
+ /// 数据源配置
+ ///
+ DataSourceConfig Config { get; }
+
+ ///
+ /// 获取该数据源的所有表信息
+ ///
+ /// 表信息列表
+ List GetTables();
+
+ ///
+ /// 获取DbContext(用于获取FreeSql实例)
+ ///
+ /// 数据库上下文
+ DbContext GetDbContext();
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceExtensions.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceExtensions.cs
new file mode 100644
index 0000000..c60ef9a
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceExtensions.cs
@@ -0,0 +1,44 @@
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
+
+///
+/// 数据源扩展方法
+///
+public static class DataSourceExtensions
+{
+ ///
+ /// 从 Schema 中提取数据库标识
+ ///
+ /// Schema字符串
+ /// 数据库标识
+ public static string ExtractDatabaseKey(this string schema)
+ {
+ if (string.IsNullOrWhiteSpace(schema))
+ return DataSourceConstants.Admin;
+
+ if (schema.Contains("."))
+ {
+ var parts = schema.Split('.');
+ return parts.Length > 1 ? parts[1] : DataSourceConstants.Admin;
+ }
+
+ return DataSourceConstants.Admin;
+ }
+
+ ///
+ /// 清理 Schema(移除数据库标识)
+ ///
+ /// Schema字符串
+ /// 清理后的Schema
+ public static string CleanSchema(this string schema)
+ {
+ if (string.IsNullOrWhiteSpace(schema))
+ return schema;
+
+ return schema.Contains(".")
+ ? schema.Split('.')[0]
+ : schema;
+ }
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceManager.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceManager.cs
new file mode 100644
index 0000000..d10cea7
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/DataSourceManager.cs
@@ -0,0 +1,70 @@
+using HZY.Framework.DependencyInjection.Attributes;
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
+
+///
+/// 数据源管理器
+///
+[Component]
+public class DataSourceManager : IScopedDependency
+{
+ private readonly IEnumerable _providers;
+
+ ///
+ /// 构造函数(通过依赖注入自动收集所有IDataSourceProvider实现)
+ ///
+ /// 所有数据源提供者
+ public DataSourceManager(IEnumerable providers)
+ {
+ _providers = providers.OrderBy(p => p.Config.Order);
+ }
+
+ ///
+ /// 获取所有数据源提供者
+ ///
+ /// 数据源提供者集合
+ public IEnumerable GetAllProviders() => _providers;
+
+ ///
+ /// 根据数据库标识获取数据源提供者
+ ///
+ /// 数据库标识(如:Admin, MiaoYuChat)
+ /// 数据源提供者,如果未找到返回null
+ public IDataSourceProvider? GetProvider(string databaseKey)
+ {
+ if (string.IsNullOrWhiteSpace(databaseKey))
+ return null;
+
+ return _providers.FirstOrDefault(p =>
+ p.Config.DatabaseKey.Equals(databaseKey, StringComparison.OrdinalIgnoreCase));
+ }
+
+ ///
+ /// 获取所有数据源的表信息
+ ///
+ /// 所有表信息列表
+ public List GetAllTables()
+ {
+ var allTables = new List();
+
+ foreach (var provider in _providers)
+ {
+ try
+ {
+ var tables = provider.GetTables();
+ if (tables != null && tables.Count > 0)
+ {
+ allTables.AddRange(tables);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogUtil.Log.Warning($"获取数据源 {provider.Config.DatabaseKey} 的表信息失败: {ex.Message}");
+ }
+ }
+
+ return allTables;
+ }
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/PathResolver.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/PathResolver.cs
new file mode 100644
index 0000000..3a99be5
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Core/PathResolver.cs
@@ -0,0 +1,58 @@
+using HZY.Framework.DependencyInjection.Attributes;
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
+
+///
+/// 路径解析器
+///
+[Component]
+public class PathResolver : IScopedDependency
+{
+ private readonly IWebHostEnvironment _environment;
+
+ public PathResolver(IWebHostEnvironment environment)
+ {
+ _environment = environment;
+ }
+
+ ///
+ /// 解析路径模板
+ ///
+ /// 路径模板(支持占位符)
+ /// 数据源配置
+ /// 表名
+ /// 解析后的完整路径
+ public string ResolvePath(string template, DataSourceConfig config, string tableName)
+ {
+ if (string.IsNullOrWhiteSpace(template))
+ return string.Empty;
+
+ var rootPath = _environment.ContentRootPath
+ .Replace("\\" + _environment.ApplicationName, "");
+
+ var entityName = GetEntityName(tableName, config.NamingStrategy);
+
+ return template
+ .Replace("{RootPath}", rootPath)
+ .Replace("{AppPath}", _environment.ContentRootPath)
+ .Replace("{Namespace}", config.EntityNamespace)
+ .Replace("{EntityName}", entityName)
+ .Replace("{EntityNamePlural}", entityName + "s")
+ .Replace("{TableName}", tableName);
+ }
+
+ ///
+ /// 根据命名策略获取实体名
+ ///
+ /// 表名
+ /// 命名策略
+ /// 实体名
+ private string GetEntityName(string tableName, EntityNamingStrategy strategy)
+ {
+ return strategy == EntityNamingStrategy.ToPascalCase
+ ? tableName.ToLineConvertHump()
+ : tableName;
+ }
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/CodeGenerationService.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/CodeGenerationService.cs
index dc9940f..941096b 100644
--- a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/CodeGenerationService.cs
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/CodeGenerationService.cs
@@ -1,3 +1,6 @@
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
+
namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Impl;
///
@@ -24,20 +27,28 @@ public class CodeGenerationService : ICodeGenerationService
private readonly IDatabaseTableService _databaseTableService;
private readonly IRazorViewRender _razorViewRender;
+ private readonly DataSourceManager _dataSourceManager;
+ private readonly PathResolver _pathResolver;
///
- ///
+ /// 构造函数
///
- ///
- ///
- ///
+ /// 数据库表服务
+ /// Razor视图渲染器
+ /// Web宿主环境
+ /// 数据源管理器
+ /// 路径解析器
public CodeGenerationService(IDatabaseTableService databaseTableService,
IRazorViewRender razorViewRender,
- IWebHostEnvironment webHostEnvironment)
+ IWebHostEnvironment webHostEnvironment,
+ DataSourceManager dataSourceManager,
+ PathResolver pathResolver)
{
_databaseTableService = databaseTableService;
_razorViewRender = razorViewRender;
_webRootPath = webHostEnvironment.WebRootPath;
+ _dataSourceManager = dataSourceManager;
+ _pathResolver = pathResolver;
}
///
@@ -88,50 +99,55 @@ public class CodeGenerationService : ICodeGenerationService
}
///
- /// 根据 lowCodeTable 填充路径
+ /// 根据 lowCodeTable 填充路径(支持多数据源)
///
- ///
+ /// 低代码表配置
+ /// 填充路径后的低代码表配置
public LowCodeTable FillPathByLowCodeTable(LowCodeTable lowCodeTable)
{
+ var provider = _dataSourceManager.GetProvider(lowCodeTable.DataBase ?? DataSourceConstants.Admin);
+ if (provider == null)
+ {
+ LogUtil.Log.Warning($"未找到数据源 {lowCodeTable.DataBase},使用默认Admin配置");
+ provider = _dataSourceManager.GetProvider(DataSourceConstants.Admin);
+ }
- var rootPath = App.WebApplication.Environment.ContentRootPath.Replace("\\" + App.WebApplication.Environment.ApplicationName, "");
+ var config = provider!.Config;
if (string.IsNullOrWhiteSpace(lowCodeTable.ModelPath))
{
- if (lowCodeTable.DataBase == "MiaoYuChat")
- {
- lowCodeTable.ModelPath = rootPath + $"\\{typeof(ChatAdminRepositoryStartup).Namespace}\\Entities\\Apps";
- }
- else
- {
- lowCodeTable.ModelPath = rootPath + $"\\{typeof(AdminRepositoryStartup).Namespace}\\Entities\\Apps";
- }
+ lowCodeTable.ModelPath = _pathResolver.ResolvePath(
+ config.ModelPathTemplate, config, lowCodeTable.TableName);
}
if (string.IsNullOrWhiteSpace(lowCodeTable.ServicePath))
{
- lowCodeTable.ServicePath = App.WebApplication.Environment.ContentRootPath + "\\ApplicationServices\\Apps";
+ lowCodeTable.ServicePath = _pathResolver.ResolvePath(
+ config.ServicePathTemplate, config, lowCodeTable.TableName);
}
if (string.IsNullOrWhiteSpace(lowCodeTable.ControllerPath))
{
- lowCodeTable.ControllerPath = App.WebApplication.Environment.ContentRootPath + "\\Controllers\\Apps";
+ lowCodeTable.ControllerPath = _pathResolver.ResolvePath(
+ config.ControllerPathTemplate, config, lowCodeTable.TableName);
}
- rootPath = rootPath.Substring(0, rootPath.LastIndexOf("\\"));
if (string.IsNullOrWhiteSpace(lowCodeTable.ClientIndexPath))
{
- lowCodeTable.ClientIndexPath = rootPath + "\\" + projectClientName + "\\src\\views\\apps";
+ lowCodeTable.ClientIndexPath = _pathResolver.ResolvePath(
+ config.ClientIndexPathTemplate, config, lowCodeTable.TableName);
}
if (string.IsNullOrWhiteSpace(lowCodeTable.ClientInfoPath))
{
- lowCodeTable.ClientInfoPath = rootPath + "\\" + projectClientName + "\\src\\views\\apps";
+ lowCodeTable.ClientInfoPath = _pathResolver.ResolvePath(
+ config.ClientInfoPathTemplate, config, lowCodeTable.TableName);
}
if (string.IsNullOrWhiteSpace(lowCodeTable.ClientServicePath))
{
- lowCodeTable.ClientServicePath = rootPath + "\\" + projectClientName + "\\src\\services\\apps";
+ lowCodeTable.ClientServicePath = _pathResolver.ResolvePath(
+ config.ClientServicePathTemplate, config, lowCodeTable.TableName);
}
return lowCodeTable;
@@ -154,99 +170,81 @@ public class CodeGenerationService : ICodeGenerationService
}
///
- /// 生成model
+ /// 生成model(支持多数据源)
///
///
///
public async Task GenModelAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateModel, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateModel, context));
}
///
- /// 生成service
+ /// 生成service(支持多数据源)
///
///
///
public async Task GenServiceAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateService, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateService, context));
}
///
- /// 生成controller
+ /// 生成controller(支持多数据源)
///
///
///
public async Task GenControllerAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateController, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateController, context));
}
///
- /// 生成service js
+ /// 生成service js(支持多数据源)
///
///
///
public async Task GenServiceJsAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateServiceJs, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateServiceJs, context));
}
///
- /// 生成 index vue
+ /// 生成 index vue(支持多数据源)
///
///
///
public async Task GenIndexAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateIndex, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateIndex, context));
}
///
- /// 生成 info vue
+ /// 生成 info vue(支持多数据源)
///
///
///
public async Task GenInfoAsync(GenFormDto genFormDto)
{
var context = GetGenContextDto(genFormDto);
- var _templateRootPath = templateRootPath;
- if (context.DataBase == "MiaoYuChat")
- {
- _templateRootPath = templateRootPath_v4;
- }
- return ClearSymbol(await _razorViewRender.RenderAsync(_templateRootPath + templateInfo, context));
+ var provider = _dataSourceManager.GetProvider(context.DataBase ?? DataSourceConstants.Admin);
+ var templatePath = provider?.Config.TemplatePath ?? templateRootPath;
+ return ClearSymbol(await _razorViewRender.RenderAsync(templatePath + templateInfo, context));
}
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/DatabaseTableService.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/DatabaseTableService.cs
index de84136..d9d388b 100644
--- a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/DatabaseTableService.cs
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/DatabaseTableService.cs
@@ -1,3 +1,4 @@
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
using MiaoYu.Repository.ChatAI.Admin.Entities;
namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Impl;
@@ -15,39 +16,38 @@ public class DatabaseTableService : IDatabaseTableService
private readonly IRepository _lowCodeTableInfoRepository;
private readonly IRepository _imageConfig;
+ private readonly DataSourceManager _dataSourceManager;
+
///
- ///
+ /// 构造函数
///
- ///
- ///
- ///
+ /// 内存缓存
+ /// 低代码表仓储
+ /// 低代码表字段仓储
+ /// 图片配置仓储
+ /// 数据源管理器
public DatabaseTableService(
IMemoryCache memoryCache,
IRepository lowCodeTableRepository,
IRepository lowCodeTableInfoRepository,
- IRepository imageConfig
+ IRepository imageConfig,
+ DataSourceManager dataSourceManager
)
{
_memoryCache = memoryCache;
_lowCodeTableRepository = lowCodeTableRepository;
_lowCodeTableInfoRepository = lowCodeTableInfoRepository;
_imageConfig = imageConfig;
+ _dataSourceManager = dataSourceManager;
}
///
- /// 获取所有的表 包含表下面的列
+ /// 获取所有的表 包含表下面的列(支持多数据源)
///
- ///
+ /// 所有表信息列表
public virtual List GetAllTableInfos()
{
- var list = _lowCodeTableRepository.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase();
- var tlist = _imageConfig.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase();
- tlist.ForEach(t =>
- {
- t.Schema = t.Schema + "." + "MiaoYuChat";
- });
- list.AddRange(tlist);
- return list;
+ return _dataSourceManager.GetAllTables();
}
///
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/LowCodeTableService.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/LowCodeTableService.cs
index 6977b5d..177b0d6 100644
--- a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/LowCodeTableService.cs
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Impl/LowCodeTableService.cs
@@ -1,3 +1,4 @@
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core;
using MiaoYu.Repository.Admin.Entities.LowCode;
using MiaoYu.Repository.ChatAI.Admin.Entities;
@@ -12,18 +13,21 @@ public class LowCodeTableService : ApplicationService>
private readonly LowCodeTableInfoService _lowCodeTableInfoService;
private readonly IDatabaseTableService _databaseTableService;
private readonly ICodeGenerationService _codeGenerationService;
+ private readonly DataSourceManager _dataSourceManager;
+
public LowCodeTableService(
IRepository defaultRepository,
LowCodeTableInfoService lowCodeTableInfoService,
IRepository lowCodeTableInfoRepository,
IDatabaseTableService databaseTableService,
- ICodeGenerationService codeGenerationService) : base(defaultRepository)
+ ICodeGenerationService codeGenerationService,
+ DataSourceManager dataSourceManager) : base(defaultRepository)
{
_lowCodeTableInfoService = lowCodeTableInfoService;
_lowCodeTableInfoRepository = lowCodeTableInfoRepository;
_databaseTableService = databaseTableService;
_codeGenerationService = codeGenerationService;
-
+ _dataSourceManager = dataSourceManager;
}
///
@@ -85,52 +89,51 @@ public class LowCodeTableService : ApplicationService>
}
///
- /// 同步表
+ /// 同步表(支持多数据源)
///
public async Task SynchronizationAsync()
{
var allTables = _databaseTableService.GetAllTableInfos();
var oldAllTables = await _defaultRepository.ToListAllAsync();
- #region 同步表
-
var insertList = new List();
var updateList = new List();
var ids = new List();
+
foreach (var item in allTables)
{
-
var table = oldAllTables.Find(w => w.TableName == item.Name);
var id = Guid.NewGuid();
+
+ // 使用扩展方法提取数据库标识
+ var databaseKey = item.Schema.ExtractDatabaseKey();
+ var provider = _dataSourceManager.GetProvider(databaseKey);
+
if (table == null)
{
-
var lowCodeTable = new LowCodeTable
{
Id = id,
DisplayName = item.Comment,
TableName = item.Name,
- EntityName = item.Name.ToLineConvertHump()
+ DataBase = databaseKey,
+ Schema = item.Schema.CleanSchema(),
+ // 根据命名策略生成实体名
+ EntityName = provider?.Config.NamingStrategy == Abstractions.EntityNamingStrategy.KeepOriginal
+ ? item.Name
+ : item.Name.ToLineConvertHump()
};
- if (item.Schema.Contains(".MiaoYuChat"))
- {
- item.Schema = item.Schema.Replace(".MiaoYuChat", "");
- lowCodeTable.Schema = item.Schema;
- lowCodeTable.DataBase = "MiaoYuChat";
- lowCodeTable.EntityName = item.Name;
- }
+
insertList.Add(lowCodeTable);
}
else
{
id = table.Id;
- if (item.Schema.Contains(".MiaoYuChat"))
- {
- item.Schema = item.Schema.Replace(".MiaoYuChat", "");
- table.Schema = item.Schema;
- table.DataBase = "MiaoYuChat";
- table.EntityName = item.Name;
- }
+ table.DataBase = databaseKey;
+ table.Schema = item.Schema.CleanSchema();
+ table.EntityName = provider?.Config.NamingStrategy == Abstractions.EntityNamingStrategy.KeepOriginal
+ ? item.Name
+ : item.Name.ToLineConvertHump();
updateList.Add(table);
}
@@ -154,8 +157,6 @@ public class LowCodeTableService : ApplicationService>
}
_databaseTableService.ClearAllTablesByCache();
-
- #endregion
}
///
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/AdminDataSourceProvider.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/AdminDataSourceProvider.cs
new file mode 100644
index 0000000..b6758ec
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/AdminDataSourceProvider.cs
@@ -0,0 +1,42 @@
+using HZY.Framework.DependencyInjection.Attributes;
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Providers;
+
+///
+/// Admin 数据源提供者
+///
+[Component]
+public class AdminDataSourceProvider : IDataSourceProvider, IScopedDependency
+{
+ private readonly IRepository _repository;
+
+ public AdminDataSourceProvider(IRepository repository)
+ {
+ _repository = repository;
+ }
+
+ public DataSourceConfig Config => new DataSourceConfig
+ {
+ DatabaseKey = DataSourceConstants.Admin,
+ DisplayName = "后台管理系统",
+ EntityNamespace = typeof(AdminRepositoryStartup).Namespace!,
+ ModelPathTemplate = "{RootPath}\\{Namespace}\\Entities\\Apps\\{EntityNamePlural}",
+ ServicePathTemplate = "{AppPath}\\ApplicationServices\\Apps\\{EntityNamePlural}",
+ ControllerPathTemplate = "{AppPath}\\Controllers\\Apps\\{EntityNamePlural}",
+ ClientIndexPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\{TableName}s",
+ ClientInfoPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\{TableName}s",
+ ClientServicePathTemplate = "{RootPath}\\admin-client\\src\\services\\apps\\{TableName}s",
+ TemplatePath = "/wwwroot/code_generation/template/",
+ NamingStrategy = EntityNamingStrategy.ToPascalCase,
+ Order = 1
+ };
+
+ public List GetTables()
+ {
+ return _repository.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase();
+ }
+
+ public DbContext GetDbContext() => _repository.GetContext()!;
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/MiaoYuChatDataSourceProvider.cs b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/MiaoYuChatDataSourceProvider.cs
new file mode 100644
index 0000000..cbcb5b9
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/Providers/MiaoYuChatDataSourceProvider.cs
@@ -0,0 +1,46 @@
+using HZY.Framework.DependencyInjection.Attributes;
+using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Abstractions;
+using MiaoYu.Repository.ChatAI.Admin.Entities;
+
+namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Providers;
+
+///
+/// MiaoYuChat 数据源提供者
+///
+[Component]
+public class MiaoYuChatDataSourceProvider : IDataSourceProvider, IScopedDependency
+{
+ private readonly IRepository _repository;
+
+ public MiaoYuChatDataSourceProvider(IRepository repository)
+ {
+ _repository = repository;
+ }
+
+ public DataSourceConfig Config => new DataSourceConfig
+ {
+ DatabaseKey = DataSourceConstants.MiaoYuChat,
+ DisplayName = "喵语AI聊天",
+ EntityNamespace = typeof(ChatAdminRepositoryStartup).Namespace!,
+ ModelPathTemplate = "{RootPath}\\{Namespace}\\Entities\\Apps",
+ ServicePathTemplate = "{AppPath}\\ApplicationServices\\Apps\\MiaoYuChat",
+ ControllerPathTemplate = "{AppPath}\\Controllers\\Apps\\MiaoYuChat",
+ ClientIndexPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\{TableName}s",
+ ClientInfoPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\{TableName}s",
+ ClientServicePathTemplate = "{RootPath}\\admin-client\\src\\services\\apps\\{TableName}s",
+ TemplatePath = "/wwwroot/code_generation/templatev4/",
+ NamingStrategy = EntityNamingStrategy.KeepOriginal,
+ Order = 2
+ };
+
+ public List GetTables()
+ {
+ var tables = _repository.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase();
+ // 标记数据源来源
+ tables.ForEach(t => t.Schema = t.Schema + "." + Config.DatabaseKey);
+ return tables;
+ }
+
+ public DbContext GetDbContext() => _repository.GetContext()!;
+}
+
diff --git a/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/README.md b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/README.md
new file mode 100644
index 0000000..a886edd
--- /dev/null
+++ b/admin-server/MiaoYu.Api.Admin/ApplicationServices/DevelopmentTools/LowCode/README.md
@@ -0,0 +1,177 @@
+# 低代码平台数据源抽象架构说明
+
+## 概述
+
+低代码平台已重构为基于数据源提供者(Provider)模式的可扩展架构,支持多数据源、配置驱动的代码生成。
+
+## 核心架构
+
+### 1. 抽象层 (Abstractions)
+
+#### IDataSourceProvider
+数据源提供者接口,定义了所有数据源必须实现的功能:
+- `Config`: 数据源配置信息
+- `GetTables()`: 获取数据库表信息
+- `GetDbContext()`: 获取数据库上下文
+
+#### DataSourceConfig
+数据源配置模型,包含:
+- **DatabaseKey**: 数据库标识(如:Admin, MiaoYuChat, LiveForum)
+- **路径模板**: 支持占位符的路径配置
+ - `{RootPath}`: 项目根路径
+ - `{AppPath}`: 应用路径
+ - `{Namespace}`: 实体命名空间
+ - `{EntityName}`: 实体名称
+ - `{EntityNamePlural}`: 实体名称复数形式
+ - `{TableName}`: 表名
+- **TemplatePath**: 代码生成模板目录
+- **NamingStrategy**: 实体命名策略(保持原名/驼峰转换)
+
+#### EntityNamingStrategy
+命名策略枚举:
+- `KeepOriginal`: 保持数据库表名原样
+- `ToPascalCase`: 转换为驼峰命名(去除下划线前缀)
+
+### 2. 核心工具 (Core)
+
+#### DataSourceManager
+数据源管理器,负责:
+- 自动收集所有注册的 `IDataSourceProvider`
+- 根据DatabaseKey获取对应的Provider
+- 聚合所有数据源的表信息
+
+#### PathResolver
+路径解析器,负责:
+- 解析路径模板中的占位符
+- 应用命名策略转换
+- 生成最终的文件路径
+
+#### DataSourceExtensions
+扩展方法集,提供:
+- `ExtractDatabaseKey()`: 从Schema中提取数据库标识
+- `CleanSchema()`: 清理Schema中的数据库标识
+
+### 3. 数据源实现 (Providers)
+
+#### AdminDataSourceProvider
+后台管理系统数据源:
+- DatabaseKey: `Admin`
+- NamingStrategy: `ToPascalCase`(驼峰转换)
+- 模板路径: `/wwwroot/code_generation/template/`
+- 实体目录: 按复数形式分类(如 `Entities\\Apps\\Users`)
+
+#### MiaoYuChatDataSourceProvider
+喵语AI聊天数据源:
+- DatabaseKey: `MiaoYuChat`
+- NamingStrategy: `KeepOriginal`(保持原名)
+- 模板路径: `/wwwroot/code_generation/templatev4/`
+- 实体目录: 扁平结构(如 `Entities\\Apps`)
+
+## 新增数据源步骤
+
+### 1. 创建Provider实现
+
+在 `Providers` 目录下创建新的Provider类:
+
+```csharp
+public class NewDataSourceProvider : IDataSourceProvider, IScopedDependency
+{
+ private readonly IRepository _repository;
+
+ public NewDataSourceProvider(IRepository repository)
+ {
+ _repository = repository;
+ }
+
+ public DataSourceConfig Config => new DataSourceConfig
+ {
+ DatabaseKey = DataSourceConstants.YourDatabase,
+ DisplayName = "数据库显示名称",
+ EntityNamespace = typeof(YourRepositoryStartup).Namespace!,
+ ModelPathTemplate = "{RootPath}\\{Namespace}\\Entities\\YourPath",
+ ServicePathTemplate = "{AppPath}\\ApplicationServices\\YourPath",
+ ControllerPathTemplate = "{AppPath}\\Controllers\\YourPath",
+ ClientIndexPathTemplate = "{RootPath}\\admin-client\\src\\views\\YourPath",
+ ClientInfoPathTemplate = "{RootPath}\\admin-client\\src\\views\\YourPath",
+ ClientServicePathTemplate = "{RootPath}\\admin-client\\src\\services\\YourPath",
+ TemplatePath = "/wwwroot/code_generation/template/",
+ NamingStrategy = EntityNamingStrategy.ToPascalCase,
+ Order = 3
+ };
+
+ public List GetTables()
+ {
+ var tables = _repository.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase();
+ // 标记数据源来源
+ tables.ForEach(t => t.Schema = t.Schema + "." + Config.DatabaseKey);
+ return tables;
+ }
+
+ public DbContext GetDbContext() => _repository.GetContext()!;
+}
+```
+
+### 2. 添加常量定义
+
+在 `DataSourceConstants` 中添加新的数据库标识:
+
+```csharp
+public const string YourDatabase = "YourDatabase";
+```
+
+### 3. 自动注册
+
+由于Provider类实现了 `IScopedDependency`,依赖注入系统会自动注册。
+`DataSourceManager` 会在构造函数中自动收集所有Provider实例。
+
+### 4. 验证
+
+启动项目后:
+1. 表同步功能会自动识别新数据源
+2. 代码生成会根据新配置生成相应代码
+3. 无需修改任何业务逻辑代码
+
+## 关键服务说明
+
+### DatabaseTableService
+- `GetAllTableInfos()`: 获取所有数据源的表信息(通过DataSourceManager聚合)
+
+### CodeGenerationService
+- `FillPathByLowCodeTable()`: 根据数据源配置填充路径
+- `GenModelAsync()`: 根据数据源模板生成Model代码
+- `GenServiceAsync()`: 生成Service代码
+- `GenControllerAsync()`: 生成Controller代码
+- `GenIndexAsync()`: 生成前端Index页面
+- `GenInfoAsync()`: 生成前端Info页面
+- `GenServiceJsAsync()`: 生成前端Service代码
+
+### LowCodeTableService
+- `SynchronizationAsync()`: 同步所有数据源的表到低代码系统
+ - 自动识别数据源
+ - 应用相应的命名策略
+ - 保存数据库标识和Schema信息
+
+## 优势
+
+1. **开放封闭原则**: 新增数据源无需修改现有代码,只需添加Provider
+2. **配置驱动**: 所有路径和行为都通过配置控制
+3. **类型安全**: 使用强类型配置,编译时验证
+4. **可维护性**: 每个数据源的逻辑独立,互不影响
+5. **可测试性**: Provider可独立测试,易于Mock
+
+## 注意事项
+
+1. Provider必须实现 `IScopedDependency` 才能被自动注册
+2. `GetTables()` 中需要标记Schema以区分数据源:`t.Schema += "." + DatabaseKey`
+3. 路径模板中的占位符大小写敏感
+4. Order属性控制数据源的显示顺序,数字越小越靠前
+5. NamingStrategy影响实体类的命名,需根据数据库命名规范选择
+
+## 扩展性考虑
+
+当前架构支持以下扩展:
+- 新的命名策略(需扩展EntityNamingStrategy枚举)
+- 自定义路径占位符(需扩展PathResolver)
+- 不同的模板引擎(需修改代码生成服务)
+- 多租户数据源(需在Provider中实现动态配置)
+
diff --git a/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.csproj b/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.csproj
index ac8bb82..381f37d 100644
--- a/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.csproj
+++ b/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.csproj
@@ -28,6 +28,7 @@
+
diff --git a/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.xml b/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.xml
index c1ac8db..d140827 100644
--- a/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.xml
+++ b/admin-server/MiaoYu.Api.Admin/MiaoYu.Api.Admin.xml
@@ -1384,6 +1384,199 @@
+
+
+ 数据源配置
+
+
+
+
+ 数据库标识(如:Admin, MiaoYuChat, LiveForum)
+
+
+
+
+ 显示名称
+
+
+
+
+ 实体项目命名空间
+
+
+
+
+ 实体类路径模板(支持占位符:{RootPath}, {Namespace}, {EntityName}, {EntityNamePlural}, {TableName})
+
+
+
+
+ 服务层路径模板
+
+
+
+
+ 控制器路径模板
+
+
+
+
+ 前端Index页面路径模板
+
+
+
+
+ 前端Info页面路径模板
+
+
+
+
+ 前端Service路径模板
+
+
+
+
+ 代码生成模板目录
+
+
+
+
+ 实体类命名规则(保持原名 or 驼峰转换)
+
+
+
+
+ 排序权重(数字越小越靠前)
+
+
+
+
+ 数据源常量
+
+
+
+
+ 后台管理系统数据库
+
+
+
+
+ 喵语AI聊天数据库
+
+
+
+
+ 直播论坛数据库(预留)
+
+
+
+
+ 实体命名策略
+
+
+
+
+ 保持数据库表名原样
+
+
+
+
+ 转换为驼峰命名(去除前缀下划线)
+
+
+
+
+ 数据源提供者接口
+
+
+
+
+ 数据源配置
+
+
+
+
+ 获取该数据源的所有表信息
+
+ 表信息列表
+
+
+
+ 获取DbContext(用于获取FreeSql实例)
+
+ 数据库上下文
+
+
+
+ 数据源扩展方法
+
+
+
+
+ 从 Schema 中提取数据库标识
+
+ Schema字符串
+ 数据库标识
+
+
+
+ 清理 Schema(移除数据库标识)
+
+ Schema字符串
+ 清理后的Schema
+
+
+
+ 数据源管理器
+
+
+
+
+ 构造函数(通过依赖注入自动收集所有IDataSourceProvider实现)
+
+ 所有数据源提供者
+
+
+
+ 获取所有数据源提供者
+
+ 数据源提供者集合
+
+
+
+ 根据数据库标识获取数据源提供者
+
+ 数据库标识(如:Admin, MiaoYuChat)
+ 数据源提供者,如果未找到返回null
+
+
+
+ 获取所有数据源的表信息
+
+ 所有表信息列表
+
+
+
+ 路径解析器
+
+
+
+
+ 解析路径模板
+
+ 路径模板(支持占位符)
+ 数据源配置
+ 表名
+ 解析后的完整路径
+
+
+
+ 根据命名策略获取实体名
+
+ 表名
+ 命名策略
+ 实体名
+
代码生成服务
@@ -1504,13 +1697,15 @@
代码生成服务
-
+
-
+ 构造函数
-
-
-
+ 数据库表服务
+ Razor视图渲染器
+ Web宿主环境
+ 数据源管理器
+ 路径解析器
@@ -1526,9 +1721,10 @@
- 根据 lowCodeTable 填充路径
+ 根据 lowCodeTable 填充路径(支持多数据源)
-
+ 低代码表配置
+ 填充路径后的低代码表配置
@@ -1539,42 +1735,42 @@
- 生成model
+ 生成model(支持多数据源)
- 生成service
+ 生成service(支持多数据源)
- 生成controller
+ 生成controller(支持多数据源)
- 生成service js
+ 生成service js(支持多数据源)
- 生成 index vue
+ 生成 index vue(支持多数据源)
- 生成 info vue
+ 生成 info vue(支持多数据源)
@@ -1672,19 +1868,21 @@
数据库表服务
-
+
-
+ 构造函数
-
-
-
+ 内存缓存
+ 低代码表仓储
+ 低代码表字段仓储
+ 图片配置仓储
+ 数据源管理器
- 获取所有的表 包含表下面的列
+ 获取所有的表 包含表下面的列(支持多数据源)
-
+ 所有表信息列表
@@ -1765,7 +1963,7 @@
- 同步表
+ 同步表(支持多数据源)
@@ -1789,6 +1987,16 @@
+
+
+ Admin 数据源提供者
+
+
+
+
+ MiaoYuChat 数据源提供者
+
+
获取 EFCore 监控上下文
diff --git a/admin-server/MiaoYu.Api.Admin/Properties/launchSettings.json b/admin-server/MiaoYu.Api.Admin/Properties/launchSettings.json
index 01b18ff..d7a70a3 100644
--- a/admin-server/MiaoYu.Api.Admin/Properties/launchSettings.json
+++ b/admin-server/MiaoYu.Api.Admin/Properties/launchSettings.json
@@ -1,4 +1,4 @@
-{
+{
"profiles": {
"http": {
"commandName": "Project",
@@ -9,4 +9,5 @@
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5500"
}
+ }
}
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Api.Admin/appsettings.Development.json b/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
index e35ee4f..c45a817 100644
--- a/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
+++ b/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
@@ -2,7 +2,7 @@
// 连接字符串
"ConnectionStrings": {
// redis
- "Redis": "124.220.55.158:6379,defaultDatabase=10"
+ "Redis": "192.168.195.15:6379,defaultDatabase=10"
},
// pi计算 数据库管理
"AdminRepositoryOptions": {
@@ -14,7 +14,7 @@
//"ConnectionString": "Server=localhost; port=3306; Database=hzy_admin_mysql_20230227; uid=root; pwd=123456; Convert Zero Datetime=False"
//// 连接字符串 - sqlserver
//"ConnectionString": "Server=192.168.195.2;Database=MiaoYu;User ID=zpc;Password=zpc;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;",
- "ConnectionString": "Server=192.168.1.17;Database=HZY;User Id=sa;Password=Dbt@com@123;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
+ "ConnectionString": "Server=192.168.195.15;Database=HZY;User Id=sa;Password=Dbt@com@123;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
//// 连接字符串 - postgresql
//"ConnectionString": "User ID=postgres;Password=123456;Host=localhost;Port=5432;Database=hzy_microservices_pgsql_20230227;Pooling=true;TimeZone=Asia/Shanghai",
//// 连接字符串 - oracle
@@ -25,7 +25,15 @@
"DefaultDatabaseType": "SqlServer",
//是否监控EFCore程序
"IsMonitorEFCore": true,
- "ConnectionString": "Server=192.168.195.2;Database=MiaoYu;User ID=zpc;Password=zpc;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
+ "ConnectionString": "Server=192.168.195.15;Database=MiaoYu;User ID=sa;Password=Dbt@com@123;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
+
+ },
+ "LiveForumAdminRepositoryOptions": {
+ //默认数据库类型 SqlServer 、MySql 、
+ "DefaultDatabaseType": "SqlServer",
+ //是否监控EFCore程序
+ "IsMonitorEFCore": true,
+ "ConnectionString": "Server=192.168.195.15;Database=LiveForumDB;User ID=sa;Password=Dbt@com@123;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
},
//服务器配置
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs b/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs
index 8400a0b..eef5233 100644
--- a/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs
@@ -1,5 +1,5 @@
namespace MiaoYu.Repository.ChatAI.Admin.Models;
-
+
public class ChatAdminRepositoryOptions : RepositoryOptions
{
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xml b/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xml
new file mode 100644
index 0000000..a6a2edf
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xsd b/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xsd
new file mode 100644
index 0000000..f35a69b
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/FodyWeavers.xsd
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminDbContext.cs b/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminDbContext.cs
new file mode 100644
index 0000000..dad5b65
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminDbContext.cs
@@ -0,0 +1,44 @@
+
+
+
+
+namespace MiaoYu.Repository.LiveForum.Admin
+{
+ ///
+ /// 后台管理系统数据库上下文
+ ///
+ [DbContextConfig($"Repository.*.Entities.*")]
+ public class LiveForumAdminDbContext : DbContext, IBaseDbContext
+ {
+ ///
+ /// 工作单元
+ ///
+ public IUnitOfWork UnitOfWork { get; }
+
+ public LiveForumAdminDbContext(DbContextOptions dbContextOptions) : base(dbContextOptions)
+ {
+ UnitOfWork = new UnitOfWorkImpl(this);
+ }
+
+ ///
+ /// 模型创建
+ ///
+ ///
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ #region 自动迁移种子数据
+
+ //OnModelCreatingPartial(modelBuilder);
+ //ModelBuilderExtensions.Seed(modelBuilder);
+
+ #endregion
+ var dbContextConfigAttribute = GetType().GetCustomAttribute()!;
+ var t = dbContextConfigAttribute.GetModelTypes(GetType());
+ dbContextConfigAttribute!.OnModelCreating(modelBuilder, t);
+
+
+ }
+
+
+ }
+}
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminRepositoryStartup.cs b/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminRepositoryStartup.cs
new file mode 100644
index 0000000..d683a4a
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/LiveForumAdminRepositoryStartup.cs
@@ -0,0 +1,138 @@
+
+
+namespace MiaoYu.Repository.LiveForum.Admin
+{
+ ///
+ /// 程序启动器
+ ///
+ [ImportStartupModule]
+ public class LiveForumAdminRepositoryStartup : StartupModule
+ {
+ ///
+ /// 程序启动器
+ ///
+ ///
+ public override void ConfigureServices(WebApplicationBuilder webApplicationBuilder)
+ {
+ var configuration = webApplicationBuilder.Configuration;
+ var services = webApplicationBuilder.Services;
+ var webHostEnvironment = webApplicationBuilder.Environment;
+
+ var repositoriesOptions = configuration
+ .GetSection(nameof(LiveForumAdminRepositoryOptions))
+ .Get() ?? throw new Exception("配置对象 空 异常!");
+
+ var connectionString = repositoriesOptions?.ConnectionString;
+
+ connectionString = string.IsNullOrWhiteSpace(connectionString) ?
+ configuration["ConnectionStrings:" + repositoriesOptions!.DefaultDatabaseType.ToString()] :
+ connectionString;
+
+ services.AddDbContextFactory(optionsBuilder =>
+ {
+ switch (repositoriesOptions.DefaultDatabaseType)
+ {
+ case DefaultDatabaseType.SqlServer:
+ optionsBuilder
+ .UseSqlServer(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.MySql:
+ optionsBuilder
+ .UseMySql(connectionString, MySqlServerVersion.LatestSupportedServerVersion, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.PostgreSql:
+ //EnableLegacyTimestampBehavior 启动旧行为,避免时区问题,存储时间报错
+ AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
+ optionsBuilder
+ .UseNpgsql(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.Oracle:
+ optionsBuilder
+ .UseOracle(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ default:
+ break;
+ }
+
+ if (webHostEnvironment.IsDevelopment())
+ {
+ var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
+ // sql 日志写入控制台
+ optionsBuilder.UseLoggerFactory(loggerFactory);
+ }
+
+ // 懒加载代理
+ //options.UseLazyLoadingProxies();
+ //添加 EFCore 监控 和 动态表名
+ optionsBuilder.AddEntityFrameworkMonitor(repositoriesOptions.IsMonitorEFCore);
+ optionsBuilder.AddInterceptors(new AuditInterceptor());
+ });
+
+ services.AddEntityFrameworkRepositories(repositoriesOptions, (auditOptions) =>
+ {
+ // 你的自定义审计字段 ...
+ //auditOptions.Add(new AuditOptions()
+ //{
+ // CreationTimeFieldName = nameof(ICreateEntityV2.CreateTime),
+ // CreatorUserIdFieldName = "",
+ // LastModificationTimeFieldName = nameof(IUpdateEntityV2.UpdateTime),
+ // LastModifierUserIdFieldName = "",
+ // DeletionTimeFieldName = "UpdateTime",
+ // DeleterUserIdFieldName = "UpdateBy",
+ // IsDeletedFieldName = "DelFlag",
+ //});
+ }, (freesqlOptions) =>
+ {
+ freesqlOptions.FreeSqlAuditAopList?.Add(new FreeSqlAuditAop());
+ freesqlOptions.FreeSqlAction = (freeSql) =>
+ {
+ freeSql.Aop.CurdAfter += (object? sender, FreeSql.Aop.CurdAfterEventArgs curdAfter) =>
+ {
+ var stringBuilder = new StringBuilder();
+ stringBuilder.Append($"\r\n====[FreeSql 开始 耗时: {curdAfter.ElapsedMilliseconds} ms]=========");
+ stringBuilder.Append($"\r\n{curdAfter.Sql}");
+ stringBuilder.Append($"\r\n====[FreeSql 结束 线程Id:{Environment.CurrentManagedThreadId}]=========");
+ LogUtil.Log.Warning(stringBuilder.ToString());
+ };
+ };
+ });
+ }
+
+ ///
+ /// Configure
+ ///
+ ///
+ public override void Configure(WebApplication webApplication)
+ {
+ // 使用 DbContext
+ #region 开发环境检测是否需要数据库迁移
+
+ //if (webApplication.Environment.IsDevelopment())
+ //{
+ // // 自动迁移 (如果迁移文件有变动)
+ // using var scope = webApplication.Services.CreateScope();
+ // using var adminDbContext = scope.ServiceProvider.GetService();
+ // if (adminDbContext!.Database.GetPendingMigrations().Count() > 0)
+ // {
+ // try
+ // {
+ // adminDbContext.Database.Migrate();
+ // }
+ // catch (Exception ex)
+ // {
+ // LogUtil.Log.Error(ex.Message, ex);
+ // }
+ // }
+ //}
+
+ #endregion
+
+ }
+
+
+ }
+}
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.csproj b/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.csproj
new file mode 100644
index 0000000..90952a8
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net8.0
+ enable
+ enable
+ True
+ $(MSBuildProjectName).xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.xml b/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.xml
new file mode 100644
index 0000000..c14410d
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/MiaoYu.Repository.LiveForum.Admin.xml
@@ -0,0 +1,41 @@
+
+
+
+ MiaoYu.Repository.LiveForum.Admin
+
+
+
+
+ 后台管理系统数据库上下文
+
+
+
+
+ 工作单元
+
+
+
+
+ 模型创建
+
+
+
+
+
+ 程序启动器
+
+
+
+
+ 程序启动器
+
+
+
+
+
+ Configure
+
+
+
+
+
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/Models/LiveForumAdminRepositoryOptions.cs b/admin-server/MiaoYu.Repository.LiveForum.Admin/Models/LiveForumAdminRepositoryOptions.cs
new file mode 100644
index 0000000..3a48265
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/Models/LiveForumAdminRepositoryOptions.cs
@@ -0,0 +1,6 @@
+
+
+
+public class LiveForumAdminRepositoryOptions : RepositoryOptions
+{
+}
diff --git a/admin-server/MiaoYu.Repository.LiveForum.Admin/Usings.cs b/admin-server/MiaoYu.Repository.LiveForum.Admin/Usings.cs
new file mode 100644
index 0000000..4ea9bca
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.LiveForum.Admin/Usings.cs
@@ -0,0 +1,27 @@
+global using MiaoYu.Core.EntityFramework;
+global using MiaoYu.Core.EntityFramework.Interceptors;
+global using MiaoYu.Core.Quartz.Models;
+global using HZY.Framework.Core.AspNetCore;
+global using HZY.Framework.Core.Quartz;
+global using HZY.Framework.Repository.EntityFramework;
+global using HZY.Framework.Repository.EntityFramework.Attributes;
+global using HZY.Framework.Repository.EntityFramework.Models;
+global using HZY.Framework.Repository.EntityFramework.Models.Enums;
+global using HZY.Framework.Repository.EntityFramework.Models.Standard;
+global using HZY.Framework.Repository.EntityFramework.Repositories;
+global using HZY.Framework.Repository.EntityFramework.Repositories.Impl;
+global using Microsoft.AspNetCore.Builder;
+global using Microsoft.AspNetCore.Hosting;
+global using Microsoft.EntityFrameworkCore;
+global using Microsoft.EntityFrameworkCore.Infrastructure;
+global using Microsoft.Extensions.Caching.Memory;
+global using Microsoft.Extensions.Configuration;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Hosting;
+global using Microsoft.Extensions.Logging;
+global using System.ComponentModel.DataAnnotations;
+global using System.ComponentModel.DataAnnotations.Schema;
+global using System.Reflection;
+global using MiaoYu.Core.Logs;
+global using System.Text;
+global using MiaoYu.Core.EntityFramework.Models;
\ No newline at end of file