MedInsuQuery.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.IO;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using PTMedicalInsurance.Common;
  13. using PTMedicalInsurance.Helper;
  14. using PTMedicalInsurance.FormSetter;
  15. using PTMedicalInsurance.Business;
  16. using PTMedicalInsurance.Variables;
  17. namespace PTMedicalInsurance.Forms
  18. {
  19. public partial class MedInsuQuery : Form
  20. {
  21. DataTable dtExport;
  22. //1.声明自适应类实例
  23. AutoResizeForm asc = new AutoResizeForm();
  24. private InvokeHelper invoker = new InvokeHelper();
  25. private HisIrisServices hIS = new HisIrisServices();
  26. private HisMainBusiness hBus = new HisMainBusiness();
  27. public MedInsuQuery()
  28. {
  29. InitializeComponent();
  30. asc.controllInitializeSize(this);
  31. asc.controlAutoSize(this);
  32. }
  33. private void btnClose_Click(object sender, EventArgs e)
  34. {
  35. Close();
  36. }
  37. private void MedInsuQuery_Load(object sender, EventArgs e)
  38. {
  39. //this.WindowState = FormWindowState.Maximized;
  40. tbcMain.SelectedIndex = 1;
  41. dpST.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
  42. dpED.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
  43. dt_ST.Text = DateTime.Now.ToString("yyyy-MM-01 00:00:00");
  44. dt_ET.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
  45. // dgvSettlRecord.AutoGenerateColumns = false;
  46. cbbLevel.SelectedIndex = 0;
  47. cbbOverPrice.SelectedIndex = 0;
  48. GridViewSetter grdSetter = new GridViewSetter();
  49. grdSetter.SetHeaderTextOfMedInsuHosPerInfo(dgvSettlRecord);
  50. grdSetter.SetHeaderTextOfSettltMentFeelDetailInfo(dgvInsuFeeUpload);
  51. grdSetter.DatagridviewColumnWidthAdaptation(dgvInsuFeeUpload);
  52. grdSetter.SetHeaderTextOfSettltMentSelfFeelDetailInfo(dgvSelfFeeData);
  53. }
  54. private void btnQuery_Click(object sender, EventArgs e)
  55. {
  56. btnPrint.Enabled = false;
  57. string sCZYXM = Global.user.name;
  58. string SqlHeard = " Adm_Dr,MdtrtID,Name as PatientName,Age,PsnCertNO,Gend,PsnType,EmpName,AdmInDepName,insuplcAdmdvs,sZYZT AS sZTSM, "
  59. + " AdmBed,RegDate,MainDiagName,AttendDoctorNO,ChiefPhyDocName,'"+ sCZYXM+ "' as OpertName,'' as InHospNo,''Address ";
  60. string SqlStrMain = " SELECT a.*,b.*,a.PatientName AS Name,a.PsnType AS PsnTypeCode,'在院' sZYZT FROM BS_MIPatCurrentInsuInfo a LEFT JOIN BS_MedInsuRegisterInfo b "
  61. + " ON a.MdtrtID=b.InsuRegID AND a.Interface_Dr=b.Interface_Dr AND a.Hospital_Dr=b.Hospital_Dr "
  62. + " WHERE b.Type=1 AND b.ValidFlag=1 AND b.Hospital_Dr= " + Global.inf.hospitalDr + " AND b.Interface_Dr= " + Global.inf.interfaceDr
  63. + " AND b.InsuRegID NOT IN (SELECT MdtrtID FROM BS_MedInsuSettlement WHERE MdtrtID=b.InsuRegID AND BillType=1 AND ValidFlag=1 AND AdmType=2) "
  64. + " AND b.RegDate<='" + dpED.Text + "' AND b.RegDate>'" + dpST.Text + "' " //
  65. + " UNION ALL "
  66. + " SELECT a.*,b.*,a.PatientName AS Name,a.PsnType AS PsnTypeCode,'已结算' AS sZYZT "
  67. + " FROM BS_MIPatCurrentInsuInfo a LEFT JOIN BS_MedInsuRegisterInfo b "
  68. + " ON a.MdtrtID=b.InsuRegID AND a.Interface_Dr=b.Interface_Dr AND a.Hospital_Dr=b.Hospital_Dr "
  69. + " LEFT JOIN BS_MedInsuSettlement c ON a.MdtrtID=b.InsuRegID AND b.InsuRegID=c.MdtrtID AND a.Interface_Dr=b.Interface_Dr AND b.Interface_Dr=c.Interface_Dr "
  70. + " WHERE b.Type=1 AND b.ValidFlag=1 AND c.BillType=1 AND b.Hospital_Dr= " + Global.inf.hospitalDr + " AND b.Interface_Dr= " + Global.inf.interfaceDr
  71. + " AND c.AdmType=2 AND c.SettlementDateTime<='" + dpED.Text + "' AND c.SettlementDateTime>'" + dpST.Text + "' "; //
  72. string sqlStr = " SELECT "+ SqlHeard + " FROM ("+ SqlStrMain +") M ";
  73. //MessageBox.Show(sqlStr);
  74. JObject joSqlstr = new JObject();
  75. joSqlstr.Add("sqlStr", sqlStr);
  76. joSqlstr.Add("Type", "MedInsuHosPInfo");
  77. joSqlstr.Add("hospID", Global.inf.hisHospitalDr);
  78. JArray jaParam = new JArray();
  79. jaParam.Add(joSqlstr);
  80. JObject joSettlQuery = new JObject();
  81. joSettlQuery.Add("params", jaParam);
  82. joSettlQuery.Add("code", "09010059");
  83. InvokeHelper invoker = new InvokeHelper();
  84. JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息");
  85. //MessageBox.Show(joRtn.ToString());
  86. if (joRtn["result"]["data"].ToString() == "[]")
  87. {
  88. MessageBox.Show("查询结果为空!");
  89. return;
  90. }
  91. DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  92. dgvSettlRecord.DataSource = dt;
  93. if (dt.Rows.Count != 0)
  94. {
  95. btnPrint.Enabled = true;
  96. dtExport = dt;
  97. //从HIS获取患者的床号(分床前医保登记的病人床号没有写入医保平台登记表)
  98. for (int i = 0; i < dt.Rows.Count; i++)
  99. {
  100. string BedNo, BedDocName, InHospNo, Address;
  101. JObject joTmp = new JObject();
  102. joTmp.Add("admID", dt.Rows[i]["Adm_Dr"].ToString());
  103. JObject joRtn2 = invoker.invokeHISService(JsonHelper.setIrisInpar("05110014", joTmp).ToString(), "获取患者就诊信息");
  104. if (JsonHelper.parseIrisRtnValue(joRtn2, out string errMsg) == 0)
  105. {
  106. BedNo = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.adm_bed");
  107. BedDocName = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.chfpdr_name");
  108. InHospNo = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.medrcdno");
  109. Address = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.Address");
  110. dt.Rows[i]["AdmBed"] = BedNo;
  111. dt.Rows[i]["AttendDoctorNO"] = BedDocName;
  112. dt.Rows[i]["InHospNo"] = InHospNo;
  113. dt.Rows[i]["Address"] = Address;
  114. }
  115. else
  116. {
  117. if (errMsg.IndexOf("请重新登录") > 0)
  118. {
  119. MessageBox.Show("获取患者信息失败,请重新登录系统!");
  120. break;
  121. }
  122. }
  123. }
  124. }
  125. }
  126. private void btnPrint_Click(object sender, EventArgs e)
  127. {
  128. string LSH = DateTime.Now.ToString("yyyy-MM-dd"); //DateTime.Now.ToString("MMddHHmmssffff");
  129. string sFliePathName = @"C:\Users\Administrator\Desktop\" + LSH + "医保在院患者登记或结算信息.xls";
  130. string ReturnFileName = ExportToExcel.DataTabletoExcel(dtExport, sFliePathName);
  131. if (ReturnFileName != "")
  132. {
  133. MessageBox.Show("导出成功,文件保存路径:【" + ReturnFileName + "】");
  134. System.Diagnostics.Process.Start(ReturnFileName); //打开excel文件
  135. }
  136. else
  137. {
  138. MessageBox.Show("导出失败!");
  139. }
  140. }
  141. private void btnOK_Click(object sender, EventArgs e)
  142. {
  143. string sqlStr;
  144. sqlStr = " SELECT a.Adm_Dr,c.Name, b.HISCode, b.MedInsuNO, b.Price,b.Sumamt,b.ChargeItemLevel,c.ChargeItemLevelName,b.SelfPayProp, ";
  145. sqlStr = sqlStr + " b.UpLimitAmount,b.OverLimitAmount,b.InScopeAmount,b.FullOwnPayAmount,b.PreSelfPayAmount,b.LimitUsedFlag ";
  146. sqlStr = sqlStr + " FROM BS_MedInsuSettlement a LEFT JOIN BS_MedInsuFeeUploadRecord b ";
  147. sqlStr = sqlStr + " ON a.Hospital_Dr=b.Hospital_Dr AND a.MdtrtID=b.MdtrtID AND a.PersonnelNO=b.PersonnelNO ";
  148. sqlStr = sqlStr + " LEFT JOIN HB_MedInsuDirectory c ON b.MedInsuNO=c.Code AND a.Interface_Dr=c.Interface_Dr AND a.Hospital_Dr=c.Hospital_Dr ";
  149. sqlStr = sqlStr + " WHERE b.MedInsuNO<>'' and a.ValidFlag=1 AND a.BillType=1 AND a.AdmType=2 ";
  150. sqlStr = sqlStr + " AND a.Interface_Dr=" + Global.inf.interfaceDr;
  151. sqlStr = sqlStr + " AND a.Hospital_Dr= " + Global.inf.hospitalDr;
  152. sqlStr = sqlStr + " AND a.OccurTime>'" + dt_ST.Text + "'";
  153. sqlStr = sqlStr + " AND a.OccurTime<'" + dt_ET.Text + "'";
  154. if (tb_InHospNo.Text != "")
  155. {
  156. sqlStr = sqlStr + " and a.BillID='" + tb_InHospNo.Text + "'";
  157. }
  158. if (tb_SettleID.Text != "")
  159. {
  160. sqlStr = sqlStr + " and a.SettlementID='" + tb_SettleID.Text + "'";
  161. }
  162. if (cbbOverPrice.Text == "是")
  163. {
  164. sqlStr = sqlStr + " AND b.OverLimitAmount>0 ";
  165. }
  166. else if (cbbOverPrice.Text == "否")
  167. {
  168. sqlStr = sqlStr + " AND b.OverLimitAmount<=0 ";
  169. }
  170. if (cbbLevel.Text == "甲类")
  171. {
  172. sqlStr = sqlStr + " AND b.ChargeItemLevel='01' ";
  173. }
  174. else if (cbbLevel.Text == "乙类")
  175. {
  176. sqlStr = sqlStr + " AND b.ChargeItemLevel='02' ";
  177. }
  178. else if (cbbLevel.Text == "丙类")
  179. {
  180. sqlStr = sqlStr + " AND b.ChargeItemLevel='03' ";
  181. }
  182. JObject joSqlstr = new JObject();
  183. joSqlstr.Add("sqlStr", sqlStr);
  184. JArray jaParam = new JArray();
  185. jaParam.Add(joSqlstr);
  186. JObject joSettlQuery = new JObject();
  187. joSettlQuery.Add("params", jaParam);
  188. joSettlQuery.Add("code", "09010118");
  189. JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询医保结算费用信息");
  190. DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  191. dgvInsuFeeUpload.DataSource = dt;
  192. }
  193. private void btnFind_Click(object sender, EventArgs e)
  194. {
  195. string errMsg;
  196. try
  197. {
  198. JObject joTmp = new JObject();
  199. joTmp.Add("hospCode", Global.user.hosCode);
  200. joTmp.Add("staDate", dpt_ST.Text);
  201. joTmp.Add("endDate", dpt_ET.Text);
  202. //joTmp.Add("error", "");
  203. //joTmp.Add("patInfo", tb_PatInfo.Text);
  204. //joTmp.Add("componentName", "ZFAdm4201AList");
  205. JObject joRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("09030038", joTmp).ToString(), "获取自费患者就诊信息");
  206. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  207. {
  208. MessageBox.Show("获取自费患者就诊信息失败,请联系管理员!" + errMsg);
  209. return;
  210. }
  211. else
  212. {
  213. if ((joRtn["result"].ToString() == "[]"))
  214. {
  215. MessageBox.Show("查询HIS自费患者就诊信息结果为空!");
  216. return;
  217. }
  218. DataTable DT = (DataTable)joRtn["result"].ToObject(typeof(DataTable));
  219. dgvSelfFeeData.DataSource = DT;
  220. }
  221. }
  222. catch (Exception ex)
  223. {
  224. MessageBox.Show("IRIS接口服务【02020085】获取自费患者就诊信息 异常:" + ex.Message);
  225. return;
  226. }
  227. }
  228. private void btnUpload_Click(object sender, EventArgs e)
  229. {
  230. if ((dgvSelfFeeData.DataSource == null) || (dgvSelfFeeData.Rows[dgvSelfFeeData.CurrentRow.Index].Cells["id"].Value.ToString() == ""))
  231. return;
  232. for (int i = 0; i < dgvSelfFeeData.Rows.Count; i++)
  233. {
  234. JArray ja = new JArray();
  235. string errorMsg = "";
  236. string admID = dgvSelfFeeData.Rows[i].Cells["admID"].Value.ToString();
  237. //1.获取HIS费用信息
  238. if (GetSelfPayFeeInfoParam(admID, out ja, out errorMsg) == 0)
  239. {
  240. //按指定条数分割后上传,保存,更新
  241. if (hBus.uploadFeeToCenterSelfPay(TradeEnum.UploadSelfPayFeeInfo, 100, ja, out errorMsg) != 0)
  242. {
  243. MessageBox.Show("费用上传失败:" + errorMsg);
  244. return;
  245. }
  246. }
  247. }
  248. MessageBox.Show("上传完成!");
  249. }
  250. /// <summary>
  251. /// 获取自费患者结算费用信息入参
  252. /// </summary>
  253. /// <param name="AdmID"></param>
  254. /// <param name="joFeeInfo"></param>
  255. /// <param name="outMsg"></param>
  256. /// <returns></returns>
  257. public int GetSelfPayFeeInfoParam(string AdmID, out JArray jaFeeInfo, out string outMsg)
  258. {
  259. jaFeeInfo = null;
  260. JArray ja = new JArray();
  261. JObject jo = new JObject();
  262. jo.Add("admID", AdmID);
  263. JObject joRtn = hIS.GetHISSelfPayFeeInfo(jo);
  264. if (JsonHelper.parseIrisRtnValue(joRtn, out outMsg) != 0)
  265. {
  266. outMsg = "获取HIS自费患者结算费用入参失败,请联系管理员!" + outMsg;
  267. return -1;
  268. }
  269. else
  270. {
  271. JArray jaFee = JArray.Parse(JsonHelper.getDestValue(joRtn, "result.fsiOwnpayPatnFeeListDDTO"));
  272. for (int i = 0; i < jaFee.Count; i++)
  273. {
  274. //重新组织深圳基线版2595接口上传入参
  275. JObject joParam = new JObject();
  276. joParam.Add("reim_acp_id", jaFee[i]["fixmedins_mdtrt_id"].ToString()); //零报受理号
  277. joParam.Add("invoice_no", jaFee[i]["memo"]["invoice_no"].ToString()); //发票号
  278. joParam.Add("fee_ocur_time", jaFee[i]["fee_ocur_time"].ToString()); //费用发生时间
  279. joParam.Add("psn_no", ""); //人员编号
  280. joParam.Add("insu_admdvs", "440300"); //参保区划
  281. joParam.Add("cnt", jaFee[i]["cnt"].ToString()); //数量
  282. joParam.Add("med_type", jaFee[i]["med_type"].ToString()); //医疗类别
  283. joParam.Add("pric", jaFee[i]["pric"].ToString()); //单价
  284. joParam.Add("det_item_fee_sumamt", jaFee[i]["det_item_fee_sumamt"].ToString()); //医疗费总额(元)
  285. joParam.Add("med_list_codg", jaFee[i]["med_list_codg"].ToString()); //医疗目录编码
  286. joParam.Add("medins_list_name", jaFee[i]["medins_list_name"].ToString()); //医药机构目录名称
  287. joParam.Add("medins_list_codg", jaFee[i]["medins_list_codg"].ToString()); //医药机构目录编码
  288. joParam.Add("bkkp_sn", jaFee[i]["bkkp_sn"].ToString()); //费用明细流水号
  289. joParam.Add("bilg_dr_codg", jaFee[i]["bilg_dr_code"].ToString()); //开单医生编码
  290. joParam.Add("bilg_dr_name", jaFee[i]["bilg_dr_name"].ToString()); //开单医师姓名
  291. joParam.Add("lmt_used_flag", "0"); //限制使用标志
  292. joParam.Add("hosp_appr_flag", jaFee[i]["memo"]["hosp_appr_flag"].ToString()); //医院审批标志
  293. joParam.Add("BZ1", "");
  294. joParam.Add("BZ2", "");
  295. joParam.Add("BZ3", "");
  296. joParam.Add("BZ4", "");
  297. joParam.Add("BZ5", "");
  298. ja.Add(joParam);
  299. }
  300. jaFeeInfo = ja;
  301. }
  302. return 0;
  303. }
  304. private void btnCancel_Click(object sender, EventArgs e)
  305. {
  306. string errMsg = "";
  307. if ((dgvSelfFeeData.DataSource == null) || (dgvSelfFeeData.Rows[dgvSelfFeeData.CurrentRow.Index].Cells["id"].Value.ToString() == ""))
  308. return;
  309. for (int i = 0; i < dgvSelfFeeData.Rows.Count; i++)
  310. {
  311. string admID = dgvSelfFeeData.Rows[i].Cells["admID"].Value.ToString();
  312. JObject jo = new JObject();
  313. jo.Add("reim_acp_id", admID); //零报受理号-上传的时候2595这个传参传的是admID
  314. jo.Add("bkkp_sn", "0000"); //传入0000删除所有已经上传的费用明细
  315. jo.Add("psn_no", "");
  316. jo.Add("BZ1", "");
  317. JObject joInput = new JObject();
  318. joInput.Add("data", jo);
  319. JObject joRtn = invoker.invokeCenterService(TradeEnum.CancelSelfPayFeeInfo, joInput);
  320. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  321. {
  322. MessageBox.Show(errMsg);
  323. return;
  324. }
  325. }
  326. MessageBox.Show("撤销完成!");
  327. }
  328. }
  329. }