|
|
|
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
|
|
|
|
}
|