添加淘鲜达
This commit is contained in:
@@ -53,3 +53,13 @@ func GetOrderIDFromMap(orderMap map[string]interface{}) string {
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func GetAfsIDFromMap(orderMap map[string]interface{}) string {
|
||||
if orderID := orderMap["refund_order_id"]; orderID != nil {
|
||||
if tryOrderID, ok := orderID.(string); ok {
|
||||
return tryOrderID
|
||||
}
|
||||
return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.Orde
|
||||
func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interface{}) (afsOrder *model.AfsOrder) {
|
||||
afsOrder = &model.AfsOrder{
|
||||
VendorID: model.VendorIDEBAI,
|
||||
AfsOrderID: GetOrderIDFromMap(orderData),
|
||||
AfsOrderID: GetAfsIDFromMap(orderData),
|
||||
VendorOrderID: GetOrderIDFromMap(orderData),
|
||||
}
|
||||
order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID)
|
||||
|
||||
@@ -72,8 +72,6 @@ func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, payType int,
|
||||
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
|
||||
} else {
|
||||
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
|
||||
globals.SugarLogger.Debugf("===============result: %s", utils.Format4Output(result, false))
|
||||
globals.SugarLogger.Debugf("===============result: %s", utils.Format4Output(err, false))
|
||||
if err == nil {
|
||||
var result2 tonglianpayapi.PayInfo
|
||||
json.Unmarshal([]byte(result.PayInfo), &result2)
|
||||
|
||||
@@ -93,12 +93,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
||||
return order, result, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) getOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
return p.getOrderRider(vendorOrgCode, vendorStoreID, param)
|
||||
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) {
|
||||
@@ -570,6 +566,7 @@ func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
|
||||
return err
|
||||
}
|
||||
|
||||
// SelfDeliverDelivered 自配送订单送达
|
||||
func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderArrived(utils.Str2Int64(order.VendorOrderID))
|
||||
|
||||
@@ -744,6 +744,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin
|
||||
return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
||||
}
|
||||
|
||||
// UpdateStoreSkusSpecTag 更新限购
|
||||
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
||||
var foodDataList = []map[string]interface{}{}
|
||||
for _, v := range storeSkuList {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
|
||||
@@ -1,73 +1,29 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/netprinter"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 美团回调接口
|
||||
func OnCallbackMsg(msg *mtwmapi.CallbackMsg, msgType string) (response *mtwmapi.CallbackResponse) {
|
||||
// 获取平台门店id
|
||||
//_, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), GetVendorStoreIDFromMsg(msg), model.VendorIDMTWM, GetVendorAppIdFromMsg(msg))
|
||||
//if err != nil && strings.Contains(err.Error(), "no row found") {
|
||||
// forwardOrderToGy(msg, msgType)
|
||||
// return mtwmapi.SuccessResponse
|
||||
//}
|
||||
// OnCallbackMsg 淘宝回调接口
|
||||
func OnCallbackMsg(orderStatus, orderId string, msg interface{}) (response *tao_vegetable.CallBackResult) {
|
||||
if CurPurchaseHandler != nil {
|
||||
if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged || msg.Cmd == mtwmapi.MsgTypeStoreAuditStatusChanged {
|
||||
response = CurPurchaseHandler.onStoreStatusChanged(msg)
|
||||
} else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
|
||||
response = CurPurchaseHandler.onNumberDowngrade(msg)
|
||||
} else if msg.Cmd == mtwmapi.MsgTypeStoreBind {
|
||||
// 门店授权发生变化 17,失去授权
|
||||
vendorStoreID := msg.FormData.Get("app_poi_code")
|
||||
storeDetail, _ := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDMTWM, "")
|
||||
_, err := netprinter.PrintStoreStatus(jxcontext.AdminCtx, storeDetail, model.VendorIDMTWM, -9)
|
||||
response = mtwmapi.Err2CallbackResponse(err, "")
|
||||
} else {
|
||||
if orderID := GetOrderIDFromMsg(msg); orderID != "" {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
switch msg.Cmd {
|
||||
case mtwmapi.MsgTypeWaybillStatus:
|
||||
response = CurPurchaseHandler.onWaybillMsg(msg)
|
||||
default:
|
||||
response = CurPurchaseHandler.onOrderMsg(msg)
|
||||
}
|
||||
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
|
||||
}
|
||||
/*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
utils.CallFuncAsync(func() {
|
||||
OnFinancialMsg(msg)
|
||||
})
|
||||
} */
|
||||
}
|
||||
jxutils.CallMsgHandler(func() {
|
||||
response = CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg)
|
||||
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
||||
func GetOrderIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
return msg.FormData.Get(mtwmapi.KeyOrderID)
|
||||
}
|
||||
|
||||
func GetVendorStoreIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
return msg.FormData.Get(mtwmapi.KeyAppPoiCode)
|
||||
}
|
||||
|
||||
func GetVendorAppIdFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
return msg.FormData.Get(mtwmapi.KeyAppID)
|
||||
}
|
||||
|
||||
func forwardOrderToGy(msg *mtwmapi.CallbackMsg, msgType string) {
|
||||
func forwardOrderToGy(msg *mtwmapi.CallbackMsg, orderStatus string) {
|
||||
cl := http.Client{}
|
||||
callbackUrl := GetMsgCallBackUrl(msgType, msg.AppID)
|
||||
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtwm/"+callbackUrl, strings.NewReader(msg.FormData.Encode()))
|
||||
callbackUrl := GetMsgCallBackUrl(orderStatus, msg.AppID)
|
||||
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/taoBaoVegetable/"+callbackUrl, strings.NewReader(msg.FormData.Encode()))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -78,40 +34,14 @@ func forwardOrderToGy(msg *mtwmapi.CallbackMsg, msgType string) {
|
||||
func GetMsgCallBackUrl(msgType, appId string) string {
|
||||
interfaceUrl := ""
|
||||
switch msgType {
|
||||
case mtwmapi.MsgTypeWaybillStatus:
|
||||
interfaceUrl = "/waybillStatus"
|
||||
case mtwmapi.MsgTypeNewOrder:
|
||||
interfaceUrl = "/newOrder"
|
||||
case mtwmapi.MsgTypeOrderAccepted:
|
||||
interfaceUrl = "/orderAccepted"
|
||||
case mtwmapi.MsgTypeOrderFinished:
|
||||
interfaceUrl = "/orderFinished"
|
||||
case mtwmapi.MsgTypeOrderFinancial:
|
||||
interfaceUrl = "/orderFinancial"
|
||||
case mtwmapi.MsgTypeOrderCanceled:
|
||||
interfaceUrl = "/orderCanceled"
|
||||
case mtwmapi.MsgTypeUserUrgeOrder:
|
||||
interfaceUrl = "/userUrgeOrder"
|
||||
case mtwmapi.MsgTypePrivateNumberDowngrade:
|
||||
interfaceUrl = "/numberDowngrade"
|
||||
case mtwmapi.MsgTypeOrderModified:
|
||||
interfaceUrl = "/orderModified"
|
||||
case mtwmapi.MsgTypeOrderRefund:
|
||||
interfaceUrl = "/orderRefund"
|
||||
case mtwmapi.MsgTypeOrderPartialRefund:
|
||||
interfaceUrl = "/orderPartialRefund"
|
||||
case mtwmapi.MsgTypeOrderFinishedPickup:
|
||||
interfaceUrl = "/orderFinishedPickup"
|
||||
case mtwmapi.MsgTypeStoreStatusChanged:
|
||||
interfaceUrl = "/storeStatusChanged"
|
||||
case mtwmapi.MsgTypeStoreAuditStatusChanged:
|
||||
interfaceUrl = "/storeAuditStatusChanged"
|
||||
case mtwmapi.MsgTypeSkuDelete:
|
||||
interfaceUrl = "/skuDelete"
|
||||
case mtwmapi.MsgTypeStoreBind:
|
||||
interfaceUrl = "/storeBind"
|
||||
case tao_vegetable.OrderStatusApplyAfs:
|
||||
interfaceUrl = "/applyCancelOrder "
|
||||
case tao_vegetable.OrderStatusCancelAfs:
|
||||
interfaceUrl = "/userCancelRefund"
|
||||
case tao_vegetable.OrderStatusOnSaleCancel:
|
||||
interfaceUrl = "/cancelOnSaleRefundOrder"
|
||||
default:
|
||||
globals.SugarLogger.Errorf("美团超市[app_id :=%s ,callbackUrl := %s ]回调推送到果园错误,回调地址不正确", appId, msgType)
|
||||
globals.SugarLogger.Errorf("淘宝[app_id :=%s ,callbackUrl := %s ]回调推送到果园错误,回调地址不正确", appId, msgType)
|
||||
}
|
||||
return interfaceUrl
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||
"net/url"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -131,17 +133,16 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrd
|
||||
}
|
||||
|
||||
// 存储美团正向订单结账信息
|
||||
func (p *PurchaseHandler) OnOrderDetail(result map[string]interface{}, operation string) (err error) {
|
||||
func (p *PurchaseHandler) OnOrderDetail(result *domain591.AlibabaAelophyOrderGetOrderResponse, operation string) (err error) {
|
||||
err = partner.CurOrderManager.SaveOrderFinancialInfo(p.OrderDetail2Financial(result), operation)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) OrderDetail2Financial(result map[string]interface{}) (orderFinancial *model.OrderFinancial) {
|
||||
func (p *PurchaseHandler) OrderDetail2Financial(result *domain591.AlibabaAelophyOrderGetOrderResponse) (orderFinancial *model.OrderFinancial) {
|
||||
orderFinancial = &model.OrderFinancial{
|
||||
VendorID: model.VendorIDMTWM,
|
||||
VendorOrderID: utils.Int64ToStr(utils.MustInterface2Int64(result["order_id"])),
|
||||
VendorID: model.VendorIDTaoVegetable,
|
||||
VendorOrderID: utils.Int64ToStr(*result.BizOrderId),
|
||||
}
|
||||
// orderFinancial.DeliveryConfirmTime = utils.Str2TimeWithDefault(utils.Interface2String(result["order_completed_time"]), utils.DefaultTimeValue)
|
||||
order, err := partner.CurOrderManager.LoadOrder(orderFinancial.VendorOrderID, orderFinancial.VendorID)
|
||||
jxStoreID := 0
|
||||
if err == nil {
|
||||
@@ -154,92 +155,58 @@ func (p *PurchaseHandler) OrderDetail2Financial(result map[string]interface{}) (
|
||||
} else {
|
||||
err = nil
|
||||
}
|
||||
if result["package_bag_money"] != nil {
|
||||
orderFinancial.BoxMoney = utils.MustInterface2Int64(result["package_bag_money"])
|
||||
}
|
||||
detail := result["detail"]
|
||||
if detail != nil {
|
||||
var data []map[string]interface{}
|
||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(detail)), &data)
|
||||
for _, x := range data {
|
||||
orderSkuFinancial := &model.OrderSkuFinancial{
|
||||
|
||||
// 订单
|
||||
for _, x := range *result.SubOrderResponseList {
|
||||
orderSkuFinancial := &model.OrderSkuFinancial{
|
||||
VendorID: orderFinancial.VendorID,
|
||||
VendorOrderID: orderFinancial.VendorOrderID,
|
||||
VendorStoreID: *result.StoreId,
|
||||
StoreID: 0,
|
||||
JxStoreID: jxStoreID,
|
||||
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(x.SkuCode)),
|
||||
SkuID: utils.Str2Int(*x.SkuCode),
|
||||
Name: utils.Interface2String(x.SkuName),
|
||||
SalePrice: *x.Price,
|
||||
Count: utils.Str2Int(*x.BuySaleQuantity),
|
||||
SkuBoxMoney: 0,
|
||||
IsAfsOrder: 0,
|
||||
}
|
||||
orderFinancial.Skus = append(orderFinancial.Skus, orderSkuFinancial)
|
||||
orderFinancial.SalePriceMoney += orderSkuFinancial.SalePrice * int64(orderSkuFinancial.Count)
|
||||
orderFinancial.SkuBoxMoney += orderSkuFinancial.SkuBoxMoney
|
||||
|
||||
// 活动
|
||||
for _, v := range *x.Activitys {
|
||||
activity := &model.OrderDiscountFinancial{
|
||||
VendorID: orderFinancial.VendorID,
|
||||
VendorOrderID: orderFinancial.VendorOrderID,
|
||||
// OrderFinancialID: orderFinancial.VendorOrderID,
|
||||
// ConfirmTime: utils.Str2TimeWithDefault(utils.Interface2String(result["ctime"]), utils.DefaultTimeValue),
|
||||
VendorStoreID: result["app_poi_code"].(string),
|
||||
StoreID: 0,
|
||||
JxStoreID: jxStoreID,
|
||||
VendorSkuID: utils.Interface2String(x["sku_id"]),
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(x["sku_id"]), 0)),
|
||||
Name: utils.Interface2String(x["food_name"]),
|
||||
SalePrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["price"])),
|
||||
Count: int(utils.MustInterface2Int64(x["quantity"])),
|
||||
SkuBoxMoney: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["box_price"])) * jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["box_num"])),
|
||||
IsAfsOrder: 0,
|
||||
}
|
||||
orderFinancial.Skus = append(orderFinancial.Skus, orderSkuFinancial)
|
||||
orderFinancial.SalePriceMoney += orderSkuFinancial.SalePrice * int64(orderSkuFinancial.Count)
|
||||
orderFinancial.SkuBoxMoney += orderSkuFinancial.SkuBoxMoney
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no detail", orderFinancial.VendorOrderID)
|
||||
}
|
||||
extras := result["extras"]
|
||||
if extras != nil {
|
||||
var data []map[string]interface{}
|
||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(extras)), &data)
|
||||
for _, x := range data {
|
||||
if x["rider_fee"] == nil {
|
||||
activity := &model.OrderDiscountFinancial{
|
||||
VendorID: orderFinancial.VendorID,
|
||||
VendorOrderID: orderFinancial.VendorOrderID,
|
||||
// ActivityName: utils.Interface2String(x["remark"]),
|
||||
// ActivityMoney: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["reduce_fee"])),
|
||||
// VendorActivityID: utils.Int64ToStr(utils.MustInterface2Int64(x["act_detail_id"])),
|
||||
}
|
||||
if x["act_detail_id"] != nil { // 容错处理
|
||||
activity.VendorActivityID = utils.Int64ToStr(utils.MustInterface2Int64(x["act_detail_id"]))
|
||||
orderFinancial.Discounts = append(orderFinancial.Discounts, activity)
|
||||
}
|
||||
// 通过活动Id去取,京西活动补贴
|
||||
// orderFinancial.JxSubsidyMoney +=
|
||||
if v.ChannelActivityId != nil {
|
||||
activity.VendorActivityID = *v.ChannelActivityId
|
||||
activity.Type = tao_vegetable.ActivityTypeChannel
|
||||
}
|
||||
if v.BizActivityId != nil {
|
||||
activity.VendorActivityID = *v.BizActivityId
|
||||
activity.Type = tao_vegetable.ActivityTypeBiz
|
||||
}
|
||||
if v.MerchantActivityId != nil {
|
||||
activity.VendorActivityID = *v.MerchantActivityId
|
||||
activity.Type = tao_vegetable.ActivityTypeMerchant
|
||||
}
|
||||
orderFinancial.Discounts = append(orderFinancial.Discounts, activity)
|
||||
}
|
||||
}
|
||||
poiReceiveDetail := result["poi_receive_detail"]
|
||||
if poiReceiveDetail != nil {
|
||||
var data map[string]interface{}
|
||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(poiReceiveDetail)), &data)
|
||||
orderFinancial.ReceivableFreight = utils.MustInterface2Int64(data["logisticsFee"])
|
||||
orderFinancial.FreightMoney = utils.MustInterface2Int64(data["logisticsFee"])
|
||||
orderFinancial.ActualPayMoney = utils.MustInterface2Int64(data["onlinePayment"])
|
||||
orderFinancial.PmMoney = utils.MustInterface2Int64(data["foodShareFeeChargeByPoi"])
|
||||
orderFinancial.ShopMoney = utils.MustInterface2Int64(data["wmPoiReceiveCent"])
|
||||
for _, x := range data["actOrderChargeByMt"].([]interface{}) {
|
||||
orderFinancial.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
||||
orderFinancial.PmSubsidyMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
||||
}
|
||||
for _, x := range data["actOrderChargeByPoi"].([]interface{}) {
|
||||
orderFinancial.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no poi_receive_detail", orderFinancial.VendorOrderID)
|
||||
}
|
||||
if utils.MustInterface2Int64(result["is_third_shipping"]) == SelfDeliveryCarrierNo { // is_third_shipping int 是否是第三方配送平台配送,0表否,1表是)
|
||||
orderFinancial.SelfDeliveryDiscountMoney = orderFinancial.ReceivableFreight
|
||||
orderFinancial.DistanceFreightMoney = 0
|
||||
// 通过本地数据库去取是否转美团/达达,并计算运费
|
||||
// wayBill, err := partner.CurOrderManager.LoadWaybill(orderFinancial.VendorOrderID, orderFinancial.VendorID)
|
||||
// if err == nil {
|
||||
// orderFinancial.JxFreightMoney = wayBill.DesiredFee
|
||||
// }
|
||||
}
|
||||
// // 美团订单单独处理部分,美团正向订单接口推送时总结算金额没有计算公益捐款一分钱,是否在这里直接提前扣除?
|
||||
// // 3/18之后的订单一直都不显示公益捐款金额,而且结算现在结算到了3/18之后的订单,没有的已经不计算了,先注释
|
||||
// // 2019-04-03 10.52 询问赵mf, 此计划是必须参加的,而且是长期的,每单固定扣除一分钱
|
||||
orderFinancial.DonationMoney = PublicWelfareDonation
|
||||
// 不应该对第三方结账金额做更改,就算有异常,也要保留异常,知道问题出在哪里
|
||||
// orderFinancial.ShopMoney -= PublicWelfareDonation
|
||||
|
||||
orderFinancial.ReceivableFreight = *result.PostFee
|
||||
orderFinancial.FreightMoney = 0
|
||||
orderFinancial.ActualPayMoney = *result.PayFee
|
||||
orderFinancial.PmMoney = 0 // 平台费
|
||||
orderFinancial.ShopMoney = 0 // 应结金额
|
||||
orderFinancial.TotalDiscountMoney = *result.DiscountFee // 订单优惠总金额
|
||||
orderFinancial.PmSubsidyMoney = *result.PostDiscountPlatformFee // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
||||
orderFinancial.SelfDeliveryDiscountMoney = *result.SkuDiscountPlatformFee // 平台承担运费补贴(商家自送)+
|
||||
orderFinancial.DistanceFreightMoney = 0
|
||||
|
||||
return orderFinancial
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,12 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
|
||||
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
@@ -15,57 +14,39 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
var (
|
||||
// AfsVendorStatus2StatusMap = map[int]int{
|
||||
// mtwmapi.ResTypePending: model.AfsOrderStatusWait4Approve,
|
||||
// mtwmapi.ResTypeMerchantRefused: model.AfsOrderStatusFailed,
|
||||
// mtwmapi.ResTypeMerchantAgreed: model.AfsOrderStatusFinished,
|
||||
// mtwmapi.ResTypeCSRefused: model.AfsOrderStatusFailed,
|
||||
// mtwmapi.ResTypeCSAgreed: model.AfsOrderStatusFinished,
|
||||
// mtwmapi.ResTypeTimeoutAutoAgreed: model.AfsOrderStatusFinished,
|
||||
// mtwmapi.ResTypeAutoAgreed: model.AfsOrderStatusFinished,
|
||||
// mtwmapi.ResTypeUserCancelApply: model.AfsOrderStatusFailed,
|
||||
// mtwmapi.ResTypeUserCancelComplain: model.AfsOrderStatusFailed,
|
||||
// }
|
||||
AfsVendorStatus2StatusMap = map[string]int{
|
||||
mtwmapi.NotifyTypeApply: model.AfsOrderStatusWait4Approve,
|
||||
mtwmapi.NotifyTypePartyApply: model.AfsOrderStatusWait4Approve,
|
||||
mtwmapi.NotifyTypeSuccess: model.AfsOrderStatusFinished,
|
||||
mtwmapi.NotifyTypeReject: model.AfsOrderStatusFailed,
|
||||
mtwmapi.NotifyTypeCancelRefund: model.AfsOrderStatusFailed,
|
||||
mtwmapi.NotifyTypeCancelRefundComplaint: model.AfsOrderStatusFailed,
|
||||
tao_vegetable.OrderStatusApplyAfs: model.AfsOrderStatusWait4Approve,
|
||||
tao_vegetable.OrderStatusCancelAfs: model.AfsOrderStatusCancelAfs,
|
||||
tao_vegetable.OrderStatusRefundSuccess: model.AfsOrderStatusFinished,
|
||||
}
|
||||
)
|
||||
|
||||
func (c *PurchaseHandler) isAfsMsg(msg *mtwmapi.CallbackMsg) bool {
|
||||
if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
// refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
||||
orderID := utils.Str2Int64(GetOrderIDFromMsg(msg))
|
||||
order, _ := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDMTWM)
|
||||
func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
|
||||
if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess {
|
||||
order, _ := partner.CurOrderManager.LoadOrder(orderId, model.VendorIDTaoVegetable)
|
||||
if order != nil {
|
||||
//status, err := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), order.VendorStoreID).OrderViewStatus(orderID)
|
||||
//if err == nil {
|
||||
//return utils.Int2Str(status) == mtwmapi.OrderStatusFinished
|
||||
return true //TODO 有的美团订单售前退款,也当做售后处理试试
|
||||
//}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) OnAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnAfsOrderMsg(orderId, status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) {
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
retVal = c.onAfsOrderMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(GetOrderIDFromMsg(msg), model.VendorIDMTWM))
|
||||
retVal = c.onAfsOrderMsg(status, msg)
|
||||
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
|
||||
return retVal
|
||||
}
|
||||
|
||||
// todo 对于退款与部分退款,order.go与这个文件中对于状态的处理不一致
|
||||
func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) {
|
||||
// todo 淘宝暂无部分退款,只有整单退款
|
||||
func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) {
|
||||
var err error
|
||||
orderStatus := c.callbackAfsMsg2Status(msg)
|
||||
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)
|
||||
@@ -73,73 +54,80 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
|
||||
if dao.IsNoRowsError(err) {
|
||||
needCallNew = true
|
||||
} else {
|
||||
return mtwmapi.Err2CallbackResponse(err, "")
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if needCallNew {
|
||||
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||
var afsOrder *model.AfsOrder
|
||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
||||
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
afsOrder = &model.AfsOrder{
|
||||
VendorID: model.VendorIDMTWM,
|
||||
AfsOrderID: orderStatus.VendorOrderID,
|
||||
VendorOrderID: orderStatus.RefVendorOrderID,
|
||||
VendorStoreID: "",
|
||||
StoreID: 0,
|
||||
AfsCreatedAt: utils.Timestamp2Time(refundData.Timestamp),
|
||||
VendorAppealType: "",
|
||||
AppealType: model.AfsAppealTypeRefund,
|
||||
VendorReasonType: "",
|
||||
ReasonType: model.AfsReasonNotOthers,
|
||||
ReasonDesc: utils.LimitUTF8StringLen(refundData.Reason, 1024),
|
||||
ReasonImgList: utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024),
|
||||
RefundType: model.AfsTypePartRefund,
|
||||
afsOrder = &model.AfsOrder{
|
||||
VendorID: model.VendorIDTaoVegetable,
|
||||
AfsOrderID: orderStatus.VendorOrderID,
|
||||
VendorOrderID: orderStatus.RefVendorOrderID,
|
||||
VendorStoreID: refundData.StoreId,
|
||||
StoreID: 0,
|
||||
AfsCreatedAt: orderStatus.StatusTime,
|
||||
|
||||
VendorOrgCode: msg.AppID,
|
||||
// FreightUserMoney: afsInfo.OrderFreightMoney,
|
||||
// AfsFreightMoney: afsInfo.AfsFreight,
|
||||
// BoxMoney: afsInfo.PackagingMoney,
|
||||
// TongchengFreightMoney: afsInfo.TongchengFreightMoney,
|
||||
// SkuBoxMoney: afsInfo.MealBoxMoney,
|
||||
}
|
||||
for _, sku := range refundData.FoodList {
|
||||
orderSku := &model.OrderSkuFinancial{
|
||||
// VendorID: model.VendorIDMTWM,
|
||||
AfsOrderID: afsOrder.AfsOrderID,
|
||||
// VendorOrderID: afsOrder.VendorOrderID,
|
||||
// VendorStoreID: afsOrder.VendorStoreID,
|
||||
// StoreID: afsOrder.StoreID,
|
||||
IsAfsOrder: 1,
|
||||
VendorAppealType: status, // 原始售后方式
|
||||
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
|
||||
VendorReasonType: refundData.RefundReason,
|
||||
ReasonType: 0,
|
||||
ReasonDesc: refundData.RefundReason,
|
||||
ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024),
|
||||
RefundType: model.AfsTypeFullRefund,
|
||||
VendorOrgCode: refundData.MerchantCode,
|
||||
}
|
||||
|
||||
Count: sku.Count,
|
||||
// ConfirmTime: afsOrder.AfsCreateAt,
|
||||
VendorSkuID: sku.SkuID,
|
||||
SkuID: int(utils.Str2Int64WithDefault(sku.SkuID, 0)),
|
||||
Name: sku.FoodName,
|
||||
UserMoney: jxutils.StandardPrice2Int(sku.RefundPrice)*int64(sku.Count) + jxutils.StandardPrice2Int(sku.BoxPrice)*int64(sku.BoxNum),
|
||||
}
|
||||
if orderSku.VendorSkuID == "" || orderSku.VendorSkuID == "0" {
|
||||
orderSku.VendorSkuID = sku.AppFoodCode
|
||||
}
|
||||
refundIds := make([]int64, 0, 0)
|
||||
bizOrderIds := make([]int64, len(refundData.SubRefundOrders))
|
||||
for _, v := range refundData.SubRefundOrders {
|
||||
bizOrderIds = append(bizOrderIds, utils.Str2Int64(v.OutSubOrderId))
|
||||
}
|
||||
refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId))
|
||||
|
||||
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||
}
|
||||
//afsOrder.PmSubsidyMoney += afsOrder.RefundMoney - afsOrder.SkuUserMoney
|
||||
} else {
|
||||
if afsOrder = c.createAfsOrder(msg.FormData); afsOrder != nil {
|
||||
// if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDMTWM); err2 == nil {
|
||||
// afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg.FormData)
|
||||
afsOrder.AfsOrderID = orderStatus.VendorOrderID
|
||||
afsOrder.RefundType = model.AfsTypeFullRefund
|
||||
afsOrder.AppealType = model.AfsAppealTypeRefund
|
||||
afsOrder.VendorReasonType = ""
|
||||
afsOrder.ReasonType = model.AfsReasonNotOthers
|
||||
afsOrder.ReasonDesc = utils.LimitUTF8StringLen(refundData.Reason, 1024)
|
||||
afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024)
|
||||
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 = *taoAfsOrder[0].RefundPostFee
|
||||
afsOrder.AfsFreightMoney = *taoAfsOrder[0].RefundPostFee // 暂时未发现退货取件费用
|
||||
afsOrder.BoxMoney = 0 // 餐盒费
|
||||
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||
|
||||
// 订单商品详细信息
|
||||
skuList, err := getAPI(refundData.MerchantCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||
StoreId: utils.String2Pointer(refundData.StoreId),
|
||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(refundData.OutOrderId)),
|
||||
}})
|
||||
if err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
for _, sku := range *skuList.SubOrderResponseList {
|
||||
orderSku := &model.OrderSkuFinancial{
|
||||
Count: utils.Str2Int(*sku.BuySaleQuantity),
|
||||
VendorSkuID: *sku.SkuCode,
|
||||
SkuID: utils.Str2Int(*sku.SkuCode),
|
||||
Name: *sku.SkuName,
|
||||
UserMoney: *sku.OriginalFee - *sku.DiscountFee,
|
||||
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品
|
||||
}
|
||||
|
||||
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||||
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||
}
|
||||
if afsOrder != nil {
|
||||
//直接就来一个新的售后单,并且还是售后完成的
|
||||
@@ -149,70 +137,132 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
|
||||
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
||||
}
|
||||
} else {
|
||||
// 用户取消售后
|
||||
if status == 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 = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, afsOrder[0], "VendorOrderID", "VendorID")
|
||||
return err
|
||||
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil {
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
// 删除售后商品
|
||||
if err = utils.CallFuncLogError(func() error {
|
||||
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
|
||||
VendorOrderID: afsOrder[0].VendorOrderID,
|
||||
VendorID: afsOrder[0].VendorID,
|
||||
IsAfsOrder: 1,
|
||||
}, "VendorOrderID", "VendorID", "IsAfsOrder")
|
||||
return err
|
||||
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil {
|
||||
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 {
|
||||
// 订单回调全额退款接口时,将订单状态修改为取消
|
||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
||||
if refundData.NotifyType == "agree" && msg.Cmd == mtwmapi.MsgTypeOrderRefund {
|
||||
order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM)
|
||||
order.Status = model.OrderStatusCanceled
|
||||
dao.UpdateEntity(dao.GetDB(), order, "Status")
|
||||
if err == nil && status == tao_vegetable.OrderStatusRefundSuccess {
|
||||
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
|
||||
goodsOrder.Status = model.OrderStatusCanceled
|
||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||
}
|
||||
}
|
||||
}
|
||||
return mtwmapi.Err2CallbackResponse(err, "")
|
||||
return tao_vegetable.CallBackResultInfo(err)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) createAfsOrder(orderData url.Values) (afsOrder *model.AfsOrder) {
|
||||
afsOrder, err := partner.CurOrderManager.CreateAfsOrderFromOrder(orderData.Get("order_id"), model.VendorIDMTWM)
|
||||
if err == nil {
|
||||
afsOrder.AfsOrderID = orderData.Get("refund_id")
|
||||
afsOrder.AfsCreatedAt = utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp")))
|
||||
if afsOrder.AfsOrderID == "" {
|
||||
afsOrder.AfsOrderID = afsOrder.VendorOrderID
|
||||
}
|
||||
} else {
|
||||
afsOrder = nil
|
||||
}
|
||||
return afsOrder
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackAfsMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) {
|
||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
||||
func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{}) (orderStatus *model.OrderStatus) {
|
||||
orderStatus = &model.OrderStatus{
|
||||
VendorID: model.VendorIDMTWM,
|
||||
OrderType: model.OrderTypeAfsOrder,
|
||||
RefVendorOrderID: utils.Int64ToStr(refundData.OrderID),
|
||||
RefVendorID: model.VendorIDMTWM,
|
||||
VendorStatus: fmt.Sprintf("%s:%d", refundData.NotifyType, refundData.ResType),
|
||||
Status: c.GetAfsStatusFromVendorStatus(refundData.ResType, refundData.NotifyType),
|
||||
StatusTime: utils.Timestamp2Time(refundData.Timestamp),
|
||||
Remark: refundData.Reason,
|
||||
VendorID: model.VendorIDTaoVegetable,
|
||||
OrderType: model.OrderTypeAfsOrder,
|
||||
RefVendorID: model.VendorIDTaoVegetable,
|
||||
}
|
||||
if refundData.RefundID > 0 {
|
||||
orderStatus.VendorOrderID = utils.Int64ToStr(refundData.RefundID)
|
||||
} else {
|
||||
|
||||
switch status {
|
||||
case tao_vegetable.OrderStatusApplyAfs:
|
||||
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||
orderStatus.RefVendorOrderID = refundData.OutOrderId
|
||||
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消")
|
||||
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs)
|
||||
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||
orderStatus.Remark = refundData.Remarks
|
||||
orderStatus.VendorOrderID = refundData.BizRefundId
|
||||
case tao_vegetable.OrderStatusCancelAfs:
|
||||
refundData := msg.(*tao_vegetable.UserCancelRefundApply)
|
||||
orderStatus.RefVendorOrderID = refundData.OutOrderId
|
||||
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请")
|
||||
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs)
|
||||
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||
orderStatus.VendorOrderID = refundData.BizRefundId
|
||||
//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.OrderStatusRefundSuccess:
|
||||
refundData := msg.(*tao_vegetable.RefundOrderFinish)
|
||||
orderStatus.RefVendorOrderID = refundData.OutMainRefundId
|
||||
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功")
|
||||
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
|
||||
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||
orderStatus.VendorOrderID = refundData.BizSubRefundId
|
||||
}
|
||||
|
||||
if orderStatus.VendorOrderID == "" {
|
||||
orderStatus.VendorOrderID = orderStatus.RefVendorOrderID
|
||||
}
|
||||
return orderStatus
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(resType int, notifyType string) int {
|
||||
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(notifyType string) int {
|
||||
status := AfsVendorStatus2StatusMap[notifyType]
|
||||
if status == model.AfsOrderStatusWait4Approve && resType != mtwmapi.ResTypePending {
|
||||
status = model.AfsOrderStatusNew
|
||||
}
|
||||
//if status == model.AfsOrderStatusWait4Approve || status == model.AfsOrderStatusOnSaleAfs {
|
||||
// status = model.AfsOrderStatusNew
|
||||
//}
|
||||
return status
|
||||
}
|
||||
|
||||
// 审核售后单申请
|
||||
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
if approveType == partner.AfsApproveTypeRefused {
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).OrderRefundReject(utils.Str2Int64(order.VendorOrderID), reason)
|
||||
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
|
||||
return errors.New("此平台暂时不支持")
|
||||
} else {
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).OrderRefundAgree(utils.Str2Int64(order.VendorOrderID), reason)
|
||||
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{
|
||||
RefundId: utils.String2Pointer(order.AfsOrderID),
|
||||
RejectReason: utils.String2Pointer(reason),
|
||||
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
|
||||
}
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param)
|
||||
if err != nil {
|
||||
order.Status = model.AfsOrderStatusFailed
|
||||
order.VendorStatus = "老板拒绝"
|
||||
order.ReasonDesc += reason + ","
|
||||
dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus")
|
||||
}
|
||||
}
|
||||
return err
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
199
business/partner/purchase/tao_vegetable/order_utils.go
Normal file
199
business/partner/purchase/tao_vegetable/order_utils.go
Normal file
@@ -0,0 +1,199 @@
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"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"
|
||||
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"time"
|
||||
)
|
||||
|
||||
// orderStatusChangeNotice 拣货和通知发货状态变化接口
|
||||
func orderStatusChangeNotice(order *model.GoodsOrder, orderStatus string) (*request591.AlibabaAelophyOrderWorkCallbackRequest, error) {
|
||||
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
|
||||
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
|
||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||
Status: utils.String2Pointer(orderStatus),
|
||||
}
|
||||
|
||||
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
|
||||
skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), order.VendorOrderID, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(skuList) == model.NO {
|
||||
return nil, fmt.Errorf("订单商品列表为零,请管理员检查")
|
||||
}
|
||||
for _, v := range skuList {
|
||||
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
|
||||
BizSubOrderId: nil,
|
||||
SkuCode: utils.String2Pointer(v.VendorSkuID),
|
||||
PickSaleQuantity: utils.String2Pointer(utils.Int2Str(v.Count)),
|
||||
PickStockQuantity: utils.String2Pointer(fmt.Sprintf("%.2f", float64(v.Weight)/float64(1000)*float64(v.Count))),
|
||||
}
|
||||
workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo)
|
||||
}
|
||||
|
||||
// 出库
|
||||
param.WorkCallbackRequest.WorkCallbackSubOrderInfoList = &workCallbackSubOrderInfoList
|
||||
|
||||
return param, nil
|
||||
}
|
||||
|
||||
// OrderStatusChangeDelivery 订单开始配送和送达通知接口
|
||||
func OrderStatusChangeDelivery(order *model.GoodsOrder, orderStatus string) *request591.AlibabaAelophyOrderWorkCallbackRequest {
|
||||
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
|
||||
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
|
||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||
Status: utils.String2Pointer(orderStatus),
|
||||
}
|
||||
bill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID)
|
||||
param.WorkCallbackRequest.DelivererName = utils.String2Pointer(bill.CourierName)
|
||||
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer(bill.CourierMobile)
|
||||
if param.WorkCallbackRequest.DelivererName == nil || param.WorkCallbackRequest.DelivererPhone == nil {
|
||||
param.WorkCallbackRequest.DelivererName = utils.String2Pointer("暂无")
|
||||
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer("暂无")
|
||||
}
|
||||
|
||||
return param
|
||||
}
|
||||
|
||||
// getOrderCancelList 获取订单可取消的订单列表
|
||||
func getOrderCancelList(api *tao_vegetable.API, order *model.GoodsOrder) (*domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) {
|
||||
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
|
||||
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
|
||||
OutOrderId: utils.String2Pointer(order.VendorOrderID),
|
||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||
OutSubOrderIds: nil,
|
||||
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
|
||||
},
|
||||
}
|
||||
return api.PartialRefundReason(param)
|
||||
}
|
||||
|
||||
func getTimeFromTimestamp(timeStamp int64) time.Time {
|
||||
if timeStamp < 1538103149 { // 立即达订单给的是1(而不是空,0),1538103149不是特殊值,只是一个任意之前的时间,这样写可以处理
|
||||
return utils.DefaultTimeValue
|
||||
}
|
||||
return utils.Timestamp2Time(timeStamp)
|
||||
}
|
||||
|
||||
//
|
||||
//func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||
// offset := 0
|
||||
// for {
|
||||
// store, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||||
// result, err2 := getAPI(store.VendorOrgCode, storeID, "").OrderBatchPullPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||
// if err = err2; err == nil {
|
||||
// for _, v := range result {
|
||||
// v2 := &partner.OrderPhoneNumberInfo{
|
||||
// VendorOrderID: utils.Int64ToStr(v.OrderID),
|
||||
// PhoneNumber: v.RealPhoneNumber,
|
||||
// }
|
||||
// if v2.PhoneNumber == "" {
|
||||
// v2.PhoneNumber = v.RealOrderPhoneNumber
|
||||
// }
|
||||
// numberList = append(numberList, v2)
|
||||
// }
|
||||
// if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
|
||||
// break
|
||||
// }
|
||||
// offset += mtwmapi.MaxBatchPullPhoneNumberLimit
|
||||
// } else {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// return numberList, err
|
||||
//}
|
||||
//
|
||||
//func (p *PurchaseHandler) GetOrderCourierNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||
// offset := 0
|
||||
// for {
|
||||
// store, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||||
// result, err2 := getAPI(store.VendorOrgCode, 0, "").OrderGetRiderInfoPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||
// if err = err2; err == nil {
|
||||
// for _, v := range result {
|
||||
// numberList = append(numberList, &partner.OrderPhoneNumberInfo{
|
||||
// VendorOrderID: utils.Int64ToStr(v.OrderID),
|
||||
// PhoneNumber: v.RiderRealPhoneNumber,
|
||||
// })
|
||||
// }
|
||||
// if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
|
||||
// break
|
||||
// }
|
||||
// offset += mtwmapi.MaxBatchPullPhoneNumberLimit
|
||||
// } else {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// return numberList, err
|
||||
//}
|
||||
//
|
||||
//func (p *PurchaseHandler) onNumberDowngrade(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||
// userNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
|
||||
// courierNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
|
||||
// orderMap := make(map[string]int)
|
||||
// ctx := jxcontext.AdminCtx
|
||||
// task := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
// step := batchItemList[0].(int)
|
||||
// switch step {
|
||||
// case 0:
|
||||
// userNumberList, err2 := p.GetOrderConsigneeNumber(ctx, 0, "")
|
||||
// if err = err2; err == nil {
|
||||
// for _, v := range userNumberList {
|
||||
// userNumberMap[v.VendorOrderID] = v
|
||||
// orderMap[v.VendorOrderID] = 1
|
||||
// }
|
||||
// }
|
||||
// case 1:
|
||||
// courierNumberList, err2 := p.GetOrderCourierNumber(ctx, 0, "")
|
||||
// if err = err2; err == nil {
|
||||
// for _, v := range courierNumberList {
|
||||
// courierNumberMap[v.VendorOrderID] = v
|
||||
// orderMap[v.VendorOrderID] = 1
|
||||
// }
|
||||
// }
|
||||
// case 2:
|
||||
// orderList := jxutils.StringMap2List(orderMap)
|
||||
// if len(orderList) > 0 {
|
||||
// updateTask := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知/处理订单", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
// vendorOrderID := batchItemList[0].(string)
|
||||
// db := dao.GetDB()
|
||||
// if userNumberMap[vendorOrderID] != nil {
|
||||
// _, err = dao.UpdateEntityByKV(db, &model.GoodsOrder{}, map[string]interface{}{
|
||||
// "ConsigneeMobile": userNumberMap[vendorOrderID].PhoneNumber,
|
||||
// "ConsigneeMobile2": userNumberMap[vendorOrderID].PhoneNumber,
|
||||
// }, map[string]interface{}{
|
||||
// model.FieldVendorOrderID: vendorOrderID,
|
||||
// model.FieldVendorID: model.VendorIDMTWM,
|
||||
// })
|
||||
// }
|
||||
// if courierNumberMap[vendorOrderID] != nil {
|
||||
// _, err = dao.UpdateEntityByKV(db, &model.Waybill{}, map[string]interface{}{
|
||||
// "CourierMobile": courierNumberMap[vendorOrderID].PhoneNumber,
|
||||
// }, map[string]interface{}{
|
||||
// "VendorWaybillID": vendorOrderID,
|
||||
// "WaybillVendorID": model.VendorIDMTWM,
|
||||
// })
|
||||
// }
|
||||
// return retVal, err
|
||||
// }, orderList)
|
||||
// tasksch.HandleTask(updateTask, task, true).Run()
|
||||
// _, err = updateTask.GetResult(0)
|
||||
// }
|
||||
// }
|
||||
// return retVal, err
|
||||
// }, []int{0, 1, 2})
|
||||
// tasksch.HandleTask(task, nil, true).Run()
|
||||
// return response
|
||||
//}
|
||||
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
)
|
||||
|
||||
// func TestSyncStoreCategory(t *testing.T) {
|
||||
// hint, err := CurPurchaseHandler.SyncStoreCategory(jxcontext.AdminCtx, nil, testShopID, false)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(hint)
|
||||
// }
|
||||
|
||||
// func TestSyncLocalStoreCategory(t *testing.T) {
|
||||
// hint, err := CurPurchaseHandler.SyncLocalStoreCategory(jxcontext.AdminCtx, nil, testShopID, true, nil)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(hint)
|
||||
// }
|
||||
|
||||
// func TestSyncStoreSkus(t *testing.T) {
|
||||
// hint, err := CurPurchaseHandler.SyncStoreSkus(jxcontext.AdminCtx, nil, testShopID, nil, false, true)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(hint)
|
||||
// }
|
||||
|
||||
func TestDeleteRemoteSkus(t *testing.T) {
|
||||
err := CurPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, testShopID, testShopVendorID, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteRemoteCategories(t *testing.T) {
|
||||
err := CurPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, testShopID, testShopVendorID, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
)
|
||||
|
||||
//func TestReadStore(t *testing.T) {
|
||||
// store, err := CurPurchaseHandler.ReadStore(jxcontext.AdminCtx, "", "4351018")
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// t.Log(utils.Format4Output(store, false))
|
||||
//}
|
||||
|
||||
func TestUpdateStore(t *testing.T) {
|
||||
err := CurPurchaseHandler.UpdateStore(nil, 100002, "test")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConstrainOpTimeList(t *testing.T) {
|
||||
timeList := constrainOpTimeList([]int16{830, 1800}, []int16{
|
||||
0,
|
||||
200,
|
||||
930,
|
||||
1700,
|
||||
})
|
||||
t.Log(utils.Format4Output(timeList, false))
|
||||
if timeList[0] != 930 || timeList[1] != 1700 {
|
||||
t.Fatal("constrainOpTimeList failed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetOpTimeListFromErr(t *testing.T) {
|
||||
err := utils.NewErrorIntCode("当前配送营业时间为:07:00~24:00", mtwmapi.ErrCodeOpFailed)
|
||||
list := getOpTimeListFromErr(err)
|
||||
t.Log(list)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
@@ -6,8 +6,6 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
@@ -32,7 +30,7 @@ type PurchaseHandler struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
if api.MtwmAPI != nil || api.Mtwm2API != nil {
|
||||
if api.TaoVegetableApi != nil {
|
||||
CurPurchaseHandler = New()
|
||||
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
||||
}
|
||||
@@ -148,11 +146,11 @@ func bizStatusJX2Mtwm(status int) (openLevel, online int) {
|
||||
return mtwmapi.PoiOpenLevelNormal, mtwmapi.PoiStatusOnline
|
||||
}
|
||||
|
||||
func skuStatusJX2Mtwm(status int) int {
|
||||
func skuStatusJX2Tao(status int) int64 {
|
||||
if status == model.SkuStatusNormal {
|
||||
return mtwmapi.SellStatusOnline
|
||||
return tao_vegetable.CreateOnlineSaleFlag
|
||||
}
|
||||
return mtwmapi.SellStatusOffline
|
||||
return tao_vegetable.CreateOfflineSaleFlag
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
||||
@@ -215,23 +213,15 @@ func getAPI(appOrgCode string, storeID int, vendorStoreID string) (apiObj *tao_v
|
||||
if appOrgCode == "" {
|
||||
globals.SugarLogger.Debugf("getAPI appOrgCode is empty")
|
||||
}
|
||||
apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API)
|
||||
var storeDetail *dao.StoreDetail
|
||||
if storeID != model.NO {
|
||||
storeDetail, _ = dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDTaoVegetable, appOrgCode)
|
||||
} else if vendorStoreID != "" {
|
||||
storeDetail, _ = dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDTaoVegetable, appOrgCode)
|
||||
}
|
||||
if storeDetail != nil {
|
||||
apiObj.SetToken(storeDetail.MtwmToken)
|
||||
}
|
||||
//apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API)
|
||||
//var storeDetail *dao.StoreDetail
|
||||
//if storeID != model.NO {
|
||||
// storeDetail, _ = dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDTaoVegetable, appOrgCode)
|
||||
//} else if vendorStoreID != "" {
|
||||
// storeDetail, _ = dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDTaoVegetable, appOrgCode)
|
||||
//}
|
||||
//if storeDetail != nil {
|
||||
// apiObj.SetToken(storeDetail.MtwmToken)
|
||||
//}
|
||||
return apiObj
|
||||
}
|
||||
|
||||
//
|
||||
//func getAPIWithoutToken(appOrgCode string) (apiObj *mtwmapi.API) {
|
||||
// if appOrgCode == "" {
|
||||
// globals.SugarLogger.Warnf("getAPI appOrgCode is empty")
|
||||
// }
|
||||
// return partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*mtwmapi.API)
|
||||
//}
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
)
|
||||
|
||||
func TestOnFinancialMsg(t *testing.T) {
|
||||
msg := &mtwmapi.CallbackMsg{
|
||||
Cmd: "orderRefund",
|
||||
FormData: url.Values{},
|
||||
}
|
||||
msg.FormData.Set("timestamp", utils.Int64ToStr(time.Now().Unix()))
|
||||
msg.FormData.Set("order_id", "33762863167364867")
|
||||
msg.FormData.Set("notify_type", "agree")
|
||||
msg.FormData.Set("money", "23.56")
|
||||
food := []map[string]interface{}{
|
||||
map[string]interface{}{
|
||||
"app_food_code": "123",
|
||||
"food_name": "商品1",
|
||||
"sku_id": "123",
|
||||
"refund_price": 3.14,
|
||||
"count": 2,
|
||||
"box_num": 1,
|
||||
"box_price": 1,
|
||||
},
|
||||
map[string]interface{}{
|
||||
"app_food_code": "124",
|
||||
"food_name": "商品2",
|
||||
"sku_id": "124",
|
||||
"refund_price": 3.15,
|
||||
"count": 2,
|
||||
"box_num": 1,
|
||||
"box_price": 1,
|
||||
},
|
||||
}
|
||||
msg.FormData.Set("food", string(utils.MustMarshal(food)))
|
||||
res := CurPurchaseHandler.onAfsOrderMsg(msg)
|
||||
fmt.Println(res)
|
||||
}
|
||||
|
||||
func TestOnOrderDetail(t *testing.T) {
|
||||
result := map[string]interface{}{
|
||||
"app_order_code": "", "app_poi_code": "2828472", "avg_send_time": 2410, "backup_recipient_phone": "[\"13164714130_7645\"]", "caution": " 【如遇缺货】: 缺货时电话与我沟通 收餐人隐私号 13049813276_5307,手机号 139****5027", "city_id": 440300, "ctime": 1555036346, "day_seq": 1, "delivery_time": 0, "detail": "[{\"app_food_code\":\"27262\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"红管鱿鱼约250g/份\",\"food_property\":\"\",\"price\":23.54,\"quantity\":1,\"sku_id\":\"27262\",\"spec\":\"250g\",\"unit\":\"份\"},{\"app_food_code\":\"24987\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"带皮猪梅花肉约250g/份\",\"food_property\":\"\",\"price\":15.84,\"quantity\":1,\"sku_id\":\"24987\",\"spec\":\"250g\",\"unit\":\"份\"},{\"app_food_code\":\"27179\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"[畅销]龙骨约250g/份\",\"food_property\":\"\",\"price\":18.59,\"quantity\":1,\"sku_id\":\"27179\",\"spec\":\"250g\",\"unit\":\"份\"}]", "dinners_number": 0, "expect_deliver_time": 0, "extras": "[{\"act_detail_id\":664795195,\"mt_charge\":0,\"poi_charge\":5,\"reduce_fee\":5,\"remark\":\"满46.0元减5.0元\",\"type\":2},{\"act_detail_id\":665051798,\"mt_charge\":0,\"poi_charge\":4,\"reduce_fee\":4,\"remark\":\"减配送费4.0元\",\"type\":25},{\"act_detail_id\":274839715,\"mt_charge\":0.5,\"poi_charge\":0,\"reduce_fee\":0.5,\"remark\":\"用户使用了支付红包减0.5元\",\"type\":9},{\"mt_charge\":0,\"poi_charge\":0,\"reduce_fee\":0,\"remark\":\"送30元商家代金券\",\"type\":100},{}]", "has_invoiced": 0, "invoice_title": "", "is_favorites": false, "is_poi_first_order": true, "is_pre": 0, "is_third_shipping": 0, "latitude": 22.530194, "logistics_code": "1001", "longitude": 114.08372, "order_id": 28284722536001020, "order_send_time": 1555036356, "original_price": 63.97, "package_bag_money": 0, "pay_type": 2, "pick_type": 0, "poi_receive_detail": "{\"actOrderChargeByMt\":[{\"comment\":\"活动款\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":50}],\"actOrderChargeByPoi\":[{\"comment\":\"满46.0元减5.0元\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":500},{\"comment\":\"减配送费4.0元\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":400}],\"foodShareFeeChargeByPoi\":490,\"logisticsFee\":600,\"onlinePayment\":5447,\"wmPoiReceiveCent\":4406}", "recipient_address": "汇港名苑 (南2区1005)@#广东省深圳市福田区滨河大道滨河大道3119号汇港名苑", "recipient_name": "颜(女士)", "recipient_phone": "13049813276_5307", "remark": "", "result": "ok", "shipper_phone": "", "shipping_fee": 6, "shipping_type": 0, "source_id": 3, "status": 2, "taxpayer_id": "", "total": 54.47, "utime": 1555036346, "wm_order_id_view": 28284722536001020, "wm_poi_address": "深圳市福田区南园街道南华社区滨河路2037号下小庙南区70栋101号滨河街市场", "wm_poi_id": 2828472, "wm_poi_name": "京西菜市(华强南店)", "wm_poi_phone": "13724313878",
|
||||
}
|
||||
err := new(PurchaseHandler).OnOrderDetail(result, partner.CreatedPeration)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
func TestName(t *testing.T) {
|
||||
store, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), "1", model.VendorIDMTWM, "1")
|
||||
fmt.Println(store)
|
||||
fmt.Println(err)
|
||||
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
package mtwm
|
||||
package tao_vegetable
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -27,37 +25,33 @@ func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string)
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||
waybill := c.callbackMsg2Waybill(msg)
|
||||
err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
||||
if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
||||
c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusDelivering)
|
||||
}
|
||||
return mtwmapi.Err2CallbackResponse(err, "")
|
||||
//waybill := c.callbackMsg2Waybill(msg)
|
||||
//err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
||||
//if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
||||
// c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusDelivering)
|
||||
//}
|
||||
//return mtwmapi.Err2CallbackResponse(err, "")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
vendorStatus := msg.FormData.Get("logistics_status")
|
||||
retVal = &model.Waybill{
|
||||
VendorOrderID: orderID,
|
||||
OrderVendorID: model.VendorIDMTWM,
|
||||
VendorWaybillID: orderID,
|
||||
WaybillVendorID: model.VendorIDMTWM,
|
||||
CourierName: msg.FormData.Get("dispatcher_name"),
|
||||
CourierMobile: msg.FormData.Get("dispatcher_mobile"),
|
||||
VendorStatus: vendorStatus,
|
||||
Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
||||
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
|
||||
Remark: "",
|
||||
VendorOrgCode: msg.AppID,
|
||||
}
|
||||
if retVal.StatusTime == utils.DefaultTimeValue {
|
||||
retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
|
||||
}
|
||||
|
||||
//if vendorStatus == "4" || vendorStatus == "8" { // 4:美团推送已经(确认骑手)订单 8:美团推送(骑手完成)订单
|
||||
// retVal.DesiredFee = utils.Float64TwoInt64(utils.Str2Float64WithDefault(msg.FormData.Get("shipping_fee"), 0)) // 订单优惠前的总费用
|
||||
// partner.CurOrderManager
|
||||
//orderID := GetOrderIDFromMsg(msg)
|
||||
//vendorStatus := msg.FormData.Get("logistics_status")
|
||||
//retVal = &model.Waybill{
|
||||
// VendorOrderID: orderID,
|
||||
// OrderVendorID: model.VendorIDMTWM,
|
||||
// VendorWaybillID: orderID,
|
||||
// WaybillVendorID: model.VendorIDMTWM,
|
||||
// CourierName: msg.FormData.Get("dispatcher_name"),
|
||||
// CourierMobile: msg.FormData.Get("dispatcher_mobile"),
|
||||
// VendorStatus: vendorStatus,
|
||||
// Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
||||
// StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
|
||||
// Remark: "",
|
||||
// VendorOrgCode: msg.AppID,
|
||||
//}
|
||||
//if retVal.StatusTime == utils.DefaultTimeValue {
|
||||
// retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
|
||||
//}
|
||||
|
||||
return retVal
|
||||
|
||||
@@ -119,6 +119,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
||||
if result.UserIdInfo != nil {
|
||||
order.VendorUserID = result.UserIdInfo.IdCardNo
|
||||
}
|
||||
|
||||
originalLng := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLongitude)
|
||||
originalLat := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLatitude)
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(originalLng)
|
||||
@@ -545,24 +546,6 @@ func (c *PurchaseHandler) postFakeMsg(vendorOrderID, cmd, VendorStatus, appOrgCo
|
||||
|
||||
// AcceptOrRefuseOrder 接单或者拒单(isAcceptIt:接单/拒单) 抖店暂无拒单
|
||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||
//if isAcceptIt {
|
||||
// if globals.EnableMtwmStoreWrite {
|
||||
// err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderConfirm(utils.Str2Int64(order.VendorOrderID))
|
||||
// if err != nil {
|
||||
// if utils.IsErrMatch(err, utils.Int2Str(mtwmapi.ErrCodeOpFailed), []string{
|
||||
// "订单已经确认过了",
|
||||
// }) {
|
||||
// err = nil
|
||||
// } else {
|
||||
// globals.SugarLogger.Warnf("mtwm AcceptOrRefuseOrder orderID:%s failed with err:%v", order.VendorOrderID, err)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//} else {
|
||||
// if globals.EnableMtwmStoreWrite {
|
||||
// err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
|
||||
// }
|
||||
//}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -90,11 +90,11 @@ func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *
|
||||
VendorOrgCode: utils.Int2Str(vendorOrgCode),
|
||||
}
|
||||
afsOrder.FreightUserMoney = tiktokAfsOrderDetail.Data.ProcessInfo.AfterSaleInfo.RefundPostAmount
|
||||
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
|
||||
afsOrder.BoxMoney = 0 // 餐盒费
|
||||
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||
afsOrder.AfsFreightMoney = tiktokAfsOrderDetail.Data.ProcessInfo.AfterSaleInfo.RefundPostAmount // 暂时未发现退货取件费用
|
||||
afsOrder.BoxMoney = 0 // 餐盒费
|
||||
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||
for _, sku := range tiktokAfsOrderDetail.Data.OrderInfo.SkuOrderInfos {
|
||||
orderSku := &model.OrderSkuFinancial{
|
||||
Count: int(sku.AfterSaleItemCount),
|
||||
|
||||
@@ -296,6 +296,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin
|
||||
// return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
||||
}
|
||||
|
||||
// UpdateStoreSkusSpecTag 更新限购
|
||||
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
||||
//var foodDataList []map[string]interface{}
|
||||
//for _, v := range storeSkuList {
|
||||
|
||||
Reference in New Issue
Block a user