user_account.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. package api
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "gadmin/internal/admin/consts"
  6. "gadmin/internal/admin/forms"
  7. "gadmin/internal/admin/service"
  8. "gadmin/internal/gorm/model"
  9. "gadmin/utility/serializer"
  10. "github.com/gin-gonic/gin"
  11. "github.com/go-resty/resty/v2"
  12. "os"
  13. )
  14. func UserAccountList(c *gin.Context) {
  15. var req forms.UserAccountListReq
  16. if err := c.ShouldBind(&req); err != nil {
  17. c.JSON(200, ErrorResponse(err))
  18. return
  19. }
  20. if err := forms.ParseParams(&req); err != nil {
  21. c.JSON(200, ErrorResponse(err))
  22. return
  23. }
  24. c.JSON(200, service.UserAccount.List(c, req))
  25. }
  26. func UserAccountSearch(c *gin.Context) {
  27. var req forms.UserAccountSearchReq
  28. if err := c.ShouldBind(&req); err != nil {
  29. c.JSON(200, ErrorResponse(err))
  30. return
  31. }
  32. if err := forms.ParseParams(&req); err != nil {
  33. c.JSON(200, ErrorResponse(err))
  34. return
  35. }
  36. c.JSON(200, service.UserAccount.Search(c, req))
  37. }
  38. func UserAccountGet(c *gin.Context) {
  39. var req forms.UserAccountGetReq
  40. if err := c.ShouldBind(&req); err != nil {
  41. c.JSON(200, ErrorResponse(err))
  42. return
  43. }
  44. if err := forms.ParseParams(&req); err != nil {
  45. c.JSON(200, ErrorResponse(err))
  46. return
  47. }
  48. c.JSON(200, service.UserAccount.Get(c, req))
  49. }
  50. func UserBan(c *gin.Context) {
  51. var req forms.UserAccountBanReq
  52. if err := c.ShouldBind(&req); err != nil {
  53. c.JSON(200, ErrorResponse(err))
  54. return
  55. }
  56. c.JSON(200, service.UserAccount.BanUser(c, req))
  57. }
  58. /*func SingleBanUser(c *gin.Context) {
  59. var req forms.UserAccountBanReq
  60. if err := c.ShouldBind(&req); err != nil {
  61. c.JSON(200, ErrorResponse(err))
  62. return
  63. }
  64. c.JSON(200, service.UserAccount.SingleBanUser(c, req))
  65. }
  66. func UpdatePlayerPaySwitch(c *gin.Context) {
  67. var req forms.GmSetPaySwitch
  68. if err := c.ShouldBind(&req); err != nil {
  69. c.JSON(200, ErrorResponse(err))
  70. return
  71. }
  72. c.JSON(200, service.UserAccount.UpdatePaySwitch(c, req))
  73. }*/
  74. func BanUserChat(c *gin.Context) {
  75. var req forms.BanChatReq
  76. if err := c.ShouldBind(&req); err != nil {
  77. c.JSON(200, ErrorResponse(err))
  78. return
  79. }
  80. c.JSON(200, service.UserAccount.BanUserChat(c, req))
  81. }
  82. /*func UpdateNickname(c *gin.Context) {
  83. var req forms.UpdateNicknameReq
  84. if err := c.ShouldBind(&req); err != nil {
  85. c.JSON(200, ErrorResponse(err))
  86. return
  87. }
  88. c.JSON(200, service.UserAccount.UpdateNickname(c, req))
  89. }*/
  90. var ServiceMap = map[int64]struct {
  91. ServiceName string
  92. ApiKey string
  93. }{
  94. 1: {
  95. ServiceName: "微信",
  96. ApiKey: "WX_RELEASE_GM_API",
  97. },
  98. 2: {
  99. ServiceName: "抖音",
  100. ApiKey: "DY_RELEASE_GM_API",
  101. },
  102. 3: {
  103. ServiceName: "美团",
  104. ApiKey: "MT_RELEASE_GM_API",
  105. },
  106. 4: {
  107. ServiceName: "闲闲",
  108. ApiKey: "XX_RELEASE_GM_API",
  109. },
  110. }
  111. func CompatibilityTestVerify(c *gin.Context) {
  112. var req forms.CompatibilityTestVerifyReq
  113. if err := c.ShouldBind(&req); err != nil {
  114. c.JSON(200, ErrorResponse(err))
  115. return
  116. }
  117. if os.Getenv("GIN_MODE") == "release" {
  118. c.JSON(200, gin.H{"code": 1, "msg": "正式服不允许操作!"})
  119. return
  120. }
  121. if _, ok := ServiceMap[req.Service]; !ok {
  122. c.JSON(200, gin.H{"code": 1, "msg": "请选择正确的服务器!"})
  123. return
  124. }
  125. var (
  126. client = resty.New().SetDebug(true)
  127. url = fmt.Sprintf("%s/api/migrate/userInfo", os.Getenv(ServiceMap[req.Service].ApiKey))
  128. data = `{"player_id":%v}`
  129. )
  130. fmt.Printf("url:%v; data:%v; token:%v; params:%+v", url, data, os.Getenv("RELEASE_GM_API_TOKEN"), req)
  131. post, err := client.R().
  132. SetHeader("Content-Type", "application/json").
  133. SetHeader("token", os.Getenv("RELEASE_GM_API_TOKEN")).
  134. SetBody(fmt.Sprintf(data, req.ProduceUserId)).Post(url)
  135. if err != nil {
  136. c.JSON(200, ErrorResponse(err))
  137. return
  138. }
  139. type RspData struct {
  140. *model.UserAccount
  141. Has bool `json:"has"`
  142. }
  143. type Rsp struct {
  144. Code int `json:"code"`
  145. Data RspData `json:"data"`
  146. Msg string `json:"msg"`
  147. Error string `json:"error"`
  148. }
  149. var rsp *Rsp
  150. if err = json.Unmarshal(post.Body(), &rsp); err != nil {
  151. c.JSON(200, ErrorResponse(err))
  152. return
  153. }
  154. if rsp == nil {
  155. c.JSON(200, serializer.Err(consts.CodeParamErr, "未解析到玩家信息!", err))
  156. return
  157. }
  158. if rsp.Code != 0 {
  159. c.JSON(200, serializer.Err(consts.CodeParamErr, fmt.Sprintf("查询出错:%+v", rsp.Error), nil))
  160. return
  161. }
  162. rsp.Data.Has = true
  163. c.JSON(200, serializer.Suc(rsp.Data))
  164. }
  165. /*func CompatibilityTestMigrate(c *gin.Context) {
  166. var req forms.CompatibilityTestMigrateReq
  167. if err := c.ShouldBind(&req); err != nil {
  168. c.JSON(200, ErrorResponse(err))
  169. return
  170. }
  171. if os.Getenv("GIN_MODE") == "release" {
  172. c.JSON(200, gin.H{"code": 1, "msg": "正式服不允许操作!"})
  173. return
  174. }
  175. if _, ok := ServiceMap[req.Service]; !ok {
  176. c.JSON(200, gin.H{"code": 1, "msg": "请选择正确的服务器!"})
  177. return
  178. }
  179. var (
  180. client = resty.New().SetDebug(true)
  181. url = fmt.Sprintf("%s/api/migrate/complete", os.Getenv(ServiceMap[req.Service].ApiKey))
  182. data = `{"player_id":%v}`
  183. )
  184. post, err := client.R().
  185. SetHeader("Content-Type", "application/json").
  186. SetHeader("token", os.Getenv("RELEASE_GM_API_TOKEN")).
  187. SetBody(fmt.Sprintf(data, req.ProduceUserId)).Post(url)
  188. if err != nil {
  189. c.JSON(200, ErrorResponse(err))
  190. return
  191. }
  192. logrus.Warnf("CompatibilityTestMigrate post:%+v", post)
  193. type Rsp struct {
  194. Code int `json:"code"`
  195. Data *forms.MigrateCompleteData `json:"data"`
  196. Msg string `json:"msg"`
  197. Error string `json:"error"`
  198. }
  199. var rsp *Rsp
  200. if err = json.Unmarshal(post.Body(), &rsp); err != nil {
  201. c.JSON(200, ErrorResponse(err))
  202. return
  203. }
  204. if rsp == nil {
  205. c.JSON(200, serializer.Err(consts.CodeParamErr, "迁移未解析到玩家信息!", err))
  206. return
  207. }
  208. if rsp.Code != 0 {
  209. c.JSON(200, serializer.Err(consts.CodeParamErr, fmt.Sprintf("迁移出错:%+v", rsp.Error), nil))
  210. return
  211. }
  212. if rsp.Data == nil {
  213. c.JSON(200, serializer.Err(consts.CodeParamErr, "迁移未解析到玩家信息-2!", nil))
  214. return
  215. }
  216. if rsp.Data.PlayerMaterial == nil {
  217. c.JSON(200, serializer.Err(consts.CodeParamErr, "迁移未解析到玩家信息-3!", nil))
  218. return
  219. }
  220. DB, err := player.GetDBByUserId(req.UserId)
  221. if err != nil {
  222. c.JSON(200, serializer.Err(consts.CodeParamErr, "GetDBByUserId err", err))
  223. return
  224. }
  225. q := query.Use(config.GDBGroup[DB])
  226. err = q.Transaction(func(tx *query.Query) error {
  227. // 材料表
  228. if _, err = tx.PlayerMaterial.WithContext(c).Where(tx.PlayerMaterial.Playerid.Eq(req.UserId)).Delete(); err != nil {
  229. return err
  230. }
  231. pm := rsp.Data.PlayerMaterial
  232. pm.ID = 0
  233. pm.Playerid = req.UserId
  234. if err = tx.PlayerMaterial.WithContext(c).Create(FilterEmptyPlayerMaterial(pm)); err != nil {
  235. return err
  236. }
  237. return nil
  238. })
  239. if err != nil {
  240. c.JSON(200, ErrorResponse(err))
  241. return
  242. }
  243. c.JSON(200, serializer.Suc(nil))
  244. }
  245. // FilterEmptyPlayerMaterial 对一些空值可能存在转换异常的做下初始化处理
  246. func FilterEmptyPlayerMaterial(value *model.PlayerMaterial) *model.PlayerMaterial {
  247. if value == nil {
  248. return nil
  249. }
  250. if value.BroadTrigger == "" {
  251. bt := new(model2.BroadTrigger)
  252. bt.SynthEquip = make(map[string]struct{})
  253. b, _ := json.Marshal(bt)
  254. value.BroadTrigger = string(b)
  255. }
  256. if value.Treasures == "" {
  257. b, _ := json.Marshal(make([]*model2.DropedTreasure, 0))
  258. value.Treasures = string(b)
  259. }
  260. if value.RoleCollocate == "" {
  261. b, _ := json.Marshal(make([]int, 0))
  262. value.RoleCollocate = string(b)
  263. }
  264. if value.BuffMaterials == "" {
  265. b, _ := json.Marshal(make([]int, 0))
  266. value.BuffMaterials = string(b)
  267. }
  268. return value
  269. }*/