package jyy import ( "errors" "recook/internal/libs/bean" "recook/internal/v2/model/jyy" "recook/internal/v2/model/recook/goods" "git.oa00.com/go/mysql" "gorm.io/gorm" "gorm.io/gorm/clause" ) type ActivityList struct { bean.Page } func (o logic) GetActivities(args ActivityList) (res []jyy.Activity, total int64, err error) { query := mysql.Db.Table((&jyy.Activity{}).TableName()) query.Count(&total) query.Preload("GoodsList.GoodsInfo").Limit(args.GetLimit()).Offset(args.GetStart()).Find(&res) return } type ActivityInfo struct { jyy.Activity } func (o logic) CreateActivity(obj ActivityInfo) error { obj.ID = 0 obj.Status = 1 var temp []goods.RecookGoodsInfoModel ids := make([]uint, 0) for _, v := range obj.GoodsList { ids = append(ids, v.GoodsID) } mysql.Db.Find(&temp, "id in (?)", ids) if len(temp) == 0 { return errors.New("goods不合法") } obj.GoodsList = obj.GoodsList[0:0] for _, v := range temp { obj.GoodsList = append(obj.GoodsList, jyy.ActivityGoods{ GoodsID: v.Id, }) } if err := mysql.Db.Create(&obj).Error; err != nil { return err } return nil } type ActivityInfoUpdate struct { jyy.Activity } func (o logic) UpdateActivity(obj ActivityInfoUpdate) error { var ac1 jyy.Activity if err := mysql.Db.First(&ac1, "id = ?", obj.ID).Error; err != nil { return err } var temp []goods.RecookGoodsInfoModel ids := make([]uint, 0) for _, v := range obj.GoodsList { ids = append(ids, v.GoodsID) } mysql.Db.Clauses(clause.OrderBy{ Expression: clause.Expr{SQL: "FIELD(id,?)", Vars: []interface{}{ids}, WithoutParentheses: true}}).Find(&temp, "id in (?)", ids) if len(temp) == 0 { return errors.New("goods不合法") } if err := mysql.Db.Transaction(func(tx *gorm.DB) error { if err := tx.Model(&obj).Updates(obj).Error; err != nil { return err } if err := tx.Delete(&jyy.ActivityGoods{}, "activity_id = ?", ac1.ID).Error; err != nil { return err } s := make([]jyy.ActivityGoods, 0) for _, v := range temp { s = append(s, jyy.ActivityGoods{ ActivityID: obj.ID, GoodsID: v.Id, }) } if len(s) != 0 { if err := tx.Create(&s).Error; err != nil { return err } } return nil }); err != nil { return err } return nil } type ArgsActivityDelete struct { ID uint `json:"id" validate:"required"` } func (o logic) DeleteActivity(args ArgsActivityDelete) error { if err := mysql.Db.Transaction(func(tx *gorm.DB) error { if err := tx.Delete(&jyy.Activity{}, "id = ?", args.ID).Error; err != nil { return err } if err := tx.Delete(&jyy.ActivityGoods{}, "activity_id = ?", args.ID).Error; err != nil { return err } return nil }); err != nil { return err } return nil }