1
This commit is contained in:
@@ -3,10 +3,11 @@ package dada
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
tao "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/tao_vegetable"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/dadaapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -394,7 +395,6 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
return nil, errors.New("达达配送,平台调用错误,无订单数据返回")
|
||||
}
|
||||
|
||||
@@ -21,9 +21,6 @@ const (
|
||||
)
|
||||
|
||||
func CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) {
|
||||
if maxDeliveryFee != model.NO {
|
||||
return nil
|
||||
}
|
||||
if maxDeliveryFee <= model.DefMaxDeliveryFee {
|
||||
maxDeliveryFee = model.DefMaxDeliveryFee
|
||||
}
|
||||
|
||||
@@ -319,7 +319,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
|
||||
return deliveryFeeInfo, err
|
||||
}
|
||||
|
||||
// CreateWaybill (美团配送)
|
||||
// CreateWaybill(美团配送)
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) {
|
||||
db := dao.GetDB()
|
||||
// 检查配送平台是否被禁用
|
||||
@@ -331,6 +331,17 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
|
||||
return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment)
|
||||
}
|
||||
|
||||
globals.SugarLogger.Debugf("===================maxDeliveryFee := %d", maxDeliveryFee)
|
||||
if maxDeliveryFee == model.NO {
|
||||
fee, err := c.GetWaybillFee(order)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if fee.DeliveryFee >= model.DefMaxDeliveryFee {
|
||||
return nil, fmt.Errorf("美团配送超最高限价, 所需运费:%s, 最高限价:%s", jxutils.IntPrice2StandardCurrencyString(fee.DeliveryFee), jxutils.IntPrice2StandardCurrencyString(model.DefMaxDeliveryFee))
|
||||
}
|
||||
}
|
||||
|
||||
// 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出
|
||||
lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
||||
billParams := &mtpsapi.CreateOrderByShopParam{
|
||||
|
||||
@@ -10,6 +10,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -450,57 +452,6 @@ func SetJxMsgRead(appID, vendorStoreID, vendorID, userID string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// DelRedisByKey 清除redis数据
|
||||
func DelRedisByKey(keys []string) {
|
||||
var errList errlist.ErrList
|
||||
for _, key := range keys {
|
||||
err := rdb.Del(key)
|
||||
if err != nil {
|
||||
errList.AddErr(err)
|
||||
}
|
||||
}
|
||||
if errList.GetErrListAsOne() != nil {
|
||||
globals.SugarLogger.Debugf("DelRedisByKey err=%v", errList.GetErrListAsOne())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var rel = map[int]string{
|
||||
589: "a81eb3df418d83d6a1a4b7c572156d2f",
|
||||
5873: "41c479790a76f86326f89e8048964739",
|
||||
4123: "df2c88338b85f830cebce2a9eab56628",
|
||||
}
|
||||
|
||||
// DecryptIm 解密操作
|
||||
func DecryptIm(appID int, msg string) (string, error) {
|
||||
data, _ := base64.StdEncoding.DecodeString(msg)
|
||||
key := utils.LimitUTF8StringLen2(rel[appID], 16)
|
||||
res, err := utils.AESCBCDecpryt(data, []byte(key), []byte(key))
|
||||
if len(string(res)) > 0 && err == nil {
|
||||
return string(res), nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
//加密操作
|
||||
|
||||
// FilterIm 过滤操作
|
||||
func FilterIm(appID int, msg string) bool {
|
||||
var check = "[自动回复]"
|
||||
data, _ := DecryptIm(appID, msg)
|
||||
if len(data) > 0 && strings.Contains(data, check) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// RandTimeNumber 生成int类型 随机数+时间戳
|
||||
func RandTimeNumber() int {
|
||||
num, _ := rand.Int(rand.Reader, big.NewInt(100000))
|
||||
str := utils.Int64ToStr(num.Int64()) + utils.Int2Str(int(time.Now().Unix()))
|
||||
return utils.Str2Int(str)
|
||||
}
|
||||
|
||||
// AutoReply 是否已回复
|
||||
//key=AppID+:+UserID+:+msgID(mt)
|
||||
//key=AppID+:+UserID+:+msgID(elm)
|
||||
@@ -514,26 +465,23 @@ type AutoReply struct {
|
||||
// CheckAndReply 判断并回复
|
||||
func CheckAndReply(req *JXMsg, elmAppID string) (err error) {
|
||||
var (
|
||||
flag = false
|
||||
errList errlist.ErrList
|
||||
key string
|
||||
flag = false
|
||||
vendorID int
|
||||
errList errlist.ErrList
|
||||
apply AutoReply
|
||||
jxMsg = &JXMsg{}
|
||||
userList = &UserMessageList{}
|
||||
)
|
||||
if req.SendType == SendTypeMt {
|
||||
vendorID = VendorIDMT
|
||||
mt := req.MsgContent.(mtwmapi.PushContentReq)
|
||||
key := utils.Int2Str(mt.AppID) + ":" + utils.Int2Str(mt.OpenUserID) + ":autoReply"
|
||||
key = utils.Int2Str(mt.AppID) + ":" + utils.Int2Str(mt.OpenUserID) + ":autoReply"
|
||||
//1 检测是否已自动回复
|
||||
if n, err := rdb.Exists(key); n > 0 && err == nil {
|
||||
str := rdb.LRange(key)
|
||||
for i := 0; i < len(str); i++ {
|
||||
v := AutoReply{}
|
||||
if err = json.Unmarshal([]byte(str[i]), &v); err == nil {
|
||||
flag = v.IsApply
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flag = GetIfReply(key)
|
||||
//判断flag状态
|
||||
if !flag {
|
||||
apply := AutoReply{
|
||||
apply = AutoReply{
|
||||
UserID: mt.AppID,
|
||||
MsgID: mt.MsgID,
|
||||
IsApply: true,
|
||||
@@ -542,10 +490,13 @@ func CheckAndReply(req *JXMsg, elmAppID string) (err error) {
|
||||
|
||||
temp := mt
|
||||
//获取自定义回复模板
|
||||
if template := GetCustomTemplate(utils.Int2Str(mt.AppID), mt.AppPoiCode); len(template) != 0 {
|
||||
if template := GetCustomTemplate(utils.Int2Str(mt.AppID), mt.AppPoiCode); len(template) > 0 {
|
||||
temp.MsgContent = template
|
||||
} else {
|
||||
temp.MsgContent = AutoReplyByAppID[mt.AppID]
|
||||
temp.MsgContent, err = GetDefaultTemplate(utils.Int2Str(mt.AppID), mt.AppPoiCode, VendorIDMT)
|
||||
if err != nil {
|
||||
temp.MsgContent = AutoReplyByAppID[mt.AppID]
|
||||
}
|
||||
}
|
||||
temp.MsgSource = mtwmapi.MsgSourceStore
|
||||
temp.Cts = int(time.Now().Unix())
|
||||
@@ -556,47 +507,120 @@ func CheckAndReply(req *JXMsg, elmAppID string) (err error) {
|
||||
apply.IsApply = false
|
||||
globals.SugarLogger.Debugf("CheckAndReply mtSend err:%v", err)
|
||||
} else {
|
||||
jxMsg := &JXMsg{
|
||||
jxMsg = &JXMsg{
|
||||
SendType: SendTypeJx,
|
||||
MsgContent: temp,
|
||||
}
|
||||
userList := &UserMessageList{
|
||||
userList = &UserMessageList{
|
||||
VendorID: VendorIDMT,
|
||||
UserID: utils.Int2Str(mt.OpenUserID),
|
||||
LatestMsg: mt.MsgContent,
|
||||
LatestTime: mt.Cts,
|
||||
OrderID: "",
|
||||
}
|
||||
//1 存储详细聊天记录list
|
||||
if err = SetMessageDetail(jxMsg, VendorIDMT, elmAppID); err != nil {
|
||||
errList.AddErr(fmt.Errorf("存储详细聊天记录错误:%v", err))
|
||||
}
|
||||
//2 存储展示列表时单条数据
|
||||
if err = SetUserList(jxMsg, userList, VendorIDMT, elmAppID); err != nil {
|
||||
errList.AddErr(fmt.Errorf("存储STU聊天记录错误:%v", err))
|
||||
}
|
||||
}
|
||||
|
||||
//记录自动回复状态
|
||||
data, _ := json.Marshal(apply)
|
||||
err := rdb.RPush(key, string(data))
|
||||
ok, err := rdb.ExpireResult(key, ExpireTimeDay)
|
||||
if err != nil || !ok {
|
||||
globals.SugarLogger.Debugf("CheckAndReply apply err:%v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if req.SendType == SendTypeElm {
|
||||
//
|
||||
//}
|
||||
if req.SendType == SendTypeElm {
|
||||
vendorID = VendorIDELM
|
||||
elm := req.MsgContent.(ebaiapi.ImMessageSend)
|
||||
key = elmAppID + ":" + elm.PayLoad.SenderID + ":autoReply"
|
||||
|
||||
//1 检测是否已自动回复
|
||||
flag = GetIfReply(key)
|
||||
if !flag {
|
||||
apply = AutoReply{
|
||||
UserID: utils.Str2Int(elm.PayLoad.SenderID),
|
||||
MsgID: utils.Str2Int(elm.PayLoad.MsgID),
|
||||
IsApply: true,
|
||||
Timestamp: elm.PayLoad.CreateTime,
|
||||
}
|
||||
|
||||
temp := &ebaiapi.BusinessSendMsgReq{
|
||||
PlatformShopId: elm.PlatformShopID,
|
||||
BizType: ebaiapi.IMType,
|
||||
SubBizType: ebaiapi.IMTypeSendMsg,
|
||||
Payload: ebaiapi.BusinessMsgPayload{
|
||||
GroupId: elm.PayLoad.GroupID,
|
||||
MsgId: utils.Int2Str(RandTimeNumber()),
|
||||
ReceiverIds: elm.PayLoad.ReceiverIDs,
|
||||
ContentType: utils.Int2Str(ebaiapi.ContentTypeNormal),
|
||||
},
|
||||
}
|
||||
if template := GetCustomTemplate(elmAppID, elm.PlatformShopID); len(template) > 0 {
|
||||
temp.Payload.Content = template
|
||||
} else {
|
||||
temp.Payload.Content, err = GetDefaultTemplate(elmAppID, elm.PlatformShopID, VendorIDELM)
|
||||
if err != nil {
|
||||
temp.Payload.Content = LastTemplate
|
||||
}
|
||||
}
|
||||
|
||||
if err = partner.CurAPIManager.GetAPI(model.VendorIDEBAI, elmAppID).(*ebaiapi.API).BusinessSendMsg(temp); err != nil {
|
||||
apply.IsApply = false
|
||||
globals.SugarLogger.Debugf("CheckAndReply mtSend err:%v", err)
|
||||
} else {
|
||||
jxMsg = &JXMsg{
|
||||
SendType: SendTypeJx,
|
||||
MsgContent: temp,
|
||||
}
|
||||
userList = &UserMessageList{
|
||||
VendorID: VendorIDMT,
|
||||
UserID: elm.PayLoad.SenderID,
|
||||
LatestMsg: elm.PayLoad.Content,
|
||||
LatestTime: elm.PayLoad.CreateTime,
|
||||
OrderID: "",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//1 存储详细聊天记录list
|
||||
if err = SetMessageDetail(jxMsg, vendorID, elmAppID); err != nil {
|
||||
errList.AddErr(fmt.Errorf("自动回复:存储详细聊天记录错误:%v", err))
|
||||
}
|
||||
//2 存储展示列表时单条数据
|
||||
if err = SetUserList(jxMsg, userList, vendorID, elmAppID); err != nil {
|
||||
errList.AddErr(fmt.Errorf("自动回复:存储STU聊天记录错误:%v", err))
|
||||
}
|
||||
//3 记录自动回复状态
|
||||
if err = RecordAutoStatus(key, apply); err != nil {
|
||||
errList.AddErr(fmt.Errorf("自动回复:记录自动回复状态错误:%v", err))
|
||||
}
|
||||
if errList.GetErrListAsOne() != nil {
|
||||
return fmt.Errorf("CheckAndReply err=%v", errList.GetErrListAsOne())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetIfReply 检查是否已回复
|
||||
func GetIfReply(key string) (flag bool) {
|
||||
flag = false
|
||||
if n, err := rdb.Exists(key); n > 0 && err == nil {
|
||||
str := rdb.LRange(key)
|
||||
for i := 0; i < len(str); i++ {
|
||||
v := AutoReply{}
|
||||
if err = json.Unmarshal([]byte(str[i]), &v); err == nil {
|
||||
flag = v.IsApply
|
||||
}
|
||||
}
|
||||
}
|
||||
return flag
|
||||
}
|
||||
|
||||
// RecordAutoStatus 记录是否已自动回复状态
|
||||
func RecordAutoStatus(key string, apply AutoReply) error {
|
||||
data, _ := json.Marshal(apply)
|
||||
err := rdb.RPush(key, string(data))
|
||||
ok, err := rdb.ExpireResult(key, ExpireTimeDay)
|
||||
if err != nil || !ok {
|
||||
globals.SugarLogger.Debugf("CheckAndReply apply err:%v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GenCustomReplyID 生成门店自动回复模板ID
|
||||
func GenCustomReplyID(appID, vendorStoreID string) string {
|
||||
return BaseCusKey + ":" + appID + ":" + vendorStoreID
|
||||
@@ -625,5 +649,97 @@ func AddCustomReply(appID, vendorStoreID, replyTemplate string) (storeTemplate s
|
||||
err = rdb.Set(key, replyTemplate, 0)
|
||||
}
|
||||
return "", err
|
||||
|
||||
}
|
||||
|
||||
// GetDefaultTemplate 获取门店默认回复模板
|
||||
func GetDefaultTemplate(appID, vendorStoreID string, vendorID int) (string, error) {
|
||||
var (
|
||||
phoneNum = " "
|
||||
t string
|
||||
)
|
||||
store, err := dao.GetStoreDetail2(dao.GetDB(), 0, vendorStoreID, vendorID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(store.Tel1) > 0 {
|
||||
t = store.Tel1
|
||||
}
|
||||
if len(store.Tel1) == 0 && len(store.Tel2) == 0 {
|
||||
t = BasePhoneNum
|
||||
}
|
||||
phoneNum = t[:3] + "-" + t[3:7] + "-" + t[7:]
|
||||
temp := BaseTemplate + phoneNum
|
||||
|
||||
if vendorID == VendorIDMT {
|
||||
data, err := EncryptIm(utils.Str2Int(appID), temp)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
if vendorID == VendorIDELM {
|
||||
return temp, nil
|
||||
}
|
||||
|
||||
return "", nil
|
||||
}
|
||||
|
||||
/************************工具函数*/
|
||||
|
||||
// DelRedisByKey 清除redis数据
|
||||
func DelRedisByKey(keys []string) {
|
||||
var errList errlist.ErrList
|
||||
for _, key := range keys {
|
||||
err := rdb.Del(key)
|
||||
if err != nil {
|
||||
errList.AddErr(err)
|
||||
}
|
||||
}
|
||||
if errList.GetErrListAsOne() != nil {
|
||||
globals.SugarLogger.Debugf("DelRedisByKey err=%v", errList.GetErrListAsOne())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var rel = map[int]string{
|
||||
589: "a81eb3df418d83d6a1a4b7c572156d2f",
|
||||
5873: "41c479790a76f86326f89e8048964739",
|
||||
4123: "df2c88338b85f830cebce2a9eab56628",
|
||||
}
|
||||
|
||||
// DecryptIm 解密操作
|
||||
func DecryptIm(appID int, msg string) (string, error) {
|
||||
data, _ := base64.StdEncoding.DecodeString(msg)
|
||||
key := utils.LimitUTF8StringLen2(rel[appID], 16)
|
||||
res, err := utils.AESCBCDecpryt(data, []byte(key), []byte(key))
|
||||
if len(string(res)) > 0 && err == nil {
|
||||
return string(res), nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
// EncryptIm 加密操作
|
||||
func EncryptIm(appID int, msg string) (retVal string, err error) {
|
||||
key := utils.LimitUTF8StringLen2(rel[appID], 16)
|
||||
if data, err := utils.AESCBCEncpryt([]byte(msg), []byte(key), []byte(key)); err == nil {
|
||||
retVal = base64.StdEncoding.EncodeToString(data)
|
||||
}
|
||||
return retVal, err
|
||||
}
|
||||
|
||||
// FilterIm 过滤操作
|
||||
func FilterIm(appID int, msg string) bool {
|
||||
var check = "[自动回复]"
|
||||
data, _ := DecryptIm(appID, msg)
|
||||
if len(data) > 0 && strings.Contains(data, check) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// RandTimeNumber 生成int类型 随机数+时间戳
|
||||
func RandTimeNumber() int {
|
||||
num, _ := rand.Int(rand.Reader, big.NewInt(100000))
|
||||
str := utils.Int64ToStr(num.Int64()) + utils.Int2Str(int(time.Now().Unix()))
|
||||
return utils.Str2Int(str)
|
||||
}
|
||||
|
||||
@@ -75,7 +75,6 @@ var (
|
||||
CancelWaybillReasonStrActive = "操作由人员主动发起"
|
||||
CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内"
|
||||
CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力"
|
||||
CancelWaybillReasonStrDeliveryFeeUp = "配送距离太远,配送费超过15元"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -796,7 +796,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
|
||||
return fmt.Errorf("饿了么暂无投诉骑手,请联系饿了么客服")
|
||||
return fmt.Errorf("饿了么暂无投诉骑手API")
|
||||
}
|
||||
|
||||
// 转自配送时取消非专送混合送门店取消理由
|
||||
|
||||
@@ -311,7 +311,7 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, vendorOrgCode strin
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
|
||||
return fmt.Errorf("暂无投诉渠道,请致电京东客服")
|
||||
return err
|
||||
}
|
||||
|
||||
// 转自配送时取消非专送混合送门店取消理由
|
||||
|
||||
@@ -537,7 +537,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
|
||||
|
||||
// 美团专送、快送、混合送、美团企客
|
||||
logisticsCode := utils.Interface2String(orderDetail["logistics_code"])
|
||||
isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe || logisticsCode == mtwmapi.PeiSongTypeMixedExpressQiKe
|
||||
isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe
|
||||
//1001-专送(加盟);1002-专送(自建)
|
||||
//2002-快送;3001-混合送(专送+快送)
|
||||
//4015-企客远距离配送
|
||||
@@ -554,7 +554,6 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
|
||||
//PeiSongTypeKuaiDi = "2002" // 快送
|
||||
//PeiSongTypeWholeCity = "2010" // 全城送
|
||||
//PeiSongTypeMixed = "3001" // 混合送(即美团专送+快送)
|
||||
//PeiSongTypeMixedExpressQiKe = "30012002" // 混合送(混合快送)
|
||||
if isSelfDelivery {
|
||||
err = api.PreparationMealComplete(utils.Str2Int64(order.VendorOrderID))
|
||||
}
|
||||
|
||||
@@ -3,13 +3,14 @@ package tiktok_store
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/ascription_place"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/ascription_place"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
|
||||
order_getSettleBillDetailV3_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/order_getSettleBillDetailV3/request"
|
||||
order_logisticsAdd_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/order_logisticsAdd/request"
|
||||
order_orderDetail_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/order_orderDetail/response"
|
||||
@@ -990,7 +991,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) {
|
||||
return fmt.Errorf("抖店暂不提供投诉骑手API,联系客服")
|
||||
return fmt.Errorf("抖店暂不提供投诉骑手API")
|
||||
}
|
||||
|
||||
// GetCancelDeliveryReason 转自配送时取消非专送混合送门店取消理由
|
||||
|
||||
Reference in New Issue
Block a user