EDIX5JsonHttpClient.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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.X5StringUtils;
  6. import com.uas.eis.utils.XMEDIConfiguration;
  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.Date;
  20. public class EDIX5JsonHttpClient extends X5HttpClient {
  21. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  22. /**
  23. * 构造器
  24. */
  25. public EDIX5JsonHttpClient(String appId, String appKey, String url) {
  26. this.appid = appId;
  27. this.appkey = appKey;
  28. this.url = url;
  29. }
  30. public <T> X5Response<T> post(Object body, XMEDIConfiguration configuration, BaseDao baseDao, String type) {
  31. String kind="";
  32. if("ConfirmPurchase".equals(type)){
  33. kind="采购订单确认";
  34. }else if("CreateAsn".equals(type)){
  35. kind="创建ASN";
  36. }else if("CreateAsnBox".equals(type)){
  37. kind="创建ASNBox";
  38. }else if("PurchasePrint".equals(type)){
  39. kind="采购单打印";
  40. }
  41. X5Response<T> x5Response;
  42. if (X5StringUtils.isEmpty(appid) || X5StringUtils.isEmpty(appkey) || X5StringUtils.isEmpty(url)) {
  43. throw new X5Exception("1016", "The request at least contains appid appkey and url.");
  44. }
  45. String bodyString = null;
  46. if (body instanceof String) {
  47. bodyString = body.toString();
  48. } else {
  49. bodyString = JSON.toJSONString(body);
  50. }
  51. String s = appid + bodyString + appkey;
  52. String sign = upperCase(DigestUtils.md5Hex(appid + bodyString + appkey));
  53. //拼装header信息
  54. X5RequestHeader header = new X5RequestHeader();
  55. header.setAppid(appid);
  56. header.setSign(sign);
  57. header.setUrl(url);
  58. //拼装X5请求信息
  59. X5Request x5Request = new X5Request();
  60. x5Request.setHeader(header);
  61. x5Request.setBody(bodyString);
  62. //构造请求参数
  63. String data = X5StringUtils.encodeBase64(JSON.toJSONString(x5Request));
  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. try {
  72. 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();
  73. HttpResponse httpResponse = executeResult.returnResponse();
  74. StatusLine statusLine = httpResponse.getStatusLine();
  75. int statusCode = statusLine.getStatusCode();
  76. String responseContent = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
  77. if (statusCode == 200) {
  78. x5Response = JSON.parseObject(responseContent, X5Response.class);
  79. String HeaderCode = x5Response.getHeader().getCode();
  80. if("200".equals(HeaderCode)){
  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. // baseDao.execute("update CUSTOMTABLE set CT_SENDSTATUS='已上传',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
  88. // }
  89. }else{
  90. baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
  91. "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败1!','状态码:"+x5Response.getHeader().getCode() + " 错误描述:" + x5Response.getHeader().getDesc()+"','"+kind+"')");
  92. // Map<String,Object> datas = (Map<String,Object>) body;
  93. // ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
  94. // Map<String,Object> datas = (Map<String,Object>) body;
  95. // List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
  96. // if(list.size()>0){
  97. // baseDao.execute("update CUSTOMTABLE set CT_ERROR='状态码:"+x5Response.getHeader().getCode()+"错误:"+x5Response.getHeader().getDesc()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
  98. // }
  99. }
  100. } else {
  101. baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
  102. "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败2!','"+statusLine.getStatusCode() + " " + statusLine.getReasonPhrase()+"','"+kind+"')");
  103. // Map<String,Object> datas = (Map<String,Object>) body;
  104. // ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
  105. // Map<String,Object> datas = (Map<String,Object>) body;
  106. // List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
  107. // if(list.size()>0){
  108. // baseDao.execute("update CUSTOMTABLE set CT_ERROR='状态码:"+statusLine.getStatusCode()+"错误:"+statusLine.getReasonPhrase()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
  109. // }
  110. logger.info("时间:"+new Date()+"状态码:"+statusLine.getStatusCode()+"错误:"+statusLine.getReasonPhrase());
  111. throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getStatusCode() + " " + statusLine.getReasonPhrase());
  112. }
  113. } catch (Exception ex) {
  114. x5Response = new X5Response(new X5ResponseHeader("2000", ex.getMessage()));
  115. baseDao.execute("insert into XIAOMIDOCKINGLOG(ML_ID,ML_DATE,ML_CONTENT,ML_RESULT,ML_TYPE)" +
  116. "values(XIAOMIDOCKINGLOG_seq.nextval,sysdate,'上传失败3!','"+ ex.getMessage()+"','"+kind+"')");
  117. // Map<String,Object> datas = (Map<String,Object>) body;
  118. // ConfirmPurchase confirmPurchase = (ConfirmPurchase) datas.get("data");
  119. // List<Map<String,Object>> list = (List<Map<String,Object>>) datas.get("data");
  120. // if(list.size()>0){
  121. // baseDao.execute("update CUSTOMTABLE set CT_ERROR='"+ex.getMessage()+"',ct_senddate=sysdate where ct_id="+list.get(0).get("ct_id"));
  122. // }
  123. }
  124. return x5Response;
  125. }
  126. /**
  127. * 将String转为大写
  128. */
  129. private static String upperCase(String str) {
  130. return str == null ? null : str.toUpperCase();
  131. }
  132. }