/**
* 获取当前时间往前往后推几天
*
**/
public Map<String,Date> getDate() {
Map<String,Date> map = new HashMap<>(2);
try {
//获取当前日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date today = new Date();
Date endDate = sdf.parse(sdf.format(today));
//获取三十天前日期
Calendar theCa = Calendar.getInstance();
theCa.setTime(today);
//最后一个数字5可改,5天的意思
//data就是往前往后几天的意思,负数是往前,正数是往后
theCa.add(Calendar.DATE, Integer.parseInt(date));
Date start = theCa.getTime();
//三十天之前日期
Date startDate = sdf.parse(sdf.format(start));
map.put("end",endDate);
map.put("start",startDate);
} catch (ParseException e) {
e.printStackTrace();
log.error(e);
}
return map;
}
/**
* @param firstArrayList 第一个ArrayList
* @param secondArrayList 第二个ArrayList
* @return resultList 差集ArrayList
* @方法描述:获取两个ArrayList的差集
*/
public static List<IncomeInvResponse> receiveDefectList(List<IncomeInvResponse> firstArrayList,
List<InvoiceDetailDO> secondArrayList) {
List<IncomeInvResponse> resultList = firstArrayList.stream()
.filter(item -> !secondArrayList.stream().map(e -> e.getInvoiceCode() + "|" + e.getInvoiceNum())
.collect(Collectors.toList()).contains(item.getInvoiceCode() + "|" + item.getInvoiceNr()))
.collect(Collectors.toList());
return resultList;
}
/**
* 计算两个时间相差天数
* @param date1
* @param date2
* @return
*/
public static int differentDaysByMillisecond(Date date1, Date date2) {
int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
return days;
}
/**
* 解析字符串中的数字和汉字
* @param str
* @return
*/
public static Map<String,String> getChinaNum(String str) {
Map<String,String> obj = new HashMap<>();
if(StringUtils.isEmpty(str)){
return obj;
}
//获取数字
String a = str.replaceAll("[^0-9-]", "_").replace("_+", "_");
String[] as = a.split("_+");
obj.put("num",replaceNull(as));
//获取汉字
String b = str.replaceAll("[^\\u4e00-\\u9fa5]", "_").replace("_+", "_");
String[] bs = b.split("_+");
obj.put("china",replaceNull(bs));
return obj;
}
/**
* 去除数组中的空串
* @param str
* @return
*/
public static String replaceNull(String[] str){
StringBuffer sb = new StringBuffer();
for(int i=0; i<str.length; i++) {
if("".equals(str[i])) {
continue;
}
sb.append(str[i]);
if(i != str.length - 1) {
sb.append(",");
}
}
return sb.toString();
}
/**
* 将一组数据固定分组,每组n个元素
*
* @param source 要分组的数据源
* @param n 每组n个元素
* @param <T>
* @return
*/
public static <T> List<List<T>> fixedGrouping(List<T> source, int n) {
if (null == source || source.size() == 0 || n <= 0) {
return null;
}
List<List<T>> result = new ArrayList<List<T>>();
int remainder = source.size() % n;
int size = (source.size() / n);
for (int i = 0; i < size; i++) {
List<T> subset = null;
subset = source.subList(i * n, (i + 1) * n);
result.add(subset);
}
if (remainder > 0) {
List<T> subset = null;
subset = source.subList(size * n, size * n + remainder);
result.add(subset);
}
return result;
}
package com.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
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.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.*;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
public class HttpClientUtil {
private static HttpClient httpClient;
private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
private static final String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36";
static {
List<Header> defaultHeaders = new ArrayList<Header>();
defaultHeaders.add(new BasicHeader("content-type", "application/json"));
httpClient = HttpClientBuilder.create()
.setMaxConnPerRoute(50)
.setMaxConnTotal(500)
.setRetryHandler(new StandardHttpRequestRetryHandler(3, true))
.setServiceUnavailableRetryStrategy(new DefaultServiceUnavailableRetryStrategy(2, 500))
.setDefaultHeaders(defaultHeaders)
.setUserAgent(USER_AGENT)
.build();
}
public static String get(String httpUrl, List<NameValuePair> nvps) throws IOException {
StringBuilder stringBuilder = new StringBuilder(httpUrl);
if (nvps != null && nvps.size() > 0) {
String params = (URLEncodedUtils.format(nvps, DEFAULT_CHARSET));
stringBuilder.append("?" + params);
}
HttpGet httpGet = new HttpGet(stringBuilder.toString());
HttpResponse response = httpClient.execute(httpGet);
return EntityUtils.toString(response.getEntity(), "UTF-8");
}
public static String doPost(String url, String json) {
String result = null;
try {
HttpPost post = new HttpPost(url);
post.setEntity(new StringEntity(json, DEFAULT_CHARSET));
String basicAuthKey = "pay:7C4F4363838B5846367BEB03962F8B81";
String base64Result = Base64.getEncoder().encodeToString(basicAuthKey.getBytes("utf-8"));
post.setHeader("Authorization", base64Result);
HttpResponse response = httpClient.execute(post);
result = inputStreamToStr(response.getEntity().getContent(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
logger.error("url=>{}json=>{}发送Post请求失败,异常=>{}", url, json, e);
}
return result;
}
private static List<NameValuePair> buildPostParams(Map<String, String> params) {
if (params == null || params.size() == 0) {
return null;
}
List<NameValuePair> results = new ArrayList<NameValuePair>();
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
results.add(new BasicNameValuePair(key, value));
}
return results;
}
public static String inputStreamToStr(InputStream is, String charset) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(is, "ISO-8859-1"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
return new String(buffer.toString().getBytes("ISO-8859-1"), charset);
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
logger.info("url=>{}, param=>{}", url, param);
HttpPost httppost = new HttpPost(url);
if (StringUtils.isNotBlank(param)) {
StringEntity se = new StringEntity(param, "utf-8");
se.setContentType("application/json; charset=UTF-8");
httppost.setEntity(se);
}
HttpResponse response;
InputStream inputStream = null;
String result = null;
try {
response = httpClient.execute(httppost);
inputStream = response.getEntity().getContent();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes, 0, 1024);
while (len > 0) {
output.write(bytes, 0, len);
len = inputStream.read(bytes, 0, 1024);
}
result = new String(output.toByteArray(), "utf-8");
logger.info("发送请求完成,result:{}", result);
} catch (IOException e) {
logger.error("发送请求失败,异常:{}", e);
} finally {
IOUtils.closeQuietly(inputStream);
}
return result;
}
/**
* 向指定URL发送GET方法的请求
*
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
StringBuilder result = new StringBuilder();
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
in = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
logger.error("发送GET请求出现异常!" + e);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
logger.error("异常"+ e2.toString());
}
}
return result.toString();
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param message 请求参数,json的形式。
* @return 所代表远程资源的响应结果
*/
public static Boolean postUrl(String url, String message) {
logger.info("url=>{}, message=>{}", url, message);
HttpPost httppost = new HttpPost(url);
String currentTime = String.valueOf(System.currentTimeMillis()/1000);
httppost.addHeader("Authorization", "BTBPM17D4A7ABEE164341B879A1E9D44CB674");
httppost.addHeader("App-Key", "192208F8DB5942DBBCB16ED762B7DCDE");
httppost.addHeader("APP_SECRET", "65E66CFE173F4F8A864BCA50DB6FC979");
httppost.addHeader("Timestamp", currentTime);
httppost.addHeader("Sign-Method", "md5");
httppost.addHeader("Sign", encryptSign(message, currentTime));
StringEntity se = new StringEntity(message, "utf-8");
se.setContentType("application/json; charset=UTF-8");
httppost.setEntity(se);
InputStream inputStream = null;
HttpResponse response;
Boolean isSuccess = false;
try {
response = httpClient.execute(httppost);
inputStream = response.getEntity().getContent();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes, 0, 1024);
while (len > 0) {
output.write(bytes, 0, len);
len = inputStream.read(bytes, 0, 1024);
}
String result = new String(output.toByteArray(), "utf-8");
JSONObject dataObject = JSON.parseObject(result);
isSuccess = dataObject.getBoolean("IsSuccess");
logger.info("发送请求完成,result:{}", result);
} catch (IOException e) {
logger.error("发送请求失败,异常:{}", e);
} finally {
IOUtils.closeQuietly(inputStream);
}
return isSuccess;
}
private static String encryptSign(String param, String currentTime) {
return null;
}
/**
* POST请求返回String
*
* @param url
* @param param
* @param cookie
* @return
*/
public static String doPost(String url, Map<String, String> param, String cookie) {
logger.info("url=>{}, param=>{}", url, JSON.toJSONString(param));
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
response = postResponse(httpClient, response, url, param, cookie);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
logger.info("请求完成:{}", resultString);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
public static String doPost(String url, Map<String, String> param) {
return doPost(url, param, null);
}
/**
* POST请求
*
* @param httpClient
* @param response
* @param url
* @param param
* @param cookie
* @return
*/
public static CloseableHttpResponse postResponse(CloseableHttpClient httpClient, CloseableHttpResponse response,
String url, Map<String, String> param, String cookie) {
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
if (cookie != null) {
httpPost.setHeader("Cookie", cookie);
}
// 创建参数列表
if (param != null) {
List<NameValuePair> paramList = new ArrayList<>();
for (String key : param.keySet()) {
paramList.add(new BasicNameValuePair(key, param.get(key)));
}
// 模拟表单
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");
httpPost.setEntity(entity);
}
// 执行http请求
response = httpClient.execute(httpPost);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
}
关流工具
public static void close(Closeable... closeables){
if(closeables != null){
for(Closeable closeable:closeables){
try {
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}