Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop

This commit is contained in:
richboo111
2024-01-23 15:40:31 +08:00
14 changed files with 75 additions and 31 deletions

View File

@@ -382,9 +382,9 @@ func (c *BaseScheduler) CheckStoreBalanceWithTip(ctx *jxcontext.Context, order *
if roundTipFee != tipFee { if roundTipFee != tipFee {
return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("小费必须是1元的整数倍") return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("小费必须是1元的整数倍")
} }
if order.WaybillTipMoney >= tipFee { //if order.WaybillTipMoney >= tipFee {
return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("本次小费金额不能小于已经支付的小费") // return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("本次小费金额不能小于已经支付的小费")
} //}
if order.CreateDeliveryType == model.YES { if order.CreateDeliveryType == model.YES {
//加小费只判断余额 //加小费只判断余额
storeAcct, err := cms.GetStoreAcctBalance(ctx, jxutils.GetSaleStoreIDFromOrder(order)) storeAcct, err := cms.GetStoreAcctBalance(ctx, jxutils.GetSaleStoreIDFromOrder(order))

View File

@@ -950,7 +950,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
if err == nil && err2 == nil { if err == nil && err2 == nil {
// 1.检查门店三方配送配置,达达>蜂鸟>美团>顺丰>uu // 1.检查门店三方配送配置,达达>蜂鸟>美团>顺丰>uu
// excludeVendorIDs 包括上面已经发送的平台id // excludeVendorIDs 包括上面已经发送的平台id
storeCourierList, err := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated}) storeCourierList, _ := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated})
excludeVendorIDsMap := make(map[int]int, 0) // 被排除的配送 excludeVendorIDsMap := make(map[int]int, 0) // 被排除的配送
for _, v := range excludeVendorIDs { for _, v := range excludeVendorIDs {
excludeVendorIDsMap[v] = model.YES excludeVendorIDsMap[v] = model.YES
@@ -989,9 +989,17 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
} }
if vendorID != model.NO { if vendorID != model.NO {
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil { if bills, err := s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil {
savedOrderInfo.retryCount++ for _, v := range bills {
partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("订单自动创建三方运单成功:%s", jxutils.GetVendorName(vendorID))) if v.DesiredFee >= model.AlarmFee {
s.CancelWaybill(v, 0, partner.CancelWaybillReasonStrDeliveryFeeUp)
partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("发起自动创建三方运单,目标创建运单平台[%s],创建失败:%s", jxutils.GetVendorName(vendorID), partner.CancelWaybillReasonStrDeliveryFeeUp))
} else {
savedOrderInfo.retryCount++
partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("订单自动创建三方运单成功:%s", jxutils.GetVendorName(vendorID)))
}
}
} else { } else {
partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("发起自动创建三方运单,目标创建运单平台[%s],创建失败:%v", jxutils.GetVendorName(vendorID), err)) partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("发起自动创建三方运单,目标创建运单平台[%s],创建失败:%v", jxutils.GetVendorName(vendorID), err))
} }

View File

@@ -287,6 +287,16 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor
return nil, errCode, err return nil, errCode, err
} }
} }
excludeCourierVendorIDs := make([]int, 0, 0)
allDelivery := map[int]int{model.VendorIDFengNiao: 1, model.VendorIDDada: 1, model.VendorIDMTPS: 1, model.VendorIDUUPT: 1, model.VendorIDSFPS: 1}
for _, v := range courierVendorIDs {
if allDelivery[v] == model.YES {
delete(allDelivery, v)
}
}
for k, _ := range allDelivery {
excludeCourierVendorIDs = append(excludeCourierVendorIDs, k)
}
billFunc := func() { billFunc := func() {
bills, err = func() (bills []*model.Waybill, err error) { bills, err = func() (bills []*model.Waybill, err error) {
@@ -312,7 +322,7 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor
order.DeliveryFlag = 0 order.DeliveryFlag = 0
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
// 创建订单 // 创建订单
if bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, courierVendorIDs, nil, forceCreate, maxDeliveryFee); err == nil && len(bills) > 0 { if bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, courierVendorIDs, excludeCourierVendorIDs, forceCreate, maxDeliveryFee); err == nil && len(bills) > 0 {
partner.CurOrderManager.OnOrderMsg(order, "手动创建运单成功", fmt.Sprintf("%s创建%s平台运单,强发:%t,最高限价:%d", ctx.GetUserName(), model.VendorChineseNames[bills[0].WaybillVendorID], forceCreate, maxDeliveryFee)) partner.CurOrderManager.OnOrderMsg(order, "手动创建运单成功", fmt.Sprintf("%s创建%s平台运单,强发:%t,最高限价:%d", ctx.GetUserName(), model.VendorChineseNames[bills[0].WaybillVendorID], forceCreate, maxDeliveryFee))
} }
} }

View File

@@ -794,12 +794,14 @@ func CreateActForMtByOrder(ctx *jxcontext.Context, act *model.Act, vendorIDs []i
ActPrice: jxutils.IntPrice2Standard(int64(v.JdsPrice)), ActPrice: jxutils.IntPrice2Standard(int64(v.JdsPrice)),
}) })
} }
sort.Slice(actData, func(i, j int) bool { //sort.Slice(actData, func(i, j int) bool {
return actData[i].ActPrice < actData[j].ActPrice // return actData[i].ActPrice < actData[j].ActPrice
}) //})
//for i := 1; i <= len(actData); i++ { //for i := 1; i <= len(actData); i++ {
// actData[i-1].Sequence = i // actData[i-1].Sequence = i
//} //}
actIdResult := make(map[string]int64, 0)
actResult, faileInfoList, _ := api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData) actResult, faileInfoList, _ := api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData)
for _, v := range actResult { for _, v := range actResult {
var ( var (
@@ -813,7 +815,27 @@ func CreateActForMtByOrder(ctx *jxcontext.Context, act *model.Act, vendorIDs []i
actStoreSkuMapUpdate.VendorActID = utils.Int64ToStr(v.ActID) actStoreSkuMapUpdate.VendorActID = utils.Int64ToStr(v.ActID)
dao.UpdateEntity(db, actStoreSkuMapUpdate, "VendorActID") dao.UpdateEntity(db, actStoreSkuMapUpdate, "VendorActID")
} }
actIdResult[v.AppFoodCode] = v.ActID
} }
// RetailDiscountBatchSave2 创建时无法使用排序,只能更时排序生效所以这样写,美团恢复可以删除
actData2 := make([]*mtwmapi.RetailDiscountActData, 0, 0)
if len(actIdResult) != model.NO {
for _, v := range actData {
if actIdResult[v.AppFoodCode] != model.NO {
v.ItemID = actIdResult[v.AppFoodCode]
}
actData2 = append(actData2, v)
}
sort.Slice(actData2, func(i, j int) bool {
return actData2[i].ActPrice < actData2[j].ActPrice
})
for i := 1; i <= len(actData2); i++ {
actData2[i-1].Sequence = i
}
api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData2)
}
for _, v := range faileInfoList { for _, v := range faileInfoList {
err2 += fmt.Sprintf("创建失败门店ID[%v]商品ID[%v],原因:[%v]", storeID, v.AppFoodCode, v.ErrorMsg) err2 += fmt.Sprintf("创建失败门店ID[%v]商品ID[%v],原因:[%v]", storeID, v.AppFoodCode, v.ErrorMsg)
} }

View File

@@ -137,7 +137,7 @@ type GoodsOrder struct {
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间 ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请不为null表示用户正在取消申请 CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请不为null表示用户正在取消申请
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送 DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单1为门店发单 CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` // 默认0系统发单1为门店发单
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` // 运单id VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` // 运单id
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排 WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
AdjustCount int8 `json:"adjustCount"` // 调整单(次数) AdjustCount int8 `json:"adjustCount"` // 调整单(次数)

View File

@@ -394,6 +394,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
return nil, err return nil, err
} }
} }
if result == nil { if result == nil {
return nil, errors.New("达达配送,平台调用错误,无订单数据返回") return nil, errors.New("达达配送,平台调用错误,无订单数据返回")
} }

View File

@@ -21,6 +21,9 @@ const (
) )
func CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) { func CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) {
if maxDeliveryFee != model.NO {
return nil
}
if maxDeliveryFee <= model.DefMaxDeliveryFee { if maxDeliveryFee <= model.DefMaxDeliveryFee {
maxDeliveryFee = model.DefMaxDeliveryFee maxDeliveryFee = model.DefMaxDeliveryFee
} }

View File

@@ -319,7 +319,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
return deliveryFeeInfo, err return deliveryFeeInfo, err
} }
// CreateWaybill美团配送 // CreateWaybill (美团配送)
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) { func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
db := dao.GetDB() db := dao.GetDB()
// 检查配送平台是否被禁用 // 检查配送平台是否被禁用
@@ -331,17 +331,6 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment) return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
} }
globals.SugarLogger.Debugf("===================maxDeliveryFee := %d", maxDeliveryFee)
if maxDeliveryFee == model.NO {
fee, err := c.GetWaybillFee(order)
if err != nil {
return nil, err
}
if fee.DeliveryFee >= model.DefMaxDeliveryFee {
return nil, fmt.Errorf("美团配送超最高限价, 所需运费:%s, 最高限价:%s", jxutils.IntPrice2StandardCurrencyString(fee.DeliveryFee), jxutils.IntPrice2StandardCurrencyString(model.DefMaxDeliveryFee))
}
}
// 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出 // 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出
lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType) lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
billParams := &mtpsapi.CreateOrderByShopParam{ billParams := &mtpsapi.CreateOrderByShopParam{

View File

@@ -75,6 +75,7 @@ var (
CancelWaybillReasonStrActive = "操作由人员主动发起" CancelWaybillReasonStrActive = "操作由人员主动发起"
CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内" CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内"
CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力" CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力"
CancelWaybillReasonStrDeliveryFeeUp = "配送距离太远,配送费超过15元"
) )
var ( var (

View File

@@ -796,7 +796,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G
} }
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
return fmt.Errorf("饿了么暂无投诉骑手API") return fmt.Errorf("饿了么暂无投诉骑手,请联系饿了么客服")
} }
// 转自配送时取消非专送混合送门店取消理由 // 转自配送时取消非专送混合送门店取消理由

View File

@@ -311,7 +311,7 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, vendorOrgCode strin
} }
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
return err return fmt.Errorf("暂无投诉渠道,请致电京东客服")
} }
// 转自配送时取消非专送混合送门店取消理由 // 转自配送时取消非专送混合送门店取消理由

View File

@@ -537,7 +537,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
// 美团专送、快送、混合送、美团企客 // 美团专送、快送、混合送、美团企客
logisticsCode := utils.Interface2String(orderDetail["logistics_code"]) logisticsCode := utils.Interface2String(orderDetail["logistics_code"])
isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe || logisticsCode == mtwmapi.PeiSongTypeMixedExpressQiKe
//1001-专送加盟1002-专送(自建) //1001-专送加盟1002-专送(自建)
//2002-快送3001-混合送(专送+快送) //2002-快送3001-混合送(专送+快送)
//4015-企客远距离配送 //4015-企客远距离配送
@@ -554,6 +554,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
//PeiSongTypeKuaiDi = "2002" // 快送 //PeiSongTypeKuaiDi = "2002" // 快送
//PeiSongTypeWholeCity = "2010" // 全城送 //PeiSongTypeWholeCity = "2010" // 全城送
//PeiSongTypeMixed = "3001" // 混合送(即美团专送+快送) //PeiSongTypeMixed = "3001" // 混合送(即美团专送+快送)
//PeiSongTypeMixedExpressQiKe = "30012002" // 混合送(混合快送)
if isSelfDelivery { if isSelfDelivery {
err = api.PreparationMealComplete(utils.Str2Int64(order.VendorOrderID)) err = api.PreparationMealComplete(utils.Str2Int64(order.VendorOrderID))
} }

View File

@@ -990,7 +990,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G
} }
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
return fmt.Errorf("抖店暂不提供投诉骑手API") return fmt.Errorf("抖店暂不提供投诉骑手API,联系客服")
} }
// GetCancelDeliveryReason 转自配送时取消非专送混合送门店取消理由 // GetCancelDeliveryReason 转自配送时取消非专送混合送门店取消理由

View File

@@ -224,10 +224,19 @@ func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() {
return return
} }
default: default:
//callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder)
//c.Data["json"] = callbackResponse
order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), model.VendorIDTaoVegetable) order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), model.VendorIDTaoVegetable)
if err != nil || order.Status >= model.OrderStatusDelivering { if err != nil {
c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(nil)
c.ServeJSON()
return
}
if order.Status == model.OrderStatusCanceled {
c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(nil)
c.ServeJSON()
return
}
if order.Status >= model.OrderStatusDelivering {
c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(fmt.Errorf("不支持售中取消")) c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(fmt.Errorf("不支持售中取消"))
c.ServeJSON() c.ServeJSON()
} else { } else {