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;
        int currentPageIndex = 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);
                        // ICPC3
                        //gvdSetter.SetICPCAdmReasonHeader(dgv);
                        break;
                    }
                case 13:
                    {
                        //中医证候下载
                        gvdSetter.GetTCMSyndromeJsonByTxt(dgv);
                        // ICPC3
                        //gvdSetter.SetICPCTreatmentHeader(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 TradeEnum trade);
                    JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, 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 = "调用交易" + trade.GetCode() + "出现错误,请查看日志!"; //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 = txtSpecFilter.Text.Trim();
                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.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 = "";
                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 = "取消失败";
            }
        }

        public void loadTextDebug()
        {
            DataImoport bus = new DataImoport();
            string txtPath = @"E:\insu\Demo\bin\Debug\20230101535395327567680436.txt";
            JObject joImportRtn = bus.importDataToIrisByTxt(txtPath, 50, 2, uiProcessBar1);
        }

        /// <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;
            }
        }

        #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;
            string ver = tbVer.Text;
            JObject input = new JObject();
            input["ver"] = ver;

            // 目录查询
            switch(rbgDirecType.SelectedIndex)
            {
                case 15:
                    break;
                case 8:  //字典
                    {
                        if (tbDicDate.Text == "")
                        {
                            MessageBox.Show("请输入查询日期!");
                            return;
                        }
                        // 支持批量
                        string[] dictText = tbDicType.Text.Trim().Split(",".ToCharArray());
                        dictText.ToList().ForEach((dict) =>
                        {
                            this.downloadDict(dict);
                        });
                        break;
                    }
                //case 12:
                //    {
                //        downloadMedData(TradeEnum.ICPC3AdmReason, ver, uiProcessBar1);
                //        break;
                //    }
                //case 13:
                //    {
                //        downloadMedData(TradeEnum.ICPC3Treatment, ver, uiProcessBar1);
                //        break;
                //    }
                default:
                    {
                        MedDirDownloadProcess mp = new MedDirDownloadProcess();
                        if (rbSingleDown.Checked)
                        {
                            if (mp.SingleDownload(ver, rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0)
                            {
                                MessageBox.Show("医保目录下载失败:" + errorMessage);
                                return;
                            }
                        }
                        if (rbAutoDown.Checked)
                        {
                            mp.VerChangeEvent += Mp_VerChangeEvent;
                            if (mp.AutoDownload(rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0)
                            {
                                MessageBox.Show("医保目录下载失败:" + errorMessage);
                                return;
                            }
                        }
                        break;
                    }
            }

            btnQuery_Click(sender, e);
        }

        private void Mp_VerChangeEvent(object sender, string ver)
        {
            tbVer.Text = ver;
        }

        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 e)
            { 
                
            }
        }

        private int downloadMedData(TradeEnum trade,string version,Sunny.UI.UIProcessBar uiProcessBar)
        {
            string errorMessage = "";
            if (rbAutoDown.Checked)
            {
                JObject joMaxVerNO = mIS.getDirectoryMaxVersionNO(rbgDirecType.SelectedIndex);
                string ver = joMaxVerNO["result"]["MaxVersionNO"].ToString();
                if (!string.IsNullOrEmpty(ver))
                {
                    version = ver;
                    tbVer.Text = ver;
                }
            }
            JObject joRtn = cBus.DownDirecotry(trade, version);
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) == 0)
            {
                //解析
             DataImoport DI = new DataImoport();
                JObject joImportRtn = DI.importMedDataToIris(trade,joRtn,uiProcessBar);
                if (JsonHelper.parseIrisRtnValue(joImportRtn, out errorMessage) == 0)
                {
                    //递归调用
                    if (rbAutoDown.Checked)
                    {
                        downloadMedData(trade, version, uiProcessBar);
                    }
                }
                 return 0;
            }
            MessageBox.Show(errorMessage);
            return -1;
        }

        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 TradeEnum trade)
        {
            trade = TradeEnum.MedicalServiceDirectory;
            dynamic joData = new JObject();
            switch (Index)
            {
                case 14://民族药品目
                    {
                        trade = TradeEnum.NationalityDrug;
                        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://目录信息查询
                    {
                        trade = TradeEnum.InsuDirectory;
                        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://医疗与医保目录匹配
                    {
                        trade = TradeEnum.MedicalAndInsuDirectory;
                        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://医药机构目录匹配
                    {
                        trade = TradeEnum.MedcineOrgDirectory;
                        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://医保目录限价
                    {
                        trade = TradeEnum.InsuPriceLimitDirectory;
                        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://医保目录先自付比例
                    {
                        trade = TradeEnum.PrepayPercentDirectory;
                        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://医药机构信息
                    {
                        trade = TradeEnum.MedicalOrgination;
                        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))
            {
                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");
            string MapId = dtHis.Rows[iHis]["MapID"].ToString();
            JArray dataArray = new JArray();
            //调用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", "2023-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", "");

            dataArray.Add(joData);
            // 单条与多条保持一致
            JObject joInput = new JObject();
            joInput.Add("data", dataArray);

            InvokeHelper invoker = new InvokeHelper();
            Global.pat.insuplc_admdvs = Global.inf.areaCode;
            JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastUpload, joInput);
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
            {
                MessageBox.Show("目录对照关系上传失败:" + errorMsg);
            }
            else
            {
                UpdateUploadStatus(MapId, 3);
                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();
            string MapId = dtHis.Rows[iHis]["MapID"].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();
            Global.pat.insuplc_admdvs = Global.inf.areaCode;
            JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastCancel, joInput);
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
            {
                MessageBox.Show("目录对照撤销失败:" + errorMsg);
            }
            else
            {
                UpdateUploadStatus(MapId, 2);
                MessageBox.Show("目录对照撤销成功!");
            }
        }

        /// <summary>
        /// 全部上传目录对照关系
        /// </summary>
        private void AllUpLoad()
        {
            if ((dgvHISDirectory.CurrentRow == null))
            {
                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";
            }
            List<String> mapIdList = new List<string>();
            DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
            JArray dataArray = new JArray();
            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目录名称
                mapIdList.Add(dtHis.Rows[i]["MapID"].ToString());  //ID

                //调用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", "2023-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", "");

                dataArray.Add(joData);
            }

            JObject joInput = new JObject();
            joInput.Add("data", dataArray);
            Global.pat.insuplc_admdvs = Global.inf.areaCode;
            InvokeHelper invoker = new InvokeHelper();
            JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastUpload, joInput);
            if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
            {
                bOk = false;
                Msg = Msg + "<" + joInput.ToString() + ":" + errorMsg + ">";
            }

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


        private void UpdateUploadStatus(string ids, int state)
        {
            if (string.IsNullOrEmpty(ids)) return;

            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")
            {
                Global.writeLog("更新状态失败!" + joRtn["errorMessage"].ToString());
            }
        }

        /// <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;
            List<String> mapIdList = new List<string>();

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

                //调用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(TradeEnum.DirectoryContrastCancel, joInput);
                if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
                {
                    bOk = false;
                    Msg = Msg + "<" + joInput.ToString()+":" + errorMsg + ">";
                }
            }

            if (bOk == false)
            {
                MessageBox.Show("全部撤销目录对照关系上传成功,部分撤销异常:" + Msg);
            }
            else
            {
                UpdateUploadStatus(string.Join(",", mapIdList.ToArray()), 2);
                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 limitPriceUpdate_Click(object sender, EventArgs e)
        {
            SelfpayPercentForm selfpay = new SelfpayPercentForm();
            selfpay.CenterCode = dgvDirectoy.Rows[dgvDirectoy.SelectedIndex].Cells["Code"].Value + "";
            selfpay.ShowDialog();
        }

        private void batchUpdateCategory_Click(object sender, EventArgs e)
        {
            if (!rbMaped.Checked)
            {
                MessageBox.Show("请选择已对照进行更新");
                return;
            }
            DataTable dt = (DataTable)dgvHISDirectory.DataSource; //获取当前页的数据,注意在已对照页面更新
            if ((dt == null) || (dt.Rows.Count < 1))
            {
                MessageBox.Show("表中无数据,请检查!");
                return;
            }
            string htype = "";
            if (rbgDirecType_C.SelectedIndex == 0)
            {
                htype = "1";
            }
            else if (rbgDirecType_C.SelectedIndex == 1)
            {
                htype = "2";
            }
            else if (rbgDirecType_C.SelectedIndex == 2)
            {
                htype = "3";
            }
            // MessageBox.Show("第1列" + dt.Rows[0][0]);
            // MessageBox.Show("第1行" + dt.Rows[0].ToString());
            dynamic one1312 = new JObject();

            one1312.Add("query_date", "");//查询时间点   日期型
            one1312.Add("hilist_code", "");//医保目录编码 字符型 30
            one1312.Add("insu_admdvs", "");//参保机构医保区划    字符型 6   Y
            one1312.Add("begndate", ""); //开始日期 日期型
            one1312.Add("hilist_name", "");//医保目录名称  字符型 200
            one1312.Add("wubi", "");//五笔助记码        字符型        30
            one1312.Add("pinyin", "");//拼音助记码   字符型 30
            one1312.Add("med_chrgitm_type", "");//医疗收费项目类别    字符型 6   Y
            one1312.Add("chrgitm_lv", "");//收费项目等级 字符型 3   Y
            one1312.Add("lmt_used_flag", "");//限制使用标志 字符型 3   Y
            one1312.Add("list_type", "");//目录类别 字符型 30
            one1312.Add("med_use_flag", "");//医疗使用标志  字符型 3   Y
            one1312.Add("matn_used_flag", "");//生育使用标志 字符型 3   Y
            one1312.Add("hilist_use_type", "");//医保目录使用类别 字符型 3   Y
            one1312.Add("lmt_cpnd_type", ""); //限复方使用类型 字符型 3   Y
            one1312.Add("vali_flag", "");//有效标志 字符型 3   Y
            one1312.Add("updt_time", "2019-01-01");//更新时间 日期型
            one1312.Add("page_num", 1);//当前页数    数值型 4
            one1312.Add("page_size", 50);//本页数据量   数值型 4
            dynamic data1312 = new JObject();
            dynamic joPamam = new JObject();//更新HIS医保目录入参
            joPamam.Add("Code", "");
            joPamam.Add("Name", "");
            joPamam.Add("HisType", htype);
            joPamam.Add("ChargeItemLevel", "");


            for (int i = 0; i < dt.Rows.Count; i++)
            {
                one1312.hilist_code = dt.Rows[i]["insuCode"].ToString();//每行的第13列是医保编码

                data1312.data = one1312;
                JObject jo1312Rtn = invoker.invokeCenterService(TradeEnum.InsuDirectory,data1312);

                if (JsonHelper.parseCenterReturnJson(jo1312Rtn, out string errorMsg) == 0)
                {
                    JArray dt_result = JArray.Parse(jo1312Rtn["output"]["data"].ToString());

                    for (int n = 0; n < dt_result.Count; n++)
                    {
                        //医保返参取值
                        joPamam.Code = dt_result[n]["hilist_code"].ToString();
                        joPamam.Name = dt_result[n]["hilist_name"].ToString();
                        joPamam.ChargeItemLevel = dt_result[n]["chrgitm_lv"].ToString();

                        if (joPamam.ChargeItemLevel.ToString() == "01")
                        {
                            joPamam.ChargeItemLevelName = "甲类";
                        }
                        else if (joPamam.ChargeItemLevel.ToString() == "02")
                        {
                            joPamam.ChargeItemLevelName = "乙类";
                        }
                        else if (joPamam.ChargeItemLevel.ToString() == "03")
                        {
                            joPamam.ChargeItemLevelName = "丙类";
                        }
                        JObject joRtn = mIS.UpdateDirectoryBySelf(joPamam);
                    }
                }

            }
            MessageBox.Show("更新完成!");
        }
    }
    
}