package act_m import ( "fmt" "git.hilo.cn/hilo-common/domain" ) type ActPoint struct { AcId uint64 `json:"ac_id"` UserId uint64 `json:"user_id"` Point uint64 `json:"point"` } type ActPointLog struct { Id uint64 `json:"id"` AcId uint64 `json:"ac_id"` UserId uint64 `json:"user_id"` Point uint64 `json:"point"` AddReduce uint8 `json:"add_reduce"` // 1.增加2.减少 Remark string `json:"remark"` } func (this *ActPoint) Add(model *domain.Model) error { sql := "insert into hilo.act_point (ac_id,user_id,point) " + "values(?,?,?) on duplicate key update point = point+values(point);" return model.DB().Exec(sql, this.AcId, this.UserId, this.Point).Error } func (this *ActPoint) Reduce(model *domain.Model) error { sql := "update hilo.act_point set point = point - ? where ac_id=? and user_id=? and point >= ?;" result := model.DB().Exec(sql, this.Point, this.AcId, this.UserId, this.Point) if result.Error != nil { return result.Error } if result.RowsAffected <= 0 { return fmt.Errorf("bizerr.TransactionFailed") } return nil } func CreateActPointLog(model *domain.Model, info *ActPointLog) error { err := model.DB().Create(&info).Error if err != nil { return err } return nil }