实现护士工作站的注射室管理功能的代码(十六)
3.3护士工作站
3.3.1注射室管理
所谓的注射室是病人领取药水时护士进行药水的注射。或者是一些如洗胃泪道冲洗等只能时护士做的都要到注射室。这里是根据用药方式判断每一种药品是否经过注射室,如果是口服、擦拭的药品处方明细信息不会显示,处方明细只显示需要护士帮忙的药品。一开始窗体显示的全是紫色的已收款带执行的单据。当点击“查询全部注射单”按钮是左边处方单中青色的处方单是已执行注射的单据,而紫色显示的处方单是已收款带执行的单据。右边显示全部单据的明细信息。但当点击左边每一条注射单时,右边会对应显示该单据的明细信息。选择已收款带执行的单据点击“执行”按钮该单据的状态会变成已执行注射的单据颜色会有紫色变为青色,而如果选择已执行注射的单据点击“执行”按钮会弹出一个提示框提示“该单已执行,无需再次执行”。这里还可以根据处方单号、收款状态、发药状态等多条件查询处方单据。
注射室管理截图:
3.3.1(图1)
2、从界面上可以看到我们这里用到的控件有:
控件名称 | 说明 |
组装箱控件groupBox | 第一要设置每个控件的Text,第二设置控件Name;不同的是dataGridView右键进行编辑列。 |
标签控件lable | |
文本框控件textBox | |
下拉框控件comboBox | |
按钮控件button | |
复选框控件CheckBox | |
时间控件dateTimePicker | |
表格控件dataGridView |
查询功能实现:
第一步:数据库
1、 表与关系
3.3.1(图2)
表1:注射表(PW_InjectTable)
列名 | 数据类型 | 主键/外键 | 说明 |
InjectID | int - Identity | 主键 | 注射ID |
OrdonnanceID | int | 外键 | 处方单明细ID |
AS_InjectStatusID | int | 外键 | 注射状态ID |
InjectTime | datetime |
| 注射时间 |
WhetherEffective | bit |
| 有效否 |
表2:处方单表(PW_OrdonnanceTable)
列名 | 数据类型 | 主键/外键 | 说明 |
OrdonnanceID | int - Identity | 主键 | 处方单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 |
OutpatientMedicalRecordsTemplateID | int | 外键 | 门诊病历模板ID |
WhetherEffective | bit |
| 有效否 |
表3:处方单明细表(PW_OrdonnanceDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
OrdonnanceDetailID | int - Identity | 主键 | 处方单明细ID |
OrdonnanceID | int | 外键 | 处方单ID |
OrdonnanceDetailType | nchar (50) |
| 处方单明细类型 |
OrdonnanceDetailEncoding | nchar (30) |
| 处方单明细编码 |
DrugID | int | 外键 | 药品ID |
ItemID | int | 外键 | 项目ID |
TotalDrug | nchar (50) |
| 用药总量 |
EachAgent | nchar (50) |
| 每剂用量 |
AS_DrugUseMannerID | int | 外键 | 用药方式ID |
AS_DDDSID | int | 外键 | 用药频率ID |
Remarks | nchar (100) |
| 备注 |
WhetherEffective | bit |
| 有效否 |
表4:药品表(BT_OutpatientMedicalRecordsTemplateTable)
列名 | 数据类型 | 主键/外键 | 说明 |
OutpatientMedicalRecordsTemplateID | int - Identity | 主键 | 门诊病历模板ID |
TemplateNumber | nchar (50) |
| 模板编号 |
TemplateName | nchar (50) |
| 模板名称 |
WriteDoctor_StaffID | int | 外键 | 撰写医生_员工ID |
WriteTechnicalOfficesID | int | 外键 | 撰写科室_科室ID |
AS_TemplateTypeID | int | 外键 | 模板类型ID |
AS_InvokingJurisdictionID | int | 外键 | 调用权限ID |
WhetherOperation | bit |
| 是否手术 |
TemplateRemarks | nchar (200) |
| 模板备注 |
SuitCase | nchar (200) |
| 适合情况 |
PatientActionInChief | nchar (300) |
| 病人主诉 |
PatientMedicalHistory | nchar (300) |
| 病人病史 |
PhysicalExaminationCase | nchar (300) |
| 体检情况 |
InitialDiagnosis | nchar (300) |
| 初步诊断 |
DisposeIdea | nchar (300) |
| 处理意见 |
WhetherEffective | bit |
| 有效否 |
RegisterID | int | 外键 | 挂号ID |
表5:病人表(BT_PatientTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PatientID | int - Identity | 主键 | 病人ID |
PatientCardNumber | nchar (50) |
| 病人卡号 |
PatientName | nchar (30) |
| 病人名称 |
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 |
| 有效否 |
WhetherMember | bit |
| 会员否 |
表6:员工表(BT_StaffTable)
列名 | 数据类型 | 主键/外键 | 说明 |
StaffID | int - Identity | 主键 | 员工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 |
| 有效否 |
表7:属性明细表(BT_AttributeDetailsTable)
列名 | 数据类型 | 主键/外键 | 说明 |
AttributeDetailsID | int - Identity | 主键 | 属性明细ID |
AttributeDetailsID_F | int | 外键 | 属性明细ID_父 |
AttributeSetID | int | 外键 | 属性集合ID |
AttributeDetailsName | nchar (30) |
| 属性明细名称 |
Number | nchar (30) |
| 编号 |
RetrievalInCode | nchar (30) |
| 检索简码 |
BuiltInIdentifiers | bit |
| 内置标识 |
Remarks | nchar (100) |
| 备注 |
WhetherEffective | bit |
| 有效否 |
第二步:功能代码实现
查询注射单
(1)、存储过程代码:
--查询处方注射单
IF(@Type = 'FRM_ZhuSheDanBaoGao_Load_SelectOrdonnance')
BEGIN
SELECT
LTRIM(RTRIM(PW_OrdonnanceTable.OrdonnanceNumber)) AS OrdonnanceNumber,
PW_OrdonnanceTable.PatientID,
LTRIM(RTRIM(BT_PatientTable.PatientName)) AS PatientName,
LTRIM(RTRIM(BT_AttributeDetailsTable.AttributeDetailsName)) AS TakeMedicineStatus,
PW_OrdonnanceTable.AS_TakeMedicineStatusID,
PW_OrdonnanceTable.TakeMedicinePersonnel_StaffID,
LTRIM(RTRIM(BT_StaffTable.StaffName)) AS StaffName,
PW_OrdonnanceTable.TakeMedicineTime,
LTRIM(RTRIM(BT_PatientTable.Age)) AS Age,
BT_PatientTable.AS_SexID,
LTRIM(RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName)) AS Sex,
PW_InjectTable.InjectID, PW_InjectTable.InjectTime,
PW_InjectTable.AS_InjectStatusID,
PW_InjectTable.OrdonnanceID AS OrdonnanceID
FROM PW_InjectTable INNER JOIN
PW_OrdonnanceTable INNER JOIN
BT_AttributeDetailsTable ON PW_OrdonnanceTable.AS_TakeMedicineStatusID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
BT_StaffTable ON PW_OrdonnanceTable.TakeMedicinePersonnel_StaffID = BT_StaffTable.StaffID ON
PW_InjectTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID LEFT OUTER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN
BT_PatientTable ON BT_AttributeDetailsTable_1.AttributeDetailsID = BT_PatientTable.AS_SexID ON
PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID WHERE PW_OrdonnanceTable.AS_TakeMedicineStatusID=162 AND
PW_OrdonnanceTable.WhetherEffective=1 AND PW_OrdonnanceTable.OrdonnanceID NOT IN(SELECT PW_InjectTable .OrdonnanceID FROM PW_InjectTable)
END
--查询注射明细
BEGIN
SELECT LTRIM(RTRIM(PW_OrdonnanceDetailTable.OrdonnanceDetailID))AS OrdonnanceDetailID,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.OrdonnanceID))AS OrdonnanceID,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.OrdonnanceDetailType))AS OrdonnanceDetailType,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.OrdonnanceDetailEncoding))AS OrdonnanceDetailEncoding,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.DrugID))AS DrugID,
LTRIM(RTRIM(BT_DrugTable.DrugEncoding))AS DrugEncoding,
LTRIM(RTRIM(BT_DrugTable.DrugName))AS DrugName,
LTRIM(RTRIM(BT_DrugTable.DrugSpecification))AS DrugSpecification,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.TotalDrug))AS TotalDrug,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.EachAgent))AS EachAgent,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.AS_DrugUseMannerID))AS AS_DrugUseMannerID,
LTRIM(RTRIM(BT_AttributeDetailsTable.AttributeDetailsName)) AS DrugUseManner,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.AS_DDDSID))AS AS_DDDSID,
LTRIM(RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName)) AS DDDS,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.Remarks))AS Remarks
FROM PW_OrdonnanceDetailTable INNER JOIN
BT_DrugTable ON PW_OrdonnanceDetailTable.DrugID = BT_DrugTable.DrugID INNER JOIN
BT_AttributeDetailsTable ON PW_OrdonnanceDetailTable.AS_DrugUseMannerID =
BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON
PW_OrdonnanceDetailTable.AS_DDDSID = BT_AttributeDetailsTable_1.AttributeDetailsID
WHERE AS_DrugUseMannerID=163 or AS_DrugUseMannerID=165
or AS_DrugUseMannerID=166 or AS_DrugUseMannerID=167 or AS_DrugUseMannerID=168 or AS_DrugUseMannerID=169 or AS_DrugUseMannerID=170
or AS_DrugUseMannerID=171 or AS_DrugUseMannerID=172 or AS_DrugUseMannerID=173 or AS_DrugUseMannerID=174 or AS_DrugUseMannerID=175
or AS_DrugUseMannerID=176 or AS_DrugUseMannerID=177 or AS_DrugUseMannerID=179 or AS_DrugUseMannerID=180 or AS_DrugUseMannerID=181
or AS_DrugUseMannerID=182 or AS_DrugUseMannerID=183 or AS_DrugUseMannerID=184 or AS_DrugUseMannerID=185 or AS_DrugUseMannerID=186
or AS_DrugUseMannerID=187 or AS_DrugUseMannerID=188 or AS_DrugUseMannerID=189 or AS_DrugUseMannerID=190 or AS_DrugUseMannerID=192
or AS_DrugUseMannerID=194 or AS_DrugUseMannerID=196 or AS_DrugUseMannerID=197 or AS_DrugUseMannerID=198 or AS_DrugUseMannerID=200
or AS_DrugUseMannerID=201 or AS_DrugUseMannerID=202 AND PW_OrdonnanceDetailTable.OrdonnanceID =@OrdonnanceID
END
(2)、逻辑层代码:
[OperationContract]
#region 查询处方注射单
public DataSet FRM_ZhuSheDanBaoGao_Load_SelectOrdonnance()
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
};
SQLCMDpas[0].Value = "FRM_ZhuSheDanBaoGao_Load_SelectOrdonnance";
DataTable myDataTable = myDALMethod.QueryDataTable("HuShiGongZuoZhan_FRM_ZhuSheDanBaoGao", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
[OperationContract]
#region 查询注射明细
public DataSet dgvOrdonnance_SelectionChanged_SelectOrdonnanceDetai(int intOrdonnanceID)
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
new SqlParameter ("@OrdonnanceID",SqlDbType.Int),
};
SQLCMDpas[0].Value = "dgvOrdonnance_SelectionChanged_SelectOrdonnanceDetai";
SQLCMDpas[1].Value = intOrdonnanceID;
DataTable myDataTable = myDALMethod.QueryDataTable("HuShiGongZuoZhan_FRM_ZhuSheDanBaoGao", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
(3)、界面层代码:
#region Load事件
private void FRM_ZhuSheDanBaoGao_Load(object sender, EventArgs e)
{
dgvOrdonnance.DataSource = myFRM_ZhuSheDanBaoGaoClient.FRM_ZhuSheDanBaoGao_Load_SelectOrdonnance().Tables[0];//查询处方注射单
dgvOrdonnance.ClearSelection();//清空默认选行
}
#endregion
#region dgvOrdonnance_CellClick事件
private void dgvOrdonnance_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvOrdonnance.CurrentRow != null)//判断处方注射单的当前行不为空
{
intOrdonnanceID = Convert.ToInt32(dgvOrdonnance.CurrentRow.Cells["OrdonnanceID"].Value);//获取点击的行的OrdonnanceID
if (intOrdonnanceID != 0)//如果OrdonnanceID不为0
{
dgvOrdonnanceDetail.DataSource = myFRM_ZhuSheDanBaoGaoClient.dgvOrdonnance_SelectionChanged_SelectOrdonnanceDetai(intOrdonnanceID).Tables[0];//执行查询处方注射单明细
}
}
else
{
MessageBox.Show("请选择要查询的处方单!");
}
}
#endregion
执行注射
(1)、存储过程代码:
--执行注射
IF(@Type='btnExecute_Click_UpdateOrdonnance')
BEGIN
UPDATE PW_OrdonnanceTable
SET AS_ChargeStatusID=361
WHERE PW_OrdonnanceTable.OrdonnanceID =@OrdonnanceID
END
--修改注射状态
INSERT PW_InjectTable(OrdonnanceID, AS_InjectStatusID, InjectTime, WhetherEffective)
VALUES (@OrdonnanceID, 297, @InjectTime, 1) <span style="font-size:14px;">
</span>
(2)、逻辑层代码:
[OperationContract]
#region 执行注射、修改收费状态
public int btnExecute_Click_UpdateOrdonnance(int intOrdonnanceID,DateTime dtmInjectTime)
{
SqlParameter[] SQLCMDpas = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@OrdonnanceID", SqlDbType.Int),
new SqlParameter("@InjectTime", SqlDbType.DateTime),
};
SQLCMDpas[0].Value = "btnExecute_Click_UpdateOrdonnance";
SQLCMDpas[1].Value = intOrdonnanceID;
SQLCMDpas[2].Value = dtmInjectTime;
int myop = myDALMethod.UpdateData("HuShiGongZuoZhan_FRM_ZhuSheDanBaoGao", SQLCMDpas);
return myop;
}
#endregion
(3)、界面层代码:
#region DGV根据执行状态改变背景色
void SheZhiZhiXingAnNiu()
{
for (int i = 0; i < dgvOrdonnance.Rows.Count; i++) //循环处方注射单行数
{
string strTakeMedicineStatus = dgvOrdonnance.Rows[i].Cells["TakeMedicineStatus"].Value.ToString().Trim();//声明注射状态strTakeMedicineStatus字符串变量用来获取每行注射单的注射状态
if (strTakeMedicineStatus == "已注射")//注射状态为已发药
{
dgvOrdonnance.Rows[i].DefaultCellStyle.BackColor = Color.Thistle;//以执行的处方注射单颜色为青色
}
else
{
dgvOrdonnance.Rows[i].DefaultCellStyle.BackColor = Color.LightCyan;//已收款待执行的处方注射单颜色为紫色
}
}
}
#endregion
#region 执行事件
private void btnExecute_Click(object sender, EventArgs e)
{
if (dgvOrdonnance.CurrentRow != null)//判断点击的行不为空
{
intOrdonnanceID = Convert.ToInt32(dgvOrdonnance.CurrentRow.Cells["OrdonnanceID"].Value);//获取点击的行的OrdonnanceID
if (intOrdonnanceID != 0)//如果OrdonnanceID不为0
{
DateTime dtmInjectTime = DateTime.Now;
int count= myFRM_ZhuSheDanBaoGaoClient.btnExecute_Click_UpdateOrdonnance(intOrdonnanceID, dtmInjectTime);
if (count > 0)
{
MessageBox.Show("执行输液成功!");
}
dgvOrdonnance.DataSource = myFRM_ZhuSheDanBaoGaoClient.FRM_ZhuSheDanBaoGao_Load_SelectOrdonnance().Tables[0];//刷新注射单界面
SheZhiZhiXingAnNiu();//DGV根据执行状态改变背景色
}
else
{
MessageBox.Show("执行输液失败!");
}
}
else
{
MessageBox.Show("请选择要查询的处方注射单!");
}
}
#endregion
仅供学习,禁止用于商业用途。
不要询问世界需要什么。问问什么事情可以使你活跃,然后付诸实践。因为世界需要活跃的人。----霍华德·瑟曼