using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Business;
using PTMedicalInsurance.Common;
using PTMedicalInsurance.Entity;
using PTMedicalInsurance.Entity.Base.Settlement.Record;
using PTMedicalInsurance.Forms.Setters.ToPutOnRecord;
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.Threading.Tasks;
using System.Windows.Forms;
namespace PTMedicalInsurance.Forms.ToPutOnRecord
{
public partial class ToPutOnRecord : Form
{
private InvokeHelper invoker = new InvokeHelper();
private HisMainBusiness hBus = new HisMainBusiness();
private string opsp_dise_code;
private string opsp_dise_name;
private string insu_optins;
private string ide_fixmedins_no;
private string ide_fixmedins_name;
private string diag_dr_code;
private string diag_dr_name;
private string fixmedins_code;
private string fixmedins_name;
private MIIrisServices mis = new MIIrisServices();
GridViewSetter grd = new GridViewSetter();
public DataTable dtInsuranceType;
public DataTable dtDiease;
public DataTable dtInsuranceArea;
public DataTable dtDoctor;
public DataTable dtDept;
public DataTable dtDiagnose;
public ToPutOnRecord()
{
InitializeComponent();
//设置ComBox数据源
SetDBLKCombox(ref dblkcbxInsuranceType_1, AssignComboxDT(out dtInsuranceType,GetDictionary("insutype")));
SetDBLKCombox(ref dblkcbxDieaseCode_1, AssignComboxDT(out dtDiease, GetDirectory("6")));
SetDBLKCombox(ref dblkcbxCbd_1, AssignComboxDT(out dtInsuranceArea, GetDictionary("admdvs",2)));
SetDBLKCombox(ref dblkcbxDoctor_1, AssignComboxDT(out dtDoctor, FormatComboxDatasource(GetDocInfo(""), "insuUserCode", "descripts")));
SetDBLKCombox(ref dblkcbxDept_1, AssignComboxDT(out dtDept, FormatComboxDatasource(GetDocInfo(""), "code", "descripts")));
//初始化界面
InitForm();
//添加转院备案
AddForm(this.tabPage2, new HospitalTransfer(this));
//添加定点备案
AddForm(this.tabPage3, new FixedPointRecord(this));
}
#region 方法封装
private void AddForm(TabPage tabpage,Form frm)
{
tabpage.Controls.Add(frm);
frm.Show();
}
private DataTable GetDBLKComboxTable(string sqlStr)
{
InvokeHelper invoker = new InvokeHelper();
dynamic joInparm = new JObject();
dynamic joTmp = new JObject();
joTmp.sqlStr = sqlStr;
JArray jaParams = new JArray();
jaParams.Add(joTmp);
joInparm.Add("params", JArray.FromObject(jaParams));
joInparm.code = "09010014";
string inParam = joInparm.ToString();
JObject joRtn = invoker.invokeInsuService(inParam, "获取下拉框消息");
//dynamic jsonRtn = JsonConvert.DeserializeObject(strRtn);
DataTable dt = (DataTable)joRtn["result"].ToObject(typeof(DataTable));
//dt.Columns[0].ColumnName = "编码";d
//dt.Columns[1].ColumnName = "名称";
//dt.Columns[2].ColumnName = "拼音查找码";
return dt;
}
private void SetDBLKCombox(ref PTControl.DBLookupCombox dblcbx, string sqlStr)
{
SetDBLKCombox(ref dblcbx, GetDBLKComboxTable(sqlStr));
}
public void SetDBLKCombox(ref PTControl.DBLookupCombox dblcbx, DataTable dt)
{
dblcbx.sDisplayField = "Code,Name,SearchCode";
dblcbx.sDisplayMember = "名称";
dblcbx.sKeyWords = "Code,SearchCode";
dblcbx.DataSource = dt;
dblcbx.RowFilterVisible = true;
dblcbx.TextBox.Width = 400;
dblcbx.DataGridView.Width = 400;
dblcbx.DataGridView.Columns[0].Name = "编码";
dblcbx.DataGridView.Columns[1].Name = "名称";
dblcbx.DataGridView.Columns[2].Name = "查找码";
dblcbx.DataGridView.Columns[0].Width = 100;
dblcbx.DataGridView.Columns[1].Width = 200;
}
///
/// 格式化combobox为下拉框指定格式
///
///
///
///
///
public DataTable FormatComboxDatasource(DataTable sourceTable,string code,string desc)
{
// 使用 LINQ 查询源 DataTable
var query = from row in sourceTable.AsEnumerable()
select new { Code = row.Field(code), Name = row.Field(desc) };
// 创建新的 DataTable
DataTable resultTable = new DataTable();
resultTable.Columns.Add("Code", typeof(string));
resultTable.Columns.Add("Name", typeof(string));
resultTable.Columns.Add("SearchCode", typeof(string));
// 将查询结果添加到新的 DataTable
foreach (var item in query)
{
resultTable.Rows.Add(item.Code, item.Name,item.Name);
}
return resultTable;
}
public DataTable QueryRecord(string sqlStr, string desc)
{
JObject joRtn = mis.DynamicQuery(sqlStr, desc);
string err;
if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
{
MessageBox.Show("查询失败");
return null;
}
return (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
}
public void AfterSelector(object sender, PTControl.AfterSelectorEventArgs e, out string code, out string name)
{
DataGridViewRow row = e.Value as DataGridViewRow;
DataRowView dataRow = row.DataBoundItem as DataRowView;
code = dataRow["Code"].ToString().Trim();
name = dataRow["Name"].ToString().Trim();
}
#endregion
#region 获取科室,医生信息,字典等
private void InitForm()
{
this.StartPosition = FormStartPosition.CenterParent;
dblkcbxHospitalCode_1.Text = "东莞常平健明眼科医院";
dblkcbxCbd_1.Text = "东莞市";
insu_optins = "441900";
fixmedins_code = Global.inf.hospitalNO;
fixmedins_name = Global.inf.hospitalName;
rbPsnNo_1.Checked = true;
this.tabRecord.SelectedIndex = 1;
this.WindowState = FormWindowState.Maximized;
}
///
/// 返回datatable的同时赋值指定的datatable
///
///
///
///
public DataTable AssignComboxDT(out DataTable dt, DataTable source)
{
dt = source;
return source;
}
public DataTable GetDictionary(string insuCode, int queryType = 1, string extConditon = "")
{
string sqlCondition = " and A.Interface_Dr = '" + Global.inf.interfaceDr_TY.ToString() + "'";
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}'" ;
if (queryType == 1)
{
sqlStr = sqlStr + sqlCondition + extConditon;
}
else
{
sqlStr = sqlStr + extConditon;
}
return GetDBLKComboxTable(sqlStr);
}
public DataTable GetDirectory(string histype, int queryType = 1, string extConditon = "")
{
string sqlCondition = " and A.Interface_Dr = '" + Global.inf.interfaceDr_TY.ToString() + "'";
string sqlStr = $"SELECT A.Code, A.Name FROM HB_MedInsuDirectory A where A.ValidFlag='1' And A.HisType={histype}";
if (queryType == 1)
{
sqlStr = sqlStr + sqlCondition + extConditon;
}
else
{
sqlStr = sqlStr + extConditon;
}
return GetDBLKComboxTable(sqlStr);
}
public DataTable GetDeptInfo()
{
try
{
JObject joInput = new JObject();
joInput.Add("hospID", Global.inf.hisHospitalDr);
string inpar = JsonHelper.setIrisInpar("09030043", joInput).ToString();
JObject joRtn = invoker.invokeHISService(inpar, "获取医院用户信息");
DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
return dt;
}
catch (Exception ex)
{
return null;
}
}
public DataTable GetDocInfo(string UserID)
{
try
{
JObject joInput = new JObject();
joInput.Add("hospID", Global.inf.hisHospitalDr);
joInput.Add("userID", UserID);
string inpar = JsonHelper.setIrisInpar("01040297", joInput).ToString();
JObject joRtn = invoker.invokeHISService(inpar, "获取医院用户信息");
DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable));
return dt;
}
catch (Exception ex)
{
return null;
}
}
#endregion
#region 业务封装
///
/// 医保患者参保信息获取
///
///
///
public int GetPersonInfo(out string outParam)
{
string patInfo = "";
//打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
if (hBus.readCard(out outParam) != 0)
{
return -1;
}
else
{
patInfo = outParam;
//展示患者信息界面
if (hBus.showPatInfo(patInfo, out outParam) != 0)
{
return -1;
}
}
//患者信息赋值给全局变量
patInfo = outParam;
if (hBus.setGlobalPatAfaterShowPatInfo(patInfo, out outParam) != 0)
{
return -1;
}
//校验HIS姓名与医保姓名是否一致
if (hBus.checkName(Global.pat.name, out outParam) != 0)
{
return -1;
}
return 0;
}
#endregion
#region 事件
private void btReadCard_1_Click(object sender, EventArgs e)
{
string PatInfo = "";
if (GetPersonInfo(out PatInfo) != 0)
{
MessageBox.Show("读卡失败:" + PatInfo);
}
tbName_1.Text = Global.pat.name;
tbPsnNO_1.Text = Global.pat.psn_no;
tbPsnNo2_1.Text = tbPsnNO_1.Text = Global.pat.psn_no;
foreach (DataRow row in ((DataTable)dblkcbxInsuranceType_1.DataSource).Rows)
{
if (row["Code"].ToString() == Global.pat.insuType)
{
dblkcbxInsuranceType_1.Text = row["Name"].ToString();
}
}
}
private void btClose_1_Click(object sender, EventArgs e)
{
Close();
}
private void btApply_1_Click(object sender, EventArgs e)
{
JObject joTmp = new JObject();
joTmp.Add("psn_no", tbPsnNO_1.Text);
joTmp.Add("insutype", Global.pat.insuType);
joTmp.Add("opsp_dise_code", opsp_dise_code);
joTmp.Add("opsp_dise_name", opsp_dise_name);
joTmp.Add("tel", tbTel_1.Text);
joTmp.Add("addr", tbAddress_1.Text);
joTmp.Add("insu_optins", insu_optins);
joTmp.Add("ide_fixmedins_no", Global.inf.hospitalNO);
joTmp.Add("ide_fixmedins_name", Global.inf.hospitalName);
joTmp.Add("hosp_ide_date", dpAuth.Value.ToString("yyyy-MM-dd"));
joTmp.Add("diag_dr_code", diag_dr_code);
joTmp.Add("diag_dr_name", diag_dr_name);
joTmp.Add("begndate", dpStart.Value.ToString("yyyy-MM-dd"));
joTmp.Add("enddate", dpEnd.Value.ToString("yyyy-MM-dd"));
JObject jo = new JObject();
jo.Add("fixmedins_code", fixmedins_code);
jo.Add("fixmedins_name", fixmedins_name);
JArray ja = new JArray();
ja.Add(jo);
joTmp.Add("psn_fixed_detl_list", ja);
JObject joData = new JObject();
joData.Add("data", joTmp);
JObject joRtn = invoker.invokeCenterService(TradeEnum.ChronicDiseaseRecord, joData);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
MessageBox.Show(err);
}
else
{
//存到后台
ChronicDiseaseRecordInput chronicIn = JsonConvert.DeserializeObject(joTmp.ToString());
JObject joDbIn = chronicIn.ConvertToDBJson();
string declareNo = JsonHelper.getDestValue(joRtn, "output.result.trt_dcla_detl_sn");
joDbIn.Add("DeclareNo", declareNo);
joDbIn.Add("RecordType", "C");
joDbIn.Add("RecordStatus", "1");
joDbIn.Add("CreateUser", Global.user.ID);
joDbIn.Add("PatientName", Global.pat.name);
joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
{
MessageBox.Show("插入失败");
}
//查询后在下方表格显示
string sqlStr = $"select * from BS_InsuPersonnelRecord where DeclareNo ='{declareNo}'";
dgvApplyResult.DataSource = QueryRecord(sqlStr, "查询慢病备案记录");
MessageBox.Show("申请成功");
}
}
private void dblkcbxDoctor_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
{
AfterSelector(sender, e, out diag_dr_code, out diag_dr_name);
}
private void dblkcbxCbd_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
{
string tmp;
AfterSelector(sender, e, out insu_optins, out tmp);
}
private void dblkcbxDept_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
{
}
private void dblkcbxHospitalCode_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
{
AfterSelector(sender, e, out fixmedins_code, out fixmedins_name);
}
private void dblkcbxDieaseCode_1_AfterSelector(object sender, PTControl.AfterSelectorEventArgs e)
{
AfterSelector(sender, e, out opsp_dise_code, out opsp_dise_name);
}
private void btQueryCenterRecord_1_Click(object sender, EventArgs e)
{
JObject joTmp = new JObject();
joTmp.Add("psn_no", tbPsnNo2_1.Text);
JObject joData = new JObject();
joData.Add("data", joTmp);
//5301 也可以
JObject joRtn = invoker.invokeCenterService(TradeEnum.QueryChronicDiseaseRecordLocal, joData);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
MessageBox.Show(err);
}
else
{
List lst = JsonConvert.DeserializeObject>(JsonHelper.getDestValue(joRtn, "output.result"));
DataTable dt = (DataTable)joRtn["output"]["result"].ToObject(typeof(DataTable));
QueryChronicDiseaseRecord qcd = new QueryChronicDiseaseRecord();
qcd.SetHeaderText(dgvApplyResult, new Font("Arial", 9));
dgvApplyResult.DataSource = lst;
}
}
private void btQueryHisRecord_1_Click(object sender, EventArgs e)
{
string conditon = "";
if (rbName_1.Checked)
{
conditon = $" PatientName ='{tbPsnNo2_1.Text}'";
}
if (rbPsnNo_1.Checked)
{
conditon = $" PersonnelNO ='{tbPsnNo2_1.Text}'";
}
if (rbDeclareNo_1.Checked)
{
conditon = $" DeclareNo ='{tbPsnNo2_1.Text}'";
}
string sqlStr = $"select * from BS_InsuPersonnelRecord where {conditon} ";
grd.SetHeaderTextOfApplyResult1(dgvApplyResult);
dgvApplyResult.DataSource = QueryRecord(sqlStr, "查询慢病备案记录");
}
private void btCancleByHis_1_Click(object sender, EventArgs e)
{
int i = dgvApplyResult.SelectedIndex;
JObject joInput = new JObject();
joInput.Add("psn_no", dgvApplyResult.Rows[i].Cells["PersonnelNO"].Value.ToString());
joInput.Add("trt_dcla_detl_sn", dgvApplyResult.Rows[i].Cells["DeclareNo"].Value.ToString());
joInput.Add("opsp_dise_code", dgvApplyResult.Rows[i].Cells["ChronicDiseaseCode"].Value.ToString());
joInput.Add("begndate", dgvApplyResult.Rows[i].Cells["BusinStartDate"].Value.ToString());
joInput.Add("memo", rtbCancleReason_1.Text);
JObject joData = new JObject();
joData.Add("data", joInput);
JObject joRtn = invoker.invokeCenterService(TradeEnum.CancleChronicDiseaseRecord, joData);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
MessageBox.Show(err);
}
else
{
//更新后台
JObject joDbIn = new JObject();
joDbIn.Add("DeclareNo", dgvApplyResult.Rows[i].Cells["DeclareNo"].ToString());
joDbIn.Add("RecordStatus", "-1");
joDbIn.Add("CreateUser", Global.user.ID);
joDbIn.Add("PersonnelNO", dgvApplyResult.Rows[i].Cells["PersonnelNO"].ToString());
joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
{
MessageBox.Show("中心撤销成功但平台更新失败");
}
else
{
MessageBox.Show("撤销成功");
}
}
}
#endregion
private void btCancleByCenter_1_Click(object sender, EventArgs e)
{
int i = dgvApplyResult.SelectedIndex;
JObject joInput = new JObject();
joInput.Add("psn_no", dgvApplyResult.Rows[i].Cells["psn_no"].Value.ToString());
joInput.Add("trt_dcla_detl_sn", dgvApplyResult.Rows[i].Cells["trt_dcla_detl_sn"].Value.ToString());
joInput.Add("opsp_dise_code", dgvApplyResult.Rows[i].Cells["opsp_dise_code"].Value.ToString());
joInput.Add("begndate", dgvApplyResult.Rows[i].Cells["begndate"].Value.ToString());
joInput.Add("memo", rtbCancleReason_1.Text);
JObject joData = new JObject();
joData.Add("data", joInput);
JObject joRtn = invoker.invokeCenterService(TradeEnum.CancleChronicDiseaseRecord, joData);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
MessageBox.Show(err);
}
else
{
//更新后台
JObject joDbIn = new JObject();
joDbIn.Add("DeclareNo", dgvApplyResult.Rows[i].Cells["DeclareNo"].ToString());
joDbIn.Add("RecordStatus", "-1");
joDbIn.Add("CreateUser", Global.user.ID);
joDbIn.Add("PersonnelNO", dgvApplyResult.Rows[i].Cells["PersonnelNO"].ToString());
joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09030001", joDbIn).ToString(), "插入/更新慢性病表");
if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
{
MessageBox.Show("中心撤销成功但平台更新失败");
}
else
{
MessageBox.Show("撤销成功");
}
}
}
}
}