diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 7a2e0b3fe..f41e032e6 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "git.rosy.net.cn/jx-callback/business/jxstore/event" "io" "math" "mime/multipart" @@ -537,6 +538,7 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa } } else { //storeIDs2 = append(storeIDs2, -1) + // 商家小程序用户切换门店,如果角色storeIDsMap没有数据则查询传入数据 storeIDs2 = append(storeIDs2, int(utils.Interface2Int64WithDefault(params["storeID"], 0))) } } @@ -5262,11 +5264,17 @@ func UpdateOrCreateCourierStoresByBrand(ctx *jxcontext.Context, brandID, vendorI return hint, err } +//StoreStatusDisabled = -2 +//StoreStatusClosed = -1 +//StoreStatusHaveRest = 0 +//StoreStatusOpened = 1 +// 定时任务更新门店信息,添加storeStatuss参数,只查询和同步营业的门店 1营业0临时休息-1休息-2禁用 func RefreshStoreIsOnline(ctx *jxcontext.Context) (err error) { var ( db = dao.GetDB() ) - stores, _ := dao.GetStoresMapList(db, []int{model.VendorIDMTWM, model.VendorIDJD, model.VendorIDEBAI}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "") + + stores, _ := dao.GetStoresMapList(db, []int{model.VendorIDMTWM, model.VendorIDJD, model.VendorIDEBAI}, nil, []int{model.StoreStatusOpened, model.StoreStatusHaveRest}, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "") task := tasksch.NewParallelTask("RefreshStoreBind", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeMap := batchItemList[0].(*model.StoreMap) @@ -5278,6 +5286,8 @@ func RefreshStoreIsOnline(ctx *jxcontext.Context) (err error) { storeMap.IsOnline = -1 } dao.UpdateEntity(db, storeMap, "IsOnline") + store := fmt.Sprintf("门店id:%d,门店名称:%s,第三方门店状态:%d,本地门店修改后状态:%d,第三方平台Id(美团,饿了么...):%d", store.Store.ID, store.Store.Name, store.Store.Status, storeMap.IsOnline, storeMap.VendorID) + event.AddOperateEvent(ctx, ctx.GetTrackInfo(), store, err.Error(), "", int(time.Now().UnixNano()/1000), "UpdateStore") } } return retVal, err diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index b7537b00a..b38a9bde4 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -2,6 +2,7 @@ package misc import ( "fmt" + "git.rosy.net.cn/jx-callback/business/partner/delivery" "sync" "time" @@ -388,7 +389,7 @@ func Init() { }) // 每五分钟轮询一次推送骑手信息坐标给美团 ScheduleTimerFuncByInterval(func() { - //delivery.GetOrderRiderInfoToPlatform("") + delivery.GetOrderRiderInfoToPlatform("") }, 10*time.Second, 5*time.Minute) } if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookie", model.ConfigTypeCookie, ""); err == nil { diff --git a/business/model/api.go b/business/model/api.go index fc3b50dba..090d06ae3 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -34,6 +34,7 @@ type GoodsOrderExt struct { DesiredFee int64 `json:"desiredFee"` // 运单总费用 WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"` WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"` + VendorWaybillID2 string `orm:"column(vendor_waybill_id2);size(48)" json:"vendorWaybillID2"` // 某些平台有多个ID,比如美团配送,当前美团配送的 delivery_id存这里 DistrictName string `json:"districtName"` CityName string `json:"cityName"` diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 547f68fd3..bcd032361 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -821,7 +821,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat DISTINCT t1.*, -- CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t1.order_pay_percentage > 0, t1.order_pay_percentage, %d) / 100) AS SIGNED) earning_price, t2.status waybill_status, t2.courier_name, t2.courier_mobile, - t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at, + t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at,t2.vendor_waybill_id2, t5.pay_percentage, t5.old_pay_percentage, t5.market_man_phone, tu.name market_man_name, t5.operator_phone, t5.operator_phone2, t5.operator_phone3, tu1.name operator_name, tu2.name operator_name2, tu3.name operator_name3, t6.vendor_pay_percentage, diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index e82171a4e..f1b0487a3 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -84,7 +84,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap } case dadaapi.OrderStatusDelivering: order.Status = model.WaybillStatusDelivering - //delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) + delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) case dadaapi.OrderStatusFinished: order.Status = model.WaybillStatusDelivered case dadaapi.OrderStatusCanceled, dadaapi.OrderStatusExpired: diff --git a/business/partner/delivery/delivery.go b/business/partner/delivery/delivery.go index 9bf8271cb..43121b507 100644 --- a/business/partner/delivery/delivery.go +++ b/business/partner/delivery/delivery.go @@ -2,6 +2,7 @@ package delivery import ( "fmt" + "git.rosy.net.cn/baseapi/platformapi/mtpsapi" "math" "time" @@ -163,58 +164,58 @@ func OnWaybillCreated(waybill *model.Waybill) { //40-骑手已送达(C端:商品已送达;B端:骑手已送达) //100-配送单已取消(C端:商家已接单;B端:配送已取消) //注:若同步配送状态为“配送单已取消”,接口仍支持继续同步配送状态。 说明:商家如未上传此信息,则平台默认值为20(现已要求必传)。 -//func GetOrderRiderInfoToPlatform(orderId string) { -// params := make(map[string]interface{}, 0) -// params["brandID"] = 0 -// params["statuss"] = 20 -// params["isDateFinish"] = false -// params["isIncludeFake"] = true -// params["mustInvoice"] = false -// params["adjustCount"] = 0 -// params["waybillVendorIDs"] = `[101,102,103]` -// if orderId != "" { // 订单id会忽略其他参数 -// params["keyword"] = orderId -// } -// //params["offset"] = 0 -// //params["pageSize"] = 10000 -// // 查询三天内一万条数据 -// orders, _, err := dao.GetOrders(dao.GetDB(), nil, false, true, time.Now().Add(-24*3*time.Hour).Format("2006-01-02"), time.Now().Format("2006-01-02"), false, nil, false, "", params, 0, 10000) -// if err != nil { -// globals.SugarLogger.Errorf("GetOrder err :%v", err) -// return -// } -// -// for _, v := range orders { -// var riderInfo *mtpsapi.RiderInfo -// if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil { -// riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, utils.Str2Int64(v.VendorWaybillId2), v.VendorWaybillID) -// if err != nil { -// globals.SugarLogger.Errorf("Get Order waybill rider info err :%v", err) -// continue -// } -// } -// -// // 目前只推送美团骑手信息 -// switch v.VendorID { -// case model.VendorIDMTWM: // 美团发单 -// paramsMap := utils.Struct2Map(riderInfo, "", true) -// if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { -// if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorOrderID, paramsMap); err != nil { -// globals.SugarLogger.Errorf("Error pushing meituan rider information :%v", err) -// } -// } -// case model.VendorIDELM: // 饿了么 -// case model.VendorIDEBAI: // 饿百发单 -// -// case model.VendorIDJD: // 京东发单 -// case model.VendorIDGD: // 美团发单 -// case model.VendorIDYB: // 银豹发单 -// case model.VendorIDJDShop: // 京东商城 -// case model.VendorIDWSC: // 微盟微商城 -// default: -// globals.SugarLogger.Errorf("Order source error, non system order") -// return -// } -// } -// return -//} +func GetOrderRiderInfoToPlatform(orderId string) { + params := make(map[string]interface{}, 0) + params["brandID"] = 0 + params["statuss"] = 20 + params["isDateFinish"] = false + params["isIncludeFake"] = true + params["mustInvoice"] = false + params["adjustCount"] = 0 + params["waybillVendorIDs"] = `[101,102,103]` + if orderId != "" { // 订单id会忽略其他参数 + params["keyword"] = orderId + } + //params["offset"] = 0 + //params["pageSize"] = 10000 + // 查询三天内一万条数据 + orders, _, err := dao.GetOrders(dao.GetDB(), nil, false, true, time.Now().Add(-24*3*time.Hour).Format("2006-01-02"), time.Now().Format("2006-01-02"), false, nil, false, "", params, 0, 10000) + if err != nil { + globals.SugarLogger.Errorf("GetOrder err :%v", err) + return + } + + for _, v := range orders { + var riderInfo *mtpsapi.RiderInfo + if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil { + riderInfo, err = handlerInfo.Handler.GetRiderInfo(v.VendorOrderID, utils.Str2Int64(v.VendorWaybillID2), v.VendorWaybillID) + if err != nil { + globals.SugarLogger.Errorf("Get Order waybill rider info err :%v", err) + continue + } + } + + // 目前只推送美团骑手信息 + switch v.VendorID { + case model.VendorIDMTWM: // 美团发单 + paramsMap := utils.Struct2Map(riderInfo, "", true) + if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { + if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorOrderID, paramsMap); err != nil { + globals.SugarLogger.Errorf("Error pushing meituan rider information :%v", err) + } + } + case model.VendorIDELM: // 饿了么 + case model.VendorIDEBAI: // 饿百发单 + + case model.VendorIDJD: // 京东发单 + case model.VendorIDGD: // 美团发单 + case model.VendorIDYB: // 银豹发单 + case model.VendorIDJDShop: // 京东商城 + case model.VendorIDWSC: // 微盟微商城 + default: + globals.SugarLogger.Errorf("Order source error, non system order") + return + } + } + return +} diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index 98157f34e..420f775b2 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -235,7 +235,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon order.Status = model.WaybillStatusCourierArrived case fnpsapi.OrderStatusDelivering: // 2 配送中 order.Status = model.WaybillStatusDelivering - //delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) + delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) case fnpsapi.OrderStatusDelivered: // 3 已经送达 order.Status = model.WaybillStatusDelivered case fnpsapi.OrderStatusAcceptCacle: // 4取消订单 diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 57049621a..ceddad877 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -103,7 +103,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m order.Remark = order.CourierName + "," + order.CourierMobile case mtpsapi.OrderStatusPickedUp: order.Status = model.WaybillStatusDelivering - ///delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) + delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) case mtpsapi.OrderStatusDeliverred: order.Status = model.WaybillStatusDelivered case mtpsapi.OrderStatusCanceled: diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index 1852ee821..5424c6067 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -2,7 +2,9 @@ package ebai import ( "fmt" + "git.rosy.net.cn/jx-callback/business/jxstore/event" "strings" + "time" "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/ebaiapi" @@ -579,6 +581,11 @@ func (c *PurchaseHandler) onShopMsgPush(msg *ebaiapi.CallbackMsg) (response *eba if err == nil { err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDEBAI, storeStatus) } + // 操作日志(ebai) + ctx := jxcontext.AdminCtx + store := fmt.Sprintf("饿百外卖回调门店改变回调(营业状态/审核状态):门店id:%s,饿百门店状态:%d.]", vendorStoreID, storeStatus) + event.AddOperateEvent(ctx, ctx.GetTrackInfo(), store, err.Error(), "", int(time.Now().UnixNano()/1000), "UpdateStore") + return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil) } diff --git a/business/partner/purchase/jd/store_test.go b/business/partner/purchase/jd/store_test.go index 255a03d90..e94487cf1 100644 --- a/business/partner/purchase/jd/store_test.go +++ b/business/partner/purchase/jd/store_test.go @@ -84,7 +84,7 @@ func TestUpdateStore2(t *testing.T) { // } func TestSyncQualify(t *testing.T) { - storeDetail, err := dao.GetStoreDetail(dao.GetDB(), 102610, model.VendorIDJD) + storeDetail, err := dao.GetStoreDetail(dao.GetDB(), 102610, model.VendorIDJD, "") if err != nil { t.Fatal(err.Error()) } diff --git a/business/partner/purchase/jdshop/order.go b/business/partner/purchase/jdshop/order.go index 5f6c262b7..a002c1367 100644 --- a/business/partner/purchase/jdshop/order.go +++ b/business/partner/purchase/jdshop/order.go @@ -48,6 +48,9 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID s Current: 1, PageSize: 1, }) + if err != nil { + return nil, err + } return p.Map2Order(utils.Struct2FlatMap(resultOrders)), err } func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) { @@ -81,6 +84,10 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI } func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { status, err := p.GetOrderStatus(order.VendorOrgCode, order.VendorOrderID2) + if err != nil { + globals.SugarLogger.Debug("jdShop GetOrders err := ", err) + return err + } //说明此时该订单在平台上已经取消了 if status == model.OrderStatusCanceled { err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单在京东商城已被取消!") diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index 475562a1e..e67d67e82 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -4,14 +4,11 @@ import ( "encoding/json" "errors" "fmt" - "math" - "regexp" - "strings" - "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" + "git.rosy.net.cn/jx-callback/business/jxstore/event" "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/tasksch" @@ -20,6 +17,10 @@ import ( "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" + "math" + "regexp" + "strings" + "time" ) var ( @@ -344,11 +345,15 @@ func (p *PurchaseHandler) onStoreStatusChanged(msg *mtwmapi.CallbackMsg) (respon } } } - fmt.Println(storeStatus) - //if err == nil { - // err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDMTWM, storeStatus) - //} + + if err == nil { + err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDMTWM, storeStatus) + } response = mtwmapi.Err2CallbackResponse(err, "") + // 操作日志(美团外卖) + ctx := jxcontext.AdminCtx + store := fmt.Sprintf("美团外卖回调门店改变回调(营业状态/审核状态):门店id:%s,美团门店状态:%d.[121营业,120休息,18上线,19下线]", vendorStoreID, int(utils.Str2Int64(msg.FormData.Get("poi_status")))) + event.AddOperateEvent(ctx, ctx.GetTrackInfo(), store, err.Error(), "", int(time.Now().UnixNano()/1000), "UpdateStore") return response } diff --git a/globals/api/api.go b/globals/api/api.go index 73561898d..9f5008e6d 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -3,6 +3,7 @@ package api import ( "git.rosy.net.cn/baseapi/platformapi/jxprintapi" "git.rosy.net.cn/baseapi/platformapi/qywxapi" + "git.rosy.net.cn/baseapi/platformapi/tiktok" "time" "git.rosy.net.cn/baseapi/platformapi/fnpsapi" @@ -72,12 +73,12 @@ var ( WeixinMiniAPI *weixinapi.API // 小程序 WeixinMiniAPI2 *weixinapi.API // 小程序2 WeixinMiniAPIsc *weixinapi.API //小程序商超 - //WeixinMiniAPIPrint *weixinapi.API //小程序打印机 + WeixinMiniAPIPrint *weixinapi.API //小程序打印机 WeixinApp *weixinapi.API // app微信登录 WeixinMiniAppID2 string WeixinMiniAppID3 string WeixinMiniAppIDsc string - //WeixinMiniPrintAppId string + WeixinMiniPrintAppId string WxpayAPI *wxpayapi.API // 微信支付API TLpayAPI *tonglianpayapi.API //通联收银宝api FnAPI *fnpsapi.API //蜂鸟配送api @@ -109,7 +110,7 @@ var ( Cacher cache.ICacher SMSClient *aliyunsmsclient.SmsClient - //TiktokApi *tiktok.API + TiktokApi *tiktok.API ) func init() { @@ -253,9 +254,9 @@ func Init() { if WeixinMiniAppIDsc = beego.AppConfig.DefaultString("weixinMiniAppIDsc", ""); WeixinMiniAppIDsc != "" { WeixinMiniAPIsc = weixinapi.New(WeixinMiniAppIDsc, beego.AppConfig.DefaultString("weixinMiniSecretsc", "")) } - //if WeixinMiniPrintAppId = beego.AppConfig.DefaultString("weixinAppIdPrint", ""); WeixinMiniPrintAppId != "" { - // WeixinMiniAPIPrint = weixinapi.New(WeixinMiniPrintAppId, beego.AppConfig.DefaultString("weixinAppSecretPrint", "")) - //} + if WeixinMiniPrintAppId = beego.AppConfig.DefaultString("weixinAppIdPrint", ""); WeixinMiniPrintAppId != "" { + WeixinMiniAPIPrint = weixinapi.New(WeixinMiniPrintAppId, beego.AppConfig.DefaultString("weixinAppSecretPrint", "")) + } if globals.WxpayNotifyURL != "" { // WxpayAPI = wxpayapi.New(beego.AppConfig.DefaultString("wxpayAppID"), beego.AppConfig.DefaultString("wxpayAppKey"), beego.AppConfig.DefaultString("wxpayAppMchID")) @@ -293,5 +294,5 @@ func Init() { SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/") QywxAPI = qywxapi.New(beego.AppConfig.DefaultString("qywxID", ""), beego.AppConfig.DefaultString("qywxSecret", ""), "") - //TiktokApi = tiktok.New(beego.AppConfig.DefaultString("tiktokAppSecret", ""), beego.AppConfig.DefaultString("tiktokAppKey", "")) + TiktokApi = tiktok.New(beego.AppConfig.DefaultString("tiktokAppSecret", ""), beego.AppConfig.DefaultString("tiktokAppKey", "")) }