| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126 |
- 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="source">源对象</param>
- /// <param name="isMapped">true=筛选已对照, false=筛选未对照</param>
- private static JObject FilterDictionaryByFlag(JObject source, bool isMapped)
- {
- if (source == null) return null;
- // 1. 创建一个新的 JObject 作为返回结果,保留顶层结构
- JObject resultObj = new JObject();
- // 复制顶层属性 (errorCode, errorMessage 等)
- foreach (var prop in source.Properties())
- {
- if (prop.Name != "result")
- {
- resultObj[prop.Name] = prop.Value.DeepClone();
- }
- }
- // 2. 处理 result 节点
- JToken resultToken = source["result"];
- if (resultToken != null && resultToken.Type == JTokenType.Object)
- {
- JObject resultNode = new JObject();
- // 复制 result 下的非 Data 属性 (如 TotalCount)
- foreach (var prop in ((JObject)resultToken).Properties())
- {
- if (prop.Name != "Data")
- {
- resultNode[prop.Name] = prop.Value.DeepClone();
- }
- }
- // 3. 获取并过滤 Data 数组
- JArray originalData = (JArray)((JObject)resultToken)["Data"];
- JArray filteredData = new JArray();
- if (originalData != null)
- {
- var query = originalData.Children<JObject>();
- // LINQ 过滤逻辑
- IEnumerable<JObject> filteredItems;
- if (isMapped)
- {
- // 已对照: flag 不为空 且 等于 "已对照"
- filteredItems = query.Where(item =>
- {
- string flag = item["flag"]?.ToString();
- return !string.IsNullOrWhiteSpace(flag) && flag == "已对照";
- });
- }
- else
- {
- // 未对照: flag 为空 或 不等于 "已对照"
- filteredItems = query.Where(item =>
- {
- string flag = item["flag"]?.ToString();
- return string.IsNullOrWhiteSpace(flag) || flag != "已对照";
- });
- }
- // 将过滤后的项加入新数组
- foreach (var item in filteredItems)
- {
- filteredData.Add(item.DeepClone());
- }
- }
- // 4. 将过滤后的 Data 放回 result 节点
- resultNode["Data"] = filteredData;
- // 可选:自动更新 TotalCount 为实际过滤后的数量
- // 如果 TotalCount 是字符串类型,需要转换一下
- if (resultNode["TotalCount"] != null)
- {
- resultNode["TotalCount"] = filteredData.Count.ToString();
- }
- else
- {
- // 如果原来没有 TotalCount,也可以加上
- resultNode["TotalCount"] = filteredData.Count.ToString();
- }
- resultObj["result"] = resultNode;
- }
- else
- {
- // 如果没有 result 节点,直接返回空结构或原样返回(视业务而定)
- resultObj["result"] = new JObject();
- }
- return resultObj;
- }
- /// <summary>
- /// 筛选“已对照”的数据 (flag == "已对照")
- /// </summary>
- /// <param name="source">原始 JObject</param>
- /// <returns>新的 JObject,仅包含已对照的数据</returns>
- public JObject FilterMapped(JObject source)
- {
- return FilterDictionaryByFlag(source, true);
- }
- /// <summary>
- /// 筛选“未对照”的数据 (flag != "已对照" 或为空)
- /// </summary>
- /// <param name="source">原始 JObject</param>
- /// <returns>新的 JObject,仅包含未对照的数据</returns>
- public JObject FilterNoMapped(JObject source)
- {
- return FilterDictionaryByFlag(source, false);
- }
- /// <summary>
- /// 查询His和平台的字典对照目录,分全部,已对照,未对照三种情况
- /// </summary>
- /// <param name="input"></param>
- /// <param name="mapFlag"></param>
- /// <returns></returns>
- public JObject QueryDictionary(JObject input, MapFlagEnum mapFlag,string dicType)
- {
- JObject joRtn = new JObject();
- JObject joHisRtn = new JObject();
- joRtn.Add("errorCode", -1);
- joRtn.Add("errorMessage", "");
- if (hIS.QueryHisDictionary(input.ToString(), out joHisRtn, out errMsg) != 0)
- {
- joRtn["errorCode"] = -1;
- joRtn["errorMessage"] = errMsg;
- return joRtn;
- }
- joRtn = mIS.ConvertHISDict(joHisRtn, dicType);
- switch (mapFlag)
- {
- case MapFlagEnum.None:
- return null;
- case MapFlagEnum.All:
- return joRtn;
- case MapFlagEnum.Mapped:
- return FilterDictionaryByFlag(joRtn,true);
- case MapFlagEnum.NoMapped:
- return FilterDictionaryByFlag(joRtn, false);
- default:
- return null;
- }
- }
- /// <summary>
- /// 查询医保平台存储的中心目录
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public JObject QueryMiDirectory(JObject input)
- {
- return mIS.getMIDirectoryByPagination(input);
- }
- public JObject QueryMiDictionary(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; // 或者其他表示取消的返回值
- }
- OutParamWrapper outParWarp = new OutParamWrapper();
- if (action(joCondition, outParWarp) != 0)
- {
- iFalse++;
- errList.Add(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{errList}");
- }
- else
- {
- errMsg = ($"全部数据({iCount}条)更新完成");
- }
- return iFalse;
- }
- public void batchUpdateMappedInsuInfo(JObject joIn, Form frm)
- {
- //条件
- JObject joCondition = (JObject)joIn["condition"].DeepClone();
- switch (joCondition["funno"].ToString())
- {
- 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.GetCode(), 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;
- }
- }
- private int updateCellingPrice(JObject joData, out string err)
- {
- err = "";
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade.GetCode(), 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;
- }
- private int updateSelfRatioInfo(JObject jo, out string err)
- {
- err = "";
- //tbDirectoryCode.Text = JsonHelper.getDestValue(jo, "code");
- //dynamic joData = GetInput(19, out TradeEnum trade);
- TradeEnum trade = TradeEnum.Authenticate;
- dynamic joData = null;
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade.GetCode(), 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;
- }
- private int updateAuxInfo(JObject jo, out string err)
- {
- err = "";
- //tbDirectoryCode.Text = JsonHelper.getDestValue(jo, "code");
- //dynamic joData = GetInput(15, out TradeEnum trade);
- TradeEnum trade = TradeEnum.Authenticate;
- dynamic joData = null;
- JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade.GetCode() , 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;
- }
- }
- #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
- }
- }
|