Merge branch 'jdshop' of e.coding.net:rosydev/jx-callback into jdshop
This commit is contained in:
@@ -241,27 +241,20 @@ func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOr
|
|||||||
|
|
||||||
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
||||||
// 部分快递平台在取消成功后有时会不发运单取消消息过来(比如达达,904200512000442),为避免二次取消报错,添加状态判断
|
// 部分快递平台在取消成功后有时会不发运单取消消息过来(比如达达,904200512000442),为避免二次取消报错,添加状态判断
|
||||||
globals.SugarLogger.Debugf("BaseScheduler CancelWaybill bill======%s", utils.Format4Output(bill, false))
|
|
||||||
if c.IsReallyCallPlatformAPI && bill.OrderVendorID != bill.WaybillVendorID && bill.Status != model.WaybillStatusCanceled {
|
if c.IsReallyCallPlatformAPI && bill.OrderVendorID != bill.WaybillVendorID && bill.Status != model.WaybillStatusCanceled {
|
||||||
globals.SugarLogger.Debugf("bill.OrderVendorID====%d, bill.WaybillVendorID====%d , bill.Status====%d", bill.OrderVendorID, bill.WaybillVendorID, bill.Status)
|
|
||||||
globals.SugarLogger.Debugf("handlerInfo====%s", utils.Format4Output(partner.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID), false))
|
|
||||||
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil {
|
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil {
|
||||||
if err = utils.CallFuncLogErrorWithInfo(func() error {
|
if err = utils.CallFuncLogErrorWithInfo(func() error {
|
||||||
if err := handlerInfo.Handler.CancelWaybill(bill, cancelReasonID, cancelReason); err != nil {
|
if err := handlerInfo.Handler.CancelWaybill(bill, cancelReasonID, cancelReason); err != nil {
|
||||||
globals.SugarLogger.Debugf("BaseScheduler CancelWaybill err========%v", err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
order, _ := partner.CurOrderManager.LoadOrder(bill.VendorOrderID, bill.OrderVendorID)
|
order, _ := partner.CurOrderManager.LoadOrder(bill.VendorOrderID, bill.OrderVendorID)
|
||||||
globals.SugarLogger.Debugf("BaseScheduler CancelWaybill order=========%s", utils.Format4Output(order, false))
|
|
||||||
return orderman.ResetCreateWaybillFee(nil, order)
|
return orderman.ResetCreateWaybillFee(nil, order)
|
||||||
}, "CancelWaybill bill:%v", bill); err == nil {
|
}, "CancelWaybill bill:%v", bill); err == nil {
|
||||||
bill.Status = model.WaybillStatusCanceled
|
bill.Status = model.WaybillStatusCanceled
|
||||||
bill.DeliveryFlag |= model.WaybillDeliveryFlagMaskActiveCancel
|
bill.DeliveryFlag |= model.WaybillDeliveryFlagMaskActiveCancel
|
||||||
globals.SugarLogger.Debugf("bill.Status===========%d,bill.DeliveryFlag===========%d", bill.Status, bill.DeliveryFlag)
|
|
||||||
_, err = dao.UpdateEntity(nil, bill, "Status", "DeliveryFlag")
|
_, err = dao.UpdateEntity(nil, bill, "Status", "DeliveryFlag")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("BaseScheduler CancelWaybill return bill.VendorWaybillID=%s,err==========%v", bill.VendorWaybillID, err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1020,6 +1020,15 @@ func (s *DefScheduler) solutionJdsOrder(bill *model.Waybill) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
||||||
|
//特殊处理抖音运力取消
|
||||||
|
if savedOrderInfo.order.VendorID == model.VendorIDDD {
|
||||||
|
savedOrderInfo.waybills[0] = &model.Waybill{
|
||||||
|
VendorOrderID: savedOrderInfo.order.VendorOrderID,
|
||||||
|
VendorWaybillID: savedOrderInfo.order.VendorWaybillID,
|
||||||
|
WaybillVendorID: model.VendorIDDYPS,
|
||||||
|
OrderVendorID: model.VendorIDDD,
|
||||||
|
}
|
||||||
|
}
|
||||||
for _, v := range savedOrderInfo.waybills {
|
for _, v := range savedOrderInfo.waybills {
|
||||||
if v.Status < model.WaybillStatusEndBegin &&
|
if v.Status < model.WaybillStatusEndBegin &&
|
||||||
!model.IsWaybillPlatformOwn(v) &&
|
!model.IsWaybillPlatformOwn(v) &&
|
||||||
|
|||||||
@@ -418,10 +418,6 @@ func (s *DefScheduler) CancelAll3rdWaybills(ctx *jxcontext.Context, vendorOrderI
|
|||||||
err = func() (err error) {
|
err = func() (err error) {
|
||||||
// 取消三方运单,取消各平台单号信息,间隔一段时间后定时任务重新调度
|
// 取消三方运单,取消各平台单号信息,间隔一段时间后定时任务重新调度
|
||||||
savedOrderInfo := s.loadSavedOrderByID(vendorOrderID, vendorID, true)
|
savedOrderInfo := s.loadSavedOrderByID(vendorOrderID, vendorID, true)
|
||||||
if vendorID == model.VendorIDDD {
|
|
||||||
globals.SugarLogger.Debugf("CancelAll3rdWaybills vendorOrderID=%s vendorID=%d", vendorOrderID, vendorID)
|
|
||||||
globals.SugarLogger.Debugf("CancelAll3rdWaybills savedOrderInfo=%s", utils.Format4Output(savedOrderInfo, false))
|
|
||||||
}
|
|
||||||
if savedOrderInfo != nil {
|
if savedOrderInfo != nil {
|
||||||
err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
|
err = s.cancelOtherWaybills(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -6099,6 +6099,37 @@ func BatchCreateFreeShipTemplate(relInfo map[string][]tiktok_store.RelInfo, ship
|
|||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//批量配置抖音门店自动呼叫运力
|
||||||
|
func SetStoreAutoCallRider(vendorOrgCode string, openIDs, closeIDs []int64) (string, error) {
|
||||||
|
var errList errlist.ErrList
|
||||||
|
if len(openIDs) > 0 {
|
||||||
|
for _, i := range openIDs {
|
||||||
|
if err := tiktok_store.SetStoreAutoCallRider(vendorOrgCode, tiktok_api.AutoCallRiderOpen, i); err != nil {
|
||||||
|
errList.AddErr(fmt.Errorf("%d", i))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(closeIDs) > 0 {
|
||||||
|
for _, j := range closeIDs {
|
||||||
|
if err := tiktok_store.SetStoreAutoCallRider(vendorOrgCode, tiktok_api.AutoCallRiderClose, j); err != nil {
|
||||||
|
errList.AddErr(fmt.Errorf("%d", j))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if errList.GetErrListAsOne() != nil {
|
||||||
|
return fmt.Sprintf("部分门店配置自动运力失败:%s", utils.Format4Output(errList.GetErrListAsOne(), false)), nil
|
||||||
|
}
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//辅助函数
|
||||||
|
func String2ArrayInt64(data string) (retVal []int64) {
|
||||||
|
temp := strings.Split(data, ",")
|
||||||
|
for _, v := range temp {
|
||||||
|
retVal = append(retVal, utils.Str2Int64(v))
|
||||||
|
}
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
func GetVendorStoreBind(vendorStoreId string, vendorId int) (int, error) {
|
func GetVendorStoreBind(vendorStoreId string, vendorId int) (int, error) {
|
||||||
return dao.GetCodeAndIDByMeiTuan(vendorStoreId, vendorId)
|
return dao.GetCodeAndIDByMeiTuan(vendorStoreId, vendorId)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -338,6 +338,11 @@ const (
|
|||||||
WaybillStatusDelivering = 20 // 配送中
|
WaybillStatusDelivering = 20 // 配送中
|
||||||
WaybillStatusDeliverFailed = 22 // 配送中失败
|
WaybillStatusDeliverFailed = 22 // 配送中失败
|
||||||
|
|
||||||
|
//抖音配送专用
|
||||||
|
WaybillStatusRejected = 23 //收货人拒收
|
||||||
|
WaybillStatusReturning = 24 //返回中
|
||||||
|
WaybillStatusReturned = 25 //已返回
|
||||||
|
|
||||||
WaybillStatusEndBegin = 100 // 以下的状态就是结束状态
|
WaybillStatusEndBegin = 100 // 以下的状态就是结束状态
|
||||||
WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应
|
WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应
|
||||||
WaybillStatusCanceled = 115
|
WaybillStatusCanceled = 115
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
if v.WaybillVendorID == model.VendorIDDada || v.WaybillVendorID == model.VendorIDFengNiao || v.WaybillVendorID == model.VendorIDDD {
|
if v.WaybillVendorID == model.VendorIDDada || v.WaybillVendorID == model.VendorIDFengNiao || v.WaybillVendorID == model.VendorIDDD {
|
||||||
riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, 0, v.VendorWaybillID)
|
riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, 0, v.VendorWaybillID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Debug("Get Order waybill rider info err FN/DADA :%v", err)
|
globals.SugarLogger.Debug("Get Order waybill rider info err FN/DADA/DYPS :%v", err)
|
||||||
}
|
}
|
||||||
} else if v.WaybillVendorID == model.VendorIDMTPS {
|
} else if v.WaybillVendorID == model.VendorIDMTPS {
|
||||||
if v.VendorWaybillID != "" {
|
if v.VendorWaybillID != "" {
|
||||||
|
|||||||
@@ -62,8 +62,11 @@ func (c *DeliveryHandler) GetStore(ctx *jxcontext.Context, storeID int, vendorSt
|
|||||||
VendorStoreID: utils.Int64ToStr(storeInfo.StoreDetail.Store.StoreId),
|
VendorStoreID: utils.Int64ToStr(storeInfo.StoreDetail.Store.StoreId),
|
||||||
CourierStatus: int(storeInfo.StoreDetail.Store.State),
|
CourierStatus: int(storeInfo.StoreDetail.Store.State),
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Debugf("GetStoreDetail err %s", err)
|
globals.SugarLogger.Debugf("GetStoreDetail err %s", err)
|
||||||
|
>>>>>>> 68b5033815cd812e1d9516b5f64acfab2665ee94
|
||||||
}
|
}
|
||||||
return storeDetail, err
|
return storeDetail, err
|
||||||
}
|
}
|
||||||
@@ -103,13 +106,12 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
|
||||||
globals.SugarLogger.Debugf("进入DYPS CancelWaybill")
|
params := make(map[string]interface{}, 0)
|
||||||
if localOrder, _, err := dao.GetOrders(dao.GetDB(), []int64{utils.Str2Int64(bill.VendorOrderID)}, false, false, "", "", false, []int{0}, false, "", nil, 0, 0); err != nil {
|
params["vendorOrderID"] = bill.VendorOrderID
|
||||||
|
if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil {
|
||||||
return errors.New("取消运单时,获取平台门店ID失败,请重试")
|
return errors.New("取消运单时,获取平台门店ID失败,请重试")
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Debugf("localOrder=%s", utils.Format4Output(localOrder, false))
|
|
||||||
if err = getAPI(bill.VendorOrgCode).ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil {
|
if err = getAPI(bill.VendorOrgCode).ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil {
|
||||||
globals.SugarLogger.Debugf("抖音配送取消运力失败:%v", err)
|
|
||||||
return fmt.Errorf("抖音配送取消运力失败:%v", err)
|
return fmt.Errorf("抖音配送取消运力失败:%v", err)
|
||||||
}
|
}
|
||||||
bill.Status = model.WaybillStatusCanceled
|
bill.Status = model.WaybillStatusCanceled
|
||||||
@@ -124,7 +126,6 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("获取抖音平台账号信息失败,请重试")
|
return nil, errors.New("获取抖音平台账号信息失败,请重试")
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("relInfo.VendorStoreID======%s,order.VendorOrderID======%s", relInfo.VendorStoreID, order.VendorOrderID)
|
|
||||||
if dispatcherFee, err := getAPI(relInfo.VendorOrgCode).GetDispatcherInfo(utils.Str2Int64(relInfo.VendorStoreID), order.VendorOrderID, tiktok_api.DispatcherFeeTypeCall); err == nil {
|
if dispatcherFee, err := getAPI(relInfo.VendorOrgCode).GetDispatcherInfo(utils.Str2Int64(relInfo.VendorStoreID), order.VendorOrderID, tiktok_api.DispatcherFeeTypeCall); err == nil {
|
||||||
deliveryFeeInfo = &partner.WaybillFeeInfo{}
|
deliveryFeeInfo = &partner.WaybillFeeInfo{}
|
||||||
deliveryFeeInfo.DeliveryFee = dispatcherFee
|
deliveryFeeInfo.DeliveryFee = dispatcherFee
|
||||||
@@ -185,7 +186,6 @@ func CreateVirtualMobile(shopOrderID int64) (*superm_createVirtualMobile_respons
|
|||||||
//订单状态回调
|
//订单状态回调
|
||||||
func OnWaybillMsg(tag, orderId string, data interface{}) (response *tiktok_api.CallbackResponse) {
|
func OnWaybillMsg(tag, orderId string, data interface{}) (response *tiktok_api.CallbackResponse) {
|
||||||
req := data.(tiktok_api.ShipmentInfoData)
|
req := data.(tiktok_api.ShipmentInfoData)
|
||||||
globals.SugarLogger.Debugf("DYPS OnWaybillMsg req============%s", utils.Format4Output(req, false))
|
|
||||||
param := &model.Waybill{
|
param := &model.Waybill{
|
||||||
VendorOrderID: utils.Int64ToStr(req.ShopOrderID),
|
VendorOrderID: utils.Int64ToStr(req.ShopOrderID),
|
||||||
VendorWaybillID: req.TrackNo,
|
VendorWaybillID: req.TrackNo,
|
||||||
@@ -202,7 +202,6 @@ func OnWaybillMsg(tag, orderId string, data interface{}) (response *tiktok_api.C
|
|||||||
param.StatusTime = time.Now()
|
param.StatusTime = time.Now()
|
||||||
}
|
}
|
||||||
dispatcherFee := getDispatcherFee(req.ShopID, utils.Int64ToStr(req.ShopOrderID), tiktok_api.DispatcherFeeTypeCall)
|
dispatcherFee := getDispatcherFee(req.ShopID, utils.Int64ToStr(req.ShopOrderID), tiktok_api.DispatcherFeeTypeCall)
|
||||||
globals.SugarLogger.Debugf("DYPS OnWaybillMsg dispatcherFee=%d req.ShipmentStatus=%d", dispatcherFee, req.ShipmentStatus)
|
|
||||||
switch req.ShipmentStatus {
|
switch req.ShipmentStatus {
|
||||||
case tiktok_api.ShipmentStatusCalling: //1 骑手呼叫中
|
case tiktok_api.ShipmentStatusCalling: //1 骑手呼叫中
|
||||||
param.DesiredFee = dispatcherFee
|
param.DesiredFee = dispatcherFee
|
||||||
|
|||||||
80
business/partner/delivery/uupt/waybill.go
Normal file
80
business/partner/delivery/uupt/waybill.go
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
package uupt
|
||||||
|
|
||||||
|
const (
|
||||||
|
//errCode 错误码说明
|
||||||
|
ErrorParameter1 = -101 //参数格式校验错误
|
||||||
|
ErrorParameter2 = -199 //参数格式校验错误
|
||||||
|
ErrorTimestamp = -102 //timestamp错误
|
||||||
|
ErrorAppID = -103 //appid无效
|
||||||
|
ErrorSignatureCheck = -104 //签名校验失败
|
||||||
|
ErrorOpenIDInvalid = -105 //openid无效
|
||||||
|
ErrorUnableParseOrigin = -1001 //无法解析起始地
|
||||||
|
ErrorUnableParseDestination = -1002 //无法解析目的地
|
||||||
|
ErrorCantGetCityInformation = -1003 //无法获取订单城市相关信息
|
||||||
|
ErrorOrderCategory = -1004 //订单小类出现错误
|
||||||
|
ErrorNoUserInformation = -1005 //没有用户信息
|
||||||
|
ErrorCouponID = -1006 //优惠券ID错误
|
||||||
|
ErrorPriceToken1 = -2001 //price_token无效
|
||||||
|
ErrorPriceToken2 = -2002 //price_token无效
|
||||||
|
ErrorPushType = -2003 //push_type错误
|
||||||
|
ErrorSpecialType = -2004 //special_type错误
|
||||||
|
ErrorCallMeWithTake = -2005 //callMe_withTake错误
|
||||||
|
ErrorOrderPrice = -2006 //order_price错误
|
||||||
|
ErrorBalancePayMoney = -2007 //balance_payMoney错误
|
||||||
|
ErrorOrderTotalMoney = -2008 //订单总金额错误
|
||||||
|
ErrorPayMoney = -2009 //支付金额错误
|
||||||
|
ErrorUserNotMatch = -2010 //用户不一致
|
||||||
|
ErrorWrongPhone = -2011 //手机号错误
|
||||||
|
ErrorNotExistBind = -2012 //不存在绑定关系
|
||||||
|
ErrorCancelReasonCantEmpty = -4001 //取消原因不能为空
|
||||||
|
ErrorOrderNumber1 = -4002 //订单编号无效
|
||||||
|
ErrorOrderNumber2 = -5001 //订单编号无效
|
||||||
|
ErrorOrderNumber3 = -5002 //订单编号无效
|
||||||
|
ErrorOrderNumber4 = -5003 //订单编号无效
|
||||||
|
ErrorFrequencyTooFast = -10001 //发送频率过快,请稍候重试
|
||||||
|
ErrorNeedCommitVerificationCode = -106 //接口返回base64图片需要提交对应图片验证码
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrCode = map[int]string{
|
||||||
|
ErrorParameter1: "参数格式校验错误",
|
||||||
|
ErrorParameter2: "参数格式校验错误",
|
||||||
|
ErrorTimestamp: "timestamp错误",
|
||||||
|
ErrorAppID: "appid无效",
|
||||||
|
ErrorSignatureCheck: "签名校验失败",
|
||||||
|
ErrorOpenIDInvalid: "openid无效",
|
||||||
|
ErrorUnableParseOrigin: "无法解析起始地",
|
||||||
|
ErrorUnableParseDestination: "无法解析目的地",
|
||||||
|
ErrorCantGetCityInformation: "无法获取订单城市相关信息",
|
||||||
|
ErrorOrderCategory: "订单小类出现错误",
|
||||||
|
ErrorNoUserInformation: "没有用户信息",
|
||||||
|
ErrorCouponID: "优惠券ID错误",
|
||||||
|
ErrorPriceToken1: "price_token无效",
|
||||||
|
ErrorPriceToken2: "price_token无效",
|
||||||
|
ErrorPushType: "push_type错误",
|
||||||
|
ErrorSpecialType: "special_type错误",
|
||||||
|
ErrorCallMeWithTake: "callMe_withTake错误",
|
||||||
|
ErrorOrderPrice: "order_price错误",
|
||||||
|
ErrorBalancePayMoney: "balance_payMoney错误",
|
||||||
|
ErrorOrderTotalMoney: "订单总金额错误",
|
||||||
|
ErrorPayMoney: "支付金额错误",
|
||||||
|
ErrorUserNotMatch: "用户不一致",
|
||||||
|
ErrorWrongPhone: "手机号错误",
|
||||||
|
ErrorNotExistBind: "不存在绑定关系",
|
||||||
|
ErrorCancelReasonCantEmpty: "取消原因不能为空",
|
||||||
|
ErrorOrderNumber1: "订单编号无效",
|
||||||
|
ErrorOrderNumber2: "订单编号无效",
|
||||||
|
ErrorOrderNumber3: "订单编号无效",
|
||||||
|
ErrorOrderNumber4: "订单编号无效",
|
||||||
|
ErrorFrequencyTooFast: "发送频率过快,请稍候重试",
|
||||||
|
ErrorNeedCommitVerificationCode: "接口返回base64图片需要提交对应图片验证码",
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
curDeliveryHandler *DeliveryHandler
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeliveryHandler struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
//if api.
|
||||||
|
}
|
||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
order_logisticsAdd_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/order_logisticsAdd/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"
|
order_orderDetail_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/order_orderDetail/response"
|
||||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner/delivery/tiktok_store"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -267,7 +266,7 @@ func (c *PurchaseHandler) onOrderMsg(msgId, orderId string, msg interface{}) (re
|
|||||||
//抖音运单处理
|
//抖音运单处理
|
||||||
if msgId == tiktokShop.CallbackShipmentInfoChange {
|
if msgId == tiktokShop.CallbackShipmentInfoChange {
|
||||||
//msgId-骑手运单号 orderId-抖音店铺ID msg-回调运单参数
|
//msgId-骑手运单号 orderId-抖音店铺ID msg-回调运单参数
|
||||||
return tiktok_store.OnWaybillMsg(msgId, orderId, msg)
|
return c.onWaybillMsg(msgId, orderId, msg)
|
||||||
}
|
}
|
||||||
// 待支付订单将不做处理/支付订单待处理(抖音风控)
|
// 待支付订单将不做处理/支付订单待处理(抖音风控)
|
||||||
if msgId == tiktokShop.CallbackCreatedOrderMsgTagId || msgId == tiktokShop.CallbackWaitOrderMsgTagId {
|
if msgId == tiktokShop.CallbackCreatedOrderMsgTagId || msgId == tiktokShop.CallbackWaitOrderMsgTagId {
|
||||||
|
|||||||
@@ -1,53 +1,108 @@
|
|||||||
package tiktok_store
|
package tiktok_store
|
||||||
|
|
||||||
//
|
import (
|
||||||
//var (
|
"errors"
|
||||||
// VendorWaybillStatus2StatusMap = map[string]int{
|
superm_getStoreAutoCallRiderInfo_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_getStoreAutoCallRiderInfo/response"
|
||||||
// mtwmapi.WaybillStatusWait4Delivery: model.WaybillStatusNew,
|
superm_setStoreAutoCallRider_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_setStoreAutoCallRider/request"
|
||||||
// mtwmapi.WaybillStatusPending: model.WaybillStatusPending,
|
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
// mtwmapi.WaybillStatusAccepted: model.WaybillStatusAccepted,
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
// mtwmapi.WaybillStatusCourierArrived: model.WaybillStatusCourierArrived,
|
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||||
// mtwmapi.WaybillStatusPickedup: model.WaybillStatusDelivering,
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
// mtwmapi.WaybillStatusDelivered: model.WaybillStatusDelivered,
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
// mtwmapi.WaybillStatusCanceled: model.WaybillStatusCanceled,
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
// }
|
)
|
||||||
//)
|
|
||||||
//
|
var (
|
||||||
//func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string) int {
|
VendorWaybillStatus2StatusMap = map[int]int{
|
||||||
// if status, ok := VendorWaybillStatus2StatusMap[vendorStatus]; ok {
|
tiktok_api.ShipmentStatusCalling: model.WaybillStatusNew,
|
||||||
// return status
|
tiktok_api.ShipmentStatusReceived: model.WaybillStatusAccepted,
|
||||||
// }
|
tiktok_api.ShipmentStatusArrived: model.WaybillStatusCourierArrived,
|
||||||
// return model.WaybillStatusUnknown
|
tiktok_api.ShipmentStatusDelivering: model.WaybillStatusDelivering,
|
||||||
//}
|
tiktok_api.ShipmentStatusRejected: model.WaybillStatusRejected,
|
||||||
//
|
tiktok_api.ShipmentStatusReturning: model.WaybillStatusReturning,
|
||||||
//func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
tiktok_api.ShipmentStatusReturned: model.WaybillStatusReturned,
|
||||||
// waybill := c.callbackMsg2Waybill(msg)
|
tiktok_api.ShipmentStatusDelivered: model.WaybillStatusCanceled,
|
||||||
// err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
tiktok_api.ShipmentStatusCanceled: model.WaybillStatusDelivered,
|
||||||
// if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
}
|
||||||
// c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusDelivering)
|
)
|
||||||
// }
|
|
||||||
// return mtwmapi.Err2CallbackResponse(err, "")
|
func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string) int {
|
||||||
//}
|
if status, ok := VendorWaybillStatus2StatusMap[utils.Str2Int(vendorStatus)]; ok {
|
||||||
//
|
return status
|
||||||
//func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
|
}
|
||||||
// orderID := GetOrderIDFromMsg(msg)
|
return model.WaybillStatusUnknown
|
||||||
// vendorStatus := msg.FormData.Get("logistics_status")
|
}
|
||||||
// retVal = &model.Waybill{
|
|
||||||
// VendorOrderID: orderID,
|
func (c *PurchaseHandler) onWaybillMsg(tag, orderId string, data interface{}) *tiktok_api.CallbackResponse {
|
||||||
// OrderVendorID: model.VendorIDMTWM,
|
waybill := c.callbackMsg2Waybill(tag, orderId, data)
|
||||||
// VendorWaybillID: orderID,
|
if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "",
|
||||||
// WaybillVendorID: model.VendorIDMTWM,
|
map[string]interface{}{
|
||||||
// CourierName: msg.FormData.Get("dispatcher_name"),
|
"vendorOrderID": waybill.VendorOrderID,
|
||||||
// CourierMobile: msg.FormData.Get("dispatcher_mobile"),
|
}, 0, 0); err == nil {
|
||||||
// VendorStatus: vendorStatus,
|
err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
||||||
// Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
||||||
// StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
|
c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, utils.Int2Str(tiktok_api.ShipmentStatusDelivering), localOrder[0].VendorStoreID)
|
||||||
// Remark: "",
|
}
|
||||||
//
|
return tiktok_api.Err2CallbackResponse(err, "")
|
||||||
// VendorOrgCode: msg.AppID,
|
}
|
||||||
// }
|
return tiktok_api.Err2CallbackResponse(nil, "")
|
||||||
// if retVal.StatusTime == utils.DefaultTimeValue {
|
}
|
||||||
// retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
|
|
||||||
// }
|
func (c *PurchaseHandler) callbackMsg2Waybill(tag, orderId string, data interface{}) (retVal *model.Waybill) {
|
||||||
// return retVal
|
req := data.(tiktok_api.ShipmentInfoData)
|
||||||
//}
|
vendorOrgCode, _ := dao.GetStoreDetailForDD(dao.GetDB(), 0, model.VendorIDDD, utils.Int64ToStr(req.ShopID), "")
|
||||||
|
return &model.Waybill{
|
||||||
|
VendorOrderID: utils.Int64ToStr(req.ShopOrderID),
|
||||||
|
OrderVendorID: model.VendorIDDD,
|
||||||
|
VendorWaybillID: req.TrackNo,
|
||||||
|
WaybillVendorID: model.VendorIDDYPS,
|
||||||
|
CourierName: req.RiderName,
|
||||||
|
CourierMobile: req.RiderPhone,
|
||||||
|
VendorStatus: utils.Int64ToStr(req.ShipmentStatus),
|
||||||
|
Status: c.GetWaybillStatusFromVendorStatus(utils.Int64ToStr(req.ShipmentStatus)),
|
||||||
|
StatusTime: getTimeFromTimestamp(utils.Str2Int64(req.OccurredTime)),
|
||||||
|
Remark: "",
|
||||||
|
VendorOrgCode: vendorOrgCode.VendorOrgCode,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//设置自动呼叫运力
|
||||||
|
func SetStoreAutoCallRider(vendorOrgCode, opType string, storeID int64) error {
|
||||||
|
if opType == tiktok_api.AutoCallRiderOpen {
|
||||||
|
if err := getAPI(vendorOrgCode, 0, "").SetStoreAutoCallRider(&superm_setStoreAutoCallRider_request.SupermSetStoreAutoCallRiderParam{
|
||||||
|
StoreID: storeID,
|
||||||
|
OpType: opType,
|
||||||
|
ServiceType: tiktok_api.ServiceTypeDelayCall,
|
||||||
|
DelayTime: tiktok_api.AutoCallDelayTime15,
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := getAPI(vendorOrgCode, 0, "").SetStoreAutoCallRider(&superm_setStoreAutoCallRider_request.SupermSetStoreAutoCallRiderParam{
|
||||||
|
StoreID: storeID,
|
||||||
|
OpType: opType,
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//批量查询自动呼叫运力配置
|
||||||
|
func GetStoreAutoCallRiderInfo(vendorOrgCode string, storeIDs []int64) (autoCallInfos map[int64]*superm_getStoreAutoCallRiderInfo_response.AutoCallInfo, err error) {
|
||||||
|
if len(storeIDs) == 0 {
|
||||||
|
return nil, errors.New("门店ID为空,请检查")
|
||||||
|
}
|
||||||
|
errList := errlist.ErrList{}
|
||||||
|
for _, i := range storeIDs {
|
||||||
|
if autoCallInfo, err := getAPI(vendorOrgCode, 0, "").GetStoreAutoCallRiderInfo(i); err != nil {
|
||||||
|
errList.AddErr(err)
|
||||||
|
} else {
|
||||||
|
autoCallInfos[i] = autoCallInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if errList.GetErrListAsOne() != nil {
|
||||||
|
return nil, errList.GetErrListAsOne()
|
||||||
|
}
|
||||||
|
return autoCallInfos, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -338,6 +338,11 @@ fnCode = "uDEyAmTbrfS2qjYbgi20Jm"
|
|||||||
fnMerchantId= "51658"
|
fnMerchantId= "51658"
|
||||||
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
|
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
|
||||||
|
|
||||||
|
uuPtAppID="55c4542ae60e4d348edcfc93b06dd302"
|
||||||
|
uuPtAppKey="76b362c06b1b4baa9e47bab6387a5356"
|
||||||
|
uuPtOpenId="8d8464e7c9354c1e88a3f5afa2a7922e"
|
||||||
|
|
||||||
|
|
||||||
jxPrintAppID = "1000"
|
jxPrintAppID = "1000"
|
||||||
jxPrintAppKey = "rfBd56ti2SMtYvSg"
|
jxPrintAppKey = "rfBd56ti2SMtYvSg"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/common"
|
"git.rosy.net.cn/jx-callback/business/jxstore/common"
|
||||||
@@ -1544,6 +1545,47 @@ func (c *StoreController) CreateFreeShipTemplates() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 批量配置抖音门店自动呼叫运力
|
||||||
|
// @Description 批量配置抖音门店自动呼叫运力
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrgCode formData string true "抖音总账号"
|
||||||
|
// @Param openIDs formData string false "开启自动运力门店,string对象"
|
||||||
|
// @Param closeIDs formData string false "关闭自动运力门店,string对象"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /SetStoreAutoCallRider [post]
|
||||||
|
func (c *StoreController) SetStoreAutoCallRider() {
|
||||||
|
c.callSetStoreAutoCallRider(func(params *tStoreSetStoreAutoCallRiderParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
if len(params.OpenIDs) == 0 && len(params.CloseIDs) == 0 {
|
||||||
|
return nil, "", errors.New("开启/关闭自动运力门店ID不可都为空")
|
||||||
|
} else {
|
||||||
|
openIDs := make([]int64, 0)
|
||||||
|
closeIDs := make([]int64, 0)
|
||||||
|
openIDs = cms.String2ArrayInt64(params.OpenIDs)
|
||||||
|
closeIDs = cms.String2ArrayInt64(params.CloseIDs)
|
||||||
|
retVal, err = cms.SetStoreAutoCallRider(params.VendorOrgCode, openIDs, closeIDs)
|
||||||
|
return retVal, "", err
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Title 批量获取抖音门店自动呼叫运力设置
|
||||||
|
// @Description 批量获取抖音门店自动呼叫运力设置
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrgCode query string true "抖音门店总账号"
|
||||||
|
// @Param storeIDs query string true "抖音门店IDs"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetStoreAutoCallRiderInfo [get]
|
||||||
|
func (c *StoreController) GetStoreAutoCallRiderInfo() {
|
||||||
|
c.callGetStoreAutoCallRiderInfo(func(params *tStoreGetStoreAutoCallRiderInfoParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
storeIDs := make([]int64, 0)
|
||||||
|
storeIDs = cms.String2ArrayInt64(params.StoreIDs)
|
||||||
|
retVal, err = tiktok_store.GetStoreAutoCallRiderInfo(params.VendorOrgCode, storeIDs)
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 打印机获取授权账号再京西菜市的绑定关系(其实就是根据平台门店id获取绑定门店id)
|
// @Title 打印机获取授权账号再京西菜市的绑定关系(其实就是根据平台门店id获取绑定门店id)
|
||||||
// @Description 打印机获取授权账号再京西菜市的绑定关系
|
// @Description 打印机获取授权账号再京西菜市的绑定关系
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
func Init() {
|
func Init() {
|
||||||
// set default database
|
// set default database
|
||||||
// orm.RegisterDataBase(aliasName, driverName, dataSource, params)
|
// orm.RegisterDataBase(aliasName, driverName, dataSource, params)
|
||||||
|
//正式服务器
|
||||||
orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", ""))
|
orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", ""))
|
||||||
orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
@@ -24,6 +25,7 @@ func Init() {
|
|||||||
//orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
//orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
//orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
//orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
//orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
//orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true")
|
||||||
|
|
||||||
// 开启sql打印
|
// 开启sql打印
|
||||||
//orm.Debug = true
|
//orm.Debug = true
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ func Init() {
|
|||||||
|
|
||||||
SugarLogger.Infof("globals RunMode=%s", web.BConfig.RunMode)
|
SugarLogger.Infof("globals RunMode=%s", web.BConfig.RunMode)
|
||||||
ReallyCallPlatformAPI = (web.BConfig.RunMode != "dev" && web.BConfig.RunMode != "test")
|
ReallyCallPlatformAPI = (web.BConfig.RunMode != "dev" && web.BConfig.RunMode != "test")
|
||||||
|
//ReallyCallPlatformAPI = true//本地测试用
|
||||||
ReallySendWeixinMsg = ReallyCallPlatformAPI && IsProductEnv()
|
ReallySendWeixinMsg = ReallyCallPlatformAPI && IsProductEnv()
|
||||||
|
|
||||||
AliKey = web.AppConfig.DefaultString("aliKey", "")
|
AliKey = web.AppConfig.DefaultString("aliKey", "")
|
||||||
|
|||||||
@@ -2990,6 +2990,24 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
|
web.ControllerComments{
|
||||||
|
Method: "SetStoreAutoCallRider",
|
||||||
|
Router: `/SetStoreAutoCallRider`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
|
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
|
web.ControllerComments{
|
||||||
|
Method: "GetStoreAutoCallRiderInfo",
|
||||||
|
Router: `/GetStoreAutoCallRiderInfo`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
// 打印机管理系统绑定打印机授权时,检查账号是否已经授权过
|
// 打印机管理系统绑定打印机授权时,检查账号是否已经授权过
|
||||||
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
web.ControllerComments{
|
web.ControllerComments{
|
||||||
|
|||||||
Reference in New Issue
Block a user