@@ -2,6 +2,7 @@ package defsch
import (
"fmt"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"math"
"time"
@@ -17,6 +18,11 @@ import (
"git.rosy.net.cn/jx-callback/globals"
)
const (
JXC4B_RAND_JXGY = 1 // 京西菜市和果园品牌id
JXC4B_SHOP = 7 // 京西超市
)
func ( s * DefScheduler ) loadSavedOrderByID ( vendorOrderID string , vendorID int , isForceLoad bool ) * WatchOrderInfo {
return s . loadSavedOrderFromMap ( & model . OrderStatus {
RefVendorOrderID : vendorOrderID ,
@@ -133,11 +139,26 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex
if forceCreate {
s . stopTimer ( savedOrderInfo )
}
// 获取门店品牌余额
storeAcct , err := cms . GetStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) ) // 获取门店余额
// 如果门店没钱,查看品牌, 查询门店品牌id
storeList , err := dao . GetStoreList ( dao . GetDB ( ) , [ ] int { jxutils . GetSaleStoreIDFromOrder ( order ) } , nil , nil , nil , nil , "" )
if err != nil || len ( storeList ) != 1 {
return nil , fmt . Errorf ( "门店id:[%d],所属品牌不唯一,或其他查询错误" , order . JxStoreID )
}
result , err := dao . GetBrandBalance ( dao . GetDB ( ) , storeList [ 0 ] . BrandID ) // 品牌余额
if err != nil {
return nil , err
}
//门店发单开始扣钱
if order . CreateDeliveryType == model . YES {
deliveryFeeMap , _ := s . QueryOrderWaybillFeeInfoEx ( ctx , order . VendorOrderID , order . VendorID )
// 运费相等为0或支出大于收入不做,
isEqual , isZero , _ := partner . CurStoreAcctManager . CheckStoreAcctExpendExist ( order . VendorOrderID )
expend , lastFee , _ := partner . CurStoreAcctManager . GetStoreAcctExpendLastCreateWayBillFee ( order . VendorOrderID )
// 收最贵的一个订单配送费(配送费发送变化,收取最贵的价格)
if ! isZero && ! isEqual {
var newPrice int64
@@ -156,15 +177,50 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex
newPrice = maxFee
}
// 门店支出运费
expend , lastFee , _ : = partner . CurStoreAcctManager . GetStoreAcctExpendLastCreateWayBillFee ( order . VendorOrderID )
if in t( newPrice ) > lastFee {
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybill2ndMor e , order . VendorOrderID , expend . ID ) //int(newPrice)- lastFee
if storeList [ 0 ] . BrandID ! = JXC4B_SHOP && storeList [ 0 ] . BrandID != JXC4B_RAND_JXGY { // 非京西品牌,先扣门店在扣品牌
if storeAcc t. AccountBalance > int ( newPrice) {
if int ( newPric e ) > lastFee {
// 门店支出费用
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybill2ndMore , order . VendorOrderID , expend . ID ) //int(newPrice)-lastFee
}
} else if result > int ( newPrice ) {
// 品牌支出费用
partner . CurStoreAcctManager . InsertBrandBill ( jxcontext . AdminCtx , storeList [ 0 ] . BrandID , int ( model . Waybill { } . DesiredFee ) , model . BrandBillTypeExpend , model . BrandBillFeeTypeDelivery , order . VendorOrderID )
} else {
return nil , fmt . Errorf ( "门店id:[%d],品牌id:[]%d,门店以及门店所属品牌余额不足,无法发单" , order . JxStoreID , storeList [ 0 ] . BrandID )
}
} else { // 京西品牌
if storeAcct . AccountBalance > int ( newPrice ) {
if int ( newPrice ) > lastFee {
// 门店支出费用
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybill2ndMore , order . VendorOrderID , expend . ID ) //int(newPrice)-lastFee
}
} else {
return nil , fmt . Errorf ( "门店id:[%d],品牌id:[]%d,门店以及门店所属品牌余额不足,无法发单" , order . JxStoreID , storeList [ 0 ] . BrandID )
}
}
} else {
if len ( courierVendorIDs ) == 1 {
courierVendorID := courierVendorIDs [ 0 ]
if _ , ok := deliveryFeeMap [ courierVendorID ] ; ok {
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybillEx , order . VendorOrderID , 0 ) //int(deliveryFeeMap[courierVendorID].DeliveryFee
if storeList [ 0 ] . BrandID != JXC4B_SHOP && storeList [ 0 ] . BrandID != JXC4B_RAND_JXGY { // 非京西品牌,先扣门店在扣品牌
if storeAcct . AccountBalance > int ( model . Waybill { } . DesiredFee ) {
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybill2ndMore , order . VendorOrderID , expend . ID ) //int(newPrice)-lastFee
} else if result > int ( model . Waybill { } . DesiredFee ) {
// 品牌支出费用
partner . CurStoreAcctManager . InsertBrandBill ( jxcontext . AdminCtx , storeList [ 0 ] . BrandID , int ( model . Waybill { } . DesiredFee ) , model . BrandBillTypeExpend , model . BrandBillFeeTypeDelivery , order . VendorOrderID )
} else {
return nil , fmt . Errorf ( "门店id:[%d],品牌id:[]%d,门店以及门店所属品牌余额不足,无法发单" , order . JxStoreID , storeList [ 0 ] . BrandID )
}
} else { // 京西品牌
if storeAcct . AccountBalance > int ( model . Waybill { } . DesiredFee ) {
// 门店支出费用
partner . CurStoreAcctManager . InsertStoreAcctExpendAndUpdateStoreAcctBalance ( ctx , jxutils . GetSaleStoreIDFromOrder ( order ) , int ( model . Waybill { } . DesiredFee ) , partner . StoreAcctTypeExpendCreateWaybill2ndMore , order . VendorOrderID , expend . ID ) //int(newPrice)-lastFee
} else {
return nil , fmt . Errorf ( "门店id:[%d],品牌id:[]%d,门店以及门店所属品牌余额不足,无法发单" , order . JxStoreID , storeList [ 0 ] . BrandID )
}
}
}
} else if len ( courierVendorIDs ) == 0 {
var maxFee int64
@@ -247,16 +303,18 @@ func (s *DefScheduler) CheckStoreBalance(ctx *jxcontext.Context, order *model.Go
//京西后台则是点一下发3个, len courierVendorIDs 是0
//如果是小程序上点哪个扣哪个平台的钱
//如果是后台,则选最高的那个扣
// storeAcct, err := cms. GetStoreAcctBalance(ctx, jxutils. GetSaleStoreIDFromOrder(order)) // 0.0
storeAcct, err := cms . GetStoreAcctBalance( ctx , jxutils. GetSaleStoreIDFromOrder( order ) ) // 获取门店余额
// 如果门店没钱,查看品牌, 查询门店品牌id
storeList , err := dao . GetStoreList ( dao . GetDB ( ) , [ ] int { o rder. JxStoreID } , nil , nil , nil , nil , "" )
storeList , err := dao . GetStoreList ( dao . GetDB ( ) , [ ] int { jxutils . GetSaleStoreIDFromO rder( order ) } , nil , nil , nil , nil , "" )
if err != nil || len ( storeList ) != 1 {
return "" , fmt . Errorf ( "门店id:[%d],所属品牌不唯一,或其他查询错误" , order . JxStoreID )
}
result , err := dao . GetBrandBalance ( dao . GetDB ( ) , storeList [ 0 ] . BrandID )
result , err := dao . GetBrandBalance ( dao . GetDB ( ) , storeList [ 0 ] . BrandID ) // 品牌余额
if err != nil {
return "" , err
}
deliveryFeeMap , _ := s . QueryOrderWaybillFeeInfoEx ( ctx , order . VendorOrderID , order . VendorID )
if err != nil {
return errCode , fmt . Errorf ( "获取账户余额失败!" )
@@ -286,23 +344,30 @@ func (s *DefScheduler) CheckStoreBalance(ctx *jxcontext.Context, order *model.Go
newPrice = maxFee
}
_ , lastFee , _ := partner . CurStoreAcctManager . GetStoreAcctExpendLastCreateWayBillFee ( order . VendorOrderID )
// 如果门店属于京西菜市,京西果园则只能扣门店的金额
if int ( newPrice ) > lastFee {
if result < int ( newPrice ) - lastFee {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( newPrice -int64 ( lastFee ) ) )
if storeList [ 0 ] . BrandID == JXC4B_RAND_JXGY || storeList [ 0 ] . BrandID == JXC4B_SHOP { // 订单所属门店属于京西菜市,果园,则不扣品牌只扣门店)(1果园,菜市,7京西超市)
if storeAcct . AccountBalance < int ( newPrice ) - lastFee {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( newPrice - int64 ( lastFee ) ) )
}
} else {
if storeAcct . AccountBalance < int ( newPrice ) - lastFee && result < int ( newPrice ) - lastFee {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( newPrice - int64 ( lastFee ) ) )
}
}
}
} else {
//if storeAcct.AccountBalance < partner.MinCreateWaybillBalance {
if result < partner . MinCreateWaybillBalance { // 门店品牌账户余额
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( partner . MinCreateWaybillBalance ) )
}
//}
if len ( courierVendorIDs ) == 1 {
courierVendorID := courierVendorIDs [ 0 ]
if _ , ok := deliveryFeeMap [ courierVendorID ] ; ok {
//if deliveryFeeMap[courierVendorID].DeliveryFee > int64(storeAcct.AccountBalance) {
if deliveryFeeMap [ courierVendorID ] . DeliveryFee > int64 ( result ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( deliveryFeeMap [ courierVendorID ] . DeliveryFe e) )
if storeList [ 0 ] . BrandID == JXC4B_RAND_JXGY || storeList [ 0 ] . BrandID == JXC4B_SHOP { // 订单所属门店属于京西菜市,果园,则不扣品牌只扣门店)(1果园,菜市,7京西超市)
if deliveryFeeMap [ courierVendorID ] . DeliveryFee > int64 ( storeAcct . AccountBalance ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌 账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( partner . MinCreateWaybillBalanc e) )
}
} else {
if deliveryFeeMap [ courierVendorID ] . DeliveryFee > int64 ( result ) && deliveryFeeMap [ courierVendorID ] . DeliveryFee > int64 ( storeAcct . AccountBalance ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌 账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( deliveryFeeMap [ courierVendorID ] . DeliveryFee ) )
}
}
}
} else if len ( courierVendorIDs ) == 0 {
@@ -312,8 +377,14 @@ func (s *DefScheduler) CheckStoreBalance(ctx *jxcontext.Context, order *model.Go
v . DeliveryFee = maxFee
}
}
if maxFee > int64 ( result ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( maxFee ) )
if storeList [ 0 ] . BrandID == JXC4B_RAND_JXGY || storeList [ 0 ] . BrandID == JXC4B_SHOP { // 订单所属门店属于京西菜市,果园,则不扣品牌只扣门店)(1果园,菜市,7京西超市)
if maxFee > int64 ( storeAcct . AccountBalance ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( partner . MinCreateWaybillBalance ) )
}
} else {
if maxFee > int64 ( result ) && maxFee > int64 ( storeAcct . AccountBalance ) {
return model . ErrCodeAccountBalanceNotEnough , fmt . Errorf ( "门店/品牌 账户余额小于[%v]元,不能发配送!" , jxutils . IntPrice2Standard ( maxFee ) )
}
}
}
}