Compare commits

...

3 Commits

Author SHA1 Message Date
topsun 2106afef92 地区字典获取编码实现
2 years ago
topsun 2452a39516 请求地图地区字典
2 years ago
topsun 15afa8326f 地区字典url拼接
2 years ago

@ -7,6 +7,13 @@ public class AmapConfigConstant {
public static final String PATHS = "paths";
public static final String DISTANCE = "distance";
public static final String DURATION = "duration";
//地图位置
public static final String DISTRICTS = "districts";
public static final String ADCODE = "adcode";
public static final String NAME = "name";
public static final String LEVEL = "level";
public static final String STREET = "street";
public static final String DIRECTION_URL = "https://restapi.amap.com/v3/direction/driving";
public static final String DISTRICT_URL = "https://restapi.amap.com/v3/config/district";
}

@ -13,6 +13,11 @@ CommonStatusEnum {
*/
VERIFICATION_CODE_ERROR(1099,"验证码错误"),
/**
* 1400-1400
*/
MAP_DISTRICT_ERROR(1400,"请求地图错误"),
/**
*1300-1399
*/

@ -0,0 +1,12 @@
package com.internal.dto;
import lombok.Data;
@Data
public class DicDistrict {
private String addressCode;
private String addressName;
private String parentAddressCode;
private Integer level;
}

@ -30,7 +30,7 @@ public class BigDecimalUtils {
}
BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.divide(b2).doubleValue();
}
public static double subtract(double v1,double v2) {

@ -9,7 +9,6 @@ import com.internal.response.ForecastPriceResponse;
import com.internal.util.BigDecimalUtils;
import com.taxi.serviceprice.mapper.PriceRuleMapper;
import com.taxi.serviceprice.remote.ServiceMapClient;
import javafx.scene.effect.Light;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -111,7 +110,9 @@ public class ForecastPriceService {
Double unitPricePerMinute = priceRule.getUnitPricePerMinute();
double timeFare = BigDecimalUtils.multiply(time,unitPricePerMinute);
price = BigDecimalUtils.add(price,timeFare);
return new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
BigDecimal priceBigDecimal = new BigDecimal(price);
price = priceBigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return price;
}
// public static void main(String[] args) throws IllegalAccessException {

@ -22,6 +22,16 @@
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>

@ -1,6 +1,7 @@
package com.taxi.servicemap;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@ -9,6 +10,7 @@ import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient//服务发现
@MapperScan("com.taxi.servicemap.mapper")
public class ServiceMapApplication {
public static void main(String[] args) {

@ -0,0 +1,21 @@
package com.taxi.servicemap.controller;
import com.internal.dto.ResponseResult;
import com.taxi.servicemap.service.DicDistrictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DicDistrictController {
@Autowired
private DicDistrictService dicDistrictService;
@GetMapping("/dic-district")
public ResponseResult initDicDistrict(String keywords){
return dicDistrictService.initDicDistrict(keywords);
}
}

@ -2,7 +2,7 @@ package com.taxi.servicemap.controller;
import com.internal.dto.ResponseResult;
import com.internal.request.ForecastPriceDTO;
import com.taxi.servicemap.service.DirectionSevice;
import com.taxi.servicemap.service.DirectionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/direction")
public class DriectionController {
@Autowired
private DirectionSevice directionSevice;
private DirectionService directionSevice;
@GetMapping("/driving")
public ResponseResult deiving(@RequestBody ForecastPriceDTO forecastPriceDTO) {

@ -1,8 +1,15 @@
package com.taxi.servicemap.controller;
import com.internal.dto.DicDistrict;
import com.taxi.servicemap.mapper.DicDistrictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class TestController {
@ -10,4 +17,16 @@ public class TestController {
public String test(){
return "service map";
}
@Autowired
DicDistrictMapper mapper;
@GetMapping("/testMap")
public String testMap(){
Map<String,Object> map = new HashMap<>();
map.put("address_code","11000");
List<DicDistrict> dicDistrictList = mapper.selectByMap(map);
System.out.println(dicDistrictList);
return "test-map";
}
}

@ -0,0 +1,9 @@
package com.taxi.servicemap.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.internal.dto.DicDistrict;
import org.springframework.stereotype.Repository;
@Repository
public interface DicDistrictMapper extends BaseMapper<DicDistrict> {
}

@ -0,0 +1,38 @@
package com.taxi.servicemap.remote;
import com.internal.contant.AmapConfigConstant;
import com.internal.dto.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
@Slf4j
public class MapDicDistrictClient {
@Value("${amap.key}")
private String amapKey;
@Autowired
private RestTemplate restTemplate;
public String dicDistrict(String keywords){
//拼接请求的URL
StringBuilder url = new StringBuilder();
url.append(AmapConfigConstant.DISTRICT_URL);
url.append("?");
url.append("keywords="+keywords);
url.append("&");
url.append("subdistrict=3");
url.append("&");
url.append("key="+amapKey);
System.out.println(url.toString());
ResponseEntity<String> forEntity =
restTemplate.getForEntity(url.toString(),String.class);
return forEntity.getBody();
}
}

@ -1,7 +1,6 @@
package com.taxi.servicemap.remote;
import com.internal.contant.AmapConfigConstant;
import com.internal.dto.ResponseResult;
import com.internal.response.DirectionResponse;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;

@ -0,0 +1,116 @@
package com.taxi.servicemap.service;
import com.internal.contant.AmapConfigConstant;
import com.internal.contant.CommonStatusEnum;
import com.internal.dto.DicDistrict;
import com.internal.dto.ResponseResult;
import com.taxi.servicemap.mapper.DicDistrictMapper;
import com.taxi.servicemap.remote.MapDicDistrictClient;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DicDistrictService {
@Autowired
private MapDicDistrictClient mapDicDistrictClient;
@Autowired
private DicDistrictMapper districtMapper;
public ResponseResult initDicDistrict(String keywords) {
//拼接请求地图
String dicDistrictStr = mapDicDistrictClient.dicDistrict(keywords);
System.out.println(dicDistrictStr);
//解析结果
JSONObject dicDistrictObj = JSONObject.fromObject(dicDistrictStr);
int status = dicDistrictObj.getInt(AmapConfigConstant.STATUS);
if (status != 1) {
return ResponseResult.fail(CommonStatusEnum.MAP_DISTRICT_ERROR);
} else {
JSONArray countryJsonArray = dicDistrictObj.getJSONArray(AmapConfigConstant.DISTRICTS);
for (int country = 0; country < countryJsonArray.size(); country++) {
JSONObject countryJsonObject = countryJsonArray.getJSONObject(country);
String countryAddressAdcode = countryJsonObject.getString(AmapConfigConstant.ADCODE);
String countryAddressName = countryJsonObject.getString(AmapConfigConstant.NAME);
String countryParentAddressCode = "0";
String countryLevel = countryJsonObject.getString(AmapConfigConstant.LEVEL);
insertDicDistrict(countryAddressAdcode, countryAddressName, countryParentAddressCode, countryLevel);
JSONArray provinceJsonArray = countryJsonObject.getJSONArray(AmapConfigConstant.DISTRICTS);
for (int province = 0; province < provinceJsonArray.size(); province++) {
JSONObject provideJsonObject = provinceJsonArray.getJSONObject(province);
String provinceAddressAdcode = provideJsonObject.getString(AmapConfigConstant.ADCODE);
String provinceAddressName = provideJsonObject.getString(AmapConfigConstant.NAME);
String provinceParentAddressCode = countryAddressAdcode;
String provinceLevel = provideJsonObject.getString(AmapConfigConstant.LEVEL);
insertDicDistrict(provinceAddressAdcode, provinceAddressName, provinceParentAddressCode, provinceLevel);
JSONArray cityJsonArray = provideJsonObject.getJSONArray(AmapConfigConstant.DISTRICTS);
for (int city = 0; city < cityJsonArray.size(); city++) {
JSONObject cityJsonObject = cityJsonArray.getJSONObject(city);
String cityAddressAdcode = cityJsonObject.getString(AmapConfigConstant.ADCODE);
String cityAddressName = cityJsonObject.getString(AmapConfigConstant.NAME);
String cityParentAddressCode = provinceAddressAdcode;
String cityLevel = cityJsonObject.getString(AmapConfigConstant.LEVEL);
insertDicDistrict(cityAddressAdcode, cityAddressName, cityParentAddressCode, cityLevel);
JSONArray districtJsonArray = cityJsonObject.getJSONArray(AmapConfigConstant.DISTRICTS);
for (int district = 0; district < districtJsonArray.size(); district++) {
JSONObject districtJsonObject = districtJsonArray.getJSONObject(district);
String districtAddressAdcode = districtJsonObject.getString(AmapConfigConstant.ADCODE);
String districtAddressName = districtJsonObject.getString(AmapConfigConstant.NAME);
String districtParentAddressCode = cityAddressAdcode;
String districtLevel = districtJsonObject.getString(AmapConfigConstant.LEVEL);
if(AmapConfigConstant.STREET.equals(districtLevel.trim())){
continue;
}
insertDicDistrict(districtAddressAdcode, districtAddressName, districtParentAddressCode, districtLevel);
}
}
}
}
}
return ResponseResult.success();
}
/**
* Ctrl+Alt+M
*
* @param addressAdcode
* @param addressName
* @param parentAddressCode
* @param level
*/
private void insertDicDistrict(String addressAdcode, String addressName, String parentAddressCode, String level) {
//数据库对象
DicDistrict dicDistrict = new DicDistrict();
dicDistrict.setAddressCode(addressAdcode);
dicDistrict.setAddressName(addressName);
dicDistrict.setParentAddressCode(parentAddressCode);
dicDistrict.setLevel(generateLevel(level));
//插入数据库
districtMapper.insert(dicDistrict);
}
private int generateLevel(String level) {
int levelInt = 0;
if (level.trim().equals("country")) {
levelInt = 0;
} else if ("province".equals(level.trim())) {
levelInt = 1;
} else if ("city".equals(level.trim())) {
levelInt = 2;
} else if ("district".equals(level.trim())) {
levelInt = 3;
}
return levelInt;
}
}

@ -7,7 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DirectionSevice {
public class DirectionService {
@Autowired
private MapDirectionClient mapDirectionClient;

@ -2,6 +2,11 @@ server:
port: 8085
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/service-map?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: topsun123
cloud:
nacos:
discovery:

@ -2,6 +2,11 @@ server:
port: 8085
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/service-map?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: topsun123
cloud:
nacos:
discovery:

Loading…
Cancel
Save