|
@ -1,12 +1,13 @@
|
|
|
package com.yihu.jw.hospital.prescription.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.entity.base.org.BaseOrgDO;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.hospital.prescription.*;
|
|
|
import com.yihu.jw.hospital.prescription.dao.*;
|
|
|
import com.yihu.jw.hospital.prescription.service.entrance.util.SFUtils;
|
|
|
import com.yihu.jw.org.dao.BaseOrgDao;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.utils.sfutils.HttpClientUtils;
|
|
|
import com.yihu.jw.utils.sfutils.SHAUtils;
|
|
@ -19,6 +20,7 @@ import org.dom4j.Element;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.orm.jpa.JpaTransactionManager;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.TransactionDefinition;
|
|
@ -38,12 +40,15 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
|
|
|
|
|
|
|
|
|
//顺丰快递接口请求地址
|
|
|
@Value("${express.sf_url}")
|
|
|
private String sf_url;
|
|
|
|
|
|
|
|
|
//顺丰快递接口接入编码
|
|
|
@Value("${express.sf_code}")
|
|
|
private String sf_code;
|
|
|
|
|
|
//顺丰快递接口checkword
|
|
|
@Value("${express.sf_check_word}")
|
|
|
private String sf_check_word;
|
|
|
|
|
|
@Autowired
|
|
@ -73,6 +78,9 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
|
|
|
|
|
|
@Autowired
|
|
|
private OutpatientDao outpatientDao;
|
|
|
|
|
|
@Autowired
|
|
|
private BasePatientDao basePatientDao;
|
|
|
|
|
|
@Autowired
|
|
|
private SfConfigDao sfConfigDao;
|
|
@ -98,12 +106,12 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
|
|
|
// params.add(new BasicNameValuePair("xml", xml));
|
|
|
// params.add(new BasicNameValuePair("verifyCode", verifyCode));
|
|
|
|
|
|
JSONObject j = addOrder();
|
|
|
j.put("xml",xml);
|
|
|
j.put("verifyCode",verifyCode);
|
|
|
// JSONObject j = addOrder();
|
|
|
// j.put("xml",xml);
|
|
|
// j.put("verifyCode",verifyCode);
|
|
|
|
|
|
String re = HttpClientUtils.doPost(sf_url, j.toJSONString(), ContentType.APPLICATION_JSON);
|
|
|
return re;
|
|
|
// String re = HttpClientUtils.doPost(sf_url, j.toJSONString(), ContentType.APPLICATION_JSON);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -197,56 +205,20 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
|
|
|
//获取医生所处的医院详细地址,作为寄件人地址
|
|
|
WlyyOutpatientDO outpatientDO = outpatientDao.findOne(sfexpress_obj.getOutpatientId());
|
|
|
BaseOrgDO hospital = baseOrgDao.findByCode(outpatientDO.getHospital());
|
|
|
|
|
|
String xml = SFUtils.postSFOrderService(sfexpress_obj,hospital,sf_code);
|
|
|
logger.info("顺丰快递下订单:xml"+xml);
|
|
|
String re = this.SFExpressPost(xml);
|
|
|
// String re = "<Response service=\"OrderService\"><Head>OK</Head><Body><OrderResponse filter_result=\"2\" destcode=\"592\" mailno=\"444844978335\" origincode=\"592\" orderid=\"6daa6baec5fd4b65a1b023a8b60e2e91\"/></Body></Response>";
|
|
|
|
|
|
BasePatientDO basePatientDO = basePatientDao.findById(outpatientDO.getPatient());
|
|
|
|
|
|
JSONObject params = SFUtils.postSFOrderServiceV2(sfexpress_obj,hospital,basePatientDO);
|
|
|
String re = this.SFExpressPostV2(params);
|
|
|
//xml验证
|
|
|
logger.info("顺丰快递下订单:re"+re);
|
|
|
verificationResponXml(re,"向顺丰快递下订单失败!");
|
|
|
verificationResponV2(re);
|
|
|
|
|
|
Document doc = DocumentHelper.parseText(re);
|
|
|
String headvalue = doc.selectSingleNode("/Response/Head").getText();
|
|
|
if(StringUtils.isNotBlank(headvalue) && "OK".equals(headvalue)) {
|
|
|
Element root = doc.getRootElement();
|
|
|
if (root.element("Body") != null) //包含OrderResponse节点
|
|
|
{
|
|
|
root = root.element("Body");
|
|
|
}
|
|
|
|
|
|
//是否能派送:1:人工确认;2:可收派;3:不可以收派
|
|
|
String filter_result = "";
|
|
|
String orderid = "";//业务订单号
|
|
|
String mailno = "";//顺丰运单号
|
|
|
String destCode = "";//目的地区域代码
|
|
|
List<?> child = root.elements();
|
|
|
for (Object o : child) {
|
|
|
Element e = (Element) o;
|
|
|
filter_result = e.attributeValue("filter_result");
|
|
|
orderid = e.attributeValue("orderid");
|
|
|
mailno = e.attributeValue("mailno");
|
|
|
destCode = e.attributeValue("destcode");
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(filter_result) && "1".equals(filter_result)){
|
|
|
logger.info("顺丰快递下订单失败:派送地址需人工审核,门诊编号:"+sfexpress_obj.getOutpatientId());
|
|
|
throw new Exception("顺丰快递下订单失败:派送地址需人工审核");
|
|
|
}
|
|
|
JSONObject respone = JSONObject.parseObject(re);
|
|
|
|
|
|
if(StringUtils.isNotBlank(filter_result) && "3".equals(filter_result)){
|
|
|
logger.info("顺丰快递下订单失败:派送地址不可派送,门诊编号:"+sfexpress_obj.getOutpatientId());
|
|
|
throw new Exception("顺丰快递下订单失败:派送地址不可派送");
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isBlank(mailno)){
|
|
|
logger.info("顺丰快递下订单失败:未获取到快递单号!门诊编号:"+sfexpress_obj.getOutpatientId());
|
|
|
throw new Exception("顺丰快递下订单失败:未获取到快递单号!");
|
|
|
}
|
|
|
sfexpress_obj.setMailno(mailno);
|
|
|
sfexpress_obj.setCityCode(destCode);
|
|
|
}
|
|
|
String mailno = "";//顺丰运单号
|
|
|
|
|
|
mailno = respone.getJSONObject("result").getJSONArray("successResult").getJSONObject(0).getString("mailNo");
|
|
|
sfexpress_obj.setMailno(mailno);
|
|
|
return sfexpress_obj;
|
|
|
}
|
|
|
|
|
@ -740,58 +712,53 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
|
|
|
prescriptionLog.setFlag(1);
|
|
|
outpatientExpressageLogDao.save(prescriptionLog);
|
|
|
}
|
|
|
|
|
|
|
|
|
public JSONObject addOrder(){
|
|
|
String json = "{" +
|
|
|
" \"orderThirds\": [" +
|
|
|
" {" +
|
|
|
" \"bspOrderNo\": \"jkzltest05\"," +
|
|
|
" \"depositumInfo\": \"西瓜\"," +
|
|
|
" \"depositumNo\": \"3\"," +
|
|
|
" \"destAddress\": \"白石龙一区175栋\"," +
|
|
|
" \"destCity\": \"深圳市\"," +
|
|
|
" \"destDistrict\": \"龙华新区\"," +
|
|
|
" \"destName\": \"梁飞\"," +
|
|
|
" \"destPhone\": \"15986618684\"," +
|
|
|
" \"destProvince\": \"广东省\"," +
|
|
|
" \"expressType\": \"1\"," +
|
|
|
" \"hospitalCode\": \"\"," +
|
|
|
" \"monthlyCard\": \"\"," +
|
|
|
" \"orderDate\": 1561363194848," +
|
|
|
" \"packagesNo\": 1," +
|
|
|
" \"parcelWeighs\": \"10\"," +
|
|
|
" \"patientIdentityCardNo\": \"411081199102201259\"," +
|
|
|
" \"patientName\": \"佩奇\"," +
|
|
|
" \"patientPhone\": \"15113149999\"," +
|
|
|
" \"payMethod\": 1," +
|
|
|
" \"remark\": \"备注\"," +
|
|
|
" \"srcAddress\": \"中山大道\"," +
|
|
|
" \"srcCity\": \"上海市\"," +
|
|
|
" \"srcDistrict\": \"黄浦区\"," +
|
|
|
" \"srcName\": \"佩奇\"," +
|
|
|
" \"srcPhone\": \"15113149999\"," +
|
|
|
" \"productCode\": \"OTHER\"," +
|
|
|
" \"srcProvince\": \"上海市\"" +
|
|
|
" }" +
|
|
|
" ]" +
|
|
|
" " +
|
|
|
"}";
|
|
|
JSONObject j = JSON.parseObject(json);
|
|
|
return j;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 组装请求参数,发送请求
|
|
|
* @param params
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private String SFExpressPostV2(JSONObject params)throws Exception{
|
|
|
params.put("version","1.0");
|
|
|
params.put("timestamp",new Date().getTime());
|
|
|
String sign = SHAUtils.SHA512(params.toJSONString()+sf_check_word);
|
|
|
String url =sf_url+"/api/open/api/addOrder?hospitalCode="+sf_code+"&sign="+sign;
|
|
|
|
|
|
logger.info("顺丰快递下订单:sf_url"+url);
|
|
|
logger.info("顺丰快递下订单:params"+params.toString());
|
|
|
|
|
|
|
|
|
String re = HttpClientUtils.doPost(url, params.toJSONString(), ContentType.APPLICATION_JSON);
|
|
|
return re;
|
|
|
}
|
|
|
|
|
|
public void test()throws Exception{
|
|
|
JSONObject j = addOrder();
|
|
|
j.put("version","1.0");
|
|
|
j.put("timestamp",new Date());
|
|
|
|
|
|
String sign = SHAUtils.SHA512(j.toJSONString()+"AAAABBBBCCCCDDDD");
|
|
|
String hospitalCode = "HD000001";
|
|
|
String url ="http://mrds-admin-ci.sit.sf-express.com:45478/api/open/api/addOrder?hospitalCode="+hospitalCode+"&sign="+sign;
|
|
|
String rs = HttpClientUtils.doPost(url,j.toJSONString(), ContentType.APPLICATION_JSON);
|
|
|
|
|
|
System.out.println(rs);
|
|
|
|
|
|
/**
|
|
|
* 校验返回的报文
|
|
|
* @param response
|
|
|
*/
|
|
|
private void verificationResponV2(String response) throws Exception {
|
|
|
String error = "";
|
|
|
if (StringUtils.isBlank(response)) {
|
|
|
// 如果返回的XML报文为空,请求也算失败
|
|
|
//保存http日志
|
|
|
error = "返回的报文为空!";
|
|
|
logger.info(error);
|
|
|
throw new Exception(error);
|
|
|
}else{
|
|
|
JSONObject object = JSONObject.parseObject(response);
|
|
|
// 报错的报文示例<Response service="ScopeService"><Head>ERR</Head><ERROR code="8014">校验码错误 </ERROR></Response>
|
|
|
Boolean success = object.getBoolean("success");
|
|
|
String message = object.getString("message");
|
|
|
if(StringUtils.isNotBlank(message) && !success){
|
|
|
//错误代码
|
|
|
String errorCode = object.getString("code");
|
|
|
error = "顺丰快递接口请求失败:"+errorCode+","+message;
|
|
|
logger.info(error);
|
|
|
throw new Exception(error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// public JSONObject addSFOrder(WlyyPrescriptionExpressageDO expressageDO){
|