123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- package service
- import (
- "encoding/json"
- "fmt"
- "gadmin/config"
- "gadmin/internal/admin/consts"
- "gadmin/internal/admin/forms"
- "gadmin/internal/admin/gm_rpc/rpc_share"
- "gadmin/internal/gorm/model"
- "gadmin/internal/gorm/query"
- "gadmin/package/gmdata"
- "gadmin/utility/character"
- "gadmin/utility/player"
- "gadmin/utility/serializer"
- "github.com/gin-gonic/gin"
- msg2 "leafstalk/covenant/msg"
- "strings"
- "time"
- )
- var Retrofit = new(sRetrofit)
- type sRetrofit struct{}
- func (s *sRetrofit) AddPlayer(ctx *gin.Context, req forms.RetrofitGroupAddPlayerReq) serializer.Response {
- if req.UserId <= 0 {
- return serializer.Err(consts.CodeParamErr, "用户ID不能为空!", nil)
- }
- var (
- q = query.Use(config.DB).RetrofitGroup
- r = query.Use(config.DB).Retrofit
- materials map[int64]int64
- equipments []int64
- userAccountModel model.UserAccount
- )
- playerAttr, err := player.GetAttrByUserId(req.UserId)
- if err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 GetDBByUserId", err)
- }
- DB, err := player.GetDBByPlayerAttr(playerAttr)
- if err != nil {
- return serializer.Response{}
- }
- //获取userAccount
- err = config.LDB.WithContext(ctx).Scopes(model.UserAccountTable(&userAccountModel, playerAttr.AccID)).Where("accId = ?", playerAttr.AccID).First(&userAccountModel).Error
- if err != nil {
- return serializer.Err(consts.CodeParamErr, err.Error(), err)
- }
- openIdArr := strings.Split(userAccountModel.Openid, "@")
- data, err := q.WithContext(ctx).Where(q.ID.Eq(req.ID), q.Status.Eq(consts.StatusNormal)).First()
- if err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 First", err)
- }
- retrofits, err := r.WithContext(ctx).Where(r.GroupID.Eq(data.ID), r.Status.Eq(consts.StatusNormal)).Find()
- if err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 First2", err)
- }
- if len(retrofits) == 0 {
- return serializer.Err(consts.CodeParamErr, "该模板下没有可用的配装!", err)
- }
- for _, retrofit := range retrofits {
- // 装备
- if retrofit.Type == consts.RetrofitTypeEquipment {
- for i := 0; i < int(retrofit.Nums); i++ {
- equipments = append(equipments, retrofit.Mid)
- }
- continue
- }
- // 材料
- if retrofit.Type == consts.RetrofitTypeMaterial || retrofit.Type == consts.RetrofitTypeDiamond || retrofit.Type == consts.RetrofitTypeCoin {
- materials[retrofit.Mid] = retrofit.Nums
- }
- }
- // 批量添加
- if len(materials) > 0 || len(equipments) > 0 {
- msg := msg2.GmAddMaterial{
- MsgId: character.GenerateMsgId(),
- PlayerID: req.UserId,
- Materials: materials,
- Equipments: equipments,
- ClientPlat: openIdArr[1],
- }
- //if err = gate.SendToWorld(0, &materialsMsg); err != nil {
- // return serializer.Err(consts.CodeParamErr, fmt.Sprintf("添加配装失败,请检查!model.id:%d", data.ID), err)
- //}
- rpc_share.MsgMap[msg.MsgId] = fmt.Sprintf("GM为玩家[%d]添加配装[%s]", req.UserId, data.Name)
- var resp *msg2.ResponseGmAddMaterial
- res, err := config.GmNats.GmRequest(DB, "GmAddMaterial", msg)
- if err != nil {
- return serializer.Err(consts.CodeParamErr, err.Error(), err)
- }
- if err = json.Unmarshal(res, &resp); err != nil {
- return serializer.Err(consts.CodeParamErr, err.Error(), err)
- }
- rpc_share.LogChan <- rpc_share.LogMsg{
- MsgID: msg.MsgId,
- Data: resp,
- }
- }
- return serializer.Suc(nil)
- }
- func (s *sRetrofit) GroupOptions(ctx *gin.Context) serializer.Response {
- var (
- q = query.Use(config.DB).RetrofitGroup
- m = q.WithContext(ctx)
- lists []forms.OptionInt64
- )
- if err := m.Select(q.ID.As("value"), q.Name.As("label")).
- Where(q.Status.Eq(consts.StatusNormal)).
- Order(q.ID.Desc()).
- Limit(200).
- Scan(&lists); err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
- }
- return serializer.Suc(lists)
- }
- func (s *sRetrofit) GroupList(ctx *gin.Context, req forms.RetrofitGroupListReq) serializer.Response {
- var (
- q = query.Use(config.DB).RetrofitGroup
- m = q.WithContext(ctx)
- offset int64 = 0
- models forms.UserAccountListRes
- lists []model.RetrofitGroup
- )
- m = m.Order(q.ID.Desc())
- req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
- count, err := m.Count()
- if err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
- }
- if count > 0 {
- if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
- }
- }
- models.List = lists
- models.Page = req.Page
- models.PerPage = req.PerPage
- models.PageCount = (count + req.PerPage - 1) / req.PerPage
- return serializer.Suc(models)
- }
- func (s *sRetrofit) GroupEdit(ctx *gin.Context, req forms.RetrofitGroupEditReq) serializer.Response {
- var (
- q = query.Use(config.DB).RetrofitGroup
- err error
- )
- // 编辑
- if req.ID > 0 {
- _, err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Where(q.ID.Eq(req.ID)).Updates(model.RetrofitGroup{
- Name: req.Name,
- Remark: req.Remark,
- Sort: req.Sort,
- Status: req.Status,
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- return serializer.Suc(nil)
- }
- // 新增
- createData := model.RetrofitGroup{
- Name: req.Name,
- Remark: req.Remark,
- Sort: req.Sort,
- Status: req.Status,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- if err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Create(&createData); err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if createData.ID < 1 {
- return serializer.ParamErr("创建失败,请稍后重试!", nil)
- }
- return serializer.Suc(nil)
- }
- func (s *sRetrofit) GroupDelete(ctx *gin.Context, req forms.RetrofitGroupDeleteReq) serializer.Response {
- var (
- q = query.Use(config.DB).RetrofitGroup
- //r = query.Use(config.DB).Retrofit
- err error
- )
- // 编辑
- if req.ID <= 0 {
- return serializer.ParamErr("ID不能空,删除失败!", nil)
- }
- //count, err := query.Use(config.DB).Retrofit.WithContext(ctx).Where(r.GroupID.Eq(req.ID)).Count()
- //if err != nil {
- // return serializer.DBErr(err.Error(), err)
- //}
- //
- //if count > 0 {
- // return serializer.ParamErr("防止误操作,请先删除模板的所有配装!", nil)
- //}
- _, err = query.Use(config.DB).RetrofitGroup.WithContext(ctx).Where(q.ID.Eq(req.ID)).Delete()
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- return serializer.Suc(nil)
- }
- func (s *sRetrofit) List(ctx *gin.Context, req forms.RetrofitListReq) serializer.Response {
- var (
- q = query.Use(config.DB).Retrofit
- m = q.WithContext(ctx)
- offset int64 = 0
- models forms.UserAccountListRes
- lists []model.Retrofit
- )
- if req.GroupId > 0 {
- m = m.Where(q.GroupID.Eq(req.GroupId))
- }
- m = m.Order(q.ID.Desc())
- req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
- count, err := m.Count()
- if err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
- }
- if count > 0 {
- if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
- return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
- }
- }
- models.List = lists
- models.Page = req.Page
- models.PerPage = req.PerPage
- models.PageCount = (count + req.PerPage - 1) / req.PerPage
- return serializer.Suc(models)
- }
- func (s *sRetrofit) Edit(ctx *gin.Context, req forms.RetrofitEditReq) serializer.Response {
- var (
- q = query.Use(config.DB).Retrofit
- err error
- )
- if req.Type == consts.RetrofitTypeEquipment && req.Mid != gmdata.GetEquipmentStartID(req.Mid) {
- return serializer.ParamErr("目前只能添加1级装备", nil)
- }
- // 编辑
- if req.ID > 0 {
- _, err = query.Use(config.DB).Retrofit.WithContext(ctx).Where(q.ID.Eq(req.ID)).Updates(model.Retrofit{
- GroupID: req.GroupID,
- Name: req.Name,
- Type: req.Type,
- Mid: req.Mid,
- Nums: req.Nums,
- Status: req.Status,
- CreatedAt: time.Now(),
- })
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- return serializer.Suc(nil)
- }
- // 新增
- createData := model.Retrofit{
- GroupID: req.GroupID,
- Name: req.Name,
- Type: req.Type,
- Mid: req.Mid,
- Nums: req.Nums,
- Status: req.Status,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- if err = query.Use(config.DB).Retrofit.WithContext(ctx).Create(&createData); err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- if createData.ID < 1 {
- return serializer.ParamErr("创建失败,请稍后重试!", nil)
- }
- return serializer.Suc(nil)
- }
- func (s *sRetrofit) Delete(ctx *gin.Context, req forms.RetrofitDeleteReq) serializer.Response {
- var (
- q = query.Use(config.DB).Retrofit
- err error
- )
- // 编辑
- if req.ID <= 0 {
- return serializer.ParamErr("ID不能空,删除失败!", nil)
- }
- _, err = query.Use(config.DB).Retrofit.WithContext(ctx).Where(q.ID.Eq(req.ID)).Delete()
- if err != nil {
- return serializer.DBErr(err.Error(), err)
- }
- return serializer.Suc(nil)
- }
|