Merge remote-tracking branch 'origin/mark' into don
This commit is contained in:
@@ -521,6 +521,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
|
|||||||
"waybillFinishedAt",
|
"waybillFinishedAt",
|
||||||
"status2",
|
"status2",
|
||||||
"skuInfo",
|
"skuInfo",
|
||||||
|
"waybillTipMoney",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
excelBin = excel.Obj2Excel([]*excel.Obj2ExcelSheetConfig{excelConf})
|
excelBin = excel.Obj2Excel([]*excel.Obj2ExcelSheetConfig{excelConf})
|
||||||
|
|||||||
@@ -46,8 +46,9 @@ const (
|
|||||||
time2Schedule3rdCarrierKey = "waitminute4mt"
|
time2Schedule3rdCarrierKey = "waitminute4mt"
|
||||||
dingShiDaAheadTime = 30 * time.Minute // 定时达订单开始召唤配送的提前时间
|
dingShiDaAheadTime = 30 * time.Minute // 定时达订单开始召唤配送的提前时间
|
||||||
|
|
||||||
minAddWaybillTipMinute = 15 // 最少开始加小费分钟(距离拣货完成)
|
minAddWaybillTipMinute = 20 // 最少开始加小费分钟(距离拣货完成)
|
||||||
addWaybillTipGap = 10 // 加一元小费间隔的分钟数
|
addWaybillTipGap = 15 // 加一元小费间隔的分钟数
|
||||||
|
baseWaybillFee = 600 // 基本运费
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -1017,7 +1018,7 @@ func (s *DefScheduler) getWaybillTip(savedOrderInfo *WatchOrderInfo) (tipFee int
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) getMaxDeliveryFee(savedOrderInfo *WatchOrderInfo) (maxDeliveryFee int64) {
|
func (s *DefScheduler) getMaxDeliveryFee(savedOrderInfo *WatchOrderInfo) (maxDeliveryFee int64) {
|
||||||
maxDeliveryFee = 400 + savedOrderInfo.order.DistanceFreightMoney + s.getWaybillTip(savedOrderInfo)
|
maxDeliveryFee = baseWaybillFee + savedOrderInfo.order.DistanceFreightMoney + s.getWaybillTip(savedOrderInfo)
|
||||||
return maxDeliveryFee
|
return maxDeliveryFee
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1032,14 +1033,25 @@ func (s *DefScheduler) handleWaybillTip(savedOrderInfo *WatchOrderInfo) {
|
|||||||
if !utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) &&
|
if !utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) &&
|
||||||
!savedOrderInfo.isAddWaybillTipDisabled {
|
!savedOrderInfo.isAddWaybillTipDisabled {
|
||||||
if tipFee := s.getWaybillTip(savedOrderInfo); tipFee > 0 {
|
if tipFee := s.getWaybillTip(savedOrderInfo); tipFee > 0 {
|
||||||
if handler, ok := partner.GetPurchasePlatformFromVendorID(order.VendorID).(partner.IUpdateWaybillTip); ok && handler != nil {
|
if handler, ok := partner.GetPurchasePlatformFromVendorID(order.VendorID).(partner.IAddWaybillTip); ok && handler != nil {
|
||||||
err := handler.UpdateWaybillTip(jxcontext.AdminCtx, order, tipFee)
|
var remark string
|
||||||
vendorStatus := fmt.Sprintf("添加小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
|
vendorStatus := fmt.Sprintf("设置小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
|
||||||
remark := ""
|
if curTipFee, err := handler.GetWaybillTip(jxcontext.AdminCtx, order); err == nil {
|
||||||
if err == nil {
|
tipFee2Add := tipFee - curTipFee
|
||||||
vendorStatus += "成功"
|
vendorStatus += fmt.Sprintf(", 本次添加:%s", jxutils.IntPrice2StandardCurrencyString(tipFee2Add))
|
||||||
order.WaybillTipMoney = tipFee
|
if tipFee2Add > 0 {
|
||||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
|
err := handler.AddWaybillTip(jxcontext.AdminCtx, order, tipFee2Add)
|
||||||
|
if err == nil {
|
||||||
|
vendorStatus += "成功"
|
||||||
|
order.WaybillTipMoney += tipFee2Add
|
||||||
|
partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
|
||||||
|
} else {
|
||||||
|
vendorStatus += "失败"
|
||||||
|
remark = fmt.Sprint(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vendorStatus += "空操作"
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
vendorStatus += "失败"
|
vendorStatus += "失败"
|
||||||
remark = fmt.Sprint(err)
|
remark = fmt.Sprint(err)
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestStartOrEndOpStore(t *testing.T) {
|
func TestStartOrEndOpStore(t *testing.T) {
|
||||||
StartOrEndOpStore(true, 0, 0)
|
StartOrEndOpStore(true, 0, 0, false, true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ func TestGetActStoreSku(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
storeSkuMap := NewActStoreSkuMap(actStoreSkuList, false)
|
storeSkuMap := NewActStoreSkuMap(actStoreSkuList, false)
|
||||||
|
t.Log(storeSkuMap.GetActStoreSku(1, 2, 3))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,19 +118,18 @@ func (task *ParallelTask) Run() {
|
|||||||
})
|
})
|
||||||
// globals.SugarLogger.Debugf("ParallelTask.Run %s, after call worker result:%v, err:%v", task.Name, result, err)
|
// globals.SugarLogger.Debugf("ParallelTask.Run %s, after call worker result:%v, err:%v", task.Name, result, err)
|
||||||
task.finishedOneJob(len(job), err)
|
task.finishedOneJob(len(job), err)
|
||||||
if err == nil {
|
if err != nil { // 出错
|
||||||
if result != nil {
|
// globals.SugarLogger.Infof("ParallelTask.Run %s, subtask(job:%s, params:%s) result:%v, failed with error:%v", task.Name, utils.Format4Output(job, true), utils.Format4Output(task.params, true), result, err)
|
||||||
retVal = append(retVal, utils.Interface2Slice(result)...)
|
if task.IsContinueWhenError {
|
||||||
}
|
task.locker.Lock()
|
||||||
} else {
|
task.batchErrList = append(task.batchErrList, err)
|
||||||
globals.SugarLogger.Infof("ParallelTask.Run %s, subtask(job:%s, params:%s) result:%v, failed with error:%v", task.Name, utils.Format4Output(job, true), utils.Format4Output(task.params, true), result, err)
|
task.locker.Unlock()
|
||||||
task.locker.Lock()
|
} else {
|
||||||
task.batchErrList = append(task.batchErrList, err)
|
|
||||||
task.locker.Unlock()
|
|
||||||
if !task.IsContinueWhenError { // 出错
|
|
||||||
chanRetVal = err
|
chanRetVal = err
|
||||||
goto end
|
goto end
|
||||||
}
|
}
|
||||||
|
} else if result != nil {
|
||||||
|
retVal = append(retVal, utils.Interface2Slice(result)...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,6 +164,7 @@ func (task *ParallelTask) Run() {
|
|||||||
taskResult = append(taskResult, resultList...)
|
taskResult = append(taskResult, resultList...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task.locker.Lock()
|
task.locker.Lock()
|
||||||
task.Result = taskResult
|
task.Result = taskResult
|
||||||
task.mainErr = taskErr
|
task.mainErr = taskErr
|
||||||
@@ -172,7 +172,6 @@ func (task *ParallelTask) Run() {
|
|||||||
|
|
||||||
close(task.subFinishChan)
|
close(task.subFinishChan)
|
||||||
task.jobList = nil // 如果不释放,任务被管理的话,会导致内存不能释放
|
task.jobList = nil // 如果不释放,任务被管理的话,会导致内存不能释放
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,12 +41,14 @@ func (task *SeqTask) Run() {
|
|||||||
return task.worker(task, i, task.params...)
|
return task.worker(task, i, task.params...)
|
||||||
})
|
})
|
||||||
task.finishedOneJob(1, err)
|
task.finishedOneJob(1, err)
|
||||||
if taskErr = err; taskErr != nil {
|
if err != nil {
|
||||||
task.locker.Lock()
|
// globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)
|
||||||
task.batchErrList = append(task.batchErrList, err)
|
if task.IsContinueWhenError {
|
||||||
task.locker.Unlock()
|
task.locker.Lock()
|
||||||
globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)
|
task.batchErrList = append(task.batchErrList, err)
|
||||||
if !task.IsContinueWhenError {
|
task.locker.Unlock()
|
||||||
|
} else {
|
||||||
|
taskErr = err
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
} else if result != nil {
|
} else if result != nil {
|
||||||
@@ -54,6 +56,7 @@ func (task *SeqTask) Run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EndFor:
|
EndFor:
|
||||||
|
|
||||||
task.locker.Lock()
|
task.locker.Lock()
|
||||||
task.Result = taskResult
|
task.Result = taskResult
|
||||||
task.mainErr = taskErr
|
task.mainErr = taskErr
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ func (t *BaseTask) GetLeafResult() (finishedItemCount, failedItemCount int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *BaseTask) Error() (errMsg string) {
|
func (t *BaseTask) Error() (errMsg string) {
|
||||||
if t.mainErr == nil && len(t.batchErrList) == 0 {
|
if t.GetErr() == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
t.locker.RLock()
|
t.locker.RLock()
|
||||||
@@ -397,7 +397,7 @@ func (t *BaseTask) run(taskHandler func()) {
|
|||||||
task.locker.Unlock()
|
task.locker.Unlock()
|
||||||
task.Error()
|
task.Error()
|
||||||
|
|
||||||
globals.SugarLogger.Debugf("Task:%s, result:%v, err:%v", task.Name, task.Result, task.mainErr)
|
globals.SugarLogger.Debugf("Task:%s, mainErr:%v, batchErrList:%v", task.Name, task.mainErr, task.batchErrList)
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-t.quitChan:
|
case <-t.quitChan:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ type GoodsOrder struct {
|
|||||||
TotalShopMoney int64 `json:"totalShopMoney"` // 应结金额-第三方平台结算给京西的金额(包括了所有的补贴,扣除)
|
TotalShopMoney int64 `json:"totalShopMoney"` // 应结金额-第三方平台结算给京西的金额(包括了所有的补贴,扣除)
|
||||||
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
||||||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||||||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 平台配送小费
|
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||||||
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
|
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
|
||||||
Weight int `json:"weight"` // 单位为克
|
Weight int `json:"weight"` // 单位为克
|
||||||
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ type IPurchasePlatformOrderHandler interface {
|
|||||||
ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error)
|
ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type IUpdateWaybillTip interface {
|
type IAddWaybillTip interface {
|
||||||
// 添加快递小费,这个不是递增的,最后一次操作会覆盖之前的设置,但只能增加,不能减少,且tipFee只能为100的倍数
|
GetWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder) (tipFee int64, err error)
|
||||||
UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error)
|
AddWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee2Add int64) (err error)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -373,7 +373,6 @@ func genSkuParamsFromStoreSkuInfo(pricePercentage int, storeSku *tStoreSkuFullIn
|
|||||||
}
|
}
|
||||||
if storeSku.EbaiSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 {
|
if storeSku.EbaiSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 {
|
||||||
params["sale_price"] = price
|
params["sale_price"] = price
|
||||||
params["market_price"] = price
|
|
||||||
}
|
}
|
||||||
if storeSku.EbaiSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 {
|
if storeSku.EbaiSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 {
|
||||||
params["status"] = jxSkuStatus2Ebai(jxutils.MergeSkuStatus(storeSku.SkuStatus, storeSku.Status))
|
params["status"] = jxSkuStatus2Ebai(jxutils.MergeSkuStatus(storeSku.SkuStatus, storeSku.Status))
|
||||||
|
|||||||
@@ -244,7 +244,6 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo) (params map[s
|
|||||||
}
|
}
|
||||||
if storeSku.StoreSkuSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 {
|
if storeSku.StoreSkuSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 {
|
||||||
params["sale_price"] = storeSku.VendorPrice
|
params["sale_price"] = storeSku.VendorPrice
|
||||||
params["market_price"] = storeSku.VendorPrice
|
|
||||||
}
|
}
|
||||||
if storeSku.StoreSkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 {
|
if storeSku.StoreSkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 {
|
||||||
params["status"] = jxSkuStatus2Ebai(storeSku.MergedStatus)
|
params["status"] = jxSkuStatus2Ebai(storeSku.MergedStatus)
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ func (c *PurchaseHandler) updateOrderFinancialInfo(orderID string) (err error) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
if orderSettlement != nil {
|
if orderSettlement != nil {
|
||||||
updateOrderBySettleMent(order, orderSettlement)
|
updateOrderBySettleMent(order, orderSettlement)
|
||||||
err = partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney", "TotalShopMoney", "PmSubsidyMoney"})
|
err = partner.CurOrderManager.UpdateOrderFields(order, []string{ /*"WaybillTipMoney", */ "TotalShopMoney", "PmSubsidyMoney"})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@@ -95,7 +95,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
|||||||
|
|
||||||
func updateOrderBySettleMent(order *model.GoodsOrder, orderSettlement *jdapi.OrderSettlementInfo) {
|
func updateOrderBySettleMent(order *model.GoodsOrder, orderSettlement *jdapi.OrderSettlementInfo) {
|
||||||
if orderSettlement != nil {
|
if orderSettlement != nil {
|
||||||
order.WaybillTipMoney = orderSettlement.VenderPaidTips
|
// order.WaybillTipMoney = orderSettlement.VenderPaidTips
|
||||||
order.TotalShopMoney = orderSettlement.SettlementAmount
|
order.TotalShopMoney = orderSettlement.SettlementAmount
|
||||||
order.PmSubsidyMoney = orderSettlement.PlatOrderGoodsDiscountMoney + orderSettlement.PlatSkuGoodsDiscountMoney
|
order.PmSubsidyMoney = orderSettlement.PlatOrderGoodsDiscountMoney + orderSettlement.PlatSkuGoodsDiscountMoney
|
||||||
}
|
}
|
||||||
@@ -456,3 +456,18 @@ func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model.
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder) (tipFee int64, err error) {
|
||||||
|
orderInfo, err := api.JdAPI.QuerySingleOrder2(order.VendorOrderID)
|
||||||
|
if err == nil {
|
||||||
|
tipFee = int64(orderInfo.Tips)
|
||||||
|
}
|
||||||
|
return tipFee, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) AddWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee2Add int64) (err error) {
|
||||||
|
if globals.EnableJdStoreWrite {
|
||||||
|
err = api.JdAPI.OrderAddTips(order.VendorOrderID, int(tipFee2Add), ctx.GetUserName())
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
33
business/partner/purchase/jd/store_sku2_test.go
Normal file
33
business/partner/purchase/jd/store_sku2_test.go
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package jd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner/putils"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetStoreSkusBareInfo(t *testing.T) {
|
||||||
|
// list := []*partner.StoreSkuInfo{
|
||||||
|
// &partner.StoreSkuInfo{
|
||||||
|
// SkuID: 5246,
|
||||||
|
// VendorSkuID: "2023747677",
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// for i := 0; i < 3000; i++ {
|
||||||
|
// list = append(list, list[0])
|
||||||
|
// }
|
||||||
|
skuNameList, err := curPurchaseHandler.GetSkus(jxcontext.AdminCtx, 0, "", "")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
list := putils.StoreSkuFullList2Bare(skuNameList)
|
||||||
|
storeSkuList, err := curPurchaseHandler.GetStoreSkusBareInfo(jxcontext.AdminCtx, nil, 2, "11053496", list)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(storeSkuList, false))
|
||||||
|
t.Log(len(storeSkuList))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user