守价订单生成

This commit is contained in:
苏尹岚
2020-08-25 10:45:37 +08:00
parent 7e335b3a61
commit 11080cbbfa
4 changed files with 84 additions and 37 deletions

View File

@@ -410,7 +410,7 @@ func checkPriceDefendOrderByStock(db *dao.DaoDB, storeID, skuID, stock, jxPrice
var ( var (
sumStock = 0 sumStock = 0
) )
priceDefends, _ := dao.GetPriceDefendOrder(db, "", []int{storeID}, []int{skuID}, []int{jxutils.GetDefendPriceIssue()}, 0, 1, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefends, _ := dao.GetPriceDefendOrder(db, "", []int{storeID}, []int{skuID}, []int{jxutils.GetDefendPriceIssue()}, 0, 1, 0, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefends) == 0 { if len(priceDefends) == 0 {
return -1 return -1
} }

View File

@@ -1658,7 +1658,7 @@ func ChangeJxPriceByDiscountAct(ctx *jxcontext.Context) {
} }
func checkPriceDefendOrderByPrice(db *dao.DaoDB, storeID, skuID, stock, jxPrice int) (realStock int) { func checkPriceDefendOrderByPrice(db *dao.DaoDB, storeID, skuID, stock, jxPrice int) (realStock int) {
priceDefends, _ := dao.GetPriceDefendOrder(db, "", []int{storeID}, []int{skuID}, []int{jxutils.GetDefendPriceIssue()}, 0, 0, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefends, _ := dao.GetPriceDefendOrder(db, "", []int{storeID}, []int{skuID}, []int{jxutils.GetDefendPriceIssue()}, 0, 0, 0, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefends) == 0 { if len(priceDefends) == 0 {
return -1 return -1
} }

View File

@@ -1412,7 +1412,7 @@ func GetSupplySupportStoreSkus(db *DaoDB, fromDate, toDate time.Time, fromStoreI
return getSupplySupportStoreSkusResult, err return getSupplySupportStoreSkusResult, err
} }
func GetPriceDefendOrder(db *DaoDB, vendorOrderID string, storeIDs, skuIDs, issues []int, defendPrice, isBuyNowPrice, isSuccess int, userID string, beginAt, EndAt time.Time, isDesc bool) (priceDefendOrders []*model.PriceDefendOrder, err error) { func GetPriceDefendOrder(db *DaoDB, vendorOrderID string, storeIDs, skuIDs, issues []int, defendPrice, isBuyNowPrice, isSuccess, isPay int, userID string, beginAt, EndAt time.Time, isDesc bool) (priceDefendOrders []*model.PriceDefendOrder, err error) {
sql := ` sql := `
SELECT a.* SELECT a.*
FROM price_defend_order a FROM price_defend_order a
@@ -1452,6 +1452,10 @@ func GetPriceDefendOrder(db *DaoDB, vendorOrderID string, storeIDs, skuIDs, issu
sql += " AND a.is_success = ?" sql += " AND a.is_success = ?"
sqlParams = append(sqlParams, isSuccess) sqlParams = append(sqlParams, isSuccess)
} }
if isPay != -1 {
sql += " AND a.is_pay = ?"
sqlParams = append(sqlParams, isPay)
}
if userID != "" { if userID != "" {
sql += " AND b.user_id = ?" sql += " AND b.user_id = ?"
sqlParams = append(sqlParams, userID) sqlParams = append(sqlParams, userID)

View File

@@ -115,6 +115,7 @@ type JxOrderInfo struct {
OrderType int `json:"orderType"` OrderType int `json:"orderType"`
IsBuyNowPrice int `json:"isBuyNowPrice"` IsBuyNowPrice int `json:"isBuyNowPrice"`
IsPriceDefend int `json:"isPriceDefend"` IsPriceDefend int `json:"isPriceDefend"`
OrderID2 string `json:"-"`
} }
type DeliveryTimeItem struct { type DeliveryTimeItem struct {
@@ -324,9 +325,9 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType
err = fmt.Errorf("支付方式:%d当前不支持", payType) err = fmt.Errorf("支付方式:%d当前不支持", payType)
} }
} else { } else {
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, utils.Int64ToStr(orderID), nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefendOrders, _ := dao.GetPriceDefendOrder(db, utils.Int64ToStr(orderID), nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefendOrders) == 0 { if len(priceDefendOrders) == 0 {
err = fmt.Errorf("未查询到订单order_id: %v", orderID) err = fmt.Errorf("未查询到待支付订单order_id: %v", orderID)
} }
order2 := &model.GoodsOrder{ order2 := &model.GoodsOrder{
VendorOrderID: priceDefendOrders[0].VendorOrderID, VendorOrderID: priceDefendOrders[0].VendorOrderID,
@@ -455,7 +456,7 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) {
// } // }
} }
} else { } else {
priceDefendOrders, _ := dao.GetPriceDefendOrder(dao.GetDB(), orderPay.VendorOrderID, nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefendOrders, _ := dao.GetPriceDefendOrder(dao.GetDB(), orderPay.VendorOrderID, nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefendOrders) > 0 { if len(priceDefendOrders) > 0 {
priceDefendOrders[0].IsPay = model.YES priceDefendOrders[0].IsPay = model.YES
dao.UpdateEntity(dao.GetDB(), priceDefendOrders[0], "IsPay") dao.UpdateEntity(dao.GetDB(), priceDefendOrders[0], "IsPay")
@@ -811,14 +812,17 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
outJxOrder.FreightPrice = 500 outJxOrder.FreightPrice = 500
// } // }
//如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费 //如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
flag2 := false if len(priceDefendOrders) > 0 {
for _, v := range priceDefendOrders { flag2 := false
if v.IsPay == model.YES { for _, v := range priceDefendOrders {
flag2 = true if v.StoreID != jxOrder.StoreID {
flag2 = true
}
}
if flag2 {
return nil, nil, fmt.Errorf("同一期不允许相同用户在不同门店进行守价!")
} }
}
if len(priceDefendOrders) > 0 && flag2 {
outJxOrder.FreightPrice = 0 outJxOrder.FreightPrice = 0
} }
} else { } else {
@@ -1938,36 +1942,71 @@ func GetSupplySupportStoreSkus(ctx *jxcontext.Context, fromDate, toDate string,
return orderSkus, err return orderSkus, err
} }
func CreateOrderByPriceDefend(ctx *jxcontext.Context) { func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
userOrderMap = make(map[int64][]*model.PriceDefendOrder)
) )
priceDefends, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false) priceDefends, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, 1, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefends) == 0 { if len(priceDefends) > 0 {
return for _, v := range priceDefends {
} userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
for _, v := range priceDefends {
jxOrder := &JxOrderInfo{
BuyerComment: "守价订单",
StoreID: v.StoreID,
Skus: []*JxSkuInfo{
&JxSkuInfo{
SkuID: v.SkuID,
Count: v.Count,
},
},
IsPriceDefend: model.YES,
OrderID: utils.Str2Int64(v.VendorOrderID),
} }
if _, err := CreateOrder(ctx, jxOrder, v.AddressID, OrderCreateTypeNormal, 0, false); err == nil { for kk, vv := range userOrderMap {
err = SettleDiscountActByPriceDefend(ctx, v) if len(vv) == 1 {
jxOrder := &JxOrderInfo{
BuyerComment: "守价订单",
StoreID: vv[0].StoreID,
Skus: []*JxSkuInfo{
&JxSkuInfo{
SkuID: vv[0].SkuID,
Count: vv[0].Count,
},
},
IsPriceDefend: model.YES,
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
}
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
}
} else {
var (
skus []*JxSkuInfo
orderIDs []string
)
jxOrder := &JxOrderInfo{
BuyerComment: "守价订单",
StoreID: vv[0].StoreID,
IsPriceDefend: model.YES,
OrderID: GenOrderNo(ctx),
}
for _, priceDefend := range vv {
sku := &JxSkuInfo{
SkuID: priceDefend.SkuID,
Count: priceDefend.Count,
}
skus = append(skus, sku)
orderIDs = append(orderIDs, priceDefend.VendorOrderID)
err = SettleDiscountActByPriceDefend(ctx, priceDefend, false)
}
jxOrder.Skus = skus
jxOrder.OrderID2 = strings.Join(orderIDs, ",")
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
}
}
} }
} }
priceDefends2, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, 0, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefends2) > 0 {
for _, v := range priceDefends2 {
err = SettleDiscountActByPriceDefend(ctx, v, true)
}
}
return err
} }
//结算因京西折扣活动而参与守价的订单 //结算因京西折扣活动而参与守价的订单
func SettleDiscountActByPriceDefend(ctx *jxcontext.Context, order *model.PriceDefendOrder) (err error) { func SettleDiscountActByPriceDefend(ctx *jxcontext.Context, order *model.PriceDefendOrder, isFull bool) (err error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
) )
@@ -1977,7 +2016,11 @@ func SettleDiscountActByPriceDefend(ctx *jxcontext.Context, order *model.PriceDe
if orderPay.Status == model.PayStatusYes { if orderPay.Status == model.PayStatusYes {
refundID := order.VendorOrderID refundID := order.VendorOrderID
if orderPay.PayType == model.PayTypeTL { if orderPay.PayType == model.PayTypeTL {
_, err = RefundOrderByTL(ctx, orderPay, refundID, int(order.ActualPayPrice-order.RealPrice), settleDiscountActRefundReason) if !isFull {
_, err = RefundOrderByTL(ctx, orderPay, refundID, int(order.ActualPayPrice-order.RealPrice), settleDiscountActRefundReason)
} else {
_, err = RefundOrderByTL(ctx, orderPay, refundID, int(order.ActualPayPrice), settleDiscountActRefundReason)
}
} }
} else { } else {
orderPay.Status = model.PayStatusCanceled orderPay.Status = model.PayStatusCanceled
@@ -1993,6 +2036,6 @@ func GetMyPriceDefendOrders(ctx *jxcontext.Context, fromTime, toTime string) (pr
db = dao.GetDB() db = dao.GetDB()
userID = ctx.GetUserID() userID = ctx.GetUserID()
) )
priceDefendOrders, err = dao.GetPriceDefendOrder(db, "", nil, nil, nil, 0, -1, -1, userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), true) priceDefendOrders, err = dao.GetPriceDefendOrder(db, "", nil, nil, nil, 0, -1, -1, -1, userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), true)
return priceDefendOrders, err return priceDefendOrders, err
} }