package mtwm import ( "errors" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "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" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) const ( VendorStorePrefix = "美好菜市" ) type tEbaiStoreInfo struct { model.Store VendorStoreID string `orm:"column(vendor_store_id)"` RealLastOperator string EbaiStoreStatus int SyncStatus int ProvinceID int `orm:"column(province_id)"` CityID int `orm:"column(city_id)"` DistrictID int `orm:"column(district_id)"` } func (p *PurchaseHandler) ReadStore(vendorStoreID string) (retVal *model.Store, err error) { result, err := api.MtwmAPI.PoiGet(vendorStoreID) if err == nil { // globals.SugarLogger.Debug(utils.Format4Output(result, false)) retVal = &model.Store{ Address: utils.Interface2String(result["address"]), Tel1: utils.Interface2String(result["phone"]), } retVal.OriginalName = utils.Interface2String(result["name"]) _, retVal.Name = jxutils.SplitStoreName(retVal.OriginalName, partner.StoreNameSeparator, VendorStorePrefix) openTimes := openTimeMtwm2JX(result["shipping_time"].(string)) if len(openTimes) > 0 { retVal.OpenTime1 = openTimes[0][0] retVal.CloseTime1 = openTimes[0][1] if len(openTimes) > 1 { retVal.OpenTime2 = openTimes[1][0] retVal.CloseTime2 = openTimes[1][1] } } retVal.Status = bizStatusMtwm2JX(int(utils.MustInterface2Int64(result["open_level"])), int(utils.MustInterface2Int64(result["is_online"]))) tel2 := utils.Interface2String(result["standby_tel"]) if tel2 != "" && tel2 != retVal.Tel1 { retVal.Tel2 = tel2 } retVal.Lng = int(utils.MustInterface2Float64(result["longitude"])) retVal.Lat = int(utils.MustInterface2Float64(result["latitude"])) lng := jxutils.IntCoordinate2Standard(retVal.Lng) lat := jxutils.IntCoordinate2Standard(retVal.Lat) db := dao.GetDB() retVal.DistrictCode = api.AutonaviAPI.GetCoordinateDistrictCode(lng, lat) if district, err := dao.GetPlaceByCode(db, retVal.DistrictCode); err == nil { retVal.CityCode = district.ParentCode } poiCode := utils.Interface2String(result["app_poi_code"]) retVal.ID = int(utils.Str2Int64WithDefault(poiCode, 0)) retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon var deliveryRangeInfo []map[string]interface{} deliveryRangeInfo, err = api.MtwmAPI.ShippingList(poiCode) if err != nil { deliveryRangeInfo, err = api.MtwmAPI.ShippingFetch(poiCode) } if err == nil { if len(deliveryRangeInfo) > 0 { retVal.DeliveryRange = rangeMtwm2JX(deliveryRangeInfo[0]["area"].(string)) if utils.Interface2String(deliveryRangeInfo[0]["logistics_code"]) == mtwmapi.PeiSongTypeSelf { retVal.DeliveryType = scheduler.StoreDeliveryTypeByStore } else { retVal.DeliveryType = scheduler.StoreDeliveryTypeCrowdSourcing } } } return retVal, nil } return nil, err } func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (err error) { return p.UpdateStore(db, storeID, userName) } func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { if db == nil { db = dao.GetDB() } storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM) if err != nil { return err } openTime := [][2]int16{[2]int16{storeDetail.OpenTime1, storeDetail.CloseTime1}} if storeDetail.OpenTime2 > 0 { openTime = append(openTime, [2]int16{storeDetail.OpenTime2, storeDetail.CloseTime2}) } openLevel, isOnline := bizStatusJX2Mtwm(jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus)) // remoteStoreInfo, err := api.MtwmAPI.PoiGet(storeDetail.VendorStoreID) // if err != nil { // return err // } // params := map[string]interface{}{ // "name": utils.Interface2String(remoteStoreInfo["name"]), //jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM), // "phone": storeDetail.Tel1, // "shipping_fee": jxutils.IntPrice2Standard(int64(storeDetail.DeliveryFee)), // "shipping_time": openTimeJX2Mtwm(openTime), // "third_tag_name": "蔬菜", // } // if true { //storeDetail.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 { // params["address"] = storeDetail.Address // params["longitude"] = jxutils.IntCoordinate2Standard(storeDetail.Lng) // params["latitude"] = jxutils.IntCoordinate2Standard(storeDetail.Lat) // } // params["open_level"] = openLevel // params["is_online"] = isOnline // globals.SugarLogger.Debug(utils.Format4Output(params, false)) // if globals.EnableMtwmStoreWrite { // err = api.MtwmAPI.PoiSave(storeDetail.VendorStoreID, params) // } if globals.EnableMtwmStoreWrite { if isOnline != mtwmapi.PoiStatusOnline { err = api.MtwmAPI.PoiOffline(storeDetail.VendorStoreID) } else { if err = api.MtwmAPI.PoiOnline(storeDetail.VendorStoreID); err == nil { // 这个函数成功返回也并不表示上线成功。。。 remoteStoreInfo, err2 := api.MtwmAPI.PoiGet(storeDetail.VendorStoreID) if err = err2; err != nil { return err } if int(utils.MustInterface2Int64(remoteStoreInfo["is_online"])) == mtwmapi.PoiStatusOnline { if openLevel == mtwmapi.PoiOpenLevelHaveRest { err = api.MtwmAPI.PoiClose(storeDetail.VendorStoreID) } else { err = api.MtwmAPI.PoiOpen(storeDetail.VendorStoreID) } if err == nil { err = api.MtwmAPI.PoiShipTimeUpdate(storeDetail.VendorStoreID, openTimeJX2Mtwm(openTime)) } } else { err = errors.New("门店还未上线,不能修改营业状态") } } } } return err } func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { return "", errors.New("美团外卖不支持此操作") } func (p *PurchaseHandler) onStoreStatusChanged(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) { var err error poiStatus := int(utils.Str2Int64(msg.Data.Get("poi_status"))) vendorStoreID := msg.Data.Get("app_poi_code") storeStatus := 0 if poiStatus == mtwmapi.MsgPoiStatusOpened { storeStatus = model.StoreStatusOpened } else if poiStatus == mtwmapi.MsgPoiStatusClosed { storeStatus = model.StoreStatusClosed } else if poiStatus == mtwmapi.MsgPoiStatusOffline { storeStatus = model.StoreStatusDisabled } else { storeStatus, err = p.GetStoreStatus(jxcontext.AdminCtx, vendorStoreID) } if err == nil { err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDMTWM, storeStatus) } response = mtwmapi.Err2CallbackResponse(err, "") return response } func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorStoreID string) (storeStatus int, err error) { result, err := api.MtwmAPI.PoiGet(vendorStoreID) if err == nil { return bizStatusMtwm2JX(int(utils.MustInterface2Int64(result["open_level"])), int(utils.MustInterface2Int64(result["is_online"]))), nil } return 0, err }