From 57b60208e2e8c7dc2a12988af34d6d2536aa0db8 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 19 Sep 2018 09:56:45 +0800 Subject: [PATCH] - GetPlaces support keyword. --- business/jxstore/cms/cms.go | 57 +++++++++++++++++++++++++ business/jxstore/cms/store.go | 34 --------------- business/partner/purchase/ebai/store.go | 54 +++++++++++++++++++---- business/partner/purchase/jd/store.go | 2 + controllers/cms.go | 10 +++-- 5 files changed, 110 insertions(+), 47 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index edce76d1d..8cb00f887 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -3,11 +3,13 @@ package cms import ( "crypto/md5" "fmt" + "strconv" "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch" "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" @@ -66,6 +68,61 @@ func GetQiniuUploadToken(suffix string) (upTokenInfo map[string]interface{}, err return upTokenInfo, err } +func GetPlaces(keyword string, includeDisabled bool, params map[string]interface{}) ([]*model.Place, error) { + sql := ` + SELECT * + FROM place t1 + WHERE 1 = 1 + ` + if !includeDisabled { + sql += " AND enabled = 1" + } + sqlParams := make([]interface{}, 0) + if keyword != "" { + sql += " AND (t1.name LIKE ?" + sqlParams = append(sqlParams, "%"+keyword+"%") + if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil { + sql += " OR t1.code = ?" + sqlParams = append(sqlParams, keywordInt64) + } + sql += ")" + } + if params["parentCode"] != nil { + sql += " AND t1.parent_code = ?" + sqlParams = append(sqlParams, params["parentCode"]) + } + if params["level"] != nil { + sql += " AND t1.level = ?" + sqlParams = append(sqlParams, params["level"]) + } + sql += " ORDER BY t1.level, t1.name" + globals.SugarLogger.Debug(sql) + places := []*model.Place{} + return places, dao.GetRows(nil, &places, sql, sqlParams) +} + +func UpdatePlaces(places []map[string]interface{}, userName string) (num int64, err error) { + if len(places) == 0 { + return 0, ErrMissingInput + } + for _, place := range places { + if place["code"] == nil { + return 0, ErrMissingInput + } + placeid := &model.Place{} + valid := dao.NormalMakeMapByFieldList(place, []string{"jdCode", "enabled", "mtpsPrice"}, userName) + if num, err = dao.UpdateEntityByKV(nil, placeid, valid, utils.Params2Map("Code", place["code"])); err != nil { + return num, err + } + } + return num, err +} + +func UpdatePlace(placeCode int, payload map[string]interface{}, userName string) (num int64, err error) { + payload["code"] = placeCode + return UpdatePlaces([]map[string]interface{}{payload}, userName) +} + ///// func genPicFileName(suffix string) string { return fmt.Sprintf("%x%s", md5.Sum([]byte(utils.GetUUID()+suffix)), suffix) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 58d77ed82..7e930d8c2 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -29,40 +29,6 @@ var ( ErrCanNotFindVendor = errors.New("vendorID参数不合法") ) -func GetPlaces(parentCode int, includeDisabled bool) ([]*model.Place, error) { - db := dao.GetDB() - places := []*model.Place{} - cond := map[string]interface{}{ - "ParentCode": parentCode, - } - if !includeDisabled { - cond["Enabled"] = 1 - } - return places, dao.GetEntities(db, &places, cond, false) -} - -func UpdatePlaces(places []map[string]interface{}, userName string) (num int64, err error) { - if len(places) == 0 { - return 0, ErrMissingInput - } - for _, place := range places { - if place["code"] == nil { - return 0, ErrMissingInput - } - placeid := &model.Place{} - valid := dao.NormalMakeMapByFieldList(place, []string{"jdCode", "enabled", "mtpsPrice"}, userName) - if num, err = dao.UpdateEntityByKV(nil, placeid, valid, utils.Params2Map("Code", place["code"])); err != nil { - return num, err - } - } - return num, err -} - -func UpdatePlace(placeCode int, payload map[string]interface{}, userName string) (num int64, err error) { - payload["code"] = placeCode - return UpdatePlaces([]map[string]interface{}{payload}, userName) -} - // todo 门店绑定信息可以考虑以数组形式返回,而不是现在这样 func GetStores(keyword string, params map[string]interface{}, offset, pageSize int) (retVal *StoresInfo, err error) { sqlFrom := ` diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index cd31ebe8f..84b2bdc9e 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -12,6 +12,7 @@ import ( "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" ) @@ -19,6 +20,13 @@ const ( VendorStorePrefix = "好菜鲜生" ) +type tEbaiStoreInfo struct { + model.Store + VendorStoreID string `orm:"column(vendor_store_id)"` + RealLastOperator string + EbaiStoreStatus int +} + func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) { baiduShopID := utils.Str2Int64(vendorStoreID) result, err := api.EbaiAPI.ShopGet("", baiduShopID) @@ -70,20 +78,34 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) retVal.ID = int(utils.Str2Int64WithDefault(utils.Interface2String(result["shop_id"]), 0)) retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon - region := result["delivery_region"].([]interface{})[0].(map[string]interface{})["region"].([]interface{})[0].([]interface{}) - coords := make([]string, len(region)) - for k, v := range region { - mapV := v.(map[string]interface{}) - coords[k] = fmt.Sprintf("%d,%d", jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["longitude"])), jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["latitude"]))) - } - retVal.DeliveryRange = strings.Join(coords, ";") + retVal.DeliveryRange = EbaiDeliveryRegion2Jx(result["delivery_region"]) + return retVal, nil } return nil, err } -func (p *PurchaseHandler) UpdateStore(storeID int, userName string) error { - return nil +func (p *PurchaseHandler) UpdateStore(storeID int, userName string) (err error) { + db := dao.GetDB() + var store tEbaiStoreInfo + sql := ` + SELECT t1.*, t2.status ebai_store_status, t2.vendor_store_id, + IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator + FROM store t1 + JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? + WHERE t1.id = ?` + if err = dao.GetRow(db, &store, sql, model.VendorIDJD, storeID); err == nil { + params := map[string]interface{}{ + "name": jxutils.ComposeStoreName(store.Name, partner.StoreNameSeparator, VendorStorePrefix), + "address": store.Address, + "coord_type": ebaiapi.CoordTypeAutonavi, // 一直用高德 + } + // globals.SugarLogger.Debug(utils.Format4Output(params, false)) + if globals.EnableStoreWrite { + err = api.JdAPI.UpdateStoreInfo4Open(store.VendorStoreID, store.RealLastOperator, params) + } + } + return err } func EbaiDeliveryType2Jx(deliveryType string) int8 { @@ -100,3 +122,17 @@ func EbaiDeliveryType2Jx(deliveryType string) int8 { return scheduler.StoreDeliveryTypeCrowdSourcing } } + +func EbaiDeliveryRegion2Jx(deliveryRegion interface{}) string { + region := deliveryRegion.([]interface{})[0].(map[string]interface{})["region"].([]interface{})[0].([]interface{}) + coords := make([]string, len(region)) + for k, v := range region { + mapV := v.(map[string]interface{}) + coords[k] = fmt.Sprintf("%d,%d", jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["longitude"])), jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["latitude"]))) + } + return strings.Join(coords, ";") +} + +func JxDeliveryRegion2Ebai(coords string) string { + return "" +} diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 9aad56451..eaa20febb 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -97,6 +97,8 @@ func (p *PurchaseHandler) UpdateStore(storeID int, userName string) (err error) "serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1), "deliveryRangeType": store.DeliveryRangeType, "coordinateType": 3, // 一直用高德 + "lng": jxutils.IntCoordinate2Standard(store.Lng), + "lat": jxutils.IntCoordinate2Standard(store.Lat), "city": store.JdCityCode, "county": store.JdDistrictCode, } diff --git a/controllers/cms.go b/controllers/cms.go index a8e46b9cd..f014be09f 100644 --- a/controllers/cms.go +++ b/controllers/cms.go @@ -11,16 +11,18 @@ type CmsController struct { } // @Title 得到地点(省,城市,区)信息 -// @Description parentCode与vendorID必传入一个,vendorID的意思是得到所有与这个厂商相关的城市列表。地点级别:省为1,市为2,区为3,注意直辖市也要分省与市级 -// @Param token header string true "认证token" -// @Param parentCode query int true "上级地点code,这个指的是国家标准CODE(中国为:100000,北京为:110000,北京市为:110100),不是数据库中的ID" +// @Description 得到地点(省,城市,区)信息。 +// @Param token header string true "认证token"// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" +// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" +// @Param parentCode query int false "上级地点code,这个指的是国家标准CODE(中国为:100000,北京为:110000,北京市为:110100),不是数据库中的ID" +// @Param level query int false "地点级别:省为1,市为2,区为3,注意直辖市也要分省与市级" // @Param includeDisabled query bool false "是否包括禁用的城市(缺省不包括)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetPlaces [get] func (c *CmsController) GetPlaces() { c.callGetPlaces(func(params *tCmsGetPlacesParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.GetPlaces(params.ParentCode, params.IncludeDisabled) + retVal, err = cms.GetPlaces(params.Keyword, params.IncludeDisabled, params.MapData) return retVal, "", err }) }