WCF医院管理系统技术解析(八)体检执行(一)
在体检登记处登记完病人的信息后,可以在体检执行处看到病人需要的体检项目并且可以对病人开体检执行单进行体检执行。体检执行的界面效果图如下:
2.9.9(图1)
界面涉及到的控件有:
控件 | 说明
从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范
|
文本框 (TextBox) | |
下拉框 (ComBobox) | |
数据表格 (DataGridView) | |
按钮(Button) | |
标签 (Label) | |
选项卡(TabControl) | |
时间控件(DataTimePicker) | |
复选框(CheckBox) | |
线条(LineShape) |
数据库中涉及到的表与关系有:
2.9.9(图2)
2.9.9(图3)
2.9.9(图4)
2.9.9(图5)
表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 辅助项目明细表 (PW_AuxiliaryItemDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
AuxiliaryItemDetailID | int | 主键 | 辅助明细项目ID |
RegisterID | int | 外键 | 挂号ID |
AllItemID | int | 外键 | 总项目ID |
ItemCategoryID | int | 外键 | 项目类别ID |
WhetherEffective | bit | ((1)) | 是否有效 |
AS_PhysicalExaminationRegisterID | int | 外键 | 体检登记ID |
OrdonnanceID | int | 外键 | 处方单ID |
表9.会员类别表 (MemberCategoryTable)
列名 | 数据类型 | 主键/外键 | 说明 |
MemberCategoryID | int | 主键 | 会员类别 ID |
MemberCategoryNumber | nchar (30) |
| 会员类别编号 |
MemberCategoryDiscount | numeric (18, 2) |
| 会员类别折扣 |
MemberCategoryName | nchar (30) |
| 会员类别名称 |
Remarks | nchar (150) |
| 备注 |
WhetherEffective | bit | ((1)) | 有效否 |
该过程涉及到的储存过程有:
---绑定病人信息
IF @Type = 'FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage'
BEGIN
--不经过处方的
SELECT BT_StaffTable.StaffName, BT_PatientTable.PatientCardNumber, BT_PatientTable.PatientName, BT_AttributeDetailsTable_1.AttributeDetailsName, BT_PatientTable.AS_SexID,
PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID, BT_AttributeDetailsTable.AttributeDetailsID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 体检登记, RTRIM('无')
AS OrdonnanceNumber, BT_PatientTable.PatientID, RTRIM(PW_ChargeBillTable.Operator_StaffID) AS TreatmentDoctor_StaffID, RTRIM(0) AS OrdonnanceID, CONVERT(NCHAR(10),
PW_ChargeBillTable.OperateTime, 120) AS PrescriptionDate, BT_MemberCategoryTable.MemberCategoryName, BT_AttributeDetailsTable_2.AttributeDetailsName AS 医保类型,
BT_PatientTable.MemberTypeID, BT_PatientTable.AS_InsuredTypeID, BT_PatientTable.Birthday, BT_PatientTable.Age,PW_PhysicalExaminationChargeBillPatientTable.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 INNER JOIN
BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID INNER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 ON BT_PatientTable.AS_InsuredTypeID = BT_AttributeDetailsTable_2.AttributeDetailsID
WHERE 1 = 1 AND PW_ItemCategoryTable.ItemCategoryID = 4 AND PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID <> 362 AND PW_ChargeBillTable.WhetherOrdonnance = 0 OR
PW_ItemCategoryTable.ItemCategoryID = 1 AND PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID <> 362 AND PW_ChargeBillTable.WhetherOrdonnance = 0
UNION
--经过处方的
SELECT BT_StaffTable.StaffName, BT_PatientTable.PatientCardNumber, BT_PatientTable.PatientName, BT_AttributeDetailsTable.AttributeDetailsName, BT_PatientTable.AS_SexID,
PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID, BT_AttributeDetailsTable_1.AttributeDetailsID, BT_AttributeDetailsTable_1.AttributeDetailsName AS 体检登记,
PW_OrdonnanceTable.OrdonnanceNumber, PW_OrdonnanceTable.PatientID, PW_OrdonnanceTable.TreatmentDoctor_StaffID, PW_AuxiliaryItemDetailTable.OrdonnanceID, CONVERT(NCHAR(10),
PW_OrdonnanceTable.PrescriptionDate, 120) AS PrescriptionDate, BT_MemberCategoryTable.MemberCategoryName,
BT_AttributeDetailsTable_2.AttributeDetailsName AS 医保类型, BT_PatientTable.MemberTypeID, BT_PatientTable.AS_InsuredTypeID, BT_PatientTable.Birthday, BT_PatientTable.Age,
PW_ChargeBillTable.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.AS_PhysicalExaminationRegisterID <> 362 and PW_AuxiliaryItemDetailTable .WhetherOrdonnance = 1 and PW_ChargeBillTable.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 体检登记, PW_OrdonnanceTable.OrdonnanceNumber, PW_OrdonnanceTable.PatientID, PW_OrdonnanceTable.TreatmentDoctor_StaffID,
PW_AuxiliaryItemDetailTable.OrdonnanceID, CONVERT(NCHAR(10), PW_OrdonnanceTable.PrescriptionDate, 120) AS PrescriptionDate,
BT_MemberCategoryTable.MemberCategoryName, BT_AttributeDetailsTable_2.AttributeDetailsName AS 医保类型, BT_PatientTable.MemberTypeID, BT_PatientTable.AS_InsuredTypeID,
BT_PatientTable.Birthday, BT_PatientTable.Age, PW_ChargeBillTable.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 = 4AND PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID <> 362 and PW_AuxiliaryItemDetailTable .WhetherOrdonnance = 1 and PW_ChargeBillTable.WhetherOrdonnance = 1
ORDER BY 体检登记
END
BLL中的方法有:
#region 绑定体检执行病人信息
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage ";
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
UIL中涉及到的代码有:
在窗体的加载事件中写有:
dgv_PatientMessage.AutoGenerateColumns = false;//设置dgv中列的不可改变
dgv_PatientMessage.DataSource = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage().Tables[0]; //病人信息(dgv_PatientMessage)的数据绑定
选择需要进行体检执行的病人,对其开体检执行单,需要选择确定的执行医生,输入备注
,然后点击保存执行信息
保存执行单
保存体检执行单涉及到的储存过程有:其中中的作用是:查询刚才新增的体检执行单ID ,用于新增体检执行单明细表
--新增体检执行信息,即保存体检执行中的病人信息
IF @Type = 'FRM_TiJianZhiXing_Main_Load_btn_SubmitReport_Click'
BEGIN
INSERT INTO PW_PhysicalExaminationExecuteTable
(ChargeBillID, ExecuteDoctor_StaffID, Remarks, ExecuteNumber,WhetherOrdonnance)
VALUES (@ChargeBillID, @ExecuteDoctor_StaffID, @Remarks, @ExecuteNumber,1)
SELECT @@IDENTITY
END
BLL中的方法有:
#region 新增体检执行信息,即保存体检执行中的病人信息
[OperationContract]
public int FRM_TiJianZhiXing_Main_Load_btn_SubmitReport_Click(int intChargeBillID, int intExecuteDoctor_StaffID, string strRemarks, string strExecuteNumber)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType .Int ),//获取界面中的收费单ID
new SqlParameter ("@ExecuteDoctor_StaffID",SqlDbType .Int ),//获取界面中的执行医生ID
new SqlParameter ("@Remarks",SqlDbType.Char ),//获取界面中的备注备注
new SqlParameter ("@ExecuteNumber",SqlDbType .Char ),//获取界面中的执行单号
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_Load_btn_SubmitReport_Click ";
mySqlParameters[1].Value = intChargeBillID;
mySqlParameters[2].Value = intExecuteDoctor_StaffID;
mySqlParameters[3].Value = strRemarks;
mySqlParameters[4].Value = strExecuteNumber;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
int intFanHuiZhi = Convert.ToInt32(dt.Rows[0][0]);//获取刚才新增的体检执行单ID
return intFanHuiZhi;//把刚才获取的新增体检执行单ID返回界面
}
#endregion
UIL中点击保存执行信息按钮中涉及到的代码有:(注意:这个体检执行模块中新增和修改都用在同一个界面上了,注意代码中的判断)
#region 体检执行信息添加
private void btn_SaveExecuteMessage_Click(object sender, EventArgs e)
{
int intExecuteDoctor_StaffID = Convert.ToInt32(cbo_ExecuteDoctor_StaffID.SelectedValue);//获取执行医生的ID
string strRemarks = txt_Remarks.Text.ToString().Trim();//获取输入的备注
string strHealthSuggest = txt_HealthSuggest.Text.ToString().Trim();//获取输入或者选择的健康建议
string strExecuteNumber = txt_ExecuteNumber.Text.ToString().Trim();//获取体检执行单号
#region 进行体检执行的修改操作
if (strPhysicalExaminationRegister == "已执行")
{
if (intSwitch == 0)
{
MessageBox.Show("该病人的体检执行单已经完成!请重新选择病人!");
return;
}
if (intSwitch == 3)
{
if (myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Update_btn_SaveExecuteMessage_Click(intChargeBillID, intExecuteDoctor_StaffID, strRemarks, strExecuteNumber, strHealthSuggest, intPhysicalExaminationExecuteID) > 0)
{
MessageBox.Show("修改保存体检执行成功!");
txt_Remarks.Text = ""; txt_ExecuteNumber.Text = ""; cbo_ExecuteDoctor_StaffID.SelectedValue = -1;
}
else
{
MessageBox.Show("修改保存体检执行失败!");
}
}
}
#endregion
else
{
if (intSwitch == 2)//如果intSwitch = 2说明在该挂号下的病人还有检查项目没有完成,
{
MessageBox.Show("保存失败!该病人已经登记,该病人还有检查项目没有完成,请完成检查项目!");
return;
}
else
{
if (intOrdonnanceID > 0)//处方单ID > 0 即选择的病人是处方上来的
{
#region 提示重复的处方单病人进行体检执行
//根据处方单查询体检执行单是否存在该处方单的体检执行单
DataTable dtPhysicalExaminationExecuteID = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteID(intChargeBillID).Tables[0];
if (dtPhysicalExaminationExecuteID.Rows.Count > 0)//说明存在该单的体检执行单
{
int intChargeBillID1 = Convert.ToInt32(dtPhysicalExaminationExecuteID.Rows[0]["ChargeBillID"].ToString().Trim());//获取体检执行单中的收费单ID
if (intChargeBillID == intChargeBillID1)//如果执行单中的收费单ID 和 选择的病人的收费单ID 相等
{
MessageBox.Show("该处方下病人的体验执行单已经存在,不可以添加,请重新选择其他的病人信息");用于该体检执行单已经存在,不可以新增体验执行单
return;
}
}
#endregion
if (intExecuteDoctor_StaffID == 0)
{
MessageBox.Show("请选择体检报告医生!");
return;
}
SomeXiangZhiOnInsertPhysicalExaminationExecute();//自定义方法为添加体检执行单做限制
if (blnInsert == true)//定义变量判断是否可以新增,true 为可以新增,
{
//根据获取的收费单id、执行医生ID、备注、执行单号
intPhysicalExaminationExecuteID = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_btn_SubmitReport_Click(intChargeBillID, intExecuteDoctor_StaffID, strRemarks, strExecuteNumber);
if (intPhysicalExaminationExecuteID > 0)
{
MessageBox.Show("保存病人进入体检执行成功!");
myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_UpdatePhysicalExaminationMaximumNumber();//修改体检单号
txt_ExecuteNumber.Text = ""; txt_Remarks.Text = ""; cbo_Electrocardiogram.SelectedValue = -1;
}
else
{
MessageBox.Show("保存病人进入体检执行失败!");
}
}
}
else //说明病人不是经过处方上来的
{
if (intChargeBillID > 0)//不经过处方单的收费单ID
{
#region 提示重复的收费单病人进行体检执行(即不经过处方的病人)
DataTable dtPhysicalExaminationExecuteID = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteIDOnChargeBillID(intChargeBillID).Tables[0];
if (dtPhysicalExaminationExecuteID.Rows.Count > 0)
{
int inChargeBillID1 = Convert.ToInt32(dtPhysicalExaminationExecuteID.Rows[0]["ChargeBillID"].ToString().Trim());//获取体检执行表中的收费单TD
if (intChargeBillID == inChargeBillID1)//获取的收费单ID与选择的体检收费单ID相等
{
MessageBox.Show("该病人的体验执行单已经存在,不可以添加,请重新选择其他的病人信息");用于该挂号下单击不同项目时不可以新增体验执行单
return;
}
}
#endregion
if (intExecuteDoctor_StaffID == 0)
{
MessageBox.Show("请选择体检报告医生!");
return;
}
SomeXiangZhiOnInsertPhysicalExaminationExecute();//自定义方法为添加体检执行单做限制
if (blnInsert == true)//定义变量判断是否可以新增,true 为可以新增,
{
//根据获取的收费单id、执行医生ID、备注、执行单号
intPhysicalExaminationExecuteID = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_btn_SubmitReport_Click_NotOrdonnance(intChargeBillID, intExecuteDoctor_StaffID, strRemarks, strExecuteNumber);
if (intPhysicalExaminationExecuteID > 0)
{
MessageBox.Show("保存病人进入体检执行成功!");
myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_UpdatePhysicalExaminationMaximumNumber();//修改体检单号
txt_ExecuteNumber.Text = ""; txt_Remarks.Text = ""; cbo_Electrocardiogram.SelectedValue = -1;
}
else
{
MessageBox.Show("保存病人进入体检执行失败!");
}
}
}
}
}
}
}
#endregion
上述中的代码判断有些是带储存过程的:如:提示重复的经处方的收费单进行体检执行:储存过程为:
--查询执行过程中还有部分没有检查的项目就退出了体检执行,获取体检执行ID进行重新执行的操作(经过处方)
IF @Type = 'FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteID'
BEGIN
SELECT ChargeBillID, PhysicalExaminationExecuteID
FROM PW_PhysicalExaminationExecuteTable
WHERE PW_PhysicalExaminationExecuteTable.ChargeBillID = @ChargeBillID AND PW_PhysicalExaminationExecuteTable. WhetherOrdonnance = 1
END
同理:不经过处方单的体检执行单也是如此,但是储存过程有点不同,就是储存过程的WHERE条件不同,具体如下:
--查询执行过程中还有部分没有检查的项目就退出了体检执行,获取体检执行ID进行重新执行的操作(不经过处方)
IF @Type = 'FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteIDOnChargeBillID'
BEGIN
SELECT ChargeBillID, PhysicalExaminationExecuteID
FROM PW_PhysicalExaminationExecuteTable
WHERE PW_PhysicalExaminationExecuteTable.ChargeBillID = @ChargeBillID AND PW_PhysicalExaminationExecuteTable. WhetherOrdonnance = 0
END
BLL中对应的方法有:
//查询执行过程中还有部分没有检查的项目就退出了体检执行,获取体检执行ID进行重新执行的操作(经过处方)
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteID(int intChargeBillID)//根据收费单ID 查询体检执行单
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType.Int ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteID ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
在中的作用主要是提示不能重复对同一个病人的收费单进行开重复的体检执行单UIL中的代码有:
#region 提示重复的处方单病人进行体检执行
//根据处方单查询体检执行单是否存在该处方单的体检执行单
DataTable dtPhysicalExaminationExecuteID = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PatientMessage_CellClick_SelectPhysicalExaminationExecuteID(intChargeBillID).Tables[0];
if (dtPhysicalExaminationExecuteID.Rows.Count > 0)//说明存在该单的体检执行单
{
int intChargeBillID1 = Convert.ToInt32(dtPhysicalExaminationExecuteID.Rows[0]["ChargeBillID"].ToString().Trim());//获取体检执行单中的收费单ID
if (intChargeBillID == intChargeBillID1)//如果执行单中的收费单ID 和 选择的病人的收费单ID 相等
{
MessageBox.Show("该处方下病人的体验执行单已经存在,不可以添加,请重新选择其他的病人信息");用于该体检执行单已经存在,不可以新增体验执行单
return;
}
}
#endregion
该按钮中涉及到两个自定义方法有:
第一个自定义方法有:为添加体检执行单做限制
#region 为添加体检执行单做的限制
void SomeXiangZhiOnInsertPhysicalExaminationExecute()//自定义方法为添加体检执行单做限制
{
Boolean blnWhetherChuFang = true; int ChargeBillID = 0;
#region 查询体检执行表中的最后一条数据,这个情况用于当新增一个体检执行单后(没有新增体检执行明细)就退出来,第二次登录后需要提示完成上次的操作,
//查询体检执行单中的最后一条数据
DataTable dtLastPW_PhysicalExaminationExecuteTable = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteTable().Tables[0];
if (dtLastPW_PhysicalExaminationExecuteTable.Rows.Count == 0)
{ }
else
{
blnWhetherChuFang = Convert.ToBoolean(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["WhetherOrdonnance"]);//获取体检执行单是否经过处方 false 就不经过处方,true 经过处方
int intLastZhiXingID = Convert.ToInt32(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["PhysicalExaminationExecuteID"]);//获取体检执行单中的最后一条数据的体检执行ID
ChargeBillID = Convert.ToInt32(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["ChargeBillID"]);//获取处方单ID
//根据查询体检执行表中的最后一条数据,判断是否存在体检执行内容明细,存在就新增体检执行表,不存在就根据体检执行ID新增体检执行内容明细表
DataTable dtLastTiJianZhiXingNeiRongMingXiBiao = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteContentDetailTable(intLastZhiXingID).Tables[0];
DataTable dtFinishTiJianZhiXingNeiRongMingXiBiao1 = dtLastTiJianZhiXingNeiRongMingXiBiao.DefaultView.ToTable(true, "ItemID");
if (dtLastTiJianZhiXingNeiRongMingXiBiao.Rows.Count == 0)//说明已经执行保存体检执行单不存在体检执行内容明细
{
intPhysicalExaminationExecuteID = intLastZhiXingID;//获取体检执行单
}
else //存在体检执行单中的执行内容明细
{
#region 判断上一次体检执行信息没有完成就退出的情况
DataTable dtAllItems = new DataTable(); int intWhetherfinish = 0;
if (blnWhetherChuFang == false)//如果体检执行单不经过处方,就把对应保存在体检执行单中的收费单查询体检收费单对应的体检项目
{
//绑定不经过处方的体检项目
dtAllItems = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem(ChargeBillID).Tables[0];
}
else //根据保存在体检执行单中的收费ID查询经过处方的体检项目
{
dtAllItems = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail(ChargeBillID).Tables[0];
}
for (int l = 0; l < dtAllItems.Rows.Count; l++)//遍历查询出来的收费单对于的体检项目
{
for (int k = 0; k < dtFinishTiJianZhiXingNeiRongMingXiBiao1.Rows.Count; k++)//遍历体检执行内容明细中已经完成的体检项目
{
int intFinishItemID = Convert.ToInt32(dtFinishTiJianZhiXingNeiRongMingXiBiao1.Rows[k]["ItemID"]);//获取体检执行内容明细单中对应的体检项目ID
if (intFinishItemID == Convert.ToInt32(dtAllItems.Rows[l]["ItemID"]))//判断如果完成的项目ID与体检项目ID相同,累加变量
{
intWhetherfinish++;//累加变量
}
}
}
if (intWhetherfinish == dtAllItems.Rows.Count && intWhetherfinish > 0)//如果累加的变量和体检项目的总数相同且大于0,说明上一次的体检执行单完成,可以新增体检执行单
{
intPhysicalExaminationExecuteID = 0;//进行新增体检执行单
}
else //否则不可以新增体检执行单
{
intPhysicalExaminationExecuteID = intLastZhiXingID;//获取上一次的体检执行单
}
#endregion
}
}
#endregion
if (intPhysicalExaminationExecuteID > 0)//体检执行单存在,说明还有病人没有完成体检执行
{
#region 连续添加病人。提示执行完成一个才能继续添加
string strPatientName = ""; string strOrdonnanceNumber = ""; DataTable dtRemindUser = new DataTable();
if (blnWhetherChuFang == false)//为不经过处方的体检执行单
{
//根据收费单ID查询上次病人的信息
dtRemindUser = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_btn_SaveExecuteMessage_RemindUser_NotOrdonnance(ChargeBillID).Tables[0];
}
else //获取经过处方单的病人
{//根据收费单ID查询上次病人的信息
dtRemindUser = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_btn_SaveExecuteMessage_RemindUser(intPhysicalExaminationExecuteID).Tables[0];
}
if (dtRemindUser.Rows.Count == 0)//说明体检执行表中没有数据
{ }
else
{
if (blnWhetherChuFang == true)//经过处方单的上次病人
{
strPatientName = dtRemindUser.Rows[0]["PatientName"].ToString().Trim();//获取病人姓名
strOrdonnanceNumber = dtRemindUser.Rows[0]["ReceiptNumber"].ToString().Trim();//获取病人收费单据
intChargeBillID = Convert.ToInt32(dtRemindUser.Rows[0]["ChargeBillID"].ToString().Trim());//获取病人收费单ID
intOrdonnanceID = Convert.ToInt32(dtRemindUser.Rows[0]["OrdonnanceID"].ToString().Trim());//获取病人处方单ID
intSelectWetherFinisch = 0;
JudgeWetherFinisch();//自定义方法用于判断是否完成中的值,如果存在内容,为"√";否则为"×"
}
else
{
strPatientName = dtRemindUser.Rows[0]["PatientName"].ToString().Trim();
strOrdonnanceNumber = dtRemindUser.Rows[0]["ReceiptNumber"].ToString().Trim();
intChargeBillID = Convert.ToInt32(dtRemindUser.Rows[0]["ChargeBillID"].ToString().Trim());
intPatientID = Convert.ToInt32(dtRemindUser.Rows[0]["PatientID"].ToString().Trim());
intSelectWetherFinisch = 0;
intOrdonnanceID = 0;
JudgeWetherFinisch();//自定义方法用于判断是否完成中的值,如果存在内容,为"√";否则为"×"
}
}
if (intSelectWetherFinisch == dgv_PhysicalExaminationExecuteContentDetail.Rows.Count && intSelectWetherFinisch > 0)
{
intOrdonnanceID = Convert.ToInt32(dgv_PatientMessage.CurrentRow.Cells["处方单ID"].Value);
intPhysicalExaminationExecuteID = 0;
}
else
{
MessageBox.Show("你刚才已经添加了收据单号为: " + strOrdonnanceNumber + "\n" + " 病人姓名为: " + strPatientName + " 的体检执行单!" + "\n" + "请先执行好该病人体检项目执行结果再添加病人吧!");
JudgeWhetherOrdonnanceOrChargeBill();//自定义提示不能进行登记,并且返回需要执行的病人上
blnInsert = false;
return;
}
#endregion
}
else
{
blnInsert = true;
}
}
#endregion
上述自定义方法中有部分涉及到储存过程的:如下这个情况的判断:
查询体检执行表中的最后一条数据,这个情况用于当新增一个体检执行单后(没有新增体检执行明细或者没有完全执行)就退出来,第二次登录后需要提示完成上次的操作:
储存过程为:
--查询体检执行表中的最后一条数据,这个情况用于当新增一个体检执行单后(没有新增体检执行明细或完全新增)就退出来,第二次登录后不可以再新增体检执行单,
IF @Type = 'FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteTable'
BEGIN
SELECT PhysicalExaminationExecuteID, ChargeBillID, WhetherOrdonnance
FROM PW_PhysicalExaminationExecuteTable
END
BLL中对应的方法有:
//查询体检执行表中的最后一条数据,这个情况用于当新增一个体检执行单后(没有新增体检执行明细或没有完全新增)就退出来,第二次登录后不可以再新增体检执行单,
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteTable()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteTable ";
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
UIL中对应的代码:
DataTable dtLastPW_PhysicalExaminationExecuteTable = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteTable().Tables[0];
if (dtLastPW_PhysicalExaminationExecuteTable.Rows.Count == 0)
{ }
else
{
//获取体检执行单是否经过处方 false 就不经过处方,true 经过处方
blnWhetherChuFang = Convert.ToBoolean(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["WhetherOrdonnance"]);
//获取体检执行单中的最后一条数据的体检执行ID
int intLastZhiXingID = Convert.ToInt32(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["PhysicalExaminationExecuteID"]);
ChargeBillID = Convert.ToInt32(dtLastPW_PhysicalExaminationExecuteTable.Rows[dtLastPW_PhysicalExaminationExecuteTable.Rows.Count - 1]["ChargeBillID"]);//获取收费单ID
根据查询体检执行表中的最后一条数据,判断是否存在体检执行内容明细,存在就新增体检执行表,不存在就根据体检执行ID新增体检执行内容明细表涉及到的储存过程:
--根据查询体检执行表中的最后一条数据,
IF @Type = 'FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteContentDetailTable'
BEGIN
SELECT PhysicalExaminationExecuteContentDetailID, PhysicalExaminationContentID, ItemID
FROM PW_PhysicalExaminationExecuteContentDetailTable
WHERE PhysicalExaminationExecuteID = @PhysicalExaminationExecuteID
END
BLL中对应的方法有:
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteContentDetailTable(int intPhysicalExaminationExecuteID)//根据最后一个体检执行单ID查询体检执行内容明细
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@PhysicalExaminationExecuteID",SqlDbType .Int ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteContentDetailTable ";
mySqlParameters[1].Value = intPhysicalExaminationExecuteID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
结合获取体检执行单中的最后一条数据是否为经过处方单的收费单ID还是不经过处方单ID的收费单ID来查询不同的收费单下的体检项目:
不经过处方的收费单下的体检项目的储存过程:
--绑定体检明细信息单击某病人,获取该病人下的体检项目(不经过处方)
IF @Type = 'FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem'
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_AttributeDetailsTable.AttributeDetailsName) AS 体检状态,
BT_ItemTable.ItemID, BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID AS 体检套餐ID,
BT_PhysicalExaminationSetMealDetailTable.PhysicalExaminationSetMealDetailID AS 体检套餐明细ID, RTRIM(BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealName)
AS 体检套餐MC, RTRIM(0) AS OrdonnanceID, PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, PW_PhysicalExaminationChargeBillPatientTable.WhetherCharge
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
PW_ChargeBillTable ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID
WHERE 1 = 1 AND PW_ItemCategoryTable.ItemCategoryID = 4 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_AttributeDetailsTable_1.AttributeDetailsName) AS 体检状态,
BT_ItemTable.ItemID, RTRIM(0) AS 体检套餐ID, RTRIM(0) AS 体检套餐明细ID, RTRIM('无') AS 体检套餐MC, RTRIM(0) AS OrdonnanceID,
PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, PW_PhysicalExaminationChargeBillPatientTable.WhetherCharge
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
PW_ChargeBillTable ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID
WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID = 1 AND PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0
AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 1 AND PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = @ChargeBillID
END
经过处方单下的收费单的储存过程:
IF @Type = 'FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail'
BEGIN
SELECT BT_PatientTable.PatientID, PW_AuxiliaryItemDetailTable.ItemCategoryID, PW_ItemCategoryTable.ItemCategoryName, PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID,
PW_AuxiliaryItemDetailTable.AllItemID, RTRIM(BT_ItemTable.ItemName) AS ItemName, PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID,
BT_AttributeDetailsTable.AttributeDetailsName AS 体检状态, BT_PhysicalExaminationSetMealDetailTable.ItemID,
BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID AS 体检套餐ID, BT_PhysicalExaminationSetMealDetailTable.PhysicalExaminationSetMealDetailID AS 体检套餐明细ID,
RTRIM(BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealName) AS 体检套餐MC, PW_OrdonnanceTable.OrdonnanceID, PW_ChargeBillTable.ChargeBillID
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 INNER JOIN
PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID
WHERE 1=1 AND PW_ItemCategoryTable.ItemCategoryID = 4 AND PW_ChargeBillTable.ChargeBillID = @ChargeBillID AND PW_ChargeBillTable.WhetherOrdonnance = 1 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1
union
SELECT BT_PatientTable.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.ItemID) AS ItemID, RTRIM(0) AS 体检套餐ID, RTRIM(0) AS 体检套餐明细ID, RTRIM('无') AS 体检套餐MC, PW_OrdonnanceTable.OrdonnanceID,
PW_ChargeBillTable.ChargeBillID
FROM BT_StaffTable INNER JOIN
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 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_ChargeBillTable.ChargeBillID = @ChargeBillID AND PW_ChargeBillTable.WhetherOrdonnance = 1 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1
END
BLL中与之对应的方法有:
不经过处方单的体检项目:
#region 绑定体检明细信息 单击某病人,获取该病人下的体检项目(不经过处方)
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem(int intChargeBillID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType .Int),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
经过处方单的体检项目:
#region 绑定体检明细信息 单击某病人,获取该病人下的体检项目(经过处方)
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail(int intChargeBillID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType.Int ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
几个涉及到储存过程的UIL中的相互关联的代码有:
//根据查询体检执行表中的最后一条数据,判断是否存在体检执行内容明细,存在就新增体检执行表,不存在就根据体检执行ID新增体检执行内容明细表
DataTable dtLastTiJianZhiXingNeiRongMingXiBiao = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_SelectPW_PhysicalExaminationExecuteContentDetailTable(intLastZhiXingID).Tables[0];
DataTable dtFinishTiJianZhiXingNeiRongMingXiBiao1 = dtLastTiJianZhiXingNeiRongMingXiBiao.DefaultView.ToTable(true, "ItemID");//查询的明细会重复,对于重复的体检项目ID相同的就进行筛选
if (dtLastTiJianZhiXingNeiRongMingXiBiao.Rows.Count == 0)//说明已经执行保存体检执行单不存在体检执行内容明细
{
intPhysicalExaminationExecuteID = intLastZhiXingID;//获取体检执行单
}
else //存在体检执行单中的执行内容明细
{
#region 判断上一次体检执行信息没有完成就退出的情况
DataTable dtAllItems = new DataTable(); int intWhetherfinish = 0;
if (blnWhetherChuFang == false)//如果体检执行单不经过处方,就把对应保存在体检执行单中的收费单查询对应的体检项目
{
//绑定不经过处方的体检项目
dtAllItems = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem(ChargeBillID).Tables[0];
}
else //根据保存在体检执行单中的收费ID查询经过处方的体检项目
{
dtAllItems = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail(ChargeBillID).Tables[0];
}
for (int l = 0; l < dtAllItems.Rows.Count; l++)//遍历查询出来的收费单对于的体检项目
{
for (int k = 0; k < dtFinishTiJianZhiXingNeiRongMingXiBiao1.Rows.Count; k++)//遍历体检执行内容明细中已经完成的体检项目
{
int intFinishItemID = Convert.ToInt32(dtFinishTiJianZhiXingNeiRongMingXiBiao1.Rows[k]["ItemID"]);//获取体检执行内容明细单中对应的体检项目ID
if (intFinishItemID == Convert.ToInt32(dtAllItems.Rows[l]["ItemID"]))//判断如果完成的项目ID与体检项目ID相同,累加变量
{
intWhetherfinish++;//累加变量
}
}
}
if (intWhetherfinish == dtAllItems.Rows.Count && intWhetherfinish > 0)//如果累加的变量和体检项目的总数相同且大于0,说明上一次的体检执行单完成,可以新增体检执行单
{
intPhysicalExaminationExecuteID = 0;//进行新增体检执行单
}
else //否则不可以新增体检执行单
{
intPhysicalExaminationExecuteID = intLastZhiXingID;//获取上一次的体检执行单
}
#endregion
}
第二个自定义方法有:判断收费单下的体检项目是否完成
涉及到的储存过程有:
--判断是否完成(经过处方的)
IF @Type = 'FRM_TiJianZhiXing_Main_WetherFinisch'
BEGIN
SELECT PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentMessage,
PW_PhysicalExaminationExecuteContentDetailTable.ItemID, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentDetailID,
PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationContentID, BT_ItemTable.ItemName, PW_PhysicalExaminationExecuteTable.ChargeBillID
FROM PW_PhysicalExaminationExecuteTable INNER JOIN
PW_PhysicalExaminationExecuteContentDetailTable ON
PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID = PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteID INNER JOIN
BT_ItemTable ON PW_PhysicalExaminationExecuteContentDetailTable.ItemID = BT_ItemTable.ItemID
WHERE PW_PhysicalExaminationExecuteTable.ChargeBillID = @ChargeBillID and PW_PhysicalExaminationExecuteTable.WhetherOrdonnance = 1
END
--判断是否完成(不经过处方)
IF @Type = 'FRM_TiJianZhiXing_Main_WetherFinisch_0nChargeBillID'
BEGIN
SELECT PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentMessage, PW_PhysicalExaminationExecuteContentDetailTable.ItemID,
PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteContentDetailID, PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationContentID,
BT_ItemTable.ItemName, PW_PhysicalExaminationExecuteTable.ChargeBillID
FROM PW_PhysicalExaminationExecuteTable INNER JOIN
PW_PhysicalExaminationExecuteContentDetailTable ON
PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID = PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteID INNER JOIN
BT_ItemTable ON PW_PhysicalExaminationExecuteContentDetailTable.ItemID = BT_ItemTable.ItemID
WHERE PW_PhysicalExaminationExecuteTable.ChargeBillID = @ChargeBillID and PW_PhysicalExaminationExecuteTable.WhetherOrdonnance = 0
END
BLL中涉及到的方法有:
//判断是否完成(经过处方的)
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_WetherFinisch(int intChargeBillID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType.Int ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_WetherFinisch ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
//判断是否完成(不经过处方)
[OperationContract]
public DataSet FRM_TiJianZhiXing_Main_WetherFinisch_0nChargeBillID(int intChargeBillID)//根据收费单查询体检执行内容明细中是否存在信息
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType.Int ),
};
mySqlParameters[0].Value = "FRM_TiJianZhiXing_Main_WetherFinisch_0nChargeBillID ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhiXing_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
UIL中涉及到的代码如下:
#region 自定义方法用于判断是否完成中的值,如果存在内容,为"√";否则为"×"
void JudgeWetherFinisch()
{
DataTable dtWetherFinisch = new DataTable();
if (intOrdonnanceID != 0)//如果处方单ID不为空
{
//绑定经过处方的体检项目和判断经过处方的是否完成
dgv_PhysicalExaminationExecuteContentDetail.DataSource =
myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail(intChargeBillID).Tables[0];
dtWetherFinisch = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_WetherFinisch(intChargeBillID).Tables[0];//
}
else
{
//绑定不经过处方的体检项目和判断不经过处方的是否完成
dgv_PhysicalExaminationExecuteContentDetail.DataSource =
myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_Load_dgv_PhysicalExaminationExecuteContentDetail_SelectItem(intChargeBillID).Tables[0];
dtWetherFinisch = myFRM_TiJianZhiXing_MainClient.FRM_TiJianZhiXing_Main_WetherFinisch_0nChargeBillID(intChargeBillID).Tables[0];
}
//根据挂号ID,查询对应的体检执行内容明细中的信息
if (dtWetherFinisch.Rows.Count == 0) //ddd小于行的集合=0,说明该挂号病人没有检查任何的项目,说明所有项目的是否完成的值都为"×";
{
foreach (DataGridViewRow dgvr in dgv_PhysicalExaminationExecuteContentDetail.Rows)
{
dgvr.Cells["是否完成"].Value = "×";
}
}
else
{
for (int i = 0; i < dgv_PhysicalExaminationExecuteContentDetail.Rows.Count; i++)//遍历dgv_PhysicalExaminationExecuteContentDetail行的集合
{
for (int k = 0; k < dtWetherFinisch.Rows.Count; k++)//遍历dtdtWetherFinisch行的集合
{
//如果两者中的项目ID相同,即说明体检执行内容明细表中对该项目的体检执行内容信息已经完成 ,否则就没有完成
if (Convert.ToInt32(dgv_PhysicalExaminationExecuteContentDetail.Rows[i].Cells["项目ID"].Value) == Convert.ToInt32(dtWetherFinisch.Rows[k]["ItemID"]))
{
intSelectWetherFinisch++;
dgv_PhysicalExaminationExecuteContentDetail.Rows[i].Cells["是否完成"].Value = "√";
break;
}
else
{
dgv_PhysicalExaminationExecuteContentDetail.Rows[i].Cells["是否完成"].Value = "×";
}
}
}
}
}
#endregion
该文章仅用于学习禁止用于商业用途,否则后果自负!