From 1c9d913d9974f0feb7c5756a665fcd08f22ee4b3 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 06 十月 2023 14:16:29 +0800 Subject: [PATCH] 添加 批量更新企业坐标 接口 --- src/main/java/com/smartearth/poiexcel/entity/StaticData.java | 2 src/main/java/com/smartearth/poiexcel/controller/EntController.java | 105 +++++++++++++++++++++++++++++++++++ src/main/java/com/smartearth/poiexcel/utils/StringHelper.java | 27 +++++++- pom.xml | 2 4 files changed, 131 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 218eef6..883ed4b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ </parent> <groupId>com.smartearth</groupId> <artifactId>poiExcel</artifactId> - <version>0.1</version> + <version>0.2</version> <name>poiExcel</name> <packaging>jar</packaging> <description>poiExcel</description> diff --git a/src/main/java/com/smartearth/poiexcel/controller/EntController.java b/src/main/java/com/smartearth/poiexcel/controller/EntController.java index f1baa5b..025ac18 100644 --- a/src/main/java/com/smartearth/poiexcel/controller/EntController.java +++ b/src/main/java/com/smartearth/poiexcel/controller/EntController.java @@ -1,19 +1,30 @@ package com.smartearth.poiexcel.controller; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.smartearth.poiexcel.entity.EntEntity; import com.smartearth.poiexcel.entity.ResponseMsg; +import com.smartearth.poiexcel.entity.StaticData; +import com.smartearth.poiexcel.mapper.EntMapper; +import com.smartearth.poiexcel.mapper.QiYeMapper; import com.smartearth.poiexcel.service.EntService; +import com.smartearth.poiexcel.utils.HttpUtils; import com.smartearth.poiexcel.utils.StringHelper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.Base64; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 浼佷笟鎺у埗鍣� @@ -26,6 +37,15 @@ public class EntController extends BaseController { @Resource EntService entService; + + @Resource + EntMapper entMapper; + + @Resource + QiYeMapper qiYeMapper; + + @Value("${address.code.url}") + private String addressCodeUrl; @ApiOperation(value = "鏌ヨ浠ょ墝") @GetMapping({"/selectToken"}) @@ -109,4 +129,89 @@ return fail(ex, -1); } } + + @ApiOperation(value = "鎵归噺鏇存柊浼佷笟鍧愭爣") + @GetMapping({"/updateCoords"}) + public ResponseMsg<Object> updateCoords() { + try { + int rows = 0; + int count = qiYeMapper.selectCount(); + if (0 == count) { + return success("娌℃湁鏁版嵁闇�瑕佹洿鏂�", count); + } + + int pages = (count - 1) / StaticData.I100 + 1; + for (int i = 0; i < pages; i++) { + List<EntEntity> list = qiYeMapper.selectByPage(StaticData.I100, StaticData.I100 * (i - 1)); + if (null == list || list.isEmpty()) { + continue; + } + + for (EntEntity ent : list) { + if (!StringHelper.isEmpty(ent.getAddress())) { + setEntCoord(ent); + } + } + + rows += qiYeMapper.updates(list); + } + + return success(rows); + } catch (Exception ex) { + return fail(ex, -1); + } + } + + /** + * 璁剧疆浼佷笟鍧愭爣鍊� + */ + private void setEntCoord(EntEntity ent) { + try { + String json = selectAddrCode(ent.getAddress()); + if (StringHelper.isEmpty(json)) { + return; + } + + JSONObject obj = JSONObject.parseObject(json); + if (null == obj || !StaticData.S1.equals(obj.get("status"))) { + return; + } + + JSONArray jsonArray = obj.getJSONArray("geocodes"); + if (null == jsonArray || jsonArray.isEmpty()) { + return; + } + + JSONObject object = jsonArray.getJSONObject(0); + String addr = object.getString("formatted_address"); + if (StringHelper.isEmpty(addr)) { + return; + } + + String encoding = StringHelper.getEncoding(addr); + if (encoding != null) { + addr = new String(addr.getBytes(encoding)); + } + // ent.setAddress(addr) + + String location = object.getString("location"); + String[] split = location.split(","); + ent.setX(Double.parseDouble(split[1])); + ent.setY(Double.parseDouble(split[0])); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } + + private String selectAddrCode(String address) throws Exception { + StringBuilder sb = new StringBuilder(addressCodeUrl); + sb.append("?address=").append(address).append("&output=json&batch=true&coord=cgcs2000&adcode=yes"); + + // 璁剧疆璇锋眰澶� + Map<String, String> headers = new HashMap<>(); + headers.put("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString(("jjjskfq" + ":" + "Jjjskfq@2022").getBytes())); + + // 鎵ц璇锋眰 + return HttpUtils.get(sb.toString(), null, headers); + } } diff --git a/src/main/java/com/smartearth/poiexcel/entity/StaticData.java b/src/main/java/com/smartearth/poiexcel/entity/StaticData.java index 6f977bd..3e71963 100644 --- a/src/main/java/com/smartearth/poiexcel/entity/StaticData.java +++ b/src/main/java/com/smartearth/poiexcel/entity/StaticData.java @@ -182,6 +182,8 @@ public final static String DOM = "DOM"; + public final static String STATUS = "status"; + public final static String LAYERS = "layers"; public final static String REQUEST = "request"; diff --git a/src/main/java/com/smartearth/poiexcel/utils/StringHelper.java b/src/main/java/com/smartearth/poiexcel/utils/StringHelper.java index a82781e..6a8cd0d 100644 --- a/src/main/java/com/smartearth/poiexcel/utils/StringHelper.java +++ b/src/main/java/com/smartearth/poiexcel/utils/StringHelper.java @@ -3,10 +3,7 @@ import com.smartearth.poiexcel.entity.StaticData; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -243,4 +240,26 @@ return list; } + + public static String getEncoding(String str) { + List<String> codes = new ArrayList<>(Arrays.asList("UTF-8", "GBK", "GB2312", "ISO-8859-1")); + for (String code : codes) { + if (isEncoding(str, code)) { + return code; + } + } + + return null; + } + + public static boolean isEncoding(String str, String encode) { + try { + if (str.equals(new String(str.getBytes(), encode))) { + return true; + } + } catch (Exception e) { + // + } + return false; + } } -- Gitblit v1.9.3