Explorar o código

新增配置管理

neo %!s(int64=2) %!d(string=hai) anos
pai
achega
6010c289af

+ 5 - 0
conf/ali-test/cfg_test.conf

@@ -1,3 +1,8 @@
1
+[app]
2
+gameKey=b8JKMN1UhanX
3
+
4
+[gameservers]
5
+web=127.0.0.1:8112
1 6
 
2 7
 [events]
3 8
 path=./log

+ 5 - 0
conf/neo/cfg_test.conf

@@ -1,3 +1,8 @@
1
+[app]
2
+gameKey=b8JKMN1UhanX
3
+
4
+[gameservers]
5
+web=127.0.0.1:8303
1 6
 
2 7
 [events]
3 8
 path=./log

+ 5 - 0
controllers/default.go

@@ -149,6 +149,11 @@ func getIndex(permission int64) []*NavInfo {
149 149
 			Name: "兑换码",
150 150
 			Url:  "exchangecode.html",
151 151
 		})
152
+		navInfo.IndexList = append(navInfo.IndexList, &IndexInfo{
153
+			Id:   models.ModelSystem,
154
+			Name: "配置管理",
155
+			Url:  "gameconfig.html",
156
+		})
152 157
 
153 158
 		navList = append(navList, navInfo)
154 159
 	}

+ 54 - 0
controllers/gameconfig.go

@@ -0,0 +1,54 @@
1
+// 实时数据
2
+package controllers
3
+
4
+import (
5
+	"box-gm/models"
6
+	"fmt"
7
+	"log"
8
+
9
+	"github.com/astaxie/beego"
10
+)
11
+
12
+type GameConfigController struct {
13
+	beego.Controller
14
+}
15
+
16
+func (c *GameConfigController) Get() {
17
+	userinfo := c.GetSession("user")
18
+	if userinfo == nil {
19
+		c.Ctx.Redirect(302, "/accountlogin")
20
+		return
21
+	}
22
+	c.Data["username"] = userinfo.(*LoginInfo).Username
23
+	c.Data["token"] = models.GetToken()
24
+	userPermission := models.GetPermission(userinfo.(*LoginInfo).Username)
25
+	if (userPermission & (1 << uint(models.ModelSystem))) == 0 {
26
+		c.Ctx.Redirect(302, "/accountlogin")
27
+		return
28
+	}
29
+
30
+	c.TplName = "gameconfig.tpl"
31
+}
32
+
33
+func (c *GameConfigController) Post() {
34
+	userinfo := c.GetSession("user")
35
+	log.Printf("GameConfigController Post userinfo[%v]", userinfo)
36
+	if userinfo == nil {
37
+		c.Ctx.Redirect(302, "/accountlogin")
38
+		return
39
+	}
40
+	ty := c.GetString("ty")
41
+	switch ty {
42
+	case "items":
43
+		models.UpdateItemConfig()
44
+	case "goods":
45
+		models.UpdateGoodsConfig()
46
+	default:
47
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": fmt.Sprintf("更新失败:不支持类型%s", ty)}
48
+		c.ServeJSON()
49
+		return
50
+	}
51
+
52
+	c.Data["json"] = &map[string]interface{}{"status": true, "info": fmt.Sprintf("更新[%s]成功", ty)}
53
+	c.ServeJSON()
54
+}

+ 2 - 0
main.go

@@ -143,6 +143,8 @@ func main() {
143 143
 	models.InitHotfixInfo()
144 144
 	models.InitBanIPInfo()
145 145
 	models.InitExchangeCodeInfo()
146
+	models.UpdateItemConfig()
147
+	models.UpdateGoodsConfig()
146 148
 
147 149
 	//模板初始化
148 150
 	initBeegoFunMap()

+ 91 - 0
models/goods.go

@@ -0,0 +1,91 @@
1
+/*
2
+ * @Descripttion:
3
+ * @version:
4
+ * @Author: Neo,Huang
5
+ * @Date: 2023-11-18 22:52:59
6
+ * @LastEditors: Neo,Huang
7
+ * @LastEditTime: 2023-11-19 16:04:30
8
+ */
9
+package models
10
+
11
+import (
12
+	"encoding/json"
13
+
14
+	"github.com/astaxie/beego"
15
+
16
+	"box-gm/utils"
17
+)
18
+
19
+type GoodsConfig struct {
20
+	Id    int    `json:"id"`   // 商品ID
21
+	Name  string `json:"name"` // 商品名称
22
+	Price int    `json:"rmb"`  // 商品价格
23
+}
24
+type GoodsConfigs []*GoodsConfig
25
+
26
+type RES_CONF_GOODS struct {
27
+	Code      int          `json:"code"`      // 错误码
28
+	GoodsList GoodsConfigs `json:"goodsList"` // 商品配置列表
29
+}
30
+
31
+var goodsConfigMap map[int]*GoodsConfig
32
+var goodsConfigs GoodsConfigs
33
+
34
+func init() {
35
+	goodsConfigMap = make(map[int]*GoodsConfig)
36
+}
37
+
38
+func UpdateGoodsConfig() (int, int) {
39
+	params := make(map[string]interface{})
40
+	params["name"] = "gm_get_conf_goods"
41
+
42
+	body, _ := json.Marshal(params)
43
+	host := utils.GetKeyConf("gameservers", "web")
44
+	sign := utils.Strtomd5(string(body) + utils.GetKeyConf("app", "gameKey"))
45
+	url := "http://" + host + "/json?sign=" + sign
46
+	buff, err := utils.SendAndRecvHTTP("POST", url, string(body))
47
+	if err != nil {
48
+		return 0, 0
49
+	}
50
+
51
+	var res RES_CONF_GOODS
52
+	err = json.Unmarshal(buff, &res)
53
+	if err != nil {
54
+		return 0, 0
55
+	}
56
+	if res.Code != 200 {
57
+		return 0, 0
58
+	}
59
+
60
+	oldCount := len(goodsConfigs)
61
+	goodsConfigMap = make(map[int]*GoodsConfig)
62
+	goodsConfigs = GoodsConfigs{}
63
+	for _, v := range res.GoodsList {
64
+		goodsConfigMap[v.Id] = v
65
+		goodsConfigs = append(goodsConfigs, v)
66
+	}
67
+
68
+	beego.Info("load goods config, oldCount: ", oldCount, "newCount", len(goodsConfigs))
69
+	return oldCount, len(goodsConfigs)
70
+}
71
+
72
+func GetGoodsName(id int) string {
73
+	item, ok := goodsConfigMap[id]
74
+	if !ok {
75
+		return ""
76
+	}
77
+	return item.Name
78
+}
79
+func GetGoodsPrice(id int) int {
80
+	item, ok := goodsConfigMap[id]
81
+	if !ok {
82
+		return 0
83
+	}
84
+	return item.Price
85
+}
86
+
87
+// 获取物品列表
88
+func GetGoodsInfoList() GoodsConfigs {
89
+	// InitItemConfig()
90
+	return goodsConfigs
91
+}

+ 29 - 34
models/item.go

@@ -9,20 +9,27 @@
9 9
 package models
10 10
 
11 11
 import (
12
+	"encoding/json"
13
+	"log"
14
+
12 15
 	"github.com/astaxie/beego"
13
-	"github.com/bitly/go-simplejson"
14 16
 
15 17
 	"box-gm/utils"
16 18
 )
17 19
 
18 20
 type ItemConfig struct {
19
-	Id   int
20
-	Name string
21
-	Type int
21
+	Id    int    `json:"id"`    // 道具ID
22
+	Name  string `json:"name"`  // 道具名称
23
+	Type  int    `json:"ty"`    // 道具类型
24
+	Price int    `json:"price"` // 道具价格
22 25
 }
23
-
24 26
 type ItemConfigs []*ItemConfig
25 27
 
28
+type RES_CONF_ITEMS struct {
29
+	Code  int         `json:"code"`  // 道具ID
30
+	Items ItemConfigs `json:"items"` // 道具配置列表
31
+}
32
+
26 33
 var itemConfigMap map[int]*ItemConfig
27 34
 var itemConfigs ItemConfigs
28 35
 
@@ -49,47 +56,35 @@ func init() {
49 56
 	itemConfigs = append(itemConfigs, itemConfigMap[103])
50 57
 }
51 58
 
52
-func InitItemConfig() (int, int) {
53
-	body := "{\"name\":\"user_query_item_config\"}"
54
-	host := utils.GetKeyConf("gameservers", "login")
55
-	sign := utils.Strtomd5(body + utils.GetKeyConf("app", "gameKey"))
59
+func UpdateItemConfig() (int, int) {
60
+	params := make(map[string]interface{})
61
+	params["name"] = "gm_get_conf_items"
62
+
63
+	body, _ := json.Marshal(params)
64
+	host := utils.GetKeyConf("gameservers", "web")
65
+	sign := utils.Strtomd5(string(body) + utils.GetKeyConf("app", "gameKey"))
56 66
 	url := "http://" + host + "/json?sign=" + sign
57
-	buff, err := utils.SendAndRecvHTTP("POST", url, body)
67
+	buff, err := utils.SendAndRecvHTTP("POST", url, string(body))
68
+	log.Printf("UpdateItemConfig url[%s] body[%s] buff[%s] err[%v]", url, string(body), string(buff), err)
58 69
 	if err != nil {
59 70
 		return 0, 0
60 71
 	}
61 72
 
62
-	j, err := simplejson.NewJson(buff)
73
+	var res RES_CONF_ITEMS
74
+	err = json.Unmarshal(buff, &res)
63 75
 	if err != nil {
64 76
 		return 0, 0
65 77
 	}
66
-	code, _ := j.Get("code").Int()
67
-	if code != 200 {
68
-		return 0, 0
69
-	}
70
-	arr, err1 := j.Get("config").Array()
71
-	if err1 != nil {
78
+	if res.Code != 200 {
72 79
 		return 0, 0
73 80
 	}
74 81
 
75 82
 	oldCount := len(itemConfigs)
76
-
77
-	for i := 0; i < len(arr); i++ {
78
-		itype, _ := j.Get("config").GetIndex(i).Get("type").Int()
79
-		id, _ := j.Get("config").GetIndex(i).Get("id").Int()
80
-		//话费卡和红包不允许后台发放
81
-		// if realItem == "0" && (itype == 100 || itype == 73) {
82
-		// 	continue
83
-		// }
84
-
85
-		item := &ItemConfig{}
86
-		item.Id = id
87
-		item.Type = itype
88
-		item.Name, _ = j.Get("config").GetIndex(i).Get("name").String()
89
-		if itemConfigMap[item.Id] == nil {
90
-			itemConfigMap[item.Id] = item
91
-			itemConfigs = append(itemConfigs, item)
92
-		}
83
+	itemConfigMap = make(map[int]*ItemConfig)
84
+	itemConfigs = ItemConfigs{}
85
+	for _, v := range res.Items {
86
+		itemConfigMap[v.Id] = v
87
+		itemConfigs = append(itemConfigs, v)
93 88
 	}
94 89
 
95 90
 	beego.Info("load item config, oldCount: ", oldCount, "newCount", len(itemConfigs))

+ 1 - 0
routers/router.go

@@ -59,4 +59,5 @@ func init() {
59 59
 	beego.Router("/client", &controllers.ClientController{})
60 60
 	beego.Router("/banip", &controllers.BanIPController{})
61 61
 	beego.Router("/exchangecode", &controllers.ExchangeCodeController{})
62
+	beego.Router("/gameconfig", &controllers.GameConfigController{})
62 63
 }

+ 3 - 0
views/exchangecode.tpl

@@ -274,6 +274,7 @@
274 274
         document.getElementById("modalAdd").hidden = true;
275 275
       }
276 276
       function addExchangeCode () {
277
+        var token = document.getElementById("token").value;
277 278
         var pcode = document.getElementById("pcode").value;
278 279
         var awardTimes = parseInt(document.getElementById("awardTimes").value);
279 280
         var expireTime = document.getElementById("expireTime").value;
@@ -364,6 +365,7 @@
364 365
       }
365 366
 
366 367
       function modifyExchangeCode () {
368
+        var token = document.getElementById("token").value;
367 369
         var pcode = document.getElementById("pcode_modify").value;
368 370
         var awardTimes = document.getElementById("awardTimes_modify").value;
369 371
         var expireTime = document.getElementById("expireTime_modify").value;
@@ -393,6 +395,7 @@
393 395
       }
394 396
 
395 397
       function clickDelete (pcode) {
398
+        var token = document.getElementById("token").value;
396 399
         var text = "token=" + encodeURI(token);
397 400
         text += "&pcode=" + encodeURI(pcode);
398 401
 

+ 70 - 0
views/gameconfig.tpl

@@ -0,0 +1,70 @@
1
+<!DOCTYPE html>
2
+<html>
3
+    <head>
4
+        <meta charset="UTF-8" />
5
+        <title>欢迎页面-X-admin2.0</title>
6
+        <link rel="stylesheet" href="./static/css/font.css">
7
+        <link rel="stylesheet" href="./static/css/xadmin.css">
8
+        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
9
+        <script src="./static/lib/layui/layui.js" charset="utf-8"></script>
10
+        <script type="text/javascript" src="./static/js/xadmin.js"></script>
11
+    </head>
12
+    <body>
13
+    <input type="text" id="token" value={{.token}} hidden=true>
14
+    <br>
15
+    <br>
16
+    <input class="layui-btn" type="button" onclick="UpdateItem()" value=更新道具配置>
17
+    <br>
18
+    <br>
19
+    <input class="layui-btn" type="button" onclick="UpdateGoods()" value=更新商品配置>
20
+    <script language="JavaScript">
21
+      function UpdateItem() {
22
+        var token = document.getElementById("token").value;
23
+
24
+        var text = "token=" + encodeURI(token);
25
+        text += "&ty=" + encodeURI("items");
26
+
27
+        $.ajax({
28
+          type:"post",
29
+          url:"/gameconfig?" + text,
30
+          success:function (data) {
31
+            // alert(data.status);
32
+            if (data.status){
33
+              window.location.href="/gameconfig";
34
+            }else{
35
+              if (data.info){
36
+                alert(data.info);
37
+              }else{
38
+                window.location.href="/accountlogin";
39
+              }
40
+            }
41
+          }
42
+        });
43
+      }
44
+
45
+      function UpdateGoods() {
46
+        var token = document.getElementById("token").value;
47
+
48
+        var text = "token=" + encodeURI(token);
49
+        text += "&ty=" + encodeURI("goods");
50
+
51
+        $.ajax({
52
+          type:"post",
53
+          url:"/gameconfig?" + text,
54
+          success:function (data) {
55
+            // alert(data.status);
56
+            if (data.status){
57
+              window.location.href="/gameconfig";
58
+            }else{
59
+              if (data.info){
60
+                alert(data.info);
61
+              }else{
62
+                window.location.href="/accountlogin";
63
+              }
64
+            }
65
+          }
66
+        });
67
+      }
68
+    </script>
69
+    </body>
70
+</html>