守价订单生成

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 (
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 {
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) {
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 {
return -1
}

View File

@@ -1412,7 +1412,7 @@ func GetSupplySupportStoreSkus(db *DaoDB, fromDate, toDate time.Time, fromStoreI
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 := `
SELECT a.*
FROM price_defend_order a
@@ -1452,6 +1452,10 @@ func GetPriceDefendOrder(db *DaoDB, vendorOrderID string, storeIDs, skuIDs, issu
sql += " AND a.is_success = ?"
sqlParams = append(sqlParams, isSuccess)
}
if isPay != -1 {
sql += " AND a.is_pay = ?"
sqlParams = append(sqlParams, isPay)
}
if userID != "" {
sql += " AND b.user_id = ?"
sqlParams = append(sqlParams, userID)

View File

@@ -115,6 +115,7 @@ type JxOrderInfo struct {
OrderType int `json:"orderType"`
IsBuyNowPrice int `json:"isBuyNowPrice"`
IsPriceDefend int `json:"isPriceDefend"`
OrderID2 string `json:"-"`
}
type DeliveryTimeItem struct {
@@ -324,9 +325,9 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType
err = fmt.Errorf("支付方式:%d当前不支持", payType)
}
} 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 {
err = fmt.Errorf("未查询到订单order_id: %v", orderID)
err = fmt.Errorf("未查询到待支付订单order_id: %v", orderID)
}
order2 := &model.GoodsOrder{
VendorOrderID: priceDefendOrders[0].VendorOrderID,
@@ -455,7 +456,7 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) {
// }
}
} 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 {
priceDefendOrders[0].IsPay = model.YES
dao.UpdateEntity(dao.GetDB(), priceDefendOrders[0], "IsPay")
@@ -811,14 +812,17 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
outJxOrder.FreightPrice = 500
// }
//如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
flag2 := false
for _, v := range priceDefendOrders {
if v.IsPay == model.YES {
flag2 = true
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefendOrders) > 0 {
flag2 := false
for _, v := range priceDefendOrders {
if v.StoreID != jxOrder.StoreID {
flag2 = true
}
}
if flag2 {
return nil, nil, fmt.Errorf("同一期不允许相同用户在不同门店进行守价!")
}
}
if len(priceDefendOrders) > 0 && flag2 {
outJxOrder.FreightPrice = 0
}
} else {
@@ -1938,36 +1942,71 @@ func GetSupplySupportStoreSkus(ctx *jxcontext.Context, fromDate, toDate string,
return orderSkus, err
}
func CreateOrderByPriceDefend(ctx *jxcontext.Context) {
func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
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)
if len(priceDefends) == 0 {
return
}
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),
priceDefends, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, 1, 1, "", utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefends) > 0 {
for _, v := range priceDefends {
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
}
if _, err := CreateOrder(ctx, jxOrder, v.AddressID, OrderCreateTypeNormal, 0, false); err == nil {
err = SettleDiscountActByPriceDefend(ctx, v)
for kk, vv := range userOrderMap {
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 (
db = dao.GetDB()
)
@@ -1977,7 +2016,11 @@ func SettleDiscountActByPriceDefend(ctx *jxcontext.Context, order *model.PriceDe
if orderPay.Status == model.PayStatusYes {
refundID := order.VendorOrderID
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 {
orderPay.Status = model.PayStatusCanceled
@@ -1993,6 +2036,6 @@ func GetMyPriceDefendOrders(ctx *jxcontext.Context, fromTime, toTime string) (pr
db = dao.GetDB()
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
}