This commit is contained in:
邹宗楠
2024-03-11 10:09:48 +08:00
parent 738f1820d5
commit 73821c40a1
16 changed files with 276 additions and 121 deletions

View File

@@ -55,11 +55,18 @@ func GetOrderIDFromMap(orderMap map[string]interface{}) string {
}
func GetAfsIDFromMap(orderMap map[string]interface{}) string {
if orderID := orderMap["refund_order_id"]; orderID != nil {
if tryOrderID, ok := orderID.(string); ok {
return tryOrderID
}
return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
//if orderID := orderMap["refund_order_id"]; orderID != nil {
// if tryOrderID, ok := orderID.(string); ok {
// return tryOrderID
// }
// return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
//}
//return ""
ReverseOderList := orderMap["reverse_order_list"].([]interface{})
if len(ReverseOderList) != 0 {
afsInfo := ReverseOderList[len(ReverseOderList)-1].(map[string]interface{})
return afsInfo["refund_order_id"].(string)
}
return ""
}

View File

@@ -2,6 +2,7 @@ package ebai
import (
"sync"
"time"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/baseapi/utils"
@@ -158,20 +159,35 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
}
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
riderInfo := &ebaiapi.OrderSelfDeliveryLocationSync{
OrderId: param["order_id"].(string),
Location: &ebaiapi.RiderLocation{
UTC: utils.Int64ToStr(time.Now().Unix()),
Altitude: "0",
Latitude: param["latitude"].(string),
Longitude: param["longitude"].(string),
},
}
return api.EbaiAPI.SelfDeliveryLocationSync(riderInfo)
}
func OrderStatussync(param map[string]interface{}) error {
selfStatus := 0
switch param["logistics_status"].(int) {
case 0:
selfStatus = 2 // 2:配送待分配
case 12:
selfStatus = 3 // 骑士接单
case 0, 5:
selfStatus = ebaiapi.OrderDeliveryStatusWaitRider // 2:配送待分配
case 10:
selfStatus = ebaiapi.OrderDeliveryStatusReceived // 骑士接单
case 15:
selfStatus = 8 // 骑士到店
selfStatus = ebaiapi.OrderDeliveryStatusToStore // 骑士到店
case 20:
selfStatus = 20 // 骑手送出
selfStatus = ebaiapi.OrderDeliveryStatusSend // 骑手送出
case 40:
selfStatus = 30 // 配送完成
selfStatus = ebaiapi.OrderDeliveryStatusSendOver // 配送完成
case 100:
selfStatus = ebaiapi.OrderDeliveryStatusCancel // 取消
default:
selfStatus = 7 // 配送异常
selfStatus = ebaiapi.OrderDeliveryStatusAbnormal // 配送异常
}
param2 := &ebaiapi.PushRiderInfo{
DistributorId: 201,

View File

@@ -132,31 +132,34 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interfac
// 或者换个思路,不考虑变更之前的正向订单,在佣金上入手,退款金额减去佣金减少的部分
orderFinancial, err := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, model.VendorIDEBAI)
if err == nil {
afsOrder.PmRefundMoney = orderFinancial.PmMoney - utils.MustInterface2Int64(orderData["commission"])
afsOrder.PmRefundMoney = orderFinancial.PmMoney - utils.MustInterface2Int64(orderData["commission_amount"])
} else {
// 此处应该报错
err = nil
}
if orderData["refund_detail"] != nil {
refundDetail := orderData["refund_detail"].([]interface{})
for _, refundInfo := range refundDetail {
if orderData["reverse_order_list"] != nil {
refundDetail := orderData["reverse_order_list"].([]interface{})
refundSkuList := refundDetail[len(refundDetail)-1].(map[string]interface{})["sub_reverse_order_list"].([]interface{})
for _, refundInfo := range refundSkuList {
xMap := refundInfo.(map[string]interface{})
orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: model.VendorIDEBAI,
AfsOrderID: afsOrder.AfsOrderID,
VendorOrderID: afsOrder.VendorOrderID,
VendorSubOrderID: afsOrder.VendorOrderID2,
// ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
VendorSkuID: utils.Interface2String(xMap["sku_id"]),
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)),
Name: utils.Interface2String(xMap["name"]),
UserMoney: utils.MustInterface2Int64(xMap["total_refund"]),
PmSubsidyMoney: utils.MustInterface2Int64(xMap["shop_ele_refund"]),
IsAfsOrder: 1,
if xMap["virtual_type"] == ebaiapi.OrderVirtualType {
orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: model.VendorIDEBAI,
AfsOrderID: afsOrder.AfsOrderID,
VendorOrderID: afsOrder.VendorOrderID,
VendorSubOrderID: afsOrder.VendorOrderID2,
// ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(xMap["platform_sku_id"])),
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)),
Name: utils.Interface2String(xMap["sku_name"]),
UserMoney: utils.MustInterface2Int64(xMap["refund_user_amount"]),
IsAfsOrder: 1,
}
orderSkuFinancial.PmSubsidyMoney = utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["platform_discount_amount"], 0) + utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["agent_discount_amount"], 0) + utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["user_discount_amount"], 0)
afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial)
afsOrder.SkuUserMoney += orderSkuFinancial.UserMoney
afsOrder.PmSubsidyMoney += orderSkuFinancial.PmSubsidyMoney
}
afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial)
afsOrder.SkuUserMoney += orderSkuFinancial.UserMoney
afsOrder.PmSubsidyMoney += orderSkuFinancial.PmSubsidyMoney
}
if len(refundDetail) > 0 {
afsOrder.AfsCreatedAt = getTimeFromInterface(refundDetail[0].(map[string]interface{})["apply_time"])

View File

@@ -131,12 +131,12 @@ func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *mode
if err1 == nil {
order = p.Map2Order(result1)
if err2 == nil {
order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["order_detail"])
order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["reverse_order_list"])
giftSkus, discountMoney := getZengSkus(vendorOrderID, result1)
order.DiscountMoney = discountMoney
order.Skus = append(order.Skus, giftSkus...)
order.ActualPayPrice = utils.MustInterface2Int64(result2["user_fee"])
order.TotalShopMoney = utils.MustInterface2Int64(result2["shop_fee"])
order.ActualPayPrice = utils.MustInterface2Int64(result2["remain_user_total_amount"])
order.TotalShopMoney = utils.MustInterface2Int64(result2["merchant_income"])
jxutils.RefreshOrderSkuRelated(order)
} else if err2Ext, ok := err2.(*utils.ErrorWithCode); !ok || err2Ext.IntCode() != ebaiapi.ErrOrderIsNotPartRefund {
err = err2
@@ -170,27 +170,31 @@ func getZengSkus(orderID string, orderMan map[string]interface{}) (skus []*model
}
func (p *PurchaseHandler) partRefund2OrderDetailSkuList(orderID string, orderDetail2 interface{}) (skuList []*model.OrderSku) {
orderDetail := orderDetail2.([]interface{})
for _, product2 := range orderDetail {
refundDetail := orderDetail2.([]interface{})
refundSkuList := refundDetail[len(refundDetail)-1].(map[string]interface{})["sub_reverse_order_list"].([]interface{})
for _, product2 := range refundSkuList {
product := product2.(map[string]interface{})
skuName := product["name"].(string)
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
number := int(utils.MustInterface2Int64(product["number"]))
sku := &model.OrderSku{
VendorOrderID: orderID,
VendorID: model.VendorIDEBAI,
Count: number,
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
VendorSkuID: utils.Interface2String(product[ebaiapi.KeySkuID]),
SkuName: skuName,
// Weight: int(utils.Interface2Int64WithDefault(product["total_weight"], 0)) / number, // 退单这里的total_weight有BUG这里的total_weight还是没有退单时的值
VendorPrice: utils.MustInterface2Int64(product["product_price"]),
if product["virtual_type"] == ebaiapi.OrderVirtualType {
skuName := product["sku_name"].(string)
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
number := int(utils.MustInterface2Int64(product["apply_quantity"]))
sku := &model.OrderSku{
VendorOrderID: orderID,
VendorID: model.VendorIDEBAI,
Count: number,
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
VendorSkuID: utils.Interface2String(product["platform_sku_id"]),
SkuName: skuName,
Weight: int(utils.Interface2Int64WithDefault(product["refund_weight"], 0)) / number, // 退单这里的total_weight有BUG这里的total_weight还是没有退单时的值
VendorPrice: utils.MustInterface2Int64(product["refund_user_amount"]),
}
//sku.SalePrice, _, sku.StoreSubName = getSkuSalePrice(product)
sku.SalePrice = utils.Interface2Int64WithDefault(product["discount_detail"].(map[string]interface{})["total_price"], 0)
if sku.Weight == 0 {
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
}
skuList = append(skuList, sku)
}
sku.SalePrice, _, sku.StoreSubName = getSkuSalePrice(product)
if sku.Weight == 0 {
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
}
skuList = append(skuList, sku)
}
return skuList
}
@@ -440,7 +444,30 @@ func (p *PurchaseHandler) trySyncCancelStatus(vendorOrderID string) (err error)
func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
// todo 饿百转商家自送后,没有确认送达的概念,空操作
if globals.EnableEbaiStoreWrite && order.WaybillVendorID > 100 {
err = api.EbaiAPI.OrderComplete(order.VendorOrderID, userName)
param2 := &ebaiapi.PushRiderInfo{
DistributorId: 201,
OrderId: order.VendorOrderID,
State: 21,
SelfStatus: ebaiapi.OrderDeliveryStatusSendOver,
SelfStatusDesc: "自配送送达",
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
DistributorTypeId: "99999",
DistributorName: "商家自行配送",
},
}
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
for _, v := range bills {
if v.Status == model.WaybillStatusDelivered || v.Status == model.WaybillStatusFailed {
param2.Knight = ebaiapi.Knight{
Id: utils.Str2Int64(order.VendorOrderID),
Name: v.CourierName,
Phone: v.CourierMobile,
}
break
}
}
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
}
return err
}
@@ -448,7 +475,18 @@ func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName
// 完全自送的门店表示开始配送
func (p *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) {
if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.OrderselfDeliveryStateSync(order.VendorOrderID, userName)
param2 := &ebaiapi.PushRiderInfo{
DistributorId: 201,
OrderId: order.VendorOrderID,
State: 21,
SelfStatus: 1,
SelfStatusDesc: "生成自配送运单",
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
DistributorTypeId: "99999",
DistributorName: "商家自行配送",
},
}
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
}
if err == nil {
// 饿百不会发送配送中,模拟发送
@@ -460,7 +498,30 @@ func (p *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
// 完全自送的门店表示配送完成
func (p *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.OrderComplete(order.VendorOrderID, userName)
param2 := &ebaiapi.PushRiderInfo{
DistributorId: 201,
OrderId: order.VendorOrderID,
State: 21,
SelfStatus: ebaiapi.OrderDeliveryStatusSendOver,
SelfStatusDesc: "自配送送达",
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
DistributorTypeId: "99999",
DistributorName: "商家自行配送",
},
}
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
for _, v := range bills {
if v.Status == model.WaybillStatusDelivered || v.Status == model.WaybillStatusFailed {
param2.Knight = ebaiapi.Knight{
Id: utils.Str2Int64(order.VendorOrderID),
Name: v.CourierName,
Phone: v.CourierMobile,
}
break
}
}
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
}
return err
}

View File

@@ -169,9 +169,9 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
var db = dao.GetDB()
if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess {
orderData, err2 := api.EbaiAPI.OrderPartRefundGet(orderStatus.RefVendorOrderID)
if err2 == nil && utils.MustInterface2Int64(orderData["shop_fee"]) != model.NO {
if err2 == nil && utils.MustInterface2Int64(orderData["merchant_income"]) != model.NO {
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["shop_fee"])
goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["merchant_income"])
// 门店结算小于等于50为扣点
afsSkuList, _ := dao.GetOrderRefundSkuList(db, []string{goodsOrder.VendorOrderID})
for _, v := range goodsOrder.Skus {