package activity import ( "recook/internal/back" "recook/internal/dbc" "recook/internal/model/activity" "recook/internal/model/manage" "recook/tools" "github.com/gin-gonic/gin" ) type removeGoodsParams struct { ID int64 `json:"id"` } func RemoveActivityGoods(c *gin.Context) { var p removeGoodsParams err := tools.Params(&p, c) if err != nil { back.Fail(c, err.Error()) return } err = dbc.DB.Delete(activity.Goods{}, "id=?", p.ID).Error if err != nil { back.Err(c, err.Error()) return } back.Suc(c, "", nil) } // 编辑 更新活动 type updateActivityParam struct { ID int64 `json:"id" validate:"numeric,required"` // 需要更新的活动id Area int64 `json:"area" validate:"oneof=0 1 2 3"` // 区域 ABC三个区域 BarFontColor string `json:"barFontColor" validate:"required"` BarBackgroundColor string `json:"barBackgroundColor" validate:"required"` Name string `json:"name" validate:"required"` LogoUrl string `json:"logoUrl" validate:"required"` TopUrl string `json:"topUrl" validate:"required"` GoodsList []subGoodsInfo `json:"goodsList" validate:"required"` Status uint `json:"status"` } func UpdateActivity(c *gin.Context) { var p updateActivityParam err := tools.Params(&p, c) if err != nil { back.Fail(c, err.Error()) return } if len(p.GoodsList) == 0 { back.Fail(c, "活动至少包含3款商品") return } for _, v := range p.GoodsList { if v.GoodsId == 0 { back.Fail(c, "商品id未传入") return } if len(v.PhotoUrl) == 0 { back.Fail(c, "商品图片未传入") return } if len(v.GoodsName) == 0 { back.Fail(c, "商品名称未传入") return } } var actInfo = activity.Info{} dbc.DB.Where("id=?", p.ID).Find(&actInfo) if actInfo.Name == "" { back.Fail(c, "活动不存在") return } // 找出原先的ID var activities []activity.Goods dbc.DB.Table("recook_activity_goods").Select("id").Where("activity_id=?", p.ID).Find(&activities) var ids = make(map[int64]bool, len(activities)) for _, val := range activities { ids[val.ID] = true } var userId = c.MustGet("Manager_ID").(uint) var user manage.UserInfo user.ID = userId if err = dbc.DB.Find(&user).Error; err != nil { back.Fail(c, "数据错误:"+err.Error()) return } tx := dbc.DB.Begin() { info := &activity.Info{ ID: p.ID, Name: p.Name, BarFontColor: p.BarFontColor, BarBackgroundColor: p.BarBackgroundColor, LogoUrl: p.LogoUrl, TopUrl: p.TopUrl, Type: p.Area, IsActive: 1, UserID: user.ID, UserName: user.Name, Status: p.Status, IsSale: actInfo.IsSale, } if err = tx.Save(&info).Error; err != nil { back.Fail(c, err.Error()) return } // 不改变表结构, 将原来的id重置为负数 dbc.DB.Table("recook_activity_goods").Where("activity_id=?", p.ID).Update("activity_id", -p.ID) // 重新添加 商品 for _, v := range p.GoodsList { // 判断是否能在ids中找到, 找不到即新商品,更新;找不到,老商品,不更新 if _, ok := ids[v.GoodsId]; !ok { g := &activity.Goods{ ActivityId: info.ID, GoodsId: v.GoodsId, GoodsName: v.GoodsName, PhotoUrl: v.PhotoUrl, } if err = tx.Create(g).Error; err != nil { back.Fail(c, err.Error()) return } ids[v.GoodsId] = false } var delIds = make([]int64, 1) // ids中为true的为本次更新需要删除的 for id, b := range ids { if b == true { delIds = append(delIds, id) } } if len(delIds) > 1 || delIds[0] > 0 { dbc.DB.Table("recook_activity_goods").Where("id in (?)", delIds).Update("activity_id", -p.ID) } } } tx.Commit() back.Suc(c, "操作成功", nil) } // 删除活动 type deleteActivityParam struct { ID int64 `json:"id" validate:"required,numeric"` } func DeleteActivity(c *gin.Context) { var p deleteActivityParam err := tools.Params(&p, c) if err != nil { back.Fail(c, err.Error()) return } if p.ID <= 0 { back.Fail(c, "错误的参数") return } var actInfo = activity.Info{} dbc.DB.Where("id=?", p.ID).Find(&actInfo) if actInfo.Name == "" { back.Fail(c, "活动不存在") return } // 删除活动 dbc.DB.Table("recook_activity_info").Where("id=?", p.ID).Update("is_active", 0) back.Suc(c, "操作成功", nil) }