1
This commit is contained in:
@@ -71,22 +71,25 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
||||
var err error
|
||||
var db = dao.GetDB()
|
||||
orderStatus := c.callbackAfsMsg2Status(status, msg)
|
||||
needCallNew := orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew
|
||||
if !needCallNew {
|
||||
_, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID)
|
||||
if err != nil {
|
||||
if dao.IsNoRowsError(err) {
|
||||
needCallNew = true
|
||||
} else {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
if needCallNew && orderStatus.Status == model.AfsOrderStatusOnSaleAfs {
|
||||
needCallNew = false
|
||||
}
|
||||
//needCallNew := orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew
|
||||
//if !needCallNew {
|
||||
// _, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID)
|
||||
// if err != nil {
|
||||
// if dao.IsNoRowsError(err) {
|
||||
// needCallNew = true
|
||||
// } else {
|
||||
// return tao_vegetable.CallBackResultInfo(err)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//if needCallNew && orderStatus.Status == model.AfsOrderStatusOnSaleAfs {
|
||||
// needCallNew = false
|
||||
//}
|
||||
|
||||
// 用户取消售后
|
||||
switch status {
|
||||
case tao_vegetable.OrderStatusApplyAfs:
|
||||
|
||||
if needCallNew {
|
||||
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||
var afsOrder *model.AfsOrder
|
||||
var api = getAPI("", 0, refundData.StoreId)
|
||||
@@ -182,150 +185,146 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
||||
}
|
||||
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
||||
}
|
||||
} else {
|
||||
// 用户取消售后
|
||||
switch status {
|
||||
case tao_vegetable.OrderStatusCancelAfs:
|
||||
// 删除售后单
|
||||
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
||||
if err != nil || afsOrder == nil {
|
||||
globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败")
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
cancelMsg := msg.(*tao_vegetable.UserCancelRefundApply)
|
||||
for _, v := range afsOrder {
|
||||
// 商家驳回,会发出用户撤销的回调通知,不管他
|
||||
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == model.AfsOrderFlagRefuseUserRefund {
|
||||
return tao_vegetable.CallBackResultInfo(nil)
|
||||
}
|
||||
|
||||
// 用户撤销未处理的售后订单
|
||||
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == 0 {
|
||||
// 下面处理用户撤销售后
|
||||
if err = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, v, "VendorOrderID", "VendorID")
|
||||
return err
|
||||
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
// 删除售后商品
|
||||
if err = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
|
||||
VendorOrderID: v.VendorOrderID,
|
||||
VendorID: v.VendorID,
|
||||
IsAfsOrder: 1,
|
||||
}, "VendorOrderID", "VendorID", "IsAfsOrder")
|
||||
return err
|
||||
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
// 业务上规定的是打包之后不能取消,但是如果配送超过了预计送达时间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: onSaleMsg.PartCancelRequest.IdempotentId,
|
||||
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 {
|
||||
//直接就来一个新的售后单,并且还是售后完成的
|
||||
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
|
||||
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
|
||||
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)
|
||||
}
|
||||
case tao_vegetable.OrderStatusCancelAfs:
|
||||
// 删除售后单
|
||||
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
||||
if err != nil || afsOrder == nil {
|
||||
globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败")
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
||||
skuList, _ := dao.GetSimpleOrderSkus(db, orderStatus.RefVendorOrderID, nil)
|
||||
totalSkuCount := 0
|
||||
for _, v := range skuList {
|
||||
totalSkuCount += v.Count
|
||||
cancelMsg := msg.(*tao_vegetable.UserCancelRefundApply)
|
||||
for _, v := range afsOrder {
|
||||
// 商家驳回,会发出用户撤销的回调通知,不管他
|
||||
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == model.AfsOrderFlagRefuseUserRefund {
|
||||
return tao_vegetable.CallBackResultInfo(nil)
|
||||
}
|
||||
|
||||
financialSku, _ := dao.GetOrderRefundSkuList(db, []string{orderStatus.RefVendorOrderID})
|
||||
refundSkuCount := 0
|
||||
for _, v := range financialSku {
|
||||
refundSkuCount += v.Count
|
||||
// 用户撤销未处理的售后订单
|
||||
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == 0 {
|
||||
// 下面处理用户撤销售后
|
||||
if err = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, v, "VendorOrderID", "VendorID")
|
||||
return err
|
||||
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
// 删除售后商品
|
||||
if err = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
|
||||
VendorOrderID: v.VendorOrderID,
|
||||
VendorID: v.VendorID,
|
||||
IsAfsOrder: 1,
|
||||
}, "VendorOrderID", "VendorID", "IsAfsOrder")
|
||||
return err
|
||||
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
}
|
||||
if err == nil && status == tao_vegetable.OrderStatusRefundSuccess && totalSkuCount == refundSkuCount {
|
||||
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
|
||||
goodsOrder.Status = model.OrderStatusCanceled
|
||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||
// 取消三方运单
|
||||
}
|
||||
// 业务上规定的是打包之后不能取消,但是如果配送超过了预计送达时间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: onSaleMsg.PartCancelRequest.IdempotentId,
|
||||
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 {
|
||||
//直接就来一个新的售后单,并且还是售后完成的
|
||||
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
|
||||
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
|
||||
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)
|
||||
}
|
||||
}
|
||||
globals.SugarLogger.Debugf("=============errr : %v", err)
|
||||
|
||||
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
||||
skuList, _ := dao.GetSimpleOrderSkus(db, orderStatus.RefVendorOrderID, nil)
|
||||
totalSkuCount := 0
|
||||
for _, v := range skuList {
|
||||
totalSkuCount += v.Count
|
||||
}
|
||||
|
||||
financialSku, _ := dao.GetOrderRefundSkuList(db, []string{orderStatus.RefVendorOrderID})
|
||||
refundSkuCount := 0
|
||||
for _, v := range financialSku {
|
||||
refundSkuCount += v.Count
|
||||
}
|
||||
if err == nil && status == tao_vegetable.OrderStatusRefundSuccess && totalSkuCount == refundSkuCount {
|
||||
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
|
||||
goodsOrder.Status = model.OrderStatusCanceled
|
||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||
// 取消三方运单
|
||||
}
|
||||
}
|
||||
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user