| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993 |
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using PTMedicalInsurance.Business;
- using PTMedicalInsurance.Common;
- using PTMedicalInsurance.Helper;
- using PTMedicalInsurance.Variables;
- using Sunny.UI;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace PTMedicalInsurance.Forms.BasicDatas.services
- {
- class DirectoryMapService
- {
- private string errMsg;
- CenterBusiness cBus = new CenterBusiness();
- HisMainBusiness hBus = new HisMainBusiness();
- HisIrisServices hIS = new HisIrisServices();
- MIIrisServices mIS = new MIIrisServices();
- InvokeHelper invoker = new InvokeHelper();
- private GridViewSetter gvdSetter = new GridViewSetter();
- private DataGridViewHeaderSetService dataGridViewHeaderSetService = new DataGridViewHeaderSetService();
- private Func<JObject, OutParamWrapper, int> action;
- //private DataLoader.MyFunc<string> updateDelegate;
- private DataTable dtAllMapped;
- TradeEnum trade;
- int iTotalCount = 0;
- int currentPageIndex = 0;
- #region 界面标题设置
- /// <summary>
- /// 设置DataGridView标题
- /// </summary>
- public void SetDgvDirectoryHeader(int directoryType, DataGridView dgv)
- {
- switch (directoryType)
- {
- case 1://药品
- {
- gvdSetter.SetHeaderTextOfDrug(dgv);
- break;
- }
- case 2://诊疗
- {
- gvdSetter.SetHeaderTextOfMedicalService(dgv);
- break;
- }
- case 3://材料
- {
- gvdSetter.SetHeaderTextOfMaterials(dgv);
- break;
- }
- }
- }
- public int SetDgvDirectoryHeader( string fileName, DataGridView dgv,out string err)
- {
- return dataGridViewHeaderSetService.SetHeaderText(fileName, dgv, out err);
- }
- #endregion
- #region 获取入参
- /// <summary>
- /// 几个医保查询的交易组织入参
- /// </summary>
- /// <param name="Index"></param>
- /// <param name="funNo"></param>
- /// <returns></returns>
- #endregion
- #region 查询目录以及导出数据
- /// <summary>
- /// 查询His和平台的对照目录,分全部,已对照,未对照三种情况
- /// </summary>
- /// <param name="input"></param>
- /// <param name="mapFlag"></param>
- /// <returns></returns>
- public JObject QueryDirectory(JObject input,MapFlagEnum mapFlag)
- {
- JArray jaPagination = JArray.FromObject(input["pagination"]);
- JArray jaParams = JArray.FromObject(input["params"]);
- JObject joRtn = new JObject();
- JObject joHisRtn;
- joRtn.Add("errorCode",-1);
- joRtn.Add("errorMessage", "");
- switch (mapFlag)
- {
- case MapFlagEnum.None:
- return null;
- case MapFlagEnum.All:
- //全部是先调HIS,然后再匹配医保平台的对照关系
-
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- joRtn = mIS.ConvertHISDir(joHisRtn);
- break;
- case MapFlagEnum.Mapped:
- JArray jaTmp = (JArray)jaParams.DeepClone();
- ((JObject)jaTmp[0]).Remove("code");
- ((JObject)jaTmp[0]).Remove("descripts");
- ((JObject)jaTmp[0]).Remove("FindType");
- ((JObject)jaTmp[0]).Remove("TypeID");
- ((JObject)jaTmp[0]).Remove("include");
- ((JObject)jaTmp[0]).Remove("groupID");
- ((JObject)jaTmp[0]).Remove("hospID");
- ((JObject)jaTmp[0]).Add("hisType", ((JObject)jaTmp[0])["type"]);
- ((JObject)jaTmp[0]).Add("HospitalDr", Global.inf.hospitalDr);
- ((JObject)jaTmp[0]).Add("InterfaceDr", ((JObject)jaTmp[0])["interfaceDr"]);
- ((JObject)jaTmp[0]).Remove("type");
- ((JObject)jaTmp[0]).Remove("flag");
- ((JObject)jaTmp[0]).Remove("specInput");
- ((JObject)jaTmp[0]).Remove("interfaceDr");
- JObject joMiRtn = mIS.GetMappedHISDir(jaPagination, jaTmp);
- if (JsonHelper.parseIrisRtnValue(joMiRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- ((JObject)jaParams[0]).Add("TotalCount", joMiRtn["result"]["TotalCount"]);
- jaParams[0]["compareArr"] = joMiRtn["result"]["Data"];
- if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- break;
- case MapFlagEnum.NoMapped:
- //1.获取全部HIS目录
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- //2.获取当前目录的最大值后再次获取目录
- int totalCount = int.Parse(joHisRtn["result"]["TotalCount"].ToString());
- jaPagination[0]["pageSize"] = totalCount;
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- //3.获取医保平台数据并匹配未对照数据
- joRtn = mIS.GetNoMappHISDir(joHisRtn);
- if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- }
- break;
- default:
- return null;
- }
- return joRtn;
- }
- /// <summary>
- /// 查询医保平台存储的中心目录
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public JObject QueryMiDirectory(JObject input)
- {
- return mIS.getMIDirectoryByPagination(input);
- }
- public JObject QueryExportData(JObject input, MapFlagEnum mapFlag)
- {
- Global.writeLog($"QueryExportData_INPUT:{input}");
- JArray jaPagination = JArray.FromObject(input["pagination"]);
- JArray jaParams = JArray.FromObject(input["params"]);
- JObject joRtn = new JObject();
- //假设默认每次取得条数为1000,主要是IRIS服务如果没有走流模式,会有一个字符串最大限制,导致服务无法正常返回
- int defaultPageSize = 1000;
- int currentPage = 1;
- jaPagination[0]["pageSize"] = defaultPageSize;
- jaPagination[0]["currentPage"] = currentPage;
- JObject joHisRtn;
- joRtn.Add("errorCode", -1);
- joRtn.Add("errorMessage", "");
- switch (mapFlag)
- {
- case MapFlagEnum.None:
- return null;
- case MapFlagEnum.All:
- //全部是先调HIS,然后再匹配医保平台的对照关系
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- JArray jaData = null;
- //获取HIS返回的总行数。这里其实应该根据默认行数跟总行数进行匹配
- int totalCount = int.Parse(JsonHelper.getDestValue(joHisRtn, "result.TotalCount"));
- if (totalCount > defaultPageSize)
- {
- while (currentPage <= (int)(totalCount / defaultPageSize))
- {
- currentPage++;
- jaPagination[0]["currentPage"] = currentPage;
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- else
- {
- JObject joConvertDirRtn = mIS.ConvertHISDir(joHisRtn);
- joRtn = (JObject)joConvertDirRtn.DeepClone();
- JArray jaTmp = JArray.FromObject(joConvertDirRtn["result"]["Data"]);
- if (jaData == null)
- {
- jaData = jaTmp;
- }
- else
- {
- jaData.Merge(jaTmp);
- }
- }
- }
- joRtn["result"]["Data"] = jaData;
- }
- else
- {
- joRtn = mIS.ConvertHISDir(joHisRtn);
- }
- break;
- case MapFlagEnum.Mapped:
- JObject joMiRtn = mIS.GetMappedHISDir(jaPagination, jaParams);
- if (JsonHelper.parseIrisRtnValue(joMiRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- }
- jaData = null;
- //获取HIS返回的总行数。这里其实应该根据默认行数跟总行数进行匹配
- totalCount = int.Parse(JsonHelper.getDestValue(joMiRtn, "result.TotalCount"));
- if (totalCount > defaultPageSize)
- {
- while (currentPage <= (int)(totalCount / defaultPageSize))
- {
- currentPage++;
- jaPagination[0]["currentPage"] = currentPage;
- joMiRtn = mIS.GetMappedHISDir(jaPagination, jaParams);
- if (JsonHelper.parseIrisRtnValue(joMiRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- jaParams[0]["compareArr"] = joMiRtn["result"]["Data"];
- if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- JArray jaTmp = JArray.FromObject(joRtn["result"]["Data"]);
- if (jaData == null)
- {
- jaData = jaTmp;
- }
- else
- {
- jaData.Merge(jaTmp);
- }
- }
- joRtn["result"]["Data"] = jaData;
- }
- else
- {
- jaParams[0]["compareArr"] = joMiRtn["result"]["Data"];
- if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- }
- }
- break;
- case MapFlagEnum.NoMapped:
- //1.获取全部HIS目录
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- jaData = null;
- //获取HIS返回的总行数。这里其实应该根据默认行数跟总行数进行匹配
- totalCount = int.Parse(JsonHelper.getDestValue(joHisRtn, "result.TotalCount"));
- if (totalCount > defaultPageSize)
- {
- while (currentPage <= (int)(totalCount / defaultPageSize))
- {
- currentPage++;
- jaPagination[0]["currentPage"] = currentPage;
- if (hIS.getHISDir(jaPagination, jaParams, out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- joRtn = mIS.GetNoMappHISDir(joHisRtn);
- if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- JArray jaTmp = JArray.FromObject(joRtn["result"]["Data"]);
- if (jaData == null)
- {
- jaData = jaTmp;
- }
- else
- {
- jaData.Merge(jaTmp);
- }
- }
- joRtn["result"]["Data"] = jaData;
- }
- else
- {
- joRtn = mIS.GetNoMappHISDir(joHisRtn);
- if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- }
- }
-
- break;
- default:
- return null;
- }
- return joRtn;
- }
- #endregion
- #region 新版导出匹配
- private JArray FetchAllPages(
- JArray pagination,
- JArray @params,
- Func<JArray, JArray, (int code, JObject result, string msg)> fetchData)
- {
- var allData = new JArray();
- int pageSize = 1000;
- int currentPage = 1;
- int totalCount = 0;
- do
- {
- pagination[0]["pageSize"] = pageSize;
- pagination[0]["currentPage"] = currentPage;
- var (code, result, errMsg) = fetchData(pagination, @params);
- if (code != 0)
- {
- throw new Exception($"分页请求失败: {errMsg}");
- }
- if (currentPage == 1)
- {
- totalCount = int.TryParse(JsonHelper.getDestValue(result, "result.TotalCount"), out var cnt) ? cnt : 0;
- }
- var data = result["result"]?["Data"] as JArray;
- if (data != null)
- {
- allData.Add(data);
- }
- currentPage++;
- } while (currentPage * pageSize <= totalCount); // 或 currentPage <= (totalCount + pageSize - 1) / pageSize
- return allData;
- }
- public JObject QueryExportDataNew(JObject input, MapFlagEnum mapFlag)
- {
- var pagination = JArray.FromObject(input["pagination"]);
- var @params = JArray.FromObject(input["params"]);
- var result = new JObject();
- try
- {
- switch (mapFlag)
- {
- case MapFlagEnum.All:
- var hisDataAll = FetchAllPages(pagination, @params, (p, pr) => hIS.getHISDir(p, pr, out var r, out var m) == 0 ? (0, r, m) : (-1, null, m));
- var converted = mIS.ConvertHISDir(new JObject { ["result"] = new JObject { ["Data"] = hisDataAll } });
- return converted;
- case MapFlagEnum.Mapped:
- var mappedDir = mIS.GetMappedHISDir(pagination, @params);
- if (JsonHelper.parseIrisRtnValue(mappedDir, out var errMsg) != 0)
- return CreateError(-1, errMsg);
- var compareArr = mappedDir["result"]?["Data"] as JArray ?? new JArray();
- var clonedParams = (JArray)@params.DeepClone();
- clonedParams[0]["compareArr"] = compareArr;
- var hisMappedData = FetchAllPages(pagination, clonedParams, (p, pr) => hIS.getHISDir(p, pr, out var r, out var m) == 0 ? (0, r, m) : (-1, r, m));
- result["result"] = new JObject { ["Data"] = hisMappedData };
- result["errorCode"] = 0;
- result["errorMessage"] = "";
- return result;
- case MapFlagEnum.NoMapped:
- var hisRawData = FetchAllPages(pagination, @params, (p, pr) => hIS.getHISDir(p, pr, out var r, out var m) == 0 ? (0, r, m) : (-1, r, m));
- var noMapped = mIS.GetNoMappHISDir(new JObject { ["result"] = new JObject { ["Data"] = hisRawData } });
- if (JsonHelper.parseIrisRtnValue(noMapped, out errMsg) != 0)
- return CreateError(-1, errMsg);
- return noMapped;
- default:
- return null;
- }
- }
- catch (Exception ex)
- {
- return CreateError(-1, "系统异常: " + ex.Message);
- }
- }
- private JObject CreateError(int code, string msg)
- {
- return new JObject
- {
- ["errorCode"] = code,
- ["errorMessage"] = msg
- };
- }
- #endregion
- #region 更新目录附属信息
- public string getDataRowValue(DataRow dr, string columnName)
- {
- if (!dr.Table.Columns.Contains(columnName))
- {
- return "";
- }
- else
- {
- return dr[columnName].ToString();
- }
- }
- private int updateMappedInsuInfo(DataLoaderContext context, out string errMsg)
- {
- int iFalse = 0;
- int iCount = 0;
- List<string> errList = new List<string>();
-
- //入参强制转换未JObject
- JObject joIn = (JObject)context.args[0];
- //获取iTotalCount
- int total = int.Parse(JsonHelper.getDestValue(joIn,"total"));
- //获取表数据
- DataTable dt = (DataTable)joIn["data"].ToObject(typeof(DataTable));
- //设置总进度数
- if (context.setProgressMaximum != null)
- {
- context.setProgressMaximum(total);
- }
- JObject joCondition = JObject.FromObject(joIn["condition"]);
- //遍历
- foreach (DataRow dr in dt.Rows)
- {
- if (joCondition.ContainsKey("hilist_code"))
- {
- joCondition["hilist_code"] = dr["InsuCode"].ToString();
- }
- else
- {
- errMsg = "未检测到相应字段";
- return -1; // 或者其他表示取消的返回值
- }
- joCondition["code"] = dr["InsuCode"].ToString();
- joCondition["HisType"] = dr["HisType"].ToString();
- OutParamWrapper outParWarp = new OutParamWrapper();
- if (action(joCondition, outParWarp) != 0)
- {
- iFalse++;
- errList.Add( $"医保编码:【{dr["InsuCode"]}】,医保名称:【{dr["InsuName"]}】,HIS编码:【{dr["HISCode"]}】提示:{outParWarp.Value}");
- }
- iCount++;
- // 检查是否应取消操作
- if (context.Worker.CancellationPending)
- {
- errMsg = "操作取消!";
- return -1; // 或者其他表示取消的返回值
- }
- if (context.reportProgress != null)
- {
- context.reportProgress(iCount);
- }
- }
- if (iFalse != 0)
- {
- errMsg = ($"总共{iCount}条数据更新完成,但有{iFalse}条更新发生错误!");
- Global.writeLog($"{errMsg}\r\n{string.Join("\r\n", errList)}");
- }
- else
- {
- errMsg = ($"全部数据({iCount}条)更新完成");
- }
- return iFalse;
- }
- public void batchUpdateMappedInsuInfo(JObject joIn, Form frm)
- {
- //条件
- JObject joCondition = (JObject)joIn["condition"].DeepClone();
- switch (joCondition["funno"].ToString())
- {
- case "1312":
- action = updateAuxInfoWrapper;
- trade = trade.GetByCode("1312");
- Global.writeLog("updateAuxInfoWrapper");
- break;
- case "1315":
- action = updateSelfRatioWrapper;
- trade = trade.GetByCode("1319");
- Global.writeLog("updateSelfRatioWrapper");
- break;
- case "1318":
- action = updateCellPriceWrapper;
- trade = trade.GetByCode("1318");
- Global.writeLog("updateCellPriceWrapper");
- break;
- default:
- break;
- }
- ProgressWrapper _dataLoader;
- _dataLoader = new ProgressWrapper(updateMappedInsuInfo, frm);
- _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在更新...", 50);
- _dataLoader.Start(new object[] {joIn }, (result, errMsg) =>
- {
- // 在这里处理结果和错误信息
- if (result == 0)
- {
- MessageBox.Show(errMsg);
- }
- else
- {
- MessageBox.Show(errMsg);
- }
- });
- }
- public void batchUpdateMappedInsuInfo(Func<JObject, OutParamWrapper, int> _action,Form frm)
- {
- action = _action;
- string sqlStr = $"select * from HB_MedInsuMapRelation where Interface_Dr='{Global.inf.interfaceDr}' and Hospital_Dr ='{Global.inf.hospitalDr}'";
- JObject joSqlstr = new JObject();
- joSqlstr.Add("sqlStr", sqlStr);
- JObject joRtn = mIS.QueryMappedData(joSqlstr, "查询所有已对照数据");
- iTotalCount = int.Parse(joRtn["result"]["total"].ToString());
- dtAllMapped = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
- ProgressWrapper _dataLoader;
- _dataLoader = new ProgressWrapper(updateMappedInsuInfo, frm);
- _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在更新...", 50);
- _dataLoader.Start(new object[] { iTotalCount }, (result, errMsg) =>
- {
- // 在这里处理结果和错误信息
- if (result == 0)
- {
- MessageBox.Show(errMsg);
- }
- else
- {
- MessageBox.Show(errMsg);
- }
- });
- }
- public int updateCellPriceWrapper(JObject jo, OutParamWrapper outParamWrapper)
- {
- string err;
- int iresult = updateCellingPrice(jo, out err);
- outParamWrapper.Value = err;
- return iresult;
- }
- private int updateCellingPrice(DataLoaderContext context, out string err)
- {
- if (context.setProgressMaximum != null)
- {
- context.setProgressMaximum(iTotalCount);
- }
- JObject jo = new JObject();
- dynamic joData = null;
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, joData);
- if (joRtn["infcode"].ToString() == "0")
- {
- DataTable dtAuxInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable));
- DateTime dtToday = DateTime.Today;
- string cellingPrice = "";
- string begndate = "";
- string enddate = "";
- int iAdpater = 0;
- foreach (DataRow dr in dtAuxInfo.Rows)
- {
- DateTime dtBegin = getDataRowValue(dr, "begndate") == "" ? Convert.ToDateTime("2000-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "begndate"));
- DateTime dtEnd = getDataRowValue(dr, "enddate") == "" ? Convert.ToDateTime("2099-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "enddate"));
- if ((dtBegin < dtToday) && (dtToday < dtEnd))
- {
- iAdpater++;
- cellingPrice = dr["hilist_pric_uplmt_amt"].ToString();
- begndate = dr["begndate"].ToString();
- enddate = dr["enddate"].ToString();
- }
- }
- //有且只能有一条数据符合
- if (iAdpater == 1)
- {
- JObject joPamam = new JObject();
- joPamam.Add("Code", JsonHelper.getDestValue(jo, "code"));
- joPamam.Add("HisType", JsonHelper.getDestValue(jo, "HisType"));
- joPamam.Add("StartDate", begndate);
- joPamam.Add("EndDate", enddate);
- joPamam.Add("CeilingPrice", cellingPrice);
- JObject joUpdateRtn = mIS.UpdateDirectoryBySelf(joPamam);
- string error = "";
- if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out error) != 0)
- {
- err = "修改失败:" + error;
- return -1;
- }
- else
- {
- err = "修改成功";
- return 0;
- }
- }
- else
- {
- err = "中心返回符合条数的记录不唯一或者为空,请检查!";
- return -1;
- }
- }
- else
- {
- err = "查询中心数据出错,请检查!";
- return -1;
- }
- }
- public int updateCellingPrice(JObject joData, out string err)
- {
- err = "";
- //dynamic joData = (JObject)jo.DeepClone();
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(TradeEnum.InsuPriceLimitDirectory, joData);
- if (joRtn["infcode"].ToString() == "0")
- {
- DataTable dtAuxInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable));
- DateTime dtToday = DateTime.Today;
- string cellingPrice = "";
- string begndate = "";
- string enddate = "";
- int iAdpater = 0;
- foreach (DataRow dr in dtAuxInfo.Rows)
- {
- DateTime dtBegin = getDataRowValue(dr, "begndate") == "" ? Convert.ToDateTime("2000-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "begndate"));
- DateTime dtEnd = getDataRowValue(dr, "enddate") == "" ? Convert.ToDateTime("2099-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "enddate"));
- if ((dtBegin < dtToday) && (dtToday < dtEnd))
- {
- iAdpater++;
- cellingPrice = dr["hilist_pric_uplmt_amt"].ToString();
- begndate = dr["begndate"].ToString();
- enddate = dr["enddate"].ToString();
- }
- }
- //有且只能有一条数据符合
- if (iAdpater == 1)
- {
- JObject joPamam = new JObject();
- joPamam.Add("Code", JsonHelper.getDestValue(joData, "code"));
- joPamam.Add("HisType", JsonHelper.getDestValue(joData, "HisType"));
- joPamam.Add("StartDate", begndate);
- joPamam.Add("EndDate", enddate);
- joPamam.Add("CeilingPrice", cellingPrice);
- JObject joUpdateRtn = mIS.UpdateDirectoryBySelf(joPamam);
- string error = "";
- if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out error) != 0)
- {
- err = "修改失败:" + error;
- return -1;
- }
- else
- {
- err = "修改成功";
- return 0;
- }
- }
- else
- {
- err = "中心返回符合条数的记录不唯一或者为空,请检查!";
- return -1;
- }
- }
- else
- {
- err = "查询中心数据出错,请检查!";
- return -1;
- }
- }
- private int updateSelfRatioWrapper(JObject jo, OutParamWrapper outParamWrapper)
- {
- string err;
- int iresult = updateSelfRatioInfo(jo, out err);
- outParamWrapper.Value = err;
- return iresult;
- }
- public int updateSelfRatioInfo(JObject jo, out string err)
- {
- err = "";
- dynamic joData = (JObject)jo.DeepClone();
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(TradeEnum.PrepayPercentDirectory, joData);
- if (joRtn["infcode"].ToString() == "0")
- {
- DataTable dtRatioInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable));
- DateTime dtToday = DateTime.Today;
- string cellingPrice = "";
- string begndate = "";
- string enddate = "";
- int iAdpater = 0;
- var dataArray = JArray.FromObject(joRtn["output"]["data"]);
- DateTime today = DateTime.Today;
- var groupedResult = dataArray
- .Where(item =>
- {
- if (DateTime.TryParse(item["enddate"]?.ToString(), out var endDate))
- {
- return endDate.Date >= today.Date;
- }
- return false;
- })
- .GroupBy(item => item["selfpay_prop_psn_type"]?.ToString());
- JArray joArray = new JArray();
- foreach (var group in groupedResult)
- {
- foreach (var item in group)
- {
- // 将 JsonNode 转换为 JObject
- JObject jObj = JObject.Parse(item.ToString());
- dynamic joTmp = new JObject();
- joTmp.HospitalDr = Global.inf.hospitalDr;
- joTmp.InterfaceDr = Global.inf.interfaceDr;
- joTmp.updateUserID = Global.user.ID;
- joTmp.Code = jObj["hilist_code"];
- joTmp.PersonnelType = jObj["selfpay_prop_psn_type"];
- joTmp.ProportionType = jObj["selfpay_prop_type"];
- joTmp.Proportion = jObj["selfpay_prop"];
- joTmp.BeginDate = jObj["begndate"];
- joTmp.EndDate = jObj["enddate"];
- joTmp.InsuranceAreaCode = jObj["insu_admdvs"];
- joTmp.PoolAreaNO = jObj["poolarea_no"];
- joTmp.ValidFlag = jObj["vali_flag"];
- joTmp.RequiredID = jObj["rid"];
- joArray.Add(joTmp);
- }
- }
- string errMsg = "";
- InvokeHelper invoker = new InvokeHelper();
- joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010085", joArray).ToString(), "设置自费比例");
- if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
- {
- err = errMsg;
- return -1;
- }
- else
- {
- err = ("更新成功!");
- return 0;
- }
- }
- else
- {
- err = "查询中心数据出错,请检查!";
- return -1;
- }
- }
- private int updateAuxInfoWrapper(JObject jo, OutParamWrapper outParamWrapper)
- {
- string err;
- int iresult = updateAuxInfo(jo, out err);
- outParamWrapper.Value = err;
- return iresult;
- }
- public int updateAuxInfo(JObject jo, out string err)
- {
- err = "";
- dynamic joData = (JObject)jo.DeepClone();
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(TradeEnum.InsuDirectory, joData);
- if (joRtn["infcode"].ToString() == "0")
- {
- DataTable dtAuxInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable));
- DateTime dtToday = DateTime.Today;
- string chrgitm_lv = "";
- string begndate = "";
- string enddate = "";
- string list_type = "";
- string med_chrgitm_type = "";
- int iAdpater = 0;
- foreach (DataRow dr in dtAuxInfo.Rows)
- {
- DateTime dtBegin = getDataRowValue(dr, "begndate") == "" ? Convert.ToDateTime("2000-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "begndate"));
- DateTime dtEnd = getDataRowValue(dr, "enddate") == "" ? Convert.ToDateTime("2099-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "enddate"));
- if ((dtBegin < dtToday) && (dtToday < dtEnd))
- {
- iAdpater++;
- chrgitm_lv = dr["chrgitm_lv"].ToString();
- begndate = dr["begndate"].ToString();
- enddate = dr["enddate"].ToString();
- list_type = dr["list_type"].ToString();
- med_chrgitm_type = dr["med_chrgitm_type"].ToString();
- }
- }
- //有且只能有一条数据符合
- if (iAdpater == 1)
- {
- JObject joPamam = new JObject();
- joPamam.Add("Code", JsonHelper.getDestValue(jo, "code"));
- joPamam.Add("HisType", JsonHelper.getDestValue(jo, "HisType"));
- joPamam.Add("StartDate", begndate);
- joPamam.Add("EndDate", enddate);
- joPamam.Add("ChargeItemLevel", chrgitm_lv);
- joPamam.Add("ListType", list_type);
- joPamam.Add("ChargeItemType", med_chrgitm_type);
- JObject joUpdateRtn = mIS.UpdateDirectoryBySelf(joPamam);
- string error = "";
- if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out error) != 0)
- {
- err = "修改失败:" + error;
- return -1;
- }
- else
- {
- err = "修改成功";
- return 0;
- }
- }
- else
- {
- err = "中心返回符合条数的记录不唯一或者为空,请检查!";
- return -1;
- }
- }
- else
- {
- err = "查询中心数据出错,请检查!";
- return -1;
- }
- }
- public int updateAuxAndCellPrice(JObject jo, out string error)
- {
- string err = "";
- int iResult = 0;
- error = "";
- if (updateAuxInfo(jo, out err) != 0)
- {
- error = $"更新目录信息失败{err}";
- iResult--;
- }
- //err = "";
- //if (updateCellingPrice(jo, out err) != 0)
- //{
- // error = $"{error};更新限价信息失败{err}";
- // iResult--;
- //}
- return iResult;
- }
- #endregion
- #region 导入
- #endregion
- #region 处理DataError
- public void dataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
- {
- // 🔴 关键:阻止异常继续抛出,程序不会崩溃
- e.ThrowException = false;
- //// 可选:记录日志(用于调试)
- //System.Diagnostics.Debug.WriteLine($"[DataError] Context: {e.Context}, Error: {e.Exception.Message}");
- //// 可选:根据需要清理单元格
- //if (e.Context == DataGridViewDataErrorContexts.Parsing)
- //{
- // // 解析失败时,可以清空单元格或设置默认值
- // DataGridView dgv = (DataGridView)sender;
- // dgv[e.ColumnIndex, e.RowIndex].Value = null; // 或其他默认值
- //}
- }
- #endregion
- }
- }
|