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