123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- using Newtonsoft.Json.Linq;
- using PTMedicalInsurance.Business;
- using PTMedicalInsurance.Helper;
- using PTMedicalInsurance.Variables;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace PTMedicalInsurance.Forms
- {
- public partial class FeeUpload : Form
- {
- private InvokeHelper invoker = new InvokeHelper();
- private MIIrisServices mIS = new MIIrisServices();
- private ManualResetEvent manualReset = new ManualResetEvent(true);
- private HisIrisServices hIS = new HisIrisServices();
- private XmlHelper xmler = new XmlHelper();
- private string funNO;
- private int singleCount;
- private JArray jaFeeDetail;
- public string outParam;
- public struct userState
- {
- public int childProgress;
- public string description;
- public string error;
- public string detailHisCode;
- public string detailHisName;
- public string detailInsuCode;
- }
- private userState getUserState(int progress,string desc,string err, JToken jt)
- {
- userState us = new userState();
- us.childProgress = progress;
- us.description = desc;
- us.error = err;
- JObject jo = (JObject)jt;
- if (jt != null)
- {
- us.detailHisCode = jo["medins_list_codg"].ToString();
- //us.detailHisName = jo["medins_list_desc"].ToString();
- us.detailInsuCode = jo["med_list_codg"].ToString();
- }
-
- return us;
- }
- private string convertToXML(JToken jaFeeDetail)
- {
- try
- {
- JObject joTmp = new JObject();
- joTmp.Add("yka105", jaFeeDetail["feedetl_sn"]);//记账流水号
- joTmp.Add("ykd125", jaFeeDetail["medins_list_codg"]); //医院项目流水号
- joTmp.Add("ykd126", jaFeeDetail["medins_list_desc"]); //医院项目名称
- joTmp.Add("yka002", jaFeeDetail["med_list_codg"]);//医保通用项目编码
- joTmp.Add("yka003", jaFeeDetail["med_list_name"]);//医保通用项目名称
- joTmp.Add("akc226", jaFeeDetail["cnt"]);//数量
- joTmp.Add("akc225", jaFeeDetail["pric"]);//实际价格
- joTmp.Add("yka315", jaFeeDetail["det_item_fee_sumamt"]);//明细项目费用总额
- joTmp.Add("yka097", jaFeeDetail["bilg_dept_codg"]);//开单科室编码
- joTmp.Add("yka098", jaFeeDetail["bilg_dept_name"]);//开单科室名称
- joTmp.Add("ykd102", jaFeeDetail["bilg_dr_ID"]);//开单医生公民身份号码
- joTmp.Add("ykd103", jaFeeDetail["bilg_dr_codg"]);//国家医保医生编码
- joTmp.Add("yka099", jaFeeDetail["bilg_dr_name"]);//开单医生姓名
- joTmp.Add("yka100", jaFeeDetail["acord_dept_codg"]);//受单科室编码
- joTmp.Add("yka101", jaFeeDetail["acord_dept_name"]);//受单科室名称
- joTmp.Add("ykd106", jaFeeDetail["orders_dr_ID"]);//受单医生公民身份号码
- joTmp.Add("yka102", jaFeeDetail["orders_dr_name"]);//受单医生姓名
- joTmp.Add("yke123", jaFeeDetail["fee_ocur_time"]);//明细发生时间
- joTmp.Add("ykc141", Global.user.name);//经办人姓名
- joTmp.Add("aae036", jaFeeDetail["fee_ocur_time"]);//经办时间
- joTmp.Add("aae013", "");//备注
- joTmp.Add("akc229", "");//慢性病药品用药天数
- joTmp.Add("yke201", "");//中药使用方式
- joTmp.Add("yka295", "");//最小计价单位
- joTmp.Add("aka074", "");//规格
- joTmp.Add("aka070", "");//剂型
- joTmp.Add("yae374", "");//剂型名称
- joTmp.Add("yke009", "");//是否医院制剂
- joTmp.Add("yke186","1" );//医院审批标志
- joTmp.Add("yka821", jaFeeDetail["hosp_appr_flag"]);//项目报销标志
- joTmp.Add("yka830", jaFeeDetail["med_list_codg"]);//国家目录编码
- joTmp.Add("yka831", jaFeeDetail["med_list_codg"]);//
- return joTmp.ToString();
- }
- catch (Exception ex)
- {
- return "";
- throw;
- }
- }
- public FeeUpload(string funNO, int singleCount, JArray jaFeeDetail)
- {
- InitializeComponent();
- this.funNO = funNO;
- this.singleCount = singleCount;
- this.jaFeeDetail = jaFeeDetail;
- this.pbFee.Maximum = jaFeeDetail.Count;
- }
- public FeeUpload(string funNO, int singleCount)
- {
- InitializeComponent();
- this.funNO = funNO;
- this.singleCount = singleCount;
- }
- private void btExit_Click(object sender, EventArgs e)
- {
- this.DialogResult = DialogResult.Cancel;
- Close();
- }
- public void setPos(int pos)
- {
- pbFee.Value = pos;
- }
- public void writeError(string error)
- {
- rtbRecord.AppendText(error + System.Environment.NewLine);
- }
- private void ProgressBar_Load(object sender, EventArgs e)
- {
- bgWorker1.WorkerReportsProgress = true;
- bgWorker1.WorkerSupportsCancellation = true;
- bgWorker1.RunWorkerAsync();
- }
- private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- BackgroundWorker bgWorker = sender as BackgroundWorker;
- string errMsg;
- int errorCount = 0;
- userState us = new userState();
- try
- {
- us = getUserState(0, "获取HIS费用", "......", null);
- bgWorker.ReportProgress(0, us);
- //获取IS费用
- if (hIS.getHisFee(Global.pat, out errMsg) != 0)
- {
- us = getUserState(0, "获取HIS费用", "失败", null);
- bgWorker.ReportProgress(0, us);
- outParam = errMsg;
- return;
- }
- else
- {
- us = getUserState(0, "获取HIS费用", "成功", null);
- bgWorker.ReportProgress(0, us);
- }
- //调用医保平台转换HIS费用(转换医保编码等)
- JObject joHisFee = JObject.Parse(errMsg);
- us = getUserState(0, "转换HIS费用", "......", null);
- bgWorker.ReportProgress(0, us);
- if (mIS.convertHisFeeWithInsuCode(joHisFee, out errMsg) != 0)
- {
- us = getUserState(0, "转换HIS费用", "失败", null);
- bgWorker.ReportProgress(0, us);
- outParam = errMsg;
- return;
- }
- else
- {
- us = getUserState(0, "转换HIS费用", "成功", null);
- bgWorker.ReportProgress(0, us);
- }
- JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(errMsg), "data"));
- if (jaFeeDetail.Count == 0)
- {
- us = getUserState(0, "转换HIS费用", "失败(有效数据为空)", null);
- bgWorker.ReportProgress(0, us);
- outParam = errMsg;
- return;
- }
- int feeCount = jaFeeDetail.Count();
- this.pbFee.Maximum = jaFeeDetail.Count;
- JArray jaTmp = new JArray();
- JArray jaTmp2 = new JArray();
- for (int i = 0; i < feeCount; i++)
- {
- manualReset.WaitOne();
- if (bgWorker.CancellationPending)
- {
- e.Cancel = true;
- break;
- }
- jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
- jaFeeDetail[i]["med_type"] = Global.pat.medType;
- if (jaFeeDetail[i]["validFlag"].ToString() == "N")
- {
- bgWorker.ReportProgress(i, null);
- continue;
- }
- JObject joTmp = JObject.Parse(convertToXML(jaFeeDetail[i]));
- jaTmp.Add(joTmp);
- jaTmp2.Add(jaFeeDetail[i]);
- if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
- {
- JObject joFeeDetail = new JObject();
- joFeeDetail.Add("akc190", Global.pat.mdtrtID);
- joFeeDetail.Add("aac001", Global.pat.psn_no);
- joFeeDetail.Add("aka130", Global.pat.medType);
- joFeeDetail.Add("ykb065", Global.pat.insuType);
- joFeeDetail.Add("yab003", Global.pat.insuplc_admdvs);
- joFeeDetail.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch);
- JObject joDataset = new JObject();
- joDataset.Add("row", jaTmp);
- joFeeDetail.Add("dataset", joDataset);
- if (invoker.invokeYHCom("31", joFeeDetail, out errMsg) != 0)
- {
- outParam = outParam + errMsg + System.Environment.NewLine;
- us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
- bgWorker.ReportProgress(i, us);
- errorCount++;
- }
- else
- {
- us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
- bgWorker.ReportProgress(i, us);
- JArray jaRtnDetail = new JArray();
- //广州需要检查每条MEMO是否为空
- try
- {
- // errMsg = Regex.Replace(errMsg, "<row",
- //"<row xmlns:json=\"http://james.newtonking.com/projects/json\" json:Array=\"true\" ", RegexOptions.IgnoreCase);
- string output = xmler.ToJSON(errMsg);
- JObject joRtn = JObject.Parse(output);
-
- jaRtnDetail = JArray.Parse(JsonHelper.getDestValue(joRtn, "output.sqldata.row"));
- }
- catch (Exception ex)
- {
- Global.writeLog("广州需要检查每条MEMO是否为空" + ex.Message);
- }
- //foreach (JToken jt in jaRtnDetail)
- //{
- // if (jt["memo"].ToString() != "")
- // {
- // outParam = outParam + errMsg + System.Environment.NewLine;
- // us = getUserState(2, "中心返回明细报错", jt["memo"].ToString(), jt);
- // errorCount++;
- // }
- //}
- //for (int j = 0; j < jaRtnDetail.Count; j++)
- //{
- // var memo = jaRtnDetail[j]["memo"];
- // if ( memo.ToString() != "")
- // {
- // outParam = outParam + memo + System.Environment.NewLine;
- // us = getUserState(2, "中心返回明细报错", memo.ToString(), null);
- // bgWorker.ReportProgress(i, us);
- // errorCount++;
- // }
- //}
- //成功后插入医保平台
- if (mIS.insertFee(jaTmp2, out errMsg) != 0)
- {
- outParam = outParam + errMsg + System.Environment.NewLine;
- us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
- errorCount++;
- }
- else
- {
- // 更新2301返回的数据
- if (mIS.updateFee(UpdateHisFeeDetailByCenterRtn(jaTmp2, jaRtnDetail), out errMsg) != 0)
- {
- outParam = outParam + errMsg + System.Environment.NewLine;
- us = getUserState(2, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
- errorCount++;
- }
- else
- {
- us = getUserState(2, "插入&更新医保平台", "成功", jaFeeDetail[i]);
- }
- //us = getUserState(2, "插入&更新医保平台", "成功", jaFeeDetail[i]);
- }
-
- bgWorker.ReportProgress(i, us);
- //更新2301返回的数据
- //if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
- //{
- // outParam = outParam + errMsg + System.Environment.NewLine;
- // us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
- // errorCount++;
- //}
- //else
- // us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
- //bgWorker.ReportProgress(i, us);
- }
- jaTmp = new JArray();
- jaTmp2 = new JArray();
- }
- bgWorker.ReportProgress(i + 1, null);
- }
- if ((errorCount == 0) && (e.Cancel == false))
- {
- Thread.Sleep(1000);
- this.DialogResult = DialogResult.OK;
- }
- else
- {
- Global.writeLog("outParam:" +outParam);
- }
- }
- catch (Exception ex)
- {
- outParam = "费用上传异常:" + ex.Message;
- }
- }
- private string getJsonValue(JObject jo,string nodeName)
- {
- if (!jo.ContainsKey(nodeName))
- {
- return "0.00";
- }
- else if (string.IsNullOrEmpty(JsonHelper.getDestValue(jo, nodeName)))
- {
- return "0.00";
- }
- else
- {
- return JsonHelper.getDestValue(jo, nodeName);
- }
- }
- private JArray UpdateHisFeeDetailByCenterRtn(JArray jaHisFeeDetail,JArray jaCenterRtnDetail)
- {
- JArray jaRtn = new JArray();
- foreach (JObject joHisDetail in jaHisFeeDetail)
- {
- foreach (JObject joCenterDetail in jaCenterRtnDetail)
- {
- if (joCenterDetail["yka105"].ToString() == joHisDetail["feedetl_sn"].ToString())
- {
- JObject joTmp = new JObject();
- //joTmp.Add("feedetl_sn", joCenterDetail["yka105"].ToString());
- //joTmp.Add("fulamt_ownpay_amt", joCenterDetail["yka317"].ToString());
- //joTmp.Add("preselfpay_amt", joCenterDetail["yka318"].ToString());
- //joTmp.Add("inscp_scp_amt", joCenterDetail["yka319"].ToString());
- //joTmp.Add("selfpay_prop", joCenterDetail["SELFPAY_PROP"].ToString());
- joTmp.Add("feedetl_sn", getJsonValue(joCenterDetail, "yka105"));
- joTmp.Add("fulamt_ownpay_amt", getJsonValue(joCenterDetail, "yka317"));
- joTmp.Add("preselfpay_amt", getJsonValue(joCenterDetail, "yka318"));
- joTmp.Add("inscp_scp_amt", getJsonValue(joCenterDetail, "yka319"));
- joTmp.Add("selfpay_prop", getJsonValue(joCenterDetail, "SELFPAY_PROP"));
- joTmp.Add("overlmt_amt", 0);
- joTmp.Add("chrgitm_lv", 0);
- joTmp.Add("med_chrgitm_type", 0);
- joTmp.Add("pric_uplmt_amt", 0);
- //joTmp.Add("memo", joCenterDetail["PRMMSG"].ToString());
- jaRtn.Add(joTmp);
- }
- }
- }
- return jaRtn;
- }
- //private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
- //{
- // //BackgroundWorker bgWorker = sender as BackgroundWorker;
- // MessageBox.Show("a1");
- // string errMsg;
- // int feeCount = jaFeeDetail.Count;
- // int errorCount = 0;
- // try
- // {
- // JArray jaTmp = new JArray();
- // userState us = new userState();
- // for (int i = 0; i < feeCount; i++)
- // {
- // manualReset.WaitOne();
- // if (bgWorker1.CancellationPending)
- // {
- // e.Cancel = true;
- // errorCount++;
- // break;
- // }
- // jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
- // jaFeeDetail[i]["med_type"] = Global.pat.medType;
- // if (jaFeeDetail[i]["validFlag"].ToString() == "N")
- // {
- // bgWorker1.ReportProgress(i, null);
- // continue;
- // }
- // jaTmp.Add(jaFeeDetail[i]);
- // if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
- // {
- // JObject joFeeDetail = new JObject();
- // joFeeDetail.Add("feedetail", jaTmp);
- // JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joFeeDetail.ToString()));
- // if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
- // {
- // outParam = outParam + errMsg + System.Environment.NewLine;
- // us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
- // errorCount++;
- // }
- // else
- // {
- // us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
- // bgWorker1.ReportProgress(i, us);
- // //成功后插入医保平台
- // if (mIS.insertFee(jaTmp, out errMsg) != 0)
- // {
- // outParam = outParam + errMsg + System.Environment.NewLine;
- // us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
- // errorCount++;
- // }
- // else
- // us = getUserState(2, "插入医保平台", "成功", jaFeeDetail[i]);
- // bgWorker1.ReportProgress(i, us);
- // //更新2301返回的数据
- // if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
- // {
- // outParam = outParam + errMsg + System.Environment.NewLine;
- // us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
- // errorCount++;
- // }
- // else
- // us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
- // bgWorker1.ReportProgress(i, us);
- // }
- // jaTmp = new JArray();
- // }
- // bgWorker1.ReportProgress(i + 1, null);
- // }
- // if (errorCount == 0)
- // {
- // Thread.Sleep(1000);
- // this.DialogResult = DialogResult.OK;
- // }
- // else
- // {
- // }
- // }
- // catch (Exception ex)
- // {
- // MessageBox.Show(ex.Message);
- // }
- //}
- private void bgWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- if (e.ProgressPercentage < 0)
- {
- setPos(0);
- }
- else
- {
- setPos(e.ProgressPercentage);
- }
- if (e.UserState != null)
- {
- userState us = (userState)e.UserState;
- string upDetailRecord = "";
- upDetailRecord = "【His名称:" + us.detailHisName + ";";
- upDetailRecord = upDetailRecord + "His编码:" + us.detailHisCode + "; ";
- upDetailRecord = upDetailRecord + "医保编码:" + us.detailInsuCode + ";";
- upDetailRecord = upDetailRecord + "当前节点:" + us.description + "】";
- upDetailRecord = upDetailRecord + us.error + System.Environment.NewLine;
- pbDetail.Value = us.childProgress;
- this.rtbRecord.AppendText(upDetailRecord);
- }
- }
- private void rtbRecord_TextChanged(object sender, EventArgs e)
- {
- rtbRecord.SelectionStart = rtbRecord.Text.Length;
- rtbRecord.ScrollToCaret();
- }
- private void btUpload_Click(object sender, EventArgs e)
- {
- if (!bgWorker1.IsBusy)
- {
- rtbRecord.Clear();
- bgWorker1.RunWorkerAsync();
- }
- else
- {
- MessageBox.Show("请点击停止按钮!");
- }
- }
- private void btPause_Click(object sender, EventArgs e)
- {
- if (btPause.Text == "暂停")
- {
- manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞
- btPause.Text = "继续";
- }
- else
- {
- manualReset.Set();//继续某个线程的工作
- btPause.Text = "暂停";
- }
- }
- private void btStop_Click(object sender, EventArgs e)
- {
- if (bgWorker1.IsBusy) bgWorker1.CancelAsync();
- }
- private void bgWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (e.Cancelled)
- { }
- if (e.Error != null)
- {
- outParam = e.Error.ToString();
- }
- //e.Result
- }
- }
- }
|