WCF医院管理系统技术解析(十二)化验登记
化验登记这个模块主要是记录需要化验的病人信息 ,对病人执行化验前,工作人员核实病人拿来的收费单后,会对化验的病人的单据进行提交化验登记,提交完毕后,化验执行处就会看到该病人化验的信息,其中化验登记的效果如图所示:
从界面上可以看到我们这里用到的控件有
控件 | 说明
从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范
|
文本框 (TextBox) | |
下拉框 (ComBobox) | |
数据表格 (DataGridView) | |
按钮(Button) | |
标签 (Label) |
数据库涉及到的表和关系有:
表1:员工表(BT_StaffTable)
列名 | 数据类型 | 主键/外键 | 说明 |
StaffID | int | 主键 | 员工ID |
TechnicalOfficesID | int | 外键 | 科室ID |
StaffNumber | nchar (20) |
| 员工编号 |
StaffName | nchar (20) |
| 员工名称 |
WhetherOperator | bit |
| 操作员否 |
AlphabeticBrevityCode | nchar (20) |
| 拼音简码 |
WubiInCode | nchar (20) |
| 五笔简码 |
AS_StaffPositionID | int | 外键 | 员工职务ID |
AS_MedicalTitlesID | int | 外键 | 医务职称ID |
AS_WorkingStatusID | int | 外键 | 工作状态ID |
AS_SexID | int | 外键 | 性别ID |
ContactTelephone | nchar (50) |
| 联系电话 |
WhetherBuiltIn | bit |
| 内置否 |
RegisteredSum | decimal (18, 2) |
| 挂号金额 |
AS_IntoTheHobbyID | int | 外键 | 录入爱好ID |
StaffPhotos | char (200) |
| 员工照片 |
| nchar (70) |
| 电子邮件 |
IDCardNo | nchar (100) |
| 身份证号 |
ContactAddress | nchar (100) |
| 联系地址 |
Birthday | datetime |
| 出生日期 |
WhetherBirthdayRemind | bit |
| 生日提醒否 |
WorkDate | datetime |
| 工作日期 |
TerminationDate | datetime |
| 离职日期 |
AS_OfficialAcademicCredentialsID | int | 外键 | 最高学历ID |
StudySubject | nchar (70) |
| 学习专业 |
AS_PoliticsStatusID | int | 外键 | 政治面貌ID |
Remarks | nchar (100) |
| 员工备注 |
WhetherEffective | bit | ((1)) | 有效否 |
表2:收费单表(PW_ChargeBillTable)
列名 | 数据类型 | 主键/外键 | 说明 |
ChargeBillID | int | 主键 | 收费单ID |
ReceiptNumber | nchar (30) |
| 收据号 |
BillNumber | nchar (30) |
| 发票号 |
AS_ChargeStatusID | int | 外键 | 收费状态ID |
OrdonnanceID | int | 外键 | 处方单ID |
Discount | decimal (18, 2) |
| 折扣 |
CashPaySum | decimal (18, 2) |
| 现金支付金额 |
MedicarePaySum | decimal (18, 2) |
| 医保支付金额 |
BlockPaySum | decimal (18, 2) |
| 卡付金额 |
TallyPaySum | decimal (18, 2) |
| 记账支付金额 |
Operator_StaffID | int | 外键 | 操作员_员工ID |
OperateTime | datetime |
| 操作时间 |
WhetherCancel | bit |
| 作废否 |
WhetherEffective | bit | ((1)) | 有效否 |
WhetherOrdonnance | Bit |
| 是否经过处方 |
表3:辅助项目明细表 (PW_AuxiliaryItemDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
AuxiliaryItemDetailID | int | 主键 | 辅助明细项目ID |
RegisterID | int | 外键 | 挂号ID |
AllItemID | int | 外键 | 总项目ID |
ItemCategoryID | int | 外键 | 项目类别ID |
WhetherEffective | bit | ((1)) | 是否有效 |
AS_PhysicalExaminationRegisterID | int | 外键 | 体检登记ID |
OrdonnanceID | int | 外键 | 处方单ID |
表4:项目类别表 (PW_ItemCategoryTable)
列名 | 数据类型 | 主键/外键 | 说明 |
ItemCategoryID | int | 主键 | 项目类别ID |
ItemCategoryName | nchar (30) | 外键 | 项目类别名称 |
表5:病人表(BT_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 |
| 是否体检 |
表6:属性明细表(BT_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)) | 有效否 |
表7:处方单表(PW_OrdonnanceTable)
列名 | 数据类型 | 主键/外键 | 说明 |
OrdonnanceID | int | 主键 | 处方单ID |
OrdonnanceNumber | nchar (30) |
| 处方单号 |
PatientID | int | 外键 | 病人ID |
PrescriptionDate | datetime |
| 处方时间 |
ClinicTechnicalOffices_TechnicalOfficesID | int | 外键 | 就诊科室_科室ID |
TreatmentDoctor_StaffID | int | 外键 | 就诊医生_员工ID |
AS_ChargeStatusID | int | 外键 | 收费状态ID |
ChargeForPersonnel_StaffID | int | 外键 | 收费人员_员工ID |
ChargeTime | datetime |
| 收费时间 |
AS_TakeMedicineStatusID | int | 外键 | 发药状态ID |
TakeMedicinePersonnel_StaffID | int | 外键 | 发药人员_员工ID |
TakeMedicineTime | datetime |
| 发药时间 |
BedID | int | 外键 | 床位ID |
WhetherEffective | bit | ((1)) | 有效否 |
表8:会员类别表(BT_MemberCategoryTable)
列名 | 数据类型 | 主键/外键 | 说明 |
MemberCategoryID | int | 主键 | 会员类别 ID |
MemberCategoryNumber | nchar (30) |
| 会员类别编号 |
MemberCategoryDiscount | numeric (18, 2) |
| 会员类别折扣 |
MemberCategoryName | nchar (30) |
| 会员类别名称 |
Remarks | nchar (150) |
| 备注 |
WhetherEffective | bit | ((1)) | 有效否 |
数据库中涉及到的储存过程有:
--化验登记绑定病人化验信息
IF @Type = 'FRM_HuaYanDengJi_Load_dgv_AssayRegisterOnYeShu'
BEGIN
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.OrdonnanceID, PW_OrdonnanceTable.PatientID,
PW_OrdonnanceTable.TreatmentDoctor_StaffID, PW_ChargeBillTable.ChargeBillID
FROM BT_StaffTable INNER JOIN
BT_MemberCategoryTable INNER JOIN
BT_PatientTable INNER JOIN
BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 ON BT_PatientTable.AS_InsuredTypeID = BT_AttributeDetailsTable_2.AttributeDetailsID ON
BT_MemberCategoryTable.MemberCategoryID = BT_PatientTable.MemberTypeID 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 = 2 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.OrdonnanceID, PW_OrdonnanceTable.PatientID,
PW_OrdonnanceTable.TreatmentDoctor_StaffID, 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 = 5 AND PW_ChargeBillTable.WhetherOrdonnance = 1 order by 化验状态 ,PatientName --group by PW_RegisterTable.RegisterID
END
BLL中涉及到的方法主要有:
//化验登记绑定病人化验信息
[OperationContract]
public DataSet FRM_HuaYanDengJi_Load_dgv_AssayRegisterOnYeShu()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
};
mySqlParameters[0].Value = "FRM_HuaYanDengJi_Load_dgv_AssayRegisterOnYeShu ";
DataTable dt = myDALMethod.QueryDataTable("HuaYanZhongXin_FRM_HuaYanDengJi_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
UIL中涉及到的代码主要有:
在窗体的加载(Load)事件中有:
ChaXunQuanBuDingDan();///第一次运行打开加载默认页面和页大小
相关自定义方法中有: SkipPage(pageNum, pageSize)方法中带有笨拓的分页方法,点击上一页或者下一页,会跳转到该页的数据
void ChaXunQuanBuDingDan()
{
//第一次运行打开加载默认页面和页大小
SkipPage(pageNum, pageSize);
//根据页号和页面大小获取数据
if (dgv_AssayRegister.Rows.Count > 0)
{
//根据页号和页面大小获取数据(主要用到数据库分页,详见存储过程)
//获取总行数
int totalRowsCount =
Convert.ToInt32(myFRM_HuaYanDengJiClient.FRM_HuaYanDengJi_Load_getTotalRowsCount().Tables[0].Rows[0][0]);
//计算最大页号
pageMaxNum = totalRowsCount / pageSize;
//若有余数则最大一号+1(余1页)
if (totalRowsCount % pageSize > 0)
{
pageMaxNum++;
}
this.lblTotalPage.Text = pageMaxNum.ToString();//最大页数
}
}
void SkipPage(int YeMa, int YeDaXiao)//自定义方法用于页面跳转
{
dgv_AssayRegister.DataSource = myFRM_HuaYanDengJiClient.FRM_HuaYanDengJi_Load_dgv_AssayRegisterOnYeShu().Tables[0]; //查询出来所有的病人信息
DataTable dt = new DataTable();//声明一个空表
dt = (DataTable)dgv_AssayRegister.DataSource;//把dgv_PhysicalExaminationRegister的数据源转化为表的格式赋值给空表
DataTable dtALLPhysicalExaminationMessage = dt.Clone();//声明另一个空表,复制dt的格式(不复制内容)
for (int i = (YeMa - 1) * YeDaXiao; i <= dgv_AssayRegister.Rows.Count - 1; i++)//根据传入页数的大小和页码 遍历获取dgv_PhysicalExaminationRegister中的数据
{
if (i == (YeMa - 1) * YeDaXiao + YeDaXiao)//如果获取的是需要的页码和页大小
{
dgv_AssayRegister.DataSource = dtALLPhysicalExaminationMessage; //就把获取的页码和页大小绑定到dgv中
BangDingPriceAndItemCategoryName();//自定义方法绑定现金价格和项目类型的值
return;
}
DataRow dr = dtALLPhysicalExaminationMessage.NewRow();//对空表添加空白行,并进行对应的赋值
dr["OrdonnanceID"] = dgv_AssayRegister.Rows[i].Cells["处方单ID"].Value;
dr["ChargeBillID"] = dgv_AssayRegister.Rows[i].Cells["收费单ID"].Value;
dr["OrdonnanceNumber"] = dgv_AssayRegister.Rows[i].Cells["处方单号"].Value;
dr["PatientID"] = dgv_AssayRegister.Rows[i].Cells["病人ID"].Value;
dr["TreatmentDoctor_StaffID"] = dgv_AssayRegister.Rows[i].Cells["医生ID"].Value;
dr["StaffName"] = dgv_AssayRegister.Rows[i].Cells["医生姓名"].Value;
dr["PatientCardNumber"] = dgv_AssayRegister.Rows[i].Cells["病人卡号"].Value;
dr["PatientName"] = dgv_AssayRegister.Rows[i].Cells["病人姓名"].Value;
dr["AttributeDetailsName"] = dgv_AssayRegister.Rows[i].Cells["性别"].Value;
dr["AS_SexID"] = dgv_AssayRegister.Rows[i].Cells["性别ID"].Value;
dr["AS_PhysicalExaminationRegisterID"] = dgv_AssayRegister.Rows[i].Cells["化验状态ID"].Value;
dr["AttributeDetailsID"] = dgv_AssayRegister.Rows[i].Cells["辅助项目明细ID"].Value;
dr["化验状态"] = dgv_AssayRegister.Rows[i].Cells["化验状态"].Value;
dtALLPhysicalExaminationMessage.Rows.Add(dr);//把空白行添加到空表中去
}
dgv_AssayRegister.DataSource = dtALLPhysicalExaminationMessage; //就把获取的页码和页大小绑定到dgv中
BangDingPriceAndItemCategoryName();//自定义方法绑定现金价格个项目类型的值
}
工作人员核实病人拿来的收费单后,会对化验的病人的收费单据进行提交化验登记,提交完毕后,化验登记中的该病人的化验状态会从“未登记”
改变为“登记未执行”
该过程数据库涉及到的储存过程有:
--修改化验状态
IF @Type = 'FRM_HuaYanDengJi_btn_PhysicalExaminationRegister_Click'
BEGIN
UPDATE PW_AuxiliaryItemDetailTable
SET AS_PhysicalExaminationRegisterID = 363
WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
END
BLL中对应的方法有:
//修改化验状态
[OperationContract]
public int FRM_HuaYanDengJi_btn_PhysicalExaminationRegister_Click(int intAuxiliaryItemDetailID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),//根据辅助项目ID,修改化验状态ID的值
new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int ),
};
mySqlParameters[0].Value = "FRM_HuaYanDengJi_btn_PhysicalExaminationRegister_Click ";
mySqlParameters[1].Value = intAuxiliaryItemDetailID;
return myDALMethod.UpdateData("HuaYanZhongXin_FRM_HuaYanDengJi_Main", mySqlParameters);
}
数据库涉及到的储存过程:
-根据收费单ID查询辅助项目ID
IF @Type = 'FRM_HuaYanDengJi_Main_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(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 化验状态,
RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_AssayItemsTable.ChineseName) AS ChineseName,
RTRIM(BT_AssayItemsTable.AssayItemsPrice) AS AssayItemsPrice, PW_AuxiliaryItemDetailTable.OrdonnanceID, PW_ChargeBillTable.ChargeBillID
FROM BT_PatientTable INNER JOIN
PW_OrdonnanceTable ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID INNER JOIN
BT_AttributeDetailsTable INNER JOIN
PW_ItemCategoryTable INNER JOIN
PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID ON
BT_AttributeDetailsTable.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID INNER JOIN
BT_AssayInspectCombinationTable INNER JOIN
BT_AssayInspectCombinationDetailTable ON BT_AssayInspectCombinationTable.AssayInspectCombinationID = BT_AssayInspectCombinationDetailTable.AssayInspectCombinationID INNER JOIN
BT_AssayItemsTable ON BT_AssayInspectCombinationDetailTable.AssayItemsID = BT_AssayItemsTable.AssayItemsID ON
PW_AuxiliaryItemDetailTable.AllItemID = BT_AssayInspectCombinationTable.AssayInspectCombinationID ON
PW_OrdonnanceTable.OrdonnanceID = PW_AuxiliaryItemDetailTable.OrdonnanceID INNER JOIN
BT_StaffTable ON PW_OrdonnanceTable.TreatmentDoctor_StaffID = BT_StaffTable.StaffID INNER JOIN
PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID
WHERE 1 = 1 AND PW_ItemCategoryTable.ItemCategoryID = 5 and PW_ChargeBillTable.ChargeBillID = @ChargeBillID
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(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 化验状态,
RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(BT_AssayItemsTable.ChineseName) AS ChineseName,
RTRIM(BT_AssayItemsTable.AssayItemsPrice) AS AssayItemsPrice, PW_AuxiliaryItemDetailTable.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
PW_ItemCategoryTable INNER JOIN
PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable_1.AttributeDetailsID INNER JOIN
BT_AssayItemsTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_AssayItemsTable.AssayItemsID 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 = 2 and PW_ChargeBillTable.ChargeBillID = @ChargeBillID
END
BLL中对应的方法有:
//根据收费单ID查询辅助项目ID
[OperationContract]
public DataSet FRM_HuaYanDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(int intChargeBillID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType .Int )
};
mySqlParameters[0].Value = "FRM_HuaYanDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID ";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("HuaYanZhongXin_FRM_HuaYanDengJi_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
UIL中当提交的收费单为未登记的状态下系统会提示是否提交化验登记,效果图如下:
在提交化验登记的单击事件中写对应的代码有:
private void btn_PhysicalExaminationRegister_Click(object sender, EventArgs e)
{
if (intChargeBillID > 0)
{
if (intPhysicalExaminationRegisterID == 362)//判断化验状态ID是否为未登记对应的ID
{
if (MessageBox.Show("注意: 是否进行化验登记操作?请认真核实登记信息,一旦登记,不可以修改!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
//根据收费单ID查询体检项目中的辅助项目ID
DataTable dtAuxiliaryItemDetailID = myFRM_HuaYanDengJiClient.FRM_HuaYanDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(intChargeBillID).Tables[0];
int intAuxiliaryItemDetailID = 0; int intSuccess = 0;
for (int i = 0; i < dtAuxiliaryItemDetailID.Rows.Count; i++)//遍历获取体检辅助项目ID
{
intAuxiliaryItemDetailID = Convert.ToInt32(dtAuxiliaryItemDetailID.Rows[i]["AuxiliaryItemDetailID"]);
//修改体检登记状态
intSuccess += myFRM_HuaYanDengJiClient.FRM_HuaYanDengJi_btn_PhysicalExaminationRegister_Click(intAuxiliaryItemDetailID);
}
if (intSuccess == dtAuxiliaryItemDetailID.Rows.Count && intSuccess > 0)
{
MessageBox.Show("提交化验登记成功!");
FRM_HuaYanDengJi_Load(null, null);//刷新
}
else
{
MessageBox.Show("提交化验登记失败!");
}
}
}
else
{
MessageBox.Show("提交化验登记失败!该病人已经提交,请重新选择其他病人!");
}
}
else
{
MessageBox.Show("请选择化验登记的病人!");
}
}
该化验登记中带有不定条件进行查询病人信息,其中效果实现图如下:
在化验状态前面打上一个勾,选择化验状态,点击查询,得到的效果如下图所示:
保持需要选择化验状态,在病人名称前打上勾,输入病人姓名,点击查询,得到的效果如下图所示:
该过程涉及到的数据库的储存过程有:
--不定条件查找病人信息
IF @Type = 'FRM_HuaYanDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber'
BEGIN
EXEC('
WITH CET AS(
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.OrdonnanceID, PW_OrdonnanceTable.PatientID,
PW_OrdonnanceTable.TreatmentDoctor_StaffID, PW_ChargeBillTable.ChargeBillID
FROM BT_StaffTable INNER JOIN
BT_MemberCategoryTable INNER JOIN
BT_PatientTable INNER JOIN
BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 ON BT_PatientTable.AS_InsuredTypeID = BT_AttributeDetailsTable_2.AttributeDetailsID ON
BT_MemberCategoryTable.MemberCategoryID = BT_PatientTable.MemberTypeID 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 = 2 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.OrdonnanceID, PW_OrdonnanceTable.PatientID,
PW_OrdonnanceTable.TreatmentDoctor_StaffID, 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 = 5 AND PW_ChargeBillTable.WhetherOrdonnance = 1 )
SELECT StaffName, PatientCardNumber, PatientName, AttributeDetailsName ,AS_SexID,AS_PhysicalExaminationRegisterID, AttributeDetailsID,
化验状态, OrdonnanceNumber, OrdonnanceID, PatientID, TreatmentDoctor_StaffID, ChargeBillID
FROM CET
WHERE 1=1 ' + @DongTaiTiaoJian )
END
BLL中对应的方法有:
//不定条件查找病人信息
[OperationContract]
public DataSet FRM_HuaYanDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber(string strDongTaiTiaoJian)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@DongTaiTiaoJian",SqlDbType.Char )//根据选择的不同条件进行多条件查询病人信息
};
mySqlParameters[0].Value = "FRM_HuaYanDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber ";
mySqlParameters[1].Value = strDongTaiTiaoJian;
DataTable dt = myDALMethod.QueryDataTable("HuaYanZhongXin_FRM_HuaYanDengJi_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
UIL中在查询按钮中写如下的代码有:
private void btn_Inqure_Click(object sender, EventArgs e)
{
string strDongTaiTiaoJian = "";
if (chk_PatientName.Checked == true)//如果病人名称的打上勾,
{
strDongTaiTiaoJian += "AND CET.PatientName LIKE '%" + txt_PatientCardNumberOrName.Text.Trim() + "%'";//累加变量获取输入的病人姓名
}
if (chk_AssayState.Checked == true)//如果化验状态的前面打上勾
{
strDongTaiTiaoJian += "AND CET.AS_PhysicalExaminationRegisterID = " + cbo_AS_PhysicalExaminationRegisterID.SelectedValue.ToString();//累加变量获取选择的化验状态ID
}
dgv_AssayRegister.AutoGenerateColumns = false;//dgv列不可改变
//根据不同的条件获取查询的结果
dgv_AssayRegister.DataSource = myFRM_HuaYanDengJiClient.FRM_HuaYanDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber(strDongTaiTiaoJian).Tables[0];
}
这样就对病人完成了登记,并且将要为病人执行具体的化验。
该文章仅功能供用于学习,禁止用于商业用途,违者后果自负!