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

This commit is contained in:
richboo111
2023-07-06 15:37:31 +08:00

View File

@@ -24,22 +24,26 @@ var (
tao_vegetable.OrderStatusApplyAfs: model.AfsOrderStatusWait4Approve,
tao_vegetable.OrderStatusCancelAfs: model.AfsOrderStatusCancelAfs,
tao_vegetable.OrderStatusRefundSuccess: model.AfsOrderStatusFinished,
tao_vegetable.OrderStatusOnSaleCancel: model.AfsOrderStatusOnSaleAfs,
}
)
func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess {
switch orderStatus {
case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs:
order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable)
if order != nil {
return true
}
case tao_vegetable.OrderStatusRefundSuccess:
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(orderId, model.VendorIDTaoVegetable)
if afsOrder != nil {
return true
}
switch orderStatus {
case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs:
order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable)
if order != nil {
return true
}
case tao_vegetable.OrderStatusRefundSuccess:
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(orderId, model.VendorIDTaoVegetable)
if afsOrder != nil {
return true
}
case tao_vegetable.OrderStatusOnSaleCancel:
order, _ := partner.CurOrderManager.LoadOrder(orderId, model.VendorIDTaoVegetable)
if order != nil {
return true
}
}
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 {
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
var afsOrder *model.AfsOrder
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{
VendorID: model.VendorIDTaoVegetable,
AfsOrderID: orderStatus.VendorOrderID,
@@ -99,19 +130,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
}
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.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费
@@ -119,25 +137,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
afsOrder.SkuBoxMoney = 0 // 商品包装费
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 orderSkuCount int64 = 0 // 子订单购买的商品数
for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单
@@ -149,18 +148,11 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
VendorSkuID: *sku.SkuCode,
SkuID: utils.Str2Int(*sku.SkuCode),
Name: *sku.SkuName,
UserMoney: refundSku.MaxRefundFee,
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID,
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.Skus = append(afsOrder.Skus, orderSku)
orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity)
@@ -183,7 +175,8 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
}
} else {
// 用户取消售后
if status == tao_vegetable.OrderStatusCancelAfs {
switch status {
case tao_vegetable.OrderStatusCancelAfs:
// 删除售后单
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
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 {
@@ -240,6 +313,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
goodsOrder.Status = model.OrderStatusCanceled
goodsOrder.VendorStatus = orderStatus.VendorStatus
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
// 取消三方运单
}
}
}
@@ -278,13 +352,13 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
if order != nil {
orderStatus.RefVendorOrderID = order.VendorOrderID
}
//case tao_vegetable.OrderStatusOnSaleCancel:
// refundData := msg.(*tao_vegetable.OnSaleCancel)
// orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.BizOrderId)
// orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
// orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
// orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
// orderStatus.VendorOrderID = refundData.IdempotentId
case tao_vegetable.OrderStatusOnSaleCancel:
refundData := msg.(*tao_vegetable.OnSaleCancel)
orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.BizOrderId)
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
orderStatus.StatusTime = time.Now()
//orderStatus.VendorOrderID = refundData.IdempotentId
case tao_vegetable.OrderStatusRefundSuccess: // 售后成功
refundData := msg.(*tao_vegetable.RefundOrderFinish)
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(refundData.OutMainRefundId, model.VendorIDTaoVegetable)