package api import ( "encoding/json" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" "io" "pet-house.com/business/models" "pet-house.com/business/utils" "pet-house.com/core/server/database" "pet-house.com/core/server/web/web_iris" ) type ServiceAddrListResponse struct { UserServiceAddrList []*models.UserServiceAddr `json:"userServiceAddrList"` } // 我的服务地址列表 func (p DefParty) serviceAddrList() web_iris.Party { return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) { index.Post(ServiceBase+"/serviceAddrList", func(ctx *context.Context) { headerBaseInfo := GetHeaderBaseInfo(ctx) var userServiceAddrList []*models.UserServiceAddr database.Instance().Model(&models.UserServiceAddr{}).Where("uid = ?", headerBaseInfo.Uid).Find(&userServiceAddrList) for _, value := range userServiceAddrList { value.Area = ServiceAddrMap[value.AreaId].Addr } Success(ctx, headerBaseInfo, ServiceAddrListResponse{userServiceAddrList}) }) }} } type ServiceAddOrEditRequest struct { Id int64 Name string Mobile string AreaId int64 Addr string Longitude string Latitude string } type ServiceAddOrEditResponse struct { ServiceAddrList []*models.UserServiceAddr `json:"serviceAddrList"` } // 服务地址添加或编辑 func (p DefParty) serviceAddOrEdit() web_iris.Party { return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) { index.Post(ServiceBase+"/serviceAddOrEdit", func(ctx *context.Context) { headerBaseInfo := GetHeaderBaseInfo(ctx) body, _ := io.ReadAll(ctx.Request().Body) var serviceAddOrEditRequest ServiceAddOrEditRequest json.Unmarshal(body, &serviceAddOrEditRequest) /*var serviceAddr models.ServiceAddr serviceAddr = ServiceAddrMap[serviceAddOrEditRequest.AreaId] if serviceAddr.Id == 0 { ServiceAddrNotExistError.Fail(ctx, serviceAddOrEditRequest) return }*/ //database.Instance().Model(&models.ServiceAddr{}).Where("id = ?", serviceAddOrEditRequest.AreaId).Find(&serviceAddr) userServiceAddr := models.UserServiceAddr{ Uid: headerBaseInfo.Uid, Name: serviceAddOrEditRequest.Name, Mobile: serviceAddOrEditRequest.Mobile, //AreaId: serviceAddr.Id, Addr: serviceAddOrEditRequest.Addr, Longitude: serviceAddOrEditRequest.Longitude, Latitude: serviceAddOrEditRequest.Latitude, } if len(serviceAddOrEditRequest.Longitude) == 0 || len(serviceAddOrEditRequest.Latitude) == 0 { addrGeocoding := utils.GetAddrGeocoding(utils.BmapGeoCodingRequest{Address: serviceAddOrEditRequest.Addr}) userServiceAddr.Longitude = addrGeocoding.Longitude userServiceAddr.Latitude = addrGeocoding.Latitude } //最远服务距离>0 才计算 /*if serviceAddr.DistantGapMeters > 0 { serviceAddrLat, _ := strconv.ParseFloat(serviceAddr.Latitude, 64) serviceAddrLng, _ := strconv.ParseFloat(serviceAddr.Longitude, 64) servicePoint := geo.NewPoint(serviceAddrLat, serviceAddrLng) userAddrLat, _ := strconv.ParseFloat(userServiceAddr.Latitude, 64) userAddrLng, _ := strconv.ParseFloat(userServiceAddr.Longitude, 64) userPoint := geo.NewPoint(userAddrLat, userAddrLng) // 计算两个点之间的距离(单位:米) distance := servicePoint.GreatCircleDistance(userPoint) * 1000 zap_server.ZAPLOG.Info("服务距离", zap.Any("distance", distance), zap.Any("服务经纬度", servicePoint), zap.Any("用户经纬度", userPoint)) //超出服务范围 if distance >= serviceAddr.DistantGapMeters { NotInServiceExistError.Fail(ctx, serviceAddOrEditRequest) return } }*/ /*recogResponse := utils.GetAddrRecog(utils.BmapRecogRequest{Address: userServiceAddr.Addr}) if len(serviceAddr.ServiceAreaId) > 0 { zap_server.ZAPLOG.Info("serviceArea", zap.Any("response", recogResponse), zap.Any("serviceAddr", serviceAddr.ServiceAreaId)) if recogResponse.County != serviceAddr.ServiceAreaId { NotInServiceExistError.Fail(ctx, serviceAddOrEditRequest) return } }*/ //userServiceAddr.AddrArea = recogResponse.County if serviceAddOrEditRequest.Id == 0 { database.Instance().Model(&models.UserServiceAddr{}).Create(&userServiceAddr) } else { userServiceAddr.Id = serviceAddOrEditRequest.Id var findUserServiceAddr models.UserServiceAddr database.Instance().Model(&models.UserServiceAddr{}).Where("id = ? and uid = ?", serviceAddOrEditRequest.Id, headerBaseInfo.Uid).Find(&findUserServiceAddr) if findUserServiceAddr.Id == 0 { UserServiceAddrNotExistError.Fail(ctx, serviceAddOrEditRequest) return } updateValues := map[string]interface{}{ "Uid": headerBaseInfo.Uid, "Name": serviceAddOrEditRequest.Name, "Mobile": serviceAddOrEditRequest.Mobile, //"AreaId": serviceAddr.Id, "Addr": serviceAddOrEditRequest.Addr, "Longitude": serviceAddOrEditRequest.Longitude, "Latitude": serviceAddOrEditRequest.Latitude, } database.Instance().Model(&userServiceAddr).Updates(&updateValues) } var userServiceAddrList []*models.UserServiceAddr database.Instance().Model(&models.UserServiceAddr{}).Where("uid = ?", headerBaseInfo.Uid).Find(&userServiceAddrList) for _, value := range userServiceAddrList { value.Area = ServiceAddrMap[value.AreaId].Addr } Success(ctx, serviceAddOrEditRequest, ServiceAddOrEditResponse{userServiceAddrList}) }) }} } type ServiceAreaAddrListResponse struct { ServiceAddrList []models.ServiceAddr `json:"serviceAddrList"` } // 服务区域列表 func (p DefParty) serviceAreaAddrList() web_iris.Party { return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) { index.Post(ServiceBase+"/serviceAreaAddrList", func(ctx *context.Context) { var serviceAddrList []models.ServiceAddr database.Instance().Model(&models.ServiceAddr{}).Find(&serviceAddrList) Success(ctx, nil, ServiceAreaAddrListResponse{serviceAddrList}) }) }} }