ToPutOnRecord.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using PTMedicalInsurance.Business;
  4. using PTMedicalInsurance.Common;
  5. using PTMedicalInsurance.Entity;
  6. using PTMedicalInsurance.Entity.Base.Settlement.Record;
  7. using PTMedicalInsurance.Forms.Setters.ToPutOnRecord;
  8. using PTMedicalInsurance.Helper;
  9. using PTMedicalInsurance.Variables;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Data;
  14. using System.Drawing;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. using System.Windows.Forms;
  19. namespace PTMedicalInsurance.Forms.ToPutOnRecord
  20. {
  21. public partial class ToPutOnRecord : Form
  22. {
  23. private InvokeHelper invoker = new InvokeHelper();
  24. private HisMainBusiness hBus = new HisMainBusiness();
  25. private string opsp_dise_code;
  26. private string opsp_dise_name;
  27. private string insu_optins;
  28. private string ide_fixmedins_no;
  29. private string ide_fixmedins_name;
  30. private string diag_dr_code;
  31. private string diag_dr_name;
  32. private string fixmedins_code;
  33. private string fixmedins_name;
  34. private MIIrisServices mis = new MIIrisServices();
  35. GridViewSetter grd = new GridViewSetter();
  36. public DataTable dtInsuranceType;
  37. public DataTable dtDiease;
  38. public DataTable dtInsuranceArea;
  39. public DataTable dtDoctor;
  40. public DataTable dtDept;
  41. public DataTable dtDiagnose;
  42. public ToPutOnRecord()
  43. {
  44. InitializeComponent();
  45. //设置ComBox数据源
  46. SetDBLKCombox(ref dblkcbxInsuranceType_1, AssignComboxDT(out dtInsuranceType,GetDictionary("insutype")));
  47. SetDBLKCombox(ref dblkcbxDieaseCode_1, AssignComboxDT(out dtDiease, GetDirectory("6")));
  48. SetDBLKCombox(ref dblkcbxCbd_1, AssignComboxDT(out dtInsuranceArea, GetDictionary("admdvs",2)));
  49. SetDBLKCombox(ref dblkcbxDoctor_1, AssignComboxDT(out dtDoctor, FormatComboxDatasource(GetDocInfo(""), "insuUserCode", "descripts")));
  50. SetDBLKCombox(ref dblkcbxDept_1, AssignComboxDT(out dtDept, FormatComboxDatasource(GetDocInfo(""), "code", "descripts")));
  51. //初始化界面
  52. InitForm();
  53. //添加转院备案
  54. AddForm(this.tabPage2, new HospitalTransfer(this));
  55. //添加定点备案
  56. AddForm(this.tabPage3, new FixedPointRecord(this));
  57. }
  58. #region 方法封装
  59. private void AddForm(TabPage tabpage,Form frm)
  60. {
  61. tabpage.Controls.Add(frm);
  62. frm.Show();
  63. }
  64. private DataTable GetDBLKComboxTable(string sqlStr)
  65. {
  66. InvokeHelper invoker = new InvokeHelper();
  67. dynamic joInparm = new JObject();
  68. dynamic joTmp = new JObject();
  69. joTmp.sqlStr = sqlStr;
  70. JArray jaParams = new JArray();
  71. jaParams.Add(joTmp);
  72. joInparm.Add("params", JArray.FromObject(jaParams));
  73. joInparm.code = "09010014";
  74. string inParam = joInparm.ToString();
  75. JObject joRtn = invoker.invokeInsuService(inParam, "获取下拉框消息");
  76. //dynamic jsonRtn = JsonConvert.DeserializeObject(strRtn);
  77. DataTable dt = (DataTable)joRtn["result"].ToObject(typeof(DataTable));
  78. //dt.Columns[0].ColumnName = "编码";d
  79. //dt.Columns[1].ColumnName = "名称";
  80. //dt.Columns[2].ColumnName = "拼音查找码";
  81. return dt;
  82. }
  83. private void SetDBLKCombox(ref PTControl.DBLookupCombox dblcbx, string sqlStr)
  84. {
  85. SetDBLKCombox(ref dblcbx, GetDBLKComboxTable(sqlStr));
  86. }
  87. public void SetDBLKCombox(ref PTControl.DBLookupCombox dblcbx, DataTable dt)
  88. {
  89. dblcbx.sDisplayField = "Code,Name,SearchCode";
  90. dblcbx.sDisplayMember = "名称";
  91. dblcbx.sKeyWords = "Code,SearchCode";
  92. dblcbx.DataSource = dt;
  93. dblcbx.RowFilterVisible = true;
  94. dblcbx.TextBox.Width = 400;
  95. dblcbx.DataGridView.Width = 400;
  96. dblcbx.DataGridView.Columns[0].Name = "编码";
  97. dblcbx.DataGridView.Columns[1].Name = "名称";
  98. dblcbx.DataGridView.Columns[2].Name = "查找码";
  99. dblcbx.DataGridView.Columns[0].Width = 100;
  100. dblcbx.DataGridView.Columns[1].Width = 200;
  101. }
  102. /// <summary>
  103. /// 格式化combobox为下拉框指定格式
  104. /// </summary>
  105. /// <param name="sourceTable"></param>
  106. /// <param name="code"></param>
  107. /// <param name="desc"></param>
  108. /// <returns></returns>
  109. public DataTable FormatComboxDatasource(DataTable sourceTable,string code,string desc)
  110. {
  111. // 使用 LINQ 查询源 DataTable
  112. var query = from row in sourceTable.AsEnumerable()
  113. select new { Code = row.Field<string>(code), Name = row.Field<string>(desc) };
  114. // 创建新的 DataTable
  115. DataTable resultTable = new DataTable();
  116. resultTable.Columns.Add("Code", typeof(string));
  117. resultTable.Columns.Add("Name", typeof(string));
  118. resultTable.Columns.Add("SearchCode", typeof(string));
  119. // 将查询结果添加到新的 DataTable
  120. foreach (var item in query)
  121. {
  122. resultTable.Rows.Add(item.Code, item.Name,item.Name);
  123. }
  124. return resultTable;
  125. }
  126. public DataTable QueryRecord(string sqlStr, string desc)
  127. {
  128. JObject joRtn = mis.DynamicQuery(sqlStr, desc);
  129. string err;
  130. if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
  131. {
  132. MessageBox.Show("查询失败");
  133. return null;
  134. }
  135. return (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  136. }
  137. public void AfterSelector(object sender, PTControl.AfterSelectorEventArgs e, out string code, out string name)
  138. {
  139. DataGridViewRow row = e.Value as DataGridViewRow;
  140. DataRowView dataRow = row.DataBoundItem as DataRowView;
  141. code = dataRow["Code"].ToString().Trim();
  142. name = dataRow["Name"].ToString().Trim();
  143. }
  144. #endregion
  145. #region 获取科室,医生信息,字典等
  146. private void InitForm()
  147. {
  148. this.StartPosition = FormStartPosition.CenterParent;
  149. dblkcbxHospitalCode_1.Text = "东莞常平健明眼科医院";
  150. dblkcbxCbd_1.Text = "东莞市";
  151. insu_optins = "441900";
  152. fixmedins_code = Global.inf.hospitalNO;
  153. fixmedins_name = Global.inf.hospitalName;
  154. rbPsnNo_1.Checked = true;
  155. this.tabRecord.SelectedIndex = 1;
  156. this.WindowState = FormWindowState.Maximized;
  157. }
  158. /// <summary>
  159. /// 返回datatable的同时赋值指定的datatable
  160. /// </summary>
  161. /// <param name="dt"></param>
  162. /// <param name="source"></param>
  163. /// <returns></returns>
  164. public DataTable AssignComboxDT(out DataTable dt, DataTable source)
  165. {
  166. dt = source;
  167. return source;
  168. }
  169. public DataTable GetDictionary(string insuCode, int queryType = 1, string extConditon = "")
  170. {
  171. string sqlCondition = " and A.Interface_Dr = '" + Global.inf.interfaceDr_TY.ToString() + "'";
  172. string sqlStr = $"SELECT B.Code,B.Descripts AS Name FROM HB_Dictionary A JOIN HB_DictionaryDataDetail B ON A.ID = B.HBDictionary_Dr WHERE A.InsuCode = '{insuCode}'" ;
  173. if (queryType == 1)
  174. {
  175. sqlStr = sqlStr + sqlCondition + extConditon;
  176. }
  177. else
  178. {
  179. sqlStr = sqlStr + extConditon;
  180. }
  181. return GetDBLKComboxTable(sqlStr);
  182. }
  183. public DataTable GetDirectory(string histype, int queryType = 1, string extConditon = "")
  184. {
  185. string sqlCondition = " and A.Interface_Dr = '" + Global.inf.interfaceDr_TY.ToString() + "'";
  186. string sqlStr = $"SELECT A.Code, A.Name FROM HB_MedInsuDirectory A where A.ValidFlag='1' And A.HisType={histype}";
  187. if (queryType == 1)
  188. {
  189. sqlStr = sqlStr + sqlCondition + extConditon;
  190. }
  191. else
  192. {
  193. sqlStr = sqlStr + extConditon;
  194. }
  195. return GetDBLKComboxTable(sqlStr);
  196. }
  197. public DataTable GetDeptInfo()
  198. {
  199. try
  200. {
  201. JObject joInput = new JObject();
  202. joInput.Add("hospID", Global.inf.hisHospitalDr);
  203. string inpar = JsonHelper.setIrisInpar("09030043", joInput).ToString();
  204. JObject joRtn = invoker.invokeHISService(inpar, "获取医院用户信息");
  205. DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
  206. return dt;
  207. }
  208. catch (Exception ex)
  209. {
  210. return null;
  211. }
  212. }
  213. public DataTable GetDocInfo(string UserID)
  214. {
  215. try
  216. {
  217. JObject joInput = new JObject();
  218. joInput.Add("hospID", Global.inf.hisHospitalDr);
  219. joInput.Add("userID", UserID);
  220. string inpar = JsonHelper.setIrisInpar("01040297", joInput).ToString();
  221. JObject joRtn = invoker.invokeHISService(inpar, "获取医院用户信息");
  222. DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
  223. return dt;
  224. }
  225. catch (Exception ex)
  226. {
  227. return null;
  228. }
  229. }
  230. #endregion
  231. #region 业务封装
  232. /// <summary>
  233. /// 医保患者参保信息获取
  234. /// </summary>
  235. /// <param name="OutParam"></param>
  236. /// <returns></returns>
  237. public int GetPersonInfo(out string outParam)
  238. {
  239. string patInfo = "";
  240. //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  241. if (hBus.readCard(out outParam) != 0)
  242. {
  243. return -1;
  244. }
  245. else
  246. {
  247. patInfo = outParam;
  248. //展示患者信息界面
  249. if (hBus.showPatInfo(patInfo, out outParam) != 0)
  250. {
  251. return -1;
  252. }
  253. }
  254. //患者信息赋值给全局变量
  255. patInfo = outParam;
  256. if (hBus.setGlobalPatAfaterShowPatInfo(patInfo, out outParam) != 0)
  257. {
  258. return -1;
  259. }
  260. //校验HIS姓名与医保姓名是否一致
  261. if (hBus.checkName(Global.pat.name, out outParam) != 0)
  262. {
  263. return -1;
  264. }
  265. return 0;
  266. }
  267. #endregion
  268. #region 事件
  269. private void btReadCard_1_Click(object sender, EventArgs e)
  270. {
  271. string PatInfo = "";
  272. if (GetPersonInfo(out PatInfo) != 0)
  273. {
  274. MessageBox.Show("读卡失败:" + PatInfo);
  275. }
  276. tbName_1.Text = Global.pat.name;
  277. tbPsnNO_1.Text = Global.pat.psn_no;
  278. tbPsnNo2_1.Text = tbPsnNO_1.Text = Global.pat.psn_no;
  279. foreach (DataRow row in ((DataTable)dblkcbxInsuranceType_1.DataSource).Rows)
  280. {
  281. if (row["Code"].ToString() == Global.pat.insuType)
  282. {
  283. dblkcbxInsuranceType_1.Text = row["Name"].ToString();
  284. }
  285. }
  286. }
  287. private void btClose_1_Click(object sender, EventArgs e)
  288. {
  289. Close();
  290. }
  291. private void btApply_1_Click(object sender, EventArgs e)
  292. {
  293. JObject joTmp = new JObject();
  294. joTmp.Add("psn_no", tbPsnNO_1.Text);
  295. joTmp.Add("insutype", Global.pat.insuType);
  296. joTmp.Add("opsp_dise_code", opsp_dise_code);
  297. joTmp.Add("opsp_dise_name", opsp_dise_name);
  298. joTmp.Add("tel", tbTel_1.Text);
  299. joTmp.Add("addr", tbAddress_1.Text);
  300. joTmp.Add("insu_optins", insu_optins);
  301. joTmp.Add("ide_fixmedins_no", Global.inf.hospitalNO);
  302. joTmp.Add("ide_fixmedins_name", Global.inf.hospitalName);
  303. joTmp.Add("hosp_ide_date", dpAuth.Value.ToString("yyyy-MM-dd"));
  304. joTmp.Add("diag_dr_code", diag_dr_code);
  305. joTmp.Add("diag_dr_name", diag_dr_name);
  306. joTmp.Add("begndate", dpStart.Value.ToString("yyyy-MM-dd"));
  307. joTmp.Add("enddate", dpEnd.Value.ToString("yyyy-MM-dd"));
  308. JObject jo = new JObject();
  309. jo.Add("fixmedins_code", fixmedins_code);
  310. jo.Add("fixmedins_name", fixmedins_name);
  311. JArray ja = new JArray();
  312. ja.Add(jo);
  313. joTmp.Add("psn_fixed_detl_list", ja);
  314. JObject joData = new JObject();
  315. joData.Add("data", joTmp);
  316. JObject joRtn = invoker.invokeCenterService(TradeEnum.ChronicDiseaseRecord, joData);
  317. string err;
  318. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  319. {
  320. MessageBox.Show(err);
  321. }
  322. else
  323. {
  324. //存到后台
  325. ChronicDiseaseRecordInput chronicIn = JsonConvert.DeserializeObject<ChronicDiseaseRecordInput>(joTmp.ToString());
  326. JObject joDbIn = chronicIn.ConvertToDBJson();
  327. string declareNo = JsonHelper.getDestValue(joRtn, "output.result.trt_dcla_detl_sn");
  328. joDbIn.Add("DeclareNo", declareNo);
  329. joDbIn.Add("RecordType", "C");
  330. joDbIn.Add("RecordStatus", "1");
  331. joDbIn.Add("CreateUser", Global.user.ID);
  332. joDbIn.Add("PatientName", Global.pat.name);
  333. joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
  334. if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
  335. {
  336. MessageBox.Show("插入失败");
  337. }
  338. //查询后在下方表格显示
  339. string sqlStr = $"select * from BS_InsuPersonnelRecord where DeclareNo ='{declareNo}'";
  340. dgvApplyResult.DataSource = QueryRecord(sqlStr, "查询慢病备案记录");
  341. MessageBox.Show("申请成功");
  342. }
  343. }
  344. private void dblkcbxDoctor_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
  345. {
  346. AfterSelector(sender, e, out diag_dr_code, out diag_dr_name);
  347. }
  348. private void dblkcbxCbd_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
  349. {
  350. string tmp;
  351. AfterSelector(sender, e, out insu_optins, out tmp);
  352. }
  353. private void dblkcbxDept_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
  354. {
  355. }
  356. private void dblkcbxHospitalCode_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
  357. {
  358. AfterSelector(sender, e, out fixmedins_code, out fixmedins_name);
  359. }
  360. private void dblkcbxDieaseCode_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
  361. {
  362. AfterSelector(sender, e, out opsp_dise_code, out opsp_dise_name);
  363. }
  364. private void btQueryCenterRecord_1_Click(object sender, EventArgs e)
  365. {
  366. JObject joTmp = new JObject();
  367. joTmp.Add("psn_no", tbPsnNo2_1.Text);
  368. JObject joData = new JObject();
  369. joData.Add("data", joTmp);
  370. //5301 也可以
  371. JObject joRtn = invoker.invokeCenterService(TradeEnum.QueryChronicDiseaseRecordLocal, joData);
  372. string err;
  373. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  374. {
  375. MessageBox.Show(err);
  376. }
  377. else
  378. {
  379. List<QueryChronicDiseaseRecord> lst = JsonConvert.DeserializeObject<List<QueryChronicDiseaseRecord>>(JsonHelper.getDestValue(joRtn, "output.result"));
  380. DataTable dt = (DataTable)joRtn["output"]["result"].ToObject(typeof(DataTable));
  381. QueryChronicDiseaseRecord qcd = new QueryChronicDiseaseRecord();
  382. qcd.SetHeaderText(dgvApplyResult, new Font("Arial", 9));
  383. dgvApplyResult.DataSource = lst;
  384. }
  385. }
  386. private void btQueryHisRecord_1_Click(object sender, EventArgs e)
  387. {
  388. string conditon = "";
  389. if (rbName_1.Checked)
  390. {
  391. conditon = $" PatientName ='{tbPsnNo2_1.Text}'";
  392. }
  393. if (rbPsnNo_1.Checked)
  394. {
  395. conditon = $" PersonnelNO ='{tbPsnNo2_1.Text}'";
  396. }
  397. if (rbDeclareNo_1.Checked)
  398. {
  399. conditon = $" DeclareNo ='{tbPsnNo2_1.Text}'";
  400. }
  401. string sqlStr = $"select * from BS_InsuPersonnelRecord where {conditon} ";
  402. grd.SetHeaderTextOfApplyResult1(dgvApplyResult);
  403. dgvApplyResult.DataSource = QueryRecord(sqlStr, "查询慢病备案记录");
  404. }
  405. private void btCancleByHis_1_Click(object sender, EventArgs e)
  406. {
  407. int i = dgvApplyResult.SelectedIndex;
  408. JObject joInput = new JObject();
  409. joInput.Add("psn_no", dgvApplyResult.Rows[i].Cells["PersonnelNO"].Value.ToString());
  410. joInput.Add("trt_dcla_detl_sn", dgvApplyResult.Rows[i].Cells["DeclareNo"].Value.ToString());
  411. joInput.Add("opsp_dise_code", dgvApplyResult.Rows[i].Cells["ChronicDiseaseCode"].Value.ToString());
  412. joInput.Add("begndate", dgvApplyResult.Rows[i].Cells["BusinStartDate"].Value.ToString());
  413. joInput.Add("memo", rtbCancleReason_1.Text);
  414. JObject joData = new JObject();
  415. joData.Add("data", joInput);
  416. JObject joRtn = invoker.invokeCenterService(TradeEnum.CancleChronicDiseaseRecord, joData);
  417. string err;
  418. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  419. {
  420. MessageBox.Show(err);
  421. }
  422. else
  423. {
  424. //更新后台
  425. JObject joDbIn = new JObject();
  426. joDbIn.Add("DeclareNo", dgvApplyResult.Rows[i].Cells["DeclareNo"].ToString());
  427. joDbIn.Add("RecordStatus", "-1");
  428. joDbIn.Add("CreateUser", Global.user.ID);
  429. joDbIn.Add("PersonnelNO", dgvApplyResult.Rows[i].Cells["PersonnelNO"].ToString());
  430. joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
  431. if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
  432. {
  433. MessageBox.Show("中心撤销成功但平台更新失败");
  434. }
  435. else
  436. {
  437. MessageBox.Show("撤销成功");
  438. }
  439. }
  440. }
  441. #endregion
  442. private void btCancleByCenter_1_Click(object sender, EventArgs e)
  443. {
  444. int i = dgvApplyResult.SelectedIndex;
  445. JObject joInput = new JObject();
  446. joInput.Add("psn_no", dgvApplyResult.Rows[i].Cells["psn_no"].Value.ToString());
  447. joInput.Add("trt_dcla_detl_sn", dgvApplyResult.Rows[i].Cells["trt_dcla_detl_sn"].Value.ToString());
  448. joInput.Add("opsp_dise_code", dgvApplyResult.Rows[i].Cells["opsp_dise_code"].Value.ToString());
  449. joInput.Add("begndate", dgvApplyResult.Rows[i].Cells["begndate"].Value.ToString());
  450. joInput.Add("memo", rtbCancleReason_1.Text);
  451. JObject joData = new JObject();
  452. joData.Add("data", joInput);
  453. JObject joRtn = invoker.invokeCenterService(TradeEnum.CancleChronicDiseaseRecord, joData);
  454. string err;
  455. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  456. {
  457. MessageBox.Show(err);
  458. }
  459. else
  460. {
  461. //更新后台
  462. JObject joDbIn = new JObject();
  463. joDbIn.Add("DeclareNo", dgvApplyResult.Rows[i].Cells["DeclareNo"].ToString());
  464. joDbIn.Add("RecordStatus", "-1");
  465. joDbIn.Add("CreateUser", Global.user.ID);
  466. joDbIn.Add("PersonnelNO", dgvApplyResult.Rows[i].Cells["PersonnelNO"].ToString());
  467. joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
  468. if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
  469. {
  470. MessageBox.Show("中心撤销成功但平台更新失败");
  471. }
  472. else
  473. {
  474. MessageBox.Show("撤销成功");
  475. }
  476. }
  477. }
  478. }
  479. }