|  | @ -1,638 +1,638 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.hospital.prescription.service;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.org.BaseOrgDO;
 | 
	
		
			
				|  |  | 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.util.date.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.http.HttpClientKit;
 | 
	
		
			
				|  |  | import com.yihu.mysql.query.BaseJpaService;
 | 
	
		
			
				|  |  | import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | import org.apache.http.NameValuePair;
 | 
	
		
			
				|  |  | import org.apache.http.message.BasicNameValuePair;
 | 
	
		
			
				|  |  | import org.dom4j.Document;
 | 
	
		
			
				|  |  | import org.dom4j.DocumentHelper;
 | 
	
		
			
				|  |  | 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;
 | 
	
		
			
				|  |  | import org.springframework.transaction.TransactionStatus;
 | 
	
		
			
				|  |  | import org.springframework.transaction.support.DefaultTransactionDefinition;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  *  门诊物流服务
 | 
	
		
			
				|  |  |  * lith 2019.06.04
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | @Service
 | 
	
		
			
				|  |  | public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescriptionExpressageDO, PrescriptionExpressageDao> {
 | 
	
		
			
				|  |  |     private static Logger logger = LoggerFactory.getLogger(PrescriptionExpressageService.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     //顺丰快递接口请求地址
 | 
	
		
			
				|  |  |     @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
 | 
	
		
			
				|  |  |     private SFUtils SFUtils;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private JpaTransactionManager transactionManager;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     //处方日志
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private WlyyOutpatientExpressageLogDao outpatientExpressageLogDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionDao prescriptionDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private WlyyExpressagePriceDao expressagePriceDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionExpressageLogDao prescriptionExpressageLogDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionExpressageDao prescriptionExpressageDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseOrgDao baseOrgDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 组装请求参数,发送请求
 | 
	
		
			
				|  |  |      * @param xml
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private String SFExpressPost(String xml)throws Exception{
 | 
	
		
			
				|  |  |         String verifyCode = SFUtils.verifyCodeSFXmlStr(xml,sf_check_word);
 | 
	
		
			
				|  |  |         List<NameValuePair> params = new ArrayList<>();
 | 
	
		
			
				|  |  |         params.add(new BasicNameValuePair("xml", xml));
 | 
	
		
			
				|  |  |         params.add(new BasicNameValuePair("verifyCode", verifyCode));
 | 
	
		
			
				|  |  |         String re = HttpClientKit.post(sf_url, params, "UTF-8");
 | 
	
		
			
				|  |  |         return re;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 校验返回的xml报文
 | 
	
		
			
				|  |  |      * @param responseXml
 | 
	
		
			
				|  |  |      * @param title
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private void verificationResponXml(String responseXml,String title) throws Exception {
 | 
	
		
			
				|  |  |         String error = "";
 | 
	
		
			
				|  |  |         if (StringUtils.isBlank(responseXml)) {
 | 
	
		
			
				|  |  |             // 如果返回的XML报文为空,请求也算失败
 | 
	
		
			
				|  |  |             //保存http日志
 | 
	
		
			
				|  |  |             error = title + ",返回的XML为空!";
 | 
	
		
			
				|  |  |             logger.info(error);
 | 
	
		
			
				|  |  |             throw new Exception(error);
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  | //          报错的报文示例<Response service="ScopeService"><Head>ERR</Head><ERROR code="8014">校验码错误 </ERROR></Response>
 | 
	
		
			
				|  |  |             Document doc = DocumentHelper.parseText(responseXml);
 | 
	
		
			
				|  |  |             String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  |             if(StringUtils.isNotBlank(headvalue) && "ERR".equals(headvalue)){
 | 
	
		
			
				|  |  |                 //错误代码
 | 
	
		
			
				|  |  |                 String errorCode = "";
 | 
	
		
			
				|  |  |                 //错误代对应的文字
 | 
	
		
			
				|  |  |                 String errorMessage = doc.selectSingleNode("/Response/ERROR").getText();
 | 
	
		
			
				|  |  |                 Document error_doc = doc.selectSingleNode("/Response/ERROR").getDocument();
 | 
	
		
			
				|  |  |                 Element root = error_doc.getRootElement();
 | 
	
		
			
				|  |  |                 List<?> child = root.elements();
 | 
	
		
			
				|  |  |                 for (Object o : child){
 | 
	
		
			
				|  |  |                     Element e = (Element) o;
 | 
	
		
			
				|  |  |                     errorCode = e.attributeValue("code");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 error = title+","+errorCode+","+errorMessage;
 | 
	
		
			
				|  |  |                 logger.info(error);
 | 
	
		
			
				|  |  |                 throw new Exception(error);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询派送地址是否属于顺丰的派送范围
 | 
	
		
			
				|  |  |      * @param d_address 派送地址
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Boolean getSFOrderFilterService(String d_address) throws Exception {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         boolean result = false;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String xml = SFUtils.getSFOrderFilterXml(d_address,sf_code,"","","","");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //        String re = "<Response service=\"OrderFilterService\"><Head>OK</Head><Body><OrderFilterResponse orderid=\"TE201407020016\" filter_result=\"2\" origincode=\"755\" remark=\"2\"/></Body></Response>";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //xml验证
 | 
	
		
			
				|  |  |         verificationResponXml(re,"查询派送地址是否有效失败!");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Document doc = DocumentHelper.parseText(re);
 | 
	
		
			
				|  |  |         String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  |         Element root = doc.getRootElement();
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(headvalue) && "OK".equals(headvalue)) {
 | 
	
		
			
				|  |  |             //是否能派送:1:人工确认;2:可收派;3:不可以收派
 | 
	
		
			
				|  |  |             String filter_result = "";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             Element firstWorldElement = root.element("Body");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             List<Element> elements = firstWorldElement.elements();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             for (Element o : elements){
 | 
	
		
			
				|  |  |                 filter_result = o.attributeValue("filter_result");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if(StringUtils.isNotBlank(filter_result) && "2".equals(filter_result)){
 | 
	
		
			
				|  |  |                 result = true;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return result;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 向顺丰快递下订单
 | 
	
		
			
				|  |  |      * @param sfexpress_obj
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public WlyyPrescriptionExpressageDO postSFOrderService(WlyyPrescriptionExpressageDO sfexpress_obj) throws Exception {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //获取医生所处的医院详细地址,作为寄件人地址
 | 
	
		
			
				|  |  |         WlyyPrescriptionDO prescription = prescriptionDao.findOne(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |         BaseOrgDO hospital = baseOrgDao.findByCode(prescription.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>";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //xml验证
 | 
	
		
			
				|  |  |         logger.info("顺丰快递下订单:re"+re);
 | 
	
		
			
				|  |  |         verificationResponXml(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) && "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);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return sfexpress_obj;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 调用顺丰接口获取物流路由日志,与本地匹配,进行增量修改,并返回完整日志列表
 | 
	
		
			
				|  |  |      * @param prescription
 | 
	
		
			
				|  |  |      * @param sfexpress_obj
 | 
	
		
			
				|  |  |      * @param sfexpresslogList
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<WlyyPrescriptionExpressageLogDO> getRoutInfos(WlyyPrescriptionDO prescription, WlyyPrescriptionExpressageDO sfexpress_obj, List<WlyyPrescriptionExpressageLogDO> sfexpresslogList) throws Exception {
 | 
	
		
			
				|  |  |         String xml = SFUtils.getRoutInfos(sfexpress_obj,sf_code);
 | 
	
		
			
				|  |  |         String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  |         //xml验证
 | 
	
		
			
				|  |  |         verificationResponXml(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)     //取报文根节点
 | 
	
		
			
				|  |  |             {
 | 
	
		
			
				|  |  |                 root = root.element("Body");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             List<?> child = root.elements();
 | 
	
		
			
				|  |  |             String mailno = "";
 | 
	
		
			
				|  |  |             Map<String,List<WlyyPrescriptionExpressageLogDO>> wayroutlsit = new HashMap<>();
 | 
	
		
			
				|  |  |             for (Object o : child) {
 | 
	
		
			
				|  |  |                 Element e = (Element) o;
 | 
	
		
			
				|  |  |                 mailno = e.attributeValue("mailno");
 | 
	
		
			
				|  |  |                 //判断快递单号不为空,且和我们本地的一致
 | 
	
		
			
				|  |  |                 if(StringUtils.isNotBlank(mailno) &&
 | 
	
		
			
				|  |  |                         sfexpress_obj.getMailno().equals(mailno)){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //解析报文,结合本地数据返回最终的日志结果
 | 
	
		
			
				|  |  |                     return this.xmltologlist(e,sfexpresslogList,sfexpress_obj);
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private List<WlyyPrescriptionExpressageLogDO> xmltologlist(Element e, List<WlyyPrescriptionExpressageLogDO> sfexpresslogList, WlyyPrescriptionExpressageDO sfexpress_obj)throws Exception{
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //获取本地所有路由信息的时间集
 | 
	
		
			
				|  |  |         Set<String> routAcceptTimeSet = new HashSet<>();
 | 
	
		
			
				|  |  |         for (WlyyPrescriptionExpressageLogDO log: sfexpresslogList) {
 | 
	
		
			
				|  |  |             routAcceptTimeSet.add(DateUtil.dateToStrLong(log.getAcceptTime()));
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<?> child = e.elements();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<WlyyPrescriptionExpressageLogDO> newroutinfolist = new ArrayList<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //用于判断新节点是否包含了"已收件"的节点
 | 
	
		
			
				|  |  |         boolean isContainEndRoutInfo = false;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         for (Object o : child) {
 | 
	
		
			
				|  |  |             Element routinfoe = (Element) o;
 | 
	
		
			
				|  |  |             String accept_time = routinfoe.attributeValue("accept_time");
 | 
	
		
			
				|  |  |             String accept_address = routinfoe.attributeValue("accept_address");
 | 
	
		
			
				|  |  |             String accept_remark = routinfoe.attributeValue("remark");
 | 
	
		
			
				|  |  |             String opcode = routinfoe.attributeValue("opcode");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //和时间集作比对,过滤已存在的
 | 
	
		
			
				|  |  |             if(!routAcceptTimeSet.contains(accept_time)){
 | 
	
		
			
				|  |  |                 WlyyPrescriptionExpressageLogDO newlogobj = new WlyyPrescriptionExpressageLogDO();
 | 
	
		
			
				|  |  |                 newlogobj.setAcceptTime(DateUtil.strToDate(accept_time));
 | 
	
		
			
				|  |  |                 newlogobj.setAcceptAddress(accept_address);
 | 
	
		
			
				|  |  |                 newlogobj.setAcceptRemark(accept_remark);
 | 
	
		
			
				|  |  |                 newlogobj.setOpCode(opcode);
 | 
	
		
			
				|  |  |                 newlogobj.setId(UUID.randomUUID().toString().replace("-",""));
 | 
	
		
			
				|  |  |                 newlogobj.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |                 newlogobj.setExpressageId(sfexpress_obj.getId());
 | 
	
		
			
				|  |  |                 newlogobj.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                 newroutinfolist.add(newlogobj);
 | 
	
		
			
				|  |  |                 sfexpresslogList.add(newlogobj);
 | 
	
		
			
				|  |  |                 //aopcode=80,为已签收
 | 
	
		
			
				|  |  |                 if("80".equals(opcode)){
 | 
	
		
			
				|  |  |                     isContainEndRoutInfo = true;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
	
		
			
				|  |  |         def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
 | 
	
		
			
				|  |  |         TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //如果有新增的路由信息,则添加到数据库
 | 
	
		
			
				|  |  |             if(!newroutinfolist.isEmpty()){
 | 
	
		
			
				|  |  |                 prescriptionExpressageLogDao.save(newroutinfolist);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //如果路由信息节点包含了"已收件"节点,这修改处方派送状态为完成,增加物流派送日志为完成
 | 
	
		
			
				|  |  |             if(isContainEndRoutInfo){
 | 
	
		
			
				|  |  |                 //修改处方状态为完成
 | 
	
		
			
				|  |  |                 prescriptionDao.updateStatus(sfexpress_obj.getId(), 100,new Date());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 //保存门诊处方配送成功的日志
 | 
	
		
			
				|  |  |                 WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  |                 outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //事务提交
 | 
	
		
			
				|  |  |             transactionManager.commit(status);
 | 
	
		
			
				|  |  |         } catch (Exception ex) {
 | 
	
		
			
				|  |  |             //报错事务回滚
 | 
	
		
			
				|  |  |             transactionManager.rollback(status);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return sfexpresslogList;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 解析顺丰推送过来的路由信息,和本地数据匹配并进行增量更新)
 | 
	
		
			
				|  |  |      * @param xml
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void SFRoutePushService(String xml) throws Exception{
 | 
	
		
			
				|  |  |         Document doc = DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  |         Element root = doc.getRootElement();
 | 
	
		
			
				|  |  |         if (root.element("Body") != null)     //包含WaybillRoute节点
 | 
	
		
			
				|  |  |         {
 | 
	
		
			
				|  |  |             root = root.element("Body");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         List<?> child = root.elements();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Map<String,List<WlyyPrescriptionExpressageLogDO>> wayroutlsit = new HashMap<>();
 | 
	
		
			
				|  |  |         for (Object o : child) {
 | 
	
		
			
				|  |  |             Element routinfoe = (Element) o;
 | 
	
		
			
				|  |  |             WlyyPrescriptionExpressageLogDO sflog = new WlyyPrescriptionExpressageLogDO();
 | 
	
		
			
				|  |  |             String accept_time = routinfoe.attributeValue("accepttime");
 | 
	
		
			
				|  |  |             String accept_address = routinfoe.attributeValue("acceptaddress");
 | 
	
		
			
				|  |  |             String accept_remark = routinfoe.attributeValue("remark");
 | 
	
		
			
				|  |  |             String opcode = routinfoe.attributeValue("opcode");
 | 
	
		
			
				|  |  |             String mailno = routinfoe.attributeValue("mailno");
 | 
	
		
			
				|  |  |             String orderid = routinfoe.attributeValue("orderid");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             sflog.setAcceptTime(DateUtil.strToDate(accept_time));
 | 
	
		
			
				|  |  |             sflog.setAcceptAddress(accept_address);
 | 
	
		
			
				|  |  |             sflog.setAcceptRemark(accept_remark);
 | 
	
		
			
				|  |  |             sflog.setOpCode(opcode);
 | 
	
		
			
				|  |  |             sflog.setExpressageId(orderid);
 | 
	
		
			
				|  |  |             sflog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  |             sflog.setCreateTime(new Date());
 | 
	
		
			
				|  |  |             if(wayroutlsit.keySet().contains(mailno)){
 | 
	
		
			
				|  |  |                 wayroutlsit.get(mailno).add(sflog);
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 List<WlyyPrescriptionExpressageLogDO> newsflogs = new ArrayList<>();
 | 
	
		
			
				|  |  |                 newsflogs.add(sflog);
 | 
	
		
			
				|  |  |                 wayroutlsit.put(mailno,newsflogs);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(!wayroutlsit.keySet().isEmpty()){
 | 
	
		
			
				|  |  |             for (String mailno:wayroutlsit.keySet()) {
 | 
	
		
			
				|  |  |                 List<WlyyPrescriptionExpressageLogDO> pushSFLogs = wayroutlsit.get(mailno);
 | 
	
		
			
				|  |  |                 //同一个快递单号的执行一个事务操作
 | 
	
		
			
				|  |  |                 this.saveSFPushRoutInfos(mailno,pushSFLogs);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 同一个快递单号的执行一个事务操作
 | 
	
		
			
				|  |  |      * @param mailno
 | 
	
		
			
				|  |  |      * @param pushSFLogs
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void saveSFPushRoutInfos(String mailno,List<WlyyPrescriptionExpressageLogDO> pushSFLogs){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //根据快递单号获取处方配送详细信息
 | 
	
		
			
				|  |  |         WlyyPrescriptionExpressageDO sfexpress = prescriptionExpressageDao.findByPrescriptionExpressMailno(mailno);
 | 
	
		
			
				|  |  |         //根据快递单号获取本地的路由信息
 | 
	
		
			
				|  |  |         List<WlyyPrescriptionExpressageLogDO> localroutinfos = prescriptionExpressageLogDao.queryByOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  |         //需要增量更新到本地的路由信息集合
 | 
	
		
			
				|  |  |         List<WlyyPrescriptionExpressageLogDO> newroutinfolist = new ArrayList<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
	
		
			
				|  |  |         def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事务隔离级别,开启新事务
 | 
	
		
			
				|  |  |         TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //用于判断新节点是否包含了"已收件"的节点
 | 
	
		
			
				|  |  |             boolean isContainEndRoutInfo = false;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //获取本地所有路由信息的时间集
 | 
	
		
			
				|  |  |             Set<String> routAcceptTimeSet = new HashSet<>();
 | 
	
		
			
				|  |  |             for (WlyyPrescriptionExpressageLogDO log: localroutinfos) {
 | 
	
		
			
				|  |  |                 routAcceptTimeSet.add(DateUtil.dateToStrLong(log.getAcceptTime()));
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             for (WlyyPrescriptionExpressageLogDO pushlog: pushSFLogs) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 //判断是否有已收件的路由节点
 | 
	
		
			
				|  |  |                 if("80".equals(pushlog.getOpCode())){
 | 
	
		
			
				|  |  |                     isContainEndRoutInfo = true;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 if(routAcceptTimeSet.contains(DateUtil.dateToStrLong(pushlog.getAcceptTime()))){
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     pushlog.setOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  |                     newroutinfolist.add(pushlog);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //如果有新增的路由信息,则添加到数据库
 | 
	
		
			
				|  |  |             if(!newroutinfolist.isEmpty()){
 | 
	
		
			
				|  |  |                 prescriptionExpressageLogDao.save(newroutinfolist);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //如果路由信息节点包含了"已收件"节点,则修改处方状态为完成,增加物流派送日志为完成
 | 
	
		
			
				|  |  |             if(isContainEndRoutInfo){
 | 
	
		
			
				|  |  |                 //修改处方状态为完成
 | 
	
		
			
				|  |  |                 prescriptionDao.updateStatus(sfexpress.getOutpatientId(), 100,new Date());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 //保存配送成功的日志
 | 
	
		
			
				|  |  |                 WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  |                 outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  |                 outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             //事务提交
 | 
	
		
			
				|  |  |             transactionManager.commit(status);
 | 
	
		
			
				|  |  |         } catch (Exception ex) {
 | 
	
		
			
				|  |  |             //报错事务回滚
 | 
	
		
			
				|  |  |             transactionManager.rollback(status);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据收寄地址获取快递费用
 | 
	
		
			
				|  |  |      * @param d_province 省份名称
 | 
	
		
			
				|  |  |      * @param d_city     城市名称
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public WlyyExpressagePriceDO getSFExpressPrice(String d_province, String d_city) throws Exception{
 | 
	
		
			
				|  |  |         String end_address_name = "";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if("厦门市".equals(d_city)){
 | 
	
		
			
				|  |  |             end_address_name = "同城";
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  |             if("福建省".equals(d_province)){
 | 
	
		
			
				|  |  |                 end_address_name = "省内";
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 end_address_name = d_province;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         end_address_name = "%"+end_address_name.replaceAll("省","").replaceAll("市","")+"%";
 | 
	
		
			
				|  |  |         WlyyExpressagePriceDO sfprice =  expressagePriceDao.getExprePriceByIdAndEndAdressName("shunfeng",end_address_name);
 | 
	
		
			
				|  |  |         return sfprice;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据处方快递订单号判断是否下单成功
 | 
	
		
			
				|  |  |      * 如果下单成功,保存处方物流记录,保存配送日志
 | 
	
		
			
				|  |  |      * @param sfexpress_obj
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public boolean sfOrderSearchService(WlyyPrescriptionExpressageDO sfexpress_obj)  throws Exception{
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         boolean go_on = false;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String xml = SFUtils.sfOrderSearchService(sfexpress_obj.getId(),sf_code);
 | 
	
		
			
				|  |  |         String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             //xml验证
 | 
	
		
			
				|  |  |             verificationResponXml(re,"订单处理失败!");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             Document doc = DocumentHelper.parseText(re);
 | 
	
		
			
				|  |  |             String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  |             if(StringUtils.isNotBlank(headvalue) && "OK".equals(headvalue)) {
 | 
	
		
			
				|  |  |                 //是否能派送:1:人工确认;2:可收派;3:不可以收派
 | 
	
		
			
				|  |  |                 String filter_result = "";
 | 
	
		
			
				|  |  |                 String orderid = "";//业务订单号
 | 
	
		
			
				|  |  |                 String mailno = "";//顺丰运单号
 | 
	
		
			
				|  |  |                 String destCode = "";//目的地区域代码
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 //错误代对应的文字
 | 
	
		
			
				|  |  |                 Document redoc = doc.selectSingleNode("/Response/Body/Orderresponse").getDocument();
 | 
	
		
			
				|  |  |                 Element root = redoc.getRootElement();
 | 
	
		
			
				|  |  |                 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.isBlank(mailno)){
 | 
	
		
			
				|  |  |                     logger.info("顺丰快递下订单失败:未获取到快递单号!"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |                     return true;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 if(StringUtils.isNotBlank(filter_result) && "3".equals(filter_result)){
 | 
	
		
			
				|  |  |                     logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |                     return true;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 sfexpress_obj.setMailno(mailno);
 | 
	
		
			
				|  |  |                 sfexpress_obj.setCityCode(destCode);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //如果成功获取到快递单号,则保存处方物流记录,保存配送日志
 | 
	
		
			
				|  |  |             //修改处方状态为配送中
 | 
	
		
			
				|  |  |             prescriptionDao.updateStatus(sfexpress_obj.getOutpatientId(),65);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //保存处方物流记录
 | 
	
		
			
				|  |  |             prescriptionExpressageDao.save(sfexpress_obj);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //保存配送日志
 | 
	
		
			
				|  |  |             WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  |             outpatiExpressLog.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |             outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  |             outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  |             outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  |             outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  |             outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  |             outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }catch (Exception ex){
 | 
	
		
			
				|  |  |             logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |             //如果订单处理失败,则可以继续下单
 | 
	
		
			
				|  |  |             go_on = true;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return go_on;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public boolean sfOrderSearchServiceJustSearch(WlyyPrescriptionExpressageDO sfexpress_obj)  throws Exception{
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String xml = SFUtils.sfOrderSearchService(sfexpress_obj.getId(),sf_code);
 | 
	
		
			
				|  |  |         String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         boolean reslut = false;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             //xml验证
 | 
	
		
			
				|  |  |             verificationResponXml(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 = "";//顺丰运单号
 | 
	
		
			
				|  |  |                 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");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 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("顺丰快递下订单失败:未获取到快递单号!");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }catch (Exception ex){
 | 
	
		
			
				|  |  |             logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  |             //如果订单处理失败,则可以继续下单
 | 
	
		
			
				|  |  |             throw new Exception(ex.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return reslut;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public String getRoutInfosSearch(WlyyPrescriptionExpressageDO sfexpress_obj)throws Exception {
 | 
	
		
			
				|  |  |         String xml = SFUtils.getRoutInfos(sfexpress_obj,sf_code);
 | 
	
		
			
				|  |  |         String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return xml;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 | 
	
		
			
				|  |  | //package com.yihu.jw.hospital.prescription.service;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //import com.yihu.jw.entity.base.org.BaseOrgDO;
 | 
	
		
			
				|  |  | //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.util.date.DateUtil;
 | 
	
		
			
				|  |  | //import com.yihu.jw.util.http.HttpClientKit;
 | 
	
		
			
				|  |  | //import com.yihu.mysql.query.BaseJpaService;
 | 
	
		
			
				|  |  | //import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | //import org.apache.http.NameValuePair;
 | 
	
		
			
				|  |  | //import org.apache.http.message.BasicNameValuePair;
 | 
	
		
			
				|  |  | //import org.dom4j.Document;
 | 
	
		
			
				|  |  | //import org.dom4j.DocumentHelper;
 | 
	
		
			
				|  |  | //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;
 | 
	
		
			
				|  |  | //import org.springframework.transaction.TransactionStatus;
 | 
	
		
			
				|  |  | //import org.springframework.transaction.support.DefaultTransactionDefinition;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //import java.util.*;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | ///**
 | 
	
		
			
				|  |  | // *  门诊物流服务
 | 
	
		
			
				|  |  | // * lith 2019.06.04
 | 
	
		
			
				|  |  | // */
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //@Service
 | 
	
		
			
				|  |  | //public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescriptionExpressageDO, PrescriptionExpressageDao> {
 | 
	
		
			
				|  |  | //    private static Logger logger = LoggerFactory.getLogger(PrescriptionExpressageService.class);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | ////    //顺丰快递接口请求地址
 | 
	
		
			
				|  |  | ////    //@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
 | 
	
		
			
				|  |  | //    private SFUtils SFUtils;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private JpaTransactionManager transactionManager;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    //处方日志
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private WlyyOutpatientExpressageLogDao outpatientExpressageLogDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private PrescriptionDao prescriptionDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private WlyyExpressagePriceDao expressagePriceDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private PrescriptionExpressageLogDao prescriptionExpressageLogDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private PrescriptionExpressageDao prescriptionExpressageDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    @Autowired
 | 
	
		
			
				|  |  | //    private BaseOrgDao baseOrgDao;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 组装请求参数,发送请求
 | 
	
		
			
				|  |  | //     * @param xml
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     * @throws Exception
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    private String SFExpressPost(String xml)throws Exception{
 | 
	
		
			
				|  |  | //        String verifyCode = SFUtils.verifyCodeSFXmlStr(xml,sf_check_word);
 | 
	
		
			
				|  |  | //        List<NameValuePair> params = new ArrayList<>();
 | 
	
		
			
				|  |  | //        params.add(new BasicNameValuePair("xml", xml));
 | 
	
		
			
				|  |  | //        params.add(new BasicNameValuePair("verifyCode", verifyCode));
 | 
	
		
			
				|  |  | //        String re = HttpClientKit.post(sf_url, params, "UTF-8");
 | 
	
		
			
				|  |  | //        return re;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 校验返回的xml报文
 | 
	
		
			
				|  |  | //     * @param responseXml
 | 
	
		
			
				|  |  | //     * @param title
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    private void verificationResponXml(String responseXml,String title) throws Exception {
 | 
	
		
			
				|  |  | //        String error = "";
 | 
	
		
			
				|  |  | //        if (StringUtils.isBlank(responseXml)) {
 | 
	
		
			
				|  |  | //            // 如果返回的XML报文为空,请求也算失败
 | 
	
		
			
				|  |  | //            //保存http日志
 | 
	
		
			
				|  |  | //            error = title + ",返回的XML为空!";
 | 
	
		
			
				|  |  | //            logger.info(error);
 | 
	
		
			
				|  |  | //            throw new Exception(error);
 | 
	
		
			
				|  |  | //        }else{
 | 
	
		
			
				|  |  | ////          报错的报文示例<Response service="ScopeService"><Head>ERR</Head><ERROR code="8014">校验码错误 </ERROR></Response>
 | 
	
		
			
				|  |  | //            Document doc = DocumentHelper.parseText(responseXml);
 | 
	
		
			
				|  |  | //            String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  | //            if(StringUtils.isNotBlank(headvalue) && "ERR".equals(headvalue)){
 | 
	
		
			
				|  |  | //                //错误代码
 | 
	
		
			
				|  |  | //                String errorCode = "";
 | 
	
		
			
				|  |  | //                //错误代对应的文字
 | 
	
		
			
				|  |  | //                String errorMessage = doc.selectSingleNode("/Response/ERROR").getText();
 | 
	
		
			
				|  |  | //                Document error_doc = doc.selectSingleNode("/Response/ERROR").getDocument();
 | 
	
		
			
				|  |  | //                Element root = error_doc.getRootElement();
 | 
	
		
			
				|  |  | //                List<?> child = root.elements();
 | 
	
		
			
				|  |  | //                for (Object o : child){
 | 
	
		
			
				|  |  | //                    Element e = (Element) o;
 | 
	
		
			
				|  |  | //                    errorCode = e.attributeValue("code");
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //                error = title+","+errorCode+","+errorMessage;
 | 
	
		
			
				|  |  | //                logger.info(error);
 | 
	
		
			
				|  |  | //                throw new Exception(error);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 查询派送地址是否属于顺丰的派送范围
 | 
	
		
			
				|  |  | //     * @param d_address 派送地址
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public Boolean getSFOrderFilterService(String d_address) throws Exception {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        boolean result = false;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String xml = SFUtils.getSFOrderFilterXml(d_address,sf_code,"","","","");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | ////        String re = "<Response service=\"OrderFilterService\"><Head>OK</Head><Body><OrderFilterResponse orderid=\"TE201407020016\" filter_result=\"2\" origincode=\"755\" remark=\"2\"/></Body></Response>";
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //xml验证
 | 
	
		
			
				|  |  | //        verificationResponXml(re,"查询派送地址是否有效失败!");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        Document doc = DocumentHelper.parseText(re);
 | 
	
		
			
				|  |  | //        String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  | //        Element root = doc.getRootElement();
 | 
	
		
			
				|  |  | //        if(StringUtils.isNotBlank(headvalue) && "OK".equals(headvalue)) {
 | 
	
		
			
				|  |  | //            //是否能派送:1:人工确认;2:可收派;3:不可以收派
 | 
	
		
			
				|  |  | //            String filter_result = "";
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            Element firstWorldElement = root.element("Body");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            List<Element> elements = firstWorldElement.elements();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            for (Element o : elements){
 | 
	
		
			
				|  |  | //                filter_result = o.attributeValue("filter_result");
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            if(StringUtils.isNotBlank(filter_result) && "2".equals(filter_result)){
 | 
	
		
			
				|  |  | //                result = true;
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return result;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 向顺丰快递下订单
 | 
	
		
			
				|  |  | //     * @param sfexpress_obj
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     * @throws Exception
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public WlyyPrescriptionExpressageDO postSFOrderService(WlyyPrescriptionExpressageDO sfexpress_obj) throws Exception {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //获取医生所处的医院详细地址,作为寄件人地址
 | 
	
		
			
				|  |  | //        WlyyPrescriptionDO prescription = prescriptionDao.findOne(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //        BaseOrgDO hospital = baseOrgDao.findByCode(prescription.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>";
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //xml验证
 | 
	
		
			
				|  |  | //        logger.info("顺丰快递下订单:re"+re);
 | 
	
		
			
				|  |  | //        verificationResponXml(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) && "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);
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return sfexpress_obj;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 调用顺丰接口获取物流路由日志,与本地匹配,进行增量修改,并返回完整日志列表
 | 
	
		
			
				|  |  | //     * @param prescription
 | 
	
		
			
				|  |  | //     * @param sfexpress_obj
 | 
	
		
			
				|  |  | //     * @param sfexpresslogList
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public List<WlyyPrescriptionExpressageLogDO> getRoutInfos(WlyyPrescriptionDO prescription, WlyyPrescriptionExpressageDO sfexpress_obj, List<WlyyPrescriptionExpressageLogDO> sfexpresslogList) throws Exception {
 | 
	
		
			
				|  |  | //        String xml = SFUtils.getRoutInfos(sfexpress_obj,sf_code);
 | 
	
		
			
				|  |  | //        String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | //        //xml验证
 | 
	
		
			
				|  |  | //        verificationResponXml(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)     //取报文根节点
 | 
	
		
			
				|  |  | //            {
 | 
	
		
			
				|  |  | //                root = root.element("Body");
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //            List<?> child = root.elements();
 | 
	
		
			
				|  |  | //            String mailno = "";
 | 
	
		
			
				|  |  | //            Map<String,List<WlyyPrescriptionExpressageLogDO>> wayroutlsit = new HashMap<>();
 | 
	
		
			
				|  |  | //            for (Object o : child) {
 | 
	
		
			
				|  |  | //                Element e = (Element) o;
 | 
	
		
			
				|  |  | //                mailno = e.attributeValue("mailno");
 | 
	
		
			
				|  |  | //                //判断快递单号不为空,且和我们本地的一致
 | 
	
		
			
				|  |  | //                if(StringUtils.isNotBlank(mailno) &&
 | 
	
		
			
				|  |  | //                        sfexpress_obj.getMailno().equals(mailno)){
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                    //解析报文,结合本地数据返回最终的日志结果
 | 
	
		
			
				|  |  | //                    return this.xmltologlist(e,sfexpresslogList,sfexpress_obj);
 | 
	
		
			
				|  |  | //                }else{
 | 
	
		
			
				|  |  | //                    continue;
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return null;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    private List<WlyyPrescriptionExpressageLogDO> xmltologlist(Element e, List<WlyyPrescriptionExpressageLogDO> sfexpresslogList, WlyyPrescriptionExpressageDO sfexpress_obj)throws Exception{
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //获取本地所有路由信息的时间集
 | 
	
		
			
				|  |  | //        Set<String> routAcceptTimeSet = new HashSet<>();
 | 
	
		
			
				|  |  | //        for (WlyyPrescriptionExpressageLogDO log: sfexpresslogList) {
 | 
	
		
			
				|  |  | //            routAcceptTimeSet.add(DateUtil.dateToStrLong(log.getAcceptTime()));
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        List<?> child = e.elements();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        List<WlyyPrescriptionExpressageLogDO> newroutinfolist = new ArrayList<>();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //用于判断新节点是否包含了"已收件"的节点
 | 
	
		
			
				|  |  | //        boolean isContainEndRoutInfo = false;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        for (Object o : child) {
 | 
	
		
			
				|  |  | //            Element routinfoe = (Element) o;
 | 
	
		
			
				|  |  | //            String accept_time = routinfoe.attributeValue("accept_time");
 | 
	
		
			
				|  |  | //            String accept_address = routinfoe.attributeValue("accept_address");
 | 
	
		
			
				|  |  | //            String accept_remark = routinfoe.attributeValue("remark");
 | 
	
		
			
				|  |  | //            String opcode = routinfoe.attributeValue("opcode");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //和时间集作比对,过滤已存在的
 | 
	
		
			
				|  |  | //            if(!routAcceptTimeSet.contains(accept_time)){
 | 
	
		
			
				|  |  | //                WlyyPrescriptionExpressageLogDO newlogobj = new WlyyPrescriptionExpressageLogDO();
 | 
	
		
			
				|  |  | //                newlogobj.setAcceptTime(DateUtil.strToDate(accept_time));
 | 
	
		
			
				|  |  | //                newlogobj.setAcceptAddress(accept_address);
 | 
	
		
			
				|  |  | //                newlogobj.setAcceptRemark(accept_remark);
 | 
	
		
			
				|  |  | //                newlogobj.setOpCode(opcode);
 | 
	
		
			
				|  |  | //                newlogobj.setId(UUID.randomUUID().toString().replace("-",""));
 | 
	
		
			
				|  |  | //                newlogobj.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //                newlogobj.setExpressageId(sfexpress_obj.getId());
 | 
	
		
			
				|  |  | //                newlogobj.setCreateTime(new Date());
 | 
	
		
			
				|  |  | //                newroutinfolist.add(newlogobj);
 | 
	
		
			
				|  |  | //                sfexpresslogList.add(newlogobj);
 | 
	
		
			
				|  |  | //                //aopcode=80,为已签收
 | 
	
		
			
				|  |  | //                if("80".equals(opcode)){
 | 
	
		
			
				|  |  | //                    isContainEndRoutInfo = true;
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
	
		
			
				|  |  | //        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
 | 
	
		
			
				|  |  | //        TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
 | 
	
		
			
				|  |  | //        try {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //如果有新增的路由信息,则添加到数据库
 | 
	
		
			
				|  |  | //            if(!newroutinfolist.isEmpty()){
 | 
	
		
			
				|  |  | //                prescriptionExpressageLogDao.save(newroutinfolist);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //如果路由信息节点包含了"已收件"节点,这修改处方派送状态为完成,增加物流派送日志为完成
 | 
	
		
			
				|  |  | //            if(isContainEndRoutInfo){
 | 
	
		
			
				|  |  | //                //修改处方状态为完成
 | 
	
		
			
				|  |  | //                prescriptionDao.updateStatus(sfexpress_obj.getId(), 100,new Date());
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                //保存门诊处方配送成功的日志
 | 
	
		
			
				|  |  | //                WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  | //                outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //事务提交
 | 
	
		
			
				|  |  | //            transactionManager.commit(status);
 | 
	
		
			
				|  |  | //        } catch (Exception ex) {
 | 
	
		
			
				|  |  | //            //报错事务回滚
 | 
	
		
			
				|  |  | //            transactionManager.rollback(status);
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return sfexpresslogList;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 解析顺丰推送过来的路由信息,和本地数据匹配并进行增量更新)
 | 
	
		
			
				|  |  | //     * @param xml
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     * @throws Exception
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public void SFRoutePushService(String xml) throws Exception{
 | 
	
		
			
				|  |  | //        Document doc = DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  | //        Element root = doc.getRootElement();
 | 
	
		
			
				|  |  | //        if (root.element("Body") != null)     //包含WaybillRoute节点
 | 
	
		
			
				|  |  | //        {
 | 
	
		
			
				|  |  | //            root = root.element("Body");
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        List<?> child = root.elements();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        Map<String,List<WlyyPrescriptionExpressageLogDO>> wayroutlsit = new HashMap<>();
 | 
	
		
			
				|  |  | //        for (Object o : child) {
 | 
	
		
			
				|  |  | //            Element routinfoe = (Element) o;
 | 
	
		
			
				|  |  | //            WlyyPrescriptionExpressageLogDO sflog = new WlyyPrescriptionExpressageLogDO();
 | 
	
		
			
				|  |  | //            String accept_time = routinfoe.attributeValue("accepttime");
 | 
	
		
			
				|  |  | //            String accept_address = routinfoe.attributeValue("acceptaddress");
 | 
	
		
			
				|  |  | //            String accept_remark = routinfoe.attributeValue("remark");
 | 
	
		
			
				|  |  | //            String opcode = routinfoe.attributeValue("opcode");
 | 
	
		
			
				|  |  | //            String mailno = routinfoe.attributeValue("mailno");
 | 
	
		
			
				|  |  | //            String orderid = routinfoe.attributeValue("orderid");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            sflog.setAcceptTime(DateUtil.strToDate(accept_time));
 | 
	
		
			
				|  |  | //            sflog.setAcceptAddress(accept_address);
 | 
	
		
			
				|  |  | //            sflog.setAcceptRemark(accept_remark);
 | 
	
		
			
				|  |  | //            sflog.setOpCode(opcode);
 | 
	
		
			
				|  |  | //            sflog.setExpressageId(orderid);
 | 
	
		
			
				|  |  | //            sflog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  | //            sflog.setCreateTime(new Date());
 | 
	
		
			
				|  |  | //            if(wayroutlsit.keySet().contains(mailno)){
 | 
	
		
			
				|  |  | //                wayroutlsit.get(mailno).add(sflog);
 | 
	
		
			
				|  |  | //            }else{
 | 
	
		
			
				|  |  | //                List<WlyyPrescriptionExpressageLogDO> newsflogs = new ArrayList<>();
 | 
	
		
			
				|  |  | //                newsflogs.add(sflog);
 | 
	
		
			
				|  |  | //                wayroutlsit.put(mailno,newsflogs);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        if(!wayroutlsit.keySet().isEmpty()){
 | 
	
		
			
				|  |  | //            for (String mailno:wayroutlsit.keySet()) {
 | 
	
		
			
				|  |  | //                List<WlyyPrescriptionExpressageLogDO> pushSFLogs = wayroutlsit.get(mailno);
 | 
	
		
			
				|  |  | //                //同一个快递单号的执行一个事务操作
 | 
	
		
			
				|  |  | //                this.saveSFPushRoutInfos(mailno,pushSFLogs);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 同一个快递单号的执行一个事务操作
 | 
	
		
			
				|  |  | //     * @param mailno
 | 
	
		
			
				|  |  | //     * @param pushSFLogs
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public void saveSFPushRoutInfos(String mailno,List<WlyyPrescriptionExpressageLogDO> pushSFLogs){
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        //根据快递单号获取处方配送详细信息
 | 
	
		
			
				|  |  | //        WlyyPrescriptionExpressageDO sfexpress = prescriptionExpressageDao.findByPrescriptionExpressMailno(mailno);
 | 
	
		
			
				|  |  | //        //根据快递单号获取本地的路由信息
 | 
	
		
			
				|  |  | //        List<WlyyPrescriptionExpressageLogDO> localroutinfos = prescriptionExpressageLogDao.queryByOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  | //        //需要增量更新到本地的路由信息集合
 | 
	
		
			
				|  |  | //        List<WlyyPrescriptionExpressageLogDO> newroutinfolist = new ArrayList<>();
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
	
		
			
				|  |  | //        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事务隔离级别,开启新事务
 | 
	
		
			
				|  |  | //        TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
 | 
	
		
			
				|  |  | //        try {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //用于判断新节点是否包含了"已收件"的节点
 | 
	
		
			
				|  |  | //            boolean isContainEndRoutInfo = false;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //获取本地所有路由信息的时间集
 | 
	
		
			
				|  |  | //            Set<String> routAcceptTimeSet = new HashSet<>();
 | 
	
		
			
				|  |  | //            for (WlyyPrescriptionExpressageLogDO log: localroutinfos) {
 | 
	
		
			
				|  |  | //                routAcceptTimeSet.add(DateUtil.dateToStrLong(log.getAcceptTime()));
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            for (WlyyPrescriptionExpressageLogDO pushlog: pushSFLogs) {
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                //判断是否有已收件的路由节点
 | 
	
		
			
				|  |  | //                if("80".equals(pushlog.getOpCode())){
 | 
	
		
			
				|  |  | //                    isContainEndRoutInfo = true;
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                if(routAcceptTimeSet.contains(DateUtil.dateToStrLong(pushlog.getAcceptTime()))){
 | 
	
		
			
				|  |  | //                    continue;
 | 
	
		
			
				|  |  | //                }else{
 | 
	
		
			
				|  |  | //                    pushlog.setOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  | //                    newroutinfolist.add(pushlog);
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //如果有新增的路由信息,则添加到数据库
 | 
	
		
			
				|  |  | //            if(!newroutinfolist.isEmpty()){
 | 
	
		
			
				|  |  | //                prescriptionExpressageLogDao.save(newroutinfolist);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //如果路由信息节点包含了"已收件"节点,则修改处方状态为完成,增加物流派送日志为完成
 | 
	
		
			
				|  |  | //            if(isContainEndRoutInfo){
 | 
	
		
			
				|  |  | //                //修改处方状态为完成
 | 
	
		
			
				|  |  | //                prescriptionDao.updateStatus(sfexpress.getOutpatientId(), 100,new Date());
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                //保存配送成功的日志
 | 
	
		
			
				|  |  | //                WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setOutpatientId(sfexpress.getOutpatientId());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  | //                outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  | //                outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //            //事务提交
 | 
	
		
			
				|  |  | //            transactionManager.commit(status);
 | 
	
		
			
				|  |  | //        } catch (Exception ex) {
 | 
	
		
			
				|  |  | //            //报错事务回滚
 | 
	
		
			
				|  |  | //            transactionManager.rollback(status);
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 根据收寄地址获取快递费用
 | 
	
		
			
				|  |  | //     * @param d_province 省份名称
 | 
	
		
			
				|  |  | //     * @param d_city     城市名称
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public WlyyExpressagePriceDO getSFExpressPrice(String d_province, String d_city) throws Exception{
 | 
	
		
			
				|  |  | //        String end_address_name = "";
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        if("厦门市".equals(d_city)){
 | 
	
		
			
				|  |  | //            end_address_name = "同城";
 | 
	
		
			
				|  |  | //        }else{
 | 
	
		
			
				|  |  | //            if("福建省".equals(d_province)){
 | 
	
		
			
				|  |  | //                end_address_name = "省内";
 | 
	
		
			
				|  |  | //            }else{
 | 
	
		
			
				|  |  | //                end_address_name = d_province;
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        end_address_name = "%"+end_address_name.replaceAll("省","").replaceAll("市","")+"%";
 | 
	
		
			
				|  |  | //        WlyyExpressagePriceDO sfprice =  expressagePriceDao.getExprePriceByIdAndEndAdressName("shunfeng",end_address_name);
 | 
	
		
			
				|  |  | //        return sfprice;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    /**
 | 
	
		
			
				|  |  | //     * 根据处方快递订单号判断是否下单成功
 | 
	
		
			
				|  |  | //     * 如果下单成功,保存处方物流记录,保存配送日志
 | 
	
		
			
				|  |  | //     * @param sfexpress_obj
 | 
	
		
			
				|  |  | //     * @return
 | 
	
		
			
				|  |  | //     * @throws Exception
 | 
	
		
			
				|  |  | //     */
 | 
	
		
			
				|  |  | //    public boolean sfOrderSearchService(WlyyPrescriptionExpressageDO sfexpress_obj)  throws Exception{
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        boolean go_on = false;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String xml = SFUtils.sfOrderSearchService(sfexpress_obj.getId(),sf_code);
 | 
	
		
			
				|  |  | //        String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        try {
 | 
	
		
			
				|  |  | //            //xml验证
 | 
	
		
			
				|  |  | //            verificationResponXml(re,"订单处理失败!");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            Document doc = DocumentHelper.parseText(re);
 | 
	
		
			
				|  |  | //            String headvalue = doc.selectSingleNode("/Response/Head").getText();
 | 
	
		
			
				|  |  | //            if(StringUtils.isNotBlank(headvalue) && "OK".equals(headvalue)) {
 | 
	
		
			
				|  |  | //                //是否能派送:1:人工确认;2:可收派;3:不可以收派
 | 
	
		
			
				|  |  | //                String filter_result = "";
 | 
	
		
			
				|  |  | //                String orderid = "";//业务订单号
 | 
	
		
			
				|  |  | //                String mailno = "";//顺丰运单号
 | 
	
		
			
				|  |  | //                String destCode = "";//目的地区域代码
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                //错误代对应的文字
 | 
	
		
			
				|  |  | //                Document redoc = doc.selectSingleNode("/Response/Body/Orderresponse").getDocument();
 | 
	
		
			
				|  |  | //                Element root = redoc.getRootElement();
 | 
	
		
			
				|  |  | //                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.isBlank(mailno)){
 | 
	
		
			
				|  |  | //                    logger.info("顺丰快递下订单失败:未获取到快递单号!"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //                    return true;
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                if(StringUtils.isNotBlank(filter_result) && "3".equals(filter_result)){
 | 
	
		
			
				|  |  | //                    logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //                    return true;
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //                sfexpress_obj.setMailno(mailno);
 | 
	
		
			
				|  |  | //                sfexpress_obj.setCityCode(destCode);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //如果成功获取到快递单号,则保存处方物流记录,保存配送日志
 | 
	
		
			
				|  |  | //            //修改处方状态为配送中
 | 
	
		
			
				|  |  | //            prescriptionDao.updateStatus(sfexpress_obj.getOutpatientId(),65);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //保存处方物流记录
 | 
	
		
			
				|  |  | //            prescriptionExpressageDao.save(sfexpress_obj);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //            //保存配送日志
 | 
	
		
			
				|  |  | //            WlyyOutpatientExpressageLogDO outpatiExpressLog = new WlyyOutpatientExpressageLogDO();
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setOutpatientId(sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setId(UUID.randomUUID().toString());
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setType(8);
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setCreateTime(new Date());
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setFlag(1);
 | 
	
		
			
				|  |  | //            outpatiExpressLog.setStatus(100);
 | 
	
		
			
				|  |  | //            outpatientExpressageLogDao.save(outpatiExpressLog);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        }catch (Exception ex){
 | 
	
		
			
				|  |  | //            logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //            //如果订单处理失败,则可以继续下单
 | 
	
		
			
				|  |  | //            go_on = true;
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return go_on;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public boolean sfOrderSearchServiceJustSearch(WlyyPrescriptionExpressageDO sfexpress_obj)  throws Exception{
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        String xml = SFUtils.sfOrderSearchService(sfexpress_obj.getId(),sf_code);
 | 
	
		
			
				|  |  | //        String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        boolean reslut = false;
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        try {
 | 
	
		
			
				|  |  | //            //xml验证
 | 
	
		
			
				|  |  | //            verificationResponXml(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 = "";//顺丰运单号
 | 
	
		
			
				|  |  | //                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");
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //                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("顺丰快递下订单失败:未获取到快递单号!");
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        }catch (Exception ex){
 | 
	
		
			
				|  |  | //            logger.info("顺丰快递下订单失败:派送地址不可派送,处方编号:"+sfexpress_obj.getOutpatientId());
 | 
	
		
			
				|  |  | //            //如果订单处理失败,则可以继续下单
 | 
	
		
			
				|  |  | //            throw new Exception(ex.getMessage());
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return reslut;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public String getRoutInfosSearch(WlyyPrescriptionExpressageDO sfexpress_obj)throws Exception {
 | 
	
		
			
				|  |  | //        String xml = SFUtils.getRoutInfos(sfexpress_obj,sf_code);
 | 
	
		
			
				|  |  | //        String re = this.SFExpressPost(xml);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        return xml;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //}
 |