go_dreamfactory/modules/sociaty/api_cross_create.go

238 lines
6.3 KiB
Go

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
}