You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
6.6 KiB
Go
303 lines
6.6 KiB
Go
package cmm
|
|
|
|
import (
|
|
"context"
|
|
"joybuywork/internal/repository/dao"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/repository/withdefault"
|
|
"joybuywork/internal/utils/merr"
|
|
"github.com/golang-module/carbon/v2"
|
|
)
|
|
|
|
type FirstCreate struct {
|
|
ctx context.Context
|
|
be *merr.BusinessError
|
|
dao *dao.Query
|
|
}
|
|
|
|
func NewFirstCreate(ctx context.Context, dao *dao.Query) *FirstCreate {
|
|
return &FirstCreate{
|
|
ctx: ctx,
|
|
be: merr.NewBE(ctx),
|
|
dao: dao,
|
|
}
|
|
}
|
|
|
|
func (s *FirstCreate) FissionUserStat(user *model.FissionUser) (stat *model.FissionUserStat, err error) {
|
|
statM := s.dao.FissionUserStat
|
|
stat, err = statM.WithContext(s.ctx).Where(statM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if stat == nil {
|
|
stat = withdefault.FissionUserStat(&model.FissionUserStat{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
})
|
|
|
|
err = statM.WithContext(s.ctx).Create(stat)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionDice(user *model.FissionUser) (player *model.FissionDice, err error) {
|
|
playerM := s.dao.FissionDice
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
confM := s.dao.FissionCampaignDice
|
|
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf == nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionDice(&model.FissionDice{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
Chance: conf.InitChance,
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf.InitChance == 0 {
|
|
return
|
|
}
|
|
|
|
// 看看需不需要骰子记录
|
|
record := withdefault.FissionDiceRecord(&model.FissionDiceRecord{
|
|
CampaignID: user.CampaignID,
|
|
UserID: user.ID,
|
|
Mark: mtype.FissionDiceRecordMarkGetRollSys,
|
|
})
|
|
|
|
record.SetData(&mtype.DiceRecord{
|
|
Chance: conf.InitChance,
|
|
})
|
|
|
|
err = s.dao.FissionDiceRecord.WithContext(s.ctx).Create(record)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionDiceProp(user *model.FissionUser, mark string) (prop *model.FissionDiceProp, err error) {
|
|
m := s.dao.FissionDiceProp
|
|
prop, err = m.WithContext(s.ctx).Where(m.UserID.Eq(user.ID), m.Mark.Eq(mark)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if prop == nil {
|
|
prop = withdefault.FissionDiceProp(&model.FissionDiceProp{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
Mark: mark,
|
|
Num: 0,
|
|
TotalNum: 0,
|
|
})
|
|
if err = m.WithContext(s.ctx).Create(prop); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionGrow(user *model.FissionUser) (player *model.FissionGrow, err error) {
|
|
playerM := s.dao.FissionGrow
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
confM := s.dao.FissionCampaignGrow
|
|
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf == nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionGrow(&model.FissionGrow{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
GrowNum: conf.InitNum,
|
|
PropsTime: carbon.Now().AddHours(int(conf.AutoHour)).Timestamp(),
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionQa(user *model.FissionUser) (player *model.FissionQa, err error) {
|
|
playerM := s.dao.FissionQa
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
confM := s.dao.FissionCampaignQa
|
|
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf == nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionQa(&model.FissionQa{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
Chance: conf.InitChance,
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionBallot(user *model.FissionUser) (player *model.FissionBallot, err error) {
|
|
playerM := s.dao.FissionBallot
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
confM := s.dao.FissionCampaignBallot
|
|
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if conf == nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionBallot(&model.FissionBallot{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
Chance: conf.InitChance,
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionWin(user *model.FissionUser) (player *model.FissionWin, err error) {
|
|
playerM := s.dao.FissionWin
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionWin(&model.FissionWin{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
NextStep: 1,
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FirstCreate) FissionReferral(user *model.FissionUser) (player *model.FissionReferral, err error) {
|
|
playerM := s.dao.FissionReferral
|
|
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if player != nil {
|
|
return
|
|
}
|
|
|
|
player = withdefault.FissionReferral(&model.FissionReferral{
|
|
UserID: user.ID,
|
|
CampaignID: user.CampaignID,
|
|
NextStep: 1,
|
|
})
|
|
|
|
err = playerM.WithContext(s.ctx).Create(player)
|
|
if err != nil {
|
|
err = s.be.MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|