package sociaty import ( "errors" "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" "go_dreamfactory/utils" "sort" "strings" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/sys/wordfilter" ) // 公会创建 func (this *apiComp) CreateCheck(session comm.IUserSession, req *pb.SociatyCreateReq) (errdata *pb.ErrorData) { if len(req.Notice) > 150 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyNoticeTextLen, Title: pb.ErrorCode_SociatyNoticeTextLen.ToString(), } } else if strings.TrimSpace(req.Name) == "" { this.module.Error("公会创建参数错误", log.Field{Key: "uid", Value: session.GetUserId()}, log.Field{Key: "params", Value: req.String()}) errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } func (this *apiComp) Create(session comm.IUserSession, req *pb.SociatyCreateReq) (errdata *pb.ErrorData) { var ( tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0) ) if errdata = this.CreateCheck(session, req); errdata != nil { return } //铭感词校验 工会名称 if iscompliance, inscriptionwords := wordfilter.Validate(req.Name); !iscompliance { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyNameInscriptionWords, Title: pb.ErrorCode_SociatyNameInscriptionWords.ToString(), Message: fmt.Sprintf("工会名称包含铭感词:%s", inscriptionwords), } return } //铭感词校验 工会公告 if len(req.Notice) > 0 { if iscompliance, inscriptionwords := wordfilter.Validate(req.Notice); !iscompliance { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyNoticeInscriptionWords, Title: pb.ErrorCode_SociatyNoticeInscriptionWords.ToString(), Message: fmt.Sprintf("工会公告包含铭感词:%s", inscriptionwords), } return } } uid := session.GetUserId() user, err := this.module.ModuleUser.GetUser(uid) if err != nil { this.module.Error("GetRmoteUser not found", log.Field{Key: "uid", Value: uid}) errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } userExpand, err := this.module.ModuleUser.GetUserExpand(uid) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } // CD校验 if utils.IsInCDHour(userExpand.SociatyCd) { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyCDLimit, Title: pb.ErrorCode_SociatyCDLimit.ToString(), } return } //检查是否已加入公会 if userExpand.SociatyId != "" { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyAdded, Title: pb.ErrorCode_SociatyAdded.ToString(), } return } // 验证公会名是否重复 if err := this.module.modelSociaty.isNameExist(req.Name); err != nil { var customErr = new(comm.CustomError) if errors.As(err, &customErr) { code := customErr.Code errdata = &pb.ErrorData{ Code: code, Title: code.ToString(), Message: err.Error(), } } else { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } } return } //检查钻石 if errdata = this.module.CheckRes(session, []*cfg.Gameatn{this.module.globalConf.GuildBuildCos}); errdata != nil { this.module.Warn("资源不足", log.Field{Key: "uid", Value: uid}, log.Field{Key: "res", Value: this.module.globalConf.GuildBuildCos}, ) return } //公会申请等级校验 plvConf := this.module.configure.GetPlayerlvConfList() sort.SliceStable(plvConf, func(i, j int) bool { return plvConf[i].Lv > plvConf[j].Lv }) var maxLv int32 if len(plvConf) > 0 { maxLv = plvConf[0].Lv } if req.ApplyLv > maxLv { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SociatyApplyLvLimit, Title: pb.ErrorCode_SociatyApplyLvLimit.ToString(), Message: err.Error(), } return } //创建公会 sociaty := &pb.DBSociaty{ Creater: user.Uid, Name: strings.TrimSpace(req.Name), Icon: req.Icon, Notice: req.Notice, IsApplyCheck: req.IsApplyCheck, ApplyLv: req.ApplyLv, } //会长 sociaty.Members = append(sociaty.Members, &pb.SociatyMember{ Uid: user.Uid, Job: pb.SociatyJob_PRESIDENT, //创建人是会长 Ctime: configure.Now().Unix(), }) if err := this.module.modelSociaty.create(sociaty); err != nil { var customError = new(comm.CustomError) var code pb.ErrorCode if errors.As(err, &customError) { code = customError.Code } else { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } } errdata = &pb.ErrorData{ Code: code, Title: code.ToString(), Message: err.Error(), } this.module.Error("创建公会", log.Field{Key: "uid", Value: uid}, log.Field{Key: "params", Value: req.String()}, log.Field{Key: "err", Value: err.Error()}, ) return } // 更新玩家公会 update := map[string]interface{}{ "sociatyId": sociaty.Id, } if err = this.module.ModuleUser.ChangeUserExpand(user.Uid, update); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } this.module.Error("更新玩家公会ID", log.Field{Key: "uid", Value: uid}, log.Field{Key: "sociatyId", Value: sociaty.Id}, log.Field{Key: "err", Value: err.Error()}, ) return } tasks = append(tasks, comm.GetBuriedParam(comm.Rtype188, 1)) // 初始化玩家公会任务 if err := this.module.modelSociatyTask.initSociatyTask(user.Uid, sociaty.Id); err != nil { this.module.Error("初始化玩家公会任务", log.Field{Key: "uid", Value: uid}, log.Field{Key: "err", Value: err.Error()}, ) } // 创建成功也算完成该任务 tasks = append(tasks, comm.GetBuriedParam(comm.Rtype109, 1)) //扣除钻石 this.module.ConsumeRes(session, []*cfg.Gameatn{this.module.globalConf.GuildBuildCos}, true) session.SendMsg(string(this.module.GetType()), SociatySubTypeCreate, &pb.SociatyCreateResp{ Id: sociaty.Id, Uid: uid, }) if len(tasks) > 0 { go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.ModuleBuried.TriggerBuried(session, tasks...) }) } return }