From 5ce378a445ae04afcdab7b43825fe5572f6984ef Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 13 九月 2024 15:05:16 +0800 Subject: [PATCH] 添加获取字段功能 --- src/main/java/com/se/simu/service/SedbService.java | 90 ++++++++++++++++++++++++-------------------- 1 files changed, 49 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/se/simu/service/SedbService.java b/src/main/java/com/se/simu/service/SedbService.java index 081e0db..9f2f866 100644 --- a/src/main/java/com/se/simu/service/SedbService.java +++ b/src/main/java/com/se/simu/service/SedbService.java @@ -2,17 +2,22 @@ import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; -import com.se.simu.domain.SedbLayer; +import cn.hutool.json.JSONUtil; +import com.se.simu.domain.SeDb; +import com.se.simu.domain.SeField; +import com.se.simu.domain.SeLayer; import com.se.simu.helper.RsaHelper; import com.se.simu.helper.StringHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * SDDB鏈嶅姟绫� @@ -33,8 +38,14 @@ @Value("${sedb.pwd}") String pwd; + @Value("${sedb.dbName}") + String dbName; + @Value("#{'${sedb.layerNames}'}") List<String> layerNames; + + @Value("#{'${sedb.sysFields}'}") + List<String> sysFields; String password; @@ -42,13 +53,16 @@ RestTemplate restTemplate; public String test() throws Exception { + String bbox = "116.64388473935195,39.884315914604464,116.64754729082588,39.887069143903496"; + String token = getToken(); - String dbid = getDbId(token); + SeDb db = getSeDb(token); + db.setBbox(bbox); - List<SedbLayer> layers = getLayers(token, dbid); + List<SeLayer> layers = getLayers(token, db.getDbid()); - return dbid; + return db.getDbid(); } public String getToken() throws Exception { @@ -80,74 +94,68 @@ return obj.getStr("data"); } - public String getDbId(String token) { + public SeDb getSeDb(String token) { Map<String, Object> map = new HashMap<>(1); map.put("token", token); JSONObject obj = restTemplate.postForObject(host + "geo-service/entitydb/list/canview", map, JSONObject.class); + JSONArray data = obj.getJSONArray("data"); - JSONArray arr = obj.getJSONArray("data"); - if (null == arr || arr.size() == 0) { - return null; - } + List<SeDb> list = JSONUtil.toList(data, SeDb.class); + if (CollectionUtils.isEmpty(list)) return null; - JSONObject dbObj = arr.getJSONObject(0); - - return dbObj.getStr("dbid"); + return list.stream().filter(db -> dbName.equals(db.getName())).findFirst().orElse(null); } - public List<SedbLayer> getLayers(String token, String dbid) { + public List<SeLayer> getLayers(String token, String dbid) { String uri = String.format("%sgeo-service/entitydb/map/config?dbid=%s&token=%s", host, dbid, token); JSONObject obj = restTemplate.getForObject(uri, JSONObject.class); JSONObject data = obj.getJSONObject("data"); JSONArray arr = data.getJSONArray("layers"); - if (null == arr || arr.size() == 0) { - return null; - } + if (null == arr || arr.size() == 0) return null; - List<SedbLayer> layers = new ArrayList<>(); + List<SeLayer> layers = new ArrayList<>(); for (int i = 0, c = arr.size(); i < c; i++) { JSONObject jb = arr.getJSONObject(i); - String name = jb.getStr("name"); if (layerNames.contains(name)) { String id = jb.getStr("id"); Integer dataType = jb.getInt("_data_type"); - JSONArray fields = jb.getJSONArray("fields"); + List<SeField> fields = JSONUtil.toList(jb.getJSONArray("fields"), SeField.class); + fields = fields.stream().filter(f -> !sysFields.contains(f.getName())).collect(Collectors.toList()); - layers.add(new SedbLayer(id, name, dataType, fields)); + layers.add(new SeLayer(id, name, dataType, fields)); } } return layers; } - public List<SedbLayer> getLayers2(String token, String dbid) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.add(Calendar.DAY_OF_MONTH, -1); + public JSONArray query(String token, String dbid, String layerId, String bbox) { + int start = 1, count = 1000, total = 0; - String date = StringHelper.YMD_FORMAT.format(calendar.getTime()); - String uri = String.format("%sgeo-service/statis/layer/data/info?dbid=%s&token=%s&caldate=%s", host, dbid, token, date); - JSONObject obj = restTemplate.getForObject(uri, JSONObject.class); + Map<String, Object> map = new HashMap<>(8); + map.put("token", token); + map.put("start", start); + map.put("count", count); + map.put("dbid", dbid); + map.put("layerid", layerId); + map.put("containCount", true); + map.put("bbox", bbox); + map.put("querytype", "entity"); - JSONArray arr = obj.getJSONArray("data"); - if (null == arr || arr.size() == 0) { - return null; - } + JSONObject obj = restTemplate.postForObject(host + "geo-service/entitydbdata/layer/query", map, JSONObject.class); + if (null == obj || 200 != obj.getInt("code")) return null; - List<SedbLayer> layers = new ArrayList<>(); - for (int i = 0, c = arr.size(); i < c; i++) { - JSONObject jb = arr.getJSONObject(i); + JSONObject data = obj.getJSONObject("data"); + total = data.getInt("data"); + if (0 == total) return null; - String name = jb.getStr("name"); - if (layerNames.contains(name)) { - String id = jb.getStr("layerid"); - layers.add(new SedbLayer(id, name)); - } - } + JSONArray arr = new JSONArray(); + JSONArray items = data.getJSONArray("items"); + arr.addAll(items); - return layers; + return arr; } } -- Gitblit v1.9.3