Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -24,11 +24,11 @@ var (
|
|||||||
tao_vegetable.OrderStatusApplyAfs: model.AfsOrderStatusWait4Approve,
|
tao_vegetable.OrderStatusApplyAfs: model.AfsOrderStatusWait4Approve,
|
||||||
tao_vegetable.OrderStatusCancelAfs: model.AfsOrderStatusCancelAfs,
|
tao_vegetable.OrderStatusCancelAfs: model.AfsOrderStatusCancelAfs,
|
||||||
tao_vegetable.OrderStatusRefundSuccess: model.AfsOrderStatusFinished,
|
tao_vegetable.OrderStatusRefundSuccess: model.AfsOrderStatusFinished,
|
||||||
|
tao_vegetable.OrderStatusOnSaleCancel: model.AfsOrderStatusOnSaleAfs,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
|
func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
|
||||||
if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess {
|
|
||||||
switch orderStatus {
|
switch orderStatus {
|
||||||
case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs:
|
case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs:
|
||||||
order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable)
|
order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable)
|
||||||
@@ -40,6 +40,10 @@ func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
|
|||||||
if afsOrder != nil {
|
if afsOrder != nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
case tao_vegetable.OrderStatusOnSaleCancel:
|
||||||
|
order, _ := partner.CurOrderManager.LoadOrder(orderId, model.VendorIDTaoVegetable)
|
||||||
|
if order != nil {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -69,12 +73,39 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if needCallNew && orderStatus.Status == model.AfsOrderStatusOnSaleAfs {
|
||||||
|
needCallNew = false
|
||||||
|
}
|
||||||
|
|
||||||
if needCallNew {
|
if needCallNew {
|
||||||
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||||
var afsOrder *model.AfsOrder
|
var afsOrder *model.AfsOrder
|
||||||
var api = getAPI("", 0, refundData.StoreId)
|
var api = getAPI("", 0, refundData.StoreId)
|
||||||
|
|
||||||
|
// 订单商品详细信息
|
||||||
|
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||||
|
StoreId: utils.String2Pointer(refundData.StoreId),
|
||||||
|
}}
|
||||||
|
order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("用户申请售后时,通过售后外部渠道订单号获取主订单失败:%s", err.Error())
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
if order == nil {
|
||||||
|
globals.SugarLogger.Debugf("数据库订单查询失败,订单号异常 :%s", refundData.OutOrderId)
|
||||||
|
return tao_vegetable.CallBackResultInfo(errors.New("订单号异常"))
|
||||||
|
}
|
||||||
|
queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID))
|
||||||
|
skuList, err := api.QueryOrderDetail(queryOrderDetailParam)
|
||||||
|
if err != nil {
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
if *skuList.OrderStatus != tao_vegetable.OrderStatusSuccess {
|
||||||
|
// 用户申请售后,只有订单完成之后才可以!现在是售中取消和售后取消都在走这个接口
|
||||||
|
// 所以只处理售后取消的消息
|
||||||
|
return tao_vegetable.CallBackResultInfo(nil)
|
||||||
|
}
|
||||||
|
|
||||||
afsOrder = &model.AfsOrder{
|
afsOrder = &model.AfsOrder{
|
||||||
VendorID: model.VendorIDTaoVegetable,
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
AfsOrderID: orderStatus.VendorOrderID,
|
AfsOrderID: orderStatus.VendorOrderID,
|
||||||
@@ -99,19 +130,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
}
|
}
|
||||||
refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId))
|
refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId))
|
||||||
|
|
||||||
//taoAfsOrderDetail, err := getAPI(refundData.MerchantCode, 0, "").QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{
|
|
||||||
// BizOrderIds: &bizOrderIds,
|
|
||||||
// RefundIds: &refundIds,
|
|
||||||
// OrderFrom: nil,
|
|
||||||
// ShopId: nil,
|
|
||||||
// StoreId: &refundData.StoreId,
|
|
||||||
//})
|
|
||||||
//if err != nil {
|
|
||||||
// return tao_vegetable.CallBackResultInfo(err)
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//taoAfsOrder := *taoAfsOrderDetail.Orders
|
|
||||||
|
|
||||||
afsOrder.FreightUserMoney = 0 // 订单运费
|
afsOrder.FreightUserMoney = 0 // 订单运费
|
||||||
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
|
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
|
||||||
afsOrder.BoxMoney = 0 // 餐盒费
|
afsOrder.BoxMoney = 0 // 餐盒费
|
||||||
@@ -119,25 +137,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||||
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||||
|
|
||||||
// 订单商品详细信息
|
|
||||||
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
|
||||||
StoreId: utils.String2Pointer(refundData.StoreId),
|
|
||||||
}}
|
|
||||||
order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
|
|
||||||
if err != nil {
|
|
||||||
globals.SugarLogger.Debugf("用户申请售后时,通过售后外部渠道订单号获取主订单失败:%s", err.Error())
|
|
||||||
return tao_vegetable.CallBackResultInfo(err)
|
|
||||||
}
|
|
||||||
if order == nil {
|
|
||||||
globals.SugarLogger.Debugf("数据库订单查询失败,订单号异常 :%s", refundData.OutOrderId)
|
|
||||||
return tao_vegetable.CallBackResultInfo(errors.New("订单号异常"))
|
|
||||||
}
|
|
||||||
queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID))
|
|
||||||
skuList, err := api.QueryOrderDetail(queryOrderDetailParam)
|
|
||||||
if err != nil {
|
|
||||||
return tao_vegetable.CallBackResultInfo(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var refundSkuCount int64 = 0 // 子订单申请退款的商品数
|
var refundSkuCount int64 = 0 // 子订单申请退款的商品数
|
||||||
var orderSkuCount int64 = 0 // 子订单购买的商品数
|
var orderSkuCount int64 = 0 // 子订单购买的商品数
|
||||||
for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单
|
for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单
|
||||||
@@ -149,18 +148,11 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
VendorSkuID: *sku.SkuCode,
|
VendorSkuID: *sku.SkuCode,
|
||||||
SkuID: utils.Str2Int(*sku.SkuCode),
|
SkuID: utils.Str2Int(*sku.SkuCode),
|
||||||
Name: *sku.SkuName,
|
Name: *sku.SkuName,
|
||||||
|
UserMoney: refundSku.MaxRefundFee,
|
||||||
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品
|
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品
|
||||||
VendorOrderID: orderStatus.VendorOrderID,
|
VendorOrderID: orderStatus.VendorOrderID,
|
||||||
VendorSubOrderID: *sku.OutSubOrderId,
|
VendorSubOrderID: *sku.OutSubOrderId,
|
||||||
}
|
}
|
||||||
// 交易成功,商户取消,配送中,配送结束时!订单不退换运费
|
|
||||||
switch *sku.OrderStatus {
|
|
||||||
case tao_vegetable.OrderStatusSuccess, tao_vegetable.OrderStatusMerchantCancel, tao_vegetable.OrderStatusDelivery, tao_vegetable.OrderStatusDeliveryOver:
|
|
||||||
orderSku.UserMoney = refundSku.RefundFee
|
|
||||||
default:
|
|
||||||
orderSku.UserMoney = refundSku.MaxRefundFee
|
|
||||||
}
|
|
||||||
|
|
||||||
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||||||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||||
orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity)
|
orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity)
|
||||||
@@ -183,7 +175,8 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 用户取消售后
|
// 用户取消售后
|
||||||
if status == tao_vegetable.OrderStatusCancelAfs {
|
switch status {
|
||||||
|
case tao_vegetable.OrderStatusCancelAfs:
|
||||||
// 删除售后单
|
// 删除售后单
|
||||||
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
||||||
if err != nil || afsOrder == nil {
|
if err != nil || afsOrder == nil {
|
||||||
@@ -221,6 +214,86 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 业务上规定的是打包之后不能取消,但是如果配送超过了预计送达时间1-2小时,
|
||||||
|
// c端的取消按钮会自动打开,让用户操作取消,但是如果你没接这个接口,用户申请取消了,
|
||||||
|
// 你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢
|
||||||
|
case tao_vegetable.OrderStatusOnSaleCancel:
|
||||||
|
onSaleMsg := msg.(*tao_vegetable.OnSaleCancel)
|
||||||
|
var afsOrder *model.AfsOrder
|
||||||
|
var api = getAPI("", 0, onSaleMsg.PartCancelRequest.StoreId)
|
||||||
|
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||||
|
StoreId: utils.String2Pointer(onSaleMsg.PartCancelRequest.StoreId),
|
||||||
|
BizOrderId: utils.Int64ToPointer(onSaleMsg.PartCancelRequest.BizOrderId),
|
||||||
|
}}
|
||||||
|
orderDetail, err := api.QueryOrderDetail(queryOrderDetailParam)
|
||||||
|
if err != nil {
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
afsOrder = &model.AfsOrder{
|
||||||
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
|
AfsOrderID: orderStatus.VendorOrderID,
|
||||||
|
VendorOrderID: orderStatus.RefVendorOrderID,
|
||||||
|
VendorStoreID: onSaleMsg.PartCancelRequest.StoreId,
|
||||||
|
StoreID: 0,
|
||||||
|
AfsCreatedAt: orderStatus.StatusTime,
|
||||||
|
VendorAppealType: status, // 原始售后方式
|
||||||
|
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
|
||||||
|
VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel,
|
||||||
|
ReasonType: 0,
|
||||||
|
ReasonDesc: "售中取消:订单未打包,或者长时间为送到!响应成功直接退款",
|
||||||
|
VendorOrgCode: api.GetVendorOrgCode(),
|
||||||
|
}
|
||||||
|
afsOrder.FreightUserMoney = 0 // 订单运费
|
||||||
|
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
|
||||||
|
afsOrder.BoxMoney = 0 // 餐盒费
|
||||||
|
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||||
|
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||||
|
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||||
|
|
||||||
|
ifAfsTypeFullRefund := false
|
||||||
|
var refundFee int64 = 0
|
||||||
|
for _, v := range *orderDetail.SubOrderResponseList {
|
||||||
|
for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders {
|
||||||
|
if *v.BizSubOrderId == v2.BizSubOrderId {
|
||||||
|
orderSku := &model.OrderSkuFinancial{
|
||||||
|
Count: utils.Float64TwoInt(*v.BuySaleQuantity),
|
||||||
|
VendorSkuID: *v.SkuCode,
|
||||||
|
SkuID: utils.Str2Int(*v.SkuCode),
|
||||||
|
Name: *v.SkuName,
|
||||||
|
UserMoney: *v.OriginalFee,
|
||||||
|
PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品
|
||||||
|
VendorOrderID: orderStatus.VendorOrderID,
|
||||||
|
VendorSubOrderID: *v.OutSubOrderId,
|
||||||
|
}
|
||||||
|
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||||||
|
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||||
|
refundFee += *v.OriginalFee
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) {
|
||||||
|
ifAfsTypeFullRefund = true
|
||||||
|
}
|
||||||
|
|
||||||
|
afsOrder.SkuUserMoney += refundFee
|
||||||
|
if ifAfsTypeFullRefund { // 全退
|
||||||
|
afsOrder.RefundType = model.AfsTypeFullRefund
|
||||||
|
afsOrder.SkuUserMoney += *orderDetail.PostFee
|
||||||
|
afsOrder.Skus[len(afsOrder.Skus)-1].UserMoney += *orderDetail.PostFee
|
||||||
|
} else {
|
||||||
|
afsOrder.RefundType = model.AfsTypePartRefund
|
||||||
|
}
|
||||||
|
|
||||||
|
if afsOrder != nil {
|
||||||
|
//直接就来一个新的售后单,并且还是售后完成的
|
||||||
|
if orderStatus.Status == model.AfsOrderStatusFinished {
|
||||||
|
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
|
||||||
|
}
|
||||||
|
globals.SugarLogger.Debugf("==============onsaleRefund afsOrd: = %s", utils.Format4Output(afsOrder, false))
|
||||||
|
globals.SugarLogger.Debugf("==============onsaleRefund orderStatus: = %s", utils.Format4Output(orderStatus, false))
|
||||||
|
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
||||||
@@ -240,6 +313,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
|||||||
goodsOrder.Status = model.OrderStatusCanceled
|
goodsOrder.Status = model.OrderStatusCanceled
|
||||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||||
|
// 取消三方运单
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -278,12 +352,12 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
|
|||||||
if order != nil {
|
if order != nil {
|
||||||
orderStatus.RefVendorOrderID = order.VendorOrderID
|
orderStatus.RefVendorOrderID = order.VendorOrderID
|
||||||
}
|
}
|
||||||
//case tao_vegetable.OrderStatusOnSaleCancel:
|
case tao_vegetable.OrderStatusOnSaleCancel:
|
||||||
// refundData := msg.(*tao_vegetable.OnSaleCancel)
|
refundData := msg.(*tao_vegetable.OnSaleCancel)
|
||||||
// orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.BizOrderId)
|
orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.BizOrderId)
|
||||||
// orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
|
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
|
||||||
// orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
|
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
|
||||||
// orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
orderStatus.StatusTime = time.Now()
|
||||||
//orderStatus.VendorOrderID = refundData.IdempotentId
|
//orderStatus.VendorOrderID = refundData.IdempotentId
|
||||||
case tao_vegetable.OrderStatusRefundSuccess: // 售后成功
|
case tao_vegetable.OrderStatusRefundSuccess: // 售后成功
|
||||||
refundData := msg.(*tao_vegetable.RefundOrderFinish)
|
refundData := msg.(*tao_vegetable.RefundOrderFinish)
|
||||||
|
|||||||
Reference in New Issue
Block a user