WCF医院管理系统技术解析(十二)化验登记

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)

 

员工照片

Email

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)

 

联系手机

Email

nchar (30)

 

电子邮件

Introducer

nchar (30)

 

介绍人员

PersonalTaboo

nchar (70)

 

个人忌讳

HighestReputation

nchar (70)

 

信誉上限

NowIntegral

nchar (50)

 

当前积分

Debt

decimal (18, 2)

 

尚欠金额

ExpenseSum

decimal (18, 2)

 

消费金额

LastTime

datetime

 

上次时间

LastDoctor_StaffID

int

    外键

上次医生

Prescriptions

nchar (50)

 

总处方数

PatientPhotos

char (200)

 

病人照片

WhetherEffective

bit

((1))

有效否

WhetherFromPhysicalExamination

Bit

 

是否体检

 

 

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];
              }

这样就对病人完成了登记,并且将要为病人执行具体的化验。



该文章仅功能供用于学习,禁止用于商业用途,违者后果自负!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值