This commit is contained in:
suyl
2021-08-31 11:34:41 +08:00
parent 2e2a636228
commit c7b677fd07
5 changed files with 57 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
package basesch
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
"git.rosy.net.cn/jx-callback/business/jxutils"
@@ -164,16 +165,21 @@ func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOr
// return nil, fmt.Errorf("转商家自送的订单只允许有一个有效运单,当前已经有%s运单", jxutils.GetVendorName(waybillList[0].WaybillVendorID))
// }
// }
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, order.VendorOrgCode)
handlerInfo := partner.GetDeliveryPlatformFromVendorID(platformVendorID)
if handlerInfo != nil && handlerInfo.Use4CreateWaybill {
if c.IsReallyCallPlatformAPI {
bill, err = handlerInfo.Handler.CreateWaybill(order, maxDeliveryFee)
if err != nil {
globals.SugarLogger.Infof("CreateWaybill failed orderID:%s vendorID:%d with error:%v", order.VendorOrderID, platformVendorID, err)
} else {
order.DeliveryFlag |= model.WaybillVendorID2Mask(platformVendorID)
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
if model.DeliveryBrandMarkMap[platformVendorID]&storeDetail.BrandIsOpen != 0 {
if c.IsReallyCallPlatformAPI {
bill, err = handlerInfo.Handler.CreateWaybill(order, maxDeliveryFee)
if err != nil {
globals.SugarLogger.Infof("CreateWaybill failed orderID:%s vendorID:%d with error:%v", order.VendorOrderID, platformVendorID, err)
} else {
order.DeliveryFlag |= model.WaybillVendorID2Mask(platformVendorID)
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
}
}
} else {
err = fmt.Errorf("CreateWaybill failed brand is close orderID: %s, isOpen: %d", order.VendorOrderID, storeDetail.BrandIsOpen)
}
} else {
err = scheduler.ErrDeliverProviderWrong

View File

@@ -598,10 +598,12 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
// smsmsg.NotifyJxOrder(order, bill)
//}
//门店发单的门店,需要根据实际运费更新账户(多退少补)
//扣除品牌费用
if storeDetail, err2 := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, ""); err2 == nil {
if storeDetail.CreateDeliveryType == model.YES {
s.updateStoreAccount(order, bill)
}
s.updateBrandAccount(storeDetail, bill)
}
//针对快送的订单(订单接单后会立马召唤骑手,不会到自动拣货完成)
//如果骑手已接单,没有通知过的门店,需要发送通知
@@ -886,9 +888,10 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
//1表示为门店发单需要验证门店账户余额情况
_, err = s.CheckStoreBalance(jxcontext.AdminCtx, order, waybillVendorIDs)
//TODO 2021-02-19 增加品牌配送开关
if storeDetail.BrandIsOpen == model.YES {
err = fmt.Errorf("此品牌已关闭配送! [%v]", storeDetail.BrandName)
}
//TODO 2021-08-31 修改为每个平台的开关
//if storeDetail.BrandIsOpen == model.YES {
// err = fmt.Errorf("此品牌已关闭配送! [%v]", storeDetail.BrandName)
//}
if err == nil {
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil {
savedOrderInfo.retryCount++
@@ -1365,6 +1368,13 @@ func (s *DefScheduler) updateStoreAccount(order *model.GoodsOrder, bill *model.W
}
}
func (s *DefScheduler) updateBrandAccount(store *dao.StoreDetail, bill *model.Waybill) {
realDesiredFee := bill.DesiredFee
if balance, err := partner.CurStoreAcctManager.GetBrandBalance(store.BrandID); err == nil {
}
}
func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (isBillExist bool) {
if savedOrderInfo != nil {
if savedBill := savedOrderInfo.waybills[bill.WaybillVendorID]; savedBill != nil {

View File

@@ -179,3 +179,26 @@ func (s *StoreAcctManager) CheckStoreAcctExpendExist(vendorOrderID string) (isEq
func (s *StoreAcctManager) GetStoreAcctExpendLastCreateWayBillFee(vendorOrderID string) (expend *dao.GetStoreAcctExpendLastCreateWayBillFeeResult, lastFee int, err error) {
return dao.GetStoreAcctExpendLastCreateWayBillFee(dao.GetDB(), vendorOrderID)
}
func (s *StoreAcctManager) GetBrandBalance(brandID int) (balance int, err error) {
return dao.GetBrandBalance(dao.GetDB(), brandID)
}
func (s *StoreAcctManager) InsertBrandBill(ctx *jxcontext.Context, brandID, price, billType, feeType int, vendorOrderID string, orderID string) (err error) {
utils.CallFuncAsync(func() {
var (
db = dao.GetDB()
)
brandBill := &model.BrandBill{
BrandID: brandID,
Price: price,
BillType: billType,
FeeType: feeType,
VendorOrderID: vendorOrderID,
OrderID: orderID,
}
dao.WrapAddIDCULEntity(brandBill, ctx.GetUserName())
dao.CreateEntity(db, brandBill)
})
return err
}

View File

@@ -289,6 +289,11 @@ var (
AutoReplyGoodComment: "禁止差评自动回复",
AutoReplyDisabled: "禁止自动回复",
}
DeliveryBrandMarkMap = map[int]int{
VendorIDMTPS: BrandOpenMTPS,
VendorIDDada: BrandOpenDaDa,
VendorIDFengNiao: BrandOpenFN,
}
)
type Store struct {

View File

@@ -42,4 +42,7 @@ type IStoreAcctManager interface {
InsertStoreAcctIncomeAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string, expendID int) (err error)
CheckStoreAcctExpendExist(vendorOrderID string) (isEqual, isZero bool, err error)
GetStoreAcctExpendLastCreateWayBillFee(vendorOrderID string) (expend *dao.GetStoreAcctExpendLastCreateWayBillFeeResult, lastFee int, err error)
//品牌账户
GetBrandBalance(brandID int) (balance int, err error)
}