WCF医院管理系统技术解析(七)体检登记(六)前台收费
设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的 前台收费中的界面效果如图所示:
2.9.8(图57)
选择病人需要收费的体检单:即为什么界面不是体检单号呢?因为:收费的病人有两种,其一就是经过处方开单收费的,其二就是病人到医院只是进行体检操作,该过程不涉及处方单,但是它也有存在的收费项目,所以下拉框中内容是体检病人进行的体检收费的病人卡号。选择了病人卡号后,你会看到病人收费的详细信息:如下图所示:
2.9.8(图58)
数据库中表与关系有:
2.9.8(图59)
2.9.8(图60)
界面上用到的控件有:
控件 | 说明
从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范
|
文本框 (TextBox) | |
下拉框 (ComBobox) | |
数据表格 (DataGridView) | |
按钮(Button) | |
标签 (Label) |
表1:病人表(PatientTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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) |
| 联系手机 |
| 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 |
| 是否体检 |
表2: 属性明细表(AttributeDetailsTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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)) | 有效否 |
表3:体检登记病人表(PW_PhysicalExaminationChargeBillPatientTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationChargeBillPatientID | int | 主键 | 体检登记病人ID |
PatientID | int |
| 病人ID |
ChargeBillID | int | 外键 | 收费单ID |
AuxiliaryItemDetailID | Int |
| 辅助项目明细ID |
WhetherChargeBill | bit | ((1)) | 是否收费 |
表4: 项目类别表 (PW_ItemCategoryTable)
列名 | 数据类型 | 主键/外键 | 说明 |
ItemCategoryID | int | 主键 | 项目类别ID |
ItemCategoryName | nchar (30) | 外键 | 项目类别名称 |
表5:体检套餐表 (PhysicalExaminationSetMealTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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)) | 有效否 |
表6:体检套餐明细表(PhysicalExaminationSetMealDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationSetMealDetailID | int | 主键 | 体检套餐明细ID |
PhysicalExaminationSetMealID | int | 外键 | 体检套餐ID |
ItemID | int | 外键 | 项目ID |
WhetherEffective | bit | ((1)) | 有效否 |
表7:项目表(ItemTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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) |
| 项目单位 |
表8:科室表:(TechnicalOfficesTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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)) | 有效否 |
表9 辅助项目明细表 (PW_AuxiliaryItemDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
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
提交体检登记后,医生在体检执行处就可以到病人的执行信息,就可以为病人执行体检信息了。
注意:该文章仅用于学习用途,违者后果自负