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;

        public BasicData()
        {
            InitializeComponent();

            rbgDirecType.SelectedIndex = 0;
            rbgDirecType_C.SelectedIndex = 0;
            rbSingleDown.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);
            Font rowFont = new Font("UTF-8", 8);
            Font columnFont = new Font("UTF-8", 9);
            rbgDirecType.SelectedIndex = 8;
            rbAll.Checked = true;
            //tabControl1.SelectedIndex = 1;

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

        }
        #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, sOutpar;
                    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.interfaceDr;
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.specInput = uiTextBox7.Text;//增加规格过滤
                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.HospitalDr = Global.inf.hospitalDr;
                joParam.InterfaceDr = Global.inf.interfaceDr;
                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;
                }

                //传给HIS,进行匹配
                joParam = new JObject();
                joParam.TotalCount = joMIRtn["result"]["TotalCount"];
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.hospID = Global.inf.hisHospitalDr;
                joParam.interfaceDr = Global.inf.interfaceDr;
                joParam.alias = tbHISDirectoryFilter.Text;
                joParam.include = "Hosp";
                joParam.groupID = "324";
                joParam.specInput = uiTextBox7.Text;//增加规格过滤
                joParam.compareArr = joMIRtn["result"]["Data"];
                jaParams = new JArray();
                jaParams.Add(joParam);
                if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0)
                {
                    return -1;
                }
            }

            //if (rbNoMaped.Checked) { flag = "NoMaped"; }

            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.interfaceDr;
                joParam.type = directoryType;
                joParam.flag = flag;
                joParam.specInput = uiTextBox7.Text;//增加规格过滤
                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);
        
                //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;

            //if (rbNoMaped.Checked)
            //    pgHISDirect.PageSize = pageSize;
            //else
            //    pgHISDirect.PageSize = 50;

            pgHISDirect.PageSize = pageSize;
            dgvHISDirectory.DataSource = null;
            dgvHISDirectory.DataSource = dt;
            dgvHISDirectory.Columns[0].ReadOnly = true;

            GridViewSetter gridSetter = new GridViewSetter();
            gridSetter.SetHeaderTextOfMapping_HisDirectory(dgvHISDirectory);
            gridSetter.DatagridviewColumnWidthAdaptation(dgvHISDirectory);

            return 0;
        }

        private void queryCenterDirectory_09010012(int currentPage, int pageSize)
        {
            string directoryType = string.Empty;
            switch (rbgDirecType_C.SelectedIndex)
            {
                case 0:
                    {
                        directoryType = "drugs";
                        break;
                    }
                case 1:
                    {
                        directoryType = "diagnosi";
                        break;
                    }
                case 2:
                    {
                        directoryType = "consumables";
                        break;
                    }
            }
            dynamic joInParams = new JObject();
            joInParams.pagination = new JArray() as dynamic;
            joInParams.session = new JArray() as dynamic;
            JArray jaParams = new JArray();

            dynamic joParams = new JObject();
            joParams.code = "";
            joParams.descripts = "";
            joParams.FindType = new JArray();
            joParams.TypeID = "";
            joParams.alias = "";
            joParams.include = "Hosp";
            joParams.groupID = "324";
            joParams.hospID = "25";
            joParams.type = directoryType;
            joParams.specInput = "";
            jaParams.Add(joParams);
            joInParams.Add("params", JArray.FromObject(jaParams));
            dynamic joSession = new JObject();
            joSession.userID = "";
            joSession.locID = "";
            joSession.groupID = "";
            joSession.hospID = "";
            joSession.sessionID = "";
            joSession.hospCode = "";
            joSession.language = "";
            joSession.hostName = "";
            joSession.ipv4 = "";
            joSession.ipv6 = "";
            joSession.mac = "";
            joInParams.session.Add(joSession);
            dynamic joPagination = new JObject();
            joPagination.pageSize = pageSize;
            joPagination.currentPage = currentPage;
            joPagination.sortColumn = "Code";
            joPagination.sortOrder = "asc";
            joInParams.pagination.Add(joPagination);
            joInParams.code = "09010012";

            string sInput = joInParams.ToString();
            string sRtn = invoker.invokeInsuService(joInParams, "");

            JObject jsonRtn = JObject.Parse(sRtn);
            if (jsonRtn["result"]["Data"] == null)
            {
                MessageBox.Show("该节点不存在");
                return;
            }

            JObject joRtn = JObject.Parse(sRtn);
            DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable));
            int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString());
            pgCenterDirect.TotalCount = totalCount;
            pgCenterDirect.PageSize = 50;
            dgvCenterDirectory.DataSource = dt;
        }
        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.interfaceDr;
            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.interfaceDr;
            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="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);

                //MessageBox.Show("往IRIS插入数据准备:" + joRtn.ToString());

                //if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) == 0)
                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;
            }
        }

        /// <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, 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, tbDicType.Text);
                    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;
            }
        }
        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;

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

            LabExplain.Visible = false;
        }
        private void btnDownload_Click(object sender, EventArgs e)
        {
            string errorMessage = string.Empty;

            //医保字典数据下载
            if (rbgDirecType.SelectedIndex == 8)
            {
                if (tbDicDate.Text == "")
                {
                    MessageBox.Show("请输入查询日期!");
                    return;
                }

                dynamic joData = new JObject();
                joData.type = tbDicType.Text;   //字典类型
                joData.parentValue = "";        //父字典键值 
                joData.admdvs = Global.inf.areaCode;        //行政区划  就医地
                joData.date = tbDicDate.Text;  //查询日期 
                joData.valiFlag = "1";   //有效标志 

                if (downloadDicionary(joData, uiProcessBar1, out errorMessage) != 0)
                {
                    MessageBox.Show("医保字典下载失败:" + errorMessage);
                    return;
                }
            }
            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 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 btnQueryHISDirectory_Click(object sender, EventArgs e)
        {
            int iCount = 50;
            if (rbNoMaped.Checked) iCount = 300;
            string errMsg;
            if (queryHISDirectory(1, iCount, out errMsg) != 0)
            {
                MessageBox.Show(errMsg);
                return;
            }
        }

        private void btnQueryCenterDirectory_Click(object sender, EventArgs e)
        {
            if ((tbCenterDirectoryFilter.Text == "") && (tbInsuCode.Text == "") && (tbApprovalNO.Text == "") && 
                (tbManufacturer.Text == "") && (tbSpecifications.Text == "") && (tbDosageForm.Text == ""))
            {
                return;
            }
            //查询区域通用目录 
            JObject joRtn = mIS.getInterface_TY(Global.inf.interfaceDr.ToString(),"");
            string InsuCurrencyCataLogue = JsonHelper.getDestValue(joRtn, "InsuCurrencyCataLogue");  //通用目录编码 6
            string InterfaceName_TY = JsonHelper.getDestValue(joRtn, "InterfaceName_TY");            //通用目录名称  
            string HospName_TY = JsonHelper.getDestValue(joRtn, "HospitalName");                     //目录名称
            string HospitalDr_TY = JsonHelper.getDestValue(joRtn, "HospitalDr_TY");                  //区域通用目录医院ID

            if (InsuCurrencyCataLogue != "")
            {
                queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, 1, 50, dgvCenterDirectory, int.Parse(InsuCurrencyCataLogue));
                LabExplain.Visible = true;
                LabExplain.Text = "当前接口已设置区域通用目录,数据源:" + HospName_TY + " ,如果确认没有所查目录请联系数据源医院新增维护!";
            }
            else
            {
                queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, 1, 50, dgvCenterDirectory, Global.inf.interfaceDr);
                LabExplain.Visible = true;
                LabExplain.Text = "当前接口未设置区域通用目录,数据源:" + HospName_TY;
            }


        }

        private void pgDownload_PageChanged(object sender, object pagingSource, int pageIndex, int count)
        {
            queryHISInsuDirectory(rbgDirecType.SelectedIndex, pageIndex, count, dgvDirectoy, Global.inf.interfaceDr);
        }

        private void pgHISDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count)
        {
            string errMsg;
            int iCount = 50;
            if (rbNoMaped.Checked) iCount = 300;
           
            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 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 toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            CancleMapping();
        }

        private void tsmiMapping_Click(object sender, EventArgs e)
        {
            Mapping();
        }

        private void dgvHISDirectory_DoubleClick(object sender, EventArgs e)
        {
            int currentPage = pgHISDirect.ActivePage;
            string flag = dgvHISDirectory.Rows[dgvHISDirectory.CurrentRow.Index].Cells["flag"].Value.ToString();
            if (flag == "未对照")
            {
                Mapping();
            }
            else
            if (flag == "已对照")
            {
                CancleMapping();
            }
            if (rbAll.Checked)
            {
                string errMsg;
                if (queryHISDirectory(1, 50, out errMsg) != 0)
                {
                    MessageBox.Show(errMsg);
                    return;
                }
            }
        }

        private void dgvDirectoy_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dgvDirectoy_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void uiRadioButton1_CheckedChanged(object sender, EventArgs e)
        {

        }

        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 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(1, 50, out errMsg) != 0)
            //    {
            //        MessageBox.Show(errMsg);
            //        return;
            //    }
            //}
        }

        private void btAddDir_Click(object sender, EventArgs e)
        {
            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];
            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();
        }

        /// <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 = DateTime.Now.ToString("yyyy-MM-dd"); //查询时间点
                        joData.hilist_code = tbDirectoryCode.Text;  //医保目录编码
                        joData.insu_admdvs = "";  //参保机构医保区划
                        joData.begndate = TexDate.Text; //开始日期
                        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 void chek_UporCancel_CheckedChanged(object sender, EventArgs e)
        {
  
        }

        private void uiButton1_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnUpShip_Click(object sender, EventArgs e)
        {
            AllUpLoad();
        }

        private void btnCancelUpShip_Click(object sender, EventArgs e)
        {
            AllCancelUpload();
        }

        /// <summary>
        /// 单条上传目录对照关系
        /// </summary>
        private void SingleUpload()
        {
            if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
            {
                MessageBox.Show("请查询HIS目录对照关系");
                return;
            }

            string errorMsg = "", sMLLX = "";
            //单条目录对照关系上传
            int iHis = dgvHISDirectory.CurrentRow.Index;

            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            int hisType = rbgDirecType_C.SelectedIndex + 1;  //1药品 2诊疗 3材料
            //string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); 
            if (hisType == 1)
            {
                sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 
            }
            else if (hisType == 2)
            {
                sMLLX = "201";
            }
            else if (hisType == 3)
            {
                sMLLX = "301";
            }

            string InsuCode = dtHis.Rows[iHis]["InsuCode"].ToString();
            string InsuName = dtHis.Rows[iHis]["InsuName"].ToString();
            string HisCode = dtHis.Rows[iHis]["itemCode"].ToString();
            string HisName = dtHis.Rows[iHis]["itemDesc"].ToString();
            string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd");

            //调用3301目录对照上传
            JObject joData = new JObject();
            joData.Add("fixmedins_hilist_id", HisCode);
            joData.Add("fixmedins_hilist_name", HisName);
            joData.Add("list_type", sMLLX);            //目录类别
            joData.Add("med_list_codg", InsuCode);     //医疗目录编码
            joData.Add("begndate", "2022-10-01");      //开始日期
            joData.Add("enddate", UpdateDate);         //结束日期
            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();
            joInput.Add("data", joData);

            InvokeHelper invoker = new InvokeHelper();

            JObject joRtn = invoker.invokeCenterService("3301", JsonHelper.setCenterInpar("3301", joInput));
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
            {
                MessageBox.Show("目录对照关系上传失败:" + errorMsg);
            }
            else
            {
                MessageBox.Show("目录对照关系上传成功!");
            }

        }

        /// <summary>
        /// 单条撤销目录对照关系上传
        /// </summary>
        private void SingleCancelUpload()
        {
            if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
            {
                MessageBox.Show("请查询HIS目录对照关系");
                return;
            }

            string errorMsg = "", sMLLX = "";

            //撤销目录对照关系
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            int iHis = dgvHISDirectory.CurrentRow.Index;
            string InsuCode = dtHis.Rows[iHis]["InsuCode"].ToString();
            string HisCode = dtHis.Rows[iHis]["HisCode"].ToString();
            int hisType = rbgDirecType_C.SelectedIndex + 1;  //1药品 2诊疗 3材料
            //string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); 
            if (hisType == 1)
            {
                sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 
            }
            else if (hisType == 2)
            {
                sMLLX = "201";
            }
            else if (hisType == 3)
            {
                sMLLX = "301";
            }

            //调用3302目录对照撤销
            JObject joData = new JObject();
            joData.Add("fixmedins_code", Global.inf.hospitalNO);
            joData.Add("fixmedins_hilist_id", HisCode);
            joData.Add("list_type", sMLLX);            //目录类别
            joData.Add("med_list_codg", InsuCode);     //医疗目录编码          
            JObject joInput = new JObject();
            joInput.Add("data", joData);

            InvokeHelper invoker = new InvokeHelper();

            JObject joRtn = invoker.invokeCenterService("3302", JsonHelper.setCenterInpar("3302", joInput));
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
            {
                MessageBox.Show("目录对照撤销失败:" + errorMsg);
            }
            else
            {
                MessageBox.Show("目录对照撤销成功!");
            }
        }

        /// <summary>
        /// 全部上传目录对照关系
        /// </summary>
        private void AllUpLoad()
        {
            if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
            {
                MessageBox.Show("请查询HIS目录对照关系");
                return;
            }

            string sInputStr = "", sMLLX = "", errorMsg = "", Msg = "";
            Boolean bOk = true;
            JObject InputjoRtn = new JObject();

            string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd");
            int hisType = rbgDirecType_C.SelectedIndex + 1;  //1药品 2诊疗 3材料
            if (hisType == 1)
            {
                sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 
            }
            else if (hisType == 2)
            {
                sMLLX = "201";
            }
            else if (hisType == 3)
            {
                sMLLX = "301";
            }

            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;                   

            for (int i = 0; i < dtHis.Rows.Count; i++)
            {                
                string InsuCode = dtHis.Rows[i]["InsuCode"].ToString();  //医保目录编码
                string InsuName = dtHis.Rows[i]["InsuName"].ToString();  //医保目录名称
                string HisCode = dtHis.Rows[i]["itemCode"].ToString();   //HIS目录编码
                string HisName = dtHis.Rows[i]["itemDesc"].ToString();   //HIS目录名称

                //调用3301目录对照上传
                JObject joData = new JObject();
                joData.Add("fixmedins_hilist_id", HisCode);
                joData.Add("fixmedins_hilist_name", HisName);
                joData.Add("list_type", sMLLX);            //目录类别
                joData.Add("med_list_codg", InsuCode);     //医疗目录编码
                joData.Add("begndate", "2022-10-01");      //开始日期
                joData.Add("enddate", UpdateDate);         //结束日期
                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();
                joInput.Add("data", joData);

                InvokeHelper invoker = new InvokeHelper();
                JObject joRtn = invoker.invokeCenterService("3301", JsonHelper.setCenterInpar("3301", joInput));
                if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
                {
                    bOk = false;                    
                    Msg = Msg + "<" + joInput.ToString() + ":" + errorMsg + ">";
                }
            }

            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 sMLLX = "", errorMsg = "", Msg = "";
            Boolean bOk = true;
            string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd");
            int hisType = rbgDirecType_C.SelectedIndex + 1;  //1药品 2诊疗 3材料

            if (hisType == 1)
            {
                sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 
            }
            else if (hisType == 2)
            {
                sMLLX = "201";
            }
            else if (hisType == 3)
            {
                sMLLX = "301";
            }
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;                  

            for (int i = 0; i < dtHis.Rows.Count; i++)
            {                
                string InsuCode = dtHis.Rows[i]["InsuCode"].ToString();
                string HisCode = dtHis.Rows[i]["HisCode"].ToString();

                //调用3302目录对照撤销
                JObject joData = new JObject();
                joData.Add("fixmedins_code", Global.inf.hospitalNO);
                joData.Add("fixmedins_hilist_id", HisCode);
                joData.Add("list_type", sMLLX);            //目录类别
                joData.Add("med_list_codg", InsuCode);     //医疗目录编码          
                JObject joInput = new JObject();
                joInput.Add("data", joData);

                InvokeHelper invoker = new InvokeHelper();
                JObject joRtn = invoker.invokeCenterService("3302", JsonHelper.setCenterInpar("3302", joInput));
                if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
                {
                    bOk = false;
                    Msg = Msg + "<" + joInput.ToString()+":" + errorMsg + ">";
                }
            }

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

        }

        private void ToolStripMenuItem_Upload_Click(object sender, EventArgs e)
        {
            SingleUpload();
        }

        private void ToolStripMenuItem_CancelUpload_Click(object sender, EventArgs e)
        {
            SingleCancelUpload();
        }

        private void rbgDirecType_C_ValueChanged(object sender, int index, string text)
        {
            tbHISDirectoryFilter.Text = "";
            uiTextBox1.Text = "";
            rbAll.Checked = true;
            rbMaped.Checked = false;
            rbNoMaped.Checked = false;

            tbCenterDirectoryFilter.Text = "";
            tbInsuCode.Text = "";
            tbApprovalNO.Text = "";

            dgvCenterDirectory.DataSource = null;

            btnQueryHISDirectory_Click(null, new EventArgs());
        }

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

        private void dgvHISDirectory_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
        }

        private void dgvCenterDirectory_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
        }

        private void btnExport_Click(object sender, EventArgs e)
        {

            if (queryHISDirectory(1, 1000, out string errMsg) != 0)
            {
                MessageBox.Show(errMsg);
                return;
            }

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

                if (rbAll.Checked) sBZ = "全部";
                else
                    if (rbMaped.Checked) sBZ = "已对照";
                else
                    if (rbNoMaped.Checked) sBZ = "未对照";

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

        private void rbAutoDown_CheckedChanged(object sender, EventArgs e)
        {

        }
    }
    
}