package com.yihu.jw.hospital.prescription.service.entrance;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.dict.dao.DictDoctorDutyDao;
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
import com.yihu.jw.entity.base.dict.DictDoctorDutyDO;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
import com.yihu.jw.entity.hospital.httplog.WlyyHttpLogDO;
import com.yihu.jw.entity.hospital.mapping.DoctorMappingDO;
import com.yihu.jw.entity.hospital.mapping.PatientMappingDO;
import com.yihu.jw.entity.hospital.prescription.*;
import com.yihu.jw.file_upload.FileUploadService;
import com.yihu.jw.hospital.dict.WlyyChargeDictDao;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.hospital.httplog.dao.WlyyHttpLogDao;
import com.yihu.jw.hospital.mapping.dao.DoctorMappingDao;
import com.yihu.jw.hospital.mapping.dao.PatientMappingDao;
import com.yihu.jw.hospital.prescription.dao.*;
import com.yihu.jw.hospital.prescription.service.entrance.util.AES;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.hospital.doctor.CheckInfoVO;
import com.yihu.jw.restmodel.hospital.doctor.PersonInfoVO;
import com.yihu.jw.restmodel.hospital.prescription.*;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.WebserviceUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.utils.security.MD5;
import net.sf.json.xml.XMLSerializer;
import nu.xom.*;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.io.StringReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 心脏中心内网his对接服务
 * Created by Trick on 2020/3/18
 */
@Service
@Transactional
public class HcyyEntranceService {

    private static Logger logger = LoggerFactory.getLogger(HcyyEntranceService.class);

    @Autowired
    private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
    @Autowired
    private DictHospitalDeptDao dictHospitalDeptDao;
    @Autowired
    private DictDoctorDutyDao dictDoctorDutyDao;
    @Autowired
    private WlyyChargeDictDao chargeDictDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private BaseDoctorHospitalDao doctorHospitalDao;
    @Autowired
    private BaseDoctorRoleDao doctorRoleDao;
    @Autowired
    private DoctorMappingDao doctorMappingDao;

    @Autowired
    private BasePatientWechatDao basePatientWechatDao;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private PatientMappingDao patientMappingDao;
    @Autowired
    private OutpatientDao outpatientDao;
    @Autowired
    private PatientRegisterDao patientRegisterDao;
    @Autowired
    private WlyyHttpLogDao wlyyHttpLogDao;
    @Autowired
    private PrescriptionDao prescriptionDao;
    @Autowired
    private PrescriptionDiagnosisDao diagnosisDao;
    @Autowired
    private PrescriptionInfoDao prescriptionInfoDao;
    @Autowired
    private WlyyInspectionDao wlyyInspectionDao;
    @Autowired
    private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
    @Autowired
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private BasePatientDao basePatientDao;
    @Autowired
    private BaseDoctorHospitalDao baseDoctorHospitalDao;
    @Autowired
    private PrescriptionEmrDao prescriptionEmrDao;
    @Value("${fastDFS.fastdfs_file_url}")
    private String fastdfs_file_url;
    @Autowired
    private FileUploadService fileUploadService;


    private static String key="bvvsf3JA0mUXMU+mVnMaOQ==";

    //发送微信模板消息
    /*@Value("${wechat.url}")*/
    private String sendMessageUrl="http://172.16.100.37:8090/hospitalPortal-sms/sms/sendMessage";

    public static String entranceUrl = "http://172.16.100.240:10023/xzzx/";
    public static String entranceUrlLocal = "http://localhost:10023/xzzx/";

    public static String hospitalUrl = "http://192.168.118.240:10022/";//172.16.100.63
    //合理用药接口地址
    public static String checkInfosUrl="http://192.168.102.243:8040/service/api/check.do?tag=1";
    //保存天际处方接口地址
    public static String saveTianJiPrescription = "http://192.168.102.243:8040/service/api/checkFromXmlToJson.do?tag=2";
    //作废处方地址
    public static String deleteTianJiPrescription = "http://192.168.102.243:8040/service/api/checkFromXmlToJson.do?tag=2";
    //药品说明书地址http://192.168.102.243:8221/drugs/@code@?source=dcdt_web&show_navbar=true
    public static String drugUseInfoTianJi = "http://192.168.102.243:8221/drugs/@code@?source=dcdt_web&show_navbar=true";
    public String getSelectUrl(){

        List<WlyyHospitalSysDictDO> list =  wlyyHospitalSysDictDao.findByDictName("hcyyWebSelectService");

        String url = list.get(0).getDictCode();
        return url;
    }

    public String getOperateUrl(){

        List<WlyyHospitalSysDictDO> list =  wlyyHospitalSysDictDao.findByDictName("xzzxWebOperateService");

        String url = list.get(0).getDictCode();
        return url;
    }

    public String getOperateSmsUrl(){

        List<WlyyHospitalSysDictDO> list =  wlyyHospitalSysDictDao.findByDictName("xzzxWebOperateSmsService");

        String url = list.get(0).getDictCode();
        return url;
    }

    public String getWXTokenUrl(){
        WlyyHospitalSysDictDO sysDictDO = wlyyHospitalSysDictDao.findById("getXzToken");
        return sysDictDO.getDictCode();
    }

    public String getXzzxWebServiceInfo(String api, Map<String,String> params,String url)throws Exception{

        logger.info("url"+url);

        List<WlyyHospitalSysDictDO> xzzxNamespaces =  wlyyHospitalSysDictDao.findByDictName("hcyyNamespace");

        String xzzxNamespace = xzzxNamespaces.get(0).getDictCode();

        logger.info("hcyyNamespace",xzzxNamespace);

        return WebserviceUtil.post(url,xzzxNamespace,api,params);
    }

    /**
     * 获取部门信息
     * @return
     */
    public String getDeptInfo(String code)throws Exception{
        String api = "GetDeptInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (StringUtils.isNoneBlank(code)){
            condition = "<code>"+code+"</code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getDeptInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getDeptInfo json:"+json);

        JSONArray depts = JSONArray.parseArray(json).getJSONArray(0);
        if(depts!=null&&depts.size()>0){
            for(int i=0;i<depts.size();i++){
                JSONObject dept = depts.getJSONObject(i);

                String deptCode = dept.getString("code");

                List<DictHospitalDeptDO> list = dictHospitalDeptDao.findByOrgCodeAndCode(deptCode,"350211A5010");

                String consultDeptFlag=null;
                if (!dept.getString("consultDeptFlag").equalsIgnoreCase("[]")){
                    consultDeptFlag = dept.getString("consultDeptFlag");
                }
                if(list!=null&&list.size()>0){
                    DictHospitalDeptDO deptDO = list.get(0);
                    deptDO.setCode(deptCode);
                    deptDO.setName(dept.getString("name"));
                    if (StringUtils.isNoneBlank(consultDeptFlag)){
                        deptDO.setConsultDeptFlag(consultDeptFlag);
                    }
                    deptDO.setCreateTime(new Date());
                    dictHospitalDeptDao.save(deptDO);
                }else {
                    DictHospitalDeptDO deptDO = new DictHospitalDeptDO();
                    deptDO.setCode(deptCode);
                    deptDO.setName(dept.getString("name"));
                    if (StringUtils.isNoneBlank(consultDeptFlag)){
                        deptDO.setConsultDeptFlag(consultDeptFlag);
                    }
                    deptDO.setOrgCode("350211A5022");
                    deptDO.setCreateTime(new Date());
                    dictHospitalDeptDao.save(deptDO);
                }
            }
        }

        return json;
    }


    /**
     * 同步医生信息
     * @return
     */
    public String getDoctorInfo(String idcard)throws Exception{
        String api = "GetDoctorInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (StringUtils.isNoneBlank(idcard)){
            condition = "<Idcard>"+idcard+"</Idcard>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getDoctorInfo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getDoctorInfo json:"+json);

        JSONArray doctors = JSONArray.parseArray(json);
        findWlyyDoctor(doctors);

        return json;
    }

    /**
     * 查询医生信息
     * @return
     */
    public String selectDoctorInfo(String idcard)throws Exception{
        String api = "GetDoctorInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (StringUtils.isNoneBlank(idcard)){
            condition = "<Idcard>"+idcard+"</Idcard>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getDoctorInfo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getDoctorInfo json:"+json);
        return json;
    }

    public String findWlyyDoctor(JSONArray doctors)throws Exception{
        logger.info("doctors size:"+doctors.size());
        if(doctors!=null&&doctors.size()>0){
            Integer count = 0;
            for(int i=0;i<doctors.size();i++){
                try {
                    JSONObject doctorJson = doctors.getJSONObject(i);
                    String idcard = doctorJson.getString("idcard");
                    if(StringUtils.isNotBlank(idcard)) {
                        List<BaseDoctorDO> ds = doctorDao.findByIdcard(idcard);
                        if (ds != null && ds.size() > 0) {
                            //已有账号更新
                            BaseDoctorDO doctor = ds.get(0);
                            doctor.setName(doctorJson.getString("name"));
                            doctor.setIdcard(doctorJson.getString("idcard"));
                            doctor.setMobile(doctorJson.getString("mobile"));
                            doctor.setSex(Integer.parseInt(IdCardUtil.getSexForIdcard_new(idcard)));
                            doctor.setBirthday(IdCardUtil.getBirthdayForIdcard(idcard));
                            doctor.setProvinceCode("350000");
                            doctor.setProvinceName("福建省");
                            doctor.setTownCode("350205");
                            doctor.setTownName("海沧区");
                            doctor.setCityCode("350200");
                            doctor.setCityName("厦门市");
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("expertise"))&&StringUtils.isNoneBlank(doctorJson.getString("expertise"))){
                                doctor.setExpertise(doctorJson.getString("expertise"));
                            }
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("introduce"))&&StringUtils.isNoneBlank(doctorJson.getString("introduce"))){
                                doctor.setIntroduce(doctorJson.getString("introduce"));
                            }
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("photo"))&&StringUtils.isNoneBlank(doctorJson.getString("photo"))){
                                doctor.setPhoto(doctorJson.getString("photo"));
                            }
                            doctor.setIscertified(doctorJson.getString("iscertified"));
                            doctor.setSpell(doctorJson.getString("spell"));
//                                String salt = randomString(5);
//                                String pw = idcard.substring(idcard.length() - 6);
//                                doctor.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
//                                doctor.setSalt(salt);
                            doctor.setJobTitleCode(doctorJson.getString("jobTitleCode"));
                            doctor.setJobTitleName(doctorJson.getString("jobTitleName"));
                            doctor.setChargeType(doctorJson.getString("chargeType"));
                            doctorDao.save(doctor);

                            //更新机构科室信息
                            String dept =doctorJson.getString("dept");
                            if(StringUtils.isNotBlank(dept)){
                                List<BaseDoctorHospitalDO> hospitalDOs = doctorHospitalDao.findByDeptCodeAndDoctorCode(dept,doctor.getId());
                                if(hospitalDOs!=null&&hospitalDOs.size()>0){
                                    BaseDoctorHospitalDO hospitalDO = hospitalDOs.get(0);
                                    hospitalDO.setOrgCode("350211A5022");
                                    hospitalDO.setOrgName("海沧医院");
                                    hospitalDO.setDeptCode(doctorJson.getString("dept"));
                                    hospitalDO.setDeptName(doctorJson.getString("deptName"));
                                    hospitalDO.setDel("1");
                                    doctorHospitalDao.save(hospitalDO);
                                }
                            }
                            List<DoctorMappingDO> doctorMappingDOS = doctorMappingDao.findByOrgCodeAndMappingCode("350211A5010",doctorJson.getString("code"));
                            if (doctorMappingDOS!=null&&doctorMappingDOS.size()!=0){
                                DoctorMappingDO doctorMappingDO = doctorMappingDOS.get(0);
                                doctorMappingDO.setIdcard(idcard);
                                doctorMappingDO.setDoctor(doctor.getId());
                                doctorMappingDO.setOrgCode("350211A5022");
                                doctorMappingDO.setOrgName("海沧医院");
                                doctorMappingDO.setMappingCode(doctorJson.getString("code"));
                                doctorMappingDO.setMappingName(doctorJson.getString("name"));
                                doctorMappingDO.setDoctorName(doctor.getName());
                                doctorMappingDO.setMappingDeptName(doctorJson.getString("deptName"));
                                doctorMappingDO.setMappingDept(doctorJson.getString("dept"));
                                doctorMappingDO.setMappingJob(doctorJson.getString("jobTitleCode"));
                                doctorMappingDO.setMappingJobName(doctorJson.getString("jobTitleName"));
                                doctorMappingDO.setCreateTime(new Date());
                                doctorMappingDao.save(doctorMappingDO);
                            }else{
                                DoctorMappingDO doctorMappingDO = new DoctorMappingDO();
                                doctorMappingDO.setIdcard(idcard);
                                doctorMappingDO.setDoctor(doctor.getId());
                                doctorMappingDO.setOrgCode("350211A5022");
                                doctorMappingDO.setOrgName("海沧医院");
                                doctorMappingDO.setMappingCode(doctorJson.getString("code"));
                                doctorMappingDO.setMappingName(doctorJson.getString("name"));
                                doctorMappingDO.setDoctorName(doctor.getName());
                                doctorMappingDO.setMappingDeptName(doctorJson.getString("deptName"));
                                doctorMappingDO.setMappingDept(doctorJson.getString("dept"));
                                doctorMappingDO.setMappingJob(doctorJson.getString("jobTitleCode"));
                                doctorMappingDO.setMappingJobName(doctorJson.getString("jobTitleName"));
                                doctorMappingDO.setCreateTime(new Date());
                                doctorMappingDao.save(doctorMappingDO);
                            }

                        } else {

                            BaseDoctorDO doctor = new BaseDoctorDO();
                            doctor.setName(doctorJson.getString("name"));
                            doctor.setIdcard(doctorJson.getString("idcard"));
                            doctor.setMobile(doctorJson.getString("mobile"));
                            doctor.setSex(Integer.parseInt(IdCardUtil.getSexForIdcard_new(idcard)));
                            doctor.setBirthday(IdCardUtil.getBirthdayForIdcard(idcard));
                            doctor.setProvinceCode("350000");
                            doctor.setProvinceName("福建省");
                            doctor.setTownCode("350205");
                            doctor.setTownName("海沧区");
                            doctor.setCityCode("350200");
                            doctor.setCityName("厦门市");
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("expertise"))&&StringUtils.isNoneBlank(doctorJson.getString("expertise"))){
                                doctor.setExpertise(doctorJson.getString("expertise"));
                            }
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("introduce"))&&StringUtils.isNoneBlank(doctorJson.getString("introduce"))){
                                doctor.setIntroduce(doctorJson.getString("introduce"));
                            }
                            if (!"[]".equalsIgnoreCase(doctorJson.getString("photo"))&&StringUtils.isNoneBlank(doctorJson.getString("photo"))){
                                doctor.setPhoto(doctorJson.getString("photo"));
                            }
                            doctor.setIscertified(doctorJson.getString("iscertified"));
                            doctor.setSpell(doctorJson.getString("spell"));
                            doctor.setOutpatientType("zj");
                            //认证信息设置
                            String salt = randomString(5);
                            String pw = idcard.substring(idcard.length() - 6);
                            doctor.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
                            doctor.setSalt(salt);
                            doctor.setDel("1");
                            doctor.setEnabled(1);
                            doctor.setLocked(0);
                            doctor.setCreateTime(new Date());
                            doctor.setJobTitleCode(doctorJson.getString("jobTitleCode"));
                            doctor.setJobTitleName(doctorJson.getString("jobTitleName"));

                            BaseDoctorDO temp = doctorDao.save(doctor);

                            //机构信息部门信息
                            BaseDoctorHospitalDO hospitalDO = new BaseDoctorHospitalDO();
                            hospitalDO.setDoctorCode(temp.getId());
                            hospitalDO.setOrgCode("350211A5022");
                            hospitalDO.setOrgName("海沧医院");
                            hospitalDO.setDeptCode(doctorJson.getString("dept"));
                            hospitalDO.setDeptName(doctorJson.getString("deptName"));
                            hospitalDO.setDel("1");
                            doctorHospitalDao.save(hospitalDO);

                            BaseDoctorRoleDO role = new BaseDoctorRoleDO();
                            role.setDoctorCode(temp.getId());
                            role.setRoleCode("specialist");
                            doctorRoleDao.save(role);


                            DoctorMappingDO mappingDO = new DoctorMappingDO();
                            mappingDO.setIdcard(idcard);
                            mappingDO.setDoctor(temp.getId());
                            mappingDO.setOrgCode("350211A5022");
                            mappingDO.setOrgName("海沧医院");
                            mappingDO.setMappingCode(doctorJson.getString("code"));
                            mappingDO.setMappingName(doctorJson.getString("name"));
                            mappingDO.setDoctorName(temp.getName());
                            mappingDO.setMappingDeptName(doctorJson.getString("deptName"));
                            mappingDO.setMappingDept(doctorJson.getString("dept"));
                            mappingDO.setMappingJob(doctorJson.getString("jobTitleCode"));
                            mappingDO.setMappingJobName(doctorJson.getString("jobTitleName"));
                            mappingDO.setCreateTime(new Date());
                            doctorMappingDao.save(mappingDO);
                            count++;
                        }
                    }
                }catch (Exception e){
                    logger.info("data error");
                }
            }
            logger.info("add count:"+count);
        }
        return "ok";
    }

    public String randomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        StringBuffer buffer = new StringBuffer();
        Random random = new Random();

        for(int i = 0; i < length; ++i) {
            int pos = random.nextInt(str.length());
            buffer.append(str.charAt(pos));
        }

        return buffer.toString();
    }

    /**
     * 获取职称字典
     * @return
     */
    public String getJobTitle()throws Exception{
        String api = "GetTitleInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root></root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getJobTitleInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getJobTitleInfo json:"+json);

        JSONArray list = JSONArray.parseArray(json).getJSONArray(0);
        if(list!=null&&list.size()>0){
            for(int i=0;i<list.size();i++){
                JSONObject object = list.getJSONObject(i);
                logger.info("getJobTitleInfo object:"+object.toJSONString());
                String code = object.getString("code");
                String name = object.getString("name");
                DictDoctorDutyDO dictDoctorDutyDO = dictDoctorDutyDao.findByCode(code);
                if (dictDoctorDutyDO!=null){
                    dictDoctorDutyDO.setName(name);
                    dictDoctorDutyDao.save(dictDoctorDutyDO);
                }else {
                    DictDoctorDutyDO dictDoctorDutyDO1 = new DictDoctorDutyDO();
                    dictDoctorDutyDO1.setCode(code);
                    dictDoctorDutyDO1.setName(name);
                    dictDoctorDutyDO1.setCreateTime(new Date());
                    dictDoctorDutyDao.save(dictDoctorDutyDO1);
                }
            }
        }
        return json;
    }

    /**
     * 获取号别字典
     * @return
     */
    public String getChargeDict()throws Exception{
        String api = "GetScheduleType";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root></root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getChargeDictInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getChargeDictInfo json:"+json);

        JSONArray list = JSONArray.parseArray(json).getJSONArray(0);
        if(list!=null&&list.size()>0){
            for(int i=0;i<list.size();i++){
                JSONObject object = list.getJSONObject(i);
                logger.info("getJobTitleInfo object:"+object.toJSONString());
                String code = object.getString("chargeType");
                String name = object.getString("chargeTypeName");
                String reqFee = object.getString("reqFee");
                Double reqFees = 0.0;
                if (StringUtils.isNoneBlank(reqFee)&&!reqFee.equalsIgnoreCase("[]")){
                    reqFees= Double.parseDouble(reqFee);
                }
                WlyyChargeDictDO chargeDictDO = chargeDictDao.findByChargeType(code);
                if (chargeDictDO!=null){
                    chargeDictDO.setChargeType(code);
                    chargeDictDO.setChargeName(name);
                    chargeDictDO.setReqFee(reqFees);
                    chargeDictDao.save(chargeDictDO);
                }else {
                    WlyyChargeDictDO chargeDictDO1 = new WlyyChargeDictDO();
                    chargeDictDO1.setChargeType(code);
                    chargeDictDO1.setChargeName(name);
                    chargeDictDO1.setReqFee(reqFees);
                    chargeDictDO1.setCreateTime(new Date());
                    chargeDictDao.save(chargeDictDO1);
                }
            }
        }
        return json;
    }

    /**
     * 查询患者就诊卡
     * @param
     * @return
     * @throws Exception
     */
    //查询患者就诊卡
    public String findPatientCard(String patient)throws Exception{
        BasePatientDO patientDO = patientDao.findById(patient);
        if (patientDO==null){
            throw new Exception("不存在该患者！");
        }
        String api = "FindPatientCard";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        String idCard = patientDO.getIdcard();
        if (!StringUtils.isEmpty(idCard)){
            condition = "<identity_no>"+idCard+"</identity_no>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("findPatientCard params:"+params.toString());
        wlyyHttpLogDO.setRequest(params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("查询患者就诊卡");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("findPatientCard json:"+json);
        return json;
    }


    /**
     *
     *  获取卡信息
     *
     * @param cardNo 卡号(必填)
     * @return
     * @throws Exception
     */
    //获取卡信息
    public String getCardInfo(String cardNo)throws Exception{
        String api = "GetCardInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(cardNo)){
            condition = "<cardNo>"+cardNo+"</cardNo>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("getCardInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("获取卡信息");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("getCardInfo json:"+json);
        return json;
    }



    /**
     *
     *  发送短信验证码
     *
     * @param json
     * @return
     * @throws Exception
     */
    public String SendSms(String json)throws Exception{
        String api = "SendSms";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(json)){
            JSONObject object = JSONObject.parseObject(json);
            condition = "<content>"+object+"</content>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("SendSms params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateSmsUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String jsonObject = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(jsonObject);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("短信验证码发送");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("SendSms json:"+jsonObject);
        return jsonObject;
    }



    /**
     * 获取单条门诊就诊记录
     * @param patient 居民id
     * @param conNo 就诊次数
     * @return
     * @throws Exception
     */
    //获取单条门诊就诊记录
    public String findOutpatientInfo(String patient,String conNo,String startTime,String endTime)throws Exception{
        String api = "FindOutpatientInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(patient)&&!patient.equalsIgnoreCase("null")){
            condition += "<patient>"+patient+"</patient>";
        }
        if (!StringUtils.isEmpty(conNo)&&!conNo.equalsIgnoreCase("null")){
            condition += "<conNo>"+conNo+"</conNo>";
        }
        if (!StringUtils.isEmpty(startTime)&&!startTime.equalsIgnoreCase("null")){
            condition += "<startTime>"+startTime+"</startTime>";
        }

        if (!StringUtils.isEmpty(endTime)&&!endTime.equalsIgnoreCase("null")){
            condition += "<endTime>"+endTime+"</endTime>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("FindOutpatientInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("FindOutpatientInfo json:"+json);
        return json;
    }


    /**
     * 获取门诊下所有处方信息
     * @param registerSn 流水号(必传)
     * @param patNo 病人id(必传)
     * @param admNo 住院唯一号(必传)
     * @param realOrder 处方号(非必传，传相当于查单条处方)
     * @return
     * @throws Exception
     */
    //获取门诊下所有处方信息
    public String getOriginPrescriptionList(String registerSn,String patNo,String admNo,String realOrder,String startTime,String endTime)throws Exception{
        String api = "GetOriginPrescriptionList";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        logger.info("registerSn"+registerSn+"patNo"+patNo+"admNo"+admNo+"realOrder"+realOrder);
        if (!StringUtils.isEmpty(registerSn)&&!registerSn.equalsIgnoreCase("null")){
            condition += "<registerSn>"+registerSn+"</registerSn>";
        }
        if (!StringUtils.isEmpty(patNo)&&!patNo.equalsIgnoreCase("null")){
            condition += "<patNo>"+patNo+"</patNo>";
        }
        if (!StringUtils.isEmpty(admNo)&&!admNo.equalsIgnoreCase("null")){
            condition += "<admNo>"+admNo+"</admNo>";
        }
        if (!StringUtils.isEmpty(realOrder)&&!realOrder.equalsIgnoreCase("null")){
            condition += "<realOrder>"+realOrder+"</realOrder>";
        }

        if (!StringUtils.isEmpty(startTime)&&!startTime.equalsIgnoreCase("null")){
            condition += "<startTime>"+startTime+"</startTime>";
        }

        if (!StringUtils.isEmpty(endTime)&&!endTime.equalsIgnoreCase("null")){
            condition += "<endTime>"+endTime+"</endTime>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getOriginPrescriptionList params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getOriginPrescriptionList json:"+json);
        return json;
    }


    /**
     * 获取门诊病人诊断
     * @param registerSn
     * @param patNo
     * @param admNo
     * @param realOrder
     * @param startTime
     * @param endTime
     * @return
     * @throws Exception
     */
    public String getOutpatientDiagnosis(String registerSn,String patNo,String admNo,String realOrder,String startTime,String endTime)throws Exception{
        String api = "GetOutpatientDiagnosis";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(registerSn)&&!registerSn.equalsIgnoreCase("null")){
            condition += "<registerSn>"+registerSn+"</registerSn>";
        }
        if (!StringUtils.isEmpty(patNo)&&!patNo.equalsIgnoreCase("null")){
            condition += "<patNo>"+patNo+"</patNo>";
        }
        if (!StringUtils.isEmpty(admNo)&&!admNo.equalsIgnoreCase("null")){
            condition += "<admNo>"+admNo+"</admNo>";
        }
        if (!StringUtils.isEmpty(realOrder)&&!realOrder.equalsIgnoreCase("null")){
            condition += "<realOrder>"+realOrder+"</realOrder>";
        }

        if (!StringUtils.isEmpty(startTime)&&!startTime.equalsIgnoreCase("null")){
            condition += "<startTime>"+startTime+"</startTime>";
        }

        if (!StringUtils.isEmpty(endTime)&&!endTime.equalsIgnoreCase("null")){
            condition += "<endTime>"+endTime+"</endTime>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getOutpatientDiagnosis params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getOutpatientDiagnosis json:"+json);
        return json;
    }


    /**
     * 获取门诊病人处方药品信息
     *
     * @param registerSn
     * @param patNo
     * @param admNo
     * @param realOrder
     * @param startTime
     * @param endTime
     * @return
     * @throws Exception
     */
    public String getOutpatientDrugInfo(String registerSn,String patNo,String admNo,String realOrder,String startTime,String endTime)throws Exception{
        String api = "GetOutpatientDrugInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(registerSn)&&!registerSn.equalsIgnoreCase("null")){
            condition += "<registerSn>"+registerSn+"</registerSn>";
        }
        if (!StringUtils.isEmpty(patNo)&&!patNo.equalsIgnoreCase("null")){
            condition += "<patNo>"+patNo+"</patNo>";
        }
        if (!StringUtils.isEmpty(admNo)&&!admNo.equalsIgnoreCase("null")){
            condition += "<admNo>"+admNo+"</admNo>";
        }
        if (!StringUtils.isEmpty(realOrder)&&!realOrder.equalsIgnoreCase("null")){
            condition += "<realOrder>"+realOrder+"</realOrder>";
        }

        if (!StringUtils.isEmpty(startTime)&&!startTime.equalsIgnoreCase("null")){
            condition += "<startTime>"+startTime+"</startTime>";
        }

        if (!StringUtils.isEmpty(endTime)&&!endTime.equalsIgnoreCase("null")){
            condition += "<endTime>"+endTime+"</endTime>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getOutpatientDrugInfo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getOutpatientDrugInfo json:"+json);
        return json;
    }

    public String getOutpatientCheckTestInfo(String registerSn,String patNo,String admNo,String realOrder,String startTime,String endTime)throws Exception{
        String api = "GetOutpatientCheckTestInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(registerSn)&&!registerSn.equalsIgnoreCase("null")){
            condition += "<registerSn>"+registerSn+"</registerSn>";
        }
        if (!StringUtils.isEmpty(patNo)&&!patNo.equalsIgnoreCase("null")){
            condition += "<patNo>"+patNo+"</patNo>";
        }
        if (!StringUtils.isEmpty(admNo)&&!admNo.equalsIgnoreCase("null")){
            condition += "<admNo>"+admNo+"</admNo>";
        }
        if (!StringUtils.isEmpty(realOrder)&&!realOrder.equalsIgnoreCase("null")){
            condition += "<realOrder>"+realOrder+"</realOrder>";
        }

        if (!StringUtils.isEmpty(startTime)&&!startTime.equalsIgnoreCase("null")){
            condition += "<startTime>"+startTime+"</startTime>";
        }

        if (!StringUtils.isEmpty(endTime)&&!endTime.equalsIgnoreCase("null")){
            condition += "<endTime>"+endTime+"</endTime>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getOutpatientCheckTestInfo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("getOutpatientCheckTestInfo json:"+json);
        return json;
    }


    /**
     * 挂号（调his后台包）
     * @param doctor 医生ID(必填)
     * @param dept 科室编码(必填)
     * @param sickId 病人id
     * @param clinicclass 挂号类别(必填)
     * @return
     * @throws Exception
     */
    //挂号（调his后台包）
    public String registered(String doctor,String dept,String sickId,String clinicclass,String courierflag)throws Exception{
        String api = "Registered";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        logger.info("clinicclass:"+clinicclass);
        if (!StringUtils.isEmpty(doctor)&&!doctor.equalsIgnoreCase("null")){
            condition += "<doctor>"+doctor+"</doctor>";
        }
        if (!StringUtils.isEmpty(dept)&&!dept.equalsIgnoreCase("null")){
            condition +="<dept>"+dept+"</dept>";
        }
        if (!StringUtils.isEmpty(sickId)&&!sickId.equalsIgnoreCase("null")){
            condition += "<sickid>"+sickId+"</sickid>";
        }

        if (!StringUtils.isEmpty(clinicclass)&&!clinicclass.equalsIgnoreCase("null")){
            condition +="<clinicclass>"+clinicclass+"</clinicclass>";
        }

        if (!StringUtils.isEmpty(courierflag)&&!courierflag.equalsIgnoreCase("null")){
            condition +="<courierflag>"+courierflag+"</courierflag>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("registered params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setDoctor(doctor);
        wlyyHttpLogDO.setName("挂号（调his后台包）");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("registered json:"+json);
        return json;
    }

    /**
     * 处方状态变更
     * @param admNo 就诊唯一号(必填)
     * @param realOrder 处方号(必填)
     * @param status 处方状态：3结算完成(必填)
     * @return
     * @throws Exception
     */
    //处方状态变更
    public String updatePrescriptionStatus(String admNo,String realOrder,String status)throws Exception{
        String api = "UpdatePreStatus";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(admNo)){
            condition += "<admNo>"+admNo+"</admNo>";
        }
        if (!StringUtils.isEmpty(realOrder)){
            condition +="<realOrder>"+realOrder+"</realOrder>";
        }
        if (!StringUtils.isEmpty(status)){
            condition += "<status>"+status+"</status>";
        }

        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("updatePreStatus params:"+params.toString());
        String xml = getXzzxWebServiceInfo("UpdatePreStatus",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("updatePreStatus json:"+json);
        return json;
    }


    /**
     *
     *  获取icd10字典
     *
     * @param spellCode spellCode
     * @return
     * @throws Exception
     */
    public String GetICD10Dict(String spellCode)throws Exception{
        String api = "GetICD10Dict";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)){
            condition += "<spell_code>"+spellCode+"</spell_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetICD10Dict params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("GetICD10Dict json:"+json);
        return json;
    }

    /**
     *
     *  获取药品字典
     *
     * @param spellCode spellCode
     * @return
     * @throws Exception
     */
    public String GetDrugDict(String spellCode,String drugNo)throws Exception{
        String api = "GetDrugDict";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)&&!"null".equalsIgnoreCase(spellCode)){
            condition += "<spell_code>"+spellCode+"</spell_code>";
        }
        if (!StringUtils.isEmpty(drugNo)&&!"null".equalsIgnoreCase(drugNo)){
            condition += "<physic_code>"+drugNo+"</physic_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetDrugDict params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("GetDrugDict json:"+json);
        return json;
    }

    /**
     *
     *  查询药品用药方法
     * @return
     * @throws Exception
     */
    public String GetMedicineUsed(String spellCode)throws Exception{
        String api = "GetMedicineUsed";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)){
            condition = "<spell_code>"+spellCode+"</spell_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetMedicineUsed params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("GetMedicineUsed json:"+json);
        return json;
    }

    /**
     *
     *  获取药品用药频次字典
     * @return
     * @throws Exception
     */
    public String GetFrequencyDict()throws Exception{
        String api = "GetFrequencyDict";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetFrequencyDict params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("GetFrequencyDict json:"+json);
        return json;
    }

    /**
     *
     *  获取检查部位字典
     * @return
     * @throws Exception
     */
    public String  GetCheckBody(String spellCode)throws Exception{
        String api = "GetCheckBody";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)){
            condition = "<spell_code>"+spellCode+"</spell_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info(" GetCheckBody params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info(" GetCheckBody json:"+json);
        return json;
    }

    /**
     *
     *  获取检查单据信息
     * @return
     * @throws Exception
     */
    public String GetExamApply(String spellCode)throws Exception{
        String api = "GetExamApply";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)){
            condition = "<spell_code>"+spellCode+"</spell_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetExamApply params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info(" GetExamApply json:"+json);
        return json;
    }

    /**
     *
     *  获取检验单据信息
     * @return
     * @throws Exception
     */
    public String GetLisApply(String spellCode)throws Exception{
        String api = "GetLisApply";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(spellCode)){
            condition = "<spell_code>"+spellCode+"</spell_code>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetLisApply params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info(" GetLisApply json:"+json);
        return json;
    }

    /**
     * 互联网医院开处方信息更新到his
     * @param IoFlag  门诊住院标志
     * @param PayCardNo 就诊卡号
     * @param NullahNumber 挂号流水号
     * @param ApplyDept 执行科室
     * @param ApplyDoctor 开单医生
     * @param ExecuteDept 执行科室(药房)
     * @param prescriptionInfoDOList
     * @return
     * @throws Exception
     */
    public String savePrescriptionToHospital(String IoFlag,String PayCardNo,String NullahNumber,
                                             String ApplyDept,String ApplyDoctor,String ExecuteDept,List<WlyyPrescriptionInfoDO> prescriptionInfoDOList)throws Exception{
        String api = "savePrescriptionToHospital";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(IoFlag)){
            condition += "<IoFlag>"+IoFlag+"</IoFlag>";
        }
        if (!StringUtils.isEmpty(PayCardNo)){
            condition += "<PayCardNo>"+PayCardNo+"</PayCardNo>";
        }
        if (!StringUtils.isEmpty(NullahNumber)){
            condition += "<NullahNumber>"+NullahNumber+"</NullahNumber>";
        }
        if (!StringUtils.isEmpty(ApplyDept)){
            condition += "<ApplyDept>"+ApplyDept+"</ApplyDept>";
        }
        if (!StringUtils.isEmpty(ApplyDoctor)){
            condition += "<ApplyDoctor>"+ApplyDoctor+"</ApplyDoctor>";
        }
        if (!StringUtils.isEmpty(ExecuteDept)){
            condition += "<ExecuteDept>"+ExecuteDept+"</ExecuteDept>";
        }
        condition +="<PresDetail>";
        for (WlyyPrescriptionInfoDO prescriptionInfoDO:prescriptionInfoDOList){
            String condition1 = "";
            condition1 += "<PhysicCode>"+prescriptionInfoDO.getDrugNo()+"</PhysicCode>";
            condition1 += "<Doseage>"+prescriptionInfoDO.getDosage()+"</Doseage>";
            condition1 += "<DoseUnit>"+prescriptionInfoDO.getUnit()+"</DoseUnit>";
            condition1 += "<Frequency>"+prescriptionInfoDO.getUsageCode()+"</Frequency>";
            condition1 += "<DayCount>"+prescriptionInfoDO.getDays()+"</DayCount>";
            condition1 += "<Usage>"+prescriptionInfoDO.getSupplyCode()+"</Usage>";
            condition1 += "<TotalDoseage>"+prescriptionInfoDO.getQuantity()+"</TotalDoseage>";
            condition1 += "<TotalUnit>"+prescriptionInfoDO.getPackUnit()+"</TotalUnit>";
            condition1 += "<PrescribeMemo>"+"</PrescribeMemo>";
            condition1 += "<FryMode>"+"</FryMode>";
            condition1 += "<HerbalTakeMethodClass>"+"</HerbalTakeMethodClass>";
            condition1 += "<HerbalFryMethod>"+"</HerbalFryMethod>";
            condition1 += "<HerbalFryMethod2>"+"</HerbalFryMethod2>";
            condition+="<PresInfo>"+condition1+"</PresInfo>";
        }
        condition+="</PresDetail>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("savePrescriptionToHospital params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setDoctor(ApplyDoctor);
        wlyyHttpLogDO.setName("互联网医院开处方信息更新到his");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info(" savePrescriptionToHospital json:"+json);
        return json;
    }

    /**
     * 互联网医院删除处方信息更新到his
     * @param IoFlag  门诊住院标志
     * @param PayCardNo 就诊卡号
     * @param NullahNumber 挂号流水号
     * @param ApplyDept 执行科室
     * @param ApplyDoctor 开单医生
     * @param ExecuteDept 执行科室(药房)
     * @param PresNo 必填，医嘱号
     * @return
     * @throws Exception
     */
    public String delHisPrescriptionByHisNo(String IoFlag,String PayCardNo,String NullahNumber,
                                             String ApplyDept,String ApplyDoctor,String ExecuteDept,String PresNo)throws Exception{
        String api = "delHisPrescriptionByHisNo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(IoFlag)){
            condition += "<IoFlag>"+IoFlag+"</IoFlag>";
        }
        if (!StringUtils.isEmpty(PayCardNo)){
            condition += "<PayCardNo>"+PayCardNo+"</PayCardNo>";
        }
        if (!StringUtils.isEmpty(ApplyDept)){
            condition += "<ApplyDept>"+ApplyDept+"</ApplyDept>";
        }
        if (!StringUtils.isEmpty(NullahNumber)){
            condition += "<NullahNumber>"+NullahNumber+"</NullahNumber>";
        }
        if (!StringUtils.isEmpty(ApplyDoctor)){
            condition += "<ApplyDoctor>"+ApplyDoctor+"</ApplyDoctor>";
        }
        if (!StringUtils.isEmpty(ExecuteDept)){
            condition += "<ExecuteDept>"+ExecuteDept+"</ExecuteDept>";
        }
        if (!StringUtils.isEmpty(PresNo)){
            condition += "<PresNo>"+PresNo+"</PresNo>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("delHisPrescriptionByHisNo params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("互联网医院删除处方信息更新到his");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("delHisPrescriptionByHisNo json:"+json);
        return json;
    }


    /**
     * 保存入门诊断信息到his
     * @param ApplyNo
     * @param DiagnosisName
     * @param DiagnosisCode
     * @param ChnSymPtomsCode
     * @param ChnSymPtomsName
     * @param ChnDiagnosisCode
     * @param ChnDiagnosisName
     * @return
     * @throws Exception
     */
    public String saveDiagnosis(String ApplyNo,String DiagnosisName,String DiagnosisCode,
                                             String ChnSymPtomsCode,String ChnSymPtomsName,String ChnDiagnosisCode,String ChnDiagnosisName)throws Exception{
        String api = "saveDiagnosis";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(ApplyNo)){
            condition += "<ApplyNo>"+ApplyNo+"</ApplyNo>";
        }
        if (!StringUtils.isEmpty(DiagnosisName)){
            condition += "<DiagnosisName>"+DiagnosisName+"</DiagnosisName>";
        }
        if (!StringUtils.isEmpty(DiagnosisCode)){
            condition += "<DiagnosisCode>"+DiagnosisCode+"</DiagnosisCode>";
        }
        condition+="<ChnSymPtomsCode>"+"</ChnSymPtomsCode>";
        condition+="<ChnSymPtomsName>"+"</ChnSymPtomsName>";
        condition+="<ChnDiagnosisCode>"+"</ChnDiagnosisCode>";
        condition+="<ChnDiagnosisName>"+"</ChnDiagnosisName>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("saveDiagnosis params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("保存入门诊断信息到his");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info(" saveDiagnosis json:"+json);
        return json;
    }


    /**
     * 发送退号信息到his
     * @param ApplyNo
     * @return
     * @throws Exception
     */
    public String refundConsultation(String ApplyNo,String PayCardNo)throws Exception{
        String api = "refundConsultation";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(ApplyNo)){
            condition += "<ApplyNo>"+ApplyNo+"</ApplyNo>";
        }
        if (!StringUtils.isEmpty(PayCardNo)){
            condition += "<PayCardNo>"+PayCardNo+"</PayCardNo>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        wlyyHttpLogDO.setRequest(params.toString());
        logger.info("refundConsultation params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        wlyyHttpLogDO.setResponse(json);
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setName("发送退号信息到his");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        logger.info("refundConsultation json:"+json);
        return json;
    }


    /**
     * 组装检查检验项目参数
     *
     * @param
     * @return
     */
    public String saveInspectToHospital(String IoFlag,String PayCardNo,String NullahNumber,String ApplyDept,String ApplyDoctor,List<WlyyInspectionDO> wlyyInspectionDOS) throws  Exception{
        String api = "saveInspectToHospital";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        condition = "<IoFlag>"+IoFlag+"</IoFlag>";
        StringBuffer inspectionList = new StringBuffer();
        condition += "<PayCardNo>"+PayCardNo+"</PayCardNo>";
        condition += "<NullahNumber>"+NullahNumber+"</NullahNumber>";
        condition += "<ApplyDept>"+ApplyDept+"</ApplyDept>";
        condition += "<ApplyDoctor>"+ApplyDoctor+"</ApplyDoctor>";
        for (WlyyInspectionDO wlyyInspectionDO:wlyyInspectionDOS){
            inspectionList.append("<PresInfo>");
            inspectionList.append("<ClinicCode>"+wlyyInspectionDO.getCode()+"</ClinicCode>");
            inspectionList.append("<ClinicNum>"+wlyyInspectionDO.getQuantity()+"</ClinicNum>");
            inspectionList.append("<ExecuteDept>"+wlyyInspectionDO.getDept()+"</ExecuteDept>");
            inspectionList.append("<CheckResult>"+wlyyInspectionDO.getYwjcResult()+"</CheckResult>");
            inspectionList.append("<CheckPart>"+wlyyInspectionDO.getCheckPart()+"</CheckPart>");
            inspectionList.append("<SickSynptom>"+"临床症状和体征 "+"</SickSynptom>");
            inspectionList.append("<Height>"+"身高"+"</Height>");
            inspectionList.append("<Weight>"+"体重"+"</Weight>");
            inspectionList.append("<SensitiveName>"+"过敏史"+"</SensitiveName>");
            inspectionList.append("<SampleCode>"+"标本类型"+"</SampleCode>");
            inspectionList.append("<ChiefComplaint>"+"主诉"+"</ChiefComplaint>");
            inspectionList.append("<MedicalHistory>"+wlyyInspectionDO.getInformation()+"</MedicalHistory>");
            inspectionList.append("<InspectionPurpose>"+wlyyInspectionDO.getGoal()+"</InspectionPurpose>");
            inspectionList.append("<PastHistory>"+"既往史"+"</PastHistory>");
            inspectionList.append("<LisCheckResult>"+wlyyInspectionDO.getYwjcResult()+"</LisCheckResult>");
            inspectionList.append("<InspectionResult>"+wlyyInspectionDO.getAdresult()+"</InspectionResult>");
            inspectionList.append("<InspectionNotice>"+"注意事项"+"</InspectionNotice>");
            inspectionList.append("<Memo>"+wlyyInspectionDO.getCode()+"</Memo>");
            inspectionList.append("</PresInfo>");
        }
        condition += "<PresDetail>" +inspectionList.toString()+"</PresDetail>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("saveInspectToHospital params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info(" saveInspectToHospital json:"+json);
        return json;

    }
    /*
     *合理用药审核接口入参
     */
    public String checkPrescriptionInfoParam(JSONObject patientAndDoctor,List<WlyyPrescriptionInfoDO> infos,boolean isDelete){
        String checkDoctor="<Doctor POSITION=\""+patientAndDoctor.getString("POSITION")+
                "\" NAME=\""+patientAndDoctor.getString("DOCTOR_NAME")+
                "\" DEPT_CODE=\""+patientAndDoctor.getString("DEPT_CODE")+
                "\" DEPT_NAME=\""+patientAndDoctor.getString("DEPT_NAME")+"\" USER_ID=\""+patientAndDoctor.getString("DOCTOR_ID")+"\" />";
        String checkPatient="<Patient NAME=\""+patientAndDoctor.getString("PATIENT_NAME")+
                "\" ID=\""+patientAndDoctor.getString("PATIENT_ID")+
                "\" VISIT_ID=\"0\" PATIENT_PRES_ID=\""+patientAndDoctor.getString("PATIENT_PRES_ID")+
                "\" BIRTH=\""+patientAndDoctor.getString("BIRTH")+
                "\" HEIGHT=\"\" WEIGHT=\"\" GENDER=\""+patientAndDoctor.getString("GENDER")+
                "\" PREGNANT=\"\" LACT=\"否\" HEPATICAL=\"\" RENAL=\"\" PANCREAS=\"\" ALERGY_DRUGS=\"\" IDENTITY_TYPE=\"\" FEE_TYPE=\""+patientAndDoctor.getString("FEE_TYPE")+
                "\" SCR=\"\" SCR_UNIT=\"\" GESTATION_AGE=\"\" PRETERM_BIRTH=\"\" DRUG_HISTORY=\"\" FAMILY_DISEASE_HISTORY=\"\" GENETIC_DISEASE=\"\" MEDICARE_01=\"\" MEDICARE_02=\"\" MEDICARE_03=\"\" MEDICARE_04=\"\" MEDICARE_05=\"\" />";
        String checkDiagnosises = "<Diagnosises DIAGNOSISES=\""+patientAndDoctor.getString("diagnosises")+"\" >\n" +
                "</Diagnosises>\n";
        StringBuffer stringBuffer = new StringBuffer();
        if(null!=infos&&infos.size()>0){
            for (WlyyPrescriptionInfoDO wlyyPrescriptionInfoDO:infos){
                int i = 1;
                stringBuffer.append("<Advice REPEAT=\"1\" DRUG_LO_NAME=\""+wlyyPrescriptionInfoDO.getDrugName()+
                        "\" DRUG_LO_ID=\""+wlyyPrescriptionInfoDO.getHisCode()+"\" ADMINISTRATION=\""+wlyyPrescriptionInfoDO.getSupplyName()+
                        "\" DOSAGE=\""+wlyyPrescriptionInfoDO.getDosage()+
                        "\" DOSAGE_UNIT=\""+wlyyPrescriptionInfoDO.getUnitName()+
                        "\" FREQ_COUNT=\""+wlyyPrescriptionInfoDO.getUsageCode()+
                        "\" FREQ_INTERVAL=\"\" FREQ_INTERVAL_UNIT=\"\" START_DAY=\""+patientAndDoctor.getString("CREATE_DATE")+"\" END_DAY=\"\"" +
                        " DEPT_CODE=\""+patientAndDoctor.getString("DEPT_CODE")+"\" DOCTOR_NAME=\""+patientAndDoctor.getString("DOCTOR_NAME")+
                        "\" ORDER_NO=\""+i+
                        "\" ORDER_SUB_NO=\""+1+"\" AUTHORITY_LEVELS=\"\" ALERT_LEVELS=\"\" TITLE=\""+patientAndDoctor.getString("POSITION") +
                        "\" GROUP_ID=\""+i+"\" USER_ID=\""+patientAndDoctor.getString("DOCTOR_ID")+
                        "\" PRES_ID=\""+patientAndDoctor.getString("PATIENT_PRES_ID")+
                        "\" PRES_DATE=\""+patientAndDoctor.getString("CREATE_DATE")+
                        "\" PRES_SEQ_ID=\""+patientAndDoctor.getString("PATIENT_PRES_ID")+
                        "\" PK_ORDER_NO=\"\" COURSE=\""+wlyyPrescriptionInfoDO.getDays()+
                        "\" PKG_COUNT=\""+wlyyPrescriptionInfoDO.getPackQuantity()+
                        "\" PKG_UNIT=\""+wlyyPrescriptionInfoDO.getPackUnitName()+"\" BAK_01=\"\" BAK_02=\"\" BAK_03=\""+wlyyPrescriptionInfoDO.getUnitName()+
                        "\" BAK_04=\""+wlyyPrescriptionInfoDO.getSpecification()+
                        "\" BAK_05=\""+wlyyPrescriptionInfoDO.getDrugPlace()+"\"  />");
                i++;
            }
        }
        String checkInfos = "<Advices></Advices>";
        if (!isDelete){
            checkInfos= "<Advices>"+stringBuffer.toString()+"</Advices>";
        }
        String postBody = "<CheckInput TAG=\"2\" INPATIENT=\"否\">"+checkDoctor+checkPatient+checkDiagnosises+checkInfos+"</CheckInput>";
        return postBody;
    }
    /*
     *合理用药审核接口
     */
    public String checkPrescription(JSONObject patientAndDoctor,List<WlyyPrescriptionInfoDO> infos) throws Exception{
        String postBody = checkPrescriptionInfoParam(patientAndDoctor,infos,false);
        logger.info("发送的报文参数："+postBody);
        String res =  httpClientUtil.sendPost(checkInfosUrl,postBody);
        logger.info("返回的报文参数："+res);
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        wlyyHttpLogDO.setDoctor(patientAndDoctor.getString("doctorId"));
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setRequest(postBody);
        wlyyHttpLogDO.setName("合理用药审核接口");
        wlyyHttpLogDO.setResponse(res);
        return  res;
    }
    /*
     *合理用药保存接口
     */
    public String saveCheckPrescription(JSONObject patientAndDoctor,List<WlyyPrescriptionInfoDO> infos) throws Exception{
        String postBody = checkPrescriptionInfoParam(patientAndDoctor,infos,false);
        logger.info("保存处方的报文参数："+postBody);
        String res =  httpClientUtil.sendPost(saveTianJiPrescription,postBody);
        logger.info("保存处方的报文参数："+res);
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        wlyyHttpLogDO.setDoctor(patientAndDoctor.getString("doctorId"));
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setRequest(postBody);
        wlyyHttpLogDO.setName("合理用药保存接口");
        wlyyHttpLogDO.setResponse(res);
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        return  res;
    }
    /*
     *合理用药作废接口
     */
    public String deleteCheckPrescription(JSONObject patientAndDoctor,List<WlyyPrescriptionInfoDO> infos) throws Exception{
        String postBody = checkPrescriptionInfoParam(patientAndDoctor,infos,true);
        logger.info("作废的报文参数："+postBody);
        logger.info("deleteTianJiPrescription:"+deleteTianJiPrescription);
        String res =  httpClientUtil.sendPost(deleteTianJiPrescription,postBody);
        logger.info("作废的报文参数："+res);
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        wlyyHttpLogDO.setDoctor(patientAndDoctor.getString("doctorId"));
        wlyyHttpLogDO.setCreateTime(new Date());
        wlyyHttpLogDO.setRequest(postBody);
        wlyyHttpLogDO.setResponse(res);
        wlyyHttpLogDO.setName("合理用药作废接口");
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        return  res;
    }
    public List<Map<String,Object>> transXmlCommen(String xml){
        Document doc = null;
        List<Map<String,Object>> returnMap= new ArrayList<>();
        try {
            doc = (new Builder()).build(new StringReader(xml));
            Element root = doc.getRootElement();
            Elements elements = root.getChildElements();
            for (int i=0;i<elements.size();i++){
               Map<String,Object> personInfoMap = new HashMap<>();
                Element personInfo = elements.get(i);
                for (int j=0;j<personInfo.getAttributeCount();j++){
                    Attribute attribute = personInfo.getAttribute(j);
                    personInfoMap.put(attribute.getLocalName(),attribute.getValue());
                }
                List<Map<String,Object>> checkInfoMapList= new ArrayList<>();
                if (personInfo.getChildElements().size()>0){
                    Elements checkInfos = personInfo.getChildElements();
                    for(int ci=0;ci<checkInfos.size();ci++){
                        Element checkInfo = checkInfos.get(ci);
                        Map<String,Object> checkInfoMap = new HashMap<>();
                        for (int n = 0;n<checkInfo.getAttributeCount();n++){
                            Attribute attribute2 = checkInfo.getAttribute(n);
                            checkInfoMap.put(attribute2.getLocalName(),attribute2.getValue());
                        }
                        checkInfoMapList.add(checkInfoMap);
                    }
                }
                personInfoMap.put("checkInfoMapList",checkInfoMapList);
                returnMap.add(personInfoMap);
            }
        } catch (ParsingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
      return returnMap;
    }
    public  List<PersonInfoVO>  transXml(String xml) throws  Exception {
        Document doc = (new Builder()).build(new StringReader(xml));
        Element root = doc.getRootElement();
        Elements presInfos = root.getChildElements("PresInfo");
        List<PersonInfoVO> personInfoVOS = new ArrayList<>();
        for (int i=0;i<presInfos.size();i++){
            PersonInfoVO personInfoVO = new PersonInfoVO();
            List<CheckInfoVO> checkInfoVOS = new ArrayList<>();
            Element presInfo  = presInfos.get(i);
            personInfoVO.setDrugLoId(presInfo.getAttributeValue("DRUG_LO_ID"));
            personInfoVO.setDrugLoName(presInfo.getAttributeValue("DRUG_LO_NAME"));
            personInfoVO.setOrderId(presInfo.getAttributeValue("ORDER_ID"));
            personInfoVO.setOrderSubId(presInfo.getAttributeValue("ORDER_SUB_ID"));
            Elements checkinfos  = presInfo.getChildElements();
            if (checkinfos.size()>0){
                for (int j=0;j<checkinfos.size();j++){
                    CheckInfoVO checkInfoVO = new CheckInfoVO();
                    Element checkinfo = checkinfos.get(j);
                    checkInfoVO.setColor(checkinfo.getAttributeValue("COLOR"));
                    checkInfoVO.setName(checkinfo.getAttributeValue("NAME"));
                    checkInfoVO.setRefResource(checkinfo.getAttributeValue("REF_SOURCE"));
                    checkInfoVO.setWarningInfo(checkinfo.getAttributeValue("WARNING_INFO"));
                    checkInfoVO.setWarningLevel(checkinfo.getAttributeValue("WARNING_LEVEL"));
                    checkInfoVOS.add(checkInfoVO);
                }
                personInfoVO.setCheckInfoVOS(checkInfoVOS);
            }
            personInfoVOS.add(personInfoVO);
        }
        return personInfoVOS;
    }
    public String replaceHtml(String demoData,String oldChar,String newChar){
        return demoData.replace(oldChar,null==newChar?"无":newChar);
    }
    /**
     * 同步门诊病历
     * @return
     */
    public String returnEmrHtmlByHLW(JSONObject jsonObject,WlyyPrescriptionEmrDO prescriptionEmrDO)throws Exception{
        String api = "returnEmrHtmlByHLW";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        String htmlDeo = "";
        if (null!=prescriptionEmrDO){
            WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("EMRHTMLDEMO");
            if (null!=wlyyHospitalSysDictDO){
                htmlDeo = wlyyHospitalSysDictDO.getDictValue();
                htmlDeo = replaceHtml(htmlDeo,"@patientName@",jsonObject.getString("patientName"));
                htmlDeo = replaceHtml(htmlDeo,"@patientAge@",jsonObject.getString("patientAge"));
                htmlDeo = replaceHtml(htmlDeo,"@patientsex@",jsonObject.getString("patientsex"));
                htmlDeo = replaceHtml(htmlDeo,"@deptCode@",jsonObject.getString("deptCode"));
                htmlDeo = replaceHtml(htmlDeo,"@baseSign@",jsonObject.getString("baseSign"));
                htmlDeo = replaceHtml(htmlDeo,"@r+outpatientCode@",jsonObject.getString("outpatientCode"));
                htmlDeo = replaceHtml(htmlDeo,"@patientClan@",jsonObject.getString("patientClan"));
                htmlDeo = replaceHtml(htmlDeo,"@Special@",prescriptionEmrDO.getSpecialHistory());
                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                htmlDeo = replaceHtml(htmlDeo,"@createTime@",sf.format(prescriptionEmrDO.getCreateTime()));
                htmlDeo = replaceHtml(htmlDeo,"@complaint@",prescriptionEmrDO.getComplaint());
                htmlDeo = replaceHtml(htmlDeo,"@medicalHistory@",prescriptionEmrDO.getMedicalHistory());
                htmlDeo = replaceHtml(htmlDeo,"@popularHistory@",prescriptionEmrDO.getPopularHistory());
                htmlDeo = replaceHtml(htmlDeo,"@pastHistory@",prescriptionEmrDO.getPastHistory());
                htmlDeo = replaceHtml(htmlDeo,"@allergicHistory@",prescriptionEmrDO.getAllergicHistory());
                htmlDeo = replaceHtml(htmlDeo,"@physicalExamination@",prescriptionEmrDO.getPhysicalExamination());
                htmlDeo = replaceHtml(htmlDeo,"@assistExamination@",prescriptionEmrDO.getAssistExamination());
                condition+="<content>"+htmlDeo+"</content>";
            }
        }
        if ( null!=jsonObject.get("patientid")) {
            condition+="<patientid>"+jsonObject.getString("patientid")+"</patientid>";
        }
        if ( null!=jsonObject.get("eventno")) {
            condition+="<eventno>"+jsonObject.getString("eventno")+"</eventno>";
        }
        if ( null!=jsonObject.get("type")) {
            condition+="<type>"+jsonObject.getString("type")+"</type>";
        }
        if ( null!=jsonObject.get("templateid")) {
            condition+="<templateid>"+jsonObject.getString("templateid")+"</templateid>";
        }
        if ( null!=jsonObject.get("emrtitle")) {
            condition+="<emrtitle>"+jsonObject.getString("emrtitle")+"</emrtitle>";
        }
        if (null!=jsonObject.get("catalogid")){
            condition += "<catalogid>"+jsonObject.getString("catalogid")+"</catalogid>";
        }
        if (null!=jsonObject.get("operatorname")){
            condition += "<operatorname>"+jsonObject.getString("operatorname")+"</operatorname>";
        }
        if (null!=jsonObject.get("operatorid")){
            condition += "<operatorid>"+jsonObject.getString("operatorid")+"</operatorid>";
        }
        if (null!=jsonObject.get("emrtype")){
            condition += "<emrtype>"+jsonObject.getString("emrtype")+"</emrtype>";
        }
        if (null!=jsonObject.get("id")){
            condition += "<id>"+jsonObject.getString("id")+"</id>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";
        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        wlyyHttpLogDO.setRequest(msgBody);
        wlyyHttpLogDO.setName("保存电子病历");
        wlyyHttpLogDO.setCreateTime(new Date());
        logger.info("returnEmrHtmlByHLW params:"+params.toString());
        String xml = getXzzxWebServiceInfo("CallInterface",params,getOperateUrl());
        logger.info("returnEmrHtmlByHLW json:"+xml);
        wlyyHttpLogDO.setResponse(xml);

        return xml;
    }
    /**
     *
     *  获取历史病历
     *
     * @param patientId
     * @param eventNo
     * @return
     * @throws Exception
     */
    public String SelectEmrInfo(String patientId,String eventNo)throws Exception{
        String api = "SelectEmrInfo";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(patientId)){
            condition += "<patientId>"+patientId+"</patientId>";
        }
        if (StringUtils.isNotBlank(eventNo)&&!"null".equalsIgnoreCase(eventNo)){
            condition += "<eventNo>"+eventNo+"</eventNo>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("SelectEmrInfo params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        logger.info("SelectEmrInfo json:"+json);
        return json;
    }
    /**
     *
     *  获取历史病历
     *
     * @param patientId
     * @param eventNo
     * @return
     * @throws Exception
     */
    public String SelectEmrDispRecord(String templateId,String patientId,String eventNo)throws Exception{
        String api = "SelectEmrDispRecord";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(templateId)){
            condition += "<template_id>"+templateId+"</template_id>";
        }
        if (!StringUtils.isEmpty(patientId)){
            condition += "<patientId>"+patientId+"</patientId>";
        }
        if (!StringUtils.isEmpty(eventNo)){
            condition += "<eventNo>"+eventNo+"</eventNo>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("SelectEmrDispRecord params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

       /* XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();*/
        logger.info("SelectEmrDispRecord json:"+xml);
        return xml;
    }

    /**
     *
     *  查询病历文书列表
     *
     * @param patientId
     * @param eventNo
     * @return
     * @throws Exception
     */
    public String GetEMRList(String patientId,String eventNo)throws Exception{
        String api = "GetEMRList";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(patientId)){
            condition += "<patientId>"+patientId+"</patientId>";
        }
        if (!StringUtils.isEmpty(eventNo)){
            condition += "<eventNo>"+eventNo+"</eventNo>";
        }
        condition +="<lngCatalogID>50</lngCatalogID>";
        condition +="<lngEMRType>93</lngEMRType>";
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("GetEMRList params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

       /* XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();*/
        logger.info("GetEMRList json:"+xml);
        return xml;
    }

    /**
     *
     *  查询病历文书列表
     *
     * @return
     * @throws Exception
     */
    public String BrowseSingleEMR(String bstrEmrID)throws Exception{
        String api = "BrowseSingleEMR";
        String msgHeader ="<?xml version=\"1.0\" encoding=\"utf-8\"?> " +
                "<root> " +
                "   <serverName>"+api+"</serverName>  " +
                "   <format>xml</format>" +
                "   <callOperator></callOperator> " +
                "   <certificate>"+key+"</certificate> " +
                "</root>";
        String condition ="";
        if (!StringUtils.isEmpty(bstrEmrID)){
            condition += "<bstrEmrID>"+bstrEmrID+"</bstrEmrID>";
        }
        String msgBody ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>"+condition+"</root>";

        Map<String,String> params = new HashedMap();
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("BrowseSingleEMR params:"+params.toString());

        String xml = getXzzxWebServiceInfo("CallInterface",params,getSelectUrl());

      /*  XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();*/
        logger.info("BrowseSingleEMR json:"+xml);
        return xml;
    }
//=====================微信模板消息推送===================================

    public String sendMes(String wxId,String patient,String cardNo,String first,String noticeContent,String remark,String redirectUrl){
        JSONObject params = new JSONObject();
        params.put("transType","sms.hospital.notice");
        params.put("merchId","3501000014");
        JSONObject p = new JSONObject();
        String openId = "";
        if(StringUtils.isNotBlank(patient)){
            List<BasePatientWechatDo> paientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient);
            if(paientWechatDos!=null&&paientWechatDos.size()>0){
                openId = paientWechatDos.get(0).getOpenid();
                p.put("openId",openId);
            }
        }else {
            p.put("cardNo",cardNo);

        }
        p.put("first",first);
        p.put("noticeTime", DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
        p.put("noticeContent",noticeContent);
        if(StringUtils.isNotBlank(redirectUrl)){
            p.put("redirectUrl",redirectUrl);
        }
        p.put("remark",remark);
        params.put("param",p);

        logger.info("params :"+params.toString());

        if(StringUtils.isNotBlank(openId)||StringUtils.isNotBlank(cardNo)){
            String rs = HttpUtil.sendPost(sendMessageUrl,params.toJSONString());
            logger.info("rs :"+rs);
            JSONObject rsJson = JSON.parseObject(rs);
            String resCode = rsJson.getString("respCode");
            if("000000".equals(resCode)){
                return "1";
            }
            return "0";
        }else {
            return "-1";
        }
    }

    public String sendXCXMes(String wxId,String patient,String cardNo,String first,String noticeContent,String remark,String miniProgramPagepath,String miniProgramAppId){
        JSONObject params = new JSONObject();
        params.put("transType","sms.hospital.notice");
        params.put("merchId","3501000014");
        params.put("miniProgramPagepath",miniProgramPagepath);
        params.put("miniProgramAppId",miniProgramAppId);
        JSONObject p = new JSONObject();
        String openId = "";
        if(StringUtils.isNotBlank(patient)){
            List<BasePatientWechatDo> paientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient);
            if(paientWechatDos!=null&&paientWechatDos.size()>0){
                openId = paientWechatDos.get(0).getOpenid();
                p.put("openId",openId);
            }
        }else {
            p.put("cardNo",cardNo);

        }
        p.put("first",first);
        p.put("noticeTime", DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
        p.put("noticeContent",noticeContent);

        p.put("remark",remark);
        params.put("param",p);

        logger.info("params :"+params.toString());

        if(StringUtils.isNotBlank(openId)||StringUtils.isNotBlank(cardNo)){
            String rs = HttpUtil.sendPost(sendMessageUrl,params.toJSONString());
            logger.info("rs :"+rs);
            JSONObject rsJson = JSON.parseObject(rs);
            String resCode = rsJson.getString("respCode");
            if("000000".equals(resCode)){
                return "1";
            }
            return "0";
        }else {
            return "-1";
        }
    }

    /**
     * 获取心脏医院token
     * @return
     * @throws Exception
     */
    public String getXzToken() throws Exception{
        String url =getWXTokenUrl();
        JSONObject params = new JSONObject();
        params.put("appId","1BQ08T2R60006501A8C00000BE73319D");
        params.put("encryptType","DES");
        params.put("sign","58E40DCEA527333B9E7C3CCD1A08979F");
        params.put("signType","MD5");
        params.put("timestamp",new Date().getTime());
        params.put("version","v.1.0.0");
        params.put("serviceId","ext.user.getTokenByMerchId");
        JSONObject p = new JSONObject();
        p.put("medicalId","3501000014");
        params.put("param",p);
        String path = url+"hospitalPortal-ext-app/ext/app/unifyapi";
        String rs = HttpUtil.sendPost(path,params.toJSONString());
        logger.info("rs ："+rs);
        JSONObject rsJson = JSON.parseObject(rs);
        String tokenAES = rsJson.getJSONObject("param").getString("token");
        String token = AES.decrypt("xm_xxg_zxzx", tokenAES);
        return token;
    }

    /**
     * 获取心脏医院token
     * @return
     * @throws Exception
     */
    public String getHcToken() throws Exception{
        String rs = HttpUtil.sendGet("https://wx.xmhcyy.com/weixin/100123/WXXMHC01/getToken.do");
        logger.info("rs ："+rs);
        return rs;
    }


    public String ehospitalNotice(String userName, String idCard, String phone, String title, String url, String content, String contentString) {
        logger.info("ehospitalNotice:");
        BasePatientDO patientDO = patientDao.findByIdcardAndDel(idCard,"1");
        if(patientDO!=null&&StringUtils.isNotBlank(patientDO.getIdcard())){
            sendMes("xm_xzzx_wx",patientDO.getId(),null,content,contentString,"",url);
        }
        return "-2";
    }




//=====================微信模板消息推送接口================================


//=====================hospital应用调用entrance应用============start=================

    /**
     * 查询患者就诊卡
     * @param patient 居民code
     * @return
     */
    public JSONArray selectPateintCard(String patient) throws Exception {
        BasePatientDO patientDO = patientDao.findById(patient);
        String idCard = "";
        if (patientDO==null||StringUtil.isBlank(patientDO.getIdcard())){
            throw new Exception("居民身份证不存在");
        }else {
            idCard = patientDO.getIdcard();
        }
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        String response="";
        String url = entranceUrl+"findPatientCard?idCard="+idCard;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                String cardType = jsonObject.getString("CARD_TYPE");
                WlyyHospitalSysDictDO hospitalSysDictDO = wlyyHospitalSysDictDao.findByHospitalAndDictCode("350211A5010",jsonObject.getString("CARD_TYPE"));
                if (hospitalSysDictDO!=null){
                    jsonObject.put("CARD_TYPE",hospitalSysDictDO.getDictValue());
                    jsonObject.put("CARD_TYPE_HIS",cardType);
                }else {
                    jsonObject.put("CARD_TYPE",null);
                    jsonObject.put("CARD_TYPE_HIS",cardType);
                }
            }
            /*if (array!=null&&array.size()!=0){
                JSONObject object1 = array.getJSONObject(0);
                if (patientMappingDO==null){
                    patientMappingDO = new PatientMappingDO();
                    patientMappingDO.setIdcard(patientDO.getIdcard());
                    patientMappingDO.setPatientName(patientDO.getName());
                    patientMappingDO.setPatient(patientDO.getId());
                    patientMappingDO.setCreateTime(new Date());
                    patientMappingDO.setSource("1");
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }else {
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }
                patientMappingDao.save(patientMappingDO);
            }*/
            return array;
        }
        return null;
    }
    /**
     * 查询患者就诊卡
     * @param idCard 居民code
     * @return
     */
    public JSONArray selectPateintCardByIdCard(String idCard) throws Exception {
        String response="";
        String url = entranceUrl+"findPatientCard?idCard="+idCard;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            /*if (array!=null&&array.size()!=0){
                JSONObject object1 = array.getJSONObject(0);
                if (patientMappingDO==null){
                    patientMappingDO = new PatientMappingDO();
                    patientMappingDO.setIdcard(patientDO.getIdcard());
                    patientMappingDO.setPatientName(patientDO.getName());
                    patientMappingDO.setPatient(patientDO.getId());
                    patientMappingDO.setCreateTime(new Date());
                    patientMappingDO.setSource("1");
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }else {
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }
                patientMappingDao.save(patientMappingDO);
            }*/
            return array;
        }
        return null;
    }


    /**
     * 同步医生信息
     * @return
     * @throws Exception
     */
    public Integer syncDoctorInfo() throws Exception {
        String response="";
        String idCard="";
        String url = entranceUrl+"getDoctorInfo?idCard="+idCard;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
        }
        return object.getInteger("status");
    }


    /**
     * 同步部门信息
     * @return
     * @throws Exception
     */
    public Integer syncDeptInfo() throws Exception {
        String response="";
        String code="";
        String url = entranceUrl+"getDeptInfo?code="+code;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
        }
        return object.getInteger("status");
    }


    /**
     * 同步职称
     * @return
     * @throws Exception
     */
    public Integer syncJobTitle() throws Exception {
        String response="";
        String url = entranceUrl+"getJobTitle";
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
        }
        return object.getInteger("status");
    }

    /**
     * 同步号别
     * @return
     * @throws Exception
     */
    public Integer syncChargeDict() throws Exception {
        String response="";
        String url = entranceUrl+"getChargeDict";
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
        }
        return object.getInteger("status");
    }










    /**
     * 获取卡信息
     * @param cardNo 就诊卡
     * @return
     */
    public JSONObject selectCardInfo(String cardNo){
        JSONArray array = new JSONArray();
        String response="";
        String url = entranceUrl+"getCardInfo?cardNo="+cardNo;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONObject jsonObject = new JSONObject();
        if (object.getInteger("status")==200){
            array = JSONArray.parseArray(object.getString("obj")).getJSONArray(0);
            if (array!=null&&array.size()!=0){
                jsonObject = array.getJSONObject(0);
            }
        }
        return jsonObject;
    }
    public String savePatientMapping(String patient){
        BasePatientDO patientDO = patientDao.findById(patient);
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        String response="";
        String idCard = patientDO.getIdcard();
        String url = entranceUrl+"findPatientCard?idCard="+idCard;
        String mappingCode="";
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            if (array!=null&&array.size()!=0){
                JSONObject object1 = array.getJSONObject(0);
                if (patientMappingDO==null){
                    patientMappingDO = new PatientMappingDO();
                    patientMappingDO.setIdcard(patientDO.getIdcard());
                    patientMappingDO.setPatientName(patientDO.getName());
                    patientMappingDO.setPatient(patientDO.getId());
                    patientMappingDO.setCreateTime(new Date());
                    patientMappingDO.setSource("1");
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }else {
                    patientMappingDO.setMappingCode(object1.getString("SICKID"));
                }
                mappingCode=object1.getString("SICKID");
                patientMappingDO = patientMappingDao.save(patientMappingDO);
            }
        }
        return mappingCode;
    }
    public String updatePatientMapping(String patient,String cardNo){
        BasePatientDO patientDO = patientDao.findById(patient);
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        String response="";
        String idCard = patientDO.getIdcard();
        String url = entranceUrl+"findPatientCard?idCard="+idCard;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject object1 = array.getJSONObject(i);
                logger.info("判断卡号是否相同："+object1.getString("CARD_NO")+"cardNo:"+cardNo);
                if (object1.getString("CARD_NO").equalsIgnoreCase(cardNo)){
                    logger.info("卡号相同");
                    if (patientMappingDO==null){
                        patientMappingDO = new PatientMappingDO();
                        patientMappingDO.setIdcard(patientDO.getIdcard());
                        patientMappingDO.setPatientName(patientDO.getName());
                        patientMappingDO.setPatient(patientDO.getId());
                        patientMappingDO.setCreateTime(new Date());
                        patientMappingDO.setSource("1");
                        patientMappingDO.setMappingCode(object1.getString("SICKID"));
                    }else {
                        patientMappingDO.setMappingCode(object1.getString("SICKID"));
                    }
                    patientMappingDO = patientMappingDao.save(patientMappingDO);
                }

            }
        }
        return patientMappingDO.getMappingCode();
    }

    /**
     * 获取门诊就诊记录列表
     * @param patient 居民id
     * @return
     */
    public List<WlyyOutpatientVO> selectOutpatientList(String patient,String startTime,String endTime,String cardNo) throws Exception {
        List<WlyyOutpatientVO> wlyyOutpatientVOList = new ArrayList<>();
        JSONArray array = new JSONArray();
        String response="";
        patient = updatePatientMapping(patient,cardNo);
        String url = entranceUrl+"findOutpatientInfo?patient="+patient+"&startTime="+startTime+"&endTime="+endTime;
        response = httpClientUtil.get(url,"GBK");
        logger.info("response:"+response);
        JSONObject jsonObject = JSONObject.parseObject(response);
        if (jsonObject.getInteger("status")==200){
            array = JSONArray.parseArray(jsonObject.getString("obj")).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject object = array.getJSONObject(i);
                WlyyOutpatientVO outpatientVO = new WlyyOutpatientVO();
                outpatientVO.setAdmNo(isEmty(object.getString("ADMNO")));
                outpatientVO.setOriginAdmNo(isEmty(object.getString("ORIGINADMNO")));
                outpatientVO.setRegisterNo(isEmty(object.getString("REGISTERNO")));
                outpatientVO.setOriginRegisterNo(isEmty(object.getString("ORIGINREGISTERNO")));
                outpatientVO.setDept(isEmty(object.getString("DEPT")));
                outpatientVO.setDeptName(isEmty(object.getString("DEPTNAME")));
                outpatientVO.setPatient(isEmty(object.getString("PATIENT")));
                outpatientVO.setPatientName(isEmty(object.getString("PATIENTNAME")));
                outpatientVO.setDoctor(isEmty(object.getString("DOCTOR")));
                outpatientVO.setDoctorName(isEmty(object.getString("DOCTORNAME")));
                outpatientVO.setIdcard(isEmty(object.getString("IDCARD")));
                outpatientVO.setMjz(isEmty(object.getString("MJZ")));
                outpatientVO.setIcd10(isEmty(object.getString("ICDCODE")));
                outpatientVO.setIcd10Name(isEmty(object.getString("ICDNAME")));
                outpatientVO.setAdmDate(DateUtil.strToDate(object.getString("ADMDATE")));
                outpatientVO.setConDate(DateUtil.strToDate(object.getString("CONDATE")));
                outpatientVO.setDescription(isEmty(object.getString("DESCRIPTION")));
                outpatientVO.setDiseaseImg(isEmty(object.getString("DISEASEIMG")));
                outpatientVO.setCreateTime(DateUtil.strToDate(object.getString("CREATETIME")));
                outpatientVO.setStatus(isEmty(object.getString("STATUS")));
                outpatientVO.setConNo(isEmty(object.getString("VISITNUM")));
                outpatientVO.setPatient(patient);
                wlyyOutpatientVOList.add(outpatientVO);
            }
        }
        return wlyyOutpatientVOList;
    }

    /**
     * 获取单条门诊就诊记录
     * @param patient 居民id
     * @param conNo 就诊次数
     * @return
     */
    public WlyyOutpatientVO selectOutpatientInfo(String patient,String conNo){
        WlyyOutpatientVO outpatientVO = new WlyyOutpatientVO();
        JSONArray array = new JSONArray();
        String response="";
        BasePatientDO patientDO = patientDao.findById(patient);
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        if (patientMappingDO!=null){
            patient = patientMappingDO.getMappingCode();
        }else {
            patient = savePatientMapping(patient);
        }
        String url = entranceUrl+"findOutpatientInfo?patient="+patient+"&conNo="+conNo;
        response = httpClientUtil.get(url,"GBK");
        logger.info("response:"+response);
        JSONObject jsonObject = JSONObject.parseObject(response);
        if (jsonObject.getInteger("status")==200){
            array = JSONArray.parseArray(jsonObject.getString("obj")).getJSONArray(0);
            if (array!=null&&array.size()!=0){
                JSONObject object = array.getJSONObject(0);
                outpatientVO.setAdmNo(isEmty(object.getString("ADMNO")));
                outpatientVO.setOriginAdmNo(isEmty(object.getString("ORIGINADMNO")));
                outpatientVO.setRegisterNo(isEmty(object.getString("REGISTERNO")));
                outpatientVO.setOriginRegisterNo(isEmty(object.getString("ORIGINREGISTERNO")));
                outpatientVO.setDept(isEmty(object.getString("DEPT")));
                outpatientVO.setDeptName(isEmty(object.getString("DEPTNAME")));
                outpatientVO.setPatientName(isEmty(object.getString("PATIENTNAME")));
                outpatientVO.setDoctor(isEmty(object.getString("DOCTOR")));
                outpatientVO.setDoctorName(isEmty(object.getString("DOCTORNAME")));
                outpatientVO.setIdcard(isEmty(object.getString("IDCARD")));
                outpatientVO.setMjz(isEmty(object.getString("MJZ")));
                outpatientVO.setIcd10(isEmty(object.getString("ICDCODE")));
                outpatientVO.setIcd10Name(isEmty(object.getString("ICDNAME")));
                outpatientVO.setAdmDate(DateUtil.strToDate(object.getString("ADMDATE")));
                outpatientVO.setConDate(DateUtil.strToDate(object.getString("CONDATE")));
                outpatientVO.setDescription(isEmty(object.getString("DESCRIPTION")));
                outpatientVO.setDiseaseImg(isEmty(object.getString("DISEASEIMG")));
                outpatientVO.setCreateTime(DateUtil.strToDate(object.getString("CREATETIME")));
                outpatientVO.setStatus(isEmty(object.getString("STATUS")));
                outpatientVO.setConNo(isEmty(object.getString("VISITNUM")));
                outpatientVO.setHospitalName("厦门大学附属心血管病医院");
                outpatientVO.setHospital("350211A5010");
                outpatientVO.setSex(patientDO.getSex()+"");
                outpatientVO.setPatient(patientDO.getId());
                outpatientVO.setBirthday(patientDO.getBirthday());
            }
        }
        return outpatientVO;
    }


    public Map<String,Object> updatePreStatusLocal(String admNo,String realOrder,String status) throws Exception {
        Map<String,Object> map = new HashedMap();
        logger.info("admNo"+admNo+"=========realOrder"+realOrder+"===========status"+status);
        if (status.equalsIgnoreCase("1")){
            List<WlyyOutpatientDO> wlyyOutpatientDOList = outpatientDao.findByAdmNo(admNo);
            if (wlyyOutpatientDOList==null||wlyyOutpatientDOList.size()==0){
                throw new Exception("该就诊号查不到！");
            }
            for (WlyyOutpatientDO wlyyOutpatientDO:wlyyOutpatientDOList){
                String registerNo = wlyyOutpatientDO.getRegisterNo();
                if (!StringUtils.isNoneBlank(registerNo)){
                    throw new Exception("挂号流水号为空!");
                }
                PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(wlyyOutpatientDO.getPatient());
                List<WlyyPrescriptionVO> prescriptionVOList = selectOriginPrescriptionListLocal(registerNo,patientMappingDO.getMappingCode(),admNo,realOrder);
                for (WlyyPrescriptionVO prescriptionVO:prescriptionVOList){
                    WlyyPrescriptionDO prescriptionDO =JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(prescriptionVO)),WlyyPrescriptionDO.class);
                    prescriptionDO.setOutpatientId(wlyyOutpatientDO.getId());
                    if (status.equalsIgnoreCase("1")){
                        prescriptionDO.setStatus(20);
                    }
                    prescriptionDO.setDoctor(wlyyOutpatientDO.getDoctor());
                    prescriptionDO.setPatientCode(wlyyOutpatientDO.getPatient());
                    prescriptionDO= prescriptionDao.save(prescriptionDO);
                    //处方诊断表vo
                    List<WlyyPrescriptionDiagnosisVO> diagnosisVOS = prescriptionVO.getDiagnosisVOs();
                    for (WlyyPrescriptionDiagnosisVO diagnosisVO:diagnosisVOS){
                        WlyyPrescriptionDiagnosisDO prescriptionDiagnosisDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(diagnosisVO)),WlyyPrescriptionDiagnosisDO.class);
                        prescriptionDiagnosisDO.setPrescriptionId(prescriptionDO.getId());
                        prescriptionDiagnosisDO.setDel(1);
                        diagnosisDao.save(prescriptionDiagnosisDO);
                    }
                    //药品表
                    List<WlyyPrescriptionInfoVO> infoVOList = prescriptionVO.getInfoVOs();
                    for (WlyyPrescriptionInfoVO infoVO:infoVOList){
                        WlyyPrescriptionInfoDO infoDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(infoVO)),WlyyPrescriptionInfoDO.class);
                        infoDO.setPrescriptionId(prescriptionDO.getId());
                        infoDO.setDel(1);
                        prescriptionInfoDao.save(infoDO);
                    }

                    List<WlyyInspectionVO> inspectionVOList = prescriptionVO.getInspectionVOs();
                    for (WlyyInspectionVO inspectionVO:inspectionVOList){
                        WlyyInspectionDO inspectionDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(inspectionVO)),WlyyInspectionDO.class);
                        BeanUtils.copyProperties(inspectionVO,inspectionDO);
                        inspectionDO.setPrescriptionId(prescriptionDO.getId());
                        inspectionDO.setDel(1);
                        wlyyInspectionDao.save(inspectionDO);
                    }
                }
            }
        }else if (status.equalsIgnoreCase("2")){
            List<WlyyPrescriptionDO> prescriptionDOList =  prescriptionDao.findByAdmNoAndRealOrderList(admNo,realOrder);
            for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
                wlyyPrescriptionDO.setStatus(-1);
                prescriptionDao.save(wlyyPrescriptionDO);
                //检查
                List<WlyyInspectionDO> wlyyInspectionDOS = wlyyInspectionDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyInspectionDO inspectionDO:wlyyInspectionDOS){
                    inspectionDO.setDel(0);
                    wlyyInspectionDao.save(inspectionDO);
                }
                //药品
                List<WlyyPrescriptionInfoDO> prescriptionInfoDOS=prescriptionInfoDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyPrescriptionInfoDO prescriptionInfoDO:prescriptionInfoDOS){
                    prescriptionInfoDO.setDel(0);
                    prescriptionInfoDao.save(prescriptionInfoDO);
                }
                //诊断
                List<WlyyPrescriptionDiagnosisDO> diagnosisDOS = prescriptionDiagnosisDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyPrescriptionDiagnosisDO diagnosisDO:diagnosisDOS){
                    diagnosisDO.setDel(0);
                    prescriptionDiagnosisDao.save(diagnosisDO);
                }
            }
        }else if (status.equalsIgnoreCase("3")){
            List<WlyyPrescriptionDO> prescriptionDOList =  prescriptionDao.findByAdmNoAndRealOrderList(admNo,realOrder);
            for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
                wlyyPrescriptionDO.setStatus(30);
                prescriptionDao.save(wlyyPrescriptionDO);
            }
        }
        return map;
    }


    /**
     * 获取门诊下所有处方信息
     * @param registerSn 流水号
     * @param patNo 居民id
     * @param admNo 住院唯一号
     * @param realOrder 处方号
     * @return
     */
    public List<WlyyPrescriptionVO> selectOriginPrescriptionList(String registerSn,String patNo,String admNo,String realOrder){
        List<WlyyPrescriptionVO> prescriptionVOList = new ArrayList<>();
        String response="";
        String params = "";
        if (StringUtils.isNoneBlank(realOrder)){
            params +="&realOrder="+realOrder;
        }
        logger.info("处方request:"+registerSn+"=="+patNo+"==="+admNo+"===="+realOrder);
        String url = entranceUrl+"getOriginPrescriptionList?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+params;
        response = httpClientUtil.get(url,"GBK");
        logger.info("处方response:"+response+"===="+url);
        JSONObject object = JSONObject.parseObject(response);
        if (object!=null&&object.getInteger("status")==200){
            JSONArray array = new JSONArray();
            array = JSONArray.parseArray(object.getString("obj")).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                WlyyPrescriptionVO wlyyPrescriptionVO = new WlyyPrescriptionVO();
                JSONObject jsonObject = array.getJSONObject(i);
                wlyyPrescriptionVO.setCreateTime(DateUtil.strToDate(isEmty(jsonObject.getString("CREATETIME"))));
                wlyyPrescriptionVO.setCreateUser(isEmty(jsonObject.getString("CREATEUSER")));
                wlyyPrescriptionVO.setCreateUserName(isEmty(jsonObject.getString("CREATENAME")));
                wlyyPrescriptionVO.setUpdateTime(DateUtil.strToDate(isEmty(jsonObject.getString("UPDATETIME"))));
                wlyyPrescriptionVO.setUpdateUser(isEmty(jsonObject.getString("UPDATEUSER")));
                wlyyPrescriptionVO.setUpdateUserName(isEmty(jsonObject.getString("UPDATEUSERNAME")));
                wlyyPrescriptionVO.setRealOrder(isEmty(jsonObject.getString("REALORDER")));
                wlyyPrescriptionVO.setOriginRealOrder(isEmty(jsonObject.getString("ORIGINREALORDER")));
                wlyyPrescriptionVO.setAdmNo(isEmty(jsonObject.getString("ADMNO")));
                wlyyPrescriptionVO.setOriginAdmNo(isEmty(jsonObject.getString("ORIGINADMNO")));
                wlyyPrescriptionVO.setSerialNo(isEmty(jsonObject.getString("SERIALNO")));
                wlyyPrescriptionVO.setOriginSerialNo(isEmty(jsonObject.getString("ORIGINSERIALNO")));
                wlyyPrescriptionVO.setType(jsonObject.getInteger("TYPE"));
                wlyyPrescriptionVO.setPatientCode(isEmty(jsonObject.getString("PATIENTCODE")));
                wlyyPrescriptionVO.setPatientName(isEmty(jsonObject.getString("PATEINTNAME")));
                wlyyPrescriptionVO.setIdcard(isEmty(jsonObject.getString("IDCARD")));
                wlyyPrescriptionVO.setCardNo(isEmty(jsonObject.getString("CARDNO")));
                wlyyPrescriptionVO.setSsc(isEmty(jsonObject.getString("SSC")));
                wlyyPrescriptionVO.setDoctor(isEmty(jsonObject.getString("DOCTOR")));
                wlyyPrescriptionVO.setDoctorName(isEmty(jsonObject.getString("DOCTORNAME")));
                wlyyPrescriptionVO.setStatus(jsonObject.getInteger("STATUS"));
                wlyyPrescriptionVO.setMkFailReason(isEmty(jsonObject.getString("MKFAILREASON")));
                wlyyPrescriptionVO.setMkTime(DateUtil.strToDate(isEmty(jsonObject.getString("MKTIME"))));
                wlyyPrescriptionVO.setPrescribeTime(DateUtil.strToDate(isEmty(jsonObject.getString("PRESCRIBETIME"))));
                wlyyPrescriptionVO.setPrescribeReason(isEmty(jsonObject.getString("PRESCRIBEREASON")));
                wlyyPrescriptionVO.setPayTime(DateUtil.strToDate(isEmty(jsonObject.getString("PAYTIME"))));
                wlyyPrescriptionVO.setDosageTime(DateUtil.strToDate(isEmty(jsonObject.getString("DOSAGETIME"))));
                wlyyPrescriptionVO.setFinishTime(DateUtil.strToDate(isEmty(jsonObject.getString("FINISHTIME"))));
                wlyyPrescriptionVO.setDept(isEmty(jsonObject.getString("DEPT")));
                wlyyPrescriptionVO.setDeptName(isEmty(jsonObject.getString("DEPTNAME")));
                wlyyPrescriptionVO.setHospital(isEmty(jsonObject.getString("HOSPITAL")));
                wlyyPrescriptionVO.setHospitalName(isEmty(jsonObject.getString("HOSPITALNAME")));
                wlyyPrescriptionVO.setConsult(isEmty(jsonObject.getString("CONSULT")));
                wlyyPrescriptionVO.setDispensaryType(isEmty(jsonObject.getString("DISPENSARYTYPE"))!=null?Integer.parseInt(isEmty(jsonObject.getString("DISPENSARYTYPE"))):null);
                wlyyPrescriptionVO.setReason(isEmty(jsonObject.getString("REASON")));
                wlyyPrescriptionVO.setDiseaseImg(isEmty(jsonObject.getString("DISEASEIMG")));
                wlyyPrescriptionVO.setRemark(isEmty(jsonObject.getString("REMARK")));
                wlyyPrescriptionVO.setCancelReason(isEmty(jsonObject.getString("CANCELREASON")));
                wlyyPrescriptionVO.setCaCertData(isEmty(jsonObject.getString("CACERTDATA")));
                wlyyPrescriptionVO.setCaMessage(isEmty(jsonObject.getString("CAMESSAGE")));
                wlyyPrescriptionVO.setDigitalSignNo(isEmty(jsonObject.getString("DIGITALSIGNNO")));
                wlyyPrescriptionVO.setOriginalDataAbstract(isEmty(jsonObject.getString("ORIGINALDATAABSTRACT")));
                wlyyPrescriptionVO.setStrOriginalData(isEmty(jsonObject.getString("STRORIGINALDATA")));
                wlyyPrescriptionVO.setHisDeptCode(isEmty(jsonObject.getString("HISDEPTCODE")));
                wlyyPrescriptionVO.setHisDoctorCode(isEmty(jsonObject.getString("HISDOCTORCODE")));
                wlyyPrescriptionVO.setHisGisterTypeCode(isEmty(jsonObject.getString("HISGISTERTYPECODE")));
                wlyyPrescriptionVO.setHisRateTypeCode(isEmty(jsonObject.getString("HISRATETYPECODE")));
                wlyyPrescriptionVO.setHisHospital(isEmty(jsonObject.getString("HISHOSPITAL")));
                wlyyPrescriptionVO.setHisRegisterFee(isEmty(jsonObject.getString("HISREGISTERFEE"))!=null?Integer.parseInt(isEmty(jsonObject.getString("HISREGISTERFEE"))):null);
                wlyyPrescriptionVO.setPayStatus(isEmty(jsonObject.getString("PAYSTATUS"))!=null?Integer.parseInt(isEmty(jsonObject.getString("PAYSTATUS"))):null);
                //TODO 快递数据
                wlyyPrescriptionVO.setDispUser(isEmty(jsonObject.getString("DISPUSER")));
                wlyyPrescriptionVO.setDispUserName(isEmty(jsonObject.getString("DISPUSERNAME")));
                wlyyPrescriptionVO.setDispDate(DateUtil.strToDate(isEmty(jsonObject.getString("DISPDATE"))));

                //诊断
                String disagnosisUrl = entranceUrl+"getOutpatientDiagnosis?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String disagnosisResponse = httpClientUtil.get(disagnosisUrl,"GBK");
                logger.info("诊断disagnosisResponse:"+disagnosisResponse);
                JSONObject object1 = JSONObject.parseObject(disagnosisResponse);
                if (object1.getString("status").equalsIgnoreCase("200")){
                    JSONArray jsonArray = object1.getJSONArray("obj").getJSONArray(0);
                    List<WlyyPrescriptionDiagnosisVO> prescriptionDiagnosisVOS = new ArrayList<>();
                    for (int j=0;j<jsonArray.size();j++){
                        JSONObject disagnosisJson = jsonArray.getJSONObject(j);
                        WlyyPrescriptionDiagnosisVO prescriptionDiagnosisVO = new WlyyPrescriptionDiagnosisVO();
                        prescriptionDiagnosisVO.setCode(isEmty(disagnosisJson.getString("DIAGNOSECODE")));
                        prescriptionDiagnosisVO.setName(isEmty(disagnosisJson.getString("DIAGNOSENAME")));
                        prescriptionDiagnosisVO.setType(isEmty(disagnosisJson.getString("DIAGNOSETYPE"))==null?null:Integer.parseInt(disagnosisJson.getString("DIAGNOSETYPE")));
                        prescriptionDiagnosisVOS.add(prescriptionDiagnosisVO);
                    }
                    wlyyPrescriptionVO.setDiagnosisVOs(prescriptionDiagnosisVOS);
                }

                String infoUrl = entranceUrl+"getOutpatientDrugInfo?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String infoResponse = httpClientUtil.get(infoUrl,"GBK");
                logger.info("药品infoResponse:"+infoResponse);
                JSONObject infoObject = JSONObject.parseObject(infoResponse);
                if (infoObject.getString("status").equalsIgnoreCase("200")) {
                    JSONArray infoArray = infoObject.getJSONArray("obj").getJSONArray(0);
                    //药品
                    List<WlyyPrescriptionInfoVO> wlyyPrescriptionInfoVOList = new ArrayList<>();
                    for (int j=0;j<infoArray.size();j++){
                        WlyyPrescriptionInfoVO prescriptionInfoVO = new WlyyPrescriptionInfoVO();
                        JSONObject infoJson = infoArray.getJSONObject(j);
                        prescriptionInfoVO.setDrugNo(isEmty(infoJson.getString("DRUGNO")));
                        prescriptionInfoVO.setDrugName(isEmty(infoJson.getString("DRUGNAME")));
                        prescriptionInfoVO.setDispDeposite(isEmty(infoJson.getString("DISPDEPOSITE")));
                        prescriptionInfoVO.setDosage(isEmty(infoJson.getString("DOSAGE")));
                        prescriptionInfoVO.setQuantity(isEmty(infoJson.getString("QUANTITY")));
                        prescriptionInfoVO.setUnit(isEmty(infoJson.getString("UNIT")));
                        prescriptionInfoVO.setUnitName(isEmty(infoJson.getString("UNITNAME")));
                        prescriptionInfoVO.setPackUnitName(isEmty(infoJson.getString("PACKUNITNAME")));
                        prescriptionInfoVO.setPackUnit(isEmty(infoJson.getString("PACKUNIT")));
                        prescriptionInfoVO.setUsageCode(isEmty(infoJson.getString("USAGECODE")));
                        prescriptionInfoVO.setUsageName(isEmty(infoJson.getString("USAGENAME")));
                        prescriptionInfoVO.setSupplyCode(isEmty(infoJson.getString("SUPPLYCODE")));
                        prescriptionInfoVO.setSupplyName(isEmty(infoJson.getString("SUPPLYNAME")));
                        prescriptionInfoVO.setDays(isEmty(infoJson.getString("DAYS")));
                        prescriptionInfoVO.setFrequency(isEmty(infoJson.getString("FREQUENCY")));
                        prescriptionInfoVO.setSerial(isEmty(infoJson.getString("SERIAL")));
                    /*    prescriptionInfoVO.setGroupNo(isEmty(infoJson.getString("groupNo")));*/
                        prescriptionInfoVO.setSpecification(isEmty(infoJson.getString("SPECIFICATION")));
                        prescriptionInfoVO.setPackRetprice(isEmty(infoJson.getString("PACKRETPRICE"))==null?0.0:infoJson.getDouble("PACKRETPRICE"));
                        prescriptionInfoVO.setHerbalCount(isEmty(infoJson.getString("HERBALCOUNT")));
                        prescriptionInfoVO.setPostCount(isEmty(infoJson.getString("POSTCOUNT")));
                        prescriptionInfoVO.setDel(isEmty(infoJson.getString("DEL"))==null?1:infoJson.getInteger("DEL"));
                        prescriptionInfoVO.setComm(infoJson.getString("COMM"));
                        wlyyPrescriptionInfoVOList.add(prescriptionInfoVO);
                        wlyyPrescriptionVO.setInfoVOs(wlyyPrescriptionInfoVOList);
                    }
                }

                //检查检验内容
                String inspectionUrl = entranceUrl+"getOutpatientCheckTestInfo?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String inspectionResponse = httpClientUtil.get(inspectionUrl,"GBK");
                logger.info("检查检验内容inspectionResponse:"+inspectionResponse);
                JSONObject inspectionObject = JSONObject.parseObject(inspectionResponse);
                if (inspectionObject.getString("status").equalsIgnoreCase("200")) {
                    List<WlyyInspectionVO> wlyyInspectionVOList = new ArrayList<>();
                    JSONArray inspectionArray = inspectionObject.getJSONArray("obj").getJSONArray(0);
                    for (int j=0;j<inspectionArray.size();j++){
                        WlyyInspectionVO inspectionVO = new WlyyInspectionVO();
                        JSONObject inspectionJson = inspectionArray.getJSONObject(j);
                        inspectionVO.setGroupName(isEmty(inspectionJson.getString("GROUPNAME")));
                        inspectionVO.setQuantity(isEmty(inspectionJson.getString("QUANTITYS"))!=null?Integer.parseInt(isEmty(inspectionJson.getString("QUANTITYS"))):null);
                        inspectionVO.setFrequency(isEmty(inspectionJson.getString("FREQUENCYS")));
                        inspectionVO.setParentCode(isEmty(inspectionJson.getString("PARENTCODE")));
                        inspectionVO.setParentName(isEmty(inspectionJson.getString("PARENTCODENAME")));
                        inspectionVO.setCode(isEmty(inspectionJson.getString("CODES")));
                        inspectionVO.setName(isEmty(inspectionJson.getString("NAMES")));
                        inspectionVO.setInformation(isEmty(inspectionJson.getString("INFORMATION")));
                        inspectionVO.setCheckEquip(isEmty(inspectionJson.getString("CHECKEQUIP")));
                        inspectionVO.setCheckPartName(isEmty(inspectionJson.getString("CHECKPARTNAME")));
                        inspectionVO.setCheckPart(isEmty(inspectionJson.getString("CHECKPART")));
                        wlyyInspectionVOList.add(inspectionVO);
                    }
                    wlyyPrescriptionVO.setInspectionVOs(wlyyInspectionVOList);
                }
                try {
                    List<WlyyPrescriptionEmrDO> listEmr = selectHistoryEmr(patNo,"");
                    if (null!=listEmr&&listEmr.size()>0){
                        wlyyPrescriptionVO.setWlyyPrescriptionEmrDO(listEmr.get(0));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                prescriptionVOList.add(wlyyPrescriptionVO);
            }
        }
        return prescriptionVOList;
    }



    /**
     * 获取门诊下所有处方信息---内网调下
     * @param registerSn 流水号
     * @param patNo 居民id
     * @param admNo 住院唯一号
     * @param realOrder 处方号
     * @return
     */
    public List<WlyyPrescriptionVO> selectOriginPrescriptionListLocal(String registerSn,String patNo,String admNo,String realOrder){
        List<WlyyPrescriptionVO> prescriptionVOList = new ArrayList<>();
        String response="";
        String params = "";
        if (StringUtils.isNoneBlank(realOrder)){
            params +="&realOrder="+realOrder;
        }
        logger.info("处方request:"+registerSn+"=="+patNo+"==="+admNo+"===="+realOrder);
        String url = entranceUrlLocal+"getOriginPrescriptionList?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+params;
        response = httpClientUtil.get(url,"GBK");
        logger.info("处方response:"+response+"===="+url);
        JSONObject object = JSONObject.parseObject(response);
        if (object!=null&&object.getInteger("status")==200){
            JSONArray array = new JSONArray();
            array = JSONArray.parseArray(object.getString("obj")).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                WlyyPrescriptionVO wlyyPrescriptionVO = new WlyyPrescriptionVO();
                JSONObject jsonObject = array.getJSONObject(i);
                wlyyPrescriptionVO.setCreateTime(DateUtil.strToDate(isEmty(jsonObject.getString("CREATETIME"))));
                wlyyPrescriptionVO.setCreateUser(isEmty(jsonObject.getString("CREATEUSER")));
                wlyyPrescriptionVO.setCreateUserName(isEmty(jsonObject.getString("CREATENAME")));
                wlyyPrescriptionVO.setUpdateTime(DateUtil.strToDate(isEmty(jsonObject.getString("UPDATETIME"))));
                wlyyPrescriptionVO.setUpdateUser(isEmty(jsonObject.getString("UPDATEUSER")));
                wlyyPrescriptionVO.setUpdateUserName(isEmty(jsonObject.getString("UPDATEUSERNAME")));
                wlyyPrescriptionVO.setRealOrder(isEmty(jsonObject.getString("REALORDER")));
                wlyyPrescriptionVO.setOriginRealOrder(isEmty(jsonObject.getString("ORIGINREALORDER")));
                wlyyPrescriptionVO.setAdmNo(isEmty(jsonObject.getString("ADMNO")));
                wlyyPrescriptionVO.setOriginAdmNo(isEmty(jsonObject.getString("ORIGINADMNO")));
                wlyyPrescriptionVO.setSerialNo(isEmty(jsonObject.getString("SERIALNO")));
                wlyyPrescriptionVO.setOriginSerialNo(isEmty(jsonObject.getString("ORIGINSERIALNO")));
                wlyyPrescriptionVO.setType(jsonObject.getInteger("TYPE"));
                wlyyPrescriptionVO.setPatientCode(isEmty(jsonObject.getString("PATIENTCODE")));
                wlyyPrescriptionVO.setPatientName(isEmty(jsonObject.getString("PATEINTNAME")));
                wlyyPrescriptionVO.setIdcard(isEmty(jsonObject.getString("IDCARD")));
                wlyyPrescriptionVO.setCardNo(isEmty(jsonObject.getString("CARDNO")));
                wlyyPrescriptionVO.setSsc(isEmty(jsonObject.getString("SSC")));
                wlyyPrescriptionVO.setDoctor(isEmty(jsonObject.getString("DOCTOR")));
                wlyyPrescriptionVO.setDoctorName(isEmty(jsonObject.getString("DOCTORNAME")));
                wlyyPrescriptionVO.setStatus(jsonObject.getInteger("STATUS"));
                wlyyPrescriptionVO.setMkFailReason(isEmty(jsonObject.getString("MKFAILREASON")));
                wlyyPrescriptionVO.setMkTime(DateUtil.strToDate(isEmty(jsonObject.getString("MKTIME"))));
                wlyyPrescriptionVO.setPrescribeTime(DateUtil.strToDate(isEmty(jsonObject.getString("PRESCRIBETIME"))));
                wlyyPrescriptionVO.setPrescribeReason(isEmty(jsonObject.getString("PRESCRIBEREASON")));
                wlyyPrescriptionVO.setPayTime(DateUtil.strToDate(isEmty(jsonObject.getString("PAYTIME"))));
                wlyyPrescriptionVO.setDosageTime(DateUtil.strToDate(isEmty(jsonObject.getString("DOSAGETIME"))));
                wlyyPrescriptionVO.setFinishTime(DateUtil.strToDate(isEmty(jsonObject.getString("FINISHTIME"))));
                wlyyPrescriptionVO.setDept(isEmty(jsonObject.getString("DEPT")));
                wlyyPrescriptionVO.setDeptName(isEmty(jsonObject.getString("DEPTNAME")));
                wlyyPrescriptionVO.setHospital(isEmty(jsonObject.getString("HOSPITAL")));
                wlyyPrescriptionVO.setHospitalName(isEmty(jsonObject.getString("HOSPITALNAME")));
                wlyyPrescriptionVO.setConsult(isEmty(jsonObject.getString("CONSULT")));
                wlyyPrescriptionVO.setDispensaryType(isEmty(jsonObject.getString("DISPENSARYTYPE"))!=null?Integer.parseInt(isEmty(jsonObject.getString("DISPENSARYTYPE"))):null);
                wlyyPrescriptionVO.setReason(isEmty(jsonObject.getString("REASON")));
                wlyyPrescriptionVO.setDiseaseImg(isEmty(jsonObject.getString("DISEASEIMG")));
                wlyyPrescriptionVO.setRemark(isEmty(jsonObject.getString("REMARK")));
                wlyyPrescriptionVO.setCancelReason(isEmty(jsonObject.getString("CANCELREASON")));
                wlyyPrescriptionVO.setCaCertData(isEmty(jsonObject.getString("CACERTDATA")));
                wlyyPrescriptionVO.setCaMessage(isEmty(jsonObject.getString("CAMESSAGE")));
                wlyyPrescriptionVO.setDigitalSignNo(isEmty(jsonObject.getString("DIGITALSIGNNO")));
                wlyyPrescriptionVO.setOriginalDataAbstract(isEmty(jsonObject.getString("ORIGINALDATAABSTRACT")));
                wlyyPrescriptionVO.setStrOriginalData(isEmty(jsonObject.getString("STRORIGINALDATA")));
                wlyyPrescriptionVO.setHisDeptCode(isEmty(jsonObject.getString("HISDEPTCODE")));
                wlyyPrescriptionVO.setHisDoctorCode(isEmty(jsonObject.getString("HISDOCTORCODE")));
                wlyyPrescriptionVO.setHisGisterTypeCode(isEmty(jsonObject.getString("HISGISTERTYPECODE")));
                wlyyPrescriptionVO.setHisRateTypeCode(isEmty(jsonObject.getString("HISRATETYPECODE")));
                wlyyPrescriptionVO.setHisHospital(isEmty(jsonObject.getString("HISHOSPITAL")));
                wlyyPrescriptionVO.setHisRegisterFee(isEmty(jsonObject.getString("HISREGISTERFEE"))!=null?Integer.parseInt(isEmty(jsonObject.getString("HISREGISTERFEE"))):null);
                wlyyPrescriptionVO.setPayStatus(isEmty(jsonObject.getString("PAYSTATUS"))!=null?Integer.parseInt(isEmty(jsonObject.getString("PAYSTATUS"))):null);
                //TODO 快递数据
                wlyyPrescriptionVO.setDispUser(isEmty(jsonObject.getString("DISPUSER")));
                wlyyPrescriptionVO.setDispUserName(isEmty(jsonObject.getString("DISPUSERNAME")));
                wlyyPrescriptionVO.setDispDate(DateUtil.strToDate(isEmty(jsonObject.getString("DISPDATE"))));

                //诊断
                String disagnosisUrl = entranceUrlLocal+"getOutpatientDiagnosis?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String disagnosisResponse = httpClientUtil.get(disagnosisUrl,"GBK");
                logger.info("诊断disagnosisResponse:"+disagnosisResponse);
                JSONObject object1 = JSONObject.parseObject(disagnosisResponse);
                if (object1.getString("status").equalsIgnoreCase("200")){

                    JSONArray jsonArray = JSONArray.parseArray(object1.getString("obj")).getJSONArray(0);
                    logger.info("诊断"+jsonArray.toJSONString());
                    List<WlyyPrescriptionDiagnosisVO> prescriptionDiagnosisVOS = new ArrayList<>();
                    for (int j=0;j<jsonArray.size();j++){
                        JSONObject disagnosisJson = jsonArray.getJSONObject(j);
                        WlyyPrescriptionDiagnosisVO prescriptionDiagnosisVO = new WlyyPrescriptionDiagnosisVO();
                        prescriptionDiagnosisVO.setCode(isEmty(disagnosisJson.getString("DIAGNOSECODE")));
                        prescriptionDiagnosisVO.setName(isEmty(disagnosisJson.getString("DIAGNOSENAME")));
                        prescriptionDiagnosisVO.setType(isEmty(disagnosisJson.getString("DIAGNOSETYPE"))==null?null:Integer.parseInt(disagnosisJson.getString("DIAGNOSETYPE")));
                        prescriptionDiagnosisVOS.add(prescriptionDiagnosisVO);
                    }
                    wlyyPrescriptionVO.setDiagnosisVOs(prescriptionDiagnosisVOS);
                }

                String infoUrl = entranceUrlLocal+"getOutpatientDrugInfo?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String infoResponse = httpClientUtil.get(infoUrl,"GBK");
                logger.info("药品infoResponse:"+infoResponse);
                JSONObject infoObject = JSONObject.parseObject(infoResponse);
                if (infoObject.getString("status").equalsIgnoreCase("200")) {
                    JSONArray infoArray = JSONArray.parseArray(infoObject.getString("obj")).getJSONArray(0);
                    //药品
                    List<WlyyPrescriptionInfoVO> wlyyPrescriptionInfoVOList = new ArrayList<>();
                    for (int j=0;j<infoArray.size();j++){
                        WlyyPrescriptionInfoVO prescriptionInfoVO = new WlyyPrescriptionInfoVO();
                        JSONObject infoJson = infoArray.getJSONObject(j);
                        prescriptionInfoVO.setDrugNo(isEmty(infoJson.getString("DRUGNO")));
                        prescriptionInfoVO.setDrugName(isEmty(infoJson.getString("DRUGNAME")));
                        prescriptionInfoVO.setDispDeposite(isEmty(infoJson.getString("DISPDEPOSITE")));
                        prescriptionInfoVO.setDosage(isEmty(infoJson.getString("DOSAGE")));
                        prescriptionInfoVO.setQuantity(isEmty(infoJson.getString("QUANTITY")));
                        prescriptionInfoVO.setUnit(isEmty(infoJson.getString("UNIT")));
                        prescriptionInfoVO.setUnitName(isEmty(infoJson.getString("UNITNAME")));
                        prescriptionInfoVO.setPackUnitName(isEmty(infoJson.getString("PACKUNITNAME")));
                        prescriptionInfoVO.setPackUnit(isEmty(infoJson.getString("PACKUNIT")));
                        prescriptionInfoVO.setUsageCode(isEmty(infoJson.getString("USAGECODE")));
                        prescriptionInfoVO.setUsageName(isEmty(infoJson.getString("USAGENAME")));
                        prescriptionInfoVO.setSupplyCode(isEmty(infoJson.getString("SUPPLYCODE")));
                        prescriptionInfoVO.setSupplyName(isEmty(infoJson.getString("SUPPLYNAME")));
                        prescriptionInfoVO.setDays(isEmty(infoJson.getString("DAYS")));
                        prescriptionInfoVO.setFrequency(isEmty(infoJson.getString("FREQUENCY")));
                        prescriptionInfoVO.setSerial(isEmty(infoJson.getString("SERIAL")));
                    /*    prescriptionInfoVO.setGroupNo(isEmty(infoJson.getString("groupNo")));*/
                        prescriptionInfoVO.setSpecification(isEmty(infoJson.getString("SPECIFICATION")));
                        prescriptionInfoVO.setPackRetprice(isEmty(infoJson.getString("PACKRETPRICE"))!=null?Double.parseDouble(isEmty(infoJson.getString("PACKRETPRICE"))):null);
                        prescriptionInfoVO.setHerbalCount(isEmty(infoJson.getString("HERBALCOUNT")));
                        prescriptionInfoVO.setPostCount(isEmty(infoJson.getString("POSTCOUNT")));
                        prescriptionInfoVO.setDel(isEmty(infoJson.getString("DEL"))!=null?Integer.parseInt(infoJson.getString("DEL")):null);
                        prescriptionInfoVO.setComm(infoJson.getString("COMM"));
                        wlyyPrescriptionInfoVOList.add(prescriptionInfoVO);
                        wlyyPrescriptionVO.setInfoVOs(wlyyPrescriptionInfoVOList);
                    }
                }

                //检查检验内容
                String inspectionUrl = entranceUrlLocal+"getOutpatientCheckTestInfo?registerSn="+registerSn+"&patNo="+patNo+"&admNo="+admNo+"&realOrder="+jsonObject.getString("REALORDER");
                String inspectionResponse = httpClientUtil.get(inspectionUrl,"GBK");
                logger.info("检查检验内容inspectionResponse:"+inspectionResponse);
                JSONObject inspectionObject = JSONObject.parseObject(inspectionResponse);
                if (inspectionObject.getString("status").equalsIgnoreCase("200")) {
                    List<WlyyInspectionVO> wlyyInspectionVOList = new ArrayList<>();
                    JSONArray inspectionArray = JSONArray.parseArray(inspectionObject.getString("obj")).getJSONArray(0);
                    for (int j=0;j<inspectionArray.size();j++){
                        WlyyInspectionVO inspectionVO = new WlyyInspectionVO();
                        JSONObject inspectionJson = inspectionArray.getJSONObject(j);
                        inspectionVO.setGroupName(isEmty(inspectionJson.getString("GROUPNAME")));
                        inspectionVO.setQuantity(isEmty(inspectionJson.getString("QUANTITYS"))!=null?Integer.parseInt(isEmty(inspectionJson.getString("QUANTITYS"))):null);
                        inspectionVO.setFrequency(isEmty(inspectionJson.getString("FREQUENCYS")));
                        inspectionVO.setParentCode(isEmty(inspectionJson.getString("PARENTCODE")));
                        inspectionVO.setParentName(isEmty(inspectionJson.getString("PARENTCODENAME")));
                        inspectionVO.setCode(isEmty(inspectionJson.getString("CODES")));
                        inspectionVO.setName(isEmty(inspectionJson.getString("NAMES")));
                        inspectionVO.setInformation(isEmty(inspectionJson.getString("INFORMATION")));
                        inspectionVO.setCheckEquip(isEmty(inspectionJson.getString("CHECKEQUIP")));
                        inspectionVO.setCheckPartName(isEmty(inspectionJson.getString("CHECKPARTNAME")));
                        inspectionVO.setCheckPart(isEmty(inspectionJson.getString("CHECKPART")));
                        wlyyInspectionVOList.add(inspectionVO);
                    }
                    wlyyPrescriptionVO.setInspectionVOs(wlyyInspectionVOList);
                }
                prescriptionVOList.add(wlyyPrescriptionVO);
            }
        }
        return prescriptionVOList;
    }


    /**
     *
     * 挂号（调his后台包）
     * @param doctor 医生ID(必填)
     * @param dept 科室编码(必填)
     * @param sickId 病人id
     * @param clinicclass 挂号类别(必填)
     * @return
     */
    public JSONObject registeredOperate(String doctor,String dept,String sickId,String clinicclass,String courierflag){
        JSONObject jsonObject= new JSONObject();
        String response="";
        logger.info("clinicclass:"+clinicclass);
        logger.info("courierflag:"+courierflag);
        String url = entranceUrl+"registered?doctor="+doctor+"&dept="+dept+"&sickId="+sickId+"&clinicclass="+clinicclass+"&courierflag="+courierflag;
        response = httpClientUtil.get(url,"GBK");
        logger.info("response:"+response);
        JSONObject object = JSONObject.parseObject(response);
        if (object.getInteger("status")==200){
            jsonObject = JSONObject.parseObject(object.getString("obj"));
        }
        return jsonObject;
    }


    /**
     * 获取icd10字典
     * @param spellCode 拼音码
     * @return
     */
    public JSONArray selectIcd10Dict(String spellCode) throws Exception {
        String response="";
        String url = entranceUrl+"getICD10Dict?spellCode="+spellCode;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("add_code","");
                object1.put("code",jsonObject.getString("ICD10_CODE"));
                object1.put("d_code",jsonObject.getString(""));
                object1.put("name",jsonObject.getString("ICD10_NAME"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("valid_flag",jsonObject.getString("VALID_FLAG"));
                object1.put("icd10_type",jsonObject.getString("ICD10_TYPE"));
                object1.put("icd10_class",jsonObject.getString("ICD10_CLASS"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }


    /**
     * 获取药品字典
     * @param spellCode 拼音码
     * @return
     */
    public JSONArray selectDrugDict(String spellCode,String drugNo) throws Exception {
        String response="";
        String url = entranceUrl+"getDrugDict?spellCode="+spellCode+"&drugNo="+drugNo;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("charge_code",jsonObject.getString("PHYSIC_CODE"));
                object1.put("serial","");
                object1.put("group_no","");
                object1.put("drugname",jsonObject.getString("PHYSIC_NAME"));
                object1.put("dosage",jsonObject.getString("DOSE_UNIT"));
                object1.put("MIN_DOSE",jsonObject.getString("MIN_DOSE"));
                object1.put("mini_unit",jsonObject.getString("PHYSIC_UNIT"));
                object1.put("pack_size",jsonObject.getString("PACK_SPEC"));
                object1.put("retprice",jsonObject.getString("RETAIL_PRICE"));
                object1.put("specification",jsonObject.getString("PHYSIC_SPEC"));
                object1.put("pack_retprice",jsonObject.getString("RETAIL_PRICE"));
                object1.put("stock_amount",jsonObject.getString("QUANTITY"));
                object1.put("visible_flag",jsonObject.getString("VALID_FLAG"));
                object1.put("drug_flag",jsonObject.getString("OTC_FLAG"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("pack_unit",jsonObject.getString("PRICE_UNIT"));
                object1.put("manu_name",jsonObject.getString("SUPPLIER_NAME"));
                object1.put("weigh_unit",jsonObject.getString("DOSE_UNIT"));
                object1.put("vol_unit","");
                object1.put("mini_unit_name",jsonObject.getString("PHYSIC_UNIT"));
                DecimalFormat df =new DecimalFormat("0.00");
                Double packSize=Double.parseDouble(jsonObject.get("PACK_SPEC").toString().equals("[]")?"1":jsonObject.getString("PACK_SPEC"));
                Double retprice=Double.parseDouble(jsonObject.get("RETAIL_PRICE").toString().equals("[]")?"0":jsonObject.getString("RETAIL_PRICE"));
                Double miniUnitPrice=0.00;
                if (0.00!=packSize){
                    miniUnitPrice=retprice/packSize;
                }
                object1.put("mini_unit_price",df.format(miniUnitPrice));
                object1.put("pack_unit_name",jsonObject.getString("PRICE_UNIT"));
                object1.put("weigh_unit_name",jsonObject.getString("DOSE_UNIT"));
                object1.put("vol_unit_name","");
                object1.put("win_no","");
                object1.put("jbyw",jsonObject.getString("BASE_PHYSIC_FLAG"));
                object1.put("gwyp","");
                object1.put("bz_dosage",jsonObject.getString("DOSEAGE"));
                object1.put("bz_supply",jsonObject.getString("USAGE"));
                object1.put("bz_supply_name",jsonObject.getString("USAGE"));
                object1.put("bz_unit",jsonObject.getString("DOSEAGE_UNIT"));
                object1.put("bz_unit_name",jsonObject.getString("DOSEAGE_UNIT"));
                object1.put("bz_usage",jsonObject.getString("FREQUENCY"));
                object1.put("bz_usage_name",jsonObject.getString("FREQUENCY"));
                object1.put("QUANTITY",jsonObject.getString("QUANTITY"));
                object1.put("DAY_COUNT",jsonObject.getString("DAY_COUNT"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }

    /**
     * 查询药品用药方法
     * @param spellCode 拼音码
     * @return
     */
    public JSONArray selectMedicineUsed(String spellCode) throws Exception {
        String response="";
        String url = entranceUrl+"getMedicineUsed?spellCode="+spellCode;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("d_code",jsonObject.getString("ITEM_CODE"));
                object1.put("supply_code",jsonObject.getString("TAKE_MEDICINE_WAYS_CODE"));
                object1.put("supply_name",jsonObject.getString("TAKE_MEDICINE_WAYS_NAME"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("del_flag","");
                object1.put("yb_code","");
                object1.put("yb_name",jsonObject.getString("MEMO"));
                object1.put("print_name",jsonObject.getString("TAKE_MEDICINE_WAYS_NAME"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }

    /**
     * 获取药品用药频次字典
     * @return
     */
    public JSONArray selectFrequencyDict() throws Exception {
        String response="";
        String url = entranceUrl+"getFrequencyDict";
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("DAILY_TIMES",jsonObject.getString("FREQ_COUNT"));
                object1.put("FREQ_CODE",jsonObject.getString("FREQ_DESCRIBE"));
                object1.put("FREQ_DESCRIBE_CODE",jsonObject.getString("FREQ_DESCRIBE_CODE"));
                object1.put("FREQ_DESCRIBE",jsonObject.getString("FREQ_DESCRIBE"));
                object1.put("PHYSIC_NOTUSE_FLAG",jsonObject.getString("PHYSIC_NOTUSE_FLAG"));
                object1.put("FREQ_NAME",jsonObject.getString("FREQ_MEMO"));
                object1.put("INSUR_FREQ_DESCRIBE",jsonObject.getString("INSUR_FREQ_DESCRIBE"));
                object1.put("FREQ_INTERVAL",jsonObject.getString("FREQ_INTERVAL"));
                object1.put("FREQ_INTERVAL_UNIT",jsonObject.getString("FREQ_INTERVAL_UNIT"));
                object1.put("DEFAULT_SCHEDULE",jsonObject.getString("DEFAULT_SCHEDULE"));
                object1.put("EXECUTE_TIME_FLAG",jsonObject.getString("EXECUTE_TIME_FLAG"));
                object1.put("DAY_FLAG",jsonObject.getString("DAY_FLAG"));
                object1.put("WEEK_FLAG",jsonObject.getString("WEEK_FLAG"));
                object1.put("WEEK_1",jsonObject.getString("WEEK_1"));
                object1.put("WEEK_2",jsonObject.getString("WEEK_2"));
                object1.put("WEEK_3",jsonObject.getString("WEEK_3"));
                object1.put("WEEK_4",jsonObject.getString("WEEK_4"));
                object1.put("WEEK_5",jsonObject.getString("WEEK_5"));
                object1.put("WEEK_6",jsonObject.getString("WEEK_6"));
                object1.put("WEEK_7",jsonObject.getString("WEEK_7"));
                object1.put("SPELL_CODE",jsonObject.getString("SPELL_CODE"));
                object1.put("VALID_FLAG",jsonObject.getString("VALID_FLAG"));
                object1.put("WEEKLY_TIMES","");
                object1.put("IS_OP_IP","");
                object1.put("HOSP_CODE","");
                object1.put("FREQ_SP",jsonObject.getString("MEMO"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }

    /**
     * 查询检查部位
     * @param spellCode 拼音码
     * @return
     */
    public JSONArray selectCheckBody(String spellCode) throws Exception {
        String response="";
        String url = entranceUrl+"getCheckBody?spellCode="+spellCode;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("name",jsonObject.getString("NAME"));
                object1.put("code",jsonObject.getString("CODE"));
                object1.put("data",jsonObject.getString("DATA"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("memo",jsonObject.getString("MEMO"));
                object1.put("wb_code",jsonObject.getString("WBZX_CODE"));
                object1.put("sequence",jsonObject.getString("SEQUENCE"));
                object1.put("valid",jsonObject.getString("VALID"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }
    /**
     * 查询检查项目
     * @param spellCode 拼音码或药品名字
     * @return
     */
    public JSONArray selectExamApply(String spellCode) throws Exception {
        String response="";
        String url = entranceUrl+"getExamApply?spellCode="+spellCode;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("name",jsonObject.getString("ITEM_NAME"));
                object1.put("code",jsonObject.getString("ITEM_CODE"));
                object1.put("type",jsonObject.getString("ITEM_CLASS"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("charge_amount",jsonObject.getString("FACT_PRICE"));
                object1.put("child_amount",jsonObject.getString("CHILD_PRICE"));
                object1.put("charge_unit",jsonObject.getString("UNIT"));
                object1.put("wb_code",jsonObject.getString("FIVE_PEN_CODE"));
                object1.put("memo",jsonObject.getString("MEMO"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }
    /**
     * 查询检验项目
     * @param spellCode 拼音码或药品名字
     * @return
     */
    public JSONArray selectLisApply(String spellCode) throws Exception {
        String response="";
        String url = entranceUrl+"getLisApply?spellCode="+spellCode;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        JSONArray jsonArray = new JSONArray();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            JSONArray array = JSONArray.parseArray(obj).getJSONArray(0);
            for (int i=0;i<array.size();i++){
                JSONObject jsonObject = array.getJSONObject(i);
                JSONObject object1 = new JSONObject();
                object1.put("@action","select");
                object1.put("name",jsonObject.getString("ITEM_NAME"));
                object1.put("code",jsonObject.getString("ITEM_CODE"));
                object1.put("type",jsonObject.getString("ITEM_CLASS"));
                object1.put("py_code",jsonObject.getString("SPELL_CODE"));
                object1.put("charge_amount",jsonObject.getString("FACT_PRICE"));
                object1.put("child_amount",jsonObject.getString("CHILD_PRICE"));
                object1.put("charge_unit",jsonObject.getString("UNIT"));
                object1.put("wb_code",jsonObject.getString("FIVE_PEN_CODE"));
                object1.put("memo",jsonObject.getString("MEMO"));
                jsonArray.add(object1);
            }
        }
        return jsonArray;
    }
/**
 * 检查检验项目同步his
 * @param
 * @return
 */
public Map checkSyncHis(String IoFlag,String PayCardNo,String NullahNumber,String ApplyDept,String ApplyDoctor,String wlyyInspectionS) throws Exception {
    String response="";
    Map resultMap=new HashMap();
    String url = entranceUrl+"saveInspectToHospital?IoFlag="+IoFlag+"&PayCardNo="+PayCardNo+"&NullahNumber="+NullahNumber+
            "&ApplyDept="+ApplyDept+
            "&ApplyDoctor="+ApplyDoctor+"&wlyyInspectionS="+wlyyInspectionS;
    response = httpClientUtil.get(url,"GBK");
    JSONObject object = JSONObject.parseObject(response);
    if(object.getInteger("status")==200){
        String obj = object.getString("obj");
        JSONObject rootObject = JSONObject.parseObject(obj);
        if (null!=rootObject&&"0".equalsIgnoreCase(rootObject.getString("code"))){
            resultMap.put("success",rootObject.getString("success"));
            resultMap.put("code",rootObject.getString("code"));
            resultMap.put("msg",rootObject.getString("msg"));
            JSONObject dataObj = JSONObject.parseObject(rootObject.getString("data"));
            if (null!=dataObj){
                JSONObject presDetailobj = JSONObject.parseObject(dataObj.getString("PresDetail"));
                resultMap.put("msg",presDetailobj.getString("PresNo"));
                logger.info("his医嘱号:"+presDetailobj.getString("PresNo"));
            }
        }else if(null!=rootObject&&!"0".equalsIgnoreCase(rootObject.getString("code"))){
            resultMap.put("success",rootObject.getString("success"));
            resultMap.put("code",rootObject.getString("code"));
            resultMap.put("msg",rootObject.getString("msg"));
        }else {
            resultMap.put("success","obj转化失败");
        }
    }else {
        resultMap.put("success","调用entrance接口返回失败");
    }
    return resultMap;
}


    /**
     * 保存处方到entrance
     * @param ioFlag 门诊住院标志
     * @param payCardNo 就诊卡号
     * @param nullahNumber 挂号流水号
     * @param applyDept 执行科室
     * @param applyDoctor 开单医生
     * @param executeDept 执行科室(药房)
     * @return
     * @throws Exception
     */
    public JSONObject savePrescriptionToEntrance(String ioFlag,String payCardNo,String nullahNumber,String applyDept,String applyDoctor,String executeDept,List<WlyyPrescriptionInfoDO> wlyyPrescriptionInfoDOS) throws Exception {
        JSONObject jsonObject = new JSONObject();
        String response = "";
        String url = entranceUrl+"savePrescriptionToHospital";
        ObjectMapper mapper = new ObjectMapper();
        JSONArray array = new JSONArray();
        for (WlyyPrescriptionInfoDO wlyyPrescriptionInfoDO:wlyyPrescriptionInfoDOS){
            array.add(wlyyPrescriptionInfoDO);
        }
        Map<String,String> params = new HashedMap();
        params.put("IoFlag",ioFlag);
        params.put("PayCardNo",payCardNo);
        params.put("NullahNumber",nullahNumber);
        params.put("ApplyDept",applyDept);
        params.put("ApplyDoctor",applyDoctor);
        params.put("ExecuteDept",executeDept);
        params.put("prescriptionInfoDOS", array.toJSONString());
        logger.info("prescriptionInfoDOS"+params.get("prescriptionInfoDOS"));
        logger.info("params"+params.toString());
        response = httpClientUtil.httpPost(url,params);
        logger.info("开方成功"+response);
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
             jsonObject = object.getJSONObject("obj");
        }
        return jsonObject;
    }

    /**
     * 保存诊断到entrance
     * @param applyNo 必填，流水号
     * @param diagnosisName 必填，诊断名称
     * @param diagnosisCode 诊断代码
     * @return
     * @throws Exception
     */
    public JSONObject saveDiagnosisToEntrance(String applyNo,String diagnosisName,String diagnosisCode) throws Exception {
        JSONObject jsonObject = new JSONObject();
        String response = "";
        String url = entranceUrl+"saveDiagnosis";
        ObjectMapper mapper = new ObjectMapper();
        Map<String,String> params = new HashedMap();
        params.put("ApplyNo",applyNo);
        params.put("DiagnosisName",diagnosisName);
        params.put("DiagnosisCode",diagnosisCode);
        logger.info("params"+params.toString());
        response = httpClientUtil.httpPost(url,params);
        logger.info("诊断同步"+response);
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            jsonObject = object.getJSONObject("obj");
        }
        return jsonObject;
    }

    /**
     * 发送退号信息到entrance
     * @param applyNo 必填，流水号
     * @param payCardNo 必填，卡号
     * @return
     * @throws Exception
     */
    public JSONObject refundConsultationToEntrance(String applyNo,String payCardNo) throws Exception {
        JSONObject jsonObject = new JSONObject();
        String response = "";
        String url = entranceUrl+"refundConsultation";
        ObjectMapper mapper = new ObjectMapper();
        Map<String,String> params = new HashedMap();
        params.put("ApplyNo",applyNo);
        params.put("PayCardNo",payCardNo);
        logger.info("params"+params.toString());
        response = httpClientUtil.httpPost(url,params);
        logger.info("诊断同步"+response);
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            jsonObject = object.getJSONObject("obj");
        }
        return jsonObject;
    }
    /**
     * 删除处方信息
     * @param realOrder his处方号
     * @return
     * @throws Exception
     */
    public JSONObject deletePrescriptionToEntrance(String realOrder) throws Exception {
        Map<String,String> params = new HashedMap();
        WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findByRealOrder(realOrder);
        if (null!=wlyyPrescriptionDO){
            params.put("IoFlag","0");
            WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findById(wlyyPrescriptionDO.getOutpatientId());
            if (null!=wlyyOutpatientDO){
                params.put("PayCardNo",wlyyOutpatientDO.getCardNo());
                params.put("ApplyDept",wlyyOutpatientDO.getDept());
                params.put("NullahNumber",wlyyOutpatientDO.getRegisterNo());
            }
            DoctorMappingDO doctorMappingDO = doctorMappingDao.findByDoctor(wlyyPrescriptionDO.getDoctor());
            if (null!=doctorMappingDO){
                params.put("ApplyDoctor",doctorMappingDO.getDoctorName()+"/"+doctorMappingDO.getMappingCode());
            }
            params.put("ExecuteDept","50100");
            params.put("PresNo",realOrder);
        }
        JSONObject jsonObject = new JSONObject();
        String response = "";
        String url = entranceUrl+"delHisPrescriptionByHisNo";
        logger.info("params"+params.toString());
        response = httpClientUtil.httpPost(url,params);
        logger.info("删除处方信息"+response);
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            jsonObject = object.getJSONObject("obj");
        }
        return jsonObject;
    }
    /**
     * 保存电子病历
     * @param prescriptionId 处方id
     * @return
     * @throws Exception
     */
    public String  saveEmrToEntrance(String prescriptionId,String baseSign) throws Exception {
        Map<String,String> params = new HashedMap();
        WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findOne(prescriptionId);
        JSONObject paramRequest = new JSONObject();
        if (null!=wlyyPrescriptionDO){
            paramRequest.put("patientName",wlyyPrescriptionDO.getPatientName());
            PatientMappingDO patientMappingDO =  patientMappingDao.findByPatient(wlyyPrescriptionDO.getPatientCode());
            BasePatientDO basePatientDO = basePatientDao.findById(wlyyPrescriptionDO.getPatientCode());
            DoctorMappingDO doctorMappingDO = doctorMappingDao.findByDoctor(wlyyPrescriptionDO.getDoctor());
            WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findById(wlyyPrescriptionDO.getOutpatientId());
            if(null!=patientMappingDO){
                paramRequest.put("patientid",patientMappingDO.getMappingCode());
            }
            //获取医生编号
            BaseDoctorDO doctorDO = doctorDao.findById(wlyyOutpatientDO.getDoctor());
            String operatorId = null;
            if (doctorDO!=null){
                String url = entranceUrl+"selectDoctorInfo?idCard="+doctorDO.getIdcard();
                String response = httpClientUtil.get(url,"GBK");
                JSONObject object = JSONObject.parseObject(response);
                if(object.getInteger("status")==200){
                    String obj = object.getString("obj");
                    JSONArray array = JSONArray.parseArray(obj);
                    if (array!=null&&array.size()!=0){
                        JSONObject jsonObject = array.getJSONObject(0);
                        operatorId = jsonObject.getString("staffNo");
                    }
                }
            }
            if(null!=doctorMappingDO){
                paramRequest.put("operatorid",operatorId);
                paramRequest.put("operatorname",wlyyPrescriptionDO.getDoctorName());
            }
            paramRequest.put("type","2");
            WlyyPrescriptionEmrDO wlyyPrescriptionEmrDO =  prescriptionEmrDao.findEmrByPrescriptionId(prescriptionId);
            if (null!=wlyyPrescriptionEmrDO){
                paramRequest.put("id",wlyyPrescriptionEmrDO.getId());
                params.put("emrInfo",JSON.toJSONString(wlyyPrescriptionEmrDO));
            }
            if (null!=basePatientDO){
                paramRequest.put("patientAge",IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()));
                paramRequest.put("patientsex",IdCardUtil.getSexForIdcard(basePatientDO.getIdcard()));
                paramRequest.put("patientName",basePatientDO.getName());
                paramRequest.put("patientClan","0"); }
            if (null!=wlyyOutpatientDO){
                paramRequest.put("deptCode",wlyyOutpatientDO.getDeptName());
                paramRequest.put("outpatientCode","R"+wlyyOutpatientDO.getRegisterNo());
                paramRequest.put("eventno","R"+wlyyOutpatientDO.getRegisterNo());
            }
            paramRequest.put("templateid","1158");
            paramRequest.put("catalogid","50");
            paramRequest.put("emrtype","93");
            paramRequest.put("emrtitle","互联网医院");

            if (StringUtils.isNoneBlank(baseSign)){
                //UploadVO uploadVO=fileUploadService.uploadImagesBase64(baseSign,fastdfs_file_url);
                //paramRequest.put("baseSign","https://ih.xmheart.com/fastdfs/"+uploadVO.getFullUri());
                paramRequest.put("baseSign",baseSign);
            }
        }
        params.put("jsonInfo",paramRequest.toJSONString());
        String response = "";
        String url = entranceUrl+"returnEmrHtmlByHLW";

        logger.info("params"+params.toString());
        response = httpClientUtil.httpPost(url,params);
        logger.info("保存电子病历"+response);
        if (response.contains("error")||response.contains("ERROR")){
            return "faild";
        }else {
            return "success";
        }
    }
    /**
     * 获取历史病历
     * @param patientId 病人id
     * @param eventNo 病人住院号
     * @return
     */
    public List<WlyyPrescriptionEmrDO> selectHistoryEmr(String patientId,String eventNo) throws Exception {
        String response="";
        String url = entranceUrl+"selectEmrInfo?patientId="+patientId+"&eventNo="+eventNo;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        List<WlyyPrescriptionEmrDO> wlyyPrescriptionEmrDOList = new ArrayList<>();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            if("[[]]".equalsIgnoreCase(obj)||"[]".equalsIgnoreCase(obj)||StringUtils.isBlank(obj)){
                return null;
            }else {
                logger.info("obj:" + obj);
                JSONArray array = JSONArray.parseArray(obj.replace("[]", "\"\"")).getJSONArray(0);
                logger.info("arrayResponse:" + array.toJSONString());
                for (int i = 0; i < array.size(); i++) {
                    JSONObject jsonObject = array.getJSONObject(i);
                    logger.info("jsonObject:" + jsonObject);
                    WlyyPrescriptionEmrDO wlyyPrescriptionEmrDO = new WlyyPrescriptionEmrDO();
                    wlyyPrescriptionEmrDO.setComplaint(null == jsonObject.get("CHIEF_COMPLAINT") ? "" : jsonObject.get("CHIEF_COMPLAINT").toString());
                    wlyyPrescriptionEmrDO.setMedicalHistory(null == jsonObject.get("PRESENT_ILLNESS") ? "" : jsonObject.get("PRESENT_ILLNESS").toString());
                    wlyyPrescriptionEmrDO.setPastHistory(null == jsonObject.get("PAST_HISTORY") ? "" : jsonObject.get("PAST_HISTORY").toString());
                    wlyyPrescriptionEmrDO.setPhysicalExamination(null == jsonObject.get("PHYSICAL_EXAMINATION") ? "" : jsonObject.get("PHYSICAL_EXAMINATION").toString());
                    wlyyPrescriptionEmrDO.setAssistExamination(null == jsonObject.get("OBSERVE_RESULT") ? "" : jsonObject.get("OBSERVE_RESULT").toString());
                    wlyyPrescriptionEmrDO.setAllergicHistory(null == jsonObject.get("ALLERGY_HISTORY") ? "" : jsonObject.get("ALLERGY_HISTORY").toString());
                    wlyyPrescriptionEmrDO.setPopularHistory(null == jsonObject.get("EPIDEMIOLOGICAL") ? "" : jsonObject.get("EPIDEMIOLOGICAL").toString());
                    wlyyPrescriptionEmrDO.setSpecialHistory(null == jsonObject.get("SPECIAL_HISTORY") ? "" : jsonObject.get("SPECIAL_HISTORY").toString());
                    wlyyPrescriptionEmrDOList.add(wlyyPrescriptionEmrDO);
                }
            }
        }
        return wlyyPrescriptionEmrDOList;
    }
    /**
     * 查询历次就诊门诊病历文书
     * @param templateId
     * @param patientId 病人id
     * @param eventNo 病人住院号
     * @return
     */
    public String selectHistoryEmrRecord(String templateId,String patientId,String eventNo) throws Exception {
        String response="";
        String url = entranceUrl+"selectEmrDispRecord?templateId="+templateId+"&patientId="+patientId+"&eventNo="+eventNo;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            return obj;
        }else {
            return "获取失败";
        }
    }

    public JSONArray selectHistoryEmrFromEntrance(String patientId,String eventNo) throws Exception {
        String response="";
        JSONArray jsonArray = new JSONArray();
        PatientMappingDO mappingDO = patientMappingDao.findByPatient(patientId);
        String patient = null;
        if (mappingDO!=null){
            patient = mappingDO.getMappingCode();
        }
        String url = entranceUrl+"selectEmrInfo?patientId="+patient+"&eventNo="+eventNo;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        List<WlyyPrescriptionEmrDO> wlyyPrescriptionEmrDOList = new ArrayList<>();
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            if("[[]]".equalsIgnoreCase(obj)||"[]".equalsIgnoreCase(obj)||StringUtils.isBlank(obj)){
                return null;
            }else {
            logger.info("obj:"+obj);
            JSONArray array = JSONArray.parseArray(obj.replace("[]","\"\"")).getJSONArray(0);
            logger.info("arrayResponse:"+array.toJSONString());
            for (int j=0;j<array.size();j++){
                JSONObject object1 = array.getJSONObject(j);
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("DEPT_NAME",object1.getString("DEPT_NAME"));
                jsonObject.put("TREAT_DATE_TIME",DateUtil.getYyyymmddhhmmss(DateUtil.strToDateLong(object1.getString("VISIT_TIME"))));
                jsonObject.put("OPID",object1.getString("EMR_ID"));
                String firstFlag = object1.getString("FIRST_FLAG");
                if (firstFlag.equalsIgnoreCase("复诊")){
                    jsonObject.put("TREAT_DOCTOR_NAME",object1.getString("RETURN_DOC_SIGN"));
                }else if (firstFlag.equalsIgnoreCase("初诊")){
                    jsonObject.put("TREAT_DOCTOR_NAME",object1.getString("DOCTOR_SIGNATURE"));
                }
                jsonArray.add(jsonObject);
            }
            return jsonArray;
            }
        }else {
            return null;
        }
    }


    /**
     * 查询病历文书html信息
     * @param bstrEmrID
     * @return
     */
    public String selectBrowseSingleEMR(String bstrEmrID) throws Exception {
        String response="";
        String url = entranceUrl+"browseSingleEMR?bstrEmrID="+bstrEmrID;
        response = httpClientUtil.get(url,"GBK");
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            return obj;
        }else {
            return "获取失败";
        }
    }


//=====================hospital应用调用entrance应用============end=================


//============================hospital业务层==================start====================




    /**
     * 查询单条门诊记录
     * @param patient
     * @param conNo
     * @return
     */
    public WlyyOutpatientVO findOutpatientData(String patient, String conNo)throws Exception{
        logger.info("findOutpatientList patient:"+patient);
        String patNo =findHisPatNoByPatient(patient);
        if(StringUtils.isBlank(patNo)){
            return null;
        }
        logger.info("findOutpatientList patNo:"+patNo);
        WlyyOutpatientVO outpatientVO=selectOutpatientInfo(patNo,conNo);

        if(outpatientVO!=null){

            BasePatientDO patientDO = patientDao.findById(patient);
            outpatientVO.setSex(patientDO.getSex()+"");
            outpatientVO.setBirthday(patientDO.getBirthday());
            return outpatientVO;
        }
        return outpatientVO;
    }

    public String isEmty(String str){
        if (str.equalsIgnoreCase("[]")){
            return null;
        }else {
            return str;
        }
    }


    /**
     * 获取his居民id
     * @param patient
     * @return
     * @throws Exception
     */
    public String findHisPatNoByPatient(String patient)throws Exception{
        logger.info("findHisPatNoByPatient:"+patient);
        BasePatientDO patientDO = patientDao.findById(patient);
        logger.info("patientDO:"+patientDO.toString());
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        if(patientMappingDO!=null){
            return patientMappingDO.getMappingCode();
        }
        String patientId = "";
        JSONArray rs = selectPateintCard(patient);
        if (rs!=null&&rs.size()!=0){
            JSONObject object = rs.getJSONObject(0);
            patientId = object.getString("SICKID");
        }
        return patientId;
    }

    /*
     * @param registerSn 流水号
     * @param patient 居民code
     * @param admNo 住院唯一号
     * @param realOrder 处方号
     * @return
     */
    public List<WlyyPrescriptionVO> findPrescriptionList(String outPatientId,String realOrder) throws Exception {
        WlyyOutpatientDO outpatientDO = outpatientDao.findById(outPatientId);
        if (outpatientDO==null){
            throw new Exception("该门诊记录不存在！");
        }
        String registerSn = outpatientDO.getRegisterNo();
        if (!StringUtils.isNoneBlank(registerSn)){
            throw new Exception("挂号流水号不存在");
        }
        String admNo = outpatientDO.getAdmNo();
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(outpatientDO.getPatient());
        if (patientMappingDO==null||!StringUtils.isNoneBlank(patientMappingDO.getMappingCode())){
            throw new Exception("该居民映射表不存在！");
        }

        List<WlyyPrescriptionVO> wlyyPrescriptionVOList = selectOriginPrescriptionList(registerSn,patientMappingDO.getMappingCode(),admNo,realOrder);

        return wlyyPrescriptionVOList;
    }


    public List<WlyyPrescriptionVO> selectPrescriptionList(String registerSn,String patNo,String admNo,String realOrder,String startTime,String endTime) throws Exception {
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patNo);
        if (patientMappingDO==null||!StringUtils.isNoneBlank(patientMappingDO.getMappingCode())){
            throw new Exception("该居民映射表不存在！");
        }

        List<WlyyPrescriptionVO> wlyyPrescriptionVOList = selectOriginPrescriptionList(registerSn,patientMappingDO.getMappingCode(),admNo,realOrder);

        return wlyyPrescriptionVOList;
    }


    public Map<String,Object> updatePreStatus(String admNo,String realOrder,String status) throws Exception {
        Map<String,Object> map = new HashedMap();
        if (status.equalsIgnoreCase("1")){
            List<WlyyOutpatientDO> wlyyOutpatientDOList = outpatientDao.findByAdmNo(admNo);
            if (wlyyOutpatientDOList==null||wlyyOutpatientDOList.size()==0){
                throw new Exception("该就诊号查不到！");
            }
            for (WlyyOutpatientDO wlyyOutpatientDO:wlyyOutpatientDOList){
                String registerNo = wlyyOutpatientDO.getRegisterNo();
                if (!StringUtils.isNoneBlank(registerNo)){
                    throw new Exception("挂号流水号为空!");
                }
                PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(wlyyOutpatientDO.getPatient());
                List<WlyyPrescriptionDO> prescriptionDOList = prescriptionDao.findByOutpatientId(wlyyOutpatientDO.getId());
                if (prescriptionDOList==null||prescriptionDOList.size()==0){
                    List<WlyyPrescriptionVO> prescriptionVOList = selectOriginPrescriptionList(registerNo,patientMappingDO.getMappingCode(),admNo,realOrder);
                    for (WlyyPrescriptionVO prescriptionVO:prescriptionVOList){
                        WlyyPrescriptionDO prescriptionDO =JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(prescriptionVO)),WlyyPrescriptionDO.class);
                        prescriptionDO.setOutpatientId(wlyyOutpatientDO.getId());
                        if (status.equalsIgnoreCase("3")){
                            prescriptionDO.setStatus(30);
                        }
                        prescriptionDO= prescriptionDao.save(prescriptionDO);
                        //处方诊断表vo
                        List<WlyyPrescriptionDiagnosisVO> diagnosisVOS = prescriptionVO.getDiagnosisVOs();
                        for (WlyyPrescriptionDiagnosisVO diagnosisVO:diagnosisVOS){
                            WlyyPrescriptionDiagnosisDO prescriptionDiagnosisDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(diagnosisVO)),WlyyPrescriptionDiagnosisDO.class);
                            prescriptionDiagnosisDO.setPrescriptionId(prescriptionDO.getId());
                            diagnosisDao.save(prescriptionDiagnosisDO);
                        }
                        //药品表
                        List<WlyyPrescriptionInfoVO> infoVOList = prescriptionVO.getInfoVOs();
                        for (WlyyPrescriptionInfoVO infoVO:infoVOList){
                            WlyyPrescriptionInfoDO infoDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(infoVO)),WlyyPrescriptionInfoDO.class);
                            infoDO.setPrescriptionId(prescriptionDO.getId());
                            prescriptionInfoDao.save(infoDO);
                        }

                        List<WlyyInspectionVO> inspectionVOList = prescriptionVO.getInspectionVOs();
                        for (WlyyInspectionVO inspectionVO:inspectionVOList){
                            WlyyInspectionDO inspectionDO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(inspectionVO)),WlyyInspectionDO.class);
                            BeanUtils.copyProperties(inspectionVO,inspectionDO);
                            inspectionDO.setPrescriptionId(prescriptionDO.getId());
                            wlyyInspectionDao.save(inspectionDO);
                        }
                    }
                }
            }
        }else if (status.equalsIgnoreCase("2")){
            List<WlyyPrescriptionDO> prescriptionDOList =  prescriptionDao.findByAdmNoAndRealOrderList(admNo,realOrder);
            for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
                wlyyPrescriptionDO.setStatus(-1);
                prescriptionDao.save(wlyyPrescriptionDO);
                //检查
                List<WlyyInspectionDO> wlyyInspectionDOS = wlyyInspectionDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyInspectionDO inspectionDO:wlyyInspectionDOS){
                    inspectionDO.setDel(0);
                    wlyyInspectionDao.save(inspectionDO);
                }
                //药品
                List<WlyyPrescriptionInfoDO> prescriptionInfoDOS=prescriptionInfoDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyPrescriptionInfoDO prescriptionInfoDO:prescriptionInfoDOS){
                    prescriptionInfoDO.setDel(0);
                    prescriptionInfoDao.save(prescriptionInfoDO);
                }
                //诊断
                List<WlyyPrescriptionDiagnosisDO> diagnosisDOS = prescriptionDiagnosisDao.findByPrescriptionId(wlyyPrescriptionDO.getId(),1);
                for (WlyyPrescriptionDiagnosisDO diagnosisDO:diagnosisDOS){
                    diagnosisDO.setDel(0);
                    prescriptionDiagnosisDao.save(diagnosisDO);
                }
            }
        }else if (status.equalsIgnoreCase("3")){
            List<WlyyPrescriptionDO> prescriptionDOList =  prescriptionDao.findByAdmNoAndRealOrderList(admNo,realOrder);
            for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
                wlyyPrescriptionDO.setStatus(30);
                prescriptionDao.save(wlyyPrescriptionDO);
            }
        }else if (status.equalsIgnoreCase("4")){
            List<WlyyPrescriptionDO> prescriptionDOList =  prescriptionDao.findByAdmNoAndRealOrderList(admNo,realOrder);
            for (WlyyPrescriptionDO wlyyPrescriptionDO:prescriptionDOList){
                wlyyPrescriptionDO.setStatus(100);
                prescriptionDao.save(wlyyPrescriptionDO);
            }
        }
        return map;
    }
    //组装审药参数并发送到entrance
    public String checkInputInfo(String hisId,String payType,String doctor,String patient,List<WlyyPrescriptionDiagnosisDO> diagnosisDOS,List<WlyyPrescriptionInfoDO> infos) throws Exception{
        JSONObject jsonObject = initEntranceParam(payType,doctor,patient,diagnosisDOS);
        //如果重新审核药品 一定要把返回的orderNo的值拿到赋值到prescriptionId里
        if (StringUtils.isNotEmpty(hisId)){
            jsonObject.put("PATIENT_PRES_ID",hisId);

        }else {
            hisId = UUID.randomUUID().toString();
            jsonObject.put("PATIENT_PRES_ID",hisId);
        }
        if (null!=infos&&infos.size()>0) {
            String response = "";
            String returnJson = "";
            JSONArray array = new JSONArray();
            for (WlyyPrescriptionInfoDO infoDO:infos){
                array.add(infoDO);
            }
            String url = entranceUrl + "checkPrescription";
            Map<String,String> map = new HashedMap();
            map.put("infos",array.toJSONString());
            map.put("patientAndDoctor",jsonObject.toString());
            response = httpClientUtil.httpPost(url, map);
            logger.info("请求entrance的参数："+map.toString());
            logger.info("请求checkPrescription：" + response);
            JSONObject object = JSONObject.parseObject(response);
            WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
            if (object.getInteger("status") == 200) {
                wlyyHttpLogDO.setCode("200");
                String obj = object.getString("obj");
                System.out.println("obj:"+obj);
                if (StringUtils.isNotBlank(obj)) {
                    List<Map<String,Object>> returnList = transXmlCommen(obj);
                    Map<String,Object> checkIdMap = new HashMap<>();
                    checkIdMap.put("prescriptionOnly",hisId);
                    returnList.add(checkIdMap);
                    returnJson = JSONArray.toJSONString(returnList);
                    logger.info("返回到互联网医院的解析后的结果："+returnJson);
                    wlyyHttpLogDO.setDoctor(doctor);
                    wlyyHttpLogDO.setCreateTime(new Date());
                    wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                    wlyyHttpLogDO.setResponse(returnJson);
                    wlyyHttpLogDO.setName("checkPrescription");
                } else {
                    returnJson = "审方返回接口为空请检查参数是否正确";
                    logger.info(returnJson);
                    wlyyHttpLogDO.setCode("error");
                    wlyyHttpLogDO.setDoctor(doctor);
                    wlyyHttpLogDO.setCreateTime(new Date());
                    wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                    wlyyHttpLogDO.setResponse(returnJson);
                    wlyyHttpLogDO.setName("checkPrescription");
                }
            } else {
                returnJson = "entranceUrl接口调用失败";
                wlyyHttpLogDO.setCode("error");
                wlyyHttpLogDO.setDoctor(doctor);
                wlyyHttpLogDO.setCreateTime(new Date());
                wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                wlyyHttpLogDO.setResponse(returnJson);
                wlyyHttpLogDO.setName("checkPrescription");
            }
            wlyyHttpLogDao.save(wlyyHttpLogDO);
            return returnJson;
        }else {
            return "药品信息为空";
        }
    }
    //组装审药参数并发送到entrance保存处方
    public String saveCheckInputInfo(String prescriptionId,String payType,String doctor,String patient,List<WlyyPrescriptionDiagnosisDO> diagnosisDOS,List<WlyyPrescriptionInfoDO> infos) throws Exception{
        JSONObject jsonObject = initEntranceParam(payType,doctor,patient,diagnosisDOS);
        String tjPrescriptionId = "";
        //如果重新审核药品 一定要把返回的orderNo的值拿到赋值到prescriptionId里
        if (StringUtils.isNotEmpty(prescriptionId)) {
            tjPrescriptionId = prescriptionId;
            jsonObject.put("PATIENT_PRES_ID",tjPrescriptionId);
        }
        if (null!=infos&&infos.size()>0) {
            String response = "";
            String returnJson = "";
            JSONArray array = new JSONArray();
            for (WlyyPrescriptionInfoDO infoDO:infos){
                array.add(infoDO);
            }
            String url = entranceUrl + "saveCheckPrescription";
            Map<String,String> map = new HashedMap();
            map.put("infos",array.toJSONString());
            map.put("patientAndDoctor",jsonObject.toString());
            response = httpClientUtil.httpPost(url, map);
            logger.info("请求saveCheckPrescription参数："+map.toString());
            logger.info("saveCheckPrescription返回结果：" + response);
            JSONObject object = JSONObject.parseObject(response);
            WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
            if (object.getInteger("status") == 200) {
                wlyyHttpLogDO.setCode("200");
                String obj = object.getString("obj");
                System.out.println("obj:"+obj);
                if (StringUtils.isNotBlank(obj)) {
                    returnJson = obj;
                    logger.info("返回到互联网医院的解析后的结果："+returnJson);
                    wlyyHttpLogDO.setDoctor(doctor);
                    wlyyHttpLogDO.setCreateTime(new Date());
                    wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                    wlyyHttpLogDO.setResponse(returnJson);
                    wlyyHttpLogDO.setName("saveCheckPrescription");
                } else {
                    returnJson = "保存失败";
                    logger.info(returnJson);
                    wlyyHttpLogDO.setCode("failed");
                    wlyyHttpLogDO.setDoctor(doctor);
                    wlyyHttpLogDO.setCreateTime(new Date());
                    wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                    wlyyHttpLogDO.setResponse(returnJson);
                    wlyyHttpLogDO.setName("saveCheckPrescription");
                }
            } else {
                returnJson = "entranceUrl接口调用失败";
                wlyyHttpLogDO.setCode("error");
                wlyyHttpLogDO.setDoctor(doctor);
                wlyyHttpLogDO.setCreateTime(new Date());
                wlyyHttpLogDO.setRequest(infos + jsonObject.toString());
                wlyyHttpLogDO.setResponse(returnJson);
                wlyyHttpLogDO.setName("saveCheckPrescription");
            }
            wlyyHttpLogDao.save(wlyyHttpLogDO);
            return returnJson;
        }else {
            return "药品信息为空";
        }
    }
    //作废处方
    public String deleteCheckInputInfo(String prescriptionId,String payType,String doctor,String patient,List<WlyyPrescriptionDiagnosisDO> diagnosisDOS) throws Exception{
        JSONObject jsonObject = initEntranceParam(payType,doctor,patient,diagnosisDOS);
        String tjPrescriptionId = "";
        //如果重新审核药品 一定要把返回的orderNo的值拿到赋值到prescriptionId里
        if (StringUtils.isNotEmpty(prescriptionId)){
            tjPrescriptionId = prescriptionId;
            jsonObject.put("PATIENT_PRES_ID",tjPrescriptionId);
        }
        String response = "";
        String returnJson = "";
        String url = entranceUrl + "deleteCheckPrescription";
        Map<String,String> map = new HashedMap();
        map.put("infos","");
        map.put("patientAndDoctor",jsonObject.toString());
        response = httpClientUtil.httpPost(url, map);
        logger.info("请求deleteCheckPrescription参数："+map.toString());
        logger.info("deleteCheckPrescription返回结果：" + response);
        JSONObject object = JSONObject.parseObject(response);
        WlyyHttpLogDO wlyyHttpLogDO = new WlyyHttpLogDO();
        if (object.getInteger("status") == 200) {
            wlyyHttpLogDO.setCode("200");
            String obj = object.getString("obj");
            System.out.println("obj:"+obj);
            if (StringUtils.isNotBlank(obj)) { ;
                returnJson = obj;
                logger.info("返回到互联网医院的解析后的结果："+returnJson);
                wlyyHttpLogDO.setDoctor(doctor);
                wlyyHttpLogDO.setCreateTime(new Date());
                wlyyHttpLogDO.setRequest(map.toString());
                wlyyHttpLogDO.setResponse(returnJson);
                wlyyHttpLogDO.setName("saveCheckPrescription");
            } else {
                returnJson = "删除成功";
                logger.info(returnJson);
                wlyyHttpLogDO.setCode("删除成功");
                wlyyHttpLogDO.setDoctor(doctor);
                wlyyHttpLogDO.setCreateTime(new Date());
                wlyyHttpLogDO.setRequest(map.toString());
                wlyyHttpLogDO.setResponse(returnJson);
                wlyyHttpLogDO.setName("deleteCheckPrescription");
            }
        } else {
            returnJson = "entranceUrl接口调用失败";
            wlyyHttpLogDO.setCode("error");
            wlyyHttpLogDO.setDoctor(doctor);
            wlyyHttpLogDO.setCreateTime(new Date());
            wlyyHttpLogDO.setRequest(map.toString());
            wlyyHttpLogDO.setResponse(returnJson);
            wlyyHttpLogDO.setName("deleteCheckPrescription");
        }
        wlyyHttpLogDao.save(wlyyHttpLogDO);
        return returnJson;

    }
    //初始化医患和诊断参数
    public JSONObject initEntranceParam(String payType,String doctor,String patient,List<WlyyPrescriptionDiagnosisDO> diagnosisDOS){
        JSONObject jsonObject = new JSONObject();
        //先查询处方获得支付方式
        DoctorMappingDO doctorMappingDO = doctorMappingDao.findByDoctor(doctor);
        List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDoctorCode(doctor);
        BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
        if (null != doctorMappingDO && null != baseDoctorDO) {
            jsonObject.put("DOCTOR_ID", doctorMappingDO.getMappingCode());
            jsonObject.put("POSITION", baseDoctorDO.getJobTitleName());
            jsonObject.put("DOCTOR_NAME", baseDoctorDO.getName());
            if (null!=baseDoctorHospitalDO&&baseDoctorHospitalDO.size()>0){
                jsonObject.put("DEPT_CODE", baseDoctorHospitalDO.get(0).getDeptCode());
                jsonObject.put("DEPT_NAME", baseDoctorHospitalDO.get(0).getDeptName());
            }
        }
        PatientMappingDO patientMappingDO = patientMappingDao.findByPatient(patient);
        BasePatientDO basePatientDO = patientDao.findById(patient);
        jsonObject.put("PATIENT_NAME", basePatientDO.getName());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        if (null != patientMappingDO && null != basePatientDO) {
            jsonObject.put("PATIENT_ID", patientMappingDO.getMappingCode());
            if (null!=basePatientDO.getSex()){
                jsonObject.put("GENDER", 1==basePatientDO.getSex()?"男":"女");
            }else{
                jsonObject.put("GENDER", "男");
            }
            jsonObject.put("BIRTH", sdf.format(basePatientDO.getBirthday()));
        }
        jsonObject.put("FEE_TYPE", "1".equalsIgnoreCase(payType) ? "医保" : "自费");
        jsonObject.put("CREATE_DATE", sdf.format(new Date()));
        //组装诊断参数
        if (null != diagnosisDOS && diagnosisDOS.size() > 0) {
            List diagnosises = new ArrayList();
            for (WlyyPrescriptionDiagnosisDO wlyyPrescriptionDiagnosisDO : diagnosisDOS) {
                diagnosises.add(wlyyPrescriptionDiagnosisDO.getName());
            }
            jsonObject.put("diagnosises", StringUtils.strip(diagnosises.toString(),"[]"));
        }
        return jsonObject;
    }
    /**
     * 发送短信验证码
     * @return
     * @throws Exception
     */
    public Integer SendSmsToEntrance(String json) throws Exception {
        int result = 0;
        String response="";
        String url = entranceUrl+"SendSms";
        Map<String,String> map = new HashedMap();
        map.put("json",json);
        response = httpClientUtil.httpPost(url,map);
        logger.info("返回参数："+response);
        JSONObject object = JSONObject.parseObject(response);
        if(object.getInteger("status")==200){
            JSONArray jsonArray= JSONArray.parseArray(object.getString("obj"));
            if (jsonArray!=null&&jsonArray.size()!=0){
                JSONObject jsonObject = jsonArray.getJSONObject(0);
                if (jsonObject.getString("code").equalsIgnoreCase("10000")){
                    result=0;
                }
            }
        }
        return result;
    }



//============================hospital业务层==================start====================

//===========================entrance访问hospital============start=======================

    /**
     *
     * @param admNo
     * @param realOrder
     * @return
     */
    public JSONObject getSFExpressInfoToHospital(String admNo, String realOrder) throws Exception {
        String response="";
        String url = hospitalUrl+"open/noLogin/getSFExpressInfoNew";
        Map<String,String> map = new HashedMap();
        map.put("admNo",admNo);
        map.put("realOrder",realOrder);
        logger.info("jsonobject"+map.toString());
        response = httpClientUtil.httpPost(url,map);
        JSONObject object = JSONObject.parseObject(response);
        JSONObject jsonObject1 = new JSONObject();
        logger.info("object"+object.toJSONString());
        if(object.getInteger("status")==200){
            String obj = object.getString("obj");
            object = JSONObject.parseObject(obj);
            jsonObject1.put("mailNo",object.getString("mailNo"));
        }
        return jsonObject1;

    }
//===========================entrance访问hospital============end=======================

}
