Prechádzať zdrojové kódy

海沧医院顺丰对接

wangzhinan 1 rok pred
rodič
commit
e6f219e142

+ 5 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/HcyyPrescriptionService.java

@ -2107,11 +2107,14 @@ public class HcyyPrescriptionService extends BaseJpaService<WlyyPrescriptionDO,
        }
        if (expressageDO!=null){
            if (expressageDO.getOneselfPickupFlg()==0){
                Object result=prescriptionService.getSFExpressInfoNew(registerNo,realorder,"");
                Object result=prescriptionService.getHcyySFExpressInfoNew(registerNo,realorder,"");
                String re = result.toString();
                if (re!=null){
                    JSONObject object = JSONObject.parseObject(re);
                    String sfOrder = object.getString("mainMailNo");
                    if (object.getString("code").equalsIgnoreCase("SUCCESS"));
                    JSONArray jsonArray = object.getJSONArray("result");
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    String sfOrder = jsonObject.getString("mainMailNo");
                    String address = expressageDO.getProvinceName()+expressageDO.getCityName()+expressageDO.getTownName()+expressageDO.getStreetName()+expressageDO.getAddress();
                    String phone = expressageDO.getMobile();
                    String remark = expressageDO.getRemark();

+ 57 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionExpressageService.java

@ -6,6 +6,7 @@ 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.HcyyEntranceService;
import com.yihu.jw.hospital.prescription.service.entrance.util.SFUtils;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
@ -94,6 +95,9 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
    @Autowired
    private SfConfigDao sfConfigDao;
    @Autowired
    private HcyyEntranceService hcyyEntranceService;
    private PrescriptionExpressageService(){}
    public PrescriptionExpressageService(String sf_url,String sf_code,String sf_check_word){
@ -203,6 +207,59 @@ public class PrescriptionExpressageService extends BaseJpaService<WlyyPrescripti
    }
    /**
     * 向顺丰快递下订单
     * @param sfexpress_obj
     * @return
     * @throws Exception
     */
    public WlyyPrescriptionExpressageDO postHcyySFOrderService(WlyyPrescriptionExpressageDO sfexpress_obj) throws Exception {
        //获取医生所处的医院详细地址,作为寄件人地址
        WlyyOutpatientDO outpatientDO = outpatientDao.findOne(sfexpress_obj.getOutpatientId());
        BaseOrgDO hospital = baseOrgDao.findByCode(outpatientDO.getHospital());
        BasePatientDO basePatientDO = basePatientDao.findById(outpatientDO.getPatient());
        JSONObject params = SFUtils.postHcyySFOrderServiceV2(sfexpress_obj,hospital,basePatientDO);
        String re = hcyyEntranceService.SendSfExpressOrder(params.toJSONString()) ;
        //xml验证
        logger.info("顺丰快递下订单:re"+re);
   /*     verificationResponV2(re);*/
        String mailno = "";//顺丰运单号
        String bspOrderNo = "";//顺丰业务号
        if (StringUtils.isNoneBlank(re)){
            JSONObject respone = JSONObject.parseObject(re);
            if (respone.getString("code").equalsIgnoreCase("SUCCESS")){
                JSONObject result = respone.getJSONObject("result");
                mailno = result.getString("mailNo");
                bspOrderNo = result.getString("merchantOrderNo");
            }
        }
//        String re = "{\"success\":true,\"message\":null,\"code\":\"SUCCESS\",\"result\":{\"successResult\":[{\"mailNo\":\"SF1023527844982\",\"bspOrderNo\":\"2c9081aa724b941501724eb3d0e40036\"}]}}";
//        JSONObject respone = JSONObject.parseObject(re);
      /*  String mailno = "";//顺丰运单号
        String bspOrderNo = "";//顺丰业务号
        JSONArray successResult =  respone.getJSONObject("result").getJSONArray("successResult");
        if(!successResult.isEmpty()){
            JSONObject object = successResult.getJSONObject(0);
            mailno = object.getString("mailNo");
            bspOrderNo = object.getString("bspOrderNo");
        }*/
        logger.info("顺丰快递下订单:mailno"+mailno);
//        mailno = respone.getJSONObject("result").getJSONArray("successResult").getJSONObject(0).getString("mailNo");
        sfexpress_obj.setMailno(mailno);
        sfexpress_obj.setBspOrderNo(bspOrderNo);
        return sfexpress_obj;
    }
    /**
     * 向顺丰快递下订单
     * @param sfexpress_obj

+ 118 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -8467,6 +8467,124 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    /**
     * 根据门诊唯一号,处方号,到顺丰下单,下单成功返回面单信息--心脏和眼科
     *
     * @param admNo     门诊唯一号
     * @param realOrder 处方号
     * @return
     */
    public Object getHcyySFExpressInfoNew(String admNo, String realOrder, String wxId) throws Exception {
        //根据门诊唯一号取就诊记录
//        List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByAdmNo(admNo);
        if (StringUtils.isNoneBlank(realOrder)){
            String str[] = realOrder.split(";");
            Object result = "";
            for (int i=0;i<str.length;i++){
                WlyyPrescriptionDO wlyyPrescriptionDOS = new WlyyPrescriptionDO();
                if(StringUtils.isNoneBlank(admNo)){
                    wlyyPrescriptionDOS = prescriptionDao.findByAdmNoAndRealOrder(admNo,str[i]);
                }else {
                    List<WlyyPrescriptionDO> wlyyPrescriptionDOList = prescriptionDao.findByRealOrderList(str[i]);
                    if (wlyyPrescriptionDOList!=null&&wlyyPrescriptionDOList.size()!=0){
                        wlyyPrescriptionDOS =wlyyPrescriptionDOList.get(0);
                    }
                }
                System.out.println("获取顺丰物流面单信息:wlyyPrescriptionDOS != null=" + wlyyPrescriptionDOS != null);
                if (wlyyPrescriptionDOS != null) {
                    List<WlyyPrescriptionExpressageDO> expressageDOList = sfexpressService.findByField("outpatientId", wlyyPrescriptionDOS.getOutpatientId());
                    WlyyPrescriptionExpressageDO sfexpress_obj = null;
                    System.out.println("获取顺丰物流面单信息:CollectionUtils.isEmpty(expressageDOList)=" + CollectionUtils.isEmpty(expressageDOList));
                    if (CollectionUtils.isEmpty(expressageDOList)) {
                        throw new Exception("顺丰快递下单失败,未找到该处方的派送地址!");
                    } else {
                        System.out.println("获取顺丰物流面单信息:1");
                        sfexpress_obj = expressageDOList.get(0);
                        System.out.println("获取顺丰物流面单信息:2");
                        BasePatientDO basePatientDO = basePatientDao.findById(wlyyPrescriptionDOS.getPatientCode());
                        //如果该处方的快递单号已生成,则说明已经下单成功,不需要重复下单,直接返回面单信息
                        System.out.println("获取顺丰物流面单信息:3");
                        if (org.apache.commons.lang.StringUtils.isNotBlank(sfexpress_obj.getMailno())) {
                            //处方已下单成功
                            System.out.println("获取顺丰物流面单信息:4");
                        } else {
                            //如果该处方的快递单号未生成,则继续下单
                            //根据业务订单号判断是否已经下单成功
                            //--2020.05.20--顺丰V2.0接口已不提供查询接口,直接单下单--START
//                    boolean go_on = sfexpressService.sfOrderSearchService(sfexpress_obj);
//
//                    //如果该业务订单号未下单成功过,则重新下单
//                    if(go_on){
//                        //请求顺丰接口下单,成功下单后,返回快递单号
//                        sfexpress_obj = sfexpressService.postSFOrderService(sfexpress_obj);
//                        //保存快递单号和增加处方物流记录为配送
//                        sfexpressService.updatePrescriptionExpressage(sfexpress_obj);
//                    }
                            //--2020.05.20--顺丰V2.0接口已不提供查询接口,直接单下单--END
                            //请求顺丰接口下单,成功下单后,返回快递单号
                            sfexpress_obj = sfexpressService.postHcyySFOrderService(sfexpress_obj);
                            System.out.println("获取顺丰物流面单信息:5");
                            //保存快递单号和增加处方物流记录为配送
                            sfexpressService.updatePrescriptionExpressage(sfexpress_obj);
                            System.out.println("获取顺丰物流面单信息:6");
                        }
                        wlyyPrescriptionDOS.setStatus(31);
                        prescriptionDao.save(wlyyPrescriptionDOS);
                        if (sfexpress_obj != null && StringUtils.isNoneBlank(sfexpress_obj.getMailno())) {
                            JSONObject object = new JSONObject();
                            object.put("merchantOrderNo",sfexpress_obj.getBspOrderNo());
                            result = hcyyEntranceService.QuerySfPrintWaybillInfo(object.toString());
                            System.out.println("获取顺丰物流面单信息7-1"+result);
                            System.out.println("获取顺丰物流面单信息:7");
                            /* com.alibaba.fastjson.JSONObject sfJsonObject = new com.alibaba.fastjson.JSONObject();*/
                    /*sfJsonObject.put("mailno", sfexpress_obj.getMailno());
                    sfJsonObject.put("mailtype", "标准快递");
                    sfJsonObject.put("destcode", object.getString("destRouteLabel"));
                    if (wxId.equalsIgnoreCase("xm_zsyy_wx")) {
                        sfJsonObject.put("j_name", "厦门大学附属中山医院");
                        sfJsonObject.put("j_phone", "4003008888");
                        sfJsonObject.put("j_townName", "思明区");
                        sfJsonObject.put("j_address", "湖滨南路201-209号");
                    } else if (wxId.equalsIgnoreCase("xm_ykyy_wx")) {
                        sfJsonObject.put("j_name", "厦门大学附属中山医院");
                        sfJsonObject.put("j_phone", "4003008888");
                        sfJsonObject.put("j_townName", "思明区");
                        sfJsonObject.put("j_address", "湖滨南路201-209号");
                    }
                    sfJsonObject.put("j_provinceName", "福建省");
                    sfJsonObject.put("j_cityName", "厦门市");
                    sfJsonObject.put("d_name", sfexpress_obj.getName());
                    sfJsonObject.put("d_provinceName", sfexpress_obj.getProvinceName());
                    sfJsonObject.put("d_cityName", sfexpress_obj.getCityName());
                    sfJsonObject.put("d_townName", sfexpress_obj.getTownName());
                    sfJsonObject.put("d_address", sfexpress_obj.getAddress());
                    sfJsonObject.put("d_phone", sfexpress_obj.getMobile());
                    sfJsonObject.put("express_type", 11);
                    sfJsonObject.put("pay_method", 2);
                    sfJsonObject.put("receive_time", "");
                    sfJsonObject.put("dispensaryType", 2);*/
                            System.out.println("获取顺丰物流面单信息:8");
                        }
                    }
                }
                System.out.println("获取顺丰物流面单信息:9");
            }
            return result;
        }else {
            return "处方号未空!";
        }
    }
    /**
     * 根据门诊唯一号,处方号,到顺丰下单,下单成功返回面单信息--心脏和眼科
     *

+ 54 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/HcyyEntranceService.java

@ -238,6 +238,60 @@ public class HcyyEntranceService {
        return WebserviceUtil.post(url,xzzxNamespace,api,params);
    }
    /**
     * 创建顺丰订单
     * @param jsonData
     * @return
     * @throws Exception
     */
    public String SendSfExpressOrder(String jsonData) throws Exception {
        String api = "SendSfExpressOrder";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",jsonData);
        logger.info("SendSfExpressOrder params:"+params.toString());
        String xml = getHcyyCAWebServiceInfo("CallInterface",params,getYYCheckUrl());
        logger.info("SendSfExpressOrder json:"+xml);
        return xml;
    }
    /**
     * 获取顺丰面单
     * @param jsonData
     * @return
     * @throws Exception
     */
    public String QuerySfPrintWaybillInfo(String jsonData) throws Exception {
        String api = "QuerySfPrintWaybillInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",jsonData);
        logger.info("QuerySfPrintWaybillInfo params:"+params.toString());
        String xml = getHcyyCAWebServiceInfo("CallInterface",params,getYYCheckUrl());
        logger.info("QuerySfPrintWaybillInfo json:"+xml);
        return xml;
    }
    /**
     * 获取部门信息
     * @return

+ 68 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/util/SFUtils.java

@ -363,4 +363,72 @@ public class SFUtils {
        params.put("orderThirds",orders);
        return params;
    }
    /**
     * 组装顺丰快递下订单参数--V2
     * @param sfexpress_obj
     * @param hospital
     * @return
     */
    public JSONObject postHcyySFOrderServiceV2(WlyyPrescriptionExpressageDO sfexpress_obj, BaseOrgDO hospital,  BasePatientDO basePatientDO) {
        //根据快递物流获取门诊信息,根据门诊信息获取处方订单的药品详情
        List<WlyyPrescriptionDO> prescriptionDOList = prescriptionService.findByField("outpatientId",sfexpress_obj.getOutpatientId());
        String realOrder ="";
        for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
            realOrder += wlyyPrescriptionDO.getRealOrder()+",";
        }
        if (StringUtils.isNotBlank(realOrder)){
            realOrder = realOrder.substring(0,realOrder.length()-1);
        }
        Set<String> prescriptionIdSet = new HashSet<>();
        prescriptionDOList.forEach(
                onePrescription -> {
                    prescriptionIdSet.add(onePrescription.getId());
                }
        );
        List<WlyyPrescriptionInfoDO> prescriptionInfolist = prescriptionInfoDao.queryAllByPrescriptionIdInAndDel(prescriptionIdSet,1);
        JSONObject order = new JSONObject();//单个订单
        order.put("bspOrderNo",sfexpress_obj.getId());
        order.put("payMethod",2);//付款方式到付
        order.put("expressType",1);//使用顺丰标快
        order.put("callFlag",0);//是否通过手持终端 通知顺丰收派 员上门收件,支持以下值: 1:要求 0:不要求
        order.put("merchantOrderNo","HLWYYSF" + System.currentTimeMillis() + (int) (Math.random() * 900) + 100);
        order.put("packagesNo",1);
        order.put("productCode","CHINESE_HERBAL");
        JSONObject patientInfoJson = new JSONObject();
        patientInfoJson.put("patientName",basePatientDO.getName());
        patientInfoJson.put("patientPhone",basePatientDO.getMobile());
        patientInfoJson.put("patientIdentityCardNo",basePatientDO.getIdcard());
        patientInfoJson.put("prescriptionNos",realOrder);
        patientInfoJson.put("takeMedicineIdentityName","手机号");
        patientInfoJson.put("takeMedicineIdentityValue",basePatientDO.getMobile());
        order.put("patientInfo",patientInfoJson);
        JSONObject contactInfoJson = new JSONObject();
        contactInfoJson.put("srcName",hospital.getOrgAdmin());
        contactInfoJson.put("srcPhone",hospital.getMobile());
        contactInfoJson.put("srcProvince",hospital.getProvinceName());
        contactInfoJson.put("srcCity",hospital.getCityName());
        contactInfoJson.put("srcDistrict",hospital.getTownName());
        contactInfoJson.put("srcAddress",hospital.getAddress());
        contactInfoJson.put("destName",sfexpress_obj.getName());
        contactInfoJson.put("destPhone",sfexpress_obj.getMobile());
        contactInfoJson.put("destProvince",sfexpress_obj.getProvinceName());
        contactInfoJson.put("destCity",sfexpress_obj.getCityName());
        contactInfoJson.put("destDistrict",sfexpress_obj.getTownName());
        contactInfoJson.put("destAddress",sfexpress_obj.getStreetName()+sfexpress_obj.getAddress());
        order.put("contactInfo",contactInfoJson);
        JSONObject cargoDetailJson = new JSONObject();
        cargoDetailJson.put("depositumInfo","药品");
        if(!prescriptionInfolist.isEmpty()){
            cargoDetailJson.put("depositumNo",prescriptionInfolist.size());
        }else{
            cargoDetailJson.put("depositumNo",1);
        }
        order.put("cargoDetail",cargoDetailJson);
        return order;
    }
}