using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Business;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Variables;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PTMedicalInsurance.FormSetter;
using PTMedicalInsurance.Common;


namespace PTMedicalInsurance.Forms
{
    public partial class BasicData : Form
    {
        //设置实例
        CenterBusiness cBus = new CenterBusiness();
        HisMainBusiness hBus = new HisMainBusiness();
        HisIrisServices hIS = new HisIrisServices();
        MIIrisServices mIS = new MIIrisServices();
        InvokeHelper invoker = new InvokeHelper();

        InsuServices Iis = new InsuServices();

        //1.声明自适应类实例
        AutoResizeForm asc = new AutoResizeForm();

        public JObject joSelectedInsuInfo;
        public int insuInfoIndex = 0;
        public int idInfoIndex = 0;
        DataTable dtExport;

        int iCount = 50;
        private string err = "";
        #region 初始化
        private void Form1_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;

            rbgDirecType.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(rbgDirecType_ValueChanged);

            LabExplain.Visible = false;

            uiLabel1.Text = $"{Global.inf.hospitalName}({Global.inf.hospitalNO})";
        }
        public BasicData()
        {
            InitializeComponent();

            rbgDirecType.SelectedIndex = 0;
            rbgDirecType_C.SelectedIndex = 0;
            rbgInsuDirecType_C.SelectedIndex = 0;
            rbSingleDown.Checked = true;
            rbOnlyName.Checked = true;

            rbSelf.Checked = true;
            this.rbgDirecType.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(this.rbgDirecType_ValueChanged);
            this.pgDownload.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgDownload_PageChanged);
            this.pgCenterDirect.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgCenterDirect_PageChanged);
            this.pgHISDirect.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgHISDirect_PageChanged);
            Font rowFont = new Font("UTF-8", 8);
            Font columnFont = new Font("UTF-8", 9);
            rbgDirecType.SelectedIndex = 8;
            rbAll.Checked = true;
            this.rbAll.ValueChanged += new Sunny.UI.UIRadioButton.OnValueChanged(this.rbAll_ValueChanged);

            this.rbSelf.ValueChanged += new Sunny.UI.UIRadioButton.OnValueChanged(this.GetMainInterfaceDr);
            this.rbSpecial.ValueChanged += new Sunny.UI.UIRadioButton.OnValueChanged(this.GetMainInterfaceDr);
            this.rbMain.ValueChanged += new Sunny.UI.UIRadioButton.OnValueChanged(this.GetMainInterfaceDr);
            //tabControl1.SelectedIndex = 1;

            //this.StartPosition = FormStartPosition.CenterParent;
            asc.controllInitializeSize(this);
            asc.controlAutoSize(this);

            GridViewSetter gvs = new GridViewSetter();
            gvs.SetHeaderTextOfMapping_HisDirectory(dgvHISDirectory);

            GetMainInterfaceDr(null,true);

        }
        #endregion

        #region  函数封装
        private void queryInsuDirectory(int currentPage, int pageSize, int directoryType, int interfaceDr, string code)
        {
            try
            {
                string dirCode = "";
                string dirName = "";
                string approvalNO = "";
                string DosageForm = "";
                string Specifications = "";
                string manufacturers = "";
                Sunny.UI.UIDataGridView dgv;
                Sunny.UI.UIPagination pg;
                if (tabControl1.SelectedIndex == 0)
                {
                    dirCode = tbDirectoryCode.Text;
                    dirName = tbDircetoryName.Text;
                    approvalNO = "";
                    dgv = dgvDirectoy;
                    pg = pgDownload;
                }
                else
                {
                    dirName = tbCenterDirectoryFilter.Text;
                    dirCode = tbInsuCode.Text;
                    dgv = dgvCenterDirectory;
                    approvalNO = tbApprovalNO.Text;
                    pg = pgCenterDirect;
                    //manufacturers = tbManufacturer.Text;
                    //DosageForm = tbDosageForm.Text;
                    //Specifications = tbSpecifications.Text;
                }
                JObject joInput = new JObject {

                    { "currentPage" , currentPage },
                    { "pageSize" , pageSize },
                    { "serviceCode" , code },
                    { "directoryType" , directoryType },
                    { "directoryCode" , dirCode },
                    { "directoryName" , dirName },
                    { "approvalNO" , approvalNO },
                    { "dosageForm" , DosageForm },
                    { "specifications" , Specifications },
                    { "manufacturers" , manufacturers },
                    { "directoryDr" , interfaceDr }
                };

                JObject joRtn = mIS.getMIDirectoryByPagination(joInput);

                if (joRtn["errorCode"].ToString() != "0")
                {
                    MessageBox.Show("IRIS数据返回错误:" + joRtn["errorMessage"].ToString());
                    return;
                }
                if (joRtn["result"]["rows"] == null)
                {
                    MessageBox.Show("该节点不存在");
                    return;
                }

                if (joRtn["result"]["total"].ToString() == "0")
                {
                    MessageBox.Show("未查询到数据");
                    dgv.DataSource = null;
                    return;
                }

                DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
                int totalCount = int.Parse(joRtn["result"]["total"].ToString());
                pg.TotalCount = totalCount;
                pg.PageSize = pageSize;
                dgv.DataSource = dt;
                dgv.Columns[0].ReadOnly = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("查询异常：" + ex.Message);
            }
        }
        private void setHeaderTxt(int directoryType, Sunny.UI.UIDataGridView dgv)
        {
            GridViewSetter gvdSetter = new GridViewSetter();
            switch (directoryType)
            {
                case 0://药品
                    {
                        gvdSetter.SetHeaderTextOfDrug(dgv);
                        break;
                    }
                case 1://诊疗
                    {
                        gvdSetter.SetHeaderTextOfMedicalService(dgv);
                        break;
                    }
                case 2://材料
                    {
                        gvdSetter.SetHeaderTextOfMaterials(dgv);
                        break;
                    }
                case 3://疾病诊断
                    {
                        gvdSetter.SetHeaderTextOfDiagnose(dgv);
                        break;
                    }
                case 4://手术
                    {
                        gvdSetter.SetHeaderTextOfDiagnose(dgv);
                        break;
                    }
                case 5://慢性病
                    {
                        gvdSetter.SetHeaderTextOfDiagnose(dgv);
                        break;
                    }
                case 6://DRGs
                    {
                        gvdSetter.SetHeaderTextOfDiagnose(dgv);
                        break; ;
                    }
                case 7://日间手术
                    {
                        gvdSetter.SetHeaderTextOfDiagnose(dgv);
                        break; ;
                    }
                case 8://字典表
                    {
                        gvdSetter.SetHeaderTextOfDictionary(dgv);
                        break;
                    }

                case 9://中药饮片下载
                    {
                        gvdSetter.SetHeaderTextOfChineseMedicine(dgv);
                        break;
                    }
                case 10://医药机构制剂目录下载
                    {
                        gvdSetter.SetHeaderTextOfPreparation(dgv);
                        break;
                    }
                case 11://肿瘤形态学下载
                    {
                        gvdSetter.SetHeaderTextOfTumorMorphology(dgv);
                        break;
                    }
                case 12://中医疾病下载
                    {
                        gvdSetter.GetChineseDiagnoseJsonByTxt(dgv);
                        break;
                    }
                case 13://中医证候下载
                    {
                        gvdSetter.GetTCMSyndromeJsonByTxt(dgv);
                        break;
                    }

                case 14://民族药品
                    {
                        gvdSetter.GetEthnicMedicineJsonByTxt(dgv);
                        break;
                    }
                case 15://目录信息查询
                    {
                        gvdSetter.GetMedInsuCatalogJsonByTxt(dgv);
                        break;
                    }
                case 16://医疗与医保目录匹配关系查询
                    {
                        gvdSetter.GetMedInsuCorrespondencJsonByTxt(dgv);
                        break;
                    }
                case 17://医药机构目录匹配查询
                    {
                        gvdSetter.GetMedInstCorrespondencJsonByTxt(dgv);
                        break;
                    }
                case 18://医保目录限价查询
                    {
                        gvdSetter.GetMedInsuFixedPriceJsonByTxt(dgv);
                        break;
                    }
                case 19://医保目录先自付比例下载
                    {
                        gvdSetter.GetMedInsuFirstPayProportionJsonByTxt(dgv);
                        break;
                    }
                case 20://医药机构信息
                    {
                        gvdSetter.GetMedicalInstitutionJsonByTxt(dgv);
                        break;
                    }
            }

            gvdSetter.DatagridviewColumnWidthAdaptation(dgv);
        }
        private void queryHISInsuDirectory(int directoryType, int pageIndex, int count, Sunny.UI.UIDataGridView dgv, int interfaceDr)
        {
            string code = "09010042";

            if (tabControl1.SelectedIndex == 0)
            {
                if (rbgDirecType.SelectedIndex == 20)
                {
                    code = "090100XX";
                }
                else if (rbgDirecType.SelectedIndex == 8)
                {
                    code = "09010043";
                }
                else
                {
                    code = "09010042";
                }

                if (rbgDirecType.SelectedIndex <= 13)
                {
                    queryInsuDirectory(pageIndex, count, directoryType + 1, interfaceDr, code);
                    setHeaderTxt(directoryType, dgv);
                }
                else  //几个医保查询该部分数据不存数据库只是临时查询(除医疗机构信息查询外)
                {
                    //生成DataView列
                    //setHeaderTxt(directoryType, dgv);

                    string pages, recordCounts, errorMessage;
                    dynamic joData = GetInput(rbgDirecType.SelectedIndex, out string funNo);
                    JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(funNo, joData);

                    if (joRtn["infcode"].ToString() == "0")
                    {
                        try
                        {
                            Sunny.UI.UIPagination pg;

                            dgv = dgvDirectoy;
                            pg = pgDownload;
                            DataTable dt;

                            if (rbgDirecType.SelectedIndex == 20)
                            {
                                dt = (DataTable)joRtn["output"]["medinsinfo"].ToObject(typeof(DataTable));

                                if (joRtn["output"]["medinsinfo"].ToString() == "")
                                {
                                    MessageBox.Show("查询成功,但返回结果集为空！");
                                    //return;
                                }

                                pg.TotalCount = 50;
                                pg.PageSize = 50;
                            }
                            else
                            {
                                pages = joRtn["output"]["pages"].ToString();                 //页数
                                recordCounts = joRtn["output"]["recordCounts"].ToString();   //总记录条数

                                dt = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable));

                                if (recordCounts == "0")
                                {
                                    MessageBox.Show("查询成功,但返回结果集为空！");
                                    //return;
                                }

                                pg.TotalCount = int.Parse(recordCounts);
                                pg.PageSize = int.Parse(TexBYSJL.Text); //int.Parse(pages);
                            }

                            dgv.DataSource = dt;
                            dgv.Columns[0].ReadOnly = true;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("查询异常：" + ex.Message);
                        }
                    }
                    else
                    {
                        errorMessage = "调用交易" + funNo + "出现错误，请查看日志！"; //joImportRtn["errorMessage"].ToString();
                        MessageBox.Show(errorMessage);
                        return;
                    }
                }
            }
            else
            {
                queryInsuDirectory(pageIndex, count, directoryType + 1, interfaceDr, code);
                setHeaderTxt(directoryType, dgv);
            }

            GridViewSetter gridSetter = new GridViewSetter();
            gridSetter.DatagridviewColumnWidthAdaptation(dgvCenterDirectory);
        }
        private int queryHISDirectory(int currentPage, int pageSize, out string errMsg)
        {
            errMsg = "";
            string directoryType = string.Empty;
            switch (rbgDirecType_C.SelectedIndex)
            {
                case 0:
                    {
                        directoryType = "drugs";
                        break;
                    }
                case 1:
                    {
                        directoryType = "diagnosi";
                        break;
                    }
                case 2:
                    {
                        directoryType = "consumables";
                        break;
                    }
            }

            JObject joHISRtn = new JObject();
            JObject joRtn = new JObject();
            InvokeHelper invoker = new InvokeHelper();
            string flag = "";
            //全部是先调HIS，然后再匹配医保平台的对照关系
            if (rbAll.Checked)
            {
                JArray jaPagination = new JArray();
                JArray jaParams = new JArray();
                flag = "All";
                dynamic joParam = new JObject();
                joParam.code = "";
                joParam.descripts = "";
                joParam.FindType = new JArray();
                joParam.TypeID = "";
                joParam.alias = tbHISDirectoryFilter.Text;
                joParam.include = "Hosp";
                joParam.groupID = "324";
                joParam.hospID = Global.inf.hisHospitalDr;
                joParam.interfaceDr = Global.inf.mainInterfaceDr;
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.specInput = "";
                jaParams.Add(joParam);

                dynamic joPagination = new JObject();
                joPagination.pageSize = pageSize;
                //joPagination.pageSize = 2;
                joPagination.currentPage = currentPage;
                joPagination.sortColumn = "Code";
                joPagination.sortOrder = "asc";
                jaPagination.Add(joPagination);
                //该服务需要改写，需要跟（CloudMedicalInsurancePlatform.Tables.MapRelation）进行关联
                //joInParams.code = "09010038";
                if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0)
                {
                    return -1;
                }
                joRtn = mIS.ConvertHISDir(joHISRtn);
                if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
                {
                    return -1;
                }
            }
            //已对照是先调云医保，然后再匹配HIS
            if (rbMaped.Checked)
            {
                JArray jaPagination = new JArray();
                JArray jaParams = new JArray();
                flag = "Maped";
                dynamic joParam = new JObject();
                joParam.alias = tbHISDirectoryFilter.Text;
                joParam.InsuAlias = tbMappedInfo.Text;
                joParam.HospitalDr = Global.inf.hospitalDr;
                joParam.InterfaceDr = Global.inf.mainInterfaceDr;
                joParam.hisType = directoryType;
                jaParams.Add(joParam);
                dynamic joPagination = new JObject();
                joPagination.pageSize = pageSize;
                joPagination.currentPage = currentPage;
                joPagination.sortColumn = "HisCode";
                joPagination.sortOrder = "asc";
                jaPagination.Add(joPagination);

                JObject joMIRtn = mIS.GetMappedHISDir(jaPagination, jaParams);

                if (JsonHelper.parseIrisRtnValue(joMIRtn, out errMsg) != 0)
                {
                    return -1;
                }

                JArray jaMaped = JArray.FromObject(joMIRtn["result"]["Data"]);
                if (jaMaped.Count < 1)
                {
                    errMsg = "未查询到对照数据！";
                    dgvHISDirectory.DataSource = null;
                    return -1;
                }
                //传给HIS，进行匹配
                joParam = new JObject();
                joParam.TotalCount = joMIRtn["result"]["TotalCount"];
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.hospID = Global.inf.hisHospitalDr;
                joParam.mainInterfaceDr = Global.inf.mainInterfaceDr;
                joParam.alias = tbHISDirectoryFilter.Text;
                joParam.include = "Hosp";
                joParam.groupID = "324";
                joParam.compareArr = joMIRtn["result"]["Data"];
                jaParams = new JArray();
                jaParams.Add(joParam);
                if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0)
                {
                    return -1;
                }
                else
                {
                    JArray jaData = JArray.Parse(JsonHelper.getDestValue(joRtn, "result.Data"));
                    for (int i = 0; i < jaData.Count; i++)
                    {
                        jaData[i]["flag"] = new JObject();
                        jaData[i]["flag"] = "已对照";
                    }
                    joRtn["result"]["Data"] = jaData;
                }

            }
            //未对照
            if (rbNoMaped.Checked)
            {
                JArray jaPagination = new JArray();
                JArray jaParams = new JArray();
                flag = "All";
                dynamic joParam = new JObject();
                joParam.code = "";
                joParam.descripts = "";
                joParam.FindType = new JArray();
                joParam.TypeID = "";
                joParam.alias = tbHISDirectoryFilter.Text;
                joParam.include = "Hosp";
                joParam.groupID = "324";
                joParam.hospID = Global.inf.hisHospitalDr;
                joParam.interfaceDr = Global.inf.mainInterfaceDr;
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.specInput = "";
                jaParams.Add(joParam);

                dynamic joPagination = new JObject();
                joPagination.pageSize = pageSize; //pageSize;
                //joPagination.pageSize = 2;
                joPagination.currentPage = currentPage;
                joPagination.sortColumn = "Code";
                joPagination.sortOrder = "asc";
                jaPagination.Add(joPagination);

                //1.获取全部HIS目录
                if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0)
                {
                    return -1;
                }

                joRtn = mIS.GetNoMappHISDir(joHISRtn);
                if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
                {
                    return -1;
                }
            }

            DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable));
            dtExport = dt;
            int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString());
            pgHISDirect.TotalCount = totalCount;
            pgHISDirect.PageSize = 50;
            dgvHISDirectory.DataSource = null;
            dgvHISDirectory.DataSource = dt;
            dgvHISDirectory.Columns[0].ReadOnly = true;
            return 0;
        }
        private void Mapping()
        {
            int iHis = dgvHISDirectory.CurrentRow.Index;
            if (dgvCenterDirectory.CurrentRow == null)
            {
                MessageBox.Show("请查询中心目录");
                return;
            }
            int iCenter = dgvCenterDirectory.CurrentRow.Index;
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            DataTable dtCenter = (DataTable)dgvCenterDirectory.DataSource;

            dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Code"].Value.ToString();
            dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Name"].Value.ToString();


            int hisType = rbgDirecType_C.SelectedIndex + 1;
            string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); ;

            JArray jaParams = new JArray();
            dynamic jsonTemp = new JObject();
            jsonTemp.ID = dtHis.Rows[iHis]["MapID"];
            jsonTemp.HospitalDr = Global.inf.hospitalDr;
            jsonTemp.updateUserID = Global.user.ID;
            jsonTemp.InterfaceDr = Global.inf.mainInterfaceDr;
            jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value;
            jsonTemp.HISName = dgvHISDirectory.Rows[iHis].Cells["itemDesc"].Value;
            jsonTemp.ChargeItemDr = dtHis.Rows[iHis]["ID"];
            jsonTemp.DiretoryDr = dtCenter.Rows[iCenter]["medInsuDirectoryID"];
            //1.已对照  2.已对照但未上传  3 已对照且已上传
            jsonTemp.State = 1;
            jsonTemp.HisType = hisType;
            jsonTemp.HisTypeName = hisTypeName;
            jsonTemp.InsuCode = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Code"].Value;
            jsonTemp.InsuName = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Name"].Value;
            jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            jaParams.Add(jsonTemp);

            JObject joIn = new JObject();
            joIn.Add(new JProperty("params", jaParams));
            joIn.Add("code", "09010040");
            InvokeHelper invoker = new InvokeHelper();
            JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "插入对照信息");
            //JObject joRtn = JObject.Parse(irisRtn);

            if ((int)joRtn["errorCode"] == 0)
            {
                dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "已对照";
            }
            else
            {
                dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "对照失败";
            }

        }
        private void CancleMapping()
        {
            int iHis = dgvHISDirectory.CurrentRow.Index;
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;

            JArray jaParams = new JArray();
            dynamic jsonTemp = new JObject();
            jsonTemp.ID = dtHis.Rows[iHis]["MapID"];
            jsonTemp.HospitalDr = Global.inf.hospitalDr;
            jsonTemp.updateUserID = Global.user.ID;
            jsonTemp.InterfaceDr = Global.inf.mainInterfaceDr;
            jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value;
            jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            jaParams.Add(jsonTemp);

            JObject joIn = new JObject();
            joIn.Add(new JProperty("params", jaParams));
            joIn.Add("code", "09010041");
            InvokeHelper invoker = new InvokeHelper();
            JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "取消对照");

            if ((int)joRtn["errorCode"] == 0)
            {
                dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = "";
                dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = "";
                dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "";
            }
            else
            {
                dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "取消失败";
            }
        }
        /// <summary>
        /// 几个医保查询的交易组织入参
        /// </summary>
        /// <param name="Index"></param>
        /// <param name="funNo"></param>
        /// <returns></returns>
        private JObject GetInput(int Index, out string funNo)
        {
            funNo = "";
            dynamic joData = new JObject();
            switch (Index)
            {
                case 14://民族药品目
                    {
                        funNo = "1304";
                        joData.med_list_codg = tbDirectoryCode.Text; //医疗目录编码
                        joData.genname_codg = "";  //通用名编号
                        joData.drug_genname = "";  //药品通用名
                        joData.drug_prodname = tbDircetoryName.Text; //药品商品名
                        joData.reg_name = "";      //注册名称
                        joData.tcmherb_name = "";  //中草药名称
                        joData.mlms_name = "";     //药材名称
                        joData.vali_flag = "";     //有效标志
                        joData.rid = "";           //唯一记录号
                        joData.ver = "";           //版本号
                        joData.ver_name = "";      //版本名称
                        joData.opt_begn_time = ""; //经办开始时间
                        joData.opt_end_time = "";  //经办结束时间
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 15://目录信息查询
                    {
                        funNo = "1312";
                        joData.query_date = ""; //查询时间点
                        joData.hilist_code = tbDirectoryCode.Text;  //医保目录编码
                        joData.insu_admdvs = "";  //参保机构医保区划
                        joData.begndate = ""; //开始日期
                        joData.hilist_name = tbDircetoryName.Text;      //医保目录名称
                        joData.wubi = "";  //五笔助记码
                        joData.pinyin = "";     //拼音助记码
                        joData.med_chrgitm_type = "";     //医疗收费项目类别
                        joData.chrgitm_lv = "";           //收费项目等级
                        joData.lmt_used_flag = "";           //限制使用标志
                        joData.list_type = "";      //目录类别
                        joData.med_use_flag = ""; //医疗使用标志
                        joData.matn_used_flag = "";  //生育使用标志
                        joData.hilist_use_type = "";  //医保目录使用类别
                        joData.lmt_cpnd_type = "";  //限复方使用类型
                        joData.vali_flag = "";  //有效标志
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 16://医疗与医保目录匹配
                    {
                        funNo = "1316";
                        joData.query_date = "";         //查询时间点
                        joData.medins_list_codg = "";   //定点医药机构目录编号
                        joData.hilist_code = tbDirectoryCode.Text;        //医保目录编码
                        joData.list_type = "";          //目录类别
                        joData.insu_admdvs = "";        //参保机构医保区划
                        joData.begndate = "";           //开始日期
                        joData.vali_flag = "";          //有效标志
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 17://医药机构目录匹配
                    {
                        funNo = "1317";
                        joData.query_date = "";         //查询时间点
                        joData.fixmedins_code = "";     //定点医药机构编号
                        joData.medins_list_codg = "";   //定点医药机构目录编号
                        joData.medins_list_name = "";   //定点医药机构目录名称
                        joData.insu_admdvs = "";        //参保机构医保区划   
                        joData.list_type = "";          //目录类别
                        joData.med_list_codg = tbDirectoryCode.Text;      //医疗目录编码
                        joData.begndate = "";           //开始日期
                        joData.vali_flag = "";          //有效标志
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 18://医保目录限价
                    {
                        funNo = "1318";
                        joData.query_date = "";           //查询时间点
                        joData.hilist_code = tbDirectoryCode.Text;          //医保目录编码
                        joData.hilist_lmtpric_type = "";  //医保目录限价类型
                        joData.overlmt_dspo_way = "";     //医保目录超限处理方式
                        joData.insu_admdvs = "";          //参保机构医保区划
                        joData.begndate = "";             //开始日期
                        joData.enddate = "";              //结束日期
                        joData.vali_flag = "";            //有效标志
                        joData.rid = "";                  //唯一记录号
                        joData.tabname = "";              //表名
                        joData.poolarea_no = "";          //统筹区
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 19://医保目录先自付比例
                    {
                        funNo = "1319";
                        joData.query_date = "";           //查询时间点
                        joData.hilist_code = tbDirectoryCode.Text;          //医保目录编码
                        joData.selfpay_prop_psn_type = "";//医保目录自付比例人员类别
                        joData.selfpay_prop_type = "";    //目录自付比例类别
                        joData.insu_admdvs = "";          //参保机构医保区划
                        joData.begndate = "";             //开始日期
                        joData.enddate = "";              //结束日期
                        joData.vali_flag = "";            //有效标志
                        joData.rid = "";                  //唯一记录号
                        joData.tabname = "";              //表名
                        joData.poolarea_no = "";          //统筹区
                        joData.updt_time = TexDate.Text;  //更新时间
                        joData.page_num = TexDQYS.Text;   //当前页数
                        joData.page_size = TexBYSJL.Text; //本页数据量

                        break;
                    }
                case 20://医药机构信息
                    {
                        funNo = "1201";
                        joData.fixmedins_type = "1"; //定点医疗服务机构类型 1定点医疗机构,2定点零售药店,3工伤定点康复机构,4辅助器具配置机构,5计划生育服务机构
                        joData.fixmedins_name = TexYYMC.Text;  //定点医药机构名称 
                        joData.fixmedins_code = "";  //定点医药机构编号 

                        break;
                    }
            }

            return joData;
        }

        private string GetListType(int hisType,string source)
        {
            if (string.IsNullOrEmpty(source))
            {

                if (hisType == 1)
                {
                    return "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 
                }
                else if (hisType == 2)
                {
                    return "201";
                }
                else 
                {
                    return "301";
                }
            }
            else
            {
                return source;
            }
        }
        private int  UpdateUploadStatus(string ids, int state,out string errMsg)
        {
            if (string.IsNullOrEmpty(ids))
            {
                errMsg = "更新状态失败!mapID为空！";
                return -1;
            }

            dynamic joInput = new JObject();
            joInput.HospitalDr = Global.inf.hospitalDr;
            joInput.InterfaceDr = Global.inf.interfaceDr;
            joInput.ID = ids;
            joInput.state = state;
            JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010103", joInput).ToString(), "更新上传状态");
            if (joRtn["errorCode"].Text() != "0")
            {
                errMsg = "更新状态失败!" + joRtn["errorMessage"].ToString();
                return -1;
            }
            else
            {
                errMsg = "";
                return 0;
            }
        }
        private int SingleUpload(out string errMsg)
        {
            string sMLLX = "";

            if ((dgvHISDirectory.CurrentRow == null))
            {
                errMsg = "请查询HIS目录对照关系";
                return -1;
            }
            
            //单条目录对照关系上传
            int iHis = dgvHISDirectory.CurrentRow.Index;
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;

            //调用3301目录对照上传
            JObject joData = new JObject();
            joData.Add("fixmedins_hilist_id", dtHis.Rows[iHis]["itemCode"].ToString());
            joData.Add("fixmedins_hilist_name", dtHis.Rows[iHis]["itemDesc"].ToString());
            joData.Add("list_type", GetListType(rbgDirecType_C.SelectedIndex + 1, dtHis.Rows[iHis]["listType"].ToString()));            //目录类别
            joData.Add("med_list_codg", dtHis.Rows[iHis]["InsuCode"].ToString());     //医疗目录编码
            joData.Add("begndate", "2023-12-01");      //开始日期
            joData.Add("enddate", "");         //结束日期
            joData.Add("aprvno", "");
            joData.Add("dosform", "");
            joData.Add("exct_cont", "");
            joData.Add("item_cont", "");
            joData.Add("prcunt", "");
            joData.Add("spec", "");
            joData.Add("pacspec", "");
            joData.Add("memo", "");
            JObject joInput = new JObject();
            JArray jaData = new JArray();
            jaData.Add(joData);
            joInput.Add("data", jaData);
            JObject joRtn = invoker.invokeCenterService("3301", JsonHelper.setCenterInpar("3301", joInput));
            if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
            {
                return -1;
            }
            else
            {
                return UpdateUploadStatus(dtHis.Rows[iHis]["MapID"].ToString(), 3, out errMsg);
            }
        }
        /// <summary>
        /// 单条撤销目录对照关系上传
        /// </summary>
        private int SingleCancelUpload(out string errMsg)
        {
            if ((dgvHISDirectory.CurrentRow == null))
            {
                errMsg = "请查询HIS目录对照关系";
                return -1;
            }
            //撤销目录对照关系
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            int iHis = dgvHISDirectory.CurrentRow.Index;
            //调用3302目录对照撤销
            JObject joData = new JObject();
            joData.Add("fixmedins_code", Global.inf.hospitalNO);
            joData.Add("fixmedins_hilist_id", dtHis.Rows[iHis]["HisCode"].ToString());
            joData.Add("list_type", GetListType(rbgDirecType_C.SelectedIndex + 1, dtHis.Rows[iHis]["listType"].ToString()));            //目录类别
            joData.Add("med_list_codg", dtHis.Rows[iHis]["InsuCode"].ToString());     //医疗目录编码          
            JObject joInput = new JObject();
            joInput.Add("data", joData);
            JObject joRtn = invoker.invokeCenterService("3302", JsonHelper.setCenterInpar("3302", joInput));
            if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
            {
                return -1;
            }
            else
            {
                return UpdateUploadStatus(dtHis.Rows[iHis]["MapID"].ToString(), 2, out errMsg);
            }
        }
        /// <summary>
        /// 全部上传目录对照关系
        /// </summary>
        private void AllUpLoad()
        {
            if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
            {
                MessageBox.Show("请查询HIS目录对照关系");
                return;
            }

            string Msg = "";
            bool bOk = true;
 
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            for (int i = 0; i < dtHis.Rows.Count; i++)
            {
                dgvHISDirectory.CurrentCell = dgvHISDirectory.Rows[i].Cells[0];
                if (SingleUpload(out err) != 0)
                {
                    bOk = false;
                    Msg = Msg + $"<{err}>";
                }
            }

            if (bOk == false)
            {
                MessageBox.Show("全部目录对照关系上传成功，部分上传异常：" + Msg);
            }
            else
            {
                MessageBox.Show("全部目录对照关系上传成功！");
            }
        }
        /// <summary>
        /// 全部撤销目录对照关系上传
        /// </summary>
        private void AllCancelUpload()
        {
            if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
            {
                MessageBox.Show("请查询HIS目录对照关系");
                return;
            }

            string  Msg = "";
            bool bOk = true;

            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            for (int i = 0; i < dtHis.Rows.Count; i++)
            {
                dgvHISDirectory.CurrentCell = dgvHISDirectory.Rows[i].Cells[0];
                if (SingleCancelUpload(out err) != 0)
                {
                    bOk = false;
                    Msg = Msg + $"<{err}>";
                }
            }

            if (bOk == false)
            {
                MessageBox.Show("全部撤销目录对照关系上传成功，部分撤销异常：" + Msg);
            }
            else
            {
                MessageBox.Show("全部撤销目录对照关系上传成功！");
            }

        }
        /// <summary>
        /// 医保目录单个版本号的下载
        /// </summary>
        /// <param name="ver"></param>
        /// <param name="directoryType"></param>
        /// <param name="uiProcessBar"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public int SingleDownload(string ver, int directoryType, Sunny.UI.UIProcessBar uiProcessBar, out string errorMessage)
        {

            string txtPath = string.Empty;
            errorMessage = "";
            int iResult = -1;
            string funNo = "";
            switch (directoryType)
            {
                case 0://药品
                    {
                        funNo = "1301";   //"1301";
                        break;
                    }
                case 1://诊疗
                    {
                        funNo = "1305";
                        break;
                    }
                case 2://材料
                    {
                        funNo = "1306";
                        break;
                    }
                case 3://疾病诊断
                    {
                        funNo = "1307";
                        break;
                    }
                case 4://手术
                    {
                        funNo = "1308";
                        break;
                    }
                case 5://慢性病
                    {
                        funNo = "1309";
                        break;
                    }
                case 6://DRGs
                    {
                        funNo = "1310";
                        break; ;
                    }
                case 7://日间手术
                    {
                        funNo = "1311";
                        break;
                    }
                case 8://字典表
                    {
                        break;
                    }

                case 9://中药饮片
                    {
                        funNo = "1302";
                        break;
                    }
                case 10://医药机构制剂
                    {
                        funNo = "1303";
                        break;
                    }
            }
            try
            {
                JObject joRtn = hBus.DownloadDirectory(funNo, ver);

                if (JsonHelper.parseIrisRtnValue(joRtn, out errorMessage) == 0)
                {
                    txtPath = joRtn["filePath"].ToString();

                    //MessageBox.Show("获取txt数据往IRIS插入文件路径："+ txtPath);

                    DataImoport bus = new DataImoport();
                    JObject joImportRtn = bus.importDataToIrisByTxt(txtPath, 50, directoryType + 1, uiProcessBar);

                    //MessageBox.Show("往IRIS插入数据：" + joImportRtn.ToString());

                    //if (JsonHelper.parseCenterRtnValue(joImportRtn, out errorMessage) == 0)
                    if (JsonHelper.parseIrisRtnValue(joImportRtn, out errorMessage) == 0)
                    {
                        iResult = 0;
                    }
                    else
                    {
                        Global.writeLog(joImportRtn.ToString());
                        errorMessage = "导入数据出现错误，请查看日志！";//joImportRtn["errorMessage"].ToString();
                    }
                }
                return iResult;
            }
            catch (Exception ex)
            {
                errorMessage = "SingleDownload提示:" + ex.Message;
                return -1;
            }
        }

        private void GetMainInterfaceDr(object sender, bool value)
        {
            string errMsg = "";
            if (rbSelf.Checked)
            {
                Global.inf.mainInterfaceDr = Global.inf.interfaceDr;
            }

            if (rbSpecial.Checked)
            {
                JObject joRtn = mIS.getInterface(Global.inf.interfaceDr.ToString());
                string specialInterfaceDr = JsonHelper.getDestValue(joRtn, "InsuCurrencyCataLogue");
                if (!string.IsNullOrEmpty(specialInterfaceDr))
                {
                    Global.inf.mainInterfaceDr = int.Parse(specialInterfaceDr);
                }
                else
                {
                    MessageBox.Show("该接口不存在指定目录");
                    return;
                }
            }

            if (rbMain.Checked)
            {
                JObject joRtn = mIS.getMainInterface(Global.inf.interfaceDr.ToString());
                if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
                {
                    MessageBox.Show(errMsg);
                    return;
                }
                string mainInterfaceDr = JsonHelper.getDestValue(joRtn, "result.data[0].MainInterfaceDr");
                if (!string.IsNullOrEmpty(mainInterfaceDr))
                {
                    Global.inf.mainInterfaceDr = int.Parse(mainInterfaceDr);
                    return;
                }
                else
                {
                    MessageBox.Show("该接口不存在主目录");
                    return;
                }
            }
        }
        /// <summary>
        /// 医保目录单个版本号的下载
        /// </summary>
        /// <param name="ver"></param>
        /// <param name="directoryType"></param>
        /// <param name="uiProcessBar"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public int downloadDicionary(JObject joData, Sunny.UI.UIProcessBar uiProcessBar, string dictCode, out string errorMessage)
        {
            errorMessage = "";
            int iResult = -1;
            try
            {
                JObject joRtn = cBus.DownDictionay(joData);

                if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) == 0)
                {
                    DataImoport DI = new DataImoport();
                    JArray jaList = JArray.Parse(JsonHelper.getDestValue(joRtn, "output.list"));
                    JObject joImportRtn = DI.importDictionary(uiProcessBar, jaList, dictCode);
                    if (JsonHelper.parseIrisRtnValue(joImportRtn, out errorMessage) == 0)
                    {
                        iResult = 0;
                    }
                    else
                    {
                        errorMessage = "导入数据出现错误，请查看日志！" + errorMessage;
                    }
                }
                return iResult;
            }
            catch (Exception ex)
            {
                errorMessage = "downloadDicionary提示:" + ex.Message;
                return -1;
            }
        }

        /// <summary>
        /// 自动下载医保目录，直到最新版本（返回报错）
        /// </summary>
        /// <param name="directoryType"></param>
        /// <param name="uiProcessBar"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public int AutoDownload(int directoryType, Sunny.UI.UIProcessBar uiProcessBar, out string errorMessage)
        {
            int iResult = 0;
            errorMessage = "";
            try
            {

                while (iResult == 0)
                {
                    JObject joMaxVerNO = mIS.getDirectoryMaxVersionNO(directoryType);
                    string ver = joMaxVerNO["result"]["MaxVersionNO"].ToString();
                    tbVer.Text = ver;
                    iResult = JsonHelper.parseIrisRtnValue(joMaxVerNO, out errorMessage);
                    iResult = SingleDownload(ver, directoryType, uiProcessBar, out errorMessage);
                }

                return iResult;
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
                return -1;
            }
        }

        public int UpdateDictionaryBySelf(AddSingleDictionary addDic, out string errMsg)
        {
            string outParam = "", HBDictionaryDr = "";
            JObject joRtn;
            JObject jo = addDic.joPamam;
            try
            {
                //if (JsonHelper.getDestValue(jo, "operateType") == "0")
                //{
                //插入并获取字典主表的DR
                JObject joDic = JObject.FromObject(jo["dicObj"]);
                joRtn = mIS.insertDictionary(joDic);
                if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
                {
                    return -1;
                }
                else
                {
                    HBDictionaryDr = JsonHelper.getDestValue(joRtn, "data.HBDictionaryDr");
                    if (HBDictionaryDr == "")
                    {
                        errMsg = "HBDictionaryDr返回值为空";
                        return -1;
                    }
                }
                //}
                //else
                //{
                //    if (addDic.dr != null)
                //    {
                //        HBDictionaryDr = addDic.dr["hBDictionaryID"].ToString();
                //    }
                //    else
                //    {
                //        errMsg = "修改状态下未获得字典主表ID!请联系管理员";
                //        return -1;
                //    }
                //}

                //插入明细表
                JObject joDicDetail = JObject.FromObject(jo["detailObj"]);
                joDicDetail.Add("HBDictionaryDr", HBDictionaryDr);
                JArray jaParams = new JArray();
                jaParams.Add(joDicDetail);
                joRtn = mIS.insertDictionaryDataDetail(jaParams);
                if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
                {
                    return -1;
                }
                else
                {
                    return 0;
                }
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
                return -1;
            }
        }
        #endregion

        #region 下载
        private void btSignIn_Click(object sender, EventArgs e)
        {
            string errMsg;
            if (mIS.isSigned(ref Global.curEvt.signno) != true)
            {
                JObject joRtn = new JObject();
                //签到
                if (cBus.signIn(out joRtn) != 0)
                {
                    MessageBox.Show((string)joRtn["err_msg"]).ToString();
                }
                else
                {
                    Global.curEvt.signno = JsonHelper.getDestValue(joRtn, "output.signinoutb.sign_no");

                    //插入签到表
                    if (mIS.saveSignRecord(Global.curEvt.signno, out errMsg) != 0)
                    {
                        MessageBox.Show("中心签到成功但插入签到表失败:" + errMsg);
                    }
                    else
                    {
                        MessageBox.Show("签到成功");
                    }
                }

            }
        }
        private void dgvDirectoy_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgvDirectoy.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgvDirectoy.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgvDirectoy.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }
        private void btnDownload_Click(object sender, EventArgs e)
        {
            string errorMessage = string.Empty;

            //医保字典数据下载
            if (rbgDirecType.SelectedIndex == 8)
            {
                if (tbDicDate.Text == "")
                {
                    MessageBox.Show("请输入查询日期！");
                    return;
                }
                // 支持批量
                string[] dictText = tbDicType.Text.Trim().Split(",".ToCharArray());
                dictText.ToList().ForEach((dict) =>
                {
                    this.downloadDict(dict);
                });
            }
            else if (rbgDirecType.SelectedIndex <= 10)
            {
                if (rbSingleDown.Checked)
                {
                    string ver = tbVer.Text;
                    if (tbVer.Text != "")
                    {
                        ver = tbVer.Text;
                    }
                    if (SingleDownload(ver, rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0)
                    {
                        MessageBox.Show("医保目录下载失败：" + errorMessage);
                        return;
                    }
                }
                if (rbAutoDown.Checked)
                {
                    if (AutoDownload(rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0)
                    {
                        MessageBox.Show("医保目录下载失败：" + errorMessage);
                        return;
                    }
                }
            }



            btnQuery_Click(sender, e);
        }
        private void downloadDict(string dictCode)
        {
            try
            {
                string errorMessage = "";
                dynamic joData = new JObject();
                joData.type = dictCode;   //字典类型
                joData.parentValue = "";        //父字典键值 
                joData.admdvs = Global.inf.areaCode;        //行政区划  就医地
                joData.date = tbDicDate.Text;  //查询日期 
                joData.vali_flag = "1";   //有效标志 

                if (downloadDicionary(joData, uiProcessBar1, dictCode, out errorMessage) != 0)
                {
                    MessageBox.Show("医保字典下载失败：" + errorMessage);
                }
            }
            catch (Exception)
            {

            }
        }
        private void btnQuery_Click(object sender, EventArgs e)
        {
            #region 校验查询条件
            if ((rbgDirecType.SelectedIndex < 0) || (rbgDirecType.SelectedIndex > 20))
            {
                MessageBox.Show("请先选择查询类型！");
                return;
            }

            if (rbgDirecType.SelectedIndex > 13)
            {
                if (rbgDirecType.SelectedIndex != 20)
                {
                    if ((TexDate.Text == "") || (TexDate.Text == "输入日期 2021-01-01"))
                    {
                        MessageBox.Show("查询条件-请输入查询日期！");
                        return;
                    }
                    if ((TexDQYS.Text == "") || (TexDQYS.Text == "当前页数"))
                    {
                        MessageBox.Show("查询条件-请输入当前页数！");
                        return;
                    }
                    if ((TexBYSJL.Text == "") || (TexBYSJL.Text == "本页数据量"))
                    {
                        MessageBox.Show("查询条件-请输入本页数据量！");
                        return;
                    }
                }
                else
                {
                    if ((TexYYMC.Text == "") || (TexYYMC.Text == "输入医院名称模糊查找"))
                    {
                        MessageBox.Show("查询条件-请输入医院名称模糊查找！");
                        return;
                    }
                }

            }
            #endregion

            queryHISInsuDirectory(rbgDirecType.SelectedIndex, 1, 20, dgvDirectoy, Global.inf.interfaceDr);
        }

        private void pgDownload_PageChanged(object sender, object pagingSource, int pageIndex, int count)
        {
            queryHISInsuDirectory(rbgDirecType.SelectedIndex, pageIndex, count, dgvDirectoy, Global.inf.interfaceDr);
        }
        private void rbgDirecType_ValueChanged(object sender, int index, string text)
        {
            //选定项不同调用的接口也不相同,Index值大于
            if (rbgDirecType.SelectedIndex > 13)
            {
                uiGroupBox1.Visible = false;
                uiGroupBox5.Visible = false;
                uiGroupBox2.Visible = true;
                //uiGroupBox3.Visible = true;
                uiProcessBar1.Visible = false;

                uiGroupBox2.Left = rbgDirecType.Width + rbgDirecType.Left + 5;
                uiGroupBox3.Left = uiGroupBox2.Width + rbgDirecType.Width + rbgDirecType.Left + 10;
                dgvDirectoy.DataSource = null;
            }
            else
            {
                uiGroupBox1.Visible = true;
                uiGroupBox5.Visible = true;
                uiGroupBox2.Visible = true;
                //uiGroupBox3.Visible = false;                
                uiProcessBar1.Visible = true;

                uiGroupBox1.Left = rbgDirecType.Width + rbgDirecType.Left + 5;
                uiGroupBox5.Left = uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 10;
                uiGroupBox2.Left = uiGroupBox5.Width + uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 15;
                uiGroupBox3.Left = uiGroupBox2.Width + uiGroupBox5.Width + uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 20;

                uiProcessBar1.Left = rbgDirecType.Width + rbgDirecType.Left + 5;
                uiProcessBar1.Width = uiGroupBox1.Width + uiGroupBox5.Width + uiGroupBox2.Width + 10;
            }

            setHeaderTxt(rbgDirecType.SelectedIndex, dgvDirectoy);
        }

        private void btAddDir_Click(object sender, EventArgs e)
        {
            if (rbgDirecType.SelectedIndex == 8)
            {
                string errMsg = "";
                AddSingleDictionary addDictionary = new AddSingleDictionary();
                if (addDictionary.ShowDialog() == DialogResult.OK)
                {
                    if (UpdateDictionaryBySelf(addDictionary, out errMsg) != 0)
                    {
                        MessageBox.Show(errMsg);
                    }
                    else
                    {
                        MessageBox.Show("新增成功！");
                    }
                }
            }
            else
            {
                AddSingleDirectory addDirectory = new AddSingleDirectory(rbgDirecType.SelectedIndex);
                if (addDirectory.ShowDialog() == DialogResult.OK)
                {
                    JObject joRtn = mIS.UpdateDirectoryBySelf(addDirectory.joPamam);
                    string error = "";
                    if (JsonHelper.parseIrisRtnValue(joRtn, out error) != 0)
                    {
                        MessageBox.Show("新增失败：" + error);
                    }
                    else
                    {
                        MessageBox.Show("新增成功");
                    }
                }
            }
        }
        private void btEditDir_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)dgvDirectoy.DataSource;
            if ((dt == null) || (dt.Rows.Count < 1))
            {
                MessageBox.Show("表中无数据，请检查！");
                return;
            }
            DataRow dr = dt.Rows[dgvDirectoy.CurrentRow.Index];
            if (rbgDirecType.SelectedIndex == 8)
            {
                string errMsg;
                AddSingleDictionary addDictionary = new AddSingleDictionary(dr);
                if (addDictionary.ShowDialog() == DialogResult.OK)
                {
                    if (UpdateDictionaryBySelf(addDictionary, out errMsg) != 0)
                    {
                        MessageBox.Show(errMsg);
                    }
                    else
                    {
                        MessageBox.Show("修改成功！");
                    }
                }
            }
            else
            {
                AddSingleDirectory addDirectory = new AddSingleDirectory(rbgDirecType.SelectedIndex, dr);
                if (addDirectory.ShowDialog() == DialogResult.OK)
                {

                    JObject joRtn = mIS.UpdateDirectoryBySelf(addDirectory.joPamam);
                    string error = "";
                    if (JsonHelper.parseIrisRtnValue(joRtn, out error) != 0)
                    {
                        MessageBox.Show("修改失败：" + error);
                    }
                    else
                    {
                        MessageBox.Show("修改成功");
                    }
                }
            }
            
        }
        private void btnExit_Click(object sender, EventArgs e)
        {
            Close();
        }
        #endregion

        #region 对照
        private void btnQueryHISDirectory_Click(object sender, EventArgs e)
        {
            this.dgvHISDirectory.SelectionChanged -= this.dgvHISDirectory_SelectionChanged;
            string errMsg;
            if (!string.IsNullOrEmpty(tbCountPerPage.Text))
            {
                iCount = int.Parse(tbCountPerPage.Text);
            }
            if (rbNoMaped.Checked) iCount = 5000;
            if (queryHISDirectory(1, iCount, out errMsg) != 0)
            {
                MessageBox.Show(errMsg);
                return;
            }
            this.dgvHISDirectory.SelectionChanged += this.dgvHISDirectory_SelectionChanged;
        }

        private void btnQueryCenterDirectory_Click(object sender, EventArgs e)
        {
            queryHISInsuDirectory(rbgInsuDirecType_C.SelectedIndex, 1, 50, dgvCenterDirectory, Global.inf.interfaceDr);
        }
        private void pgHISDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count)
        {
            string errMsg;
            if (queryHISDirectory(pageIndex, iCount, out errMsg) != 0)
            {
                MessageBox.Show(errMsg);
                return;
            }
        }
        private void pgCenterDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count)
        {
            queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, pageIndex, count, dgvCenterDirectory, Global.inf.interfaceDr);
        }
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            CancleMapping();
        }
        private void tsmiMapping_Click(object sender, EventArgs e)
        {
            Mapping();
        }
        private void rbAll_ValueChanged(object sender, bool value)
        {
            if (rbAll.Checked)
            {
                btnQueryHISDirectory_Click(null, new EventArgs());
            }
        }
        private void rbMaped_CheckedChanged(object sender, EventArgs e)
        {
            if (rbMaped.Checked)
            {
                string errMsg;
                if (queryHISDirectory(iCount, 50, out errMsg) != 0)
                {
                    MessageBox.Show(errMsg);
                    return;
                }
            }

        }

        private void btnExport_Click(object sender, EventArgs e)
        {
            //if (rbAll.Checked) return;
            if (queryHISDirectory(1, iCount, out string errMsg) != 0)
            {
                MessageBox.Show(errMsg);
                return;
            }

            if (dtExport.Rows.Count > 0)
            {
                string Maped = "";
                if (rbAll.Checked) Maped = "全部";
                if (rbMaped.Checked) Maped = "已对照";
                if (rbNoMaped.Checked) Maped = "未对照";

                string directoryType = string.Empty;
                switch (rbgDirecType_C.SelectedIndex)
                {
                    case 0:
                        {
                            directoryType = "药品";
                            break;
                        }
                    case 1:
                        {
                            directoryType = "诊疗";
                            break;
                        }
                    case 2:
                        {
                            directoryType = "材料";
                            break;
                        }
                }

                string LSH = DateTime.Now.ToString("yyyyMMddHHMMss"); //DateTime.Now.ToString("MMddHHmmssffff");
                string sFliePathName = @"D:\" + LSH + "【" + directoryType + "】医保目录【" + Maped + "】信息.xls";
                string ReturnFileName = ExportToExcel.DataTabletoExcel(dtExport, sFliePathName);
                if (ReturnFileName != "")
                {
                    MessageBox.Show("导出成功,文件保存路径：【" + ReturnFileName + "】");
                    System.Diagnostics.Process.Start(ReturnFileName); //打开excel文件                
                }
                else
                {
                    MessageBox.Show("导出失败!");
                }
            }
        }

        private void dgvHISDirectory_RowEnter(object sender, DataGridViewCellEventArgs e)
        {

            tbCenterDirectoryFilter.Text = "%" + dgvHISDirectory.SelectedRows[0].Cells["itemDesc"].Value.ToString() + "%";
            tbApprovalNO.Text = dgvHISDirectory.SelectedRows[0].Cells["pprovalNo"].Value.ToString();
        }

        private void dgvHISDirectory_SelectionChanged(object sender, EventArgs e)
        {
            int i = dgvHISDirectory.CurrentRow.Index;


            if (dgvHISDirectory.Rows[i].Cells["insuCode"].Value.ToString() != "")
            {
                tbInsuCode.Text = dgvHISDirectory.Rows[i].Cells["insuCode"].Value.ToString();
                tbCenterDirectoryFilter.Text = "";
                tbApprovalNO.Text = "";
            }
            else
            {
                tbInsuCode.Text = "";
                if (rbOnlyName.Checked)
                {
                    tbInsuCode.Text = "";
                    tbApprovalNO.Text = "";
                    tbCenterDirectoryFilter.Text = "%" + dgvHISDirectory.Rows[i].Cells["itemDesc"].Value.ToString() + "%";
                }
                if (rbOnlyApprNO.Checked)
                {
                    tbCenterDirectoryFilter.Text = "";
                    tbInsuCode.Text = "";
                    tbApprovalNO.Text = "%" + dgvHISDirectory.Rows[i].Cells["pprovalNo"].Value.ToString() + "%";
                }
                if (rbBoth.Checked)
                {
                    tbInsuCode.Text = "";
                    tbCenterDirectoryFilter.Text = "%" + dgvHISDirectory.Rows[i].Cells["itemDesc"].Value.ToString() + "%";
                    tbApprovalNO.Text = "%" + dgvHISDirectory.Rows[i].Cells["pprovalNo"].Value.ToString() + "%";
                }

            }


        }
        private void ToolStripMenuItem_Upload_Click(object sender, EventArgs e)
        {
            if (SingleUpload(out err) != 0)
            {
                MessageBox.Show(err);
            }
       }
        private void ToolStripMenuItem_CancelUpload_Click(object sender, EventArgs e)
        {
            if (SingleCancelUpload(out err) != 0)
            {
                MessageBox.Show(err);
            }
        }
        private void btnUploadRelation_Click(object sender, EventArgs e)
        {
            AllUpLoad();
        }
        private void btnCancelRelation_Click(object sender, EventArgs e)
        {
            AllCancelUpload();
        }
        #endregion

        private void btDicToLocalJson_Click(object sender, EventArgs e)
        {
            string dicType = tbDirectoryCode.Text;
            if (string.IsNullOrEmpty(dicType))
            {
                MessageBox.Show("请输入字典类型!");
                tbDirectoryCode.Focus();
                return;
            }
            DictionaryHelper helper = new DictionaryHelper();
            string err;
            if (helper.SaveDicToJson(dicType, out err) != 0)
            {
                MessageBox.Show(err);
            }
            else
            {
                MessageBox.Show(err);
            }
        }
    }

}
