X5JsonHttpClient.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.uas.eis.task.httpclient;
  2. import com.alibaba.fastjson.JSON;
  3. import com.uas.eis.beans.x5domain.*;
  4. import com.uas.eis.dao.BaseDao;
  5. import com.uas.eis.utils.Configuration;
  6. import com.uas.eis.utils.X5StringUtils;
  7. import org.apache.commons.codec.digest.DigestUtils;
  8. import org.apache.http.HttpResponse;
  9. import org.apache.http.StatusLine;
  10. import org.apache.http.client.HttpResponseException;
  11. import org.apache.http.client.fluent.Form;
  12. import org.apache.http.client.fluent.Request;
  13. import org.apache.http.client.fluent.Response;
  14. import org.apache.http.util.EntityUtils;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import javax.xml.bind.DatatypeConverter;
  18. import java.io.UnsupportedEncodingException;
  19. import java.util.ArrayList;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Map;
  23. public class X5JsonHttpClient extends X5HttpClient {
  24. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  25. /**
  26. * 构造器
  27. */
  28. public X5JsonHttpClient(String appId, String appKey, String url) {
  29. this.appid = appId;
  30. this.appkey = appKey;
  31. this.url = url;
  32. }
  33. public <T> X5Response<T> post(Object body, Configuration configuration, BaseDao baseDao, String type) {
  34. String kind="";
  35. if("ProductStock".equals(type)){
  36. kind="物料库存同步";
  37. }else if("ProductWIP".equals(type)){
  38. kind="物料WIP同步";
  39. }
  40. X5Response<T> x5Response;
  41. if (X5StringUtils.isEmpty(appid) || X5StringUtils.isEmpty(appkey) || X5StringUtils.isEmpty(url)) {
  42. throw new X5Exception("1016", "The request at least contains appid appkey and url.");
  43. }
  44. String bodyString = null;
  45. if (body instanceof String) {
  46. bodyString = body.toString();
  47. } else {
  48. bodyString = JSON.toJSONString(body);
  49. }
  50. String sign = upperCase(DigestUtils.md5Hex(appid + bodyString + appkey));
  51. System.out.println("3啊"+sign);
  52. //拼装header信息
  53. X5RequestHeader header = new X5RequestHeader();
  54. header.setAppid(appid);
  55. header.setSign(sign);
  56. header.setUrl(url);
  57. //拼装X5请求信息
  58. X5Request x5Request = new X5Request();
  59. x5Request.setHeader(header);
  60. x5Request.setBody(bodyString);
  61. //构造请求参数
  62. String data = X5StringUtils.encodeBase64(JSON.toJSONString(x5Request));
  63. System.out.println("4啊"+data);
  64. String encoding = null;
  65. String account=configuration.getX5username()+":"+configuration.getX5password();
  66. try {
  67. encoding = DatatypeConverter.printBase64Binary(account.getBytes("UTF-8")); //username password 自行修改 中间":"不可少
  68. } catch (UnsupportedEncodingException e) {
  69. e.printStackTrace();
  70. }
  71. System.out.println("5啊"+encoding);
  72. try {
  73. Response executeResult = Request.Post(url).addHeader("Content-Type", "application/x-www-form-urlencoded").setHeader("Authorization","Basic " + encoding).connectTimeout(DEFAULT_COMMECT_TIMEOUT).socketTimeout(DEFAULT_SOCKET_TIMEOUT).bodyForm(Form.form().add("data", data).build()).execute();
  74. HttpResponse httpResponse = executeResult.returnResponse();
  75. System.out.println("6啊"+httpResponse);
  76. StatusLine statusLine = httpResponse.getStatusLine();
  77. int statusCode = statusLine.getStatusCode();
  78. String responseContent = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
  79. if (statusCode == 200) {
  80. x5Response = JSON.parseObject(responseContent, X5Response.class);
  81. baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
  82. "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传成功!','','"+kind+"')");
  83. logger.info("时间:"+new Date()+"状态码:"+statusCode);
  84. Map<String,Object> datas = (Map<String,Object>) body;
  85. List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
  86. if(list.size()>0){
  87. System.out.println("112233啊:update CUSTOMTABLE set CT_SENDSTATUS='已上传' where cd_id="+list.get(0).get("ct_id"));
  88. baseDao.execute("update CUSTOMTABLE set CT_SENDSTATUS='已上传',ct_senddate=sysdate where cd_id="+list.get(0).get("ct_id"));
  89. }
  90. } else {
  91. baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
  92. "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败!','"+statusLine.getStatusCode() + " " + statusLine.getReasonPhrase()+"','"+kind+"')");
  93. logger.info("时间:"+new Date()+"状态码:"+statusLine.getStatusCode()+"错误:"+statusLine.getReasonPhrase());
  94. throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getStatusCode() + " " + statusLine.getReasonPhrase());
  95. }
  96. } catch (Exception ex) {
  97. x5Response = new X5Response(new X5ResponseHeader("2000", ex.getMessage()));
  98. }
  99. return x5Response;
  100. }
  101. /**
  102. * 将String转为大写
  103. */
  104. private static String upperCase(String str) {
  105. return str == null ? null : str.toUpperCase();
  106. }
  107. }