Forráskód Böngészése

Merge branch 'master' of https://git.cocorobo.cn/CocoRoboLabs/pbl-api

SanHQin 1 hete
szülő
commit
89ca939097
7 módosított fájl, 357 hozzáadás és 13 törlés
  1. 11 0
      app.js
  2. 76 0
      baoantoken.js
  3. 102 0
      mongo.js
  4. 1 0
      mysql.js
  5. 131 0
      package-lock.json
  6. 7 0
      package.json
  7. 29 13
      pbl.js

+ 11 - 0
app.js

@@ -4,6 +4,8 @@ var app = express();                 // define our app using express
 var bodyParser = require('body-parser');
 var request = require("request");
 const edurouter = require('./pbl');
+const mongo = require('./mongo');
+const baoantoken = require('./baoantoken')
 const morgan = require('morgan');
 var path = require("path");
 var port = "7003";        // set our port
@@ -38,8 +40,17 @@ app.use(cors({
     credentials: true // enable set cookie
 }));
 */
+
+
 // all of our routes will be prefixed with /api
 app.use('/api/pbl', edurouter);
+app.use('/api/mongo', mongo);
+app.use('/api/bat/getToken', async function (req, res, next) {
+    let ticket = req.query.ticket
+    await baoantoken.getToken(ticket, res)
+});
+
+
 // app.use('/game', game);
 
 app.all('/download', function (req, res, next) {

+ 76 - 0
baoantoken.js

@@ -0,0 +1,76 @@
+const axios = require('axios');
+const crypto = require('crypto');
+
+// 设置请求的参数
+var appId = '436417AD26340B3ACAA495DC2588B4FB'; // 替换为实际的appId
+var appKey = 'be246fac538b42f8a2ec006e3940018c'; // 替换为实际的appKey
+
+/*
+获取用户登录token
+*/
+async function getAccessToken() {
+    try {
+        // 获取当前时间戳(毫秒)
+        const timeStamp = Date.now().toString();
+
+        // 进行SHA1-HMAC加密
+        const keyInfo = crypto.createHmac('sha1', appKey)
+            .update(appId + appKey + timeStamp)
+            .digest('hex');
+
+        // 设置请求的URL和参数
+        const url = 'https://bjt.baoan.edu.cn/api/apigateway/getAccessToken';
+        const params = {
+            appId: appId,
+            timeStamp: timeStamp,
+            keyInfo: keyInfo
+        };
+
+        // 发送POST请求并返回响应数据
+        const response = await axios.post(url, params);
+        return response.data;
+
+    } catch (error) {
+        console.error('请求失败:', error);
+        throw error;  // 重新抛出错误以供外部调用处理
+    }
+}
+
+
+async function getToken(ticket, res) {
+    try {
+        // https://bjt.baoan.edu.cn/api/user/openapi/user/verify-ticket-info?ticket=**&accessToken={{ACCESS_TOKEN}}
+
+        // 设置接口的 URL 和 accessToken
+        const apiUrl = 'https://bjt.baoan.edu.cn/api/user/openapi/user/verify-ticket-info';
+        const data = await getAccessToken();  // 请替换为实际的accessToken
+        const accessToken = data.tokenInfo.accessToken
+        // 构造请求的 URL
+        const url = `${apiUrl}?ticket=${ticket}&accessToken=${accessToken}`;
+        // 发送 GET 请求
+        const response = await axios.get(url)
+        // return response.data;
+        res.status(200).json({ data: response.data });
+    } catch (error) {
+        console.error('请求失败:', error);
+        res.status(500).json({ data: {}, error: error });
+        throw error;  // 重新抛出错误以供外部调用处理
+    }
+
+}
+
+module.exports = { getToken };
+
+/*
+// 使用示例
+(async () => {
+
+    try {
+        const result = await getAccessToken(appId, appKey);
+        console.log('响应数据:', result);
+    } catch (error) {
+        console.error('获取AccessToken失败:', error);
+    }
+})();
+
+*/

+ 102 - 0
mongo.js

@@ -0,0 +1,102 @@
+// const { MongoClient } = require('mongodb');
+var express = require('express');
+var router = express.Router();
+const querystring = require('querystring');
+
+var us = {
+    mongo: require('mongodb'),
+    client: null // 用于存储 MongoClient 实例
+};
+
+// 初始化 MongoDB 连接
+us.initMongoConnection = async function (host, database) {
+    if (!us.client) {
+        const url = host; // MongoDB 连接地址
+        us.client = new us.mongo.MongoClient(url, {
+            useNewUrlParser: true,
+            useUnifiedTopology: true,
+            maxPoolSize: 10000, // 设置连接池没有上限
+            serverSelectionTimeoutMS: 5000, // 服务器选择超时
+            socketTimeoutMS: 45000 // 套接字超时
+        });
+        try {
+            await us.client.connect();
+        } catch (err) {
+            console.error("MongoDB 连接失败", err);
+            throw err; // 抛出错误以便调用者处理
+        }
+    }
+    return us.client.db(database); // 返回数据库实例
+}
+
+async function updateUserData(host, database, cename, data, res) {
+    const db = await us.initMongoConnection(host, database); // 连接数据库
+    try {
+        const collection = db.collection(cename); // collection设置
+        const dateKey = Object.keys(data)[0]; // 获取日期键
+        const username = Object.keys(data[dateKey])[0]; // 获取用户ID
+        console.log(`更新用户数据:${username}`);
+        // 使用 upsert 更新或插入文档
+        await collection.updateOne(
+            { [dateKey]: { $exists: true } }, // 查询条件, [`${dateKey}.${username}`]: { $exists: true } 
+            {
+                $push: { [`${dateKey}.${username}`]: data[dateKey][username] }, // 将用户数据推入数组
+            },
+            { upsert: true } // 如果没有数据,默认创建一条数据
+        );
+        console.log('数据更新成功');
+        res.end(JSON.stringify({ status: "1" }))
+    } catch (err) {
+        res.end(JSON.stringify({ status: "0" }))
+        console.error('更新失败', err);
+    }
+}
+
+/*
+// 示例调用
+updateUserData("mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin", "cocolog", "applog", {
+    "2025-04-01": {
+        "username":
+        {
+            userid: "",
+            date: "",
+            appname: "",
+            status: ""
+        }
+    }
+});
+*/
+
+//查找有无学校
+router.route('/updateUserData').all((req, res, next) => {
+    let today = new Date();
+    let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
+    let data = req.body[0];
+    let decryptedData = {};
+    for (let key in data) {
+        decryptedData[key] = decodeURIComponent(data[key]);
+    }
+    updateUserData("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", {
+        [date]: {
+            [decryptedData.username]: // 使用变量username作为键
+            {
+                userid: decryptedData.userid,
+                accountNumber: decryptedData.accountNumber,
+                date: today,
+                appname: decryptedData.appname,
+                appid: decryptedData.appid,
+                status: decryptedData.status
+            }
+        }
+    }, res);
+});
+
+
+queryString = function (url) {
+    var a = url.split("?");
+    var json = querystring.parse(a[1])
+    return json;
+}
+
+
+module.exports = router;

+ 1 - 0
mysql.js

@@ -21,6 +21,7 @@ us.mysqlconnection = function(host, database) {
             // host: '123.58.32.151', //数据库地址
             user: "root", //用户名
             password: host == '127.0.0.1' ? "root" : "cocorobo", //密码
+            charset: 'utf8mb4_general_ci',
             database: database, //数据库名称
             // port: 20007 //端口
             port: port //端口

+ 131 - 0
package-lock.json

@@ -3,6 +3,28 @@
   "requires": true,
   "lockfileVersion": 1,
   "dependencies": {
+    "@types/node": {
+      "version": "22.13.13",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.13.tgz",
+      "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==",
+      "requires": {
+        "undici-types": "~6.20.0"
+      }
+    },
+    "@types/webidl-conversions": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
+      "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
+    },
+    "@types/whatwg-url": {
+      "version": "8.2.2",
+      "resolved": "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
+      "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
+      "requires": {
+        "@types/node": "*",
+        "@types/webidl-conversions": "*"
+      }
+    },
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz",
@@ -107,6 +129,11 @@
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
     },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+    },
     "basic-auth": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/basic-auth/download/basic-auth-2.0.1.tgz",
@@ -174,6 +201,23 @@
         "concat-map": "0.0.1"
       }
     },
+    "bson": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmmirror.com/bson/-/bson-4.7.2.tgz",
+      "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
+      "requires": {
+        "buffer": "^5.6.0"
+      }
+    },
+    "buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "requires": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
     "bytes": {
       "version": "3.1.0",
       "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&sync_timestamp=1589682741197&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz",
@@ -271,6 +315,11 @@
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
       "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
     },
+    "denque": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/denque/-/denque-1.5.1.tgz",
+      "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
+    },
     "depd": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -561,6 +610,11 @@
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
     "ignore-walk": {
       "version": "3.0.3",
       "resolved": "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz",
@@ -657,6 +711,11 @@
       "resolved": "https://registry.npmjs.org/loader/-/loader-2.1.1.tgz",
       "integrity": "sha1-iEixKj8AVy5aQkkzPM2seXc/tAI="
     },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
     "lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz",
@@ -677,6 +736,12 @@
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
     },
+    "memory-pager": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz",
+      "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+      "optional": true
+    },
     "merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -743,6 +808,26 @@
         "minimist": "^1.2.5"
       }
     },
+    "mongodb": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-4.0.1.tgz",
+      "integrity": "sha512-Ll2YCciRgbFN2jdfSqW1vhxvAcnqu+5ZlrTZNaEg+hZqKREg4xiUV56ZAtTjC02skfoTirHY5jQwtg7mBxqfug==",
+      "requires": {
+        "bson": "^4.4.0",
+        "denque": "^1.5.0",
+        "mongodb-connection-string-url": "^1.0.1",
+        "saslprep": "^1.0.0"
+      }
+    },
+    "mongodb-connection-string-url": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz",
+      "integrity": "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==",
+      "requires": {
+        "@types/whatwg-url": "^8.0.0",
+        "whatwg-url": "^8.4.0"
+      }
+    },
     "morgan": {
       "version": "1.10.0",
       "resolved": "https://registry.npm.taobao.org/morgan/download/morgan-1.10.0.tgz",
@@ -1246,6 +1331,15 @@
       "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&sync_timestamp=1589682784154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz",
       "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
     },
+    "saslprep": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/saslprep/-/saslprep-1.0.3.tgz",
+      "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+      "optional": true,
+      "requires": {
+        "sparse-bitfield": "^3.0.3"
+      }
+    },
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
@@ -1324,6 +1418,15 @@
       "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1589682814780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz",
       "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw="
     },
+    "sparse-bitfield": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+      "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
+      "optional": true,
+      "requires": {
+        "memory-pager": "^1.0.2"
+      }
+    },
     "split2": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz",
@@ -1419,6 +1522,14 @@
         "punycode": "^2.1.1"
       }
     },
+    "tr46": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz",
+      "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+      "requires": {
+        "punycode": "^2.1.1"
+      }
+    },
     "tunnel-agent": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -1441,6 +1552,11 @@
         "mime-types": "~2.1.24"
       }
     },
+    "undici-types": {
+      "version": "6.20.0",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz",
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="
+    },
     "unpipe": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -1484,6 +1600,21 @@
         "extsprintf": "^1.2.0"
       }
     },
+    "webidl-conversions": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+      "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
+    },
+    "whatwg-url": {
+      "version": "8.7.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz",
+      "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+      "requires": {
+        "lodash": "^4.7.0",
+        "tr46": "^2.1.0",
+        "webidl-conversions": "^6.1.0"
+      }
+    },
     "which": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz",

+ 7 - 0
package.json

@@ -135,6 +135,7 @@
       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
       "version": "1.1.0"
     },
+    "follow-redirects": "^1.15.9",
     "forwarded": {
       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -217,6 +218,7 @@
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
       "version": "2.1.17"
     },
+    "mongodb": "^4.0.1",
     "morgan": "^1.9.1",
     "ms": {
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
@@ -293,6 +295,10 @@
       "version": "0.1.7"
     },
     "pg": "^8.13.0",
+    "pg-connection-string": "^2.7.0",
+    "pg-pool": "^3.8.0",
+    "pg-protocol": "^1.8.0",
+    "pg-types": "^4.0.2",
     "process-nextick-args": {
       "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
@@ -307,6 +313,7 @@
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
       "version": "2.0.2"
     },
+    "proxy-from-env": "^1.1.0",
     "qs": {
       "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",

+ 29 - 13
pbl.js

@@ -2259,7 +2259,7 @@ router.route("/addRaceUser").all((req, res, next) => {
             } else if (num > 100) {
                 num = "SZ" + num + "@gdae.com";
             }
-            y = [userid, num, bcrypt.hashSync("123456", bcrypt.genSaltSync(10))];
+            y = [userid, num, bcrypt.hashSync("Coco1234", bcrypt.genSaltSync(10))];
             //参数拼接,注册
             y.unshift(_mysqlLabor[0], _mysqlLabor[1], "upRaceUserNamePassword");
             mysql.usselect(y, function(ret) {
@@ -6309,7 +6309,7 @@ router.route("/batchRegistrationMore").post(function(req, res, next) {
     for (let i = 0; i < arr.length; i++) {
         let _username = encodeURIComponent(arr[i].name);
         let _mail = encodeURIComponent(arr[i].mail)
-        let _password = users.password || "123456";
+        let _password = users.password || "Coco1234";
         let _alias = encodeURIComponent(arr[i].name)
         let _oid = users.oid;
         let _ph = encodeURIComponent(arr[i].phone ? arr[i].phone : "")
@@ -6754,7 +6754,7 @@ router.route("/teacherRegistration").post(function(req, res, next) {
     //循环注册
     var _username = users.alias;
     var _mail = users.username;
-    var _password = users.password || "123456";
+    var _password = users.password || "Coco1234";
     var _alias = users.alias;
     var _org = users.org;
     var _oid = users.oid;
@@ -6852,7 +6852,7 @@ router.route("/batchRegistrationMore1").post(function(req, res, next) {
     for (let i = 0; i < arr.length; i++) {
         let _username = encodeURIComponent(arr[i].name)
         let _mail = encodeURIComponent(arr[i].mail)
-        let _password = users.password || "123456";
+        let _password = users.password || "Coco1234";
         let _alias = encodeURIComponent(arr[i].name)
         let _org = users.org;
         let _oid = encodeURIComponent(arr[i].school)
@@ -6908,7 +6908,7 @@ router.route("/pbl_add_raceuser_oid").post(function(req, res, next) {
     for (let i = 0; i < arr.length; i++) {
         let _username = encodeURIComponent(arr[i].name)
         let _mail = encodeURIComponent(arr[i].mail)
-        let _password = users.password || "123456";
+        let _password = users.password || "Coco1234";
         let _oid = encodeURIComponent(arr[i].school)
         //加密密碼
         _password = bcrypt.hashSync(_password, bcrypt.genSaltSync(10));
@@ -6940,7 +6940,7 @@ router.route("/batchRegistration").post(function(req, res, next) {
     //循环注册
     var _username = users.alias;
     var _mail = users.username;
-    var _password = users.password || "123456";
+    var _password = users.password || "Coco1234";
     var _alias = users.alias;
     var _oid = users.oid;
     var _ph = users.ph;
@@ -6997,7 +6997,7 @@ router.route("/batchRegistrationSzdjg").post(function(req, res, next) {
     //循环注册
     var _username = users[0]; //名字
     var _mail = users[1]; //用户名 账号
-    var _password = "123456";
+    var _password = "Coco1234";
     var _alias = _username;
     var _org = users[2];
     var _oid = users[3];
@@ -7057,7 +7057,7 @@ router.route("/batchRegistrationSzdjg2").post(function(req, res, next) {
     //循环注册
     var _username = users[0]; //名字
     var _mail = users[1]; //用户名 账号
-    var _password = "123456";
+    var _password = "Coco1234";
     var _alias = _username;
     var _org = users[2];
     var _oid = users[3];
@@ -7119,7 +7119,7 @@ router.route("/batchRegistrationSzdjg3").post(function(req, res, next) {
     //循环注册
     var _username = users[0]; //名字
     var _mail = users[1]; //用户名 账号
-    var _password = "123456";
+    var _password = "Coco1234";
     var _alias = _username;
     var _org = users[2];
     var _oid = users[3];
@@ -7183,7 +7183,7 @@ router.route("/batchRegistrationUser").post(function(req, res, next) {
     //循环注册
     var _username = users.alias; //名字
     var _mail = users.username; //用户名 账号
-    var _password = "123456";
+    var _password = "Coco1234";
     var _alias = _username;
     var _org = users.org;
     var _oid = users.oid;
@@ -7247,7 +7247,7 @@ router.route("/batchRegistration1").post(function(req, res, next) {
     //循环注册
     var _username = users.alias;
     var _mail = users.username;
-    var _password = users.password || "123456";
+    var _password = users.password || "Coco1234";
     var _alias = users.alias;
     var _org = users.org;
     var _oid = users.oid;
@@ -7305,7 +7305,7 @@ router.route("/batchRegistrationOrg").post(function(req, res, next) {
     //循环注册
     var _username = users.alias;
     var _mail = users.username;
-    var _password = users.password || "123456";
+    var _password = users.password || "Coco1234";
     var _alias = users.alias;
     var _oid = users.oid;
     var _ph = users.ph;
@@ -7364,7 +7364,7 @@ router.route("/batchRegistrationMoreOrg").post(function(req, res, next) {
     for (let i = 0; i < arr.length; i++) {
         let _username = encodeURIComponent(arr[i].name)
         let _mail = encodeURIComponent(arr[i].mail)
-        let _password = users.password || "123456";
+        let _password = users.password || "Coco1234";
         let _alias = encodeURIComponent(arr[i].name)
         let _oid = users.oid;
         let _ph = encodeURIComponent(arr[i].phone ? arr[i].phone : "")
@@ -8934,6 +8934,22 @@ router.route("/getKnowledgeTag").all((req,res,next)=>{
 	postmysql(req, res, "getKnowledgeTag"); 
 })
 
+// 上传智能体模板
+router.route("/insertAppTem").all((req,res,next)=>{
+	postmysql(req, res, "insertAppTem"); 
+})
+
+// 删除智能体模板
+router.route("/deleteAppTem").all((req,res,next)=>{
+	postmysql(req, res, "deleteAppTem"); 
+})
+
+// 获取智能体模板
+router.route("/selectAppTem").get((req, res, next) => {
+    var json = queryString(req.url);
+    getmysql2(req, res, "selectAppTem", json["oid"], json["type"]);
+});
+
 //查询文件夹详情
 router.route("/getKnowledgeDetail").all((req,res,next)=>{
 	postmysql(req, res, "getKnowledgeDetail");