From a6c7c1e7dddd4eadbec042a012ae241dffc2a3a9 Mon Sep 17 00:00:00 2001 From: qidongsheng Date: Tue, 30 Jun 2020 08:39:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BE=8E=E5=9B=A2=E9=85=8D?= =?UTF-8?q?=E9=80=81=E5=90=8C=E6=AD=A5=E6=96=B9=E6=B3=95=E7=9A=84=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 147 ++++++++++++------------ business/jxstore/cms/sync.go | 100 ++++++++++++++++ business/jxstore/misc/misc.go | 2 + 3 files changed, 178 insertions(+), 71 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index 7246aa0d7..ad492db2c 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -1,14 +1,11 @@ package cms import ( - "encoding/json" "fmt" "git.rosy.net.cn/baseapi/platformapi/dingdingapi" "git.rosy.net.cn/jx-callback/business/jxutils/ddmsg" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" - "io/ioutil" - "net/http" "strconv" "strings" "sync" @@ -572,66 +569,73 @@ func StoreOpenAll(ctx *jxcontext.Context) { /* 美团配送的门店营业状态,如果是休息,则京西这边不发单,如果是营业,京西这边状态就是发单 美团配送的门店营业状态要通过网页扒取(应该是接了的代码里要找一下)*/ /*获取门店信息*/ - type DataList struct { - OuterPoiId string `json:"outerPoiId"` //店ID - PoiName string `json:"poiName"` //店名 - OpenType int `json:"openType"` //营业状态 1是营业 0是休息 - } - type jdData struct { - PageNum int `json:"pageNum"` - PageSize int `json:"pageSize"` - DataList []DataList `json:"dataList"` - } - type JdStore struct { - Code int `json:"code"` - Msg string `json:"msg"` - Data1 jdData `json:"data"` - } - client := &http.Client{} - var StoreInfoList []*JdStore - complate := make(chan bool, 1) - cookie := "_lxsdk_cuid=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + - "_lxsdk=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + - "uuid=fa1894be8819a84be4ef.1592458555.1.0.0; wm_order_channel=sjzxpc; " + - "cssVersion=82f258e3; utm_source=60376; au_trace_key_net=default; " + - "openh5_uuid=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + - "bmm-uuid=dbdc11bf-fcfe-84a0-0586-97e3d7d23ec7; " + - "token=-MfbU7noKEgDWuNA559DeG6LmYZ51CCiH8bYrH-eYuaugCOqJL7863lKoAWfx8HoydOzJE8r9gGM3QJ0IC3niA; " + - "_lxsdk_s=172fa436aed-861-103-c9b%7C%7C7" - go func() { - num := 1 - for { - /* cookie还需要修改*/ - /* context.TODO()*/ - url := "https://peisong.meituan.com/api/haikuiopen/haikui/open/partner/poi/search?pageSize=20&pageNum=" + strconv.Itoa(num) + "" - req, _ := http.NewRequest("POST", url, nil) - req.Header.Set("Cookie", cookie) - req.Header.Set("Referer", "https://peisong.meituan.com/open/admin/accountList") - res, _ := client.Do(req) - //defer res.Body.Close() - if res.Body != nil { - StoreInfo := &JdStore{} - body, _ := ioutil.ReadAll(res.Body) - json.Unmarshal(body, StoreInfo) - if len(StoreInfo.Data1.DataList) == 0 || StoreInfo.Data1.DataList == nil { - complate <- true - } - StoreInfoList = append(StoreInfoList, StoreInfo) - num++ - } else { - complate <- true - } - } - }() - select { - case <-complate: - break - } - /*StoreInfoList1 map[11691658]=1*/ + //type DataList struct { + // OuterPoiId string `json:"outerPoiId"` //店ID + // PoiName string `json:"poiName"` //店名 + // OpenType int `json:"openType"` //营业状态 1是营业 0是休息 + //} + //type jdData struct { + // PageNum int `json:"pageNum"` + // PageSize int `json:"pageSize"` + // DataList []DataList `json:"dataList"` + //} + //type JdStore struct { + // Code int `json:"code"` + // Msg string `json:"msg"` + // Data1 jdData `json:"data"` + //} + //client := &http.Client{} + //var StoreInfoList []*JdStore + //complate := make(chan bool, 1) + //cookie := "_lxsdk_cuid=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + + // "_lxsdk=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + + // "uuid=fa1894be8819a84be4ef.1592458555.1.0.0; wm_order_channel=sjzxpc; " + + // "cssVersion=82f258e3; utm_source=60376; au_trace_key_net=default; " + + // "openh5_uuid=172c5ed322ac8-081f1f7ebdcbeb-f7d1d38-149c48-172c5ed322ac8; " + + // "bmm-uuid=dbdc11bf-fcfe-84a0-0586-97e3d7d23ec7; " + + // "token=-MfbU7noKEgDWuNA559DeG6LmYZ51CCiH8bYrH-eYuaugCOqJL7863lKoAWfx8HoydOzJE8r9gGM3QJ0IC3niA; " + + // "_lxsdk_s=172fa436aed-861-103-c9b%7C%7C7" + //go func() { + // num := 1 + // for { + // /* cookie还需要修改*/ + // /* context.TODO()*/ + // url := "https://peisong.meituan.com/api/haikuiopen/haikui/open/partner/poi/search?pageSize=20&pageNum=" + strconv.Itoa(num) + "" + // req, _ := http.NewRequest("POST", url, nil) + // req.Header.Set("Cookie", cookie) + // req.Header.Set("Referer", "https://peisong.meituan.com/open/admin/accountList") + // res, _ := client.Do(req) + // //defer res.Body.Close() + // if res.Body != nil { + // StoreInfo := &JdStore{} + // body, _ := ioutil.ReadAll(res.Body) + // json.Unmarshal(body, StoreInfo) + // if len(StoreInfo.Data1.DataList) == 0 || StoreInfo.Data1.DataList == nil { + // complate <- true + // } + // StoreInfoList = append(StoreInfoList, StoreInfo) + // num++ + // } else { + // complate <- true + // } + // } + //}() + //select { + //case <-complate: + // break + //} + ///*StoreInfoList1 map[11691658]=1*/ + //StoreInfoList1 := make(map[string]int) + //for _, store := range StoreInfoList { + // for _, data := range store.Data1.DataList { + // StoreInfoList1[data.OuterPoiId] = data.OpenType + // } + //} + StoreInfoList, err := api.MtpsAPI.GetStoreStatusAll() StoreInfoList1 := make(map[string]int) for _, store := range StoreInfoList { - for _, data := range store.Data1.DataList { - StoreInfoList1[data.OuterPoiId] = data.OpenType + for _, data := range store.DataList { + StoreInfoList1[data.OuterPoiID] = data.OpenType } } /* fmt.Println(num) @@ -665,15 +669,15 @@ func StoreOpenAll(ctx *jxcontext.Context) { globals.SugarLogger.Debug(err.Error()) } for _, StoreList := range StoreLists { - StoreCourierList, err := dao.GetStoreCourierList(db, []int{StoreList.ID}, -9, -9) + StoreCourierList, err := dao.GetStoreCourierList(db, []int{StoreList.ID}, model.StoreStatusAll, model.StoreStatusAll) if err != nil { globals.SugarLogger.Debug(err.Error()) } for _, StoreCourierList1 := range StoreCourierList { - if StoreCourierList1.VendorID != 102 { + if StoreCourierList1.VendorID != model.VendorIDMTPS { continue } - if StoreCourierList1.Status == -2 { + if StoreCourierList1.Status == model.StoreStatusDisabled { continue } /*京西不为空*/ @@ -689,13 +693,16 @@ func StoreOpenAll(ctx *jxcontext.Context) { } continue } - /*美团上商店名不为空,容错*/ - if MTPSInfo.ShopName != "" { - if MTPSInfo.ShopName == StoreList.Name { - /*平台上有且名字相同不做处理*/ + /* 果园和菜市的门店ID可能有重复,导致在美团配送上建的门店只有一方的门店是生效的,可以根据ID在美团配送上查,查到是果园的店,那菜市的店则要重新绑定美团配送(要换一个美团配送的门店ID。不然要重复), + 反之也要,可根据其他信息,比如门店名(传到平台上的规则都是一样的),坐标等判断是果园的还是菜市的*/ + + /*美团上坐标不为空,容错 PS:用名字的话,本身就没办法判断是菜市还是果园*/ + if MTPSInfo.ShopLng != 0 && MTPSInfo.ShopLat != 0 { + if MTPSInfo.ShopLng == StoreList.Lng && MTPSInfo.ShopLat == StoreList.Lat { + /*平台上有且坐标相同不做处理*/ continue } else { - /*平台上但是名字不同,解绑*/ + /*平台上但是坐标不同,解绑*/ fmt.Println(strconv.Itoa(StoreCourierList1.StoreID) + " 被解绑") if _, err := DeleteStoreCourierMap(ctx, db, StoreCourierList1.StoreID, StoreCourierList1.VendorID, ctx.GetUserName()); err != nil { globals.SugarLogger.Debug(err.Error()) @@ -716,8 +723,6 @@ func StoreOpenAll(ctx *jxcontext.Context) { } } } - /* 果园和菜市的门店ID可能有重复,导致在美团配送上建的门店只有一方的门店是生效的,可以根据ID在美团配送上查,查到是果园的店,那菜市的店则要重新绑定美团配送(要换一个美团配送的门店ID。不然要重复), - 反之也要,可根据其他信息,比如门店名(传到平台上的规则都是一样的),坐标等判断是果园的还是菜市的*/ } } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index d3069e6d9..8314af25d 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -3,6 +3,7 @@ package cms import ( "errors" "fmt" + "strconv" "sync" "time" @@ -1250,3 +1251,102 @@ func SyncSkuExperfixAndWatermark(ctx *jxcontext.Context) (err error) { _, err = task.GetResult(0) return err } + +func SetMTPSStatus(ctx *jxcontext.Context) { + /* 美团配送的门店营业状态,如果是休息,则京西这边不发单,如果是营业,京西这边状态就是发单 + 美团配送的门店营业状态要通过网页扒取(应该是接了的代码里要找一下)*/ + /*获取门店信息*/ + StoreInfoList, err := api.MtpsAPI.GetStoreStatusAll() + StoreInfoList1 := make(map[string]int) + for _, store := range StoreInfoList { + for _, data := range store.DataList { + StoreInfoList1[data.OuterPoiID] = data.OpenType + } + } + /* fmt.Println(num) + fmt.Println(StoreInfoList)*/ + db := dao.GetDB() + /*比较营业状态*/ + StoreCourierList, err := dao.GetStoreCourierList(db, []int{}, -9, -9) + for _, StoreCourierList1 := range StoreCourierList { + /*如果京西店在美团上没有,那下面有专门方法处理*/ + if _, ok := StoreInfoList1[StoreCourierList1.VendorStoreID]; ok { + /*京西配送状态为配送,美团营业状态是没有营业的*/ + if StoreCourierList1.Status == 1 && StoreInfoList1[StoreCourierList1.VendorStoreID] == 0 { + sl := make(map[string]interface{}) + sl["status"] = 0 + sl["vendorStoreID"] = StoreCourierList1.VendorStoreID + UpdateStoreCourierMap(ctx, nil, StoreCourierList1.StoreID, StoreCourierList1.VendorID, sl, ctx.GetUserName()) + /*京西配送状态为不配送,美团营业状态是营业的*/ + } else if StoreCourierList1.Status != 1 && StoreInfoList1[StoreCourierList1.VendorStoreID] == 1 { + sl := make(map[string]interface{}) + sl["status"] = 1 + sl["vendorStoreID"] = StoreCourierList1.VendorStoreID + UpdateStoreCourierMap(ctx, nil, StoreCourierList1.StoreID, StoreCourierList1.VendorID, sl, ctx.GetUserName()) + } + } + } + /* 美团配送的门店是否存在,调用美团配送的api(有可能接了),查询京西门店对应的美团配送门店是否存在,若不存在则要在京西这边解绑美团配送门店 + 怎么解绑可以在网页上门店管理那点一下看看调的什么接口,传的什么参数*/ + /*获取所有门店信息*/ + StoreLists, err := dao.GetStoreList(db, nil, nil, []int{}, nil, "") + if err != nil { + globals.SugarLogger.Debug(err.Error()) + } + for _, StoreList := range StoreLists { + StoreCourierList, err := dao.GetStoreCourierList(db, []int{StoreList.ID}, model.StoreStatusAll, model.StoreStatusAll) + if err != nil { + globals.SugarLogger.Debug(err.Error()) + } + for _, StoreCourierList1 := range StoreCourierList { + if StoreCourierList1.VendorID != model.VendorIDMTPS { + continue + } + if StoreCourierList1.Status == model.StoreStatusDisabled { + continue + } + /*京西不为空*/ + if StoreCourierList1.VendorStoreID != "" { + /*调用API获取美团的商店信息*/ + MTPSInfo, _ := api.MtpsAPI.ShopQuery(StoreCourierList1.VendorStoreID) + /*京西有,美团没有*/ + if MTPSInfo == nil { + fmt.Println(strconv.Itoa(StoreCourierList1.StoreID) + " 被解绑") + if _, err := DeleteStoreCourierMap(ctx, db, StoreCourierList1.StoreID, StoreCourierList1.VendorID, ctx.GetUserName()); err != nil { + globals.SugarLogger.Debug(err.Error()) + return + } + continue + } + /* 果园和菜市的门店ID可能有重复,导致在美团配送上建的门店只有一方的门店是生效的,可以根据ID在美团配送上查,查到是果园的店,那菜市的店则要重新绑定美团配送(要换一个美团配送的门店ID。不然要重复), + 反之也要,可根据其他信息,比如门店名(传到平台上的规则都是一样的),坐标等判断是果园的还是菜市的*/ + + /*美团上坐标不为空,容错 PS:用名字的话,本身就没办法判断是菜市还是果园*/ + if MTPSInfo.ShopLng != 0 && MTPSInfo.ShopLat != 0 { + if MTPSInfo.ShopLng == StoreList.Lng && MTPSInfo.ShopLat == StoreList.Lat { + /*平台上有且坐标相同不做处理*/ + continue + } else { + /*平台上但是坐标不同,解绑*/ + fmt.Println(strconv.Itoa(StoreCourierList1.StoreID) + " 被解绑") + if _, err := DeleteStoreCourierMap(ctx, db, StoreCourierList1.StoreID, StoreCourierList1.VendorID, ctx.GetUserName()); err != nil { + globals.SugarLogger.Debug(err.Error()) + return + } + } + } else { //容错 + /*美团平台上面没找到,解绑*/ + fmt.Println(strconv.Itoa(StoreCourierList1.StoreID) + " 被解绑") + if _, err := DeleteStoreCourierMap(ctx, db, StoreCourierList1.StoreID, StoreCourierList1.VendorID, ctx.GetUserName()); err != nil { + globals.SugarLogger.Debug(err.Error()) + return + } + //} else { + // 美团平台上有,京西没得,调用方法可能需要做一些修改 + // context.TODO() + //} + } + } + } + } +} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 2f84dd366..d8e9ea0c5 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -422,6 +422,8 @@ func doDailyWork() { orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -3).Format("20060102"), time.Now().Format("20060102")) //同步上架京东商城待售商品 cms.RefreshJdsSkusStatus(jxcontext.AdminCtx) + //同步美团配送与否状态及美团门店是否存在 + cms.SetMTPSStatus(jxcontext.AdminCtx) } func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {