From 0bfd0b65154245da074e93c895cc0e04bd7fc8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Thu, 20 Mar 2025 10:49:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=A0=B9=E6=8D=AE=E5=9D=90=E6=A0=87?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=89=A9=E7=90=86=E5=9C=B0=E5=9D=80=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A0=B9=E6=8D=AE=E5=9F=8E=E5=B8=82code?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/user2.go | 34 +++++++++++++++++++++------------- business/model/dao/place.go | 25 +++++++++++++++++++++++++ controllers/cms_user2.go | 6 ++++++ 3 files changed, 52 insertions(+), 13 deletions(-) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 3f233421b..fc62cd63c 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -653,17 +653,24 @@ func DeleteUsers4Role(ctx *jxcontext.Context, r *authz.RoleInfo, userIDList []st return errList.GetErrListAsOne() } -func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64) (formattedAddress string, districtCode, cityCode int, err error) { - regeoInfo, err := api.TencentMapAPI.GeoCodeRegeoSingle(lng, lat, 0, false, nil, 0, 0) - if err == nil { - formattedAddress = regeoInfo.Result.Address - districtCode = int(utils.Str2Int64WithDefault(regeoInfo.Result.AdInfo.Adcode, 0)) - if districtCode == 0 { - err = fmt.Errorf("坐标lng:%f,lat:%f找不到位置信息", lng, lat) - } else if districtInfo, err2 := dao.GetPlaceByCode(db, districtCode); err2 == nil { - cityCode = districtInfo.ParentCode - } +func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64, districtCodeParam int) (formattedAddress string, districtCode, cityCode int, err error) { + place, err := dao.GetPlacesByDistrictCode(districtCodeParam) + if err != nil { + return "", 0, 0, err } + formattedAddress = place.ProvinceName + place.CityName + place.CountyName + districtCode = place.CountyCode + cityCode = place.CityCode + //regeoInfo, err := api.TencentMapAPI.GeoCodeRegeoSingle(lng, lat, 0, false, nil, 0, 0) + //if err == nil { + // formattedAddress = regeoInfo.Result.Address + // districtCode = int(utils.Str2Int64WithDefault(regeoInfo.Result.AdInfo.Adcode, 0)) + // if districtCode == 0 { + // err = fmt.Errorf("坐标lng:%f,lat:%f找不到位置信息", lng, lat) + // } else if districtInfo, err2 := dao.GetPlaceByCode(db, districtCode); err2 == nil { + // cityCode = districtInfo.ParentCode + // } + //} // 地址 // 行政区划code return formattedAddress, districtCode, cityCode, err } @@ -676,7 +683,8 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA db := dao.GetDB() lng := address.Lng lat := address.Lat - address.AutoAddress, address.DistrictCode, address.CityCode, err = getAddressInfoFromCoord(db, lng, lat) + + address.AutoAddress, address.DistrictCode, address.CityCode, err = getAddressInfoFromCoord(db, lng, lat, address.DistrictCode) if err == nil { txDB, _ := dao.Begin(db) defer func() { @@ -739,11 +747,11 @@ func UpdateUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID var outAddress *model.UserDeliveryAddress valid := dao.StrictMakeMapByStructObject2(payload, address, &outAddress, ctx.GetUserName()) delete(valid, "autoAddress") - delete(valid, "districtCode") + //delete(valid, "districtCode") delete(valid, "cityCode") if len(valid) > 0 { if valid["lng"] != nil || valid["lat"] != nil { - valid["autoAddress"], valid["districtCode"], valid["cityCode"], err = getAddressInfoFromCoord(db, outAddress.Lng, outAddress.Lat) + valid["autoAddress"], valid["districtCode"], valid["cityCode"], err = getAddressInfoFromCoord(db, outAddress.Lng, outAddress.Lat, valid["districtCode"].(int)) if err != nil { return err } diff --git a/business/model/dao/place.go b/business/model/dao/place.go index 9b862a4b2..7474624b2 100644 --- a/business/model/dao/place.go +++ b/business/model/dao/place.go @@ -114,3 +114,28 @@ func GetPlaces(db *DaoDB, cityCodes []int) (places []*model.Place, err error) { err = GetRows(db, &places, sql, sqlParams) return places, err } + +func GetPlacesByDistrictCode(districtCode int) (*DistrictName, error) { + sql := ` + SELECT p1.name province_name,p1.code province_code,p2.name city_name,p2.code city_code,p3.name county_name,p3.code county_code FROM place p1 + LEFT JOIN place p2 ON p2.parent_code = p1.code + LEFT JOIN place p3 ON p3.parent_code = p2.code + WHERE p3.code = ? +` + sqlParams := []interface{}{districtCode} + place := &DistrictName{} + if err := GetRow(GetDB(), place, sql, sqlParams...); err != nil { + return nil, err + } + + return place, nil +} + +type DistrictName struct { + ProvinceName string `json:"province_name"` + ProvinceCode int `json:"province_code"` + CityName string `json:"city_name"` + CityCode int `json:"city_code"` + CountyName string `json:"county_name"` + CountyCode int `json:"county_code"` +} diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 3307a4d95..39b58a2a9 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -293,6 +293,8 @@ func (c *User2Controller) TransferLegacyWeixins() { // @Param tag formData string false "标签" // @Param remark formData string false "备注" // @Param isDefault formData int false "是否是默认" +// @Param cityCode formData int false "省code" +// @Param districtCode formData int false "市code" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /AddMyDeliveryAddress [post] @@ -312,6 +314,8 @@ func (c *User2Controller) AddMyDeliveryAddress() { Tag: params.Tag, Remark: params.Remark, IsDefault: int8(params.IsDefault), + CityCode: params.CityCode, + DistrictCode: params.DistrictCode, } retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) return retVal, "", err @@ -345,6 +349,8 @@ func (c *User2Controller) DeleteMyDeliveryAddress() { // @Param tag formData string false "标签" // @Param remark formData string false "备注" // @Param isDefault formData int false "是否是默认(0:否,1:是)" +// @Param cityCode formData int false "省code" +// @Param districtCode formData int false "市code" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /UpdateMyDeliveryAddress [put]