gm.go 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645
  1. package api
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "gadmin/config"
  7. "gadmin/internal/admin/consts"
  8. "gadmin/internal/admin/data"
  9. "gadmin/internal/admin/forms"
  10. "gadmin/internal/admin/gm_services"
  11. "gadmin/internal/admin/service"
  12. "gadmin/internal/gorm/model"
  13. "gadmin/internal/gorm/query"
  14. "gadmin/package/gmdata"
  15. "gadmin/package/platformPay"
  16. "gadmin/utility"
  17. "gadmin/utility/player"
  18. "gadmin/utility/serializer"
  19. "gadmin/utility/token"
  20. "net/http"
  21. "net/url"
  22. "os"
  23. "os/exec"
  24. "strconv"
  25. "time"
  26. "github.com/gin-gonic/gin"
  27. "github.com/jinzhu/now"
  28. "github.com/sirupsen/logrus"
  29. "github.com/spf13/cast"
  30. )
  31. func GetServerDate(c *gin.Context) {
  32. c.JSON(200, serializer.Suc(map[string]interface{}{
  33. "date": time.Now().Format("2006-01-02 15:04:05"),
  34. }))
  35. return
  36. }
  37. func GetVersionIndex(c *gin.Context) {
  38. var (
  39. req forms.GetVersionIndexReq
  40. err error
  41. )
  42. if err = c.ShouldBind(&req); err != nil {
  43. c.JSON(200, ErrorResponse(err))
  44. return
  45. }
  46. type response struct {
  47. Error string `json:"error"`
  48. Data any `json:"data"`
  49. Msg string `json:"msg"`
  50. }
  51. logrus.Warnf("GetVersionIndex req:%+v", req)
  52. params := url.Values{}
  53. params.Set("v", req.Version)
  54. resp, err := http.Get(fmt.Sprintf("%s/%s?%s", os.Getenv("VERSION_URL"), "version/index", params.Encode()))
  55. if err != nil {
  56. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", err.Error())})
  57. return
  58. }
  59. defer resp.Body.Close()
  60. var result response
  61. if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
  62. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", err.Error())})
  63. return
  64. }
  65. if result.Error != "" {
  66. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", result.Error)})
  67. return
  68. }
  69. // res, err := sshx.GetVersionIndex(req)
  70. // if err != nil || res == nil {
  71. // c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本服务器异常. err:%v", err.Error())})
  72. // return
  73. // }
  74. // if res.Code != 0 {
  75. // c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本服务器异常-2. err:%v", res.Err)})
  76. // return
  77. // }
  78. c.JSON(200, serializer.Suc(map[string]interface{}{
  79. "index": result.Data,
  80. }))
  81. }
  82. func VersionList(c *gin.Context) {
  83. resp, err := http.Get(fmt.Sprintf("%s/%s", os.Getenv("VERSION_URL"), "version/scan"))
  84. if err != nil {
  85. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", err.Error())})
  86. return
  87. }
  88. defer resp.Body.Close()
  89. type opt struct {
  90. Value string `json:"value"`
  91. Label string `json:"label"`
  92. }
  93. type response struct {
  94. Error string `json:"error"`
  95. Data any `json:"data"`
  96. Msg string `json:"msg"`
  97. }
  98. var opts []*opt
  99. var result response
  100. if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
  101. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", err.Error())})
  102. return
  103. }
  104. if result.Error != "" {
  105. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", result.Error)})
  106. return
  107. }
  108. for _, val := range result.Data.([]interface{}) {
  109. d, _ := val.(string)
  110. opts = append(opts, &opt{Value: d, Label: d})
  111. }
  112. c.JSON(200, serializer.Suc(map[string]interface{}{
  113. "versionOptions": opts,
  114. }))
  115. // ds, err := sshx.VersionList()
  116. // if err != nil {
  117. // c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("获取版本号列表失败,请联系技术处理. err:%v", err.Error())})
  118. // return
  119. // }
  120. // type opt struct {
  121. // Value string `json:"value"`
  122. // Label string `json:"label"`
  123. // }
  124. // var opts []*opt
  125. // for _, d := range ds {
  126. // opts = append(opts, &opt{Value: d, Label: d})
  127. // }
  128. // c.JSON(200, serializer.Suc(map[string]interface{}{
  129. // "versionOptions": opts,
  130. // }))
  131. }
  132. func ReleaseVersion(c *gin.Context) {
  133. var (
  134. req forms.ReleaseVersionReq
  135. err error
  136. )
  137. if err = c.ShouldBind(&req); err != nil {
  138. c.JSON(200, ErrorResponse(err))
  139. return
  140. }
  141. reqBytes, err := json.Marshal(req)
  142. if err != nil {
  143. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("更新过程发生错误,请联系技术处理. err:%v", err.Error())})
  144. return
  145. }
  146. resp, err := http.Post(fmt.Sprintf("%s/%s", os.Getenv("VERSION_URL"), "version/update"), "application/json", bytes.NewBuffer(reqBytes))
  147. if err != nil {
  148. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("更新过程发生错误,请联系技术处理. err:%v", err.Error())})
  149. return
  150. }
  151. defer resp.Body.Close()
  152. type response struct {
  153. Error string `json:"error"`
  154. Data any `json:"data"`
  155. Msg string `json:"msg"`
  156. }
  157. var result response
  158. if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
  159. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("更新过程发生错误,请联系技术处理. err:%v", err.Error())})
  160. return
  161. }
  162. c.JSON(200, serializer.Suc(nil))
  163. }
  164. func EditServerDate(c *gin.Context) {
  165. var (
  166. req forms.EditServerDateReq
  167. err error
  168. )
  169. if os.Getenv("GIN_MODE") == "release" {
  170. c.JSON(200, gin.H{"code": 1, "msg": "正式服不允许操作!"})
  171. return
  172. }
  173. if err = c.ShouldBind(&req); err != nil {
  174. c.JSON(200, ErrorResponse(err))
  175. return
  176. }
  177. t, _ := time.Parse("2006-01-02 15:04:05", req.Date)
  178. command := fmt.Sprintf(`date -s "%v"`, t.Format("20060102 15:04:05"))
  179. user := token.CurrentUser(c)
  180. logrus.Infof("用户 [%v] 于 [%v] 修改服务器时间为 [%v]", user.ID, time.Now().Format("2006-01-02 15:04:05"), t.Format("2006-01-02 15:04:05"))
  181. o, err := exec.Command("/bin/bash", "-c", command).Output()
  182. if err != nil {
  183. c.JSON(200, gin.H{"code": 1, "msg": fmt.Sprintf("命令执行失败:%+v", err.Error())})
  184. return
  185. }
  186. logrus.Warnf("EditServerDate o:%+v", string(o))
  187. c.JSON(200, serializer.Suc(nil))
  188. return
  189. }
  190. func MsdBalance(c *gin.Context) {
  191. var (
  192. req forms.MsdBalanceReq
  193. err error
  194. )
  195. if err = c.ShouldBind(&req); err != nil {
  196. c.JSON(200, ErrorResponse(err))
  197. return
  198. }
  199. if err = forms.ParseParams(&req); err != nil {
  200. c.JSON(200, ErrorResponse(err))
  201. return
  202. }
  203. user := data.GetUser(req.UserID)
  204. if user == nil {
  205. logrus.Warnf("未找到玩家 req.UserID:%v", req.UserID)
  206. c.JSON(200, gin.H{"code": 1, "msg": "未找到玩家"})
  207. return
  208. }
  209. if user.OpenID == "" {
  210. c.JSON(200, gin.H{"code": 1, "msg": "玩家未设置openid"})
  211. return
  212. }
  213. //定位平台
  214. openid := user.OpenID
  215. platform := platformPay.GetAdminPlatform()
  216. balance, err := platformPay.QueryBalanceAndCheck(int(platform), openid)
  217. if err != nil {
  218. c.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  219. return
  220. }
  221. if balance == nil {
  222. c.JSON(200, gin.H{"code": 1, "msg": "查询余额失败!"})
  223. return
  224. }
  225. c.JSON(200, serializer.Suc(map[string]interface{}{
  226. "userId": user.ID,
  227. "openid": openid,
  228. "balance": balance.Balance,
  229. }))
  230. }
  231. func MsdSettle(c *gin.Context) {
  232. var (
  233. req forms.MsdSettleReq
  234. err error
  235. )
  236. if os.Getenv("GIN_MODE") != "release" {
  237. c.JSON(200, gin.H{"code": 1, "msg": "测试服不允许操作!"})
  238. return
  239. }
  240. if err = c.ShouldBind(&req); err != nil {
  241. c.JSON(200, ErrorResponse(err))
  242. return
  243. }
  244. if err = forms.ParseParams(&req); err != nil {
  245. c.JSON(200, ErrorResponse(err))
  246. return
  247. }
  248. user := data.GetUser(req.UserID)
  249. if user == nil {
  250. logrus.Warnf("未找到玩家 req.UserID:%v", req.UserID)
  251. c.JSON(200, gin.H{"code": 1, "msg": "未找到玩家"})
  252. return
  253. }
  254. if user.OpenID == "" {
  255. c.JSON(200, gin.H{"code": 1, "msg": "玩家未设置openid"})
  256. return
  257. }
  258. openid := user.OpenID
  259. platform := platformPay.GetAdminPlatform()
  260. balance, err := platformPay.QueryBalanceAndCheck(platform, openid)
  261. if err != nil {
  262. c.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  263. return
  264. }
  265. if balance == nil {
  266. c.JSON(200, gin.H{"code": 1, "msg": "查询余额失败!"})
  267. return
  268. }
  269. if balance.Balance < req.Balance {
  270. c.JSON(200, gin.H{"code": 1, "msg": "平账余额不能大于米大师余额"})
  271. return
  272. }
  273. if req.Remark == "" {
  274. c.JSON(200, gin.H{"code": 1, "msg": "平账理由不能为空"})
  275. return
  276. }
  277. var response *platformPay.ResponsePay
  278. orderSn := platformPay.CreateOutTradeNo(user.ID)
  279. defer func() {
  280. var (
  281. status int32 = 1
  282. errorTxt = ""
  283. responseB []byte
  284. )
  285. if err != nil {
  286. status = 2
  287. errorTxt = err.Error()
  288. }
  289. if response != nil {
  290. responseB, _ = json.Marshal(response)
  291. }
  292. var settle = query.Use(config.DB).OrdersSettle
  293. settleData := model.OrdersSettle{
  294. Type: 1,
  295. UserID: req.UserID,
  296. Openid: openid,
  297. Balance: int32(req.Balance),
  298. Remark: req.Remark,
  299. OrderSn: orderSn,
  300. CreatedBy: token.GetUID(c),
  301. Status: status,
  302. Error: errorTxt,
  303. Response: string(responseB),
  304. CreatedAt: time.Now(),
  305. }
  306. if err = settle.Create(&settleData); err != nil {
  307. logrus.Errorf("OrdersSettle Create err :%+v, settleData:%+v", err, settleData)
  308. }
  309. }()
  310. logrus.Infof("平帐参数 platform:%d, openId:%s, orderSn:%s, balance:%d", platform, openid, orderSn, req.Balance)
  311. response, err = platformPay.PayAndCheck(platform, openid, orderSn, req.Balance)
  312. if err != nil {
  313. c.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  314. return
  315. }
  316. if response == nil {
  317. c.JSON(200, gin.H{"code": 1, "msg": "米大师返回异常,请登录米大师平台确认是否操作成功! "})
  318. return
  319. }
  320. c.JSON(200, serializer.Suc(nil))
  321. }
  322. func GetBalance(c *gin.Context) {
  323. var (
  324. req forms.GetBalanceReq
  325. err error
  326. )
  327. if err = c.ShouldBind(&req); err != nil {
  328. c.JSON(200, ErrorResponse(err))
  329. return
  330. }
  331. if err = forms.ParseParams(&req); err != nil {
  332. c.JSON(200, ErrorResponse(err))
  333. return
  334. }
  335. user := data.GetUser(req.UserID)
  336. if user == nil {
  337. logrus.Warnf("未找到玩家 req.UserID:%v", req.UserID)
  338. c.JSON(200, gin.H{"code": 1, "msg": "未找到玩家"})
  339. return
  340. }
  341. if user.OpenID == "" {
  342. c.JSON(200, gin.H{"code": 1, "msg": "玩家未设置openid"})
  343. return
  344. }
  345. openid := user.OpenID
  346. //获取后端平台
  347. plat := platformPay.WxPlat
  348. if os.Getenv("ADMIN_PLATFORM") == "dy" {
  349. plat = platformPay.DyPlat
  350. }
  351. balance, err := platformPay.QueryBalanceAndCheck(int(plat), openid)
  352. if err != nil {
  353. c.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  354. return
  355. }
  356. if balance == nil {
  357. c.JSON(200, gin.H{"code": 1, "msg": "查询余额失败!"})
  358. return
  359. }
  360. c.JSON(200, serializer.Suc(map[string]interface{}{
  361. "userId": user.ID,
  362. "openid": openid,
  363. "balance": balance.Balance,
  364. }))
  365. }
  366. /*func DelRank(c *gin.Context) {
  367. var (
  368. req forms.DelRankReq
  369. err error
  370. )
  371. if err = c.ShouldBind(&req); err != nil {
  372. c.JSON(200, ErrorResponse(err))
  373. return
  374. }
  375. if err = forms.ParseParams(&req); err != nil {
  376. c.JSON(200, ErrorResponse(err))
  377. return
  378. }
  379. c.JSON(200, service.Gm.DelRank(c, req))
  380. }*/
  381. func GetUserRolesInfo(ctx *gin.Context) {
  382. type Result struct {
  383. RoleNums int `json:"role_nums"`
  384. Count int `json:"count"`
  385. }
  386. endStamp := cast.ToInt64(ctx.Query("emdstamp"))
  387. if endStamp <= 0 {
  388. endStamp = now.With(time.Now().AddDate(0, 0, -1)).EndOfDay().Unix()
  389. }
  390. key := config.UKey("GetUserRolesInfo", endStamp)
  391. if foo, found := config.Cache.Get(key); found {
  392. ctx.JSON(200, gin.H{"code": 200, "data": foo})
  393. return
  394. }
  395. tx := config.GDB1.Raw(fmt.Sprintf("select b.role_nums, count(1) as count from (SELECT ua.id, floor(length(pm.roles)/30) as role_nums FROM grave.user_account ua left join grave.player_material pm on ua.id = pm.playerid where ua.createtime <= %d and pm.roles is not null) b group by b.role_nums", endStamp))
  396. var result []Result
  397. err := tx.Scan(&result).Error
  398. if err != nil {
  399. ctx.JSON(200, gin.H{"code": 500, "msg": err.Error()})
  400. } else {
  401. ctx.JSON(200, gin.H{"code": 200, "data": result})
  402. config.Cache.Set(key, result, time.Hour*3)
  403. }
  404. }
  405. func GetIdiomRankingList(ctx *gin.Context) {
  406. var params forms.GetIdiomRankingListReq
  407. ctx.ShouldBind(&params)
  408. if params.ServerId <= 0 {
  409. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  410. return
  411. }
  412. DB, err := player.GetDBByServerID(params.ServerId)
  413. if err != nil {
  414. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  415. return
  416. }
  417. type Models struct {
  418. ID int64 `json:"id"`
  419. UserID int64 `json:"user_id"`
  420. Score float64 `json:"score"`
  421. NickName string `json:"nickName"`
  422. Createtime int64 `json:"createtime"`
  423. }
  424. var (
  425. models []Models
  426. res forms.ListRes
  427. key = fmt.Sprintf("idiom_ranking:%v", utility.WeekIndexDate())
  428. )
  429. list, err := config.RedisGroup[DB].ZRevRangeWithScores(key, 0, 99).Result()
  430. if err != nil {
  431. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  432. return
  433. }
  434. for i := 0; i < len(list); i++ {
  435. user := data.GetUser(cast.ToInt64(list[i].Member))
  436. NickName := ""
  437. var Createtime int64 = 0
  438. if user != nil {
  439. NickName = user.NickName
  440. Createtime = user.CreateTime.Unix()
  441. }
  442. models = append(models, Models{
  443. ID: int64(i + 1),
  444. UserID: cast.ToInt64(list[i].Member),
  445. Score: cast.ToFloat64(list[i].Score) / 10000000,
  446. NickName: NickName,
  447. Createtime: Createtime,
  448. })
  449. }
  450. res.List = models
  451. res.Page = 1
  452. res.PerPage = 100
  453. res.PageCount = 1
  454. ctx.JSON(200, serializer.Suc(res))
  455. }
  456. func GetBossRankingList(ctx *gin.Context) {
  457. var params forms.GetBossRankingListReq
  458. ctx.ShouldBind(&params)
  459. if params.ServerId <= 0 {
  460. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  461. return
  462. }
  463. DB, err := player.GetDBByServerID(params.ServerId)
  464. if err != nil {
  465. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  466. return
  467. }
  468. type Models struct {
  469. ID int64 `json:"id"`
  470. UserID int64 `json:"user_id"`
  471. Score float64 `json:"score"`
  472. NickName string `json:"nickName"`
  473. Createtime int64 `json:"createtime"`
  474. }
  475. var (
  476. models []Models
  477. res forms.ListRes
  478. key = fmt.Sprintf("bossranking:%v", time.Now().Format("20060102"))
  479. )
  480. list, err := config.RedisGroup[DB].ZRevRangeWithScores(key, 0, 99).Result()
  481. if err != nil {
  482. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  483. return
  484. }
  485. for i := 0; i < len(list); i++ {
  486. user := data.GetUser(cast.ToInt64(list[i].Member))
  487. NickName := ""
  488. var Createtime int64 = 0
  489. if user != nil {
  490. NickName = user.NickName
  491. Createtime = user.CreateTime.Unix()
  492. }
  493. models = append(models, Models{
  494. ID: int64(i + 1),
  495. UserID: cast.ToInt64(list[i].Member),
  496. Score: cast.ToFloat64(list[i].Score) / 1000_0000,
  497. NickName: NickName,
  498. Createtime: Createtime,
  499. })
  500. }
  501. res.List = models
  502. res.Page = 1
  503. res.PerPage = 100
  504. res.PageCount = 1
  505. ctx.JSON(200, serializer.Suc(res))
  506. }
  507. func GetCurioRankingList(ctx *gin.Context) {
  508. var params forms.GetCurioRankingListReq
  509. ctx.ShouldBind(&params)
  510. if params.ServerId <= 0 {
  511. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  512. return
  513. }
  514. DB, err := player.GetDBByServerID(params.ServerId)
  515. if err != nil {
  516. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  517. return
  518. }
  519. type Models struct {
  520. ID int64 `json:"id"`
  521. UserID int64 `json:"user_id"`
  522. Score float64 `json:"score"`
  523. NickName string `json:"nickName"`
  524. Createtime int64 `json:"createtime"`
  525. }
  526. var (
  527. models []Models
  528. res forms.ListRes
  529. key = fmt.Sprintf("curio_ranking:%v", utility.WeekIndexDate())
  530. )
  531. list, err := config.RedisGroup[DB].ZRevRangeWithScores(key, 0, 99).Result()
  532. if err != nil {
  533. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  534. return
  535. }
  536. for i := 0; i < len(list); i++ {
  537. user := data.GetUser(cast.ToInt64(list[i].Member))
  538. NickName := ""
  539. var Createtime int64 = 0
  540. if user != nil {
  541. NickName = user.NickName
  542. Createtime = user.CreateTime.Unix()
  543. }
  544. models = append(models, Models{
  545. ID: int64(i + 1),
  546. UserID: cast.ToInt64(list[i].Member),
  547. Score: list[i].Score / 1000_0000, //cast.ToFloat64(list[i].Score) / (1000 * 1000 * 1000 * 1000 * 10), // 转MB
  548. NickName: NickName,
  549. Createtime: Createtime,
  550. })
  551. }
  552. res.List = models
  553. res.Page = 1
  554. res.PerPage = 100
  555. res.PageCount = 1
  556. ctx.JSON(200, serializer.Suc(res))
  557. }
  558. func getCurrentRankingListKey() string {
  559. tm := time.Now()
  560. y, w := tm.ISOWeek()
  561. k := y*100 + w
  562. return fmt.Sprintf("ranking_pvp:%d", k)
  563. }
  564. func GetPVPRankingList(ctx *gin.Context) {
  565. var params forms.GetPVPRankingListReq
  566. ctx.ShouldBind(&params)
  567. if params.ServerId <= 0 {
  568. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  569. return
  570. }
  571. DB, err := player.GetDBByServerID(params.ServerId)
  572. if err != nil {
  573. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  574. return
  575. }
  576. type Models struct {
  577. ID int64 `json:"id"`
  578. UserID int64 `json:"user_id"`
  579. Score int64 `json:"score"`
  580. NickName string `json:"nickName"`
  581. Createtime int64 `json:"createtime"`
  582. }
  583. var (
  584. models []Models
  585. res forms.ListRes
  586. key = getCurrentRankingListKey()
  587. )
  588. logrus.Warnf("GetPVPRankingList key:%+v", key)
  589. list, err := config.RedisGroup[DB].ZRevRangeWithScores(key, 0, 99).Result()
  590. if err != nil {
  591. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  592. return
  593. }
  594. for i := 0; i < len(list); i++ {
  595. user := data.GetUser(cast.ToInt64(list[i].Member))
  596. NickName := ""
  597. var Createtime int64 = 0
  598. if user != nil {
  599. NickName = user.NickName
  600. Createtime = user.CreateTime.Unix()
  601. }
  602. models = append(models, Models{
  603. ID: int64(i + 1),
  604. UserID: cast.ToInt64(list[i].Member),
  605. Score: cast.ToInt64(list[i].Score) / 1000000,
  606. NickName: NickName,
  607. Createtime: Createtime,
  608. })
  609. }
  610. res.List = models
  611. res.Page = 1
  612. res.PerPage = 100
  613. res.PageCount = 1
  614. ctx.JSON(200, serializer.Suc(res))
  615. }
  616. func ClearPVPRank(ctx *gin.Context) {
  617. var (
  618. params forms.ClearPVPRankReq
  619. week = utility.WeekByDate(time.Now()) - 1
  620. rankKey = fmt.Sprintf("ranking_pvp:%v", week)
  621. playersKey = fmt.Sprintf("pvpplayers:%v", week)
  622. )
  623. ctx.ShouldBind(&params)
  624. if params.UserID <= 0 {
  625. ctx.JSON(200, forms.Resp{Code: 1, Msg: "玩家ID不能为空"})
  626. return
  627. }
  628. if params.ServerId <= 0 {
  629. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  630. return
  631. }
  632. DB, err := player.GetDBByServerID(params.ServerId)
  633. if err != nil {
  634. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  635. return
  636. }
  637. res1, err := config.RedisGroup[DB].ZRem(rankKey, params.UserID).Result()
  638. if err != nil {
  639. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  640. return
  641. }
  642. res2, err := config.RedisGroup[DB].HDel(playersKey, strconv.FormatInt(params.UserID, 10)).Result()
  643. if err != nil {
  644. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  645. return
  646. }
  647. logrus.Warnf("ClearPVPRank res1:%+v, res2:%+v", res1, res2)
  648. ctx.JSON(200, serializer.Suc(nil))
  649. //ZADD ranking_pvp:2 123 666
  650. //ZREM ranking_pvp:2 666
  651. //HMSET "pvpplayers:2" "666" "{\"playerId\":1472097,\"level\":46,\"nickName\":\"ID_78LYDJ4\",\"headImg\":\"https://restianjianhu.mg.xhgame.com/grave/res/1111.jpg\",\"roles\":[100000020],\"parts\":[{\"part\":1,\"level\":1,\"step\":0,\"eId\":10504001,\"slot\":[0,0,0,0]},{\"part\":2,\"level\":1,\"step\":0,\"eId\":20104001,\"slot\":[0,0,0,0]},{\"part\":3,\"level\":1,\"step\":0,\"eId\":30104001,\"slot\":[0,0,0,0]},{\"part\":4,\"level\":1,\"step\":0,\"eId\":40104001,\"slot\":[0,0,0,0]},{\"part\":5,\"level\":1,\"step\":0,\"eId\":50104001,\"slot\":[0,0,0,0]},{\"part\":6,\"level\":1,\"step\":0,\"eId\":60104001,\"slot\":[0,0,0,0]}],\"talents\":null,\"multiWin\":0,\"score\":990,\"rank\":2,\"lastJoin\":2,\"matchCount\":3,\"battleId\":0,\"lastMatchTick\":0,\"selectRival\":0,\"rivals\":null,\"historys\":[268323713429012480,268323854869331968,268323897768673280]}"
  652. //HDEL pvpplayers:2 666
  653. }
  654. func ClearCurioRank(ctx *gin.Context) {
  655. var (
  656. params forms.ClearCurioRankReq
  657. rankKey = fmt.Sprintf("curio_ranking:%v", utility.WeekIndexDate())
  658. )
  659. ctx.ShouldBind(&params)
  660. if params.UserID <= 0 {
  661. ctx.JSON(200, forms.Resp{Code: 1, Msg: "玩家ID不能为空"})
  662. return
  663. }
  664. if params.ServerId <= 0 {
  665. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  666. return
  667. }
  668. DB, err := player.GetDBByServerID(params.ServerId)
  669. if err != nil {
  670. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  671. return
  672. }
  673. res1, err := config.RedisGroup[DB].ZRem(rankKey, params.UserID).Result()
  674. if err != nil {
  675. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  676. return
  677. }
  678. var q = query.Use(config.GDBGroup[DB]).Curiomake
  679. updates, err := q.WithContext(ctx).
  680. Where(q.Playerid.Eq(params.UserID)).
  681. Updates(map[string]interface{}{"silver": "0", "totalSilver": 0})
  682. if err != nil {
  683. return
  684. }
  685. logrus.Warnf("ClearCurioRank res1:%+v, updates:%+v", res1, updates)
  686. ctx.JSON(200, serializer.Suc(nil))
  687. }
  688. func ClearIdiomRank(ctx *gin.Context) {
  689. type DayScoreReward struct {
  690. Day int `json:"day"` //yd
  691. DayScore int `json:"dayScore"` //日积分
  692. SumScore int `json:"sumScore"` //总积分
  693. Reward []int `json:"reward"` //领取箱子
  694. }
  695. var (
  696. params forms.ClearIdiomRankReq
  697. rankKey = fmt.Sprintf("idiom_ranking:%v", utility.WeekIndexDate())
  698. score *DayScoreReward
  699. )
  700. ctx.ShouldBind(&params)
  701. if params.UserID <= 0 {
  702. ctx.JSON(200, forms.Resp{Code: 1, Msg: "玩家ID不能为空"})
  703. return
  704. }
  705. if params.ServerId <= 0 {
  706. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  707. return
  708. }
  709. DB, err := player.GetDBByServerID(params.ServerId)
  710. if err != nil {
  711. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  712. return
  713. }
  714. var q = query.Use(config.GDBGroup[DB]).Idiommatch
  715. models, err := q.WithContext(ctx).Where(q.Playerid.Eq(params.UserID)).First()
  716. if err != nil {
  717. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  718. return
  719. }
  720. if models == nil {
  721. ctx.JSON(200, forms.Resp{Code: 1, Msg: "玩家金榜题名数据获取失败!"})
  722. return
  723. }
  724. err = json.Unmarshal([]byte(models.Score), &score)
  725. if err != nil {
  726. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  727. return
  728. }
  729. // 清空积分
  730. score.DayScore = 0
  731. score.SumScore = 0
  732. newScore, err := json.Marshal(score)
  733. if err != nil {
  734. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  735. return
  736. }
  737. updates, err := q.WithContext(ctx).
  738. Where(q.Playerid.Eq(params.UserID)).
  739. Updates(map[string]interface{}{"score": string(newScore)})
  740. if err != nil {
  741. return
  742. }
  743. res1, err := config.RedisGroup[DB].ZRem(rankKey, params.UserID).Result()
  744. if err != nil {
  745. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  746. return
  747. }
  748. logrus.Warnf("ClearIdiomRank res1:%+v, updates:%+v, models:%+v", res1, updates, models)
  749. ctx.JSON(200, serializer.Suc(nil))
  750. }
  751. func ClearBossRank(ctx *gin.Context) {
  752. var (
  753. params forms.ClearBossRankReq
  754. rankKey = fmt.Sprintf("bossranking:%v", time.Now().Format("20060102"))
  755. joinsKey = fmt.Sprintf("bossjoins")
  756. )
  757. ctx.ShouldBind(&params)
  758. if params.UserID <= 0 {
  759. ctx.JSON(200, forms.Resp{Code: 1, Msg: "玩家ID不能为空"})
  760. return
  761. }
  762. if params.ServerId <= 0 {
  763. ctx.JSON(200, forms.Resp{Code: 1, Msg: "请选择一个有效的服务器"})
  764. return
  765. }
  766. DB, err := player.GetDBByServerID(params.ServerId)
  767. if err != nil {
  768. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  769. return
  770. }
  771. res1, err := config.RedisGroup[DB].ZRem(rankKey, params.UserID).Result()
  772. if err != nil {
  773. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  774. return
  775. }
  776. res2, err := config.RedisGroup[DB].HDel(joinsKey, strconv.FormatInt(params.UserID, 10)).Result()
  777. if err != nil {
  778. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  779. return
  780. }
  781. logrus.Warnf("ClearBossRank res1:%+v, res2:%+v", res1, res2)
  782. ctx.JSON(200, serializer.Suc(nil))
  783. //ZADD ranking_pvp:2 123 666
  784. //ZREM ranking_pvp:2 666
  785. //HMSET "pvpplayers:2" "666" "{\"playerId\":1472097,\"level\":46,\"nickName\":\"ID_78LYDJ4\",\"headImg\":\"https://restianjianhu.mg.xhgame.com/grave/res/1111.jpg\",\"roles\":[100000020],\"parts\":[{\"part\":1,\"level\":1,\"step\":0,\"eId\":10504001,\"slot\":[0,0,0,0]},{\"part\":2,\"level\":1,\"step\":0,\"eId\":20104001,\"slot\":[0,0,0,0]},{\"part\":3,\"level\":1,\"step\":0,\"eId\":30104001,\"slot\":[0,0,0,0]},{\"part\":4,\"level\":1,\"step\":0,\"eId\":40104001,\"slot\":[0,0,0,0]},{\"part\":5,\"level\":1,\"step\":0,\"eId\":50104001,\"slot\":[0,0,0,0]},{\"part\":6,\"level\":1,\"step\":0,\"eId\":60104001,\"slot\":[0,0,0,0]}],\"talents\":null,\"multiWin\":0,\"score\":990,\"rank\":2,\"lastJoin\":2,\"matchCount\":3,\"battleId\":0,\"lastMatchTick\":0,\"selectRival\":0,\"rivals\":null,\"historys\":[268323713429012480,268323854869331968,268323897768673280]}"
  786. //HDEL pvpplayers:2 666
  787. }
  788. func UpdatePlayerElRank(ctx *gin.Context) {
  789. var params forms.UpdatePlayerElRankReq
  790. ctx.ShouldBind(&params)
  791. if params.PlayerId <= 0 || params.RoomCount < 0 {
  792. ctx.JSON(200, forms.Resp{Code: 1, Msg: "参数不可用"})
  793. return
  794. }
  795. err := gm_services.UpdateElRank(ctx, params)
  796. if err != nil {
  797. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  798. return
  799. }
  800. ctx.JSON(200, forms.Resp{})
  801. }
  802. func AddEquipment(ctx *gin.Context) {
  803. var params forms.AddMaterialReq
  804. ctx.ShouldBind(&params)
  805. err := gm_services.AddEquipment(ctx, params)
  806. if err != nil {
  807. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  808. return
  809. }
  810. ctx.JSON(200, forms.Resp{})
  811. }
  812. func AddMaterial(ctx *gin.Context) {
  813. var params forms.AddMaterialReq
  814. ctx.ShouldBind(&params)
  815. err := gm_services.AddMaterial(ctx, params)
  816. if err != nil {
  817. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  818. return
  819. }
  820. ctx.JSON(200, forms.Resp{})
  821. }
  822. func AddRune(ctx *gin.Context) {
  823. var params forms.AddMaterialReq
  824. ctx.ShouldBind(&params)
  825. err := gm_services.AddRune(ctx, params)
  826. if err != nil {
  827. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  828. return
  829. }
  830. ctx.JSON(200, forms.Resp{})
  831. }
  832. func GetAllTalents(ctx *gin.Context) {
  833. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Talents})
  834. }
  835. func GetAllEquipments(ctx *gin.Context) {
  836. var data = make(map[int]gmdata.Equipment, len(gmdata.EquipmentDict))
  837. for _, v := range gmdata.EquipmentDict {
  838. data[int(v.LevelId)] = v
  839. }
  840. ctx.JSON(200, forms.Resp{Code: 0, Data: gin.H{"list": data}})
  841. }
  842. func GetAllExp(ctx *gin.Context) {
  843. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.PlayLevel})
  844. }
  845. func GetAllMaterials(ctx *gin.Context) {
  846. type Material struct {
  847. ID int `json:"ItemId"`
  848. Type int `json:"ItemType"`
  849. Name string `json:"ItemName"`
  850. }
  851. var data = make(map[string][]Material)
  852. for _, v := range gmdata.MaterialsDict {
  853. type1 := fmt.Sprintf("%d", v.Type)
  854. data[type1] = append(data[type1], Material{
  855. ID: v.ID,
  856. Type: v.Type,
  857. Name: v.Name,
  858. })
  859. }
  860. ctx.JSON(200, forms.Resp{Code: 0, Data: data})
  861. }
  862. func GetAllRunes(ctx *gin.Context) {
  863. type Material struct {
  864. ID int `json:"ItemId"`
  865. Type int `json:"ItemType"`
  866. Name string `json:"ItemName"`
  867. }
  868. var data = make(map[string][]Material)
  869. for _, v := range gmdata.RunesDict {
  870. type1 := fmt.Sprintf("%d", v.Type)
  871. data[type1] = append(data[type1], Material{
  872. ID: v.ID,
  873. Type: v.Type,
  874. Name: v.Name,
  875. })
  876. }
  877. ctx.JSON(200, forms.Resp{Code: 0, Data: data})
  878. }
  879. func GetAllRoles(ctx *gin.Context) {
  880. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Roles})
  881. }
  882. func GetAllGoods(ctx *gin.Context) {
  883. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.GoodsInfo})
  884. }
  885. func GetAllChapters(ctx *gin.Context) {
  886. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Chapters})
  887. }
  888. func MailList(ctx *gin.Context) {
  889. var params = forms.EmailListReq{Page: 1, PerPage: 30}
  890. ctx.ShouldBind(&params)
  891. mails, total, _ := gm_services.GetEmails(params.Page, params.PerPage)
  892. for _, v := range mails {
  893. if v.OperatorId > 0 {
  894. user, err := service.User.GetUser(v.OperatorId)
  895. if err != nil {
  896. logrus.Warnf("MailList GetUser err:%+v", err)
  897. }
  898. if user != nil {
  899. v.Sender = fmt.Sprintf("%v(%v)", user.UserName, v.OperatorId)
  900. }
  901. }
  902. }
  903. var models forms.ListRes
  904. models.List = mails
  905. models.Page = int64(params.Page)
  906. models.PerPage = int64(params.PerPage)
  907. if total <= 0 {
  908. total = 1
  909. }
  910. models.PageCount = int64(total / params.PerPage)
  911. ctx.JSON(200, serializer.Suc(models))
  912. }
  913. func SendMail(ctx *gin.Context) {
  914. var item forms.EmailItemReq
  915. ctx.ShouldBind(&item)
  916. item.OperatorId = token.GetUID(ctx)
  917. _, err := gm_services.AddEmails(&item)
  918. if err != nil {
  919. ctx.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  920. } else {
  921. ctx.JSON(200, gin.H{"data": item, "code": 0})
  922. }
  923. }
  924. func DeleteMail(ctx *gin.Context) {
  925. var item forms.EmailItemReq
  926. ctx.ShouldBind(&item)
  927. err := gm_services.DeleteEmail(item.Id)
  928. if err != nil {
  929. ctx.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  930. } else {
  931. ctx.JSON(200, gin.H{"data": item, "code": 0})
  932. }
  933. }
  934. func GetNoticeList(c *gin.Context) {
  935. var params forms.NoticeListReq
  936. c.ShouldBind(&params)
  937. resp, err := gm_services.GetNoticeList(params)
  938. if err != nil {
  939. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  940. return
  941. }
  942. var models forms.ListRes
  943. models.List = resp
  944. c.JSON(200, serializer.Suc(models))
  945. }
  946. func AddNotice(c *gin.Context) {
  947. var params forms.AddNoticeReq
  948. c.ShouldBind(&params)
  949. _, err := gm_services.AddNotice(params)
  950. if err != nil {
  951. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  952. return
  953. }
  954. c.JSON(200, forms.Resp{})
  955. }
  956. func DelNotice(c *gin.Context) {
  957. var params forms.DeleteNoticeReq
  958. c.ShouldBind(&params)
  959. err := gm_services.DelNotice(params.Id)
  960. if err != nil {
  961. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  962. return
  963. }
  964. c.JSON(200, forms.Resp{})
  965. }
  966. func UpdateSwitcher(c *gin.Context) {
  967. var params = forms.UpdateSwitcherReq{IosPay: -1, DoubleAd: 0}
  968. c.ShouldBind(&params)
  969. err := gm_services.UpdateSwitcher(c, params)
  970. if err != nil {
  971. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  972. return
  973. }
  974. c.JSON(200, forms.Resp{})
  975. }
  976. func GetConfig(ctx *gin.Context) {
  977. list, simple, json1 := service.ServerOption.ConfigOption(ctx)
  978. ctx.JSON(200, forms.Resp{Code: 0, Data: map[string]interface{}{
  979. "mode": os.Getenv("GIN_MODE"),
  980. "admin_template": os.Getenv("ADMIN_TEMPLATE"),
  981. "socket_url": os.Getenv("ADMIN_SOCKET_URL"),
  982. "json_version": os.Getenv("JSON_VERSION"),
  983. "admin_web_title": os.Getenv("ADMIN_WEB_TITLE"),
  984. "amount_multiple": cast.ToInt64(os.Getenv("AMOUNT_MULTIPLE")),
  985. "channel_option": service.Channel.Option(ctx),
  986. "channel_tree_option": service.Channel.TreeOption(ctx),
  987. "server_option": list,
  988. "server_simple_option": simple,
  989. "server_json_option": json1,
  990. "flag_option": getUserFlagOption(),
  991. "deploy_type_option": deployTypeOption(),
  992. "deploy_serv_group_option": deployServGroupOption(),
  993. "chapter_option": gmdata.ChapterOption,
  994. }})
  995. }
  996. func deployTypeOption() (lst []forms.Option) {
  997. lst = append(lst, forms.Option{
  998. Value: nil,
  999. Label: "全部",
  1000. Name: "全部",
  1001. })
  1002. for _, v := range consts.DeployTypeSlice {
  1003. lst = append(lst, forms.Option{
  1004. Value: v,
  1005. Label: v,
  1006. Name: v,
  1007. })
  1008. }
  1009. return
  1010. }
  1011. func deployServGroupOption() (lst map[string][]forms.Option) {
  1012. lst = make(map[string][]forms.Option)
  1013. for _, v := range consts.DeployTypeSlice {
  1014. switch v {
  1015. case consts.DeployTypeLogin:
  1016. lst[v] = append(lst[v], forms.Option{
  1017. Value: "all",
  1018. Label: "全选",
  1019. Name: "全选",
  1020. })
  1021. for _, v2 := range consts.DeployServLoginGroup {
  1022. lst[v] = append(lst[v], forms.Option{
  1023. Value: v2,
  1024. Label: v2,
  1025. Name: v2,
  1026. })
  1027. }
  1028. default: //consts.DeployTypeGrave:
  1029. lst[v] = append(lst[v], forms.Option{
  1030. Value: "all",
  1031. Label: "全选",
  1032. Name: "全选",
  1033. })
  1034. for _, v2 := range consts.DeployServGraveGroup {
  1035. lst[v] = append(lst[v], forms.Option{
  1036. Value: v2,
  1037. Label: v2,
  1038. Name: v2,
  1039. })
  1040. }
  1041. // case consts.DeployTypeGate:
  1042. // lst[v] = append(lst[v], forms.Option{
  1043. // Value: "all",
  1044. // Label: "全选",
  1045. // Name: "全选",
  1046. // })
  1047. // for _, v2 := range consts.DeployServGateGroup {
  1048. // lst[v] = append(lst[v], forms.Option{
  1049. // Value: v2,
  1050. // Label: v2,
  1051. // Name: v2,
  1052. // })
  1053. // }
  1054. }
  1055. }
  1056. return
  1057. }
  1058. func getUserFlagOption() (lst []forms.Option) {
  1059. lst = append(lst, forms.Option{
  1060. Value: "-1",
  1061. Label: "全部",
  1062. Name: "全部",
  1063. })
  1064. for _, flag := range consts.UserFlags {
  1065. lst = append(lst, forms.Option{
  1066. Value: flag,
  1067. Label: consts.UserFlagMap[flag],
  1068. Name: consts.UserFlagMap[flag],
  1069. })
  1070. }
  1071. return
  1072. }
  1073. func GetJSONPath(ctx *gin.Context) {
  1074. ctx.JSON(200, forms.Resp{Code: 0, Data: os.Getenv("JSON_PATH") + "/" + os.Getenv("JSON_VERSION")})
  1075. }
  1076. func SetNewJsonPath(ctx *gin.Context) {
  1077. var params forms.SetConfPathReq
  1078. ctx.ShouldBind(&params)
  1079. err := gmdata.SetConfPath(params.Path)
  1080. if err != nil {
  1081. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1082. return
  1083. }
  1084. ctx.JSON(200, forms.Resp{})
  1085. }
  1086. func ToolsRestartView(c *gin.Context) {
  1087. var params = forms.ToolsRestartViewReq{}
  1088. err := c.ShouldBind(&params)
  1089. if err != nil {
  1090. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1091. return
  1092. }
  1093. if params.ID < 1 {
  1094. c.JSON(200, forms.Resp{Code: 1, Msg: "ID不能为空"})
  1095. return
  1096. }
  1097. models, err := gm_services.ToolsRestartView(c, params)
  1098. if err != nil {
  1099. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1100. return
  1101. }
  1102. c.JSON(200, forms.Resp{Code: 0, Data: models})
  1103. }
  1104. func ToolsRestart(c *gin.Context) {
  1105. var params = forms.ToolsRestartReq{}
  1106. err := c.ShouldBind(&params)
  1107. if err != nil {
  1108. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1109. return
  1110. }
  1111. if params.Version == "" {
  1112. c.JSON(200, forms.Resp{Code: 1, Msg: "版本号不能为空"})
  1113. return
  1114. }
  1115. if err = gm_services.ToolsRestart(c, params); err != nil {
  1116. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1117. return
  1118. }
  1119. c.JSON(200, forms.Resp{Code: 0, Msg: "Execute Command finished"})
  1120. }
  1121. func ToolsRestartLog(c *gin.Context) {
  1122. var params = forms.ToolsRestartLogReq{}
  1123. err := c.ShouldBind(&params)
  1124. if err != nil {
  1125. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1126. return
  1127. }
  1128. res, err := gm_services.ToolsRestartLogList(c, params)
  1129. if err != nil {
  1130. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1131. return
  1132. }
  1133. var models forms.ListRes
  1134. models.List = res.List
  1135. if res.TotalCount <= 0 {
  1136. res.TotalCount = 1
  1137. }
  1138. models.Page = int64(params.Page)
  1139. models.PerPage = int64(params.Limit)
  1140. models.PageCount = res.TotalCount / 10
  1141. c.JSON(200, serializer.Suc(models))
  1142. }
  1143. /*func UpdateGuides(c *gin.Context) {
  1144. var (
  1145. req forms.UpdateGuidesReq
  1146. err error
  1147. )
  1148. if err = c.ShouldBind(&req); err != nil {
  1149. c.JSON(200, ErrorResponse(err))
  1150. return
  1151. }
  1152. if err = forms.ParseParams(&req); err != nil {
  1153. c.JSON(200, ErrorResponse(err))
  1154. return
  1155. }
  1156. c.JSON(200, service.Gm.UpdateGuides(c, req))
  1157. }*/
  1158. func UpdateChapter(c *gin.Context) {
  1159. var (
  1160. req forms.UpdateChapterReq
  1161. err error
  1162. )
  1163. if err = c.ShouldBind(&req); err != nil {
  1164. c.JSON(200, ErrorResponse(err))
  1165. return
  1166. }
  1167. if err = forms.ParseParams(&req); err != nil {
  1168. c.JSON(200, ErrorResponse(err))
  1169. return
  1170. }
  1171. c.JSON(200, service.Gm.UpdateChapter(c, req))
  1172. }
  1173. /* func UpdateTalents(c *gin.Context) {
  1174. var (
  1175. req forms.UpdateTalentReq
  1176. err error
  1177. )
  1178. if err = c.ShouldBind(&req); err != nil {
  1179. c.JSON(200, ErrorResponse(err))
  1180. return
  1181. }
  1182. if err = forms.ParseParams(&req); err != nil {
  1183. c.JSON(200, ErrorResponse(err))
  1184. return
  1185. }
  1186. c.JSON(200, service.Gm.UpdateTalent(c, req))
  1187. }
  1188. func UpdatePlayerBase(c *gin.Context) {
  1189. var (
  1190. req forms.UpdatePlayerBaseReq
  1191. err error
  1192. )
  1193. if err = c.ShouldBind(&req); err != nil {
  1194. c.JSON(200, ErrorResponse(err))
  1195. return
  1196. }
  1197. if err = forms.ParseParams(&req); err != nil {
  1198. c.JSON(200, ErrorResponse(err))
  1199. return
  1200. }
  1201. c.JSON(200, service.Gm.UpdatePlayerBase(c, req))
  1202. }*/
  1203. ////////////.....///
  1204. func AddRoleExp(ctx *gin.Context) {
  1205. var (
  1206. params forms.UpdateRoleReq
  1207. err error
  1208. )
  1209. if err = ctx.ShouldBind(&params); err != nil {
  1210. ctx.JSON(200, ErrorResponse(err))
  1211. return
  1212. }
  1213. if err = gm_services.UpdatePlayAttr(ctx, params); err != nil {
  1214. ctx.JSON(200, ErrorResponse(err))
  1215. return
  1216. }
  1217. ctx.JSON(200, serializer.Suc(nil))
  1218. }
  1219. func AddRoleStamina(ctx *gin.Context) {
  1220. var params forms.UpdateRoleReq
  1221. ctx.ShouldBindJSON(&params)
  1222. err := gm_services.UpdatePlayAttr(ctx, params)
  1223. if err != nil {
  1224. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1225. return
  1226. }
  1227. ctx.JSON(200, forms.Resp{})
  1228. }
  1229. func UpgradeRole(ctx *gin.Context) {
  1230. var params forms.UpgradeRoleReq
  1231. ctx.ShouldBind(&params)
  1232. err := gm_services.UpgradeRole(ctx, params)
  1233. if err != nil {
  1234. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1235. return
  1236. }
  1237. ctx.JSON(200, forms.Resp{})
  1238. }
  1239. func GetRoleLevel(ctx *gin.Context) {
  1240. var params forms.GetRoleLevelReq
  1241. if err := ctx.ShouldBind(&params); err != nil {
  1242. ctx.JSON(200, ErrorResponse(err))
  1243. return
  1244. }
  1245. params.RoleName = ctx.Query("role_name")
  1246. //fmt.Println()
  1247. levelList, err := gm_services.GetRoleLevel(ctx, params)
  1248. if err != nil {
  1249. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1250. return
  1251. }
  1252. ctx.JSON(200, forms.Resp{
  1253. Code: 0,
  1254. Msg: "",
  1255. Data: levelList,
  1256. })
  1257. }
  1258. func AddCoin(ctx *gin.Context) {
  1259. var params forms.AddCoinReq
  1260. ctx.ShouldBindJSON(&params)
  1261. err := gm_services.AddCoin(ctx, params)
  1262. if err != nil {
  1263. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1264. return
  1265. }
  1266. ctx.JSON(200, forms.Resp{})
  1267. }
  1268. // 删除玩家游戏数据
  1269. func DeletePlayer(ctx *gin.Context) {
  1270. var (
  1271. req forms.DeleteUserPlayerReq
  1272. err error
  1273. )
  1274. if err = ctx.ShouldBind(&req); err != nil {
  1275. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1276. return
  1277. }
  1278. err = gm_services.DeleteUserAccount(ctx, req.UserId)
  1279. if err != nil {
  1280. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1281. return
  1282. }
  1283. ctx.JSON(http.StatusOK, forms.Resp{})
  1284. }
  1285. // 删除玩家账号
  1286. func DeleteAccount(ctx *gin.Context) {
  1287. var (
  1288. req forms.DeleteUserAccountReq
  1289. err error
  1290. )
  1291. if err = ctx.ShouldBind(&req); err != nil {
  1292. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1293. return
  1294. }
  1295. err = gm_services.DeleteAccount(ctx, req.AccId)
  1296. if err != nil {
  1297. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1298. return
  1299. }
  1300. ctx.JSON(http.StatusOK, forms.Resp{})
  1301. }
  1302. func OpenAccount(ctx *gin.Context) {
  1303. var (
  1304. req forms.OpenAccountReq
  1305. err error
  1306. )
  1307. if err = ctx.ShouldBind(&req); err != nil {
  1308. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1309. return
  1310. }
  1311. err = gm_services.OpenAccount(req.UserId)
  1312. if err != nil {
  1313. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1314. return
  1315. }
  1316. ctx.JSON(http.StatusOK, forms.Resp{})
  1317. }
  1318. func LevelProgress(c *gin.Context) {
  1319. var params = forms.LevelProgressReq{}
  1320. if err := c.ShouldBind(&params); err != nil {
  1321. c.JSON(http.StatusOK, ErrorResponse(err))
  1322. return
  1323. }
  1324. data, total := gm_services.QueryPlayerChapter(params.PlayerId)
  1325. var models forms.ListRes
  1326. models.List = data
  1327. if total <= 0 {
  1328. total = 1
  1329. }
  1330. models.PageCount = 1
  1331. c.JSON(200, serializer.Suc(models))
  1332. }
  1333. // 游戏玩家数据报警列表
  1334. func AlarmGameDataList(c *gin.Context) {
  1335. var req forms.AlarmGameDataListReq
  1336. if err := c.ShouldBind(&req); err != nil {
  1337. c.JSON(http.StatusOK, ErrorResponse(err))
  1338. return
  1339. }
  1340. if err := forms.ParseParams(&req); err != nil {
  1341. c.JSON(http.StatusOK, ErrorResponse(err))
  1342. return
  1343. }
  1344. result := gm_services.AlarmGameDataList(c, req)
  1345. c.JSON(http.StatusOK, result)
  1346. }
  1347. func AlarmAttrList(c *gin.Context) {
  1348. var req forms.AlarmAttrReq
  1349. if err := c.ShouldBind(&req); err != nil {
  1350. c.JSON(http.StatusOK, ErrorResponse(err))
  1351. return
  1352. }
  1353. if err := forms.ParseParams(&req); err != nil {
  1354. c.JSON(http.StatusOK, ErrorResponse(err))
  1355. return
  1356. }
  1357. result := gm_services.AlarmAttrList(c, req)
  1358. c.JSON(http.StatusOK, result)
  1359. }
  1360. func AlarmCheatingList(c *gin.Context) {
  1361. var req forms.AlarmCheatingReq
  1362. if err := c.ShouldBind(&req); err != nil {
  1363. c.JSON(http.StatusOK, ErrorResponse(err))
  1364. return
  1365. }
  1366. if err := forms.ParseParams(&req); err != nil {
  1367. c.JSON(http.StatusOK, ErrorResponse(err))
  1368. return
  1369. }
  1370. result := gm_services.AlarmCheatingList(c, req)
  1371. c.JSON(http.StatusOK, result)
  1372. }
  1373. func AddGift(c *gin.Context) {
  1374. var params forms.AddGiftReq
  1375. c.ShouldBind(&params)
  1376. err := gm_services.AddGift(c, params)
  1377. if err != nil {
  1378. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1379. return
  1380. }
  1381. c.JSON(200, forms.Resp{})
  1382. }