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.
286 lines
7.9 KiB
286 lines
7.9 KiB
package promotion
|
|
|
|
import (
|
|
"recook/internal/back"
|
|
"recook/internal/dbc"
|
|
"recook/internal/model/activity"
|
|
"recook/internal/model/goods"
|
|
"recook/internal/model/promotion"
|
|
"recook/internal/model/vend"
|
|
"recook/tools"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/shopspring/decimal"
|
|
)
|
|
|
|
type goodsListParam struct {
|
|
Date string `json:"date" validate:"required" time_format:"2006-01-02"`
|
|
IsSale bool `json:"is_sale"`
|
|
}
|
|
|
|
type PromotionReq struct {
|
|
IsSale bool `json:"is_sale"`
|
|
}
|
|
|
|
func QueryWaitingList(c *gin.Context) {
|
|
var p PromotionReq
|
|
err := tools.Params(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
var l []promotion.Information
|
|
dbc.DB.Where("is_sale = ?", p.IsSale).Find(&l, "start_date > ? ", time.Now().Format("2006-01-02"))
|
|
back.Suc(c, "操作成功", l)
|
|
}
|
|
|
|
func QueryActiveList(c *gin.Context) {
|
|
var p PromotionReq
|
|
err := tools.Params(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
var l []promotion.Information
|
|
format := time.Now().Format("2006-01-02")
|
|
dbc.DB.Where("is_sale = ?", p.IsSale).Find(&l, "start_date <= ? AND end_date >= ?", format, format)
|
|
back.Suc(c, "操作成功", l)
|
|
}
|
|
|
|
func QueryExpiredList(c *gin.Context) {
|
|
var p PromotionReq
|
|
err := tools.Params(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
}
|
|
var l []promotion.Information
|
|
dbc.DB.Where("is_sale = ?", p.IsSale).Find(&l, "end_date < ?", time.Now().Format("2006-01-02"))
|
|
back.Suc(c, "操作成功", l)
|
|
}
|
|
|
|
func QueryCheckPromotionDate(c *gin.Context) {
|
|
var p goodsListParam
|
|
err := tools.Params(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
startDate, err := time.Parse("2006-01-02", p.Date)
|
|
if err != nil {
|
|
back.Fail(c, "日期无法解析")
|
|
return
|
|
}
|
|
|
|
var count uint
|
|
dbc.DB.Table((&promotion.Information{}).TableName()).Where("is_sale = ?", p.IsSale).
|
|
Where("start_date = ?", startDate.Format("2006-01-02")).Count(&count)
|
|
if count > 0 {
|
|
back.Fail(c, "该日期已创建过活动,请更改日期")
|
|
return
|
|
}
|
|
|
|
back.Suc(c, "", nil)
|
|
}
|
|
|
|
type queryPromotionTimeItemsParam struct {
|
|
PromotionID uint `json:"promotionID" validate:"required"`
|
|
}
|
|
|
|
type queryPromotionTimeItemsResp struct {
|
|
ID uint `json:"timeItemId,omitempty"`
|
|
StartTime string `json:"startTime,omitempty"`
|
|
}
|
|
|
|
func QueryPromotionTimeItems(c *gin.Context) {
|
|
var p queryPromotionTimeItemsParam
|
|
if err := tools.Params(&p, c); err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
timeItems := make([]promotion.TimeItem, 0, 0)
|
|
dbc.DB.Order("start_time asc").Find(&timeItems, "promotion_id = ?", p.PromotionID)
|
|
|
|
list := make([]queryPromotionTimeItemsResp, 0, 0)
|
|
for _, v := range timeItems {
|
|
list = append(list, queryPromotionTimeItemsResp{
|
|
ID: v.ID,
|
|
StartTime: v.StartTime.Time.Format("15:04"),
|
|
})
|
|
}
|
|
|
|
back.Suc(c, "", &list)
|
|
}
|
|
|
|
type queryGoodsInTimeItemParam struct {
|
|
TimeItemID uint `json:"timeItemID" validate:"required"`
|
|
}
|
|
|
|
type queryGoodsInTimeItemResp struct {
|
|
GoodsList []goodsList `json:"goodsList"`
|
|
ActivityList []activityList `json:"activityList"`
|
|
}
|
|
|
|
type goodsList struct {
|
|
PromotionGoodsID uint `json:"promotionGoodsId"`
|
|
GoodsID uint `json:"goodsId"`
|
|
GoodsName string `json:"goodsName"`
|
|
Subtitle string `json:"subtitle"`
|
|
VendorName string `json:"vendorName"`
|
|
MainPhotoURL string `json:"mainPhotoUrl"`
|
|
PublishStatus uint `json:"publishStatus"`
|
|
BrandName string `json:"brandName"`
|
|
CateName string `json:"cateName"`
|
|
SkuList []customSku `json:"skuList"`
|
|
}
|
|
|
|
type activityList struct {
|
|
PromotionGoodsID uint `json:"promotionGoodsId"`
|
|
ActivityList activity.Info `json:"activityList"`
|
|
ActivitySortId uint `json:"activity_sort_id"`
|
|
}
|
|
|
|
type customSku struct {
|
|
promotion.Sku
|
|
CommissionRate decimal.Decimal `json:"commissionRate"`
|
|
}
|
|
|
|
func QueryTimeItemGoods(c *gin.Context) {
|
|
var p queryGoodsInTimeItemParam
|
|
if err := tools.Params(&p, c); err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var promGoodsList []promotion.Goods
|
|
dbc.DB.Order("`order` asc").Select("id, goods_id, subtitle, activity_id,activity_sort_id").Find(&promGoodsList, "promotion_time_item_id = ?", p.TimeItemID)
|
|
|
|
list := make([]queryGoodsInTimeItemResp, 0, 0)
|
|
gl := make([]goodsList, 0, 0)
|
|
actList := make([]activityList, 0, 0)
|
|
var lastPromActId uint
|
|
var lastActivityId uint
|
|
var activitySortId uint
|
|
for _, v := range promGoodsList {
|
|
|
|
// 需要判断是活动还是商品
|
|
if v.ActivityID > 0 {
|
|
lastPromActId = v.ID
|
|
lastActivityId = v.ActivityID
|
|
activitySortId = v.ActivitySortId
|
|
} else {
|
|
var goodsInfo goods.Information
|
|
dbc.DB.Select("id, goods_name, brand_id, second_category_id, first_category_id, publish_status").First(&goodsInfo, v.GoodsID)
|
|
|
|
var firCate goods.Category
|
|
dbc.DB.Select("name").First(&firCate, goodsInfo.FirstCategoryID)
|
|
|
|
var secCate goods.Category
|
|
dbc.DB.Select("name").First(&secCate, goodsInfo.SecondCategoryID)
|
|
|
|
var brandInfo goods.Brand
|
|
dbc.DB.Select("name").First(&brandInfo, goodsInfo.BrandID)
|
|
|
|
vendorName := "自营"
|
|
if goodsInfo.VendorID > 0 {
|
|
var vendor vend.Information
|
|
dbc.DB.Select("username").First(&vendor, goodsInfo.VendorID)
|
|
vendorName = vendor.Username
|
|
}
|
|
|
|
// var mainPhoto goods.Cover
|
|
// dbc.DB.Select("url").First(&mainPhoto, "goods_id = ? AND is_master = 0", goodsInfo.ID)
|
|
var mainPhoto goods.MainPhoto
|
|
dbc.DB.Select("url").First(&mainPhoto, "goods_id = ? AND is_master = 1", goodsInfo.ID)
|
|
|
|
var skuList []promotion.Sku
|
|
dbc.DB.Find(&skuList, "promotion_goods_id = ?", v.ID)
|
|
|
|
var customSkuList []customSku
|
|
for i, v := range skuList {
|
|
var s goods.Sku
|
|
dbc.DB.Select("commission_rate").First(&s, v.SkuID)
|
|
customSkuList = append(customSkuList, customSku{
|
|
Sku: skuList[i],
|
|
CommissionRate: s.CommissionRate,
|
|
})
|
|
}
|
|
|
|
gl = append(gl, goodsList{
|
|
PromotionGoodsID: v.ID,
|
|
GoodsID: goodsInfo.ID,
|
|
GoodsName: goodsInfo.GoodsName,
|
|
Subtitle: v.Subtitle,
|
|
MainPhotoURL: mainPhoto.URL,
|
|
PublishStatus: goodsInfo.PublishStatus,
|
|
CateName: firCate.Name + "/" + secCate.Name,
|
|
VendorName: vendorName,
|
|
BrandName: brandInfo.Name,
|
|
SkuList: customSkuList,
|
|
})
|
|
}
|
|
}
|
|
|
|
// 只取最后一个, lastActivityId
|
|
if lastActivityId > 0 {
|
|
var activityInfo activity.Info
|
|
dbc.DB.Where("id=?", lastActivityId).Find(&activityInfo)
|
|
actList = append(actList, activityList{
|
|
PromotionGoodsID: lastPromActId,
|
|
ActivityList: activityInfo,
|
|
ActivitySortId: activitySortId,
|
|
})
|
|
}
|
|
|
|
list = append(list, queryGoodsInTimeItemResp{
|
|
GoodsList: gl,
|
|
ActivityList: actList,
|
|
})
|
|
back.Suc(c, "操作成功", &list)
|
|
}
|
|
|
|
type forbidGoodsListParam struct {
|
|
StartDate string `json:"startDate" validate:"required"`
|
|
EndDate string `json:"endDate" validate:"required"`
|
|
}
|
|
|
|
func QueryForbidSelectGoodsList(c *gin.Context) {
|
|
var p forbidGoodsListParam
|
|
if err := tools.Params(&p, c); err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
startDate, err := time.Parse("2006-01-02", p.StartDate)
|
|
if err != nil {
|
|
back.Fail(c, "日期无法解析")
|
|
return
|
|
}
|
|
|
|
startTime := time.Date(startDate.Year(), startDate.Month(), startDate.Day(), 0, 0, 0, 0, time.Local)
|
|
|
|
endDate, err := time.Parse("2006-01-02", p.EndDate)
|
|
if err != nil {
|
|
back.Fail(c, "日期无法解析")
|
|
return
|
|
}
|
|
|
|
endTime := time.Date(endDate.Year(), endDate.Month(), endDate.Day(), 23, 59, 59, 0, time.Local)
|
|
|
|
var promotionGoodsList []promotion.Goods
|
|
// dbc.DB.Select("goods_id").
|
|
// Find(&promotionGoodsList, "(start_time >= ? AND start_time < ?) OR (end_time > ? AND end_time < ?) OR (start_time >= ? AND end_time < ?)",
|
|
// startTime, endTime, startTime, endTime, startTime, endTime)
|
|
dbc.DB.Select("goods_id").
|
|
Find(&promotionGoodsList, "start_time < ? AND end_time > ?", endTime, startTime)
|
|
|
|
ids := make([]uint, 0, 0)
|
|
for _, v := range promotionGoodsList {
|
|
ids = append(ids, v.GoodsID)
|
|
}
|
|
|
|
back.Suc(c, "操作成功", &ids)
|
|
}
|