DirectoryMap.cs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  1. 
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using PTMedicalInsurance.Business;
  5. using PTMedicalInsurance.Common;
  6. using PTMedicalInsurance.Forms.BasicDatas.services;
  7. using PTMedicalInsurance.Helper;
  8. using PTMedicalInsurance.Variables;
  9. using Sunny.UI;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Data;
  14. using System.Drawing;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Reflection;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using System.Windows.Forms;
  21. using DataTable = System.Data.DataTable;
  22. using Global = PTMedicalInsurance.Variables.Global;
  23. namespace PTMedicalInsurance.Forms.BasicDatas
  24. {
  25. public partial class DirectoryMap : Form
  26. {
  27. private Form mainForm;
  28. MIIrisServices mIS = new MIIrisServices();
  29. private HisDirectoryCategoryEnum hisDirectoryCategory;
  30. private MapFlagEnum mapFlag;
  31. private int pageSize = 50;
  32. private int currentPage = 1;
  33. private string sortColumn = "Code";
  34. private DirectoryMapService directoryMapService = new DirectoryMapService();
  35. private GridViewSetter gvdSetter = new GridViewSetter();
  36. private string errMsg;
  37. private string directoryCategoryDesc; //目录大类中文说明,配合目录导出使用
  38. private string mapFlagDesc; //对照标志中文说明,配合目录导出使用
  39. public DirectoryMap()
  40. {
  41. InitializeComponent();
  42. }
  43. public DirectoryMap(Form frm)
  44. {
  45. InitializeComponent();
  46. InitForm(frm);
  47. }
  48. /// <summary>
  49. /// 标题设置映射字典
  50. /// </summary>
  51. private Dictionary<HisDirectoryCategoryEnum, string> miDirHeaderTextJsonFileMap = new Dictionary<HisDirectoryCategoryEnum, string>
  52. {
  53. { HisDirectoryCategoryEnum.none, "Map_MiDir_Default.json" }, //对照界面中心目录药品
  54. { HisDirectoryCategoryEnum.drugs, "Map_MiDir_Drug.json" }, //对照界面中心目录药品
  55. { HisDirectoryCategoryEnum.diagnosi, "Map_MiDir_MedicalService.json" },//对照界面中心目录诊疗
  56. { HisDirectoryCategoryEnum.consumables, "Map_MiDir_Consumables.json" },//对照界面中心目录材料
  57. };
  58. /// <summary>
  59. /// 标题设置映射字典
  60. /// </summary>
  61. private Dictionary<HisDirectoryCategoryEnum, string> hisDirHeaderTextJsonFileMap = new Dictionary<HisDirectoryCategoryEnum, string>
  62. {
  63. { HisDirectoryCategoryEnum.none, "Map_HisDir_Default.json" }, //对照界面中心目录药品
  64. { HisDirectoryCategoryEnum.drugs, "Map_HisDir_Drug.json" }, //对照界面HIS目录药品
  65. { HisDirectoryCategoryEnum.diagnosi, "Map_HisDir_MedicalService.json" },//对照界面HIS目录诊疗
  66. { HisDirectoryCategoryEnum.consumables, "Map_HisDir_Consumables.json" },//对照界面HIS目录材料
  67. };
  68. private void InitForm(Form frm)
  69. {
  70. mainForm = frm;
  71. CheckForIllegalCrossThreadCalls = false;
  72. // 禁用关闭按钮
  73. this.FormBorderStyle = FormBorderStyle.None;
  74. // 隐藏标题栏
  75. this.ControlBox = false;
  76. // 其他可能需要的配置
  77. this.TopLevel = false;
  78. this.Dock = DockStyle.Fill; // 根据需要设置 Dock 属性
  79. //
  80. rbgDirecType_C.SelectedIndex = 0;
  81. rbOnlyName.Checked = rbAll.Checked = true;
  82. //
  83. gvdSetter.SetHeaderTextOfMapping_HisDirectory(dgvHISDirectory);
  84. //
  85. dgvCenterDirectory.DataError += directoryMapService.dataGridView_DataError;
  86. }
  87. #region
  88. #region 控件设置
  89. private void SetHisDirectoryCategory()
  90. {
  91. switch (rbgDirecType_C.SelectedIndex)
  92. {
  93. case 0:
  94. hisDirectoryCategory = HisDirectoryCategoryEnum.drugs;
  95. directoryCategoryDesc = "药品";
  96. break;
  97. case 1:
  98. hisDirectoryCategory = HisDirectoryCategoryEnum.diagnosi;
  99. directoryCategoryDesc = "诊疗";
  100. break;
  101. case 2:
  102. hisDirectoryCategory = HisDirectoryCategoryEnum.consumables;
  103. directoryCategoryDesc = "材料";
  104. break;
  105. default:
  106. hisDirectoryCategory = HisDirectoryCategoryEnum.none;
  107. break;
  108. }
  109. }
  110. private void SetMapFlag()
  111. {
  112. if (rbAll.Checked)
  113. {
  114. mapFlag = MapFlagEnum.All;
  115. mapFlagDesc = "全部";
  116. sortColumn = "Code";
  117. }
  118. else if (rbMaped.Checked)
  119. {
  120. mapFlag = MapFlagEnum.Mapped;
  121. mapFlagDesc = "已对照";
  122. sortColumn = "HisCode";
  123. }
  124. else if (rbNoMaped.Checked)
  125. {
  126. mapFlag = MapFlagEnum.NoMapped;
  127. mapFlagDesc = "未对照";
  128. sortColumn = "Code";
  129. }
  130. else
  131. {
  132. mapFlag = MapFlagEnum.None;
  133. mapFlagDesc = "未知";
  134. sortColumn = "Code";
  135. }
  136. }
  137. #endregion
  138. #region 获取入参
  139. private JObject GetHisDirInput()
  140. {
  141. JArray jaPagination = new JArray();
  142. JArray jaParams = new JArray();
  143. string flag = "All";
  144. dynamic joParam = new JObject();
  145. joParam.code = "";
  146. joParam.descripts = "";
  147. joParam.FindType = new JArray();
  148. joParam.TypeID = "";
  149. joParam.alias = tbHISDirectoryFilter.Text;
  150. joParam.include = "Hosp";
  151. joParam.groupID = "324";
  152. joParam.hospID = Global.inf.hisHospitalDr;
  153. joParam.interfaceDr = Global.inf.interfaceDr;
  154. joParam.type = hisDirectoryCategory.ToString() ;
  155. joParam.flag = mapFlag.ToString();
  156. joParam.specInput = txtSpecFilter.Text.Trim();
  157. jaParams.Add(joParam);
  158. dynamic joPagination = new JObject();
  159. joPagination.pageSize = pageSize;
  160. //joPagination.pageSize = 2;
  161. joPagination.currentPage = currentPage;
  162. joPagination.sortColumn = sortColumn;
  163. joPagination.sortOrder = "asc";
  164. jaPagination.Add(joPagination);
  165. JObject joRtn = new JObject();
  166. joRtn.Add("params", jaParams);
  167. joRtn.Add("pagination",jaPagination);
  168. return joRtn;
  169. }
  170. private JObject GetInsuDirInput()
  171. {
  172. JObject joInput = new JObject {
  173. { "currentPage" , currentPage },
  174. { "pageSize" , pageSize },
  175. { "serviceCode" , "09010042" },
  176. { "directoryType" , (int)hisDirectoryCategory },
  177. { "directoryCode" , tbInsuCode.Text },
  178. { "directoryName" , tbCenterDirectoryFilter.Text },
  179. { "approvalNO" , tbApprovalNO.Text },
  180. { "dosageForm" , tbDosageForm.Text },
  181. { "specifications" , tbSpecifications.Text },
  182. { "manufacturers" , tbManufacturer.Text },
  183. { "directoryDr" , Global.inf.interfaceDr }
  184. };
  185. return joInput;
  186. }
  187. /// <summary>
  188. /// 获取更新医保信息的入参
  189. /// </summary>
  190. /// <param name="Index"></param>
  191. /// <param name="frm"></param>
  192. /// <param name="trade"></param>
  193. /// <returns></returns>
  194. private JObject GetUpdateInsuInfoInput(int Index, UpdateDirecotryCondition frm, out TradeEnum trade)
  195. {
  196. trade = TradeEnum.MedicalServiceDirectory;
  197. dynamic joData = new JObject();
  198. switch (Index)
  199. {
  200. case 14://民族药品目
  201. {
  202. trade = TradeEnum.NationalityDrug;
  203. joData.med_list_codg = frm.Code; //医疗目录编码
  204. joData.genname_codg = ""; //通用名编号
  205. joData.drug_genname = ""; //药品通用名
  206. joData.drug_prodname = frm.Desc; //药品商品名
  207. joData.reg_name = ""; //注册名称
  208. joData.tcmherb_name = ""; //中草药名称
  209. joData.mlms_name = ""; //药材名称
  210. joData.vali_flag = ""; //有效标志
  211. joData.rid = ""; //唯一记录号
  212. joData.ver = ""; //版本号
  213. joData.ver_name = ""; //版本名称
  214. joData.opt_begn_time = ""; //经办开始时间
  215. joData.opt_end_time = ""; //经办结束时间
  216. joData.updt_time = frm.UpdateTime; //更新时间
  217. joData.page_num = frm.CurrentPage; //当前页数
  218. joData.page_size = frm.PageSize; //本页数据量
  219. break;
  220. }
  221. case 15://目录信息查询
  222. {
  223. trade = TradeEnum.InsuDirectory;
  224. joData.query_date = ""; //查询时间点
  225. joData.hilist_code = frm.Code; //医保目录编码
  226. joData.insu_admdvs = frm.InsuAdmDvs; //参保机构医保区划
  227. joData.begndate = ""; //开始日期
  228. joData.hilist_name = frm.Desc; //医保目录名称
  229. joData.wubi = ""; //五笔助记码
  230. joData.pinyin = ""; //拼音助记码
  231. joData.med_chrgitm_type = ""; //医疗收费项目类别
  232. joData.chrgitm_lv = ""; //收费项目等级
  233. joData.lmt_used_flag = ""; //限制使用标志
  234. joData.list_type = ""; //目录类别
  235. joData.med_use_flag = ""; //医疗使用标志
  236. joData.matn_used_flag = ""; //生育使用标志
  237. joData.hilist_use_type = ""; //医保目录使用类别
  238. joData.lmt_cpnd_type = ""; //限复方使用类型
  239. joData.vali_flag = ""; //有效标志
  240. joData.updt_time = frm.UpdateTime; //更新时间
  241. joData.page_num = frm.CurrentPage; //当前页数
  242. joData.page_size = frm.PageSize; //本页数据量
  243. break;
  244. }
  245. case 16://医疗与医保目录匹配
  246. {
  247. trade = TradeEnum.MedicalAndInsuDirectory;
  248. joData.query_date = ""; //查询时间点
  249. joData.medins_list_codg = ""; //定点医药机构目录编号
  250. joData.hilist_code = frm.Code; //医保目录编码
  251. joData.list_type = ""; //目录类别
  252. joData.insu_admdvs = frm.InsuAdmDvs; //参保机构医保区划
  253. joData.begndate = ""; //开始日期
  254. joData.vali_flag = ""; //有效标志
  255. joData.updt_time = frm.UpdateTime; //更新时间
  256. joData.page_num = frm.CurrentPage; //当前页数
  257. joData.page_size = frm.PageSize; //本页数据量
  258. break;
  259. }
  260. case 17://医药机构目录匹配
  261. {
  262. trade = TradeEnum.MedcineOrgDirectory;
  263. joData.query_date = ""; //查询时间点
  264. joData.fixmedins_code = ""; //定点医药机构编号
  265. joData.medins_list_codg = ""; //定点医药机构目录编号
  266. joData.medins_list_name = ""; //定点医药机构目录名称
  267. joData.insu_admdvs = frm.InsuAdmDvs; //参保机构医保区划
  268. joData.list_type = ""; //目录类别
  269. joData.med_list_codg = frm.Code; //医疗目录编码
  270. joData.begndate = ""; //开始日期
  271. joData.vali_flag = ""; //有效标志
  272. joData.updt_time = frm.UpdateTime; //更新时间
  273. joData.page_num = frm.CurrentPage; //当前页数
  274. joData.page_size = frm.PageSize; //本页数据量
  275. break;
  276. }
  277. case 18://医保目录限价
  278. {
  279. trade = TradeEnum.InsuPriceLimitDirectory;
  280. joData.query_date = ""; //查询时间点
  281. joData.hilist_code = frm.Code; //医保目录编码
  282. joData.hilist_lmtpric_type = ""; //医保目录限价类型
  283. joData.overlmt_dspo_way = ""; //医保目录超限处理方式
  284. joData.insu_admdvs = frm.InsuAdmDvs; //参保机构医保区划
  285. joData.begndate = ""; //开始日期
  286. joData.enddate = ""; //结束日期
  287. joData.vali_flag = ""; //有效标志
  288. joData.rid = ""; //唯一记录号
  289. joData.tabname = ""; //表名
  290. joData.poolarea_no = ""; //统筹区
  291. joData.updt_time = frm.UpdateTime; //更新时间
  292. joData.page_num = frm.CurrentPage; //当前页数
  293. joData.page_size = frm.PageSize; //本页数据量
  294. break;
  295. }
  296. case 19://医保目录先自付比例
  297. {
  298. trade = TradeEnum.PrepayPercentDirectory;
  299. joData.query_date = ""; //查询时间点
  300. joData.hilist_code = frm.Code; //医保目录编码
  301. joData.selfpay_prop_psn_type = "";//医保目录自付比例人员类别
  302. joData.selfpay_prop_type = ""; //目录自付比例类别
  303. joData.insu_admdvs = frm.InsuAdmDvs; //参保机构医保区划
  304. joData.begndate = ""; //开始日期
  305. joData.enddate = ""; //结束日期
  306. joData.vali_flag = ""; //有效标志
  307. joData.rid = ""; //唯一记录号
  308. joData.tabname = ""; //表名
  309. joData.poolarea_no = ""; //统筹区
  310. joData.updt_time = frm.UpdateTime; //更新时间
  311. joData.page_num = frm.CurrentPage; //当前页数
  312. joData.page_size = frm.PageSize; //本页数据量
  313. break;
  314. }
  315. }
  316. return joData;
  317. }
  318. #endregion
  319. #region 查询
  320. private void QueryDirectory()
  321. {
  322. JObject joRtn = directoryMapService.QueryDirectory(GetHisDirInput(), mapFlag);
  323. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  324. {
  325. MessageBox.Show(errMsg);
  326. }
  327. else
  328. {
  329. DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable));
  330. int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString());
  331. pgHISDirect.TotalCount = totalCount;
  332. pgHISDirect.PageSize = pageSize;
  333. dgvHISDirectory.DataSource = dt;
  334. if (directoryMapService.SetDgvDirectoryHeader(hisDirHeaderTextJsonFileMap.GetValue(hisDirectoryCategory), dgvHISDirectory, out errMsg) != 0)
  335. {
  336. MessageBox.Show(errMsg);
  337. return;
  338. }
  339. dgvHISDirectory.Columns[0].ReadOnly = true;
  340. }
  341. }
  342. private void QueryMiDirectory()
  343. {
  344. JObject joRtn = directoryMapService.QueryMiDirectory(GetInsuDirInput());
  345. if (joRtn["errorCode"].ToString() != "0")
  346. {
  347. MessageBox.Show("IRIS数据返回错误:" + joRtn["errorMessage"].ToString());
  348. return;
  349. }
  350. if (joRtn["result"]["rows"] == null)
  351. {
  352. MessageBox.Show("该节点不存在");
  353. return;
  354. }
  355. if (joRtn["result"]["total"].ToString() == "0")
  356. {
  357. MessageBox.Show("未查询到数据");
  358. dgvCenterDirectory.DataSource = null;
  359. return;
  360. }
  361. DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
  362. int totalCount = int.Parse(joRtn["result"]["total"].ToString());
  363. pgCenterDirect.TotalCount = totalCount;
  364. pgCenterDirect.PageSize = pageSize;
  365. dgvCenterDirectory.DataSource = dt;
  366. if (directoryMapService.SetDgvDirectoryHeader(miDirHeaderTextJsonFileMap.GetValue(hisDirectoryCategory), dgvCenterDirectory, out errMsg) != 0)
  367. {
  368. MessageBox.Show(errMsg);
  369. return;
  370. }
  371. dgvCenterDirectory.Columns[0].ReadOnly = true;
  372. }
  373. #endregion
  374. #region 对照
  375. private void Mapping()
  376. {
  377. int iHis = dgvHISDirectory.CurrentRow.Index;
  378. if (dgvCenterDirectory.CurrentRow == null)
  379. {
  380. MessageBox.Show("请查询中心目录");
  381. return;
  382. }
  383. int iCenter = dgvCenterDirectory.CurrentRow.Index;
  384. DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
  385. DataTable dtCenter = (DataTable)dgvCenterDirectory.DataSource;
  386. dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Code"].Value.ToString();
  387. dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Name"].Value.ToString();
  388. JArray jaParams = new JArray();
  389. dynamic jsonTemp = new JObject();
  390. jsonTemp.ID = dtHis.Rows[iHis]["MapID"];
  391. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  392. jsonTemp.updateUserID = Global.user.ID;
  393. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  394. jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value;
  395. jsonTemp.HISName = dgvHISDirectory.Rows[iHis].Cells["itemDesc"].Value;
  396. jsonTemp.ChargeItemDr = dtHis.Rows[iHis]["ID"];
  397. jsonTemp.DiretoryDr = dtCenter.Rows[iCenter]["medInsuDirectoryID"];
  398. //1.已对照 2.已对照但未上传 3 已对照且已上传
  399. jsonTemp.State = 1;
  400. jsonTemp.HisType = (int)hisDirectoryCategory;
  401. jsonTemp.HisTypeName = rbgDirecType_C.Items[(int)hisDirectoryCategory - 1].ToString();
  402. jsonTemp.InsuCode = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Code"].Value;
  403. jsonTemp.InsuName = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Name"].Value;
  404. jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  405. jaParams.Add(jsonTemp);
  406. JObject joIn = new JObject();
  407. joIn.Add(new JProperty("params", jaParams));
  408. joIn.Add("code", "09010040");
  409. InvokeHelper invoker = new InvokeHelper();
  410. JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "插入对照信息");
  411. //JObject joRtn = JObject.Parse(irisRtn);
  412. if ((int)joRtn["errorCode"] == 0)
  413. {
  414. dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "已对照";
  415. dgvHISDirectory.Rows[iHis].Cells["MapID"].Value =joRtn["data"]["mapID"].ToString();
  416. dtHis.Rows[iHis]["MapID"] = joRtn["data"]["mapID"].ToString();
  417. }
  418. else
  419. {
  420. dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "对照失败";
  421. }
  422. }
  423. private void CancelMapping()
  424. {
  425. int iHis = dgvHISDirectory.CurrentRow.Index;
  426. DataTable dtHis = (DataTable)dgvHISDirectory.DataSource;
  427. JArray jaParams = new JArray();
  428. dynamic jsonTemp = new JObject();
  429. jsonTemp.ID = dtHis.Rows[iHis]["MapID"];
  430. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  431. jsonTemp.updateUserID = Global.user.ID;
  432. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  433. jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value;
  434. jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  435. jaParams.Add(jsonTemp);
  436. JObject joIn = new JObject();
  437. joIn.Add(new JProperty("params", jaParams));
  438. joIn.Add("code", "09010041");
  439. InvokeHelper invoker = new InvokeHelper();
  440. JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "取消对照");
  441. if ((int)joRtn["errorCode"] == 0)
  442. {
  443. dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = "";
  444. dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = "";
  445. dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "";
  446. dgvHISDirectory.Rows[iHis].Cells["MapID"].Value = 0;
  447. }
  448. else
  449. {
  450. dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "取消失败";
  451. }
  452. }
  453. #endregion
  454. #region 导出
  455. private int queryExportData_CallBack(DataLoaderContext context, out string errMsg)
  456. {
  457. DirectoryMapService mapService = new DirectoryMapService();
  458. DataFilter filter = new DataFilter();
  459. filter.mapFlag = mapFlag;
  460. filter.hisDirectoryCategory = hisDirectoryCategory;
  461. filter.HisCodeOrName = tbHISDirectoryFilter.Text;
  462. filter.Spec = txtSpecFilter.Text;
  463. filter.InsuCodeOrName = tbInsuCode.Text;
  464. JObject joIn = mapService.GetHisDiRInput(filter);
  465. JObject joRtn = mapService.QueryExportData(joIn, mapFlag);
  466. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  467. {
  468. return -1;
  469. }
  470. DataTable dtExport = JsonConvert.DeserializeObject<DataTable>(JsonHelper.getDestValue(joRtn, "result.Data"));
  471. //test.Stop();
  472. this.pgHISDirect.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgHISDirect_PageChanged);
  473. if (dtExport.Rows.Count > 0)
  474. {
  475. string directoryType = string.Empty;
  476. string sBZ = "";
  477. switch (rbgDirecType_C.SelectedIndex)
  478. {
  479. case 0:
  480. {
  481. directoryType = "药品";
  482. break;
  483. }
  484. case 1:
  485. {
  486. directoryType = "诊疗";
  487. break;
  488. }
  489. case 2:
  490. {
  491. directoryType = "材料";
  492. break;
  493. }
  494. }
  495. if (rbAll.Checked) sBZ = "全部";
  496. else
  497. if (rbMaped.Checked) sBZ = "已对照";
  498. else
  499. if (rbNoMaped.Checked) sBZ = "未对照";
  500. string LSH = DateTime.Now.ToString("yyyy-MM-dd"); //DateTime.Now.ToString("MMddHHmmssffff");
  501. string filename = LSH + "(" + directoryType + ")医保目录" + sBZ + "信息.xls";
  502. string sFliePathName = Global.curEvt.path + "\\MapRelation\\" + filename;
  503. //string sFliePathName = @"D:\" + LSH + "(" + directoryType + ")医保目录" + sBZ + "信息.xls";
  504. //如果不存在目录,则创建目录
  505. if (!Directory.Exists(Global.curEvt.path + "\\MapRelation"))
  506. {
  507. //创建文件夹
  508. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\MapRelation");
  509. }
  510. //如存在同名文件不询问直接删除
  511. if (File.Exists(sFliePathName))
  512. {
  513. File.Delete(sFliePathName);
  514. }
  515. //新版方法,用的EPPLUS,方便
  516. ExportToExcel.ExportDataTableToExcel(dtExport, sFliePathName);
  517. if (true)
  518. {
  519. errMsg = ($"导出成功,文件保存路径:{sFliePathName}");
  520. return 0;
  521. }
  522. else
  523. {
  524. errMsg = ("导出失败!");
  525. return -1;
  526. }
  527. }
  528. else
  529. {
  530. errMsg = "查询数据集为空!";
  531. return -1;
  532. }
  533. }
  534. #endregion
  535. #region 批量更新
  536. private void batchUpdateMappedInsuInfo(int index)
  537. {
  538. //获取入参条件
  539. TradeEnum trade;
  540. JObject joCondition = new JObject();
  541. UpdateDirecotryCondition updateDirecotryCondition = new UpdateDirecotryCondition();
  542. updateDirecotryCondition.StartPosition = FormStartPosition.CenterParent;
  543. if (updateDirecotryCondition.ShowDialog() == DialogResult.Cancel)
  544. {
  545. //MessageBox.Show("");
  546. return;
  547. }
  548. else
  549. {
  550. joCondition = GetUpdateInsuInfoInput(index,updateDirecotryCondition,out trade);
  551. joCondition.Add("funno", trade.GetCode());
  552. }
  553. //查表
  554. string sqlStr = $"select * from HB_MedInsuMapRelation where Interface_Dr='{Global.inf.interfaceDr}' and Hospital_Dr ='{Global.inf.hospitalDr}'";
  555. JObject joSqlstr = new JObject();
  556. joSqlstr.Add("sqlStr", sqlStr);
  557. JObject joRtn = mIS.QueryMappedData(joSqlstr, "查询所有已对照数据");
  558. JObject joResult = JObject.FromObject(joRtn["result"]);
  559. joResult.Add("condition", joCondition);
  560. directoryMapService.batchUpdateMappedInsuInfo(joResult, this);
  561. }
  562. #endregion
  563. #endregion
  564. private void btTripMenu_Click(object sender, EventArgs e)
  565. {
  566. cmsIntegratedMenu.Show(((Sunny.UI.UIButton)sender), new Point(0, btTripMenu.Height));
  567. }
  568. private void rbgDirecType_C_ValueChanged(object sender, int index, string text)
  569. {
  570. SetHisDirectoryCategory();
  571. }
  572. private void rbAll_ValueChanged(object sender, bool value)
  573. {
  574. SetMapFlag();
  575. }
  576. private void btnQueryHISDirectory_Click(object sender, EventArgs e)
  577. {
  578. currentPage = 1;
  579. QueryDirectory();
  580. }
  581. private void tsmExportAllMappedData_Click(object sender, EventArgs e)
  582. {
  583. MessageBox.Show("请点击按左侧类别导出!");
  584. }
  585. private void tsmExportMappedDataByLeft_Click(object sender, EventArgs e)
  586. {
  587. ProgressWrapper _dataLoader;
  588. _dataLoader = new ProgressWrapper(queryExportData_CallBack, this);
  589. _dataLoader.SetProgressBar(ProgressBarStyle.Marquee, "正在导出...", 50);
  590. _dataLoader.Start(new object[] { 0 }, (result, errMsg) =>
  591. {
  592. // 在这里处理结果和错误信息
  593. if (result == 0)
  594. {
  595. MessageBox.Show(errMsg);
  596. }
  597. else
  598. {
  599. MessageBox.Show(errMsg);
  600. }
  601. });
  602. }
  603. private void pgHISDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count)
  604. {
  605. //当两者均为1说明点击的是查询按钮
  606. if (!((currentPage == 1) && (pageIndex == 1)))
  607. {
  608. currentPage = pageIndex;
  609. QueryDirectory();
  610. }
  611. }
  612. private void btnQueryCenterDirectory_Click(object sender, EventArgs e)
  613. {
  614. currentPage = 1;
  615. QueryMiDirectory();
  616. }
  617. private void pgCenterDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count)
  618. {
  619. if (!((currentPage == 1) && (pageIndex == 1)))
  620. {
  621. currentPage = pageIndex;
  622. QueryMiDirectory();
  623. }
  624. }
  625. private void tsmiMapping_Click(object sender, EventArgs e)
  626. {
  627. Mapping();
  628. }
  629. private void tsmiCancleMapping_Click(object sender, EventArgs e)
  630. {
  631. CancelMapping();
  632. }
  633. private void tsmUpdateCellPriceOfAllMapped_Click(object sender, EventArgs e)
  634. {
  635. batchUpdateMappedInsuInfo(18);
  636. }
  637. private void btSetCenterDirHeaderText_Click(object sender, EventArgs e)
  638. {
  639. //获取数据源
  640. DataGridViewHeaderSetForm frm = new DataGridViewHeaderSetForm(miDirHeaderTextJsonFileMap.GetValue(hisDirectoryCategory), (DataTable)dgvCenterDirectory.DataSource);
  641. frm.StartPosition = FormStartPosition.CenterParent;
  642. if (frm.ShowDialog() == DialogResult.OK)
  643. {
  644. }
  645. }
  646. private void btSetHisDirHeaderText_Click(object sender, EventArgs e)
  647. {
  648. //获取数据源
  649. DataGridViewHeaderSetForm frm = new DataGridViewHeaderSetForm(hisDirHeaderTextJsonFileMap.GetValue(hisDirectoryCategory), (DataTable)dgvHISDirectory.DataSource);
  650. frm.StartPosition = FormStartPosition.CenterParent;
  651. if (frm.ShowDialog() == DialogResult.OK)
  652. {
  653. }
  654. }
  655. private void dgvHISDirectory_SelectionChanged(object sender, EventArgs e)
  656. {
  657. DataGridViewRow dr = dgvHISDirectory.CurrentRow;
  658. if (dr == null)
  659. {
  660. return; // 防止没有选中行
  661. }
  662. if (!dgvHISDirectory.Columns.Contains("InsuCode"))
  663. {
  664. Global.writeLog("未找到InsuCode");
  665. // 可以在这里调试:打印所有列名
  666. foreach (DataGridViewColumn col in dgvHISDirectory.Columns)
  667. {
  668. System.Diagnostics.Debug.WriteLine($"列名: {col.Name}");
  669. Global.writeLog($"列名: {col.Name},值:{dr.Cells[col.Name].Value}");
  670. }
  671. return;
  672. }
  673. // 先检查列是否存在
  674. DataGridViewCell cell = dr.Cells["InsuCode"];
  675. if (cell == null || cell.Value == null || cell.Value == DBNull.Value)
  676. {
  677. return;
  678. }
  679. if (cell != null)
  680. {
  681. if (cell.Value.ToString() != "")
  682. {
  683. tbInsuCode.Text = cell.Value.ToString();
  684. tbCenterDirectoryFilter.Text = "";
  685. tbApprovalNO.Text = "";
  686. }
  687. else
  688. {
  689. tbInsuCode.Text = "";
  690. if (rbOnlyName.Checked)
  691. {
  692. tbInsuCode.Text = "";
  693. tbApprovalNO.Text = "";
  694. tbCenterDirectoryFilter.Text = "%" + dr.Cells["itemDesc"].Value.ToString() + "%";
  695. }
  696. if (rbOnlyApprNO.Checked)
  697. {
  698. tbCenterDirectoryFilter.Text = "";
  699. tbInsuCode.Text = "";
  700. tbApprovalNO.Text = "%" + dr.Cells["pprovalNo"].Value.ToString() + "%";
  701. }
  702. if (rbBoth.Checked)
  703. {
  704. tbInsuCode.Text = "";
  705. tbCenterDirectoryFilter.Text = "%" +dr.Cells["itemDesc"].Value.ToString() + "%";
  706. tbApprovalNO.Text = "%" + dr.Cells["pprovalNo"].Value.ToString() + "%";
  707. }
  708. }
  709. }
  710. }
  711. private void tsmUpdateSelfRatioOfAllMapped_Click(object sender, EventArgs e)
  712. {
  713. batchUpdateMappedInsuInfo(19);
  714. }
  715. private void tsmUpdateLevelTypeOfAllMappedData_Click(object sender, EventArgs e)
  716. {
  717. batchUpdateMappedInsuInfo(15);
  718. }
  719. private void tsmSingleUpdateInsuInfo_Click(object sender, EventArgs e)
  720. {
  721. if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true))
  722. {
  723. MessageBox.Show("请查询HIS目录对照关系,注意选择已对照!");
  724. return;
  725. }
  726. int iMapped = dgvHISDirectory.CurrentRow.Index;
  727. string insuCode = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString();
  728. if (string.IsNullOrEmpty(insuCode))
  729. {
  730. MessageBox.Show("未检测到对应的医保目录,请检查该目录是否已对照!");
  731. return;
  732. }
  733. JObject jo = new JObject();
  734. UpdateDirecotryCondition updateDirecotryCondition = new UpdateDirecotryCondition();
  735. updateDirecotryCondition.Code = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString();
  736. updateDirecotryCondition.StartPosition = FormStartPosition.CenterParent;
  737. if (updateDirecotryCondition.ShowDialog() == DialogResult.Cancel)
  738. {
  739. //MessageBox.Show("");
  740. return;
  741. }
  742. else
  743. {
  744. TradeEnum trade;
  745. jo = GetUpdateInsuInfoInput(15, updateDirecotryCondition, out trade);
  746. jo.Add("code", dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString());
  747. jo.Add("HisType", rbgDirecType_C.SelectedIndex + 1);
  748. jo.Add("funno", trade.GetCode());
  749. }
  750. string error;
  751. if (directoryMapService.updateAuxAndCellPrice(jo, out error) != 0)
  752. {
  753. MessageBox.Show($"更新失败{error}");
  754. }
  755. else
  756. {
  757. MessageBox.Show("更新成功!");
  758. }
  759. }
  760. delegate int UpdateInsuInfoHandler(JObject joData, out string err);
  761. private void SingleUpdateInsuInfo(int index, UpdateInsuInfoHandler handler)
  762. {
  763. if (dgvHISDirectory.CurrentRow == null)
  764. {
  765. MessageBox.Show("请查询HIS目录对照关系!");
  766. return;
  767. }
  768. int iMapped = dgvHISDirectory.CurrentRow.Index;
  769. string insuCode = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString();
  770. if (string.IsNullOrEmpty(insuCode))
  771. {
  772. MessageBox.Show("未检测到对应的医保目录,请检查该目录是否已对照!");
  773. return;
  774. }
  775. JObject jo = new JObject();
  776. UpdateDirecotryCondition updateDirecotryCondition = new UpdateDirecotryCondition();
  777. updateDirecotryCondition.Code = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString();
  778. updateDirecotryCondition.StartPosition = FormStartPosition.CenterParent;
  779. if (updateDirecotryCondition.ShowDialog() == DialogResult.Cancel)
  780. {
  781. //MessageBox.Show("");
  782. return;
  783. }
  784. else
  785. {
  786. TradeEnum trade;
  787. jo = GetUpdateInsuInfoInput(index, updateDirecotryCondition, out trade);
  788. jo.Add("code", dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString());
  789. jo.Add("HisType", rbgDirecType_C.SelectedIndex + 1);
  790. jo.Add("funno", trade.GetCode());
  791. }
  792. string error;
  793. if (handler(jo, out error) != 0)
  794. {
  795. MessageBox.Show($"更新失败{error}");
  796. }
  797. else
  798. {
  799. MessageBox.Show("更新成功!");
  800. }
  801. }
  802. private void tsmUpdateAllMapped_Click(object sender, EventArgs e)
  803. {
  804. MessageBox.Show("暂未开放!");
  805. }
  806. private void tsmUpdateSelfRatioOfAllMapped_Click_1(object sender, EventArgs e)
  807. {
  808. batchUpdateMappedInsuInfo(19);
  809. }
  810. private void tsmSingleUpdateSelfRatioInfo_Click(object sender, EventArgs e)
  811. {
  812. SingleUpdateInsuInfo(19, directoryMapService.updateSelfRatioInfo);
  813. }
  814. private void tsmSingleUpdateTypeLevelInfo_Click(object sender, EventArgs e)
  815. {
  816. SingleUpdateInsuInfo(15, directoryMapService.updateAuxInfo);
  817. }
  818. private void tsmSingleUpdateCellingPriceInfo_Click(object sender, EventArgs e)
  819. {
  820. SingleUpdateInsuInfo(18, directoryMapService.updateCellingPrice);
  821. }
  822. private void tsmImportMapRelation_Click(object sender, EventArgs e)
  823. {
  824. MessageBox.Show("暂未开放!");
  825. }
  826. }
  827. }