@@ -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 {
i f 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 )
}
i f _ , 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
}