WCF医院管理系统技术解析(八)体检执行(一)

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)

 

联系手机

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

 

是否体检


表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)

   

项目单位


辅助项目明细表 (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


 该文章仅用于学习禁止用于商业用途,否则后果自负!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值