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.

501 lines
16 KiB

4 years ago
package goods
import (
"fmt"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/domain"
"recook/internal/model/activity"
"recook/internal/model/goods"
"recook/internal/model/promotion"
goods2 "recook/internal/v2/model/recook/goods"
4 years ago
user2 "recook/internal/v2/model/recook/user"
4 years ago
"recook/internal/v2/model/special_sale"
"recook/tools"
"strconv"
4 years ago
"strings"
4 years ago
"time"
"github.com/gin-gonic/gin"
"github.com/golangkit/formatime"
"github.com/shopspring/decimal"
)
type queryPromotionGoodsParam struct {
TimeItemID uint `json:"timeItemID" validate:"required"`
4 years ago
UserID uint `json:"user_id"`
4 years ago
}
type promotionTimeItemResp struct {
promotion.TimeItem
ShowName string `json:"showName"`
}
type promotionReq struct {
IsSale bool `json:"is_sale"`
}
4 years ago
// QueryPromotionTimeItems 获取首页活动列表
4 years ago
func QueryPromotionTimeItems(c *gin.Context) {
var p promotionReq
3 years ago
err := tools.ParseParams(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
list := make([]promotionTimeItemResp, 0)
4 years ago
var yesterdayPromInfo promotion.Information // 昨天的
today := time.Now()
d, _ := time.ParseDuration("-24h")
yesterday := today.Add(d)
dbc.DB.Select("id").First(&yesterdayPromInfo, "is_sale = ? AND start_date = ?", p.IsSale, yesterday.Format("2006-01-02"))
4 years ago
{
yesterdayTimeItems := make([]promotion.TimeItem, 0)
4 years ago
dbc.DB.Order("start_time asc").Find(&yesterdayTimeItems, "promotion_id = ?", yesterdayPromInfo.ID)
for i, _ := range yesterdayTimeItems {
showName := "昨日精选"
list = append(list, promotionTimeItemResp{
TimeItem: yesterdayTimeItems[i],
ShowName: showName,
})
}
}
var todayPromInfo promotion.Information // 今天的
fmt.Println(time.Now().Format("2006-01-02 15:04:06"))
dbc.DB.Select("id").First(&todayPromInfo, "is_sale=? AND start_date = ?", p.IsSale, time.Now().Format("2006-01-02"))
4 years ago
{
todayTimeItems := make([]promotion.TimeItem, 0)
4 years ago
dbc.DB.Order("start_time asc").Find(&todayTimeItems, "promotion_id = ?", todayPromInfo.ID)
length := len(todayTimeItems)
var nextPtr *promotion.TimeItem
now := time.Now().Unix()
for i, cur := range todayTimeItems {
nextPtr = nil
if i+2 <= length {
nextPtr = &todayTimeItems[i+1]
}
showName := ""
if now >= cur.StartTime.Time.Unix() && now < cur.EndTime.Time.Unix() { // 已经开始了
if nextPtr != nil && (now >= nextPtr.StartTime.Time.Unix() && now < nextPtr.EndTime.Time.Unix()) {
showName = "今日特推"
} else {
showName = "今日特推"
}
} else if cur.StartTime.Time.Unix() > now { // 没开始
showName = "今日特推"
} else {
showName = "今日特推"
}
list = append(list, promotionTimeItemResp{
TimeItem: todayTimeItems[i],
ShowName: showName,
})
}
}
var tomorrowPromInfo promotion.Information // 明天的
today = time.Now()
d, _ = time.ParseDuration("24h")
tomorrow := today.Add(d)
dbc.DB.Select("id").First(&tomorrowPromInfo, "is_sale=? AND start_date = ?", p.IsSale, tomorrow.Format("2006-01-02"))
4 years ago
{
tomorrowTimeItems := make([]promotion.TimeItem, 0)
4 years ago
dbc.DB.Order("start_time asc").Find(&tomorrowTimeItems, "promotion_id = ?", tomorrowPromInfo.ID)
for i, _ := range tomorrowTimeItems {
showName := "明日优选"
list = append(list, promotionTimeItemResp{
TimeItem: tomorrowTimeItems[i],
ShowName: showName,
})
}
}
back.Suc(c, "", &list)
}
type promotionList struct {
GoodsList []promotionGoods `json:"goodsList"`
ActivityList []activityList `json:"activityList"`
}
type activityList struct {
LogoUrl string `json:"logoUrl"`
TopUrl string `json:"topUrl"`
ActivityUrl string `json:"activityUrl"`
ActivitySortId uint `json:"activity_sort_id"`
}
type promotionGoods struct {
GoodsID uint `json:"goodsId"`
GoodsName string `json:"goodsName"`
BrandName string `json:"brandName"`
BrandImg string `json:"brandImg"`
BrandId uint `json:"brandId"`
Description string `json:"description"`
Price decimal.Decimal `json:"price"`
PrimePrice decimal.Decimal `json:"primePrice"` // 划线价格
PriceDesc string `json:"priceDesc"`
Commission decimal.Decimal `json:"commission"`
CommissionDesc string `json:"commissionDesc"`
Picture picture `json:"picture"`
Inventory uint `json:"inventory"`
InventoryDesc string `json:"inventoryDesc"`
TotalInventory uint `json:"totalInventory"` // 总库存
TotalInventoryDesc string `json:"totalInventoryDesc"`
TotalSalesVolume uint `json:"totalSalesVolume"` // 总销量
SalesVolumeDesc string `json:"salesVolumeDesc"`
StartTime formatime.Second `json:"startTime"`
EndTime formatime.Second `json:"endTime"`
Percentage decimal.Decimal `json:"percentage"`
PercentageDesc string `json:"percentageDesc"`
Coupon decimal.Decimal `json:"coupon"`
IsImport int `json:"isImport"` //是否进口商品
Storehouse int `json:"storehouse"` //进口商品仓库
IsFerme int `json:"isFerme"` //是否包税
Living live `json:"living"` //是否在直播
SpecialSale []string `json:"special_sale"` //特卖位图标
GysId uint `json:"gys_id"` //供应商id
CountryIcon string `json:"country_icon"`
SecKill SecKillDetail `json:"sec_kill"`
}
type picture struct {
URL string `gorm:"column:url" json:"url,omitempty"`
Width uint `gorm:"column:width" json:"width,omitempty"`
Height uint `gorm:"column:height" json:"height,omitempty"`
}
4 years ago
// QueryPromotionGoodsListYesterday 获取昨日的活动列表
4 years ago
func QueryPromotionGoodsListYesterday(c *gin.Context) {
4 years ago
var p queryPromotionGoodsParam
err := tools.ParseParams(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var u user2.RecookUserInfoModel
dbc.DB.First(&u, "id = ?", p.UserID)
rate := decimal.Zero
{
switch u.Level {
case 1:
4 years ago
rate = decimal.NewFromFloat(0.5)
4 years ago
case 2:
rate = decimal.NewFromFloat(0.7)
}
}
4 years ago
nTime := time.Now()
yesTime := nTime.AddDate(0, 0, -1)
logDay := yesTime.Format("2006-01-02")
var promotionGoodsList []promotion.Goods
dbc.DB.Order("start_time desc").Find(&promotionGoodsList, `start_time like "`+logDay+`%"`)
fmt.Println(logDay)
gList := make([]promotionGoods, 0, 0)
for _, v := range promotionGoodsList {
if v.GoodsID > 0 {
gi := goods.Information{}
dbc.DB.First(&gi, "id = ? AND publish_status = 1", v.GoodsID)
gb := goods.Brand{}
dbc.DB.First(&gb, "id = ?", gi.BrandID)
if gi.ID == 0 {
continue
}
var pic picture
dbc.DB.Table((&goods.MainPhoto{}).TableName()).First(&pic, "goods_id = ? AND is_master = 1", v.GoodsID)
var promotionSku promotion.Sku
var sku goods.Sku
dbc.DB.First(&sku, "promotion_goods_id = ?", v.ID)
4 years ago
dbc.DB.Select("SUM(sales_volume) AS sales_volume, SUM(inventory) AS inventory, MIN(discount_price) AS discount_price, MIN(purchase_price) AS purchase_price, MIN(commission) AS commission").Find(&promotionSku, "promotion_goods_id = ?", v.ID)
4 years ago
salesVolume := 0
if sku.SalesVolume > 0 {
salesVolume = int(sku.SalesVolume)
}
// salesVolumeDesc := "已抢" + fmt.Sprintf("%d", salesVolume) + "件"
salesVolumeDesc := "累计已售" + fmt.Sprintf("%d", 1000+salesVolume) + "件"
if salesVolume == int(sku.Inventory) {
//salesVolumeDesc = "已抢光"
salesVolumeDesc = ""
}
4 years ago
//percentage := decimal.NewFromInt(int64(salesVolume)).Div(decimal.NewFromInt(int64(v.TotalInventory))).Round(2)
//
//percentageDesc := percentage.Mul(decimal.NewFromInt(100)).String() + "%"
4 years ago
inventoryDesc := "库存" + fmt.Sprintf("%d", sku.Inventory)
if sku.Inventory == 0 {
inventoryDesc = "已售罄"
}
var country goods2.RecookAbroadCountryModel
dbc.DB.Table(country.TableName()).First(&country, "id = ?", gi.Country)
var goodsSku goods.Sku
dbc.DB.Where("goods_id = ?", v.GoodsID).Find(&goodsSku)
4 years ago
cm := goodsSku.DiscountPrice.Sub(goodsSku.PurchasePrice).Mul(rate)
4 years ago
gList = append(gList, promotionGoods{
GoodsID: gi.ID,
GoodsName: gi.GoodsName,
BrandName: gb.Name + "品牌馆",
BrandImg: gb.LogoURL,
BrandId: gb.ID,
Description: v.Subtitle,
Price: goodsSku.DiscountPrice,
PrimePrice: goodsSku.OriginalPrice,
PriceDesc: goodsSku.DiscountPrice.String(),
4 years ago
Commission: cm,
CommissionDesc: "赚" + cm.String(),
4 years ago
Picture: pic,
Inventory: sku.Inventory,
InventoryDesc: inventoryDesc,
TotalInventory: v.TotalInventory,
TotalInventoryDesc: "限购" + fmt.Sprintf("%d", v.TotalInventory) + "件",
TotalSalesVolume: uint(salesVolume),
SalesVolumeDesc: salesVolumeDesc,
StartTime: v.StartTime,
EndTime: v.EndTime,
4 years ago
Percentage: decimal.Zero,
PercentageDesc: "",
4 years ago
Coupon: sku.Coupon,
IsImport: gi.IsImport,
Storehouse: gi.Storehouse,
IsFerme: gi.IsFerme,
GysId: gi.VendorID, //供应商id
CountryIcon: country.Icon,
})
}
}
//fmt.Println(promotionGoodsList)
back.Suc(c, "", &promotionGoodsList)
}
4 years ago
// QueryPromotionGoodsList 精品推荐
4 years ago
func QueryPromotionGoodsList(c *gin.Context) {
var p queryPromotionGoodsParam
err := tools.ParseParams(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
4 years ago
var u user2.RecookUserInfoModel
dbc.DB.First(&u, "id = ?", p.UserID)
3 years ago
//rate1 := decimal.NewFromFloat32(0.4)
//rate2 := decimal.NewFromFloat32(0.1)
//rate3 := decimal.Zero
//if u.Level == 2 {
// rate3 = decimal.NewFromFloat(0.2)
//}
4 years ago
//p.TimeItemID=1275
var promotionGoodsList []promotion.Goods
dbc.DB.Order("`order` asc").Find(&promotionGoodsList, "promotion_time_item_id = ?", p.TimeItemID)
4 years ago
gList := make([]promotionGoods, 0)
aList := make([]activityList, 0)
4 years ago
/*
*/
//获取当前时间段的秒杀goodsid
//gmp := GetSecKillGoods()
4 years ago
for _, v := range promotionGoodsList {
if v.GoodsID > 0 {
var gi goods.Information
dbc.DB.First(&gi, "id = ? AND publish_status = 1", v.GoodsID)
gb := goods.Brand{}
dbc.DB.First(&gb, "id = ?", gi.BrandID)
if gi.ID == 0 {
continue
}
var pic picture
dbc.DB.Table((&goods.MainPhoto{}).TableName()).First(&pic, "goods_id = ? AND is_master = 1", v.GoodsID)
var promotionSku promotion.Sku
dbc.DB.Select("SUM(sales_volume) AS sales_volume, SUM(inventory) AS inventory, MIN(discount_price) AS discount_price, MIN(commission) AS commission").First(&promotionSku, "promotion_goods_id = ?", v.ID)
salesVolume := 0
if promotionSku.SalesVolume > 0 {
salesVolume = int(promotionSku.SalesVolume)
}
var goodsSkuVolume goods.Sku
4 years ago
dbc.DB.Select("SUM(sales_volume) AS sales_volume, SUM(sales_volume_inc) AS sales_volume_inc,SUM(inventory) AS inventory").
Find(&goodsSkuVolume, "goods_id = ?", v.GoodsID)
4 years ago
salesVolume1 := int(goodsSkuVolume.SalesVolume) + int(goodsSkuVolume.SalesVolumeInc)
fmt.Println(v.ID)
fmt.Println(goodsSkuVolume)
// salesVolumeDesc := "已抢" + fmt.Sprintf("%d", salesVolume) + "件"
salesVolumeDesc := "累计已售" + fmt.Sprintf("%d", salesVolume1) + "件"
if salesVolume == int(goodsSkuVolume.Inventory) {
//salesVolumeDesc = "已抢光"
salesVolumeDesc = ""
}
// todo已售未改成sku的已售仍然是活动的已售
4 years ago
//percentage := decimal.NewFromInt(int64(salesVolume)).Div(decimal.NewFromInt(int64(v.TotalInventory))).Round(2)
//
//percentageDesc := percentage.Mul(decimal.NewFromInt(100)).String() + "%"
4 years ago
inventoryDesc := "库存" + fmt.Sprintf("%d", goodsSkuVolume.Inventory)
if goodsSkuVolume.Inventory == 0 {
inventoryDesc = "已售罄"
}
var goodsSkus []goods.Sku
dbc.DB.Order("discount_price asc").Where("goods_id = ?", v.GoodsID).Find(&goodsSkus)
goodsSku := goods.Sku{}
if len(goodsSkus) > 0 {
goodsSku = goodsSkus[0]
}
inventory := uint(0)
for _, skus := range goodsSkus {
inventory += skus.Inventory
}
//后面把这个代码删除
//if c.Request.Header.Get("X-Recook-System") == "ios" {
// mytemp := goodsSku.DiscountPrice
// goodsSku.DiscountPrice = goodsSku.OriginalPrice
// goodsSku.OriginalPrice = mytemp
//}
var country goods2.RecookAbroadCountryModel
dbc.DB.Table(country.TableName()).First(&country, "id = ?", gi.Country)
var one SecKillDetail
//if _, ok := gmp[v.ID]; ok {
// //存着有秒杀商品
// one = GetSecKillDetail(v.GoodsID)
//}
3 years ago
//base := goodsSku.GetBase()
//commission1 := base.Mul(rate1).Round(2)
//commission2 := base.Mul(rate2).Round(2)
//commission3 := base.Mul(rate3).Round(2)
//cm := commission1.Add(commission2).Add(commission3)
//if u.Level == 10 {
// cm = goodsSku.DiscountPrice.Sub(goodsSku.PurchasePrice.Mul(decimal.NewFromFloat(1.03))).Mul(decimal.NewFromFloat(define.Coefficient)).Round(2)
//}
cm := goodsSku.GetSelfProfit(u.Level)
4 years ago
gList = append(gList, promotionGoods{
GoodsID: gi.ID,
4 years ago
GoodsName: strings.Join([]string{gi.GoodsName, strings.Replace(goodsSku.Name, "+", " ", -1)}, " "),
4 years ago
BrandName: gb.Name + "品牌馆",
BrandImg: gb.LogoURL,
BrandId: gb.ID,
Description: v.Subtitle,
Price: goodsSku.DiscountPrice, //打折
PrimePrice: goodsSku.OriginalPrice, //卷后
PriceDesc: goodsSku.DiscountPrice.String(),
4 years ago
Commission: cm,
CommissionDesc: "赚" + cm.String(),
4 years ago
Picture: pic,
Inventory: inventory,
InventoryDesc: inventoryDesc,
TotalInventory: v.TotalInventory,
TotalInventoryDesc: "限购" + fmt.Sprintf("%d", v.TotalInventory) + "件",
TotalSalesVolume: uint(salesVolume1),
SalesVolumeDesc: salesVolumeDesc,
StartTime: v.StartTime,
EndTime: v.EndTime,
4 years ago
Percentage: decimal.Zero,
PercentageDesc: "",
4 years ago
Coupon: goodsSku.Coupon,
IsImport: gi.IsImport,
Storehouse: gi.Storehouse,
IsFerme: gi.IsFerme,
GysId: gi.VendorID, //添加供应商id
CountryIcon: country.Icon,
SecKill: one,
})
}
if v.ActivityID > 0 {
var activityInfo activity.Info
dbc.DB.First(&activityInfo, v.ActivityID)
aList = append(aList, activityList{
LogoUrl: activityInfo.LogoUrl,
TopUrl: activityInfo.TopUrl,
ActivityUrl: domain.GetCDN() + "/website/www/activity/t.html?id=" + strconv.Itoa(int(v.ActivityID)),
ActivitySortId: v.ActivitySortId,
})
}
}
/*
gListgoodsId
*/
4 years ago
//for i, k := range gList {
// var vo live
// dbc.DB.Table("recook_live_live_item").Where("main_goods_id=?", k.GoodsID).Select("status").Order("id desc").First(&vo)
// if vo.Status == 1 {
// gList[i].Living.Status = 1
// gList[i].Living.RoomId = vo.RoomId
// }
//
//}
4 years ago
/*
*/
//var SIcon kingKongIcon.SpecialSaleIconModel
//dbc.DB.Table(SIcon.TableName()).First(&SIcon)
//for i, _ := range gList {
// if i < 5 {
// gList[i].SpecialSale = SIcon.SpecialSaleIcon
// } else {
// break
// }
//}
/*
*/
var sp special_sale.SpecialSaleModel
var spes special_sale.SpecialSaleAssociationModel
var spess []special_sale.SpecialSaleAssociationModel
var spc []special_sale.SpecialSaleModel
//获取全部的特卖活动
dbc.DB.Table(sp.TableName()).Find(&spc)
//获取活动规则,活动商品或供应商
for i, v := range gList {
var spList []string
for _, k := range spc {
if k.Type == 1 { //全部商品
if k.GysId == v.GysId {
if k.EndTime.Time.Unix() > time.Now().Unix() {
spList = append(spList, k.Url)
}
}
} else { //部分商品
dbc.DB.Table(spes.TableName()).Where("special_sale_id=?", k.Id).Find(&spess)
for _, j := range spess {
if v.GoodsID == j.GoodsId {
if k.EndTime.Time.Unix() > time.Now().Unix() {
spList = append(spList, k.Url)
}
}
}
}
}
fmt.Println("图标路由为:", spList)
gList[i].SpecialSale = spList
}
back.Suc(c, "", &promotionList{
GoodsList: gList,
ActivityList: aList,
})
}