gm.go 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677
  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 AddLegend(ctx *gin.Context) {
  833. var params forms.AddMaterialReq
  834. ctx.ShouldBind(&params)
  835. err := gm_services.AddLegend(ctx, params)
  836. if err != nil {
  837. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  838. return
  839. }
  840. ctx.JSON(200, forms.Resp{})
  841. }
  842. func GetAllTalents(ctx *gin.Context) {
  843. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Talents})
  844. }
  845. func GetAllEquipments(ctx *gin.Context) {
  846. var data = make(map[int]gmdata.Equipment, len(gmdata.EquipmentDict))
  847. for _, v := range gmdata.EquipmentDict {
  848. data[int(v.LevelId)] = v
  849. }
  850. ctx.JSON(200, forms.Resp{Code: 0, Data: gin.H{"list": data}})
  851. }
  852. func GetAllExp(ctx *gin.Context) {
  853. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.PlayLevel})
  854. }
  855. func GetAllMaterials(ctx *gin.Context) {
  856. type Material struct {
  857. ID int `json:"ItemId"`
  858. Type int `json:"ItemType"`
  859. Name string `json:"ItemName"`
  860. }
  861. var data = make(map[string][]Material)
  862. for _, v := range gmdata.MaterialsDict {
  863. type1 := fmt.Sprintf("%d", v.Type)
  864. data[type1] = append(data[type1], Material{
  865. ID: v.ID,
  866. Type: v.Type,
  867. Name: v.Name,
  868. })
  869. }
  870. ctx.JSON(200, forms.Resp{Code: 0, Data: data})
  871. }
  872. func GetAllRunes(ctx *gin.Context) {
  873. type Material struct {
  874. ID int `json:"ItemId"`
  875. Type int `json:"ItemType"`
  876. Name string `json:"ItemName"`
  877. }
  878. var data = make(map[string][]Material)
  879. for _, v := range gmdata.RunesDict {
  880. type1 := fmt.Sprintf("%d", v.Type)
  881. data[type1] = append(data[type1], Material{
  882. ID: v.ID,
  883. Type: v.Type,
  884. Name: v.Name,
  885. })
  886. }
  887. ctx.JSON(200, forms.Resp{Code: 0, Data: data})
  888. }
  889. func GetAllLegends(ctx *gin.Context) {
  890. type Material struct {
  891. ID int `json:"ItemId"`
  892. Type int `json:"ItemType"`
  893. Name string `json:"ItemName"`
  894. }
  895. var data = make(map[string][]Material)
  896. for _, v := range gmdata.LegendsDict {
  897. type1 := fmt.Sprintf("%d", v.Type)
  898. data[type1] = append(data[type1], Material{
  899. ID: v.ID,
  900. Type: v.Type,
  901. Name: v.Name,
  902. })
  903. }
  904. ctx.JSON(200, forms.Resp{Code: 0, Data: data})
  905. }
  906. func GetAllRoles(ctx *gin.Context) {
  907. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Roles})
  908. }
  909. func GetAllGoods(ctx *gin.Context) {
  910. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.GoodsInfo})
  911. }
  912. func GetAllChapters(ctx *gin.Context) {
  913. ctx.JSON(200, forms.Resp{Code: 0, Data: gmdata.Chapters})
  914. }
  915. func MailList(ctx *gin.Context) {
  916. var params = forms.EmailListReq{Page: 1, PerPage: 30}
  917. ctx.ShouldBind(&params)
  918. mails, total, _ := gm_services.GetEmails(params.Page, params.PerPage)
  919. for _, v := range mails {
  920. if v.OperatorId > 0 {
  921. user, err := service.User.GetUser(v.OperatorId)
  922. if err != nil {
  923. logrus.Warnf("MailList GetUser err:%+v", err)
  924. }
  925. if user != nil {
  926. v.Sender = fmt.Sprintf("%v(%v)", user.UserName, v.OperatorId)
  927. }
  928. }
  929. }
  930. var models forms.ListRes
  931. models.List = mails
  932. models.Page = int64(params.Page)
  933. models.PerPage = int64(params.PerPage)
  934. if total <= 0 {
  935. total = 1
  936. }
  937. models.PageCount = int64(total / params.PerPage)
  938. ctx.JSON(200, serializer.Suc(models))
  939. }
  940. func SendMail(ctx *gin.Context) {
  941. var item forms.EmailItemReq
  942. ctx.ShouldBind(&item)
  943. item.OperatorId = token.GetUID(ctx)
  944. _, err := gm_services.AddEmails(&item)
  945. if err != nil {
  946. ctx.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  947. } else {
  948. ctx.JSON(200, gin.H{"data": item, "code": 0})
  949. }
  950. }
  951. func DeleteMail(ctx *gin.Context) {
  952. var item forms.EmailItemReq
  953. ctx.ShouldBind(&item)
  954. err := gm_services.DeleteEmail(item.Id)
  955. if err != nil {
  956. ctx.JSON(200, gin.H{"code": 1, "msg": err.Error()})
  957. } else {
  958. ctx.JSON(200, gin.H{"data": item, "code": 0})
  959. }
  960. }
  961. func GetNoticeList(c *gin.Context) {
  962. var params forms.NoticeListReq
  963. c.ShouldBind(&params)
  964. resp, err := gm_services.GetNoticeList(params)
  965. if err != nil {
  966. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  967. return
  968. }
  969. var models forms.ListRes
  970. models.List = resp
  971. c.JSON(200, serializer.Suc(models))
  972. }
  973. func AddNotice(c *gin.Context) {
  974. var params forms.AddNoticeReq
  975. c.ShouldBind(&params)
  976. _, err := gm_services.AddNotice(params)
  977. if err != nil {
  978. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  979. return
  980. }
  981. c.JSON(200, forms.Resp{})
  982. }
  983. func DelNotice(c *gin.Context) {
  984. var params forms.DeleteNoticeReq
  985. c.ShouldBind(&params)
  986. err := gm_services.DelNotice(params.Id)
  987. if err != nil {
  988. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  989. return
  990. }
  991. c.JSON(200, forms.Resp{})
  992. }
  993. func UpdateSwitcher(c *gin.Context) {
  994. var params = forms.UpdateSwitcherReq{IosPay: -1, DoubleAd: 0}
  995. c.ShouldBind(&params)
  996. err := gm_services.UpdateSwitcher(c, params)
  997. if err != nil {
  998. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  999. return
  1000. }
  1001. c.JSON(200, forms.Resp{})
  1002. }
  1003. func GetConfig(ctx *gin.Context) {
  1004. list, simple, json1 := service.ServerOption.ConfigOption(ctx)
  1005. ctx.JSON(200, forms.Resp{Code: 0, Data: map[string]interface{}{
  1006. "mode": os.Getenv("GIN_MODE"),
  1007. "admin_template": os.Getenv("ADMIN_TEMPLATE"),
  1008. "socket_url": os.Getenv("ADMIN_SOCKET_URL"),
  1009. "json_version": os.Getenv("JSON_VERSION"),
  1010. "admin_web_title": os.Getenv("ADMIN_WEB_TITLE"),
  1011. "amount_multiple": cast.ToInt64(os.Getenv("AMOUNT_MULTIPLE")),
  1012. "channel_option": service.Channel.Option(ctx),
  1013. "channel_tree_option": service.Channel.TreeOption(ctx),
  1014. "server_option": list,
  1015. "server_simple_option": simple,
  1016. "server_json_option": json1,
  1017. "flag_option": getUserFlagOption(),
  1018. "deploy_type_option": deployTypeOption(),
  1019. "deploy_serv_group_option": deployServGroupOption(),
  1020. "chapter_option": gmdata.ChapterOption,
  1021. }})
  1022. }
  1023. func deployTypeOption() (lst []forms.Option) {
  1024. lst = append(lst, forms.Option{
  1025. Value: nil,
  1026. Label: "全部",
  1027. Name: "全部",
  1028. })
  1029. for _, v := range consts.DeployTypeSlice {
  1030. lst = append(lst, forms.Option{
  1031. Value: v,
  1032. Label: v,
  1033. Name: v,
  1034. })
  1035. }
  1036. return
  1037. }
  1038. func deployServGroupOption() (lst map[string][]forms.Option) {
  1039. lst = make(map[string][]forms.Option)
  1040. for _, v := range consts.DeployTypeSlice {
  1041. switch v {
  1042. case consts.DeployTypeLogin:
  1043. lst[v] = append(lst[v], forms.Option{
  1044. Value: "all",
  1045. Label: "全选",
  1046. Name: "全选",
  1047. })
  1048. for _, v2 := range consts.DeployServLoginGroup {
  1049. lst[v] = append(lst[v], forms.Option{
  1050. Value: v2,
  1051. Label: v2,
  1052. Name: v2,
  1053. })
  1054. }
  1055. default: //consts.DeployTypeGrave:
  1056. lst[v] = append(lst[v], forms.Option{
  1057. Value: "all",
  1058. Label: "全选",
  1059. Name: "全选",
  1060. })
  1061. for _, v2 := range consts.DeployServGraveGroup {
  1062. lst[v] = append(lst[v], forms.Option{
  1063. Value: v2,
  1064. Label: v2,
  1065. Name: v2,
  1066. })
  1067. }
  1068. // case consts.DeployTypeGate:
  1069. // lst[v] = append(lst[v], forms.Option{
  1070. // Value: "all",
  1071. // Label: "全选",
  1072. // Name: "全选",
  1073. // })
  1074. // for _, v2 := range consts.DeployServGateGroup {
  1075. // lst[v] = append(lst[v], forms.Option{
  1076. // Value: v2,
  1077. // Label: v2,
  1078. // Name: v2,
  1079. // })
  1080. // }
  1081. }
  1082. }
  1083. return
  1084. }
  1085. func getUserFlagOption() (lst []forms.Option) {
  1086. lst = append(lst, forms.Option{
  1087. Value: "-1",
  1088. Label: "全部",
  1089. Name: "全部",
  1090. })
  1091. for _, flag := range consts.UserFlags {
  1092. lst = append(lst, forms.Option{
  1093. Value: flag,
  1094. Label: consts.UserFlagMap[flag],
  1095. Name: consts.UserFlagMap[flag],
  1096. })
  1097. }
  1098. return
  1099. }
  1100. func GetJSONPath(ctx *gin.Context) {
  1101. ctx.JSON(200, forms.Resp{Code: 0, Data: os.Getenv("JSON_PATH") + "/" + os.Getenv("JSON_VERSION")})
  1102. }
  1103. func SetNewJsonPath(ctx *gin.Context) {
  1104. var params forms.SetConfPathReq
  1105. ctx.ShouldBind(&params)
  1106. err := gmdata.SetConfPath(params.Path)
  1107. if err != nil {
  1108. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1109. return
  1110. }
  1111. ctx.JSON(200, forms.Resp{})
  1112. }
  1113. func ToolsRestartView(c *gin.Context) {
  1114. var params = forms.ToolsRestartViewReq{}
  1115. err := c.ShouldBind(&params)
  1116. if err != nil {
  1117. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1118. return
  1119. }
  1120. if params.ID < 1 {
  1121. c.JSON(200, forms.Resp{Code: 1, Msg: "ID不能为空"})
  1122. return
  1123. }
  1124. models, err := gm_services.ToolsRestartView(c, params)
  1125. if err != nil {
  1126. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1127. return
  1128. }
  1129. c.JSON(200, forms.Resp{Code: 0, Data: models})
  1130. }
  1131. func ToolsRestart(c *gin.Context) {
  1132. var params = forms.ToolsRestartReq{}
  1133. err := c.ShouldBind(&params)
  1134. if err != nil {
  1135. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1136. return
  1137. }
  1138. if params.Version == "" {
  1139. c.JSON(200, forms.Resp{Code: 1, Msg: "版本号不能为空"})
  1140. return
  1141. }
  1142. if err = gm_services.ToolsRestart(c, params); err != nil {
  1143. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1144. return
  1145. }
  1146. c.JSON(200, forms.Resp{Code: 0, Msg: "Execute Command finished"})
  1147. }
  1148. func ToolsRestartLog(c *gin.Context) {
  1149. var params = forms.ToolsRestartLogReq{}
  1150. err := c.ShouldBind(&params)
  1151. if err != nil {
  1152. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1153. return
  1154. }
  1155. res, err := gm_services.ToolsRestartLogList(c, params)
  1156. if err != nil {
  1157. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1158. return
  1159. }
  1160. var models forms.ListRes
  1161. models.List = res.List
  1162. if res.TotalCount <= 0 {
  1163. res.TotalCount = 1
  1164. }
  1165. models.Page = int64(params.Page)
  1166. models.PerPage = int64(params.Limit)
  1167. models.PageCount = res.TotalCount / 10
  1168. c.JSON(200, serializer.Suc(models))
  1169. }
  1170. /*func UpdateGuides(c *gin.Context) {
  1171. var (
  1172. req forms.UpdateGuidesReq
  1173. err error
  1174. )
  1175. if err = c.ShouldBind(&req); err != nil {
  1176. c.JSON(200, ErrorResponse(err))
  1177. return
  1178. }
  1179. if err = forms.ParseParams(&req); err != nil {
  1180. c.JSON(200, ErrorResponse(err))
  1181. return
  1182. }
  1183. c.JSON(200, service.Gm.UpdateGuides(c, req))
  1184. }*/
  1185. func UpdateChapter(c *gin.Context) {
  1186. var (
  1187. req forms.UpdateChapterReq
  1188. err error
  1189. )
  1190. if err = c.ShouldBind(&req); err != nil {
  1191. c.JSON(200, ErrorResponse(err))
  1192. return
  1193. }
  1194. if err = forms.ParseParams(&req); err != nil {
  1195. c.JSON(200, ErrorResponse(err))
  1196. return
  1197. }
  1198. c.JSON(200, service.Gm.UpdateChapter(c, req))
  1199. }
  1200. /* func UpdateTalents(c *gin.Context) {
  1201. var (
  1202. req forms.UpdateTalentReq
  1203. err error
  1204. )
  1205. if err = c.ShouldBind(&req); err != nil {
  1206. c.JSON(200, ErrorResponse(err))
  1207. return
  1208. }
  1209. if err = forms.ParseParams(&req); err != nil {
  1210. c.JSON(200, ErrorResponse(err))
  1211. return
  1212. }
  1213. c.JSON(200, service.Gm.UpdateTalent(c, req))
  1214. }
  1215. func UpdatePlayerBase(c *gin.Context) {
  1216. var (
  1217. req forms.UpdatePlayerBaseReq
  1218. err error
  1219. )
  1220. if err = c.ShouldBind(&req); err != nil {
  1221. c.JSON(200, ErrorResponse(err))
  1222. return
  1223. }
  1224. if err = forms.ParseParams(&req); err != nil {
  1225. c.JSON(200, ErrorResponse(err))
  1226. return
  1227. }
  1228. c.JSON(200, service.Gm.UpdatePlayerBase(c, req))
  1229. }*/
  1230. ////////////.....///
  1231. func AddRoleExp(ctx *gin.Context) {
  1232. var (
  1233. params forms.UpdateRoleReq
  1234. err error
  1235. )
  1236. if err = ctx.ShouldBind(&params); err != nil {
  1237. ctx.JSON(200, ErrorResponse(err))
  1238. return
  1239. }
  1240. if err = gm_services.UpdatePlayAttr(ctx, params); err != nil {
  1241. ctx.JSON(200, ErrorResponse(err))
  1242. return
  1243. }
  1244. ctx.JSON(200, serializer.Suc(nil))
  1245. }
  1246. func AddRoleStamina(ctx *gin.Context) {
  1247. var params forms.UpdateRoleReq
  1248. ctx.ShouldBindJSON(&params)
  1249. err := gm_services.UpdatePlayAttr(ctx, params)
  1250. if err != nil {
  1251. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1252. return
  1253. }
  1254. ctx.JSON(200, forms.Resp{})
  1255. }
  1256. func UpgradeRole(ctx *gin.Context) {
  1257. var params forms.UpgradeRoleReq
  1258. ctx.ShouldBind(&params)
  1259. err := gm_services.UpgradeRole(ctx, params)
  1260. if err != nil {
  1261. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1262. return
  1263. }
  1264. ctx.JSON(200, forms.Resp{})
  1265. }
  1266. func GetRoleLevel(ctx *gin.Context) {
  1267. var params forms.GetRoleLevelReq
  1268. if err := ctx.ShouldBind(&params); err != nil {
  1269. ctx.JSON(200, ErrorResponse(err))
  1270. return
  1271. }
  1272. params.RoleName = ctx.Query("role_name")
  1273. //fmt.Println()
  1274. levelList, err := gm_services.GetRoleLevel(ctx, params)
  1275. if err != nil {
  1276. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1277. return
  1278. }
  1279. ctx.JSON(200, forms.Resp{
  1280. Code: 0,
  1281. Msg: "",
  1282. Data: levelList,
  1283. })
  1284. }
  1285. func AddCoin(ctx *gin.Context) {
  1286. var params forms.AddCoinReq
  1287. ctx.ShouldBindJSON(&params)
  1288. err := gm_services.AddCoin(ctx, params)
  1289. if err != nil {
  1290. ctx.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1291. return
  1292. }
  1293. ctx.JSON(200, forms.Resp{})
  1294. }
  1295. // 删除玩家游戏数据
  1296. func DeletePlayer(ctx *gin.Context) {
  1297. var (
  1298. req forms.DeleteUserPlayerReq
  1299. err error
  1300. )
  1301. if err = ctx.ShouldBind(&req); err != nil {
  1302. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1303. return
  1304. }
  1305. err = gm_services.DeleteUserAccount(ctx, req.UserId)
  1306. if err != nil {
  1307. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1308. return
  1309. }
  1310. ctx.JSON(http.StatusOK, forms.Resp{})
  1311. }
  1312. // 删除玩家账号
  1313. func DeleteAccount(ctx *gin.Context) {
  1314. var (
  1315. req forms.DeleteUserAccountReq
  1316. err error
  1317. )
  1318. if err = ctx.ShouldBind(&req); err != nil {
  1319. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1320. return
  1321. }
  1322. err = gm_services.DeleteAccount(ctx, req.AccId)
  1323. if err != nil {
  1324. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1325. return
  1326. }
  1327. ctx.JSON(http.StatusOK, forms.Resp{})
  1328. }
  1329. func OpenAccount(ctx *gin.Context) {
  1330. var (
  1331. req forms.OpenAccountReq
  1332. err error
  1333. )
  1334. if err = ctx.ShouldBind(&req); err != nil {
  1335. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1336. return
  1337. }
  1338. err = gm_services.OpenAccount(req.UserId)
  1339. if err != nil {
  1340. ctx.JSON(http.StatusOK, ErrorResponse(err))
  1341. return
  1342. }
  1343. ctx.JSON(http.StatusOK, forms.Resp{})
  1344. }
  1345. func LevelProgress(c *gin.Context) {
  1346. var params = forms.LevelProgressReq{}
  1347. if err := c.ShouldBind(&params); err != nil {
  1348. c.JSON(http.StatusOK, ErrorResponse(err))
  1349. return
  1350. }
  1351. data, total := gm_services.QueryPlayerChapter(params.PlayerId)
  1352. var models forms.ListRes
  1353. models.List = data
  1354. if total <= 0 {
  1355. total = 1
  1356. }
  1357. models.PageCount = 1
  1358. c.JSON(200, serializer.Suc(models))
  1359. }
  1360. // 游戏玩家数据报警列表
  1361. func AlarmGameDataList(c *gin.Context) {
  1362. var req forms.AlarmGameDataListReq
  1363. if err := c.ShouldBind(&req); err != nil {
  1364. c.JSON(http.StatusOK, ErrorResponse(err))
  1365. return
  1366. }
  1367. if err := forms.ParseParams(&req); err != nil {
  1368. c.JSON(http.StatusOK, ErrorResponse(err))
  1369. return
  1370. }
  1371. result := gm_services.AlarmGameDataList(c, req)
  1372. c.JSON(http.StatusOK, result)
  1373. }
  1374. func AlarmAttrList(c *gin.Context) {
  1375. var req forms.AlarmAttrReq
  1376. if err := c.ShouldBind(&req); err != nil {
  1377. c.JSON(http.StatusOK, ErrorResponse(err))
  1378. return
  1379. }
  1380. if err := forms.ParseParams(&req); err != nil {
  1381. c.JSON(http.StatusOK, ErrorResponse(err))
  1382. return
  1383. }
  1384. result := gm_services.AlarmAttrList(c, req)
  1385. c.JSON(http.StatusOK, result)
  1386. }
  1387. func AlarmCheatingList(c *gin.Context) {
  1388. var req forms.AlarmCheatingReq
  1389. if err := c.ShouldBind(&req); err != nil {
  1390. c.JSON(http.StatusOK, ErrorResponse(err))
  1391. return
  1392. }
  1393. if err := forms.ParseParams(&req); err != nil {
  1394. c.JSON(http.StatusOK, ErrorResponse(err))
  1395. return
  1396. }
  1397. result := gm_services.AlarmCheatingList(c, req)
  1398. c.JSON(http.StatusOK, result)
  1399. }
  1400. func AddGift(c *gin.Context) {
  1401. var params forms.AddGiftReq
  1402. c.ShouldBind(&params)
  1403. err := gm_services.AddGift(c, params)
  1404. if err != nil {
  1405. c.JSON(200, forms.Resp{Code: 1, Msg: err.Error()})
  1406. return
  1407. }
  1408. c.JSON(200, forms.Resp{})
  1409. }