From cd7319a905fd151cf8e80c4d02c4b59997afbb51 Mon Sep 17 00:00:00 2001 From: CL <2502239547@qq.com> Date: Thu, 23 Feb 2023 10:53:21 +0800 Subject: [PATCH] first commit 20230223 --- .../WEB-INF/prop/aixinChina.properties | 2 + .../com/api/aixinchina/AiXinRateApi.java | 14 + .../com/api/aixinchina/utils/HttpUtils.java | 320 ++++++++++++++++++ .../classbean/com/api/aixinchina/utils/R.java | 37 ++ .../com/engine/web/aixinaction/AixinAction.java | 117 +++++++ 5 files changed, 490 insertions(+) create mode 100644 ecology -代码/WEB-INF/prop/aixinChina.properties create mode 100644 ecology -代码/classbean/com/api/aixinchina/AiXinRateApi.java create mode 100644 ecology -代码/classbean/com/api/aixinchina/utils/HttpUtils.java create mode 100644 ecology -代码/classbean/com/api/aixinchina/utils/R.java create mode 100644 ecology -代码/classbean/com/engine/web/aixinaction/AixinAction.java diff --git a/ecology -代码/WEB-INF/prop/aixinChina.properties b/ecology -代码/WEB-INF/prop/aixinChina.properties new file mode 100644 index 0000000..44ae791 --- /dev/null +++ b/ecology -代码/WEB-INF/prop/aixinChina.properties @@ -0,0 +1,2 @@ +#AppCode +AppCode=6f926d7c60de4927b312d3017fcec53a \ No newline at end of file diff --git a/ecology -代码/classbean/com/api/aixinchina/AiXinRateApi.java b/ecology -代码/classbean/com/api/aixinchina/AiXinRateApi.java new file mode 100644 index 0000000..934c829 --- /dev/null +++ b/ecology -代码/classbean/com/api/aixinchina/AiXinRateApi.java @@ -0,0 +1,14 @@ +package com.api.aixinchina; + + +import com.engine.web.aixinaction.AixinAction; + +import javax.ws.rs.Path; + +/** + * @author:CL + * @date:2023/1/29 8:33 + */ +@Path("/workflow/aixinspan") +public class AiXinRateApi extends AixinAction { +} diff --git a/ecology -代码/classbean/com/api/aixinchina/utils/HttpUtils.java b/ecology -代码/classbean/com/api/aixinchina/utils/HttpUtils.java new file mode 100644 index 0000000..a4cd98e --- /dev/null +++ b/ecology -代码/classbean/com/api/aixinchina/utils/HttpUtils.java @@ -0,0 +1,320 @@ +package com.api.aixinchina.utils; + +/** + * @author:CL + * @date:2023/1/28 12:31 + */ + +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HttpUtils { + + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + Map bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List nameValuePairList = new ArrayList(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[]{tm}, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/ecology -代码/classbean/com/api/aixinchina/utils/R.java b/ecology -代码/classbean/com/api/aixinchina/utils/R.java new file mode 100644 index 0000000..e493d17 --- /dev/null +++ b/ecology -代码/classbean/com/api/aixinchina/utils/R.java @@ -0,0 +1,37 @@ +package com.api.aixinchina.utils; + +import lombok.Data; +import java.util.HashMap; +import java.util.Map; + +@Data +public class R { + + private Integer code; //编码:1成功,0和其它数字为失败 + + private String msg; //错误信息 + + private T data; //数据 + + private Map map = new HashMap(); //动态数据 + + public static R success(T object) { + R r = new R(); + r.data = object; + r.code = 1; + return r; + } + + public static R error(String msg) { + R r = new R(); + r.msg = msg; + r.code = 0; + return r; + } + + public R add(String key, Object value) { + this.map.put(key, value); + return this; + } + +} diff --git a/ecology -代码/classbean/com/engine/web/aixinaction/AixinAction.java b/ecology -代码/classbean/com/engine/web/aixinaction/AixinAction.java new file mode 100644 index 0000000..143606c --- /dev/null +++ b/ecology -代码/classbean/com/engine/web/aixinaction/AixinAction.java @@ -0,0 +1,117 @@ +package com.engine.web.aixinaction; + +import com.alibaba.fastjson.JSON; +import com.api.aixinchina.utils.HttpUtils; +import com.api.aixinchina.utils.R; +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author:CL + * @date:2023/1/29 8:34 + */ +public class AixinAction { + + private static final Logger LOGGER = LoggerFactory.getLogger("爱信中国"); + + @POST + @Path("/rate") + public R getRate(@Context HttpServletRequest request, @Context HttpServletResponse response) throws ParseException { + + LOGGER.info("com.engine.web.aixinaction.AixinAction 已进入 rate接口"); + +// 读取AppCode + BaseBean bb=new BaseBean(); + String AppCode = bb.getPropValue("aixinChina", "AppCode"); + + if(AppCode==""){ + return R.error("请填写正确的AppCode"); + } + +// 获取币种名称 + String codeName = request.getParameter("code"); + + if ("RMB".equals(codeName)) { + return R.success("100.00"); + } +// 或许要查询汇率的日期 + String date = request.getParameter("date"); + +// 因为阿里云只能按月查询且格式必须yyyyMM 对日期进行格式转换 + + Date date1 = new SimpleDateFormat("yyyy-MM-dd").parse(date); + + String result = new SimpleDateFormat("yyyyMM").format(date1); + +// 访问第三方阿里云接口 + String host = "http://ali-waihui.showapi.com"; + String path = "/bankhis"; + String method = "GET"; + String appcode = AppCode; + Map headers = new HashMap(); + //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 + headers.put("Authorization", "APPCODE " + appcode); + Map querys = new HashMap(); +// 货币编号 + querys.put("code", codeName); + querys.put("month", result); + + try { + HttpResponse rageResponse = HttpUtils.doGet(host, path, method, headers, querys); +// 获取查询的结果 转为map + String mes = EntityUtils.toString(rageResponse.getEntity()); +// 第一次结果的map + HashMap resultMap = JSON.parseObject(mes, HashMap.class); + + LOGGER.info("com.engine.web.aixinaction.AixinAction 阿里云调用结果[{}]",resultMap); + + // 筛选第一次结果获取body + HashMap bodyMap = JSON.parseObject(resultMap.get("showapi_res_body").toString(), HashMap.class); +// 获取返回的状态码 code + Integer retCode = (Integer) bodyMap.get("ret_code"); + //判断阿里云api是否访问成功 ret_code为0查询成功 否则 查询失败 不扣费 + if (retCode == 0) { +// 获取到最终需要的list + List> rateList = (List>) bodyMap.get("list"); + + for (Map map : rateList) { +// 发布日期 + String publish_time = map.get("publish_time"); +// 判断日期是否为需要的日期 返回对应的中行折算价 + if ( date.equals(publish_time)) { + //中行折算价 + String middle_rate = map.get("middle_rate"); + return R.success(middle_rate); + } + } + return R.error("该天未查询到汇率,请您重新输入"); + } else { +// 阿里云code调用失败的return 返回他的提示信息 + String remark = (String) bodyMap.get("remark"); + return R.error(remark); + } + + + } catch (Exception e) { + LOGGER.info("com.engine.web.aixinaction.AixinAction catch捕获",e); + + return R.error("出现异常,请联系管理员"); + } + + } +}