zhanwencai 1 год назад
Родитель
Сommit
45667b5fe6

+ 49 - 0
webServer/src/config/sdk.sql

@@ -0,0 +1,49 @@
+DROP TABLE IF EXISTS `game_order`;
+CREATE TABLE `game_order` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `order_id` varchar(50) NOT NULL DEFAULT '' COMMENT '订单id',
+  `uid` varchar(100) NOT NULL DEFAULT '' COMMENT '用户id',
+  `status` int(11) NOT NULL DEFAULT '1' COMMENT '订单状态 1未支付 2成功 3失败',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
+  `out_trade_no` varchar(255) NOT NULL DEFAULT '' COMMENT '第三方订单id',
+  `level` int(11) NOT NULL DEFAULT '0' COMMENT '角色等级',
+  `role_id` varchar(50) NOT NULL DEFAULT '' COMMENT '角色id',
+  `role_name` varchar(100) NOT NULL DEFAULT '' COMMENT '角色名',
+  `product_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品id',
+  `amount` int(11) NOT NULL DEFAULT '0' COMMENT '订单金额 单位分',
+  `server_id` int(11) NOT NULL DEFAULT '0' COMMENT '区服id',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
+
+
+DROP TABLE IF EXISTS `game_server`;
+CREATE TABLE `game_server` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '区服名',
+  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态',
+  `ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'ip',
+  `port` int(11) NOT NULL DEFAULT '0' COMMENT '端口',
+  `tag` varchar(50) NOT NULL DEFAULT 'default' COMMENT '标识',
+  `tips` varchar(1000) NOT NULL DEFAULT '' COMMENT '公告',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='区服表';
+
+
+DROP TABLE IF EXISTS `game_version`;
+CREATE TABLE `game_version` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `version` varchar(50) NOT NULL DEFAULT '' COMMENT '版本',
+  `download_url` varchar(100) NOT NULL DEFAULT '' COMMENT '下载链接',
+  `tag` varchar(50) NOT NULL DEFAULT 'default' COMMENT '标识',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='游戏版本';
+
+CREATE TABLE `game_enter_server` (
+
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `uid` varchar(50) NOT NULL DEFAULT '' COMMENT '区服名',
+  `server_id` varchar(50) NOT NULL DEFAULT '' COMMENT '区服id',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '进区时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='进区记录表';

+ 82 - 44
webServer/src/controller/ApiController.ts

@@ -632,7 +632,7 @@ class ApiController {
                 console.log('发货结果', result)
                 ctx.body = result
                 break;
-                case '360':
+            case '360':
                 var result = await CallPay360(ctx)
                 console.log('发货结果', result)
                 ctx.body = result
@@ -679,49 +679,87 @@ class ApiController {
             server_id
         } = ctx.request.body
 
-        if (!uid || !server_id) {
-            ctx.body = ret
+        let url = await getServerList(server_id, 'default')
+        if (!url) {
+            ctx.body = { code: -1, message: `区服id错误: serverId ${server_id}`, data: '' }
             return
         }
 
-        await ctx.redis.client.set(`enter_sever_${uid}`, server_id);
-        ctx.body = {
-            code: 1,
-            msg: '请求成功'
+        logger.info("create params:", { "params": ctx.request.body })
+
+        if (!server_id || !uid) {
+            ctx.body = { code: -1, message: '参数错误!!', data: '' }
+            return
+        }
+
+        const create_time = formatDate(new Date())
+        const serverInfo = (await Server.checkEnterServerByUid(uid, server_id))[0]
+        let res = null
+
+        if (serverInfo) {
+
+            res = await Server.updateEnterServer(
+                serverInfo.id,
+                create_time
+            );
+
+        } else {
+            res = await Server.enterServer(
+                uid,
+                server_id,
+                create_time
+            );
+        }
+
+        if (res.affectedRows > 0) {
+            ctx.body = { code: 0, message: '请求成功', data: '' }
+        } else {
+            ctx.body = { code: -1, message: '请求失败', data: '' }
         }
     }
 
     async getLastServerList(ctx) {
-
         let {
             uid,
         } = ctx.request.body
 
-        const tag = ctx.query.tag || 'default'
-        const enter_server = await ctx.redis.client.get(`enter_sever_${uid}`);
-
+        let tag = 'default'
+        let data = [];
         let isNewAccount = 1
-        let serverInfo = null
+        let enterServerList = (await Server.getEnterServerListByUid(uid))
 
-        if (enter_server) {
-            serverInfo = (await Server.getServerListById(tag, enter_server))[0]
+        if (enterServerList.length > 0) {
             isNewAccount = 0
+            enterServerList.forEach(function (element) {
+                data.push({
+                    "channel": "Thailand", //渠道固定
+                    "minSid": 1,            //最小服务器
+                    "maxSid": 10,         //最大服务器 这里会控制 服务器列表显示的数量
+                    "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
+                    //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
+                    "sid": element.server_id || 1,
+                    "id": element.server_id || 1,
+                    "name": element.name || "1区",
+                    "server": element.ip ? `ws://${element.ip}:${element.port}` : "",
+                    "status": element.status || 0,
+                })
+            });
+
         } else {
             const servers = (await Server.getServerList(tag))
-            serverInfo = servers[servers.length - 1]
-        }
-
-        let data = {
-            "channel": "Thailand", //渠道固定
-            "minSid": 1,            //最小服务器
-            "maxSid": 10,         //最大服务器 这里会控制 服务器列表显示的数量
-            "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
-            //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
-            "sid": serverInfo.id || 1,
-            "id": serverInfo.id || 1,
-            "name": serverInfo.name || "1区",
-            "server": serverInfo.ip ? `ws://${serverInfo.ip}:${serverInfo.port}` : "",
-            "status": serverInfo.status || 0,
+            const serverInfo = servers[servers.length - 1]
+            data.push({
+                "channel": "Thailand", //渠道固定
+                "minSid": 1,            //最小服务器
+                "maxSid": 10,         //最大服务器 这里会控制 服务器列表显示的数量
+                "isNewAccount": isNewAccount, //1为新号 会弹出用户协议
+                //以下是最近登陆的服务器 (不可为空 如果没有参数可以填最后一个区)
+                "sid": serverInfo.id || 1,
+                "id": serverInfo.id || 1,
+                "name": serverInfo.name || "1区",
+                "server": serverInfo.ip ? `ws://${serverInfo.ip}:${serverInfo.port}` : "",
+                "status": serverInfo.status || 0,
+            })
         }
 
         ctx.body = data
@@ -769,33 +807,33 @@ class ApiController {
         let url = await getServerList(data.serverId, 'default')
         let err = ""
         if (!url) {
-            
+
             ctx.body = {
                 code: 1,
                 msg: `区服id错误: serverId ${data.serverId}`
             }
             err = "server id invalid"
         }
-        let param:string = ""
+        let param: string = ""
         // 验证CDK
         if (err.length == 0) {
-            let batchInfo = await CDK.getCDKItemList(ctx,data.code)
+            let batchInfo = await CDK.getCDKItemList(ctx, data.code)
             if (batchInfo.length <= 0) {
                 err = "cdk not found"
-            }else {
+            } else {
                 err = await CDK.checkCDK(ctx, data.code, data.serverId)
                 param = JSON.stringify({
-                    type:"UseCDK",
-                    err:err,
-                    batchInfo:batchInfo
+                    type: "UseCDK",
+                    err: err,
+                    batchInfo: batchInfo
                 })
-            } 
+            }
         }
         // 固定码
-        if(err == "cdk not found" || err == "server id invalid"){
+        if (err == "cdk not found" || err == "server id invalid") {
             param = JSON.stringify({
-                code:data.code,
-                type:"UseFixCDK"
+                code: data.code,
+                type: "UseFixCDK"
             })
         }
         // 测试是否可以调用过去
@@ -804,29 +842,29 @@ class ApiController {
         Msg.connect(url, Account);
         new Promise((resolve) => {
             setTimeout(async () => {
-                Msg.CG_TEST_PROTO(data.account,param)
+                Msg.CG_TEST_PROTO(data.account, param)
             }, 500);
         });
         ctx.body = {
-            code: 0,    
+            code: 0,
             msg: "success"
         }
     }
 
-    async validCDK (ctx) {
+    async validCDK(ctx) {
         let data = ctx.request.body
         if (data.code.length == 10) {
             let ret = await CDK.useCDK(ctx, data.code)
             if (ret != "success") {
                 ctx.body = {
-                    code: 1,    
+                    code: 1,
                     msg: ret
                 }
                 return
             }
         }
         ctx.body = {
-            code: 0,    
+            code: 0,
             msg: "success"
         }
     }

+ 34 - 8
webServer/src/model/ServerModel.ts

@@ -3,24 +3,50 @@ import { query } from '../sql/query'; // 确保路径是正确的
 class ServerModel {
     //获取
     async getServerList(tag: any) {
-        return await query(`SELECT id,status,name,ip,port,tips FROM game_server WHERE tag = ?`,[tag])
+        return await query(`SELECT id,status,name,ip,port,tips FROM game_server WHERE tag = ?`, [tag])
     }
-    async getServerListById(tag: any, id:any) {
-        return await query(`SELECT id,status,name,ip,port,tips FROM game_server WHERE tag = ? and id = ? `,[tag,id])
+    async getServerListById(tag: any, id: any) {
+        return await query(`SELECT *  FROM game_enter_server WHERE  id = ? `, [id])
     }
     async getAllServerList(tag: any) {
-        const rows = await  query(`SELECT id,status,name,ip,port,tips FROM game_server WHERE tag = ?`,[tag])
+        const rows = await query(`SELECT id,status,name,ip,port,tips FROM game_server WHERE tag = ?`, [tag])
         const resultArray = (rows as any[]).map(row => {
             return {
-                sid : row.id,
-                id : row.id,
+                sid: row.id,
+                id: row.id,
                 name: row.name,
-                server :`ws://${row.ip}:${row.port}`,
+                server: `ws://${row.ip}:${row.port}`,
                 status: row.status,
             };
-          });
+        });
         return resultArray
     }
+
+    async checkEnterServerByUid(uid: any, server_id: any) {
+        return await query(`SELECT * FROM game_enter_server where uid  = ? and server_id  = ?`, [uid, server_id])
+    }
+
+    async getEnterServerListByUid(uid: any) {
+        return await query(`SELECT ges.id, ges.uid, ges.server_id, ges.create_time as last_login_time , gs.ip, gs.port,gs.status,gs.name FROM game_enter_server as ges left join game_server as gs on ges.server_id = gs.id WHERE ges.uid = ? order by ges.create_time desc `, [uid])
+    }
+
+    //记录进区
+    async enterServer(
+        uid: any,
+        server_id: any,
+        create_time: string
+    ) {
+        return await query(`INSERT INTO game_enter_server(uid,server_id,create_time) VALUES('${uid}','${server_id}', '${create_time}')`, [])
+    }
+
+    //更新进区
+    async updateEnterServer(
+        id: any,
+        create_time: string
+    ) {
+        const sql = 'UPDATE game_enter_server SET create_time = ? WHERE id = ?';
+        return await query(sql, [create_time,id])
+    }
 }
 
 module.exports = new ServerModel()