retrofit.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. package service
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "gadmin/config"
  6. "gadmin/internal/admin/consts"
  7. "gadmin/internal/admin/forms"
  8. "gadmin/internal/admin/gm_rpc/rpc_share"
  9. "gadmin/internal/gorm/model"
  10. "gadmin/internal/gorm/query"
  11. "gadmin/package/gmdata"
  12. "gadmin/utility/character"
  13. "gadmin/utility/player"
  14. "gadmin/utility/serializer"
  15. "github.com/gin-gonic/gin"
  16. msg2 "leafstalk/covenant/msg"
  17. "strings"
  18. "time"
  19. )
  20. var Retrofit = new(sRetrofit)
  21. type sRetrofit struct{}
  22. func (s *sRetrofit) AddPlayer(ctx *gin.Context, req forms.RetrofitGroupAddPlayerReq) serializer.Response {
  23. if req.UserId <= 0 {
  24. return serializer.Err(consts.CodeParamErr, "用户ID不能为空!", nil)
  25. }
  26. var (
  27. q = query.Use(config.DB).RetrofitGroup
  28. r = query.Use(config.DB).Retrofit
  29. materials = make(map[int64]int64)
  30. equipments []int64
  31. userAccountModel model.UserAccount
  32. )
  33. playerAttr, err := player.GetAttrByUserId(req.UserId)
  34. if err != nil {
  35. return serializer.Err(consts.CodeParamErr, "查询出错 GetDBByUserId", err)
  36. }
  37. DB, err := player.GetDBByPlayerAttr(playerAttr)
  38. if err != nil {
  39. return serializer.Response{}
  40. }
  41. //获取userAccount
  42. err = config.LDB.WithContext(ctx).Scopes(model.UserAccountTable(&userAccountModel, playerAttr.AccID)).Where("accId = ?", playerAttr.AccID).First(&userAccountModel).Error
  43. if err != nil {
  44. return serializer.Err(consts.CodeParamErr, err.Error(), err)
  45. }
  46. openIdArr := strings.Split(userAccountModel.Openid, "@")
  47. data, err := q.WithContext(ctx).Where(q.ID.Eq(req.ID), q.Status.Eq(consts.StatusNormal)).First()
  48. if err != nil {
  49. return serializer.Err(consts.CodeParamErr, "查询出错 First", err)
  50. }
  51. retrofits, err := r.WithContext(ctx).Where(r.GroupID.Eq(data.ID), r.Status.Eq(consts.StatusNormal)).Find()
  52. if err != nil {
  53. return serializer.Err(consts.CodeParamErr, "查询出错 First2", err)
  54. }
  55. if len(retrofits) == 0 {
  56. return serializer.Err(consts.CodeParamErr, "该模板下没有可用的配装!", err)
  57. }
  58. for _, retrofit := range retrofits {
  59. // 装备
  60. if retrofit.Type == consts.RetrofitTypeEquipment {
  61. for i := 0; i < int(retrofit.Nums); i++ {
  62. equipments = append(equipments, retrofit.Mid)
  63. }
  64. continue
  65. }
  66. // 材料
  67. if retrofit.Type == consts.RetrofitTypeMaterial || retrofit.Type == consts.RetrofitTypeDiamond || retrofit.Type == consts.RetrofitTypeCoin {
  68. materials[retrofit.Mid] = retrofit.Nums
  69. }
  70. }
  71. // 批量添加
  72. if len(materials) > 0 || len(equipments) > 0 {
  73. msg := msg2.GmAddMaterial{
  74. MsgId: character.GenerateMsgId(),
  75. PlayerID: req.UserId,
  76. Materials: materials,
  77. Equipments: equipments,
  78. ClientPlat: openIdArr[1],
  79. }
  80. //if err = gate.SendToWorld(0, &materialsMsg); err != nil {
  81. // return serializer.Err(consts.CodeParamErr, fmt.Sprintf("添加配装失败,请检查!model.id:%d", data.ID), err)
  82. //}
  83. rpc_share.MsgMap[msg.MsgId] = fmt.Sprintf("GM为玩家[%d]添加配装[%s]", req.UserId, data.Name)
  84. var resp *msg2.ResponseGmAddMaterial
  85. res, err := config.GmNats.GmRequest(DB, "GmAddMaterial", msg)
  86. if err != nil {
  87. return serializer.Err(consts.CodeParamErr, err.Error(), err)
  88. }
  89. if err = json.Unmarshal(res, &resp); err != nil {
  90. return serializer.Err(consts.CodeParamErr, err.Error(), err)
  91. }
  92. rpc_share.LogChan <- rpc_share.LogMsg{
  93. MsgID: msg.MsgId,
  94. Data: resp,
  95. }
  96. }
  97. return serializer.Suc(nil)
  98. }
  99. func (s *sRetrofit) GroupOptions(ctx *gin.Context) serializer.Response {
  100. var (
  101. q = query.Use(config.DB).RetrofitGroup
  102. m = q.WithContext(ctx)
  103. lists []forms.OptionInt64
  104. )
  105. if err := m.Select(q.ID.As("value"), q.Name.As("label")).
  106. Where(q.Status.Eq(consts.StatusNormal)).
  107. Order(q.ID.Desc()).
  108. Limit(200).
  109. Scan(&lists); err != nil {
  110. return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
  111. }
  112. return serializer.Suc(lists)
  113. }
  114. func (s *sRetrofit) GroupList(ctx *gin.Context, req forms.RetrofitGroupListReq) serializer.Response {
  115. var (
  116. q = query.Use(config.DB).RetrofitGroup
  117. m = q.WithContext(ctx)
  118. offset int64 = 0
  119. models forms.UserAccountListRes
  120. lists []model.RetrofitGroup
  121. )
  122. m = m.Order(q.ID.Desc())
  123. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  124. count, err := m.Count()
  125. if err != nil {
  126. return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
  127. }
  128. if count > 0 {
  129. if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
  130. return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
  131. }
  132. }
  133. models.List = lists
  134. models.Page = req.Page
  135. models.PerPage = req.PerPage
  136. models.PageCount = (count + req.PerPage - 1) / req.PerPage
  137. return serializer.Suc(models)
  138. }
  139. func (s *sRetrofit) GroupEdit(ctx *gin.Context, req forms.RetrofitGroupEditReq) serializer.Response {
  140. var (
  141. q = query.Use(config.DB).RetrofitGroup
  142. err error
  143. )
  144. // 编辑
  145. if req.ID > 0 {
  146. _, err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Where(q.ID.Eq(req.ID)).Updates(model.RetrofitGroup{
  147. Name: req.Name,
  148. Remark: req.Remark,
  149. Sort: req.Sort,
  150. Status: req.Status,
  151. UpdatedAt: time.Now(),
  152. })
  153. if err != nil {
  154. return serializer.DBErr(err.Error(), err)
  155. }
  156. return serializer.Suc(nil)
  157. }
  158. // 新增
  159. createData := model.RetrofitGroup{
  160. Name: req.Name,
  161. Remark: req.Remark,
  162. Sort: req.Sort,
  163. Status: req.Status,
  164. CreatedAt: time.Now(),
  165. UpdatedAt: time.Now(),
  166. }
  167. if err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Create(&createData); err != nil {
  168. return serializer.DBErr(err.Error(), err)
  169. }
  170. if createData.ID < 1 {
  171. return serializer.ParamErr("创建失败,请稍后重试!", nil)
  172. }
  173. return serializer.Suc(nil)
  174. }
  175. func (s *sRetrofit) GroupDelete(ctx *gin.Context, req forms.RetrofitGroupDeleteReq) serializer.Response {
  176. var (
  177. q = query.Use(config.DB).RetrofitGroup
  178. //r = query.Use(config.DB).Retrofit
  179. err error
  180. )
  181. // 编辑
  182. if req.ID <= 0 {
  183. return serializer.ParamErr("ID不能空,删除失败!", nil)
  184. }
  185. //count, err := query.Use(config.DB).Retrofit.WithContext(ctx).Where(r.GroupID.Eq(req.ID)).Count()
  186. //if err != nil {
  187. // return serializer.DBErr(err.Error(), err)
  188. //}
  189. //
  190. //if count > 0 {
  191. // return serializer.ParamErr("防止误操作,请先删除模板的所有配装!", nil)
  192. //}
  193. _, err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Where(q.ID.Eq(req.ID)).Delete()
  194. if err != nil {
  195. return serializer.DBErr(err.Error(), err)
  196. }
  197. return serializer.Suc(nil)
  198. }
  199. func (s *sRetrofit) List(ctx *gin.Context, req forms.RetrofitListReq) serializer.Response {
  200. var (
  201. q = query.Use(config.DB).Retrofit
  202. m = q.WithContext(ctx)
  203. offset int64 = 0
  204. models forms.UserAccountListRes
  205. lists []model.Retrofit
  206. )
  207. if req.GroupId > 0 {
  208. m = m.Where(q.GroupID.Eq(req.GroupId))
  209. }
  210. m = m.Order(q.ID.Desc())
  211. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  212. count, err := m.Count()
  213. if err != nil {
  214. return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
  215. }
  216. if count > 0 {
  217. if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
  218. return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
  219. }
  220. }
  221. models.List = lists
  222. models.Page = req.Page
  223. models.PerPage = req.PerPage
  224. models.PageCount = (count + req.PerPage - 1) / req.PerPage
  225. return serializer.Suc(models)
  226. }
  227. func (s *sRetrofit) Edit(ctx *gin.Context, req forms.RetrofitEditReq) serializer.Response {
  228. var (
  229. q = query.Use(config.DB).Retrofit
  230. err error
  231. )
  232. if req.Type == consts.RetrofitTypeEquipment && req.Mid != gmdata.GetEquipmentStartID(req.Mid) {
  233. return serializer.ParamErr("目前只能添加1级装备", nil)
  234. }
  235. // 编辑
  236. if req.ID > 0 {
  237. _, err = query.Use(config.DB).Retrofit.WithContext(ctx).Where(q.ID.Eq(req.ID)).Updates(model.Retrofit{
  238. GroupID: req.GroupID,
  239. Name: req.Name,
  240. Type: req.Type,
  241. Mid: req.Mid,
  242. Nums: req.Nums,
  243. Status: req.Status,
  244. CreatedAt: time.Now(),
  245. })
  246. if err != nil {
  247. return serializer.DBErr(err.Error(), err)
  248. }
  249. return serializer.Suc(nil)
  250. }
  251. // 新增
  252. createData := model.Retrofit{
  253. GroupID: req.GroupID,
  254. Name: req.Name,
  255. Type: req.Type,
  256. Mid: req.Mid,
  257. Nums: req.Nums,
  258. Status: req.Status,
  259. CreatedAt: time.Now(),
  260. UpdatedAt: time.Now(),
  261. }
  262. if err = query.Use(config.DB).Retrofit.WithContext(ctx).Create(&createData); err != nil {
  263. return serializer.DBErr(err.Error(), err)
  264. }
  265. if createData.ID < 1 {
  266. return serializer.ParamErr("创建失败,请稍后重试!", nil)
  267. }
  268. return serializer.Suc(nil)
  269. }
  270. func (s *sRetrofit) Delete(ctx *gin.Context, req forms.RetrofitDeleteReq) serializer.Response {
  271. var (
  272. q = query.Use(config.DB).Retrofit
  273. err error
  274. )
  275. // 编辑
  276. if req.ID <= 0 {
  277. return serializer.ParamErr("ID不能空,删除失败!", nil)
  278. }
  279. _, err = query.Use(config.DB).Retrofit.WithContext(ctx).Where(q.ID.Eq(req.ID)).Delete()
  280. if err != nil {
  281. return serializer.DBErr(err.Error(), err)
  282. }
  283. return serializer.Suc(nil)
  284. }