From dd0f2ac9e44f61cd98e39fd74724e1fe3cc5935c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 14 Oct 2022 09:01:15 +0800 Subject: [PATCH] 1 --- business/model/dao/dao_order.go | 11 + business/partner/delivery/rider.go | 4 + .../partner/purchase/tiktok_store/order.go | 22 +- .../purchase/tiktok_store/store_sku2.go | 1 + controllers/tiktok_delivery.go | 196 ++++++++++++++++++ 5 files changed, 228 insertions(+), 6 deletions(-) create mode 100644 controllers/tiktok_delivery.go diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 3df1b5b37..2bbb05eb8 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1397,6 +1397,17 @@ func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, er return waybills, err } +// GetWayBillsByWayBillId 根据运单id获取运单id +func GetWayBillsByWayBillId(db *DaoDB, vendorWayBillId string) (waybills []*model.Waybill, err error) { + sql := `SELECT * + FROM waybill + WHERE vendor_waybill_id = ? + ` + sqlParams := []interface{}{vendorWayBillId} + err = GetRows(db, &waybills, sql, sqlParams) + return waybills, err +} + func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) { sql := `SELECT * FROM goods_order diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 867b692ba..26bfd1651 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -83,12 +83,16 @@ func GetOrderRiderInfoToPlatform(orderId string) { switch riderInfo.LogisticsStatus { case 20: //配送中 riderInfo.LogisticsStatus = 20 + riderInfo.LogisticsContext = `正在配送中` case 110: // 完成 riderInfo.LogisticsStatus = 40 + riderInfo.LogisticsContext = `配送完成` case 105: // 完成 riderInfo.LogisticsStatus = 40 + riderInfo.LogisticsContext = `被取消` case 115: // 取消 riderInfo.LogisticsStatus = 100 + riderInfo.LogisticsContext = `被取消` default: continue } diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index f5772f4c8..f0cabbabe 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -3,6 +3,7 @@ package tiktok_store import ( "errors" "fmt" + 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" tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "regexp" @@ -213,7 +214,9 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s // GetOrderRider 商家自配送同步配送信息 func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) { - return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param) + appKey := `7152420904331429407` // 暂时定死 + appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死 + return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfo(param) } func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) { @@ -588,12 +591,19 @@ func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName return err } -// SelfDeliverDelivering 暂无自配送中 +// SelfDeliverDelivering 订单在自配送中,表示三方品牌接单,通知抖音已经发货了 func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) { - //if globals.EnableMtwmStoreWrite { - // err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderDelivering(utils.Str2Int64(order.VendorOrderID)) - //} - return err + return getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ + OrderId: order.VendorOrderID, + Company: "", + CompanyCode: "chengdouruoxi", + LogisticsCode: order.VendorWaybillID, + IsRefundReject: false, + IsRejectRefund: false, + SerialNumberList: nil, + AddressId: 0, + StoreId: utils.Str2Int64(order.VendorStoreID), + }) } // SelfDeliverDelivered 自配搜完成(暂无) diff --git a/business/partner/purchase/tiktok_store/store_sku2.go b/business/partner/purchase/tiktok_store/store_sku2.go index 1decdc11d..4a97e3705 100644 --- a/business/partner/purchase/tiktok_store/store_sku2.go +++ b/business/partner/purchase/tiktok_store/store_sku2.go @@ -282,6 +282,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI StartSaleType: 0, PickupMethod: "0", OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id + //AfterSaleService: map[string]string{"supply_day_return_selector": "7"}, } globals.SugarLogger.Debugf("====OuterProductId====%d", storeSku.SkuID) globals.SugarLogger.Debugf("====OuterProductId====%d", storeSku.ID) diff --git a/controllers/tiktok_delivery.go b/controllers/tiktok_delivery.go new file mode 100644 index 000000000..519dceb3b --- /dev/null +++ b/controllers/tiktok_delivery.go @@ -0,0 +1,196 @@ +package controllers + +import ( + "encoding/json" + "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals" + "github.com/astaxie/beego/server/web" + "io/ioutil" + "time" +) + +type LogisticsController struct { + web.Controller +} + +//#region 美团物流注册(发货完成时注册) + +// LogisticsRegisterReq 注册接口请求参数 +type LogisticsRegisterReq struct { + TrackNo string `json:"track_no"` // 运单号 + CallbackUrl string `json:"callback_url"` // 回调地址 + Company string `json:"company"` //物流公司编码 +} + +// LogisticsRegisterResp 响应接口 +type LogisticsRegisterResp struct { + Result bool `json:"result"` + ReturnCode string `json:"return_code"` + Message string `json:"message"` +} + +// LogisticsRegister 即时配轨迹订阅接口 +func (c *LogisticsController) LogisticsRegister() { + body, _ := ioutil.ReadAll(c.Ctx.Request.Body) + + register := &LogisticsRegisterReq{} + if err := json.Unmarshal(body, register); err != nil { + globals.SugarLogger.Debugf("小时达订阅接口类型转换异常:%s", err) + c.Data["json"] = LogisticsRegisterResp{ + Result: false, + ReturnCode: "1007", + Message: err.Error(), + } + c.ServeJSON() + return + } + if register.TrackNo == "" { + c.Data["json"] = LogisticsRegisterResp{ + Result: false, + ReturnCode: "1002", + Message: "单号不存在", + } + c.ServeJSON() + return + } + // 查询订单的运单是否存在 + data, err := dao.GetWayBillsByWayBillId(dao.GetDB(), register.TrackNo) + if err != nil { + globals.SugarLogger.Debugf("根据单号查询运单数据错误:%s", err) + } + if len(data) <= 0 { + globals.SugarLogger.Debugf("单号存在但是本地数据不存,推送平台运单号错误,或者运单错误:%s", err) + c.Data["json"] = LogisticsRegisterResp{ + Result: false, + ReturnCode: "1002", + Message: "单号不存在", + } + c.ServeJSON() + return + } + + c.Data["json"] = LogisticsRegisterResp{ + Result: true, + ReturnCode: "200", + Message: "", + } + c.ServeJSON() + return +} + +//#endregion + +//#region 保底物流信息更新 + +// LogisticsQueryReq 请求参数 +type LogisticsQueryReq struct { + TrackNo string `json:"track_no"` // 运单号 + Company string `json:"company"` // 物流商编码 + PhoneLastFour string `json:"phone_last_four"` // 手机号后4位 +} + +// LogisticsQueryRest 响应参数 +type LogisticsQueryRest struct { + Result bool `json:"result"` // 结果 + ReturnCode string `json:"return_code"` // 错误码 + Message string `json:"message"` // 错误消息 + Data LogisticsQueryData `json:"data"` // 轨迹数据 +} + +type LogisticsQueryData struct { + Timestamp string `json:"timestamp"` // 当前系统时间 + TrackNo string `json:"track_no"` // 运单号 + Traces []TracesList `json:"traces"` // 轨迹列表 +} + +type TracesList struct { + Timestamp string `json:"timestamp"` // 当前系统时间 + // 事件编码 + Opcode string `json:"opcode"` + // 文案 + Content string `json:"content"` + // 骑手信息 + Rider RiderInfo `json:"rider"` + // 三方运力公司,顺丰同城 sftc 闪送 shansong 达达 dada UU uupt 美团 meituan 蜂鸟 fengniao + ThirdPartyCompany string `json:"third_party_company"` + // 异常编码 + ExceptionCode string `json:"exception_code"` + // 异常原因 + ExceptionDesc string `json:"exception_desc"` + // 取消编码 + CancelCode string `json:"cancel_code"` + // 取消原因 + CancelDesc string `json:"cancel_desc"` +} +type RiderInfo struct { + Name string `json:"name"` // 骑手姓名 + Mobile string `json:"mobile"` // 骑手电话号码 +} + +// LogisticsQuery 即时配保底查询接口 +func (c *LogisticsController) LogisticsQuery() { + body, _ := ioutil.ReadAll(c.Ctx.Request.Body) + param := &LogisticsQueryReq{} + if err := json.Unmarshal(body, param); err != nil { + c.Data["json"] = LogisticsQueryRest{ + Result: false, + ReturnCode: "1005", + Message: "数据解析错误", + } + c.ServeJSON() + return + } + + if param.TrackNo == "" { + c.Data["json"] = LogisticsQueryRest{ + Result: false, + ReturnCode: "1002", + Message: "运单账号不存在", + } + c.ServeJSON() + } + + // 查询订单的运单是否存在 + data, err := dao.GetWayBillsByWayBillId(dao.GetDB(), param.TrackNo) + if err != nil { + globals.SugarLogger.Debugf("根据单号查询运单数据错误:%s", err) + } + if len(data) <= 0 { + globals.SugarLogger.Debugf("单号存在但是本地数据不存,推送平台运单号错误,或者运单错误:%s", err) + c.Data["json"] = LogisticsRegisterResp{ + Result: false, + ReturnCode: "1002", + Message: "单号不存在", + } + c.ServeJSON() + return + } + + returnParam := &LogisticsQueryRest{ + Result: true, + ReturnCode: "200", + Message: "正常", + Data: LogisticsQueryData{ + Timestamp: utils.Time2Str(time.Now()), + TrackNo: param.TrackNo, + Traces: []TracesList{{ + Opcode: "ORDER_RECEIVED", + Timestamp: utils.Time2Str(time.Now()), + Content: "抖音定时保底更新", + ThirdPartyCompany: tiktok_api.TiktokExpressCode, + ExceptionCode: "", + ExceptionDesc: "", + CancelCode: "", + CancelDesc: "", + Rider: RiderInfo{Name: data[0].CourierName, Mobile: data[0].CourierMobile}, + }}, + }, + } + + c.Data["json"] = returnParam + c.ServeJSON() +} + +//#endregion