package com.landtool.lanbase.modules.terra; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSONObject; import com.landtool.lanbase.common.utils.HttpUtils; import com.landtool.lanbase.common.utils.JpinyinUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CookieStore; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContexts; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.web.util.CookieGenerator; import java.io.FileInputStream; import java.io.IOException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.text.SimpleDateFormat; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; public class GisServiceListener extends AnalysisEventListener { private String proxyHost = "http://192.168.20.106:8066"; public CookieStore store; public SSLConnectionSocketFactory sslsf; public String tgc; private String regurl = "http://192.168.20.106:8082/res/ziYuanInsert"; private String casurl = "https://192.168.20.106:8088/cas/login"; private String muluUrl = "http://192.168.20.106:8082/res/selectMuLu?id=0"; private String updateUrl = "http://192.168.20.106:8082/res/resExtBaseMap/insertSelectiveAndUpdate"; private String themeMapUrl = "http://192.168.20.106:8082/res/ResExtThemeMap/insertSelectiveAndUpdate"; private String cookieurl = "http://192.168.20.106:8082/manage/ok"; private String st = ""; //不包含子图层的注册服务list public List list = new ArrayList<>(); //包含子图层的注册服务list public List finallist = new ArrayList<>(); public Map resourceclass = new HashMap<>(); public GisServiceListener(String t, String jsession) throws ClientProtocolException, IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, KeyManagementException { tgc = t; resourceclass.put("接口服务", "JKFW"); resourceclass.put("数据文件", "SJWJ"); resourceclass.put("业务集成", "YWJC"); resourceclass.put("基础底图", "KJ_JCDT"); resourceclass.put("专题地图", "KJ_ZTDT"); resourceclass.put("空间分析", "KJ_KJFX"); resourceclass.put("业务图层", "KJ_YWTC"); resourceclass.put("三维模型", "KJ_SWMX"); resourceclass.put("三维地形", "KJ_SWDX"); resourceclass.put("三维影像", "KJ_SWYX"); DefaultHttpClient cl = new DefaultHttpClient(); HttpGet httpget = new HttpGet(cookieurl + "?tgc=" + tgc + "&jsession=" + jsession); HttpResponse httprep = cl.execute(httpget); this.store = cl.getCookieStore(); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream ins = new FileInputStream(new ClassPathResource("cas.keystore").getFile()); trustStore.load(ins, "123456".toCharArray()); javax.net.ssl.SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(trustStore).build(); sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); } private Logger log = LoggerFactory.getLogger(GisServiceListener.class); @Override public void invoke(GisService data, AnalysisContext context) { list.add(data); log.info(data.toString()); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // TODO 调用接口保存数据 log.info("调用接口保存数据"); registerService(list); } /** * 注册服务,保存返回资源id */ public void registerService(List list) { list.forEach(new Consumer() { @Override public void accept(GisService t) { List layers = new ArrayList<>(); if (t.getRemark().indexOf("arcgis") != -1 && !"基础底图".equals(t.getResourceclass())) { layers = getSubLayerInfo(t.getRemark()); } /* 循环构造子图层并 * 调用注册接口 */ if (layers == null || layers.isEmpty()) { if (regService(t)) { if ("基础底图".equals(t.getResourceclass())) { registerMapUrlService(t); } else { registerthemeMap(t); } } else { log.error("注册服务错误"); } } else { layers.forEach(new Consumer() { @Override public void accept(Map map) { GisService cloneObj = new GisService(); BeanUtils.copyProperties(t, cloneObj); cloneObj.setTitle(map.get("name").toString()); cloneObj.setRemark(t.getRemark() + "/" + map.get("id")); finallist.add(cloneObj); if (regService(cloneObj)) { if ("基础底图".equals(t.getResourceclass())) { registerMapUrlService(cloneObj); } else { registerthemeMap(cloneObj); } } else { log.error("注册服务错误"); } } }); } } }); } /** * 代理地址,注册入扩展资源 */ public boolean registerMapUrlService(GisService t) { //生成代理服务地址,构造扩展对象 layersProxy(t); List list = new ArrayList<>(); Map map = new HashMap<>(); map.put("typeandurl", "DYNAMIC"); map.put("serverurl", t.getProxyUrl()); if (t.getRemark().indexOf("esri/wmts") > -1) { map.put("publishsoft", "天地图"); } else { map.put("publishsoft", "Arcgis"); } map.put("basemaptype", "影像"); map.put("extMapUrlStr", "DYNAMIC," + t.getProxyUrl() + "," + t.getProxyid() + "," + t.getRemark() + "|"); map.put("xianshibiliStart", ""); map.put("xianshibiliEnd", ""); map.put("resourceid", Integer.valueOf(t.getResourceid())); JSONObject json = null; try { String res = HttpUtils.post(updateUrl, map); json = JSONObject.parseObject(res); } catch (Exception e) { log.error("注册基础底图扩展服务失败"); e.printStackTrace(); } return json.getInteger("result") == 1 ? true : false; //调用更新接口,写入扩展资源表 } public boolean registerthemeMap(GisService t) { //生成代理服务地址,构造扩展对象 layersProxy(t); List list = new ArrayList<>(); Map map = new HashMap<>(); map.put("typeandurl", "DYNAMIC"); map.put("serverurl", t.getProxyUrl()); map.put("publishsoft", "Arcgis"); map.put("legendurl", ""); map.put("extMapUrlStr", "DYNAMIC," + t.getProxyUrl() + "," + t.getProxyid() + "," + t.getRemark() + "|"); map.put("resourceid", Integer.valueOf(t.getResourceid())); map.put("type", "ArcMap"); map.put("oldserverurl", t.getRemark()); map.put("serverurl", t.getProxyUrl()); map.put("espproxy", 1); String result = ""; try { result = HttpUtils.post(themeMapUrl, map); } catch (Exception e) { log.error("注册专题地图扩展服务失败"); e.printStackTrace(); } return Integer.valueOf(result) == 1 ? true : false; //调用更新接口,写入扩展资源表 } public List getSubLayerInfo(String gisUrl) { List list = new ArrayList<>(); List finallist = new ArrayList<>(); try { String res = HttpUtils.get(gisUrl + "/layers?f=json"); JSONObject json = JSONObject.parseObject(res); list = (List) json.get("layers"); list.forEach(new Consumer() { @Override public void accept(Map t) { if ("Feature Layer".equals(t.get("type"))) { finallist.add(t); } } }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return finallist; } public Map getMulu(int id, String catlogtitle) { List list = new ArrayList<>(); Map params = new HashMap<>(); params.put("id", id); try { CookieGenerator cg = new CookieGenerator(); CloseableHttpClient httpclient = HttpClientBuilder.create().setDefaultCookieStore(store).setSSLSocketFactory(sslsf).build(); HttpGet httpget = new HttpGet(muluUrl); CloseableHttpResponse httprep = httpclient.execute(httpget); HttpEntity entity = httprep.getEntity(); System.out.println("----------------------------------------------------"); System.out.println(httprep.getStatusLine()); String res = ""; if (entity != null) { res = EntityUtils.toString(entity); System.out.println(res); } // String res=HttpUtils.get(muluUrl); list = JSONObject.parseArray(res, Map.class); } catch (Exception e) { e.printStackTrace(); } for (Map t : list) { if (catlogtitle.equals(t.get("name"))) { return t; } } return null; } //http://www.nmsmp.com:8082/res/selectMuLu public boolean regService(GisService t) { List list = new ArrayList<>(); Map map = new HashMap<>(); map.put("title", t.getTitle()); map.put("abbreviation", JpinyinUtils.changeToGetShortPinYin((String) t.getTitle())); map.put("resourceclass", resourceclass.get(t.getResourceclass())); Map catalog = getMulu(0, t.getCatalog()); map.put("catlogid", catalog.get("id")); map.put("catlogcode", catalog.get("code")); map.put("catlogtitle", catalog.get("name")); map.put("imgurl", ""); map.put("datasources", "个人发布"); //map.put("productiontime", null); map.put("pubunitid", 4); map.put("sharprotocol", "单位内公开"); //map.put("administrativeid", null); //map.put("administrativename", null); //map.put("updatetimes", null); map.put("createuserid", 1939); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); map.put("pubdate", sdf.format(new Date())); //map.put("txtTags", null); map.put("keywords", t.getKeywords()); //map.put("securitylev", null); map.put("remark", t.getRemark()); map.put("description", t.getDescription()); map.put("ticket", st); JSONObject json = null; try { CloseableHttpClient httpclient = HttpClientBuilder.create().setDefaultCookieStore(store).setSSLSocketFactory(sslsf).build(); HttpPost post = new HttpPost(regurl); List parameters = new ArrayList(); map.forEach(new BiConsumer() { @Override public void accept(String t, Object u) { parameters.add(new BasicNameValuePair(t, String.valueOf(u))); } }); UrlEncodedFormEntity entit = new UrlEncodedFormEntity(parameters, "utf-8"); post.setEntity(entit); CloseableHttpResponse httprep = httpclient.execute(post); HttpEntity entity = httprep.getEntity(); System.out.println("----------------------------------------------------"); System.out.println(httprep.getStatusLine()); String res = ""; if (entity != null) { res = EntityUtils.toString(entity); System.out.println(res); } // String res=HttpUtils.get(muluUrl); json = JSONObject.parseObject(res); t.setResourceid(json.getString("ziyuanId")); } catch (Exception e) { e.printStackTrace(); } return json.getInteger("result") == 1 ? true : false; } public void layersProxy(GisService t) { Map map = new HashMap<>(); map.put("zyid", Integer.valueOf(t.getResourceid())); map.put("serverUrl", t.getRemark()); map.put("contextPath", ""); map.put("urlid", null); map.put("isPublic", 1); map.put("suffix", 0); map.put("fromsys", "HYJGPT"); map.put("servername", t.getTitle()); JSONObject json = getProxyUrl(map); t.setProxyUrl(json.getString("proxyurl")); t.setProxyid(json.getInteger("id")); } public JSONObject getProxyUrl(Map map) { JSONObject json = new JSONObject(); try { String res = com.landtool.lanbase.common.utils.HttpUtils.get(proxyHost + "/serverRegister/addArcGisServer", map); json = JSONObject.parseObject(res); } catch (Exception e) { e.printStackTrace(); } return json; } }