WCF医院管理系统技术解析(七)体检登记(六)前台收费
2015-06-04 19:47
387 查看
WCF医院管理系统技术解析(七)体检登记(六)前台收费
设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的
前台收费中的界面效果如图所示:
2.9.8(图57)
选择病人需要收费的体检单:即
为什么界面不是体检单号呢?因为:收费的病人有两种,其一就是经过处方开单收费的,其二就是病人到医院只是进行体检操作,该过程不涉及处方单,但是它也有存在的收费项目,所以下拉框中内容是体检病人进行的体检收费的病人卡号。选择了病人卡号后,你会看到病人收费的详细信息:如下图所示:
2.9.8(图58)
数据库中表与关系有:
2.9.8(图59)
2.9.8(图60)
界面上用到的控件有:
表1:病人表(PatientTable)
表2: 属性明细表(AttributeDetailsTable)
表3:体检登记病人表(PW_PhysicalExaminationChargeBillPatientTable)
表4: 项目类别表 (PW_ItemCategoryTable)
表5:体检套餐表 (PhysicalExaminationSetMealTable)
表6:体检套餐明细表(PhysicalExaminationSetMealDetailTable)
表7:项目表(ItemTable)
表8:科室表:(TechnicalOfficesTable)
表9 辅助项目明细表 (PW_AuxiliaryItemDetailTable)
该过程涉及到的储存过程有:
BLL中的方法有:
UIL中的代码有:
在窗体的加载(Load)事件中的代码有:
公共方法:
在下拉框中
查找
的事件,并且在里面写下如下代码:
根据
选择的病人进行查找会员类别和会员折扣
系统会支持根据查找出来的会员类别折扣进行自动核算病人的应付金额如下图:
那么核算的原则有:
该过程第一步点击
第二步:在属性中找到txtDiscount_TextChanged事件在里面写如下的代码:
选择好了要收费的病人
,输入现金价格
后点击收费对其进行收费操作
收费中涉及到的储存过程有:新增的收费单中的储存过程中
的意思是:查询刚才新增的收费单ID ,用于修改体检登记病人表
BLL中涉及到的方法有:
UIL中点击收费按钮
在其中写的代码有:
这样对病人的收费就已经完成了,收费完成后在病人在体检登记主界面上就有了病人体检的信息,如图:
其中的刚才已经收费的病人信息如下:
该过程涉及到的储存过程有:
BLL中的方法有:
UIL中的代码有:
作人员根据病人拿来的收费单对病人进行体检登记,即
提交体检登记后病人的体检状态就会变成
,医生就可以对病人执行体检操作。
提交体检登记的储存过程有经过过处方单的:
不经过处方单的储存过程有:
根据辅助项目明细ID修改体检状态ID
BLL中的方法有:
经过处方的BLL中的方法:
不经过处方的BLL中的方法:
BLL中的修改体检状态ID中的方法有:
UIL中点击提交体检登记
在其中写的代码有:
提交体检登记后,医生在体检执行处就可以到病人的执行信息,就可以为病人执行体检信息了。
注意:该文章仅用于学习用途,违者后果自负
设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的
前台收费中的界面效果如图所示:
2.9.8(图57)
选择病人需要收费的体检单:即
为什么界面不是体检单号呢?因为:收费的病人有两种,其一就是经过处方开单收费的,其二就是病人到医院只是进行体检操作,该过程不涉及处方单,但是它也有存在的收费项目,所以下拉框中内容是体检病人进行的体检收费的病人卡号。选择了病人卡号后,你会看到病人收费的详细信息:如下图所示:
2.9.8(图58)
数据库中表与关系有:
2.9.8(图59)
2.9.8(图60)
界面上用到的控件有:
控件 | 说明 从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范 |
文本框 (TextBox) | |
下拉框 (ComBobox) | |
数据表格 (DataGridView) | |
按钮(Button) | |
标签 (Label) |
列名 | 数据类型 | 主键/外键 | 说明 |
PatientID | int | 主键 | 病人ID |
PatientCardNumber | nchar (50) | 病人卡号 | |
PatientName | nchar (30) | 病人名称 | |
RegisterCategoryID | int | 外键 | 挂号类别 ID |
AS_SexID | int | 外键 | 性别ID |
Birthday | datetime | 出生年月 | |
IDCardNo | nchar (50) | 身份证号 | |
AS_MaritalStatusID | int | 外键 | 婚姻情况ID |
Profession | nchar (50) | 所在职业 | |
MemberTypeID | int | 外键 | 会员类型ID |
MedicareCardNumber | nchar (50) | 医保卡号 | |
AS_InsuredTypeID | int | 外键 | 参保类型ID |
ContactTelephone | nchar (30) | 联系电话 | |
ContactAddress | nchar (100) | 联系地址 | |
DrugAllergyHistory | nchar (100) | 药物过敏史 | |
PatientCategoryID | int | 外键 | 病人类别ID |
Age | nchar (30) | 年龄 | |
AlphabeticBrevityCode | nchar (20) | 拼音简码 | |
WubiInCode | nchar (20) | 五笔简码 | |
ContactMobilePhone | nchar (30) | 联系手机 | |
Email | nchar (30) | 电子邮件 | |
Introducer | nchar (30) | 介绍人员 | |
PersonalTaboo | nchar (70) | 个人忌讳 | |
HighestReputation | nchar (70) | 信誉上限 | |
NowIntegral | nchar (50) | 当前积分 | |
Debt | decimal (18, 2) | 尚欠金额 | |
ExpenseSum | decimal (18, 2) | 消费金额 | |
LastTime | datetime | 上次时间 | |
LastDoctor_StaffID | int | 外键 | 上次医生 |
Prescriptions | nchar (50) | 总处方数 | |
PatientPhotos | char (200) | 病人照片 | |
WhetherEffective | bit | ((1)) | 有效否 |
WhetherFromPhysicalExamination | Bit | 是否体检 |
列名 | 数据类型 | 主键/外键 | 说明 |
AttributeDetailsID | int | 主键 | 属性明细ID |
AttributeDetailsID_F | int | 外键 | 属性明细ID_F |
AttributeSetID | int | 外键 | 属性明细ID |
AttributeDetailsName | nchar (30) | 属性明细名称 | |
Number | nchar (30) | 编号 | |
RetrievalInCode | nchar (30) | 检索简码 | |
BuiltInIdentifiers | bit | ((0)) | 内置标识 |
Remarks | nchar (100) | 备注 | |
WhetherEffective | bit | ((1)) | 有效否 |
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationChargeBillPatientID | int | 主键 | 体检登记病人ID |
PatientID | int | 病人ID | |
ChargeBillID | int | 外键 | 收费单ID |
AuxiliaryItemDetailID | Int | 辅助项目明细ID | |
WhetherChargeBill | bit | ((1)) | 是否收费 |
列名 | 数据类型 | 主键/外键 | 说明 |
ItemCategoryID | int | 主键 | 项目类别ID |
ItemCategoryName | nchar (30) | 外键 | 项目类别名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationSetMealID | int | 主键 | 体检套餐ID |
PhysicalExaminationSetMealName | nchar (30) | 体检套餐名称 | |
ChargeCategoryID | int | 外键 | 收费类别 ID |
CashPrice | decimal (18, 2) | 现金价格 | |
DiscountRatio | decimal (18, 2) | 折扣比例 | |
SetMealNumber | nchar (30) | 套餐编号 | |
SetMealRemarks | nchar (150) | 套餐备注 | |
AS_UsableStatusID | int | 外键 | 可用状态ID |
EntryStaff_StaffID | int | 外键 | 录入人员_员工ID |
EntryDate | datetime | 录入日期 | |
UpdateStaff_StaffID | int | 外键 | 修改人员_员工ID |
UpdateDate | datetime | 修改日期 | |
WhetherEffective | bit | ((1)) | 有效否 |
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationSetMealDetailID | int | 主键 | 体检套餐明细ID |
PhysicalExaminationSetMealID | int | 外键 | 体检套餐ID |
ItemID | int | 外键 | 项目ID |
WhetherEffective | bit | ((1)) | 有效否 |
列名 | 数据类型 | 主键/外键 | 说明 |
ItemID | int | 主键 | 项目ID |
ItemName | nchar (70) | 外键 | 项目名称 |
ItemCoding | nchar (50) | 项目编号 | |
AS_UserStatusID | int | 外键 | 使用状态ID |
ProjectPrice | decimal (18, 2) | 现金价格 | |
TechnicalOfficesID | int | 外键 | 科室ID |
DiscountProportion | decimal (18, 2) | 折扣比例 | |
WhetherEffective | bit | ((1)) | 有效否 |
ItemRemarks | nchar (100) | 项目备注 | |
ItemUnit | nchar (20) | 项目单位 |
列名 | 数据类型 | 主键/外键 | 说明 |
TechnicalOfficesID | int | 主键 | 科室ID |
DepartmentID | int | 外键 | 部门ID |
TechnicalOfficesNumber | nchar (20) | 科室编号 | |
TechnicalOfficesName | nchar (20) | 科室名称 | |
RegisterSum | decimal (18, 2) | 挂号金额 | |
WhetherAllowRegister | bit | 允许挂号否 | |
AlphabeticBrevityCode | nchar (20) | 拼音简码 | |
WubiInCode | nchar (20) | 五笔简码 | |
TechnicalOfficesLocation | nchar (100) | 科室位置 | |
Remarks | nchar (200) | 备注 | |
WhetherEffective | bit | ((1)) | 有效否 |
列名 | 数据类型 | 主键/外键 | 说明 |
AuxiliaryItemDetailID | int | 主键 | 辅助明细项目ID |
RegisterID | int | 外键 | 挂号ID |
AllItemID | int | 外键 | 总项目ID |
ItemCategoryID | int | 外键 | 项目类别ID |
WhetherEffective | bit | ((1)) | 是否有效 |
AS_PhysicalExaminationRegisterID | int | 外键 | 体检登记ID |
OrdonnanceID | int | 外键 | 处方单ID |
-单击某病人,获取该病人下的体检项目(没有收费) IF @Type = 'FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID' BEGIN SELECT RTRIM(BT_PatientTable.PatientID) AS PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, BT_ItemTable.ItemUnit, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(1) AS TotalDrug, RTRIM(0) AS MedicarePrice, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName FROM BT_PhysicalExaminationSetMealTable INNER JOIN PW_AuxiliaryItemDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = PW_AuxiliaryItemDetailTable.AllItemID INNER JOIN BT_PhysicalExaminationSetMealDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = BT_PhysicalExaminationSetMealDetailTable.PhysicalExaminationSetMealID INNER JOIN BT_ItemTable ON BT_PhysicalExaminationSetMealDetailTable.ItemID = BT_ItemTable.ItemID INNER JOIN PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN BT_AttributeDetailsTable ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN BT_PatientTable ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID WHERE 1 = 1 AND PW_ItemCategoryTable.ItemCategoryID = 4 AND BT_PatientTable.PatientID = @PatientID AND PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 0 union SELECT RTRIM(BT_PatientTable.PatientID) AS PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, BT_ItemTable.ItemUnit, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(1) AS TotalDrug, RTRIM(0) AS MedicarePrice, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName FROM BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN PW_ItemCategoryTable INNER JOIN PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID ON BT_AttributeDetailsTable_1.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID INNER JOIN PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN BT_PatientTable INNER JOIN BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID = 1 AND BT_PatientTable.PatientID = @PatientID and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 0 END
BLL中的方法有:
#region 单击某病人,获取该病人下的体检项目(没有收费) [OperationContract] public DataSet FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID(int intPatientID)//获取界面传入的病人ID { SqlParameter[] mySqlParameters = { new SqlParameter("@Type",SqlDbType .Char ), new SqlParameter ("@PatientID",SqlDbType .Int ),//根据病人ID查找没有收费的体检项目 }; mySqlParameters[0].Value = "FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID "; mySqlParameters[1].Value = intPatientID; DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion
UIL中的代码有:
在窗体的加载(Load)事件中的代码有:
//调用公共方法绑定病人卡号 DataTable dtNumber = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectPatientCardNumberOnOrdonnanceNumber().Tables[0]; cboOrdonnanceNumber = PublicStaticMothd.SetZhiXiaLaKuang(cboOrdonnanceNumber, dtNumber, "PatientID", "PatientCardNumber"); intPatientID = Convert.ToInt32(cboOrdonnanceNumber.SelectedValue);
公共方法:
#region 设置下拉框 //定义一个公共方法,分别以下拉框,数据表格,字符串,字符串为参数 public static ComboBox SetZhiXiaLaKuang(ComboBox cbo下拉框, System.Data.DataTable dt数据表, string str列ID, string str列名) { try { cbo下拉框.DataSource = dt数据表;//下拉框的数据源为传入的数据表 cbo下拉框.DisplayMember = str列名;//绑定显示的成员 cbo下拉框.ValueMember = str列ID;//绑定列名中的ID return cbo下拉框; } catch (Exception exc) { MessageBox.Show(exc.ToString()); return null; } } #endregion
在下拉框中
查找
的事件,并且在里面写下如下代码:
#region 根据病人卡号查询处方信息 private void cboOrdonnanceNumber_SelectedIndexChanged(object sender, EventArgs e) { if (intPatientID > 0)//获取选择的收费病人ID { //根据病人ID查找病人的基本信息,并把基本信息绑定到相应的控件中 DataTable dtOrdonnance = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectPatientChargeBillItems(Convert.ToInt32(cboOrdonnanceNumber.SelectedValue)).Tables[0]; txtPatientCardNumber.Text = dtOrdonnance.Rows[0]["PatientCardNumber"].ToString().Trim(); txtPatientName.Text = dtOrdonnance.Rows[0]["PatientName"].ToString().Trim(); txtAge.Text = dtOrdonnance.Rows[0]["Age"].ToString().Trim(); txtPrescriptionTime.Text = dtOrdonnance.Rows[0]["RegisterTime"].ToString().Trim(); txtPatientCategory.Text = dtOrdonnance.Rows[0]["CategoryName"].ToString().Trim(); txtInsuredType.Text = dtOrdonnance.Rows[0]["医保类型"].ToString().Trim(); txtSex.Text = dtOrdonnance.Rows[0]["sex"].ToString().Trim(); intPatientID = Convert.ToInt32(dtOrdonnance.Rows[0]["PatientID"]); cboMemberType.SelectedValue = Convert.ToInt32(dtOrdonnance.Rows[0]["MemberTypeID"]);//获取会员类别ID string strExistNowIntegral = dtOrdonnance.Rows[0]["NowIntegral"].ToString().Trim();//获取当前积分 if (strExistNowIntegral == "")//如果积分为空,说明该病人不是会员,不存在积分,否则获取积分 { lblALL.Text = "不存在积分"; } else { lblALL.Text = strExistNowIntegral; } dgvOrdonnanceDetail.AutoGenerateColumns = false;//设置dgv的列不可改边 //根据病人ID查找病人的收费项目 DataTable dtOrdonnanceDetail = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID(Convert.ToInt32(cboOrdonnanceNumber.SelectedValue)).Tables[0]; dgvOrdonnanceDetail.DataSource = dtOrdonnanceDetail;//把查询到的信息绑定到数据表格中 //dgvOrdonnanceDetail.ClearSelection(); for (int i = 0; i < dgvOrdonnanceDetail.Rows.Count; i++)//遍历获取收费的详细信息 { //如果收费表格中的用药总量(TotalDrug)和 价格(AllIPrice)都不为空 if (dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value.ToString() != "" && dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value.ToString() != "") { //那么金额的值为 = 用药总量* 价格 dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value) * Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value); } else//否则金额的值为价格 或者 为“0”; { if (dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value != null) { dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = Convert.ToInt32(1) * Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value); } else { dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = "0"; } } } //查询全部的会员类别 DataTable dtMemberType = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectMemberCategory().Tables[0]; int MemberType = Convert.ToInt32(cboMemberType.SelectedValue);//获取会员类别ID for (int i = 0; i < dtMemberType.Rows.Count; i++)//循环会员类别 { if (MemberType == Convert.ToInt32(dtMemberType.Rows[i]["MemberCategoryID"]))//如果获取的会员类别ID与遍历的会员类别ID 相同,获取该会员类别折扣 { string strReMonveXiaoShu = dtMemberType.Rows[i]["MemberCategoryDiscount"].ToString().Trim();//获取会员类别折扣 string[] strShuZu = strReMonveXiaoShu.Split('.');//根据‘.’划分会员类别折扣 txtDiscount.Text = strShuZu[0];//获取会员类别折扣中的整数 } } } } #endregion
根据
选择的病人进行查找会员类别和会员折扣
系统会支持根据查找出来的会员类别折扣进行自动核算病人的应付金额如下图:
那么核算的原则有:
该过程第一步点击
第二步:在属性中找到txtDiscount_TextChanged事件在里面写如下的代码:
#region txtDiscount_TextChanged事件 private void txtDiscount_TextChanged(object sender, EventArgs e) { decimal AllSum = 0;//获取最终金额 decimal AllSum1 = 0;//获取金额 decimal AllSum2 = 0; decimal decMedicarePayMoney = 0;//医保金额 for (int i = 0; i < dgvOrdonnanceDetail.Rows.Count; i++)//遍历获取收费的详细信息 { //如果收费表格中的用药总量(TotalDrug)和 价格(AllIPrice)都不为空 否则累加金额 if (dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value.ToString() != "" && dgvOrdonnanceDetail.Rows[i].Cells["MedicarePrice"].Value.ToString() != "") { // AllSum1 += Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value);//累加金额的值 //医保金额 = 用药总量 * 医保金额 decMedicarePayMoney += Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value) * Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["MedicarePrice"].Value); } else { AllSum2 += Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value); //累加金额 } AllSum = AllSum1 + AllSum2;//获取最终金额 } txtReceive.Text = (Convert.ToDecimal(txtMoney.Text) + Convert.ToDecimal(txtMedicare.Text) + Convert.ToDecimal(txtCarComeDownWith.Text)).ToString();//收到金额 lblNow.Text = Convert.ToDecimal(AllSum * Convert.ToDecimal(0.01)).ToString().Trim(); //本单积分 = 最终金额 * 0.01 #region 价格处理 int Discount = 0; try { Discount = Convert.ToInt32(txtDiscount.Text);//获取折扣(整数) decimal decDiscount = Convert.ToDecimal(Discount) * Convert.ToDecimal(0.01);//获取折扣(小数) txtLastDiscountPay.Text = AllSum.ToString().Trim();//折前应收 txtNextDiscountPay.Text = (AllSum * decDiscount).ToString();//折后应收 txtMedicarePayMoney.Text = decMedicarePayMoney.ToString();//医保金额 txtMedicare.Text = decMedicarePayMoney.ToString();//医保 txtPrivilege.Text = (AllSum - (AllSum * decDiscount)).ToString();//优惠 txtMustCharge.Text = (AllSum * decDiscount).ToString(); //应付金额 } catch (Exception) { } #endregion } #endregion
选择好了要收费的病人
,输入现金价格
后点击收费对其进行收费操作
收费中涉及到的储存过程有:新增的收费单中的储存过程中
的意思是:查询刚才新增的收费单ID ,用于修改体检登记病人表
--新增收费单 IF(@Type ='btnCharge_Click_InsertChargeBillTable') BEGIN INSERT PW_ChargeBillTable(ReceiptNumber, BillNumber, AS_ChargeStatusID, OrdonnanceID, Discount, CashPaySum, MedicarePaySum, BlockPaySum, TallyPaySum, Operator_StaffID, OperateTime,WhetherCancel, WhetherEffective,WhetherOrdonnance) VALUES (@ReceiptNumber, @BillNumber, 160, @OrdonnanceID, @Discount, @CashPaySum, @MedicarePaySum, @BlockPaySum, @TallyPaySum, @Operator_StaffID, @OperateTime, 0, 0,0) --修改收据单号 UPDATE PW_TheLargestNumberStatisticalTable SET ReceiptMaximumNumber = ReceiptMaximumNumber + 2 SELECT @@IDENTITY END --修改体检登记病人表 IF @Type = 'FRM_QianTaoShouFei_btnCharge_Click_Update' BEGIN UPDATE PW_PhysicalExaminationChargeBillPatientTable SET PatientID =@PatientID, ChargeBillID =@ChargeBillID, AuxiliaryItemDetailID =@AuxiliaryItemDetailID, WhetherCharge =1 where PhysicalExaminationChargeBillPatientID = @PhysicalExaminationChargeBillPatientID END
BLL中涉及到的方法有:
#region 收费 [OperationContract] public int btnCharge_Click_InsertChargeBillTable(string strReceiptNumber, string strBillNumber, int intOrdonnanceID, decimal decDiscount, decimal decCashPaySum, decimal decMedicarePaySum, decimal decBlockPaySum, decimal decTallyPaySum, int intOperator_StaffID, DateTime dtmOperateTime)//获取界面中传入的各个参数的值 { SqlParameter[] SQLCMDpas ={ new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@ReceiptNumber",SqlDbType.Char ),//获取界面中收费单据数 new SqlParameter ("@BillNumber",SqlDbType.Char),//获取界面中收费发票号 new SqlParameter ("@OrdonnanceID",SqlDbType.Int),//获取界面中的病人ID new SqlParameter ("@Discount",SqlDbType.Decimal ), //获取界面中收费时对病人的折扣 new SqlParameter ("@CashPaySum",SqlDbType.Decimal),//获取界面中现金支付 new SqlParameter ("@MedicarePaySum",SqlDbType.Decimal),//获取界面中医保金额 new SqlParameter ("@BlockPaySum",SqlDbType.Decimal), //获取界面中卡付金额 new SqlParameter ("@TallyPaySum",SqlDbType.Decimal), //获取界面中记账金额 new SqlParameter ("@Operator_StaffID",SqlDbType.Int ),//获取界面中操作人员ID new SqlParameter ("@OperateTime",SqlDbType.DateTime),//获取界面中当前时间 }; SQLCMDpas[0].Value = "btnCharge_Click_InsertChargeBillTable"; SQLCMDpas[1].Value = strReceiptNumber; SQLCMDpas[2].Value = strBillNumber; SQLCMDpas[3].Value = intOrdonnanceID; SQLCMDpas[4].Value = decDiscount; SQLCMDpas[5].Value = decCashPaySum; SQLCMDpas[6].Value = decMedicarePaySum; SQLCMDpas[7].Value = decBlockPaySum; SQLCMDpas[8].Value = decTallyPaySum; SQLCMDpas[9].Value = intOperator_StaffID; SQLCMDpas[10].Value = dtmOperateTime; DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas); int Count = Convert.ToInt32(dt.Rows[0][0]);//获取刚才新增的收费单ID return Count;//返回新增的收费单ID } #endregion #region 修改体检登记病人表 [OperationContract]////获取界面传入的病人ID、收费单ID 、辅助项目明细ID、体检登记病人ID public int FRM_QianTaoShouFei_btnCharge_Click_Update(int intPatientID, int intChargeBillID, int intAuxiliaryItemDetailID, int intPhysicalExaminationChargeBillPatientID) { SqlParameter[] SQLCMDpas ={ new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@PatientID",SqlDbType.Int),//把病人ID传入数据库中并保存下来 new SqlParameter ("@ChargeBillID",SqlDbType.Int),//把收费单ID传入数据库中并保存下来 new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),//把辅助项目明细ID传入数据库中并保存下来 new SqlParameter ("@PhysicalExaminationChargeBillPatientID",SqlDbType.Int), //把体检登记病人ID传入数据库中并保存下来 }; SQLCMDpas[0].Value = "FRM_QianTaoShouFei_btnCharge_Click_Update"; SQLCMDpas[1].Value = intPatientID; SQLCMDpas[2].Value = intChargeBillID; SQLCMDpas[3].Value = intAuxiliaryItemDetailID; SQLCMDpas[4].Value = intPhysicalExaminationChargeBillPatientID; int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas); return count; } #endregion
UIL中点击收费按钮
在其中写的代码有:
#region 收费 private void btnCharge_Click(object sender, EventArgs e) { try { if (MessageBox.Show("确认是否进行收费操作?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { if (Convert .ToDecimal ( txtReceive.Text) > 0)//如果收到的费用大于零,就进行收费,否则就提示收费 { string strReceiptNumber = txtReceiptNumber.Text;//获取收费单据数 string strBillNumber = txtInvoiceNumber.Text;//获取收费发票号 decimal decDiscount = Convert.ToDecimal(txtDiscount.Text);//获取收费时对病人的折扣 decimal decCashPaySum = Convert.ToDecimal(txtReceive.Text);//获取现金支付 decimal decMedicarePaySum = Convert.ToDecimal(txtMedicare.Text);//获取医保金额 decimal decBlockPaySum = Convert.ToDecimal(txtCarComeDownWith.Text);//卡付金额 decimal decTallyPaySum = Convert.ToDecimal(txtTally.Text);//获取记账金额 int intOperator_StaffID = Convert.ToInt32(cboStaff.SelectedValue);//获取操作人员ID DateTime dtmOperateTime = DateTime.Now;//获取当前时间 //进行收费操作各个控件对应地插入收费单表中的字段 int ChargeBillID = myFRM_TiJianDengJi_MainClient.btnCharge_Click_InsertChargeBillTable(strReceiptNumber, strBillNumber, intPatientID, decDiscount, decCashPaySum, decMedicarePaySum, decBlockPaySum, decTallyPaySum, intOperator_StaffID, dtmOperateTime); if (ChargeBillID > 0)//刚刚新增的收费单ID获取出来 { int intSueessCount = 0; //根据收费病人ID查找病人登记表中的体检登记病人ID DataTable dtPhysicalExaminationChargeBillPatientID = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_btnCharge_Click_SelectPhysicalExaminationChargeBillPatientID(intPatientID).Tables[0]; if (dtPhysicalExaminationChargeBillPatientID.Rows.Count > 0)//如果查找的体检登记病人ID的集合 > 0 { for (int i = 0; i < dtPhysicalExaminationChargeBillPatientID.Rows.Count; i++)//遍历循环体检登记病人信息 { //获取体检登记病人ID int intPhysicalExaminationChargeBillPatientID = Convert.ToInt32(dtPhysicalExaminationChargeBillPatientID.Rows[i]["PhysicalExaminationChargeBillPatientID"]); int intAuxiliaryItemDetailID = Convert.ToInt32(dtPhysicalExaminationChargeBillPatientID.Rows[i]["AuxiliaryItemDetailID"]);//获取辅助项目明细ID //根据病人ID 、收费单ID、 辅助项目明细ID 、体检登记病人ID修改病人信息 intSueessCount += myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_btnCharge_Click_Update(intPatientID, ChargeBillID, intAuxiliaryItemDetailID, intPhysicalExaminationChargeBillPatientID); } } if (intSueessCount == dtPhysicalExaminationChargeBillPatientID.Rows.Count && intSueessCount > 0)//如果变量修改成功,就累加变量 { if (lblALL.Text.Trim() != "不存在积分")//如果存在积分,即是会员病人 { //积分累加 myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_UpdateNowIntegralOnPatientID(intPatientID, Convert.ToDecimal(lblNow.Text)); } MessageBox.Show("成功收费!" + "收据号:" + txtReceiptNumber.Text + "\n" + "发票号:" + txtInvoiceNumber); this.Dispose();//释放资源 this.Close();//关闭窗体 } } else { MessageBox.Show("收费失败!"); } } else { MessageBox.Show("你还没有输入收到的金额,请输入!"); } } } catch { } } #endregion
这样对病人的收费就已经完成了,收费完成后在病人在体检登记主界面上就有了病人体检的信息,如图:
其中的刚才已经收费的病人信息如下:
该过程涉及到的储存过程有:
--查询体检登记页面中的病人登记信息 IF @Type = 'FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu' BEGIN SELECT RTRIM( BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber , RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID,RTRIM(PW_AuxiliaryItemDetailTable. AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsID) AS AttributeDetailsID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 体检登记, RTRIM('无') AS OrdonnanceNumber,RTRIM( BT_PatientTable.PatientID) AS PatientID, RTRIM(PW_ChargeBillTable.Operator_StaffID) AS TreatmentDoctor_StaffID, RTRIM(0) AS OrdonnanceID, PW_ChargeBillTable.OperateTime AS PrescriptionDate, RTRIM(PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID) AS ChargeBillID FROM PW_AuxiliaryItemDetailTable INNER JOIN BT_PatientTable INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable_1.AttributeDetailsID ON PW_AuxiliaryItemDetailTable.OrdonnanceID = BT_PatientTable.PatientID INNER JOIN BT_AttributeDetailsTable ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID AND BT_PatientTable.PatientID = PW_PhysicalExaminationChargeBillPatientTable.PatientID INNER JOIN BT_StaffTable INNER JOIN PW_ChargeBillTable ON BT_StaffTable.StaffID = PW_ChargeBillTable.Operator_StaffID ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID WHERE (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 1) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) OR (PW_ItemCategoryTable.ItemCategoryID = 4) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) UNION SELECT RTRIM(BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID,RTRIM(PW_AuxiliaryItemDetailTable. AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID,RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsID) AS AttributeDetailsID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 体检登记,RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber, RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID,PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID FROM BT_StaffTable INNER JOIN PW_OrdonnanceTable INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN BT_AttributeDetailsTable INNER JOIN BT_PatientTable ON BT_AttributeDetailsTable.AttributeDetailsID = BT_PatientTable.AS_SexID ON BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID INNER JOIN PW_AuxiliaryItemDetailTable INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable_1.AttributeDetailsID INNER JOIN PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID ON PW_OrdonnanceTable.OrdonnanceID = PW_AuxiliaryItemDetailTable.OrdonnanceID ON BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID WHERE (1 = 1) AND PW_ItemCategoryTable.ItemCategoryID = 1 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 union SELECT RTRIM(BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsID) AS AttributeDetailsID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 体检登记, RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber, RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID, PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID FROM BT_StaffTable INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN BT_PatientTable INNER JOIN BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN PW_ItemCategoryTable INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN PW_AuxiliaryItemDetailTable ON BT_AttributeDetailsTable_1.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN PW_OrdonnanceTable ON PW_AuxiliaryItemDetailTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID ON BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID WHERE (1 = 1) and PW_ItemCategoryTable.ItemCategoryID = 4 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 order by 体检登记 END
BLL中的方法有:
#region 体检病人登记信息表格绑定 [OperationContract] public DataSet FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu() { SqlParameter[] mySqlParameters = { new SqlParameter("@Type",SqlDbType .Char ), }; mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu "; DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion
UIL中的代码有:
//查询出来所有的病人信息 DataTable dtPhysicalExamination = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu().Tables[0]; dgv_PhysicalExaminationRegister.DataSource = dtPhysicalExamination;
作人员根据病人拿来的收费单对病人进行体检登记,即
提交体检登记后病人的体检状态就会变成
,医生就可以对病人执行体检操作。
提交体检登记的储存过程有经过过处方单的:
--单击处方单,获取该处方单下的体检项目 IF @Type = 'FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID' BEGIN SELECT PW_OrdonnanceTable.PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 体检状态, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_ItemTable.ItemCoding) AS ItemCoding FROM BT_PhysicalExaminationSetMealTable INNER JOIN PW_AuxiliaryItemDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = PW_AuxiliaryItemDetailTable.AllItemID INNER JOIN BT_PhysicalExaminationSetMealDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = BT_PhysicalExaminationSetMealDetailTable.PhysicalExaminationSetMealID INNER JOIN BT_ItemTable ON BT_PhysicalExaminationSetMealDetailTable.ItemID = BT_ItemTable.ItemID INNER JOIN PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN BT_AttributeDetailsTable ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN PW_OrdonnanceTable ON PW_AuxiliaryItemDetailTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID INNER JOIN BT_PatientTable ON PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID =4 AND PW_OrdonnanceTable .OrdonnanceID = @OrdonnanceID union SELECT PW_OrdonnanceTable.PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 体检状态, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_ItemTable.ItemCoding) AS ItemCoding FROM BT_PatientTable INNER JOIN BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN PW_ItemCategoryTable INNER JOIN PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID ON BT_AttributeDetailsTable_1.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID INNER JOIN PW_OrdonnanceTable ON PW_AuxiliaryItemDetailTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID = 1 AND PW_OrdonnanceTable .OrdonnanceID = @OrdonnanceID END
不经过处方单的储存过程有:
--单击某病人,获取该病人下的体检项目(不经过处方,已收费) IF @Type = 'FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge' BEGIN SELECT RTRIM(BT_PatientTable.PatientID) AS PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName, BT_ItemTable.ItemUnit FROM BT_PhysicalExaminationSetMealTable INNER JOIN PW_AuxiliaryItemDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = PW_AuxiliaryItemDetailTable.AllItemID INNER JOIN BT_PhysicalExaminationSetMealDetailTable ON BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID = BT_PhysicalExaminationSetMealDetailTable.PhysicalExaminationSetMealID INNER JOIN BT_ItemTable ON BT_PhysicalExaminationSetMealDetailTable.ItemID = BT_ItemTable.ItemID INNER JOIN PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN BT_PatientTable ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID WHERE (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 4) AND (BT_PatientTable.PatientID = @PatientID) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) AND (PW_PhysicalExaminationChargeBillPatientTable.WhetherCharge = 1) AND (PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = @ChargeBillID) UNION SELECT RTRIM(BT_PatientTable.PatientID) AS PatientID, RTRIM(PW_AuxiliaryItemDetailTable.ItemCategoryID) AS ItemCategoryID, RTRIM(PW_ItemCategoryTable.ItemCategoryName) AS ItemCategoryName, RTRIM(PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID) AS AuxiliaryItemDetailID, RTRIM(PW_AuxiliaryItemDetailTable.AllItemID) AS AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName, BT_ItemTable.ItemUnit FROM PW_ItemCategoryTable INNER JOIN PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID INNER JOIN PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN BT_PatientTable INNER JOIN BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID = 1 AND BT_PatientTable.PatientID = @PatientID and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 1 AND PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = @ChargeBillID END
根据辅助项目明细ID修改体检状态ID
--修改体检状态ID IF @Type = 'FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click' BEGIN UPDATE PW_AuxiliaryItemDetailTable SET AS_PhysicalExaminationRegisterID = 363 WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID END
BLL中的方法有:
经过处方的BLL中的方法:
#region 根据处方单ID查询体检项目中的辅助项目ID [OperationContract] public DataSet FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(int intOrdonnanceID)//根据处方单ID查询体检项目中的辅助项目ID { SqlParameter[] mySqlParameters = { new SqlParameter("@Type",SqlDbType .Char ), new SqlParameter ("@OrdonnanceID",SqlDbType.Int ), //根据处方单ID查询体检项目中的辅助项目ID }; mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID "; mySqlParameters[1].Value = intOrdonnanceID; DataTable dt = myDALMethod.QueryDataTable ("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } #endregion
不经过处方的BLL中的方法:
[OperationContract] public DataSet FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(int intPatientID, int intChargeBillID)//根据病人ID和收费单ID 查找辅助项目ID { SqlParameter[] mySqlParameters = { new SqlParameter("@Type",SqlDbType .Char ), new SqlParameter ("@PatientID",SqlDbType.Int ),//根据病人ID和收费单ID查找辅助项目ID new SqlParameter ("@ChargeBillID",SqlDbType.Int ), }; mySqlParameters[0].Value = "FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge "; mySqlParameters[1].Value = intPatientID; mySqlParameters[2].Value = intChargeBillID; DataTable dt= myDALMethod.QueryDataTable ("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters); DataSet ds = new DataSet(); ds.Tables.Add (dt); return ds; } #endregion
BLL中的修改体检状态ID中的方法有:
#region 根据辅助项目ID修改体检状态 [OperationContract] public int FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click(int intAuxiliaryItemDetailID)//根据辅助项目ID修改体检状态 { SqlParameter[] mySqlParameters = { new SqlParameter("@Type",SqlDbType .Char ), new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int ), }; mySqlParameters[0].Value = "FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click "; mySqlParameters[1].Value = intAuxiliaryItemDetailID; return myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters); } #endregion
UIL中点击提交体检登记
在其中写的代码有:
#region 提交体检登记 private void btn_PhysicalExaminationRegister_Click(object sender, EventArgs e) { if (intPhysicalExaminationRegisterID == 362) { if (MessageBox.Show("注意: 是否进行体检登记操作?请认真核实登记信息,一旦登记,不可以修改!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { DataTable dtAuxiliaryItemDetailID = new DataTable(); if (intOrdonnanceID > 0) { //根据处方单ID查询体检项目中的辅助项目ID dtAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(intOrdonnanceID).Tables[0]; } else if (intOrdonnanceID == 0 && strOrdonnanceNumber == "无")//如果处方ID为空且处方编号为‘无’ { //根据病人ID和收费单ID查询出辅助项目ID dtAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(intPatientID, intChargeBillID).Tables[0]; } int intAuxiliaryItemDetailID = 0; int intSuccess = 0; for (int i = 0; i < dtAuxiliaryItemDetailID.Rows.Count; i++)//遍历获取体检辅助项目ID { //获取辅助项目ID intAuxiliaryItemDetailID = Convert.ToInt32(dtAuxiliaryItemDetailID.Rows[i]["AuxiliaryItemDetailID"]); //修改体检登记状态 intSuccess += myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click(intAuxiliaryItemDetailID); } if (intSuccess == dtAuxiliaryItemDetailID.Rows.Count && intSuccess > 0) { MessageBox.Show("提交体检登记成功!"); FRM_TiJianDengJi_Main_Load(null, null);//重新加载窗体。刷新 } else { MessageBox.Show("提交体检登记失败!"); } } } else { MessageBox.Show("提交体检登记失败!该病人已经提交,请重新选择其他病人!"); } } #endregion
提交体检登记后,医生在体检执行处就可以到病人的执行信息,就可以为病人执行体检信息了。
注意:该文章仅用于学习用途,违者后果自负
相关文章推荐
- libsvm使用说明
- 怎么计算网站高峰期并发量和所需的带宽
- C语言数组与指针的问题
- ios socket传16进制参数
- C++返回引用的函数
- (转)
- 关于百度搜索引擎的使用心得及建议
- (10.3.5.2)产品需求文档的写作(二) – 梳理需求(产品结构图和用户流程图)
- (10.3.5.1)产品需求文档的写作(一) – 写前准备(信息结构图)
- mysql 更改user表修改密码
- Correlation Filter in Visual Tracking系列二:Fast Visual Tracking via Dense Spatio-Temporal Context Lear
- [bzoj] 3635 Neerc2006 ASCII Art
- Android App设计原则
- 详解在Linux中安装(配置)jdk
- HDU 2003 求绝对值
- Java程序执行Linux命令(JSP运行其他程序)
- 冲刺的二阶段第五天
- (转)MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
- 111
- 25个Linux相关的网站