WCF醫院管理系統技術解析(六)體檢登記(五)對病人設置體檢項目

WCF醫院管理系統技術解析(六)體檢登記(五)對病人設置體檢項目

新增保存好體檢病人後,就需要爲體檢病人設置體檢項目,點擊體檢登記病人界面中的設置體檢項目按鈕如下圖


2.9.8(圖53)

然後點擊該界面中的保存按鈕保存,就可以對病人設置好體檢項目和體檢套餐了。

該過程中涉及到的數據庫表中的關係有:


2.9.8(圖54)

表1:病人表

      列名

數據類型

主鍵/外鍵

說明

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項目表(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)

   

項目單位


3:體檢套餐表 (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))

有效否


4:體檢套餐明細表(PhysicalExaminationSetMealDetailTable)

            列名

數據類型

主鍵/外鍵

說明

PhysicalExaminationSetMealDetailID

int

   主鍵

體檢套餐明細ID

PhysicalExaminationSetMealID

int

   外鍵

體檢套餐ID

ItemID

int

   外鍵

項目ID

WhetherEffective

bit

((1))

有效否


表5:體檢登記病人表(PW_PhysicalExaminationChargeBillPatientTable

            列名

數據類型

主鍵/外鍵

說明

PhysicalExaminationChargeBillPatientID

Int

    主鍵

  體檢登記病人ID

PatientID

Int

    外鍵

  病人ID

ChargeBillID

Int

    外鍵

  收費單ID

AuxiliaryItemDetailID

Int

    外鍵

   輔助項目明細ID

WhetherChargeBill

Bit

 

  是否收費


該界面用到的控件

                控件

          說明

 

 

從工具箱中找到對應的控件,可以設置控件的一些屬性和事件。如顯示的文本,命名是規範

 

文本框 (TextBox)

下拉框 (ComBobox)

數據表格  (DataGridView)

按鈕(Button)

標籤 (Label)


數據庫中涉及到的儲存過程有:(體檢項目和體檢套餐的數據表格的綁定)


--體檢項目
	IF(@Type='FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem')
	BEGIN
		SELECT     LTRIM(RTRIM(ItemID)) AS ItemID, 
		           LTRIM(RTRIM(ItemCoding)) AS ItemCoding, 
		           LTRIM(RTRIM(ItemName)) AS ItemName, 
		           LTRIM(RTRIM(ProjectPrice)) AS ProjectPrice
		FROM         BT_ItemTable				
	END
	--體檢套餐
IF(@Type='FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal')
	BEGIN
		SELECT      LTRIM(RTRIM(PhysicalExaminationSetMealID)) AS PhysicalExaminationSetMealID, 
				    LTRIM(RTRIM(SetMealNumber)) AS SetMealNumber, 
					LTRIM(RTRIM(PhysicalExaminationSetMealName)) AS PhysicalExaminationSetMealName, 
		        	LTRIM(RTRIM(CashPrice)) AS CashPrice
		FROM         BT_PhysicalExaminationSetMealTable
	END

BLL中的方法有:

[OperationContract]
         #region 查詢體檢項目
         public DataSet FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem()
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                               };
             SQLCMDpas[0].Value = "FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem";
             DataTable myDataTable = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             DataSet myDataSet = new DataSet();
             myDataSet.Tables.Add(myDataTable);
             return myDataSet;
         }
         #endregion
         [OperationContract]
         #region 查詢體檢套餐
         public DataSet FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal()
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                               };
             SQLCMDpas[0].Value = "FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal";
             DataTable myDataTable = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             DataSet myDataSet = new DataSet();
             myDataSet.Tables.Add(myDataTable);
             return myDataSet;
         }
         #endregion

UIL中代碼:解釋:綁定的體檢套餐和體檢項目供給醫生對病人設置體檢項目時選擇對應的體檢項目或者體檢套餐,

窗體中的Laod事件中寫如下代碼:

dgvPhysicalExaminationItem.DataSource = myFRM_TiJianDengJi_MainClient.FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem().Tables[0];//綁定體檢項目
            dgvPhysicalExaminationSetMeal.DataSource = myFRM_TiJianDengJi_MainClient.FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal().Tables[0];//綁定體檢套餐

在選擇體檢套餐或者體檢項目的時候,就當次體檢不能對同一個病人、設置相同的體檢項目或者體檢套餐,如果選擇了相同的體檢套餐或者體檢項目,系統會提示用戶。界面效果如圖所示:


2.9.8(圖54)

該過程不涉及數據庫和BLL中的方法,其中涉及到的UIL中的代碼有:

在選擇體檢項目的表格(dgv)上的體檢項目中的CellClick事件有:

#region  體檢項目中的CellClick事件
        private void dgvPhysicalExaminationItem_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //項目類別ItemCategoryID用來判斷表,值爲1時是體檢項目表、值爲2時是化驗項目表、值爲3時是治療項目表、值爲4時是體檢套餐表、值爲5時是化驗檢查組合表
            if (dgvAuxiliaryItemDetail.Rows.Count > 0)//判斷dgvAuxiliaryItemDetail是否有數據,有數據就判斷是否重複,
            {
                for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)
                {
                    int ItemID1 = Convert.ToInt32(dgvPhysicalExaminationItem.CurrentRow.Cells["體檢項目ID"].Value);//獲取體檢項目ID
                    int ItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//獲取病人已經添加好的體檢項目ID獲取體檢套餐ID
                    int ItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//獲取體檢類型ID
                    if (ItemCategoryID == 4)//體檢套餐
                    {
                        PhysicalExaminationSetMealID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//獲取已存在的體檢套餐ID
                        //根據循環得到的體檢套餐ID查詢體檢套餐明細
                        DataTable DTPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(PhysicalExaminationSetMealID).Tables[0];
                        for (int j = 0; j < DTPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍歷體檢套餐中的明細
                        {
                            int DetailItemID = Convert.ToInt32(DTPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//獲取體檢項目ID
                            if (DetailItemID == ItemID1)//如果體檢套餐中的明細中有項目ID與選擇中的體檢項目ID相同,就說明已經存在該體檢項目
                            {
                                MessageBox.Show("已添加了含有該項目的體檢套餐,不能再添加該項!");
                                return;//跳出循環
                            }
                        }
                    }
                    if (ItemID == ItemID1 && ItemCategoryID == 1)//項目類別ItemCategoryID用來判斷表,值爲1時是體檢項目。
                    {
                        PhysicalExaminationItem = false;//不添加項目
                        MessageBox.Show("該項目已存在!");
                        break;
                    }
                    else//否則體檢項目爲真,可以添加體檢項目
                    {
                        PhysicalExaminationItem = true;
                    }
                }
            }
            else//否則沒有數據,可以添加體檢項目 即PhysicalExaminationItem 爲 true
            {
                PhysicalExaminationItem = true;
            }
            if (PhysicalExaminationItem == true)//當開關爲真時,新增項目
            {
                dgvAuxiliaryItemDetail.Rows.Add();//在病人需要的體檢項目表格中添加條空白行
                int rowsCount = dgvAuxiliaryItemDetail.Rows.Count - 1;//獲取最後一行的數據
                //把體檢套餐中對應的值賦值給對應的列名
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ID"].Value = Convert.ToInt32(dgvPhysicalExaminationItem.CurrentRow.Cells["體檢項目ID"].Value);
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["編號"].Value = dgvPhysicalExaminationItem.CurrentRow.Cells["體檢項目編號"].Value.ToString();
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["名稱"].Value = dgvPhysicalExaminationItem.CurrentRow.Cells["體檢項目名稱"].Value.ToString();
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["價格"].Value = Convert.ToDecimal(dgvPhysicalExaminationItem.CurrentRow.Cells["體檢現金價格"].Value);
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ItemCategoryID"].Value = 1;
                //項目類別ItemCategoryID用來判斷表,值爲1時是體檢項目表、值爲2時是化驗項目表、值爲3時是治療項目表、值爲4時是體檢套餐表、值爲5時是化驗檢查組合表
           
             }
        }
        #endregion

在選擇體檢套餐的表格(dgv)上的體檢套餐中的CellClick事件有:

#region  體檢套餐中的CellClick事件
        private void dgvPhysicalExaminationSetMeal_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvAuxiliaryItemDetail.Rows.Count > 0)//判斷dgvAuxiliaryItemDetail是否有數據
            {
                int intCountPhysicalExaminationSetMeal = 0;//用於判斷選擇的體檢套餐與存在的體檢套餐的比較,> 0存在體檢套餐ID
                for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍歷存在的體檢項目
                {
                                  
                    int ItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//獲取體檢項目ID或者體檢套餐ID
                    int ItemID4 = Convert.ToInt32(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["體檢套餐ID"].Value);//獲取選擇的體檢套餐ID
                    int ItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//獲取體檢的類型
                    if (ItemCategoryID == 1)//爲類型爲體檢項目    體檢套餐與體檢項目之間的比較
                    {
                        //根據選擇的體檢套餐ID查詢出裏面存在的體檢項目
                        DataTable DtPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID4).Tables[0];
                        for (int j = 0; j < DtPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍歷體檢套餐
                        {
                            int DetailItemID = Convert.ToInt32(DtPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//獲取體檢套餐明細中的體檢項目ID
                            if (DetailItemID == ItemID)//如果選擇的體檢套餐明細中的體檢項目ID與存在的體檢項目ID相等,就說明已經存在該體檢項目
                            {
                                MessageBox.Show("已添加了該體檢套餐的明細單項,不能再添加該套餐!");
                                return;//跳出循環
                            }
                        }
                    }
                    if (ItemCategoryID == 4)//體檢套餐與體檢套餐之間的比較
                    {
                        //根據選擇的體檢套餐ID查詢體檢套餐明細中的體檢項目ID
                        DataTable DtPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID4).Tables[0];
                        for (int j = 0; j < DtPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍歷循環體檢套餐
                        {
                            int DetailItemID = Convert.ToInt32(DtPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//獲取體檢套餐中的體檢項目ID
                            //根據已經存在的體檢套餐ID查詢體檢套餐中的體檢項目ID
                            DataTable dtExitPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID).Tables[0];
                            for (int k = 0; k < dtExitPhysicalExaminationSetMealDetail.Rows.Count; k++)//遍歷存在的體檢套餐
                            {
                                if (Convert.ToInt32(dtExitPhysicalExaminationSetMealDetail.Rows[k]["ItemID"]) == DetailItemID)//如果存在的體檢套餐明細中的體檢項目ID與選擇的體檢套餐明細中的體檢項目ID相等
                                {
                                    intCountPhysicalExaminationSetMeal++;//變量累加 > 0就不添加體檢套餐
                                }
                            }
                        }
                    }

                    if (ItemID == ItemID4 && ItemCategoryID == 4)//判斷當新增的體檢套餐ID的項目ID已存在;項目類別ItemCategoryID用來判斷表,值爲4時是體檢套餐表。
                    {
                        PhysicalExaminationSetMeal = false;//開關爲假
                        MessageBox.Show("該項目已存在!");
                        break;//跳出循環
                    }
                    else
                    {
                        PhysicalExaminationSetMeal = true;   //開關爲真                      
                    }
                }
                if (intCountPhysicalExaminationSetMeal > 0)//選擇的體檢套餐與存在的體檢套餐中中有體檢項目重複
                {
                    MessageBox.Show("該套餐中已經有項目存在病人的體檢信息中了,請選擇其他體檢套餐或者體檢項目!");
                    return;//跳出循環
                }
            }
            else
            {
                PhysicalExaminationSetMeal = true; //開關爲真  
            }
            if (PhysicalExaminationSetMeal == true) //當開關爲真時,新增項目
            {
                dgvAuxiliaryItemDetail.Rows.Add();//在病人需要的體檢項目表格中添加條空白行
                int rowsCount = dgvAuxiliaryItemDetail.Rows.Count - 1;//獲取最後一行的數據
                //把體檢套餐中對應的值賦值給對應的列名
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ID"].Value = Convert.ToInt32(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["體檢套餐ID"].Value);
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["編號"].Value = dgvPhysicalExaminationSetMeal.CurrentRow.Cells["套餐編號"].Value.ToString();
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["名稱"].Value = dgvPhysicalExaminationSetMeal.CurrentRow.Cells["套餐名稱"].Value.ToString();
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["價格"].Value = Convert.ToDecimal(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["現金價格"].Value);
                dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ItemCategoryID"].Value = 4;
                //項目類別ItemCategoryID用來判斷表,值爲1時是體檢項目表、值爲2時是化驗項目表、值爲3時是治療項目表、值爲4時是體檢套餐表、值爲5時是化驗檢查組合表
            }
            
        }

        #endregion

對於已經添加好的體檢項目或者體檢套餐,還有移除該條體檢項目獲取體檢套餐的作用:效果如圖:


2.9.8(圖55)

該過程不涉及數據庫和BLL中的方法,其中涉及到的UIL中的代碼有:

#region  移除
        private void dgvAuxiliaryItemDetail_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                string strItemName = dgvAuxiliaryItemDetail.CurrentRow.Cells["名稱"].Value.ToString().Trim();
                DialogResult dr = MessageBox.Show("是否移除  " + strItemName + "的體檢項目?", "系統提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);//彈出確定對話框
                if (dr == DialogResult.OK)//如果點了確定按鈕
                {
                    dgvAuxiliaryItemDetail.Rows.RemoveAt(dgvAuxiliaryItemDetail.CurrentRow.Index);
                } 
            }
        }
        #endregion

對病人設置好體檢項目後,可以點擊保存,然後病人的體檢項目就設置好了。該過程涉及到的儲存過程有:

新增輔助項目表:病人體檢的項目ID保存進這張表中

--新增輔助項目
	IF(@Type ='btnSave_Click_InsertAuxiliaryItemDetail')
	BEGIN 
		INSERT    PW_AuxiliaryItemDetailTable(OrdonnanceID , AllItemID, ItemCategoryID, WhetherEffective,AS_PhysicalExaminationRegisterID,WhetherOrdonnance,RegisterTime )
		VALUES   (@OrdonnanceID, @AllItemID, @ItemCategoryID, 1,362,0,GETDATE())
		select @@IDENTITY
	END

新增體檢登記病人表:用於保存不經過掛號和處方的表,標識該病人不經過掛號和處方

--新增體檢登記病人表中的病人ID和輔助項目ID
	IF @Type = 'btnSave_Click_InsertPhysicalExaminationChargeBillPatient'
	BEGIN
		INSERT INTO PW_PhysicalExaminationChargeBillPatientTable
                      (PatientID,ChargeBillID, AuxiliaryItemDetailID,WhetherCharge )
		VALUES     (@PatientID,0, @AuxiliaryItemDetailID,0)
	END

BLL中涉及到的儲存過程有:

新增輔助項目表:

 [OperationContract]
         #region 新增輔助檢查項目信息
         public int btnSave_Click_InsertAuxiliaryItemDetail(int intOrdonnanceID, int intAllItemID, int intItemCategoryID)
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@OrdonnanceID",SqlDbType.Int),
                                           new  SqlParameter ("@AllItemID",SqlDbType.Int),
                                           new  SqlParameter ("@ItemCategoryID",SqlDbType.Int), 
                                       };
             SQLCMDpas[0].Value = "btnSave_Click_InsertAuxiliaryItemDetail";
             SQLCMDpas[1].Value = intOrdonnanceID;
             SQLCMDpas[2].Value = intAllItemID;
             SQLCMDpas[3].Value = intItemCategoryID;
            DataTable dt  = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
            int intCount = Convert.ToInt32(dt.Rows[0][0]);
            return intCount;
         }
         #endregion

新增體檢病人登記表:

 #region 新增體檢登記病人表中的病人ID和輔助項目ID
         [OperationContract]
         public int btnSave_Click_InsertPhysicalExaminationChargeBillPatient(int intPatientID, int intAuxiliaryItemDetailID)
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@PatientID",SqlDbType.Int),
                                           new  SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),
                                       };
             SQLCMDpas[0].Value = "btnSave_Click_InsertPhysicalExaminationChargeBillPatient";
             SQLCMDpas[1].Value = intPatientID;
             SQLCMDpas[2].Value = intAuxiliaryItemDetailID;
             int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             return count;
         }
         #endregion

UIL中涉及到的代碼有:

點擊保存按鈕中涉及的代碼:

#region 保存按鈕
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (dgvAuxiliaryItemDetail.Rows.Count > 0)//如果添加體檢中的數據不爲空
            {
                int intAuxiliaryItemDetailID = 0//用於新增輔助項目表;
                int intCount = 0;//用於新增體檢登記病人表
                if (intPatientID > 0)//如果病人不爲空
                {
                    for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍歷需要體檢的體檢項目
                    {
                        int intAllItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//獲取體檢項目ID或者體檢套餐ID
                        int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//獲取體檢類型ID
                        //添加輔助項目表
                        intAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID);
                        //添加體檢登記病人表(就不經過掛號和處方的表)
                        intCount += myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertPhysicalExaminationChargeBillPatient(intPatientID, intAuxiliaryItemDetailID);
                    }
                }
                if (intCount == dgvAuxiliaryItemDetail.Rows.Count)//如果intCount的變量等於dgvAuxiliaryItemDetail中行的集合
                {
                    MessageBox.Show("新增輔助檢查項目成功,新增的單是:" + strPatientCardNumber);//新增的病人卡號
                    this.Close ();
                }
            }
            else
            {
                MessageBox.Show("請爲該病人設置體檢項目!");
            } 
        }
        #endregion

於已經設置好體檢項目的病人,如果醫生認爲缺少體檢項目,那麼就可以對病人的體檢項目進行修改,點擊新增病人窗體中的,然後選擇需要修改的體檢病人,點擊體檢登記病人窗體中的會看到如下界面:


2.9.8(圖56)

選擇需要添加的體檢項目或者體檢套餐,也可以點擊刪除已經對病人保存好的體檢項目或者體檢套餐 。(刪除的思路解析: 刪除時,因爲對病人設置體檢項目或者套餐時是把體檢項目中的ID與體檢套餐的ID保存進行輔助項目明細表中,那麼刪除時就應該把輔助項目明細表刪除,但如果病人來醫院的流程只是體檢,不經過掛號和處方那麼他不經過處方流程的標識是在體檢登記病人表中有該病人的病人ID和輔助項目明細ID,那麼如果對病人刪除體檢項目時,也應該刪除該體檢登記病人表中的輔助項目明細ID

刪除的體檢項目或者體檢套餐的儲存過程爲:

--刪除輔助檢查項目
	IF @Type = 'dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID'
	BEGIN
		DELETE PW_AuxiliaryItemDetailTable 
		WHERE  PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
		
		DELETE PW_PhysicalExaminationChargeBillPatientTable 
		WHERE PW_PhysicalExaminationChargeBillPatientTable. AuxiliaryItemDetailID = @AuxiliaryItemDetailID
	END

BLL中的方法有:

 #region 刪除輔助檢查項目
         [OperationContract]
         public int dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(int intAuxiliaryItemDetailID)//獲取界面中的輔助項目明細ID
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),//根據傳入的輔助項目明細ID進行刪除
                                       };
             SQLCMDpas[0].Value = "dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID";
             SQLCMDpas[1].Value = intAuxiliaryItemDetailID;
             int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             return count;
         }
         #endregion

UIL中在病人體檢項目的表格中找到表格的dgvAuxiliaryItemDetail_CellClick事件,表格如下:


涉及到的代碼有:

private void dgvAuxiliaryItemDetail_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)//點擊移除
            {
                if (dgvAuxiliaryItemDetail.CurrentRow.Cells["AuxiliaryItemDetailID"].Value == null)//如果輔助項目明細ID爲空,即爲修改中剛添加的體檢項目(沒有保存)
                {
                    string strItemName = dgvAuxiliaryItemDetail.CurrentRow.Cells["名稱"].Value.ToString().Trim(); 
                    if (MessageBox.Show("是否移除  " + strItemName + "的體檢項目?", "系統提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
                    {
                        dgvAuxiliaryItemDetail.Rows.Remove(dgvAuxiliaryItemDetail.CurrentRow);//移除當前行
                    }
                }
                else
                {
                    //存在輔助項目明細ID就進行刪除操作
                    if (MessageBox.Show("是否刪除該條選擇?", "系統提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
                    {
                        int intAuxiliaryItemDetailID = Convert.ToInt32(dgvAuxiliaryItemDetail.CurrentRow.Cells["AuxiliaryItemDetailID"].Value);//獲取輔助項目明細ID
                        int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.CurrentRow.Cells["ItemCategoryID"].Value);//獲取體檢項目類型
                        if (intItemCategoryID == 4)//如果爲體檢套餐
                        { 
                            string strPhysicalExaminationSetMealName = "";//聲明一個變量
                            //根據體檢套餐獲取體檢套餐明細
                            DataTable dtPhysicalExaminationSetMeal = myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_SelectPhysicalExaminationSetMealOnAuxiliaryItemDetailID(intAuxiliaryItemDetailID).Tables[0];
                            string[] strPhysicalExaminationSetMeal = new string[dtPhysicalExaminationSetMeal.Rows.Count];//聲明一個數組,長度爲體檢套餐明細中的總體檢數
                            if (dtPhysicalExaminationSetMeal.Rows.Count > 0)//如果體檢套餐大於0
                            {
                                for (int i = 0; i < dtPhysicalExaminationSetMeal.Rows.Count; i++)//遍歷體檢套餐明細
                                {
                                    strPhysicalExaminationSetMeal[i] = dtPhysicalExaminationSetMeal.Rows[i]["ItemName"].ToString().Trim();//獲取體檢套餐明細中的體檢項目
                                    strPhysicalExaminationSetMealName +=  "  "+ strPhysicalExaminationSetMeal[i];//用變量累加體檢套餐中的所有體檢項目
                                }
                                if (strPhysicalExaminationSetMealName != "")//如果變量不爲空
                                {
                                    //提示當前選擇要進行刪除的體檢套餐中的體檢項目
                                    if (MessageBox.Show("你當前選擇的是體檢套餐,內有:" + strPhysicalExaminationSetMealName + "的體檢項目,是否進行刪除操作?", "系統提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                                    {
                                        //進行刪除輔助項目ID(裏含體檢套餐)
                                        if (myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(intAuxiliaryItemDetailID) > 0)
                                        {
                                            MessageBox.Show("刪除體檢項目成功!");
                                            //刪除體檢套餐後,對應的體檢項目在表格中移除
                                            for (int k = dgvAuxiliaryItemDetail.Rows.Count - 1; k > 0; k--)
                                            {
                                                int intAuxiliaryItemDetailID1 = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[k].Cells["AuxiliaryItemDetailID"].Value);//獲取表格中的輔助項目ID
                                                if (intAuxiliaryItemDetailID1 == intAuxiliaryItemDetailID)//表格中的輔助項目ID與刪除的體檢項目ID相等
                                                {
                                                    dgvAuxiliaryItemDetail.Rows.RemoveAt(k);//進行移除
                                                }
                                            }
                                        }
                                    }
                                    return;//跳出該方法
                                }
                            }

                        }
                        //選擇的是體檢項目,直接進行體檢項目的刪除
                        if (myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(intAuxiliaryItemDetailID) > 0)
                        {
                            MessageBox.Show("刪除體檢項目成功!");
                            dgvAuxiliaryItemDetail.Rows.Remove(dgvAuxiliaryItemDetail.CurrentRow);
                            //刪除後,直接移除當前行的數據
                        }
                        else
                        {
                            MessageBox.Show("刪除體檢項目失敗!");
                        }
                    }
                 }
            }
        }

修改完成了病人的體檢項目或者體檢套餐,必須要點擊保存按鈕進行修改保存的操作:

涉及到的儲存過程有:

-修改輔助項目
	IF(@Type ='btnSave_Click_UpdateAuxiliaryItemDetail')
	BEGIN 
		UPDATE    PW_AuxiliaryItemDetailTable
		SET              OrdonnanceID =@OrdonnanceID, AllItemID =@AllItemID, ItemCategoryID =@ItemCategoryID
		WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
	END

BLL中的方法有:

region 修改輔助檢查項目信息
         [OperationContract]
         public int btnSave_Click_UpdateAuxiliaryItemDetail(int intPatientID, int intAllItemID, int intItemCategoryID, int intAuxiliaryItemDetailID1)//根據界面中傳入的病人ID,體檢項目(套餐)ID,體檢類型ID,輔助項目明細ID
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@PatientID",SqlDbType.Int),//把病人ID傳入數據庫中並保存下來
                                           new  SqlParameter ("@AllItemID",SqlDbType.Int),//把體檢項目(或套餐)ID傳入數據庫中並保存下來
                                           new  SqlParameter ("@ItemCategoryID",SqlDbType.Int), //把體檢類型ID傳入數據庫中並保存下來
                                           new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType .Int ),//根據某具體的輔助項目明細ID進行修改
                                       };
             SQLCMDpas[0].Value = "btnSave_Click_UpdateAuxiliaryItemDetail";
             SQLCMDpas[1].Value = intPatientID;
             SQLCMDpas[2].Value = intAllItemID;
             SQLCMDpas[3].Value = intItemCategoryID;
             SQLCMDpas[4].Value = intAuxiliaryItemDetailID1;
             int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             return count;
         }
         #endregion

UIL中的代碼有:

#region 保存按鈕
        private void btnSave_Click(object sender, EventArgs e)
        {
            int intAuxiliaryItemDetailID = 0; //變量獲取需要修改的輔助明細項目ID
            int intCountUpdate = 0;//修改成功用到的變量
            int intCountInsert = 0;//新增成功用到的變量
            if (intPatientID > 0)//如果病人ID不爲空
            {
                for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍歷病人的體檢項目明細表
                {
                    int intAllItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//獲取體檢項目ID獲取體檢套餐ID
                    int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//獲取體檢類型ID
                    if (dgvAuxiliaryItemDetail.Rows[i].Cells["AuxiliaryItemDetailID"].Value == null)//如果表格中的輔助項目明細ID爲空,說明該條數據爲剛剛添加的數據
                    {
                        //根據病人ID和體檢項目(套餐)ID,體檢類型ID進行新增輔助項目明細表
                          intAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID);
                           //添加體檢登記病人表(就不經過掛號和處方的表)把剛剛添加的病人ID和輔助項目明細ID保存進數據庫中
                          intCountInsert += myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertPhysicalExaminationChargeBillPatient(intPatientID, intAuxiliaryItemDetailID);
                     }
                    else 
                    {
                        //獲取輔助項目明細ID
                       int intAuxiliaryItemDetailID1 = Convert .ToInt32 (dgvAuxiliaryItemDetail .Rows[i].Cells["AuxiliaryItemDetailID"].Value );
                        //根據輔助馪明細ID進行修改輔助項目明細表
                       intCountUpdate += myFRM_TiJianDengJi_MainClient.btnSave_Click_UpdateAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID, intAuxiliaryItemDetailID1);
                    }
                }
                //如果存在新增變量>0 或者修改變量>0   或者新增和修改的變量都大於零,說明修改成功!
                if (intCountInsert > 0 || intCountUpdate > 0 || intCountUpdate > 0 && intCountInsert > 0)
                {
                    MessageBox.Show ("修改該病人的體檢項目成功!");
                    this.Dispose ();//釋放資源
                    this.Close();//關閉窗體
                }
                else 
                {
                    MessageBox.Show ("修改改病人的體檢項目失敗!");
                }

            }
            else
            {
                MessageBox.Show("請選擇需要修改的體檢病人!");
            }  
        }
        #endregion

這樣對病人的設置體檢項目就已經完成了,設置好了病人的體檢項目後病人就必須到前臺進行支付體檢的相關費用,然後進行體檢。。。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章