SFUtils.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package com.yihu.wlyy.util;
  2. import com.yihu.wlyy.entity.organization.Hospital;
  3. import com.yihu.wlyy.entity.patient.prescription.PrescriptionExpressage;
  4. import com.yihu.wlyy.entity.patient.prescription.PrescriptionInfo;
  5. import com.yihu.wlyy.service.app.prescription.PrescriptionInfoService;
  6. import org.apache.commons.lang.StringUtils;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import sun.misc.BASE64Encoder;
  12. import java.util.List;
  13. /**
  14. * 顺丰速递接口相关的一些公用方法
  15. * @author huangwenjie 2017.8.2
  16. */
  17. @Component
  18. public class SFUtils {
  19. private static Logger logger = LoggerFactory.getLogger(SFUtils.class);
  20. @Autowired
  21. private PrescriptionInfoService prescriptionInfoService;
  22. /**
  23. * 生成接口校验码
  24. * 1.先把XML报文与checkword前后连接。
  25. * 2.把连接后的字符串做 MD5 编码。
  26. * 3.把MD5编码后的数据进行 Base64 编码,此时编码后的字符串即为校验码。
  27. * @param xml xml报文
  28. * @param sf_check_word 接口check_word
  29. * @return
  30. */
  31. public String verifyCodeSFXmlStr(String xml,String sf_check_word){
  32. String verifyCode = xml+sf_check_word;
  33. verifyCode = MD5.GetMD5Code(verifyCode);
  34. verifyCode = new BASE64Encoder().encode(verifyCode.getBytes());
  35. return verifyCode;
  36. }
  37. /**
  38. * 查询派送地址是否属于顺丰的派送范围
  39. * @param d_address 派送地址
  40. * @param sf_code 顺丰接口接入码
  41. * @param orderid 订单ID
  42. * @param j_tel 寄方电话
  43. * @param j_address 寄方地址
  44. * @param d_tel 收方电话
  45. * @return
  46. */
  47. public String getSFOrderFilterXml(String d_address,String sf_code,String orderid,String j_tel,String j_address,String d_tel){
  48. //head 传入接口接入码
  49. StringBuilder xml = new StringBuilder("<Request service='OrderFilterService' lang='zh-cn'><Head>"+sf_code+"</Head><Body>");
  50. xml.append("<OrderFilter filter_type='1' ");
  51. //订单号
  52. if(StringUtils.isNotBlank(orderid)){
  53. xml.append("orderid='"+orderid+"' ");
  54. }
  55. //派送地址,必填
  56. xml.append("d_address='"+d_address+"' >");
  57. //如果扩张字段有不为空的,则增加扩张字段参数
  58. if(StringUtils.isNotBlank(j_tel) ||
  59. StringUtils.isNotBlank(j_address)||
  60. StringUtils.isNotBlank(d_tel)){
  61. xml.append("<OrderFilterOption ");
  62. //寄方电话
  63. if(StringUtils.isNotBlank(j_tel)){
  64. xml.append("j_tel='"+j_tel+"' ");
  65. }
  66. //寄方地址
  67. if(StringUtils.isNotBlank(j_address)){
  68. xml.append("j_address='"+j_address+"' ");
  69. }
  70. //收方电话
  71. if(StringUtils.isNotBlank(d_tel)){
  72. xml.append("d_tel='"+d_tel+"' ");
  73. }
  74. xml.append("/></OrderFilter>");
  75. }
  76. xml.append("</Body></Request>");
  77. return xml.toString();
  78. }
  79. /**
  80. * 向顺丰快递下订单
  81. * @param sfexpress_obj
  82. * @param hospital
  83. * @return
  84. */
  85. public String postSFOrderService(PrescriptionExpressage sfexpress_obj, Hospital hospital, String sf_code) {
  86. //head 传入接口接入码
  87. StringBuilder xml = new StringBuilder("<Request service='OrderService' lang='zh-cn'><Head>"+sf_code+"</Head><Body>");
  88. xml.append("<Order ");
  89. //订单号(快递业务号作为订单号"SF开头的为顺丰快递")
  90. xml.append("orderid='"+sfexpress_obj.getCode()+"' ");
  91. /**
  92. * --------寄方参数------
  93. */
  94. //寄件方公司名称
  95. if(StringUtils.isNotBlank(hospital.getName())){
  96. xml.append("j_company='"+hospital.getName()+"' ");
  97. }
  98. //寄方联系人
  99. if(StringUtils.isNotBlank(hospital.getName())){
  100. xml.append("j_contact='"+hospital.getName()+"' ");
  101. }
  102. //寄件方联系电话
  103. if(StringUtils.isNotBlank(hospital.getPhone())){
  104. xml.append("j_tel='"+hospital.getPhone()+"' ");
  105. }
  106. //寄方所在省份
  107. if(StringUtils.isNotBlank(hospital.getProvinceName())){
  108. xml.append("j_province='"+hospital.getProvinceName()+"' ");
  109. }
  110. //寄方所在城市
  111. if(StringUtils.isNotBlank(hospital.getCityName())){
  112. xml.append("j_city='"+hospital.getCityName()+"' ");
  113. }
  114. //寄方所在县/区
  115. if(StringUtils.isNotBlank(hospital.getTownName())){
  116. xml.append("j_county='"+hospital.getTownName()+"' ");
  117. }
  118. //寄件方详细地址,包括省市县/区
  119. if(StringUtils.isNotBlank(hospital.getAddress())){
  120. xml.append("j_address='"+hospital.getAddress()+"' ");
  121. }
  122. /**
  123. * --------收方参数------
  124. */
  125. //派送地址,必填
  126. xml.append("d_address='"+sfexpress_obj.getAddress()+"' >");
  127. //到件方单位名称,因为接口不能为空,这里默认放到件方联系人
  128. xml.append("d_company='"+sfexpress_obj.getName()+"' >");
  129. //到件方联系人
  130. xml.append("d_contact='"+sfexpress_obj.getName()+"' >");
  131. //到件方联系电话
  132. xml.append("d_tel='"+sfexpress_obj.getPhone()+"' >");
  133. //到件方手机
  134. if(StringUtils.isNotBlank(sfexpress_obj.getMobile())){
  135. xml.append("d_mobile='"+sfexpress_obj.getMobile()+"' ");
  136. }
  137. xml.append("d_province='"+sfexpress_obj.getProvinceName()+"' >");
  138. xml.append("d_city='"+sfexpress_obj.getCityName()+"' >");
  139. xml.append("d_county='"+sfexpress_obj.getTownName()+"' >");
  140. xml.append("d_address='"+sfexpress_obj.getAddress()+"' >");
  141. //快件产品类别:21,医药专运(常温)
  142. //付款方式:1:寄方付,2:收方付 3:第三方付
  143. xml.append("express_type='21' pay_method='2' >");
  144. //获取订单的药品详情
  145. List<PrescriptionInfo> prescriptionInfolist = prescriptionInfoService.getPrescriptionInfo(sfexpress_obj.getPrescriptionCode());
  146. if(!prescriptionInfolist.isEmpty()){
  147. for (int i = 0; i < prescriptionInfolist.size(); i++) {
  148. xml.append("<cargo name='"+prescriptionInfolist.get(i).getDrugName()+"' count='"+prescriptionInfolist.get(i).getNum()+"'></cargo>");
  149. }
  150. }
  151. xml.append("</Order></Request>");
  152. return xml.toString();
  153. }
  154. /**
  155. * 顺丰路由查询
  156. * @param sfexpress_obj
  157. * @param sf_code
  158. * @return
  159. */
  160. public String getRoutInfos(PrescriptionExpressage sfexpress_obj, String sf_code) {
  161. //head 传入接口接入码
  162. StringBuilder xml = new StringBuilder("<Request service='RouteService' lang='zh-cn'><Head>"+sf_code+"</Head><Body>");
  163. xml.append("<RouteRequest tracking_type='1' method_type='1' ").append("tracking_number='"+sfexpress_obj.getMailno()+"' />");
  164. xml.append("</Body></Request>");
  165. return xml.toString();
  166. }
  167. /**
  168. * 订单结果查询接口
  169. * @param sfexpress_objCode
  170. * @param sf_code
  171. * @return
  172. */
  173. public String sfOrderSearchService(String sfexpress_objCode, String sf_code) {
  174. StringBuilder xml = new StringBuilder("<Request service='OrderSearchService' lang='zh-cn'><Head>"+sf_code+"</Head><Body>");
  175. xml.append("<OrderSearch orderid='"+sfexpress_objCode+"'/>");
  176. xml.append("</Body></Request>");
  177. return xml.toString();
  178. }
  179. }