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.

632 lines
22 KiB

4 years ago
package order_preview
import (
"fmt"
"git.oa00.com/go/mysql"
"math"
"recook/configs"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/model/coupon"
"recook/internal/model/freight"
"recook/internal/model/goods"
"recook/internal/model/order_preview"
"recook/internal/model/promotion"
"recook/internal/model/user"
"recook/internal/model/vend"
"recook/internal/service/baseCode"
4 years ago
"recook/internal/v2/controller/all/rate"
"recook/internal/v2/controller/task"
"recook/internal/v2/lib/jcook"
"recook/internal/v2/model/flashsale"
"recook/internal/v2/model/gys/enterprise"
goods3 "recook/internal/v2/model/recook/goods"
"recook/tools"
"time"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
"github.com/shopspring/decimal"
)
/*普通订单预览的参数*/
type previewNormalOrderParam struct {
4 years ago
UserID uint `json:"userId" validate:"required"`
SkuID uint `json:"skuId" validate:"required"`
Quantity uint `json:"quantity" validate:"required"`
ParentID uint `json:"parentId"` // 可选字段 如果是链接分享 则传入该字段代表分享者的id。 没有的话。就是上级的id顶级用户没有
UseCoin int `json:"useCoin"` //默认0 开启 1 关闭
LiveId uint `json:"liveId"` //直播间id
Address string `json:"address"`
InvitationNo string `json:"invitation_no"`
4 years ago
}
4 years ago
// CreatePreviewNormalOrder 创建普通订单,从商品详情页直接点击《立即购买》按钮进入购买页面,客户端不计算价格,服务端进行计算。
// 明天参加活动的商品不允许购买
4 years ago
func CreatePreviewNormalOrder(c *gin.Context) {
var p previewNormalOrderParam
err := tools.ParseParams(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if p.UserID <= 0 {
back.Fail(c, "游客无法使用该功能,请先登录")
return
}
if p.Quantity > 50 {
back.Fail(c, "单件最多拍50件")
return
}
now := time.Now()
var ancestorID uint = 0
var myInfo user.Information
if err := dbc.DB.First(&myInfo, p.UserID).Error; err != nil {
back.Err(c, err.Error())
return
}
ancestorID = myInfo.AncestorID
//todo
// 店主、店铺可以分享商品,通过分享链接直接下单的,商品佣金返还给分享者瑞币
sharerId := myInfo.ID
if p.InvitationNo != "" {
sharerId = uint(baseCode.Decode(p.InvitationNo))
}
4 years ago
preOrderInfo := &order_preview.Information{}
preOrderUniversalCoupon := &order_preview.CouponDetail{}
preOrderAddr := &order_preview.Addr{}
preOrderBrandCoupon := &order_preview.CouponDetail{}
preOrderGoods := &order_preview.GoodsDetail{}
actualAmount := decimal.NewFromFloat(0.0)
unitPrice := decimal.NewFromFloat(0.0) // 单价
expressFee := decimal.NewFromFloat(0.0) // 快递费
commission := decimal.NewFromInt(0)
brandCouponReducePrice := decimal.NewFromFloat(0.0) // 品牌优惠券抵扣的价格
universeCouponReducePrice := decimal.NewFromFloat(0.0) // 通用优惠券抵扣的价格
coinReducePrice := decimal.NewFromFloat(0.0) // 使用瑞币的价格
mainPhotoURL := ""
// 首先检测库存
var sku goods.Sku
cost := decimal.Zero
4 years ago
{
err = dbc.DB.First(&sku, "id = ?", p.SkuID).Error
if err != nil {
back.Err(c, err.Error())
return
}
cost = cost.Add(cost.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(p.Quantity)))))
4 years ago
}
var promotionGoods promotion.Goods
var promotionSku promotion.Sku
dbc.DB.First(&promotionGoods, "goods_id = ? AND start_time <= ? AND end_time > ?", sku.GoodsID, time.Now(), time.Now())
if promotionGoods.ID == 0 {
dbc.DB.First(&promotionGoods, "goods_id = ? AND start_time > ?", sku.GoodsID, time.Now())
}
// 仅考虑商品的库存
dbc.DB.First(&promotionSku, "promotion_goods_id = ? AND sku_id = ?", promotionGoods.ID, p.SkuID)
if p.Quantity > sku.Inventory {
back.Fail(c, "库存不足")
return
}
unitPrice = sku.DiscountPrice
commission = sku.Commission
mainPhotoURL = sku.PicURL
if len(sku.PicURL) == 0 { // 使用主图
var mainPhoto goods.MainPhoto
err := dbc.DB.First(&mainPhoto, "goods_id = ? AND is_master = 1", sku.GoodsID).Error
if err != nil {
back.Fail(c, err.Error())
return
}
mainPhotoURL = mainPhoto.URL
}
if unitPrice.LessThan(decimal.NewFromFloat(0.01)) {
back.Err(c, "当前商品价格太低。内部错误")
return
}
var defaultAddr user.Addr
{
err = dbc.DB.First(&defaultAddr, "user_id = ? AND is_default = 1", p.UserID).Error
if err != nil && false == gorm.IsRecordNotFoundError(err) {
back.Err(c, err.Error())
return
}
}
if sku.ThirdPartyType == 3 && p.Address == "" && defaultAddr.ID == 0 {
back.Err(c, "请填写默认收货地址")
return
}
var goodsInfo goods.Information
{
err = dbc.DB.First(&goodsInfo, "id = ?", sku.GoodsID).Error
if err != nil {
back.Err(c, err.Error())
return
}
if goodsInfo.PublishStatus == 0 {
back.Fail(c, "商品已下架:"+goodsInfo.GoodsName)
return
}
}
if (goodsInfo.ThirdPartyType == 3 && defaultAddr.ID > 0) || p.Address != "" {
// 京东商品查询物流信息
client := jcook.GetClient()
if len(p.Address) == 0 {
p.Address = defaultAddr.GetAddress()
}
req := jcook.SkuStockReq{
Address: p.Address,
SkuList: []jcook.SkuQuantity{
{
goodsInfo.ThirdPartyId,
p.Quantity,
},
},
}
var resp []jcook.SkuStockResp
if err = client.Exec(req, &resp); err != nil {
back.Err(c, err.Error())
return
}
for _, v := range resp {
if v.StockState == 0 {
back.Err(c, "该地区该商品无货")
return
}
}
var sku goods3.RecookGoodsSkuModel
mysql.Db.First(&sku, "goods_id = ?", goodsInfo.ID)
req1 := jcook.LogisticsFeeReq{
Address: p.Address,
SkuList: []jcook.LogisticsInfo{
{
goodsInfo.ThirdPartyId,
p.Quantity,
sku.PurchasePrice,
},
},
OrderFee: sku.PurchasePrice.Mul(decimal.NewFromInt(int64(p.Quantity))),
}
var resp2 jcook.LogisticsFeeResp
if err := client.Exec(req1, &resp2); err != nil {
back.Err(c, err.Error())
return
}
expressFee = resp2.Fee
preOrderAddr.IsDeliveryArea = 1
} else if defaultAddr.ID > 0 {
canDelivery, expFee, err := computeExpressFeeWithGoods(p.Quantity, &goodsInfo, defaultAddr.Province, defaultAddr.City)
if err != nil {
back.Err(c, err.Error())
return
}
if canDelivery {
expressFee = expFee
preOrderAddr.IsDeliveryArea = 1
}
}
var brandInfo goods.Brand
{
err = dbc.DB.First(&brandInfo, "id = ?", goodsInfo.BrandID).Error
if err != nil {
back.Err(c, err.Error())
return
}
}
var firCate goods.Category
var secCate goods.Category
dbc.DB.Select("name").First(&firCate, goodsInfo.FirstCategoryID)
dbc.DB.Select("name").First(&secCate, goodsInfo.SecondCategoryID)
vendorName := "自营"
var vendor vend.Information
{
if goodsInfo.VendorID > 0 {
err = dbc.DB.Select("id, username").First(&vendor, "id = ?", goodsInfo.VendorID).Error
if err != nil {
back.Err(c, err.Error())
return
}
vendorName = vendor.Username
}
}
// 品牌券 快递费不计入优惠券门槛
var maxBrandCouponReceiverMid coupon.ReceiverMid
dbc.DB.Select("id, coupon_id, user_id, status, name, threshold, MAX(cash) AS cash, scope, brand_id, start_time, end_time").
First(&maxBrandCouponReceiverMid, "user_id = ? AND status = 0 AND threshold <= ? "+
"AND scope = 1 AND brand_id = ? "+
"AND start_time < ? AND end_time > ?", p.UserID, unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity))), brandInfo.ID, now, now)
if maxBrandCouponReceiverMid.ID > 0 {
brandCouponReducePrice = decimal.NewFromInt(int64(maxBrandCouponReceiverMid.Cash))
}
// 购物券
var maxUniversalCouponReceiverMid coupon.ReceiverMid
dbc.DB.Select("id, coupon_id, user_id, status, name, threshold, MAX(cash) AS cash, scope, brand_id, start_time, end_time").First(&maxUniversalCouponReceiverMid, "user_id = ? AND status = 0 AND threshold <= ? "+
"AND scope = 0 "+
"AND start_time < ? AND end_time > ?", p.UserID, unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity))).Sub(brandCouponReducePrice), now, now)
if maxUniversalCouponReceiverMid.ID > 0 {
universeCouponReducePrice = decimal.NewFromInt(int64(maxUniversalCouponReceiverMid.Cash))
}
// todo 做判断,每次只能用一张优惠券,这里哪张面额大,用哪张减免
//新增秒杀模块
//判别是否是秒杀中的商品
var stock, _ = IfSecKill(time.Now(), p.SkuID)
if stock.Id > 0 {
//该商品在本次秒杀活动中
//判断库存
num := stock.SecKillStock.Sub(stock.SaleNum)
if num.IsZero() || num.LessThan(decimal.NewFromInt(0)) || num.LessThan(decimal.NewFromInt(int64(p.Quantity))) {
back.Err(c, "该秒杀商品库存不足")
return
}
}
//新增结束
/*
*/
actualAmount = unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity))).Add(expressFee).Sub(brandCouponReducePrice).Sub(universeCouponReducePrice)
if stock.Id > 0 {
actualAmount = stock.SecKillDiscountPrice.Mul(decimal.NewFromInt(int64(p.Quantity))).Add(expressFee).Sub(brandCouponReducePrice).Sub(universeCouponReducePrice)
}
var wallet user.Wallet
{
err = dbc.DB.First(&wallet, "user_id = ?", p.UserID).Error
if err != nil {
back.Err(c, err.Error())
return
}
if p.UseCoin < 1 && (&goods3.RecookGoodsInfoModel{}).HasCoin(goodsInfo.Storehouse) {
//coinAmount := decimal.NewFromInt(int64(wallet.Coin)).Div(decimal.NewFromInt(100)) // 将瑞币折算为实际金额
coinAmount := wallet.Coin // 瑞币折算按照 11
if actualAmount.GreaterThanOrEqual(coinAmount) { // 保证不过量抵扣
actualAmount = actualAmount.Sub(coinAmount)
coinReducePrice = coinAmount
} else {
// 瑞比足够支付时 将瑞币直接使用掉 订单金额为0
coinReducePrice = actualAmount
actualAmount = decimal.NewFromFloat(0.0)
}
}
}
tx := dbc.DB.Begin()
{
{
preOrderInfo.AncestorID = ancestorID
preOrderInfo.ParentID = uint(myInfo.ParentID)
preOrderInfo.SharerID = sharerId
4 years ago
preOrderInfo.LiveId = p.LiveId
preOrderInfo.UserID = p.UserID
//preOrderInfo.UserRole = myInfo.Role
preOrderInfo.Title = goodsInfo.GoodsName
preOrderInfo.BrandCouponTotalAmount = brandCouponReducePrice
preOrderInfo.UniverseCouponTotalAmount = universeCouponReducePrice
preOrderInfo.CoinTotalAmount = coinReducePrice
preOrderInfo.ExpressTotalFee = expressFee
preOrderInfo.GoodsTotalAmount = unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity)))
// preOrderInfo.GoodsTotalCommission = commission.Mul(decimal.NewFromInt(int64(p.Quantity)))
//allAmount := unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity)))
// 单笔收益 * 数量 * (总价价 - 优惠券 / 总价)
//preOrderInfo.GoodsTotalCommission = commission.Mul(decimal.NewFromInt(int64(p.Quantity))).
// Mul(allAmount).Sub(universeCouponReducePrice.Add(brandCouponReducePrice)).Div(allAmount)
preOrderInfo.GoodsTotalCommission = commission.Mul(decimal.NewFromInt(int64(p.Quantity)))
// beego.Info("commission", commission, "Quantity", p.Quantity, "allAmount", allAmount, "universeCouponReducePrice", universeCouponReducePrice, "brandCouponReducePrice", brandCouponReducePrice, "allAmount", allAmount)
preOrderInfo.ActualTotalAmount = actualAmount
preOrderInfo.Cost = cost
4 years ago
//若该商品在秒杀中,重新赋值
if stock.Id > 0 {
preOrderInfo.GoodsTotalAmount = stock.SecKillDiscountPrice.Mul(decimal.NewFromInt(int64(p.Quantity)))
preOrderInfo.GoodsTotalCommission = stock.SecKillCommission.Mul(decimal.NewFromInt(int64(p.Quantity)))
}
//赋值结束
err = tx.Create(&preOrderInfo).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
// 地址
{
preOrderAddr.OrderID = preOrderInfo.ID
preOrderAddr.Province = defaultAddr.Province
preOrderAddr.City = defaultAddr.City
preOrderAddr.District = defaultAddr.District
preOrderAddr.ReceiverName = defaultAddr.Name
preOrderAddr.Mobile = defaultAddr.Mobile
preOrderAddr.AddressID = defaultAddr.ID
preOrderAddr.Address = defaultAddr.Address
err = tx.Create(&preOrderAddr).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
// 保存优惠券
{
if maxBrandCouponReceiverMid.ID > 0 {
preOrderBrandCoupon.OrderID = preOrderInfo.ID
preOrderBrandCoupon.DeductedAmount = brandCouponReducePrice
preOrderBrandCoupon.BrandID = maxBrandCouponReceiverMid.BrandID
preOrderBrandCoupon.PersonalCouponID = maxBrandCouponReceiverMid.ID
preOrderBrandCoupon.Scope = maxBrandCouponReceiverMid.Scope
preOrderBrandCoupon.CouponID = maxBrandCouponReceiverMid.CouponID
preOrderBrandCoupon.CouponName = maxBrandCouponReceiverMid.Name
preOrderBrandCoupon.EndTime = maxBrandCouponReceiverMid.EndTime
err = tx.Create(&preOrderBrandCoupon).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
if maxUniversalCouponReceiverMid.ID > 0 {
preOrderUniversalCoupon.OrderID = preOrderInfo.ID
preOrderUniversalCoupon.DeductedAmount = universeCouponReducePrice
preOrderUniversalCoupon.BrandID = maxUniversalCouponReceiverMid.BrandID
preOrderUniversalCoupon.PersonalCouponID = maxUniversalCouponReceiverMid.ID
preOrderUniversalCoupon.Scope = maxUniversalCouponReceiverMid.Scope
preOrderUniversalCoupon.CouponID = maxUniversalCouponReceiverMid.CouponID
preOrderUniversalCoupon.CouponName = maxUniversalCouponReceiverMid.Name
preOrderUniversalCoupon.EndTime = maxUniversalCouponReceiverMid.EndTime
err = tx.Create(&preOrderUniversalCoupon).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
}
{
preOrderGoods.OrderID = preOrderInfo.ID
preOrderGoods.VendorID = goodsInfo.VendorID
preOrderGoods.VendorName = vendorName
preOrderGoods.BrandID = brandInfo.ID
preOrderGoods.BrandName = brandInfo.Name
preOrderGoods.CategoryName = firCate.Name + "/" + secCate.Name
preOrderGoods.GoodsID = goodsInfo.ID
preOrderGoods.GoodsName = goodsInfo.GoodsName
preOrderGoods.IsJoinTeamPerformance = goodsInfo.IsJoinTeamPerformance
preOrderGoods.Hash = goodsInfo.Hash
preOrderGoods.SkuID = sku.ID
preOrderGoods.SkuName = sku.Name
preOrderGoods.SkuCode = sku.Code
preOrderGoods.MainPhotoURL = mainPhotoURL
preOrderGoods.Quantity = p.Quantity
preOrderGoods.FreightID = goodsInfo.FreightID
preOrderGoods.Weight = goodsInfo.Weight
preOrderGoods.PromotionSkuId = promotionSku.ID
preOrderGoods.PromotionGoodsId = promotionGoods.ID
preOrderGoods.PromotionName = promotionGoods.PromotionName
preOrderGoods.PromotionStartTime = promotionGoods.StartTime
preOrderGoods.PromotionEndTime = promotionGoods.EndTime
preOrderGoods.UnitPrice = unitPrice
preOrderGoods.PurchasePrice = sku.PurchasePrice
// preOrderGoods.TotalCommission = commission.Mul(decimal.NewFromInt(int64(p.Quantity)))
// 收益 / 单价 * (单价-(优惠券)/数量)
preOrderGoods.TotalCommission = preOrderInfo.GoodsTotalCommission
preOrderGoods.BrandCouponAmount = brandCouponReducePrice
preOrderGoods.UniverseCouponAmount = universeCouponReducePrice
preOrderGoods.CoinAmount = coinReducePrice
preOrderGoods.GoodsAmount = unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity)))
preOrderGoods.ExpressFee = expressFee
preOrderGoods.ActualAmount = actualAmount
preOrderGoods.IsImport = goodsInfo.IsImport
preOrderGoods.Storehouse = goodsInfo.Storehouse
preOrderGoods.IsFerme = goodsInfo.IsFerme
if stock.Id > 0 {
preOrderGoods.UnitPrice = stock.SecKillDiscountPrice
preOrderGoods.PurchasePrice = stock.SecKillPurchase
preOrderGoods.TotalCommission = preOrderInfo.GoodsTotalCommission
preOrderGoods.GoodsAmount = stock.SecKillDiscountPrice.Mul(decimal.NewFromInt(int64(p.Quantity)))
}
err = tx.Create(&preOrderGoods).Error
if err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
}
tx.Commit()
//新增邮件提醒
go sendJTEmail(preOrderInfo.ID)
back.Suc(c, "操作成功", queryPreviewOrderGroup(preOrderInfo.ID))
}
func computeExpressFeeWithGoods(quantity uint, goodsInfo *goods.Information, province, city string) (bool, decimal.Decimal, error) {
var freightTemplateInfo freight.Information
// 只有用户有默认地址才去计算运费价格
err := dbc.DB.First(&freightTemplateInfo, "id = ?", goodsInfo.FreightID).Error
if err != nil {
return false, decimal.NewFromFloat(0.0), err
}
// 检测是否属于不发货地区
// 不发货的省
var nonDeliveryProvince freight.NoProvince
err = dbc.DB.First(&nonDeliveryProvince, "freight_id = ? AND province_name = ?", goodsInfo.FreightID, province).Error
if err != nil && false == gorm.IsRecordNotFoundError(err) {
return false, decimal.Zero, err
}
if nonDeliveryProvince.ID > 0 {
return false, decimal.NewFromFloat(0.0), nil
}
// 不发货的市
var noCitys freight.NoCitys
err = dbc.DB.First(&noCitys, "freight_id = ? AND province_name = ? and city_name = ?", goodsInfo.FreightID, province, city).Error
if err != nil && gorm.IsRecordNotFoundError(err) == false {
return false, decimal.Zero, err
}
if noCitys.ID > 0 {
return false, decimal.NewFromFloat(0.0), nil
}
// 进入该分支代表该地址可以发货 需要查询运费信息
// 先判断是不是所有地方包邮
var freightInfo freight.Information
err = dbc.DB.First(&freightInfo, "id = ?", goodsInfo.FreightID).Error
if err != nil {
return false, decimal.NewFromFloat(0.0), nil
}
if freightInfo.AllFree == 1 {
return true, decimal.NewFromFloat(0.0), nil
}
// 先找到该收货省市的信息 然后找到对应的价格表
var priceDetailID uint
// 市价格表
var deliveryCity freight.Citys
err = dbc.DB.First(&deliveryCity, "freight_id = ? AND province_name = ? and city_name = ?", goodsInfo.FreightID, province, city).Error
if deliveryCity.ID == 0 {
// 省价格表
var deliveryProvince freight.Province
err = dbc.DB.First(&deliveryProvince, "freight_id = ? AND province_name = ?", goodsInfo.FreightID, province).Error
if err != nil {
return true, decimal.Zero, nil
}
priceDetailID = deliveryProvince.PriceDetailID
} else {
priceDetailID = deliveryCity.PriceDetailID
}
var freightPrice freight.Price
dbc.DB.First(&freightPrice, "id = ?", priceDetailID)
expressFee := decimal.NewFromFloat(0.0)
if freightPrice.Type == 0 { // 按照件数计算
if quantity <= freightPrice.FirstNumber {
expressFee = freightPrice.FirstNumberFee
} else {
baseNumber := math.Ceil(float64((quantity - freightPrice.FirstNumber) / freightPrice.AdditionalNumber)) // 向上取整 意思是不满一斤算一斤
expressFee = freightPrice.FirstNumberFee.Add(decimal.NewFromFloat(baseNumber).Mul(freightPrice.AdditionalNumberFee))
}
} else if freightPrice.Type == 3 { // 固定计费
return true, freightPrice.Amount, nil
//if goodsInfo.Weight.LessThanOrEqual(freightPrice.FirstWeight) { // 小于首重
// expressFee = freightPrice.FirstWeightFee
//} else {
// baseWeight := (goodsInfo.Weight.Sub(freightPrice.FirstWeight)).Div(freightPrice.AdditionalWeight).Ceil() // 向上取整 意思是不满一斤算一斤
// expressFee = freightPrice.FirstWeightFee.Sub(baseWeight.Mul(freightPrice.AdditionalWeightFee))
//}
} else { // 按照重量计算
if goodsInfo.Weight.LessThanOrEqual(freightPrice.FirstWeight) { // 小于首重
expressFee = freightPrice.FirstWeightFee
} else {
baseWeight := (goodsInfo.Weight.Sub(freightPrice.FirstWeight)).Div(freightPrice.AdditionalWeight).Ceil() // 向上取整 意思是不满一斤算一斤
expressFee = freightPrice.FirstWeightFee.Sub(baseWeight.Mul(freightPrice.AdditionalWeightFee))
}
}
if quantity >= freightPrice.FreeNumberThreshold {
expressFee = decimal.NewFromFloat(0.0)
}
return true, expressFee, nil
}
/*
1%6%
*/
func sendJTEmail(oid uint) {
var less []task.JtResponse
var greater []task.JtResponse
var cal rate.Calculation
var jt task.Jingtong
gys := enterprise.GysEnterpriseStateModel{}
var goodsList []order_preview.GoodsDetail
dbc.DB.Table("recook_order_preview_goods_detail").Where("order_id=?", oid).Find(&goodsList)
fmt.Println("******测试开始")
for _, v := range goodsList {
var reInfo goods3.RecookGoodsInfoModel
dbc.DB.Table("recook_goods_info").Where("id=?", v.GoodsID).First(&reInfo)
if reInfo.ThirdPartyType == 2 { //景彤
var rest []rate.NewGoodsSkuRest
if reInfo.Storehouse > 1 {
rest = cal.GrossProfitRateAbort(v.GoodsID, nil)
} else {
rest = cal.GrossProfitRate(v.GoodsID, nil)
}
for _, skuRest := range rest {
fmt.Println("毛利率为", skuRest.EstimatedNetGrossMargin)
if skuRest.EstimatedNetGrossMargin.LessThan(decimal.NewFromFloat(0.01)) {
name := gys.FindByUserId(v.VendorID)
less = append(less, task.JtResponse{
GoodsName: v.GoodsName,
GysName: name.EnterpriseName,
Coke: skuRest.Code,
Text: "毛利率低于1%",
Rate: skuRest.EstimatedNetGrossMargin,
})
}
if skuRest.EstimatedNetGrossMargin.GreaterThan(decimal.NewFromFloat(0.10)) {
name := gys.FindByUserId(v.VendorID)
greater = append(greater, task.JtResponse{
GoodsName: v.GoodsName,
GysName: name.EnterpriseName,
Coke: skuRest.Code,
Text: "毛利率高于10%",
Rate: skuRest.EstimatedNetGrossMargin,
})
}
}
}
if len(less)+len(greater) > 0 {
err1 := jt.SendEmail(configs.ConfigJTEmail, less, greater)
if err1 != nil {
fmt.Println(err1.Error())
}
}
}
fmt.Println("*************8测试结束")
}
func IfSecKill(now time.Time, skuID uint) (flashsale.RecookSecKillGoodsModel, flashsale.RecookSecKillSortModel) {
var seckill flashsale.RecookSecKillModel
dbc.DB.Table(seckill.TableName()).Where("activity_start_time<?", now).Where("activity_end_time>?", now).Where("status=2").First(&seckill)
//获取当前时间段的商品
now2 := time.Date(0, 1, 1, now.Hour(), now.Minute(), now.Second(), 0, time.Local)
var secgoods flashsale.RecookSecKillSortModel
dbc.DB.Table((&flashsale.RecookSecKillSortModel{}).TableName()).Where("show_time_start<?", now2).Where("show_time_end>?", now2).Where("sec_kill_activity_id=?", seckill.Id).Where("sku_id=?", skuID).First(&secgoods)
var gs flashsale.RecookSecKillGoodsModel
dbc.DB.Table(gs.TableName()).Where("sec_kill_activity_id=?", seckill.Id).Where("goods_sku_id=?", secgoods.SkuId).First(&gs)
return gs, secgoods
}