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

This commit is contained in:
richboo111
2023-07-06 10:18:46 +08:00
16 changed files with 484 additions and 250 deletions

View File

@@ -4,6 +4,7 @@ import (
"crypto/md5" "crypto/md5"
"errors" "errors"
"fmt" "fmt"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
"math" "math"
"strings" "strings"
"time" "time"
@@ -161,19 +162,6 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
} }
func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) { func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) {
// 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下
if orderStatus != nil {
if orderStatus.Status == model.OrderStatusAccepted {
if _, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder {
if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil {
if order, err2 := handler.GetOrder(vendorOrgCode, orderStatus.VendorOrderID, ""); err2 == nil && order != nil {
c.OnOrderNew(order, orderStatus)
}
}
}
}
}
db := dao.GetDB() db := dao.GetDB()
txDB, _ := dao.Begin(db) txDB, _ := dao.Begin(db)
defer func() { defer func() {
@@ -182,6 +170,28 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
panic(r) panic(r)
} }
}() }()
globals.SugarLogger.Debugf("========OnOrderStatusChanged : %s", vendorOrgCode)
globals.SugarLogger.Debugf("========OnOrderStatusChanged : %s", utils.Format4Output(orderStatus, false))
// 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下
if orderStatus != nil {
if orderStatus.Status == model.OrderStatusAccepted {
if loadOrder, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder {
if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil {
if order, err2 := handler.GetOrder(vendorOrgCode, orderStatus.VendorOrderID, ""); err2 == nil && order != nil {
c.OnOrderNew(order, orderStatus)
}
}
} else {
globals.SugarLogger.Debugf("========loadOrder : %s", utils.Format4Output(loadOrder, false))
loadOrder.Status = model.OrderStatusAccepted
loadOrder.VendorStatus = tao_vegetable.OrderStatusNew
c.UpdateOrderFields(loadOrder, []string{"Status", "VendorStatus"})
globals.SugarLogger.Debugf("========loadOrder : %s", utils.Format4Output(loadOrder, false))
}
}
}
isDuplicated, order, err := c.addOrderStatus(orderStatus, db) isDuplicated, order, err := c.addOrderStatus(orderStatus, db)
if err == nil { if err == nil {
dao.Commit(db, txDB) dao.Commit(db, txDB)

View File

@@ -413,6 +413,7 @@ func (c *OrderManager) CreateAfsOrderFromOrder(vendorOrderID string, vendorID in
orderSkuFinancial := &model.OrderSkuFinancial{ orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: sku.VendorID, VendorID: sku.VendorID,
VendorOrderID: sku.VendorOrderID, VendorOrderID: sku.VendorOrderID,
VendorSubOrderID: sku.VendorSubOrderID,
// OrderFinancialID: sku.VendorOrderID, // OrderFinancialID: sku.VendorOrderID,
// ConfirmTime: afsOrder.AfsCreateAt, // ConfirmTime: afsOrder.AfsCreateAt,
VendorStoreID: afsOrder.VendorStoreID, VendorStoreID: afsOrder.VendorStoreID,

View File

@@ -698,7 +698,13 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
// api.JdShop2API.SetCookieWithStr(configs[0].Value) // api.JdShop2API.SetCookieWithStr(configs[0].Value)
// } // }
} }
globals.SugarLogger.Debugf("createList ==== := %s", utils.Format4Output(createList, false))
globals.SugarLogger.Debugf("updateList ==== := %s", utils.Format4Output(updateList, false))
globals.SugarLogger.Debugf("deleteList ==== := %s", utils.Format4Output(deleteList, false))
globals.SugarLogger.Debugf("stockList ==== := %s", utils.Format4Output(stockList, false))
globals.SugarLogger.Debugf("onlineList ==== := %s", utils.Format4Output(onlineList, false))
globals.SugarLogger.Debugf("offlineList ==== := %s", utils.Format4Output(offlineList, false))
globals.SugarLogger.Debugf("priceList ==== := %s", utils.Format4Output(priceList, false))
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx, task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int) step := batchItemList[0].(int)

View File

@@ -2,7 +2,6 @@ package dao
import ( import (
"fmt" "fmt"
"git.rosy.net.cn/jx-callback/globals"
"regexp" "regexp"
"strconv" "strconv"
"time" "time"
@@ -1156,8 +1155,6 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
sqlParams = append(sqlParams, pageSize, offset) sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db) txDB, _ := Begin(db)
defer Commit(db, txDB) defer Commit(db, txDB)
globals.SugarLogger.Debugf("===============sql2 := %s", sql)
globals.SugarLogger.Debugf("===============sql2 := %s", utils.Format4Output(sqlParams, false))
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil { if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
totalCount = GetLastTotalRowCount2(db, txDB) totalCount = GetLastTotalRowCount2(db, txDB)
} }

View File

@@ -89,7 +89,7 @@ type AfsOrder struct {
ReasonImgList string `orm:"size(1024)" json:"reasonImgList"` // 售后描述图片 ReasonImgList string `orm:"size(1024)" json:"reasonImgList"` // 售后描述图片
AppealType int8 `json:"appealType"` // 售后方式(本地) AppealType int8 `json:"appealType"` // 售后方式(本地)
VendorAppealType string `orm:"size(255)" json:"vendorAppealType"` // 原始售后方式(第三方平台) VendorAppealType string `orm:"size(255)" json:"vendorAppealType"` // 原始售后方式(第三方平台)
Flag int `json:"flag"` Flag int `json:"flag"` // 0 未操作/1同意/3驳回
RefundType int8 `json:"refundType"` RefundType int8 `json:"refundType"`
RefuseReason string `orm:"size(1024)" json:"refuseReason"` RefuseReason string `orm:"size(1024)" json:"refuseReason"`
@@ -121,6 +121,7 @@ type OrderSkuFinancial struct {
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
VendorSubOrderID string `orm:"column(vendor_sub_order_id);size(48)" json:"vendorSubOrderID"` // 关联原始订单ID
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后单ID AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后单ID
IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单 IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单

View File

@@ -90,6 +90,7 @@ func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.Orde
orderSkuFinancial := &model.OrderSkuFinancial{ orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: sku.VendorID, VendorID: sku.VendorID,
VendorOrderID: sku.VendorOrderID, VendorOrderID: sku.VendorOrderID,
VendorSubOrderID: sku.VendorSubOrderID,
AfsOrderID: sku.VendorOrderID, AfsOrderID: sku.VendorOrderID,
// ConfirmTime: afsOrder.AfsCreateAt, // ConfirmTime: afsOrder.AfsCreateAt,
VendorStoreID: afsOrder.VendorStoreID, VendorStoreID: afsOrder.VendorStoreID,
@@ -144,6 +145,7 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interfac
VendorID: model.VendorIDEBAI, VendorID: model.VendorIDEBAI,
AfsOrderID: afsOrder.AfsOrderID, AfsOrderID: afsOrder.AfsOrderID,
VendorOrderID: afsOrder.VendorOrderID, VendorOrderID: afsOrder.VendorOrderID,
VendorSubOrderID: afsOrder.VendorOrderID2,
// ConfirmTime: getTimeFromInterface(xMap["apply_time"]), // ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
VendorSkuID: utils.Interface2String(xMap["sku_id"]), VendorSkuID: utils.Interface2String(xMap["sku_id"]),
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)), SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)),

View File

@@ -3,6 +3,7 @@ package tao_vegetable
import ( import (
"git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable" "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
@@ -15,6 +16,7 @@ func OnCallbackMsg(orderStatus, orderId string, msg interface{}) (response *tao_
if CurPurchaseHandler != nil { if CurPurchaseHandler != nil {
jxutils.CallMsgHandler(func() { jxutils.CallMsgHandler(func() {
response = CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg) response = CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg)
globals.SugarLogger.Debugf("OnCallbackMsg response : %s", utils.Format4Output(response, false))
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable)) }, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
} }
return response return response

View File

@@ -29,7 +29,7 @@ func OnFinancialMsg(msg *mtwmapi.CallbackMsg) (err error) {
orderData := msg.FormData orderData := msg.FormData
if orderData.Get("notify_type") == mtwmapi.NotifyTypeSuccess { if orderData.Get("notify_type") == mtwmapi.NotifyTypeSuccess {
afsOrderID := orderData.Get("order_id") afsOrderID := orderData.Get("order_id")
orderFinancial, err := partner.CurOrderManager.LoadOrderFinancial(afsOrderID, model.VendorIDMTWM) orderFinancial, err := partner.CurOrderManager.LoadOrderFinancial(afsOrderID, model.VendorIDTaoVegetable)
if err == nil { if err == nil {
err = partner.CurOrderManager.SaveAfsOrderFinancialInfo(CurPurchaseHandler.OrderFinancialDetail2Refund(orderFinancial, orderData)) err = partner.CurOrderManager.SaveAfsOrderFinancialInfo(CurPurchaseHandler.OrderFinancialDetail2Refund(orderFinancial, orderData))
} else { } else {
@@ -42,7 +42,7 @@ func OnFinancialMsg(msg *mtwmapi.CallbackMsg) (err error) {
func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.OrderFinancial, orderData url.Values) (afsOrder *model.AfsOrder) { func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.OrderFinancial, orderData url.Values) (afsOrder *model.AfsOrder) {
afsOrder = &model.AfsOrder{ afsOrder = &model.AfsOrder{
VendorID: model.VendorIDMTWM, VendorID: model.VendorIDTaoVegetable,
AfsOrderID: orderData.Get("refund_id"), AfsOrderID: orderData.Get("refund_id"),
VendorOrderID: orderData.Get("order_id"), VendorOrderID: orderData.Get("order_id"),
AfsCreatedAt: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))), AfsCreatedAt: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))),
@@ -65,6 +65,7 @@ func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.Orde
orderSkuFinancial := &model.OrderSkuFinancial{ orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: sku.VendorID, VendorID: sku.VendorID,
VendorOrderID: sku.VendorOrderID, VendorOrderID: sku.VendorOrderID,
VendorSubOrderID: sku.VendorSubOrderID,
// OrderFinancialID: sku.VendorOrderID, // OrderFinancialID: sku.VendorOrderID,
// ConfirmTime: afsOrder.AfsCreateAt, // ConfirmTime: afsOrder.AfsCreateAt,
VendorStoreID: afsOrder.VendorStoreID, VendorStoreID: afsOrder.VendorStoreID,
@@ -88,7 +89,7 @@ func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.Orde
func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrder *model.AfsOrder) { func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrder *model.AfsOrder) {
afsOrder = &model.AfsOrder{ afsOrder = &model.AfsOrder{
VendorID: model.VendorIDMTWM, VendorID: model.VendorIDTaoVegetable,
AfsOrderID: orderData.Get("order_id"), AfsOrderID: orderData.Get("order_id"),
VendorOrderID: orderData.Get("order_id"), VendorOrderID: orderData.Get("order_id"),
AfsCreatedAt: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))), AfsCreatedAt: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))),
@@ -111,9 +112,10 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrd
utils.UnmarshalUseNumber([]byte(food), &refundDetail) utils.UnmarshalUseNumber([]byte(food), &refundDetail)
for _, xMap := range refundDetail { for _, xMap := range refundDetail {
orderSkuFinancial := &model.OrderSkuFinancial{ orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: model.VendorIDMTWM, VendorID: model.VendorIDTaoVegetable,
AfsOrderID: afsOrder.AfsOrderID, AfsOrderID: afsOrder.AfsOrderID,
VendorOrderID: afsOrder.VendorOrderID, VendorOrderID: afsOrder.VendorOrderID,
VendorSubOrderID: afsOrder.VendorOrderID2,
// ConfirmTime: afsOrder.AfsCreateAt, // ConfirmTime: afsOrder.AfsCreateAt,
VendorSkuID: utils.Interface2String(xMap["app_food_code"]), VendorSkuID: utils.Interface2String(xMap["app_food_code"]),
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["sku_id"]), 0)), SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["sku_id"]), 0)),
@@ -161,6 +163,7 @@ func (p *PurchaseHandler) OrderDetail2Financial(result *domain591.AlibabaAelophy
orderSkuFinancial := &model.OrderSkuFinancial{ orderSkuFinancial := &model.OrderSkuFinancial{
VendorID: orderFinancial.VendorID, VendorID: orderFinancial.VendorID,
VendorOrderID: orderFinancial.VendorOrderID, VendorOrderID: orderFinancial.VendorOrderID,
VendorSubOrderID: orderFinancial.VendorOrderID2,
VendorStoreID: *result.StoreId, VendorStoreID: *result.StoreId,
StoreID: 0, StoreID: 0,
JxStoreID: jxStoreID, JxStoreID: jxStoreID,
@@ -182,6 +185,7 @@ func (p *PurchaseHandler) OrderDetail2Financial(result *domain591.AlibabaAelophy
activity := &model.OrderDiscountFinancial{ activity := &model.OrderDiscountFinancial{
VendorID: orderFinancial.VendorID, VendorID: orderFinancial.VendorID,
VendorOrderID: orderFinancial.VendorOrderID, VendorOrderID: orderFinancial.VendorOrderID,
VendorOrderID2: orderFinancial.VendorOrderID2,
} }
if v.ChannelActivityId != nil { if v.ChannelActivityId != nil {
activity.VendorActivityID = *v.ChannelActivityId activity.VendorActivityID = *v.ChannelActivityId

View File

@@ -7,7 +7,6 @@ import (
"strings" "strings"
"time" "time"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable" "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain" domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request" request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
@@ -55,8 +54,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
StoreId: utils.String2Pointer(vendorStoreID), StoreId: utils.String2Pointer(vendorStoreID),
BizOrderId: utils.Int64ToPointer(vendorOrderID), BizOrderId: utils.Int64ToPointer(vendorOrderID),
}} }}
api := getAPI(vendorOrgCode, 0, vendorStoreID)
orderDetail, err := getAPI(vendorOrgCode, 0, vendorStoreID).QueryOrderDetail(requestParam) orderDetail, err := api.QueryOrderDetail(requestParam)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@@ -65,6 +64,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
VendorOrderID: utils.Int64ToStr(vendorOrderID), VendorOrderID: utils.Int64ToStr(vendorOrderID),
VendorID: model.VendorIDTaoVegetable, VendorID: model.VendorIDTaoVegetable,
VendorStoreID: vendorStoreID, VendorStoreID: vendorStoreID,
VendorOrderID2: *orderDetail.OutOrderId,
StoreID: utils.Str2Int(*orderDetail.StoreId), StoreID: utils.Str2Int(*orderDetail.StoreId),
JxStoreID: utils.Str2Int(*orderDetail.StoreId), JxStoreID: utils.Str2Int(*orderDetail.StoreId),
CoordinateType: model.CoordinateTypeMars, CoordinateType: model.CoordinateTypeMars,
@@ -79,7 +79,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
InvoiceTitle: "", InvoiceTitle: "",
InvoiceTaxerID: "", InvoiceTaxerID: "",
InvoiceEmail: "", InvoiceEmail: "",
VendorOrgCode: vendorOrgCode, VendorOrgCode: api.GetVendorOrgCode(),
UserID: *orderDetail.OpenUid, UserID: *orderDetail.OpenUid,
} }
@@ -104,6 +104,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
for _, extra := range *orderDetail.SubOrderResponseList { for _, extra := range *orderDetail.SubOrderResponseList {
sku := &model.OrderSku{ sku := &model.OrderSku{
VendorOrderID: order.VendorOrderID, VendorOrderID: order.VendorOrderID,
VendorSubOrderID: *extra.OutSubOrderId,
VendorID: model.VendorIDTaoVegetable, VendorID: model.VendorIDTaoVegetable,
StoreSubID: 0, StoreSubID: 0,
StoreSubName: "", StoreSubName: "",
@@ -122,7 +123,6 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
OrderCreatedAt: order.OrderCreatedAt, OrderCreatedAt: order.OrderCreatedAt,
IsVendorAct: 0, IsVendorAct: 0,
Upc: *extra.Barcode, Upc: *extra.Barcode,
VendorSubOrderID: utils.Int64ToStr(*extra.BizSubOrderId),
} }
activityId := make([]int64, 0) activityId := make([]int64, 0)
@@ -333,22 +333,19 @@ func (c *PurchaseHandler) onOrderMsg(orderStatus, orderId string, orderCallback
msg.OrderStatus = tao_vegetable.OrderStatusOnSaleCancel msg.OrderStatus = tao_vegetable.OrderStatusOnSaleCancel
} }
status := c.callbackOrderMsg2Status(msg) status := c.callbackOrderMsg2Status(msg)
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {
return nil
}
// 校验重复消息 // 校验重复消息
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 { if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {
return tao_vegetable.CallBackResultInfo(nil) return tao_vegetable.CallBackResultInfo(nil)
} }
// 商户接单/支付完成代表新订单 // 商户接单/支付完成代表新订单
if msg.OrderStatus == tao_vegetable.OrderStatusNew || msg.OrderStatus == tao_vegetable.OrderStatusPayFinsh { if msg.OrderStatus == tao_vegetable.OrderStatusPayFinsh {
order, orderMap, err2 := c.getOrder("", msg.BizOrderId, msg.StoreId) order, orderMap, err2 := c.getOrder("", msg.BizOrderId, msg.StoreId)
if err = err2; err == nil { if err = err2; err == nil {
err = partner.CurOrderManager.OnOrderNew(order, status) err = partner.CurOrderManager.OnOrderNew(order, status)
if err == nil { if err == nil {
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
if msg.OrderStatus == mtwmapi.MsgTypeNewOrder { if msg.OrderStatus == tao_vegetable.OrderStatusPayFinsh {
c.OnOrderDetail(orderMap, partner.CreatedPeration) c.OnOrderDetail(orderMap, partner.CreatedPeration)
} else { } else {
c.OnOrderDetail(orderMap, partner.UpdatedPeration) c.OnOrderDetail(orderMap, partner.UpdatedPeration)
@@ -380,7 +377,7 @@ func (c *PurchaseHandler) onOrderMsg(orderStatus, orderId string, orderCallback
// 发货完成 // 发货完成
if msg.OrderStatus == tao_vegetable.OrderStatusCallRider { // || msgId == tiktokShop.CallbackPartGoodsMsgTagId 部分发货 if msg.OrderStatus == tao_vegetable.OrderStatusCallRider { // || msgId == tiktokShop.CallbackPartGoodsMsgTagId 部分发货
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
orderMap, _ := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{ orderMap, _ := getAPI("", jxutils.GetSaleStoreIDFromOrder(order), order.VendorStoreID).QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{
OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(msg.StoreId), StoreId: utils.String2Pointer(msg.StoreId),
BizOrderId: utils.Int64ToPointer(msg.BizOrderId), BizOrderId: utils.Int64ToPointer(msg.BizOrderId),
@@ -439,6 +436,9 @@ func (c *PurchaseHandler) callbackOrderMsg2Status(msg *tao_vegetable.CallbackOrd
case tao_vegetable.OrderStatusOnSaleCancel: case tao_vegetable.OrderStatusOnSaleCancel:
orderStatus.Status = model.OrderStatusCanceled orderStatus.Status = model.OrderStatusCanceled
orderStatus.Remark = "用户售中取消" orderStatus.Remark = "用户售中取消"
case tao_vegetable.OrderStatusSuccess: // 送达
orderStatus.Status = model.OrderStatusFinished
orderStatus.Remark = "订单送达"
} }
return orderStatus return orderStatus
} }
@@ -578,32 +578,62 @@ func (c *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *mode
} }
func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) {
if isAgree {
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{ db := dao.GetDB()
StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(order.VendorOrderID),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
}
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" {
param.AuditMemo = utils.String2Pointer(*param.AuditMemo + fmt.Sprintf(",%s", reason))
}
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").AgreeUserCancel(param)
} else {
afsOrder, err := partner.CurOrderManager.LoadAfsOrder(order.VendorOrderID, order.VendorID) afsOrder, err := partner.CurOrderManager.LoadAfsOrder(order.VendorOrderID, order.VendorID)
if err != nil { if err != nil {
return err return err
} }
if isAgree {
// 加载子订单号
orderDetail, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDTaoVegetable)
// 加载退款商品
afsSkuOrder, _ := dao.GetOrderRefundSkuList(db, []string{order.VendorOrderID})
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(orderDetail.VendorOrderID2),
RefundId: utils.String2Pointer(afsOrder.AfsOrderID),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
}
// 加载购买商品
sku, _ := dao.GetSimpleOrderSkus(db, order.VendorOrderID, nil)
skuCount := 0
for _, v := range sku {
skuCount += v.Count
}
refundSkuCount := 0
subRefundList := make([]domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist, 0, len(afsSkuOrder))
for _, v := range afsSkuOrder {
subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{
OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID),
RefundFee: utils.Int64ToPointer(v.UserMoney),
})
refundSkuCount += v.Count
}
// 全退退运费
if skuCount == refundSkuCount {
}
param.SubRefundList = &subRefundList
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" {
param.AuditMemo = utils.String2Pointer(*param.AuditMemo + fmt.Sprintf(",%s", reason))
}
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(afsOrder), order.VendorStoreID).AgreeUserCancel(param)
} else {
param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{ param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{
RefundId: utils.String2Pointer(afsOrder.AfsOrderID), RefundId: utils.String2Pointer(afsOrder.AfsOrderID),
RejectReason: utils.String2Pointer(reason), RejectReason: utils.String2Pointer(reason),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
} }
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").DisAgreeUserCancel(param) err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(afsOrder), order.VendorStoreID).DisAgreeUserCancel(param)
if err != nil { if err != nil {
afsOrder.Status = model.AfsOrderStatusFailed afsOrder.Status = model.AfsOrderStatusFailed
afsOrder.VendorStatus = "老板拒绝" afsOrder.VendorStatus = "老板拒绝"
afsOrder.ReasonDesc += reason + "," afsOrder.ReasonDesc += "," + reason
dao.UpdateEntity(dao.GetDB(), afsOrder, "Status", "ReasonDesc", "VendorStatus") dao.UpdateEntity(dao.GetDB(), afsOrder, "Status", "ReasonDesc", "VendorStatus")
} }
} }
@@ -624,10 +654,11 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods
} }
} }
reasonId := *orderSkuList.ReasonList
param := &request3156.AlibabaTclsAelophyRefundCsapplyRequest{ param := &request3156.AlibabaTclsAelophyRefundCsapplyRequest{
RefundCsApplyDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyRefundCsApplyDto{ RefundCsApplyDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyRefundCsApplyDto{
ReasonId: utils.Int64ToPointer(1111), ReasonId: reasonId[0].ReasonId,
OutOrderId: utils.String2Pointer(order.VendorOrderID), OutOrderId: utils.String2Pointer(order.VendorOrderID2),
StoreId: utils.String2Pointer(order.VendorStoreID), StoreId: utils.String2Pointer(order.VendorStoreID),
RequestId: utils.String2Pointer(fmt.Sprintf("%s%d", order.VendorStoreID, time.Now().UnixNano())), RequestId: utils.String2Pointer(fmt.Sprintf("%s%d", order.VendorStoreID, time.Now().UnixNano())),
OutSubOrderIds: &outSubOrderIds, OutSubOrderIds: &outSubOrderIds,

View File

@@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable" "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request" request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain" domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request" request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
@@ -28,18 +29,27 @@ var (
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 { if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess {
order, _ := partner.CurOrderManager.LoadOrder(orderId, model.VendorIDTaoVegetable) switch orderStatus {
case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs:
order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable)
if order != nil { if order != nil {
return true return true
} }
case tao_vegetable.OrderStatusRefundSuccess:
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(orderId, model.VendorIDTaoVegetable)
if afsOrder != nil {
return true
}
}
} }
return false return false
} }
func (c *PurchaseHandler) OnAfsOrderMsg(orderId, status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) { func (c *PurchaseHandler) OnAfsOrderMsg(orderId, status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) {
jxutils.CallMsgHandlerAsync(func() { // 取消线程池执行代码,异步返回
//jxutils.CallMsgHandlerAsync(func() {
retVal = c.onAfsOrderMsg(status, msg) retVal = c.onAfsOrderMsg(status, msg)
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable)) //}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
return retVal return retVal
} }
@@ -63,6 +73,8 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
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)
afsOrder = &model.AfsOrder{ afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable, VendorID: model.VendorIDTaoVegetable,
AfsOrderID: orderStatus.VendorOrderID, AfsOrderID: orderStatus.VendorOrderID,
@@ -77,8 +89,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
ReasonType: 0, ReasonType: 0,
ReasonDesc: refundData.RefundReason, ReasonDesc: refundData.RefundReason,
ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024), ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024),
RefundType: model.AfsTypeFullRefund, VendorOrgCode: api.GetVendorOrgCode(),
VendorOrgCode: refundData.MerchantCode,
} }
refundIds := make([]int64, 0, 0) refundIds := make([]int64, 0, 0)
@@ -88,48 +99,81 @@ 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{ //taoAfsOrderDetail, err := getAPI(refundData.MerchantCode, 0, "").QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{
BizOrderIds: &bizOrderIds, // BizOrderIds: &bizOrderIds,
RefundIds: &refundIds, // RefundIds: &refundIds,
OrderFrom: nil, // OrderFrom: nil,
ShopId: nil, // ShopId: nil,
StoreId: &refundData.StoreId, // StoreId: &refundData.StoreId,
}) //})
if err != nil { //if err != nil {
return tao_vegetable.CallBackResultInfo(err) // return tao_vegetable.CallBackResultInfo(err)
} //}
//
//taoAfsOrder := *taoAfsOrderDetail.Orders
taoAfsOrder := *taoAfsOrderDetail.Orders afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.FreightUserMoney = *taoAfsOrder[0].RefundPostFee
afsOrder.AfsFreightMoney = *taoAfsOrder[0].RefundPostFee // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费 afsOrder.BoxMoney = 0 // 餐盒费
afsOrder.TongchengFreightMoney = 0 // 同城配送费 afsOrder.TongchengFreightMoney = 0 // 同城配送费
afsOrder.SkuBoxMoney = 0 // 商品包装费 afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
// 订单商品详细信息 // 订单商品详细信息
skuList, err := getAPI(refundData.MerchantCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(refundData.StoreId), StoreId: utils.String2Pointer(refundData.StoreId),
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(refundData.OutOrderId)), }}
}}) 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 { if err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
for _, sku := range *skuList.SubOrderResponseList {
var refundSkuCount int64 = 0 // 子订单申请退款的商品数
var orderSkuCount int64 = 0 // 子订单购买的商品数
for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单
refundSkuCount += refundSku.RefundAmount
for _, sku := range *skuList.SubOrderResponseList { // 总订单
if refundSku.OutSubOrderId == *sku.OutSubOrderId {
orderSku := &model.OrderSkuFinancial{ orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(*sku.BuySaleQuantity), Count: utils.Float64TwoInt(*sku.BuySaleQuantity),
VendorSkuID: *sku.SkuCode, VendorSkuID: *sku.SkuCode,
SkuID: utils.Str2Int(*sku.SkuCode), SkuID: utils.Str2Int(*sku.SkuCode),
Name: *sku.SkuName, Name: *sku.SkuName,
UserMoney: *sku.OriginalFee - *sku.DiscountFee,
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品 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.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.SkuUserMoney += orderSku.UserMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku) afsOrder.Skus = append(afsOrder.Skus, orderSku)
orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity)
} }
}
}
if refundSkuCount == orderSkuCount && refundData.RefundFee == *skuList.PayFee { // 全退
afsOrder.RefundType = model.AfsTypeFullRefund
} else {
afsOrder.RefundType = model.AfsTypePartRefund
}
afsOrder.SkuUserMoney += refundData.RefundFee
if afsOrder != nil { if afsOrder != nil {
//直接就来一个新的售后单,并且还是售后完成的 //直接就来一个新的售后单,并且还是售后完成的
if orderStatus.Status == model.AfsOrderStatusFinished { if orderStatus.Status == model.AfsOrderStatusFinished {
@@ -147,33 +191,51 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
return tao_vegetable.CallBackResultInfo(err) 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 { if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, afsOrder[0], "VendorOrderID", "VendorID") _, err = dao.DeleteEntity(db, v, "VendorOrderID", "VendorID")
return err return err
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil { }, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
// 删除售后商品 // 删除售后商品
if err = utils.CallFuncLogError(func() error { if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{ _, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
VendorOrderID: afsOrder[0].VendorOrderID, VendorOrderID: v.VendorOrderID,
VendorID: afsOrder[0].VendorID, VendorID: v.VendorID,
IsAfsOrder: 1, IsAfsOrder: 1,
}, "VendorOrderID", "VendorID", "IsAfsOrder") }, "VendorOrderID", "VendorID", "IsAfsOrder")
return err return err
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil { }, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
// 订单更改为待配送 }
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable) }
goodsOrder.Status = model.OrderStatusFinishedPickup
goodsOrder.VendorStatus = status
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
} }
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil { if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
if err == nil && status == tao_vegetable.OrderStatusRefundSuccess { 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, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
goodsOrder.Status = model.OrderStatusCanceled goodsOrder.Status = model.OrderStatusCanceled
goodsOrder.VendorStatus = orderStatus.VendorStatus goodsOrder.VendorStatus = orderStatus.VendorStatus
@@ -181,6 +243,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
} }
} }
} }
globals.SugarLogger.Debugf("=============errr : %v", err)
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
@@ -192,21 +255,29 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
} }
switch status { switch status {
case tao_vegetable.OrderStatusApplyAfs: case tao_vegetable.OrderStatusApplyAfs: // 用户申请售后
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack) refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
orderStatus.RefVendorOrderID = refundData.OutOrderId orderStatus.RefVendorOrderID = refundData.OutOrderId
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.Remark = refundData.Remarks orderStatus.Remark = refundData.Remarks
orderStatus.VendorOrderID = refundData.BizRefundId orderStatus.VendorOrderID = refundData.RefundId
case tao_vegetable.OrderStatusCancelAfs: order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
if order != nil {
orderStatus.RefVendorOrderID = order.VendorOrderID
}
case tao_vegetable.OrderStatusCancelAfs: // 用户取消售后
refundData := msg.(*tao_vegetable.UserCancelRefundApply) refundData := msg.(*tao_vegetable.UserCancelRefundApply)
orderStatus.RefVendorOrderID = refundData.OutOrderId orderStatus.RefVendorOrderID = refundData.OutOrderId
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.VendorOrderID = refundData.BizRefundId orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
if order != nil {
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.BizOrderId)
@@ -214,13 +285,15 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
// orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel) // orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
// orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp) // orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
// 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)
orderStatus.RefVendorOrderID = refundData.OutMainRefundId afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(refundData.OutMainRefundId, model.VendorIDTaoVegetable)
orderStatus.RefVendorOrderID = afsOrder.VendorOrderID
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.VendorOrderID = refundData.BizSubRefundId orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId)
orderStatus.VendorOrderID = refundData.OutMainRefundId
} }
if orderStatus.VendorOrderID == "" { if orderStatus.VendorOrderID == "" {
@@ -239,32 +312,62 @@ func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(notifyType string) int {
// 审核售后单申请 // 审核售后单申请
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) { func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
db := dao.GetDB()
if approveType == partner.AfsApproveTypeRefused { if approveType == partner.AfsApproveTypeRefused {
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(order.VendorOrderID),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
}
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" {
param.AuditMemo = utils.String2Pointer(*param.AuditMemo + fmt.Sprintf(",%s", reason))
}
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).AgreeUserCancel(param)
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
return errors.New("此平台暂时不支持")
} else {
param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{ param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{
RefundId: utils.String2Pointer(order.AfsOrderID), RefundId: utils.String2Pointer(order.AfsOrderID),
RejectReason: utils.String2Pointer(reason), RejectReason: utils.String2Pointer(reason),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
} }
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param) err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param)
if err != nil { //if err == nil {
order.Status = model.AfsOrderStatusFailed // order.Status = model.AfsOrderStatusFailed
order.VendorStatus = "老板拒绝" // order.VendorStatus = "老板拒绝"
order.ReasonDesc += reason + "," // order.ReasonDesc += "," + reason
dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus") // dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus")
//}
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
return errors.New("此平台暂时不支持")
} else {
// 加载子订单号
orderDetail, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDTaoVegetable)
// 加载退款商品
afsSkuOrder, _ := dao.GetOrderRefundSkuList(db, []string{order.VendorOrderID})
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(orderDetail.VendorOrderID2),
RefundId: utils.String2Pointer(order.AfsOrderID),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
} }
// 加载购买商品
//sku, _ := dao.GetSimpleOrderSkus(db, order.VendorOrderID, nil)
//skuCount := 0
//for _, v := range sku {
// skuCount += v.Count
//}
//refundSkuCount := 0
subRefundList := make([]domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist, 0, len(afsSkuOrder))
for _, v := range afsSkuOrder {
subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{
OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID),
RefundFee: utils.Int64ToPointer(v.UserMoney),
})
//refundSkuCount += v.Count
}
// 全退退运费
//if skuCount == refundSkuCount {
// subRefundList[len(subRefundList)-1].RefundFee = utils.Int64ToPointer(*subRefundList[len(subRefundList)-1].RefundFee + orderDetail.BaseFreightMoney)
//}
param.SubRefundList = &subRefundList
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" {
param.AuditMemo = utils.String2Pointer(*param.AuditMemo + fmt.Sprintf(",%s", reason))
}
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).AgreeUserCancel(param)
} }
return err return err
} }
@@ -277,7 +380,7 @@ func (c *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, ord
// 发起全款退款 // 发起全款退款
func (c *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { func (c *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
return fmt.Errorf("%s不支持售后全额退款请让买家发起退款", model.VendorChineseNames[model.VendorIDMTWM]) return fmt.Errorf("%s不支持售后全额退款请让买家发起退款", model.VendorChineseNames[model.VendorIDTaoVegetable])
} }
// 发起部分退款 // 发起部分退款
@@ -295,7 +398,7 @@ func (c *PurchaseHandler) GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID,
} }
} }
} }
if order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDMTWM); err == nil { if order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDTaoVegetable); err == nil {
orderAfsInfo.AfsTotalShopMoney = order.TotalShopMoney + afsTotalShopMoney orderAfsInfo.AfsTotalShopMoney = order.TotalShopMoney + afsTotalShopMoney
} }
return orderAfsInfo, err return orderAfsInfo, err

View File

@@ -31,12 +31,19 @@ func orderStatusChangeNotice(order *model.GoodsOrder, orderStatus string) (*requ
if len(skuList) == model.NO { if len(skuList) == model.NO {
return nil, fmt.Errorf("订单商品列表为零,请管理员检查") return nil, fmt.Errorf("订单商品列表为零,请管理员检查")
} }
for _, v := range skuList { orderDetail, err := getAPI(order.VendorOrgCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
}})
if err != nil {
return nil, err
}
for _, v := range *orderDetail.SubOrderResponseList {
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{ workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
BizSubOrderId: utils.Int64ToPointer(utils.Str2Int64(v.VendorSubOrderID)), BizSubOrderId: v.BizSubOrderId,
SkuCode: utils.String2Pointer(v.VendorSkuID), SkuCode: v.SkuCode,
PickSaleQuantity: utils.String2Pointer(utils.Int2Str(v.Count)), PickSaleQuantity: utils.String2Pointer(utils.Float64ToStr(*v.BuySaleQuantity)),
PickStockQuantity: utils.String2Pointer(utils.Int2Str(v.Count)), PickStockQuantity: utils.String2Pointer(utils.Float64ToStr(*v.BuyStockQuantity)),
} }
workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo) workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo)
} }
@@ -79,12 +86,24 @@ func OrderStatusChangeDelivery(order *model.GoodsOrder, orderStatus string) *req
func getOrderCancelList(api *tao_vegetable.API, order *model.GoodsOrder) (*domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) { func getOrderCancelList(api *tao_vegetable.API, order *model.GoodsOrder) (*domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) {
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{ param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{ RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
OutOrderId: utils.String2Pointer(order.VendorOrderID), OutOrderId: utils.String2Pointer(order.VendorOrderID2),
StoreId: utils.String2Pointer(order.VendorStoreID), StoreId: utils.String2Pointer(order.VendorStoreID),
OutSubOrderIds: nil, OutSubOrderIds: nil,
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
}, },
} }
skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), order.VendorOrderID, nil)
if err != nil {
return nil, err
}
outSubOrderIds := make([]string, 0, len(skuList))
for _, v := range skuList {
outSubOrderIds = append(outSubOrderIds, v.VendorSubOrderID)
}
param.RefundCsApplyRenderDTO.OutSubOrderIds = &outSubOrderIds
return api.PartialRefundReason(param) return api.PartialRefundReason(param)
} }

View File

@@ -440,7 +440,7 @@ func (p *PurchaseHandler) onStoreStatusChanged(msg *mtwmapi.CallbackMsg) (respon
} }
if err == nil { if err == nil {
err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDMTWM, storeStatus) err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDTaoVegetable, storeStatus)
} }
response = mtwmapi.Err2CallbackResponse(err, "") response = mtwmapi.Err2CallbackResponse(err, "")
// 操作日志(美团外卖) // 操作日志(美团外卖)

View File

@@ -225,7 +225,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
api := getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID) api := getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID)
if isCreate { if isCreate {
failedList, err = createTaoVegetable(api, storeSkuList, vendorStoreID, storeID, syncType) failedList, err = createTaoVegetable(ctx, api, storeSkuList, vendorStoreID, storeID, syncType)
globals.SugarLogger.Debugf("创建淘鲜达商品异常:%v", err) globals.SugarLogger.Debugf("创建淘鲜达商品异常:%v", err)
} else { } else {
failedList, err = UpdateTaoVegetable(api, storeSkuList, vendorStoreID, storeID, syncType) failedList, err = UpdateTaoVegetable(api, storeSkuList, vendorStoreID, storeID, syncType)
@@ -278,7 +278,7 @@ func UpdateTaoVegetable(api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSync
} }
// createTaoVegetable 创建淘鲜达商品 // createTaoVegetable 创建淘鲜达商品
func createTaoVegetable(api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSyncInfo, vendorStoreID string, storeID int, syncType string) (failedList []*partner.StoreSkuInfoWithErr, err error) { func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSyncInfo, vendorStoreID string, storeID int, syncType string) (failedList []*partner.StoreSkuInfoWithErr, err error) {
createPram := &request585.AlibabaWdkSkuAddRequest{} createPram := &request585.AlibabaWdkSkuAddRequest{}
param := make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0) param := make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0)
totalCount := len(storeSkuList) totalCount := len(storeSkuList)
@@ -376,22 +376,30 @@ func createTaoVegetable(api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSync
createPram.ParamList = &param createPram.ParamList = &param
result, err := api.AddStoreSku(createPram) result, err := api.AddStoreSku(createPram)
globals.SugarLogger.Debugf("创建淘鲜达商品异常 result :%s", utils.Format4Output(result, false)) globals.SugarLogger.Debugf("创建淘鲜达商品异常 result :%s", utils.Format4Output(result, false))
if err != nil { if err != nil {
globals.SugarLogger.Debugf("创建淘鲜达商品异常:%s", err.Error()) globals.SugarLogger.Debugf("创建淘鲜达商品异常:%s", err.Error())
} }
// 记录失败的同步数据 // 记录失败的同步数据
failedList, vendorSkuIdMap = SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], syncType) failedList2, vendorSkuIdMap2 := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], syncType)
failedList = append(failedList, failedList2...)
for k, v := range vendorSkuIdMap2 {
vendorSkuIdMap[k] = v
}
createPram.ParamList = nil createPram.ParamList = nil
param = make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0) param = make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0)
} }
} }
globals.SugarLogger.Debugf("vendorSkuIdMap=====err := %v", utils.Format4Output(vendorSkuIdMap, false))
var successSku = make([]int, 0, len(vendorSkuIdMap))
for _, v := range storeSkuList { for _, v := range storeSkuList {
if k, ok := vendorSkuIdMap[utils.Int2Str(v.SkuID)]; ok { if k, ok := vendorSkuIdMap[utils.Int2Str(v.SkuID)]; ok {
v.VendorSkuID = k v.VendorSkuID = k
successSku = append(successSku, v.SkuID)
} }
} }
failedListStock := updateStoreSkusStockByCreate(ctx, api, storeID, vendorStoreID, successSku)
failedList = append(failedList, failedListStock...)
globals.SugarLogger.Debugf("storeSkuList=====err := %s", utils.Format4Output(storeSkuList, false)) globals.SugarLogger.Debugf("storeSkuList=====err := %s", utils.Format4Output(storeSkuList, false))
globals.SugarLogger.Debugf("createTaoVegetable=====err := %v", err) globals.SugarLogger.Debugf("createTaoVegetable=====err := %v", err)
@@ -543,6 +551,41 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg
return failedList, err return failedList, err
} }
// updateStoreSkusStockByCreate 创建时更新库存数量
func updateStoreSkusStockByCreate(ctx *jxcontext.Context, api *tao_vegetable.API, storeID int, vendorStoreID string, storeSkuList []int) (failedList []*partner.StoreSkuInfoWithErr) {
param := request589.AlibabaWdkStockPublishRequest{}
batchStockPublishDto := &domain589.AlibabaWdkStockPublishBatchStockPublishDto{
UpdateType: utils.Int64ToPointer(tao_vegetable.UpdateTypeStoke),
BillNo: utils.String2Pointer(utils.Int64ToStr(time.Now().UnixNano())),
BillType: utils.Int64ToPointer(tao_vegetable.UpdateTypeStokeBillType),
PublishSource: utils.String2Pointer(vendorStoreID),
ShopCode: utils.String2Pointer(vendorStoreID),
Operator: utils.String2Pointer(ctx.GetUserName()),
StockPublishDtos: nil,
}
stockPublishDtos := make([]domain589.AlibabaWdkStockPublishStockPublishDto, 0, 0)
for index, v := range storeSkuList {
stockPublishDtos = append(stockPublishDtos, domain589.AlibabaWdkStockPublishStockPublishDto{
SkuCode: utils.String2Pointer(utils.Int2Str(v)),
Quantity: utils.String2Pointer("9999"),
OrderNo: utils.String2Pointer(fmt.Sprintf("%s_%d_%d", vendorStoreID, time.Now().UnixNano(), 84671)),
OrderType: utils.String2Pointer("10006800"), // 这个不太确定
})
if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || (index+1) == len(storeSkuList) {
batchStockPublishDto.StockPublishDtos = &stockPublishDtos
param.BatchStockPublishDto = batchStockPublishDto
if err := api.StoreSkuStock(&param); err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "更新库存错误")...)
}
stockPublishDtos = make([]domain589.AlibabaWdkStockPublishStockPublishDto, 0, 0)
param.BatchStockPublishDto = nil
}
}
globals.SugarLogger.Debugf("UpdateStoreSkusStock=====err := %v", failedList)
return failedList
}
// UpdateStoreSkusStock 操作更新库存数量
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
api := getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID) api := getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID)

View File

@@ -210,9 +210,6 @@ func (p *PurchaseHandler) getUploadImgPoiCode() (poiCode string) {
// getAPI 包含门店token // getAPI 包含门店token
func getAPI(appOrgCode string, storeID int, vendorStoreID string) (apiObj *tao_vegetable.API) { func getAPI(appOrgCode string, storeID int, vendorStoreID string) (apiObj *tao_vegetable.API) {
if appOrgCode == "" {
globals.SugarLogger.Debugf("getAPI appOrgCode is empty")
}
if appOrgCode != "" { if appOrgCode != "" {
apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API) apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API)
} else if appOrgCode == "" && vendorStoreID != "" { } else if appOrgCode == "" && vendorStoreID != "" {

View File

@@ -699,7 +699,7 @@ func (c *OrderController) ConfirmReceiveGoods() {
}) })
} }
// @Title 同意或拒绝用户取消订单申请 // @Title 同意或拒绝用户取消订单申请 (饿百)
// @Description 同意或拒绝用户取消订单申请 // @Description 同意或拒绝用户取消订单申请
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param vendorOrderID formData string true "订单ID" // @Param vendorOrderID formData string true "订单ID"

View File

@@ -89,7 +89,7 @@ func (c *TaoBaoVegetableController) OrderStatus() {
} }
// 获取body参数 // 获取body参数
order, err := api.TaoVegetableApi.ReaderOrderInfo(c.Ctx.Request) order, body, err := api.TaoVegetableApi.ReaderOrderInfo(c.Ctx.Request)
globals.SugarLogger.Debugf("order_status ReaderOrderInfo:= %s", utils.Format4Output(order, false)) globals.SugarLogger.Debugf("order_status ReaderOrderInfo:= %s", utils.Format4Output(order, false))
globals.SugarLogger.Debugf("order_status ReaderOrderInfo:= %s", utils.Format4Output(order, false)) globals.SugarLogger.Debugf("order_status ReaderOrderInfo:= %s", utils.Format4Output(order, false))
if err != nil { if err != nil {
@@ -99,21 +99,24 @@ func (c *TaoBaoVegetableController) OrderStatus() {
} }
// 验签 // 验签
sign := Sign(values, utils.Format4Output(order, false), api.TaoVegetableApi.GetAppSecret()) sign := Sign(values, body, api.TaoVegetableApi.GetAppSecret())
switch order.MerchantCode {
case "CSSJ": // 淘宝回调地址检测
if sign != values.Get("sign") { if sign != values.Get("sign") {
c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名")) c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名"))
c.ServeJSON() c.ServeJSON()
return return
} /*else { } else {
c.Data["json"] = tao_vegetable.CallBackResultSign(nil) c.Data["json"] = tao_vegetable.CallBackResultSign(nil)
c.ServeJSON() c.ServeJSON()
return return
}*/ }
default:
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusChange, utils.Int64ToStr(order.BizOrderId), order) callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusChange, utils.Int64ToStr(order.BizOrderId), order)
c.Data["json"] = callbackResponse c.Data["json"] = callbackResponse
c.ServeJSON() c.ServeJSON()
return return
}
} }
// ApplyCancelOrder 用户发起售后申请 // ApplyCancelOrder 用户发起售后申请
@@ -130,7 +133,7 @@ func (c *TaoBaoVegetableController) ApplyCancelOrder() {
return return
} }
afsOrder, err := api.TaoVegetableApi.UserApplyRefund(c.Ctx.Request) afsOrder, body, err := api.TaoVegetableApi.UserApplyRefund(c.Ctx.Request)
globals.SugarLogger.Debugf("ApplyCancelOrder := %s", utils.Format4Output(afsOrder, false)) globals.SugarLogger.Debugf("ApplyCancelOrder := %s", utils.Format4Output(afsOrder, false))
globals.SugarLogger.Debugf("ApplyCancelOrder err := %s", utils.Format4Output(err, false)) globals.SugarLogger.Debugf("ApplyCancelOrder err := %s", utils.Format4Output(err, false))
if err != nil { if err != nil {
@@ -141,8 +144,10 @@ func (c *TaoBaoVegetableController) ApplyCancelOrder() {
} }
// 验签 FFF779F16365992BD721C9C1A027F03C // 验签 FFF779F16365992BD721C9C1A027F03C
sign := Sign(values, utils.Format4Output(afsOrder, false), api.TaoVegetableApi.GetAppSecret()) sign := Sign(values, body, api.TaoVegetableApi.GetAppSecret())
if sign != values.Get("sign") { // 76626F983F0F7E4A159AD64F9B13B332 switch afsOrder.MerchantCode {
case "CSSJ":
if sign != values.Get("sign") { // E8C3B7D19ECCB6618CB0F2C30BB086EC
c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名")) c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名"))
c.ServeJSON() c.ServeJSON()
return return
@@ -151,11 +156,13 @@ func (c *TaoBaoVegetableController) ApplyCancelOrder() {
c.ServeJSON() c.ServeJSON()
return return
} }
default:
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusApplyAfs, afsOrder.OutOrderId, afsOrder) callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusApplyAfs, afsOrder.OutOrderId, afsOrder)
globals.SugarLogger.Debugf("callbackResponse response : %s", utils.Format4Output(callbackResponse, false))
c.Data["json"] = callbackResponse c.Data["json"] = callbackResponse
c.ServeJSON() c.ServeJSON()
return return
}
} }
// UserCancelRefund 用户取消售后 // UserCancelRefund 用户取消售后
@@ -172,7 +179,7 @@ func (c *TaoBaoVegetableController) UserCancelRefund() {
return return
} }
afsOrder, err := api.TaoVegetableApi.UserCancelRefundApply(c.Ctx.Request) afsOrder, body, err := api.TaoVegetableApi.UserCancelRefundApply(c.Ctx.Request)
globals.SugarLogger.Debugf("UserCancelRefund := %s", utils.Format4Output(afsOrder, false)) globals.SugarLogger.Debugf("UserCancelRefund := %s", utils.Format4Output(afsOrder, false))
globals.SugarLogger.Debugf("UserCancelRefund err := %s", utils.Format4Output(err, false)) globals.SugarLogger.Debugf("UserCancelRefund err := %s", utils.Format4Output(err, false))
if err != nil { if err != nil {
@@ -183,21 +190,25 @@ func (c *TaoBaoVegetableController) UserCancelRefund() {
} }
// 验签 // 验签
sign := Sign(values, utils.Format4Output(afsOrder, false), api.TaoVegetableApi.GetAppSecret()) sign := Sign(values, body, api.TaoVegetableApi.GetAppSecret())
switch afsOrder.MerchantCode {
case "CSSJ":
if sign != values.Get("sign") { if sign != values.Get("sign") {
c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名")) c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名"))
c.ServeJSON() c.ServeJSON()
return return
} /*else { } else {
c.Data["json"] = tao_vegetable.CallBackResultSign(nil) c.Data["json"] = tao_vegetable.CallBackResultSign(nil)
c.ServeJSON() c.ServeJSON()
return return
}*/ }
default:
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusCancelAfs, afsOrder.OutOrderId, afsOrder) callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusCancelAfs, afsOrder.OutOrderId, afsOrder)
c.Data["json"] = callbackResponse c.Data["json"] = callbackResponse
c.ServeJSON() c.ServeJSON()
return return
}
} }
// CancelOnSaleRefundOrder 用户售中取消(走订单取消流程) // CancelOnSaleRefundOrder 用户售中取消(走订单取消流程)
@@ -214,7 +225,7 @@ func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() {
return return
} }
afsOrder, err := api.TaoVegetableApi.OnSaleRefundOrder(c.Ctx.Request) afsOrder, body, err := api.TaoVegetableApi.OnSaleRefundOrder(c.Ctx.Request)
globals.SugarLogger.Debugf("CancelOnSaleRefundOrder := %s", utils.Format4Output(afsOrder, false)) globals.SugarLogger.Debugf("CancelOnSaleRefundOrder := %s", utils.Format4Output(afsOrder, false))
globals.SugarLogger.Debugf("CancelOnSaleRefundOrder err := %s", utils.Format4Output(err, false)) globals.SugarLogger.Debugf("CancelOnSaleRefundOrder err := %s", utils.Format4Output(err, false))
if err != nil { if err != nil {
@@ -225,21 +236,24 @@ func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() {
} }
// 验签 // 验签
sign := Sign(values, utils.Format4Output(afsOrder, false), api.TaoVegetableApi.GetAppSecret()) sign := Sign(values, body, api.TaoVegetableApi.GetAppSecret())
switch afsOrder.PartCancelRequest.MerchantCode {
case "CSSJ":
if sign != values.Get("sign") { if sign != values.Get("sign") {
c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名")) c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名"))
c.ServeJSON() c.ServeJSON()
return return
} /*else { } else {
c.Data["json"] = tao_vegetable.CallBackResultSign(nil) c.Data["json"] = tao_vegetable.CallBackResultSign(nil)
c.ServeJSON() c.ServeJSON()
return return
}*/ }
default:
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder) callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder)
c.Data["json"] = callbackResponse c.Data["json"] = callbackResponse
c.ServeJSON() c.ServeJSON()
return return
}
} }
// RefundOrderSuccess 用户售后成功通知,只有退款成功了才会通知(商户拒绝退款,不会通知) // RefundOrderSuccess 用户售后成功通知,只有退款成功了才会通知(商户拒绝退款,不会通知)
@@ -256,7 +270,7 @@ func (c *TaoBaoVegetableController) RefundOrderSuccess() {
return return
} }
refundSuccess, err := api.TaoVegetableApi.RefundOrderFinish(c.Ctx.Request) refundSuccess, body, err := api.TaoVegetableApi.RefundOrderFinish(c.Ctx.Request)
globals.SugarLogger.Debugf("RefundOrderSuccess := %s", utils.Format4Output(refundSuccess, false)) globals.SugarLogger.Debugf("RefundOrderSuccess := %s", utils.Format4Output(refundSuccess, false))
globals.SugarLogger.Debugf("RefundOrderSuccess err := %s", utils.Format4Output(err, false)) globals.SugarLogger.Debugf("RefundOrderSuccess err := %s", utils.Format4Output(err, false))
if err != nil { if err != nil {
@@ -266,21 +280,24 @@ func (c *TaoBaoVegetableController) RefundOrderSuccess() {
return return
} }
// 验签 // 验签
sign := Sign(values, utils.Format4Output(refundSuccess, false), api.TaoVegetableApi.GetAppSecret()) sign := Sign(values, body, api.TaoVegetableApi.GetAppSecret())
switch refundSuccess.MerchantCode {
case "CSSJ":
if sign != values.Get("sign") { if sign != values.Get("sign") {
c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名")) c.Data["json"] = tao_vegetable.CallBackResultSign(fmt.Errorf("非法签名"))
c.ServeJSON() c.ServeJSON()
return return
} /*else { } else {
c.Data["json"] = tao_vegetable.CallBackResultSign(nil) c.Data["json"] = tao_vegetable.CallBackResultSign(nil)
c.ServeJSON() c.ServeJSON()
return return
}*/ }
default:
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusRefundSuccess, refundSuccess.OutSubOrderId, refundSuccess) callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusRefundSuccess, refundSuccess.OutMainRefundId, refundSuccess)
c.Data["json"] = callbackResponse c.Data["json"] = callbackResponse
c.ServeJSON() c.ServeJSON()
return return
}
} }
func Sign(param url.Values, data, secret string) string { func Sign(param url.Values, data, secret string) string {
@@ -293,10 +310,11 @@ func Sign(param url.Values, data, secret string) string {
} }
sort.Strings(publicParam) sort.Strings(publicParam)
resultParam := strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(data, "\n", ""), "\t", ""), " ", "") resultParam := strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(data, "\n", ""), "\t", ""), " ", ""), "\r", "")
if strings.Contains(resultParam, `\u0026`) { if strings.Contains(resultParam, `\u0026`) {
resultParam = strings.ReplaceAll(resultParam, `\u0026`, "&") resultParam = strings.ReplaceAll(resultParam, `\u0026`, "&")
} }
cc := secret + strings.Join(publicParam, "") + resultParam + secret cc := secret + strings.Join(publicParam, "") + resultParam + secret
return fmt.Sprintf("%X", md5.Sum([]byte(cc))) return fmt.Sprintf("%X", md5.Sum([]byte(cc)))
} }