You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
2.6 KiB

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
}