WCF医院管理系统技术解析(七)体检登记(六)前台收费

WCF医院管理系统技术解析(七)体检登记(六)前台收费

设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的    前台收费中的界面效果如图所示:


2.9.8(图57)

选择病人需要收费的体检单:即为什么界面不是体检单号呢?因为:收费的病人有两种,其一就是经过处方开单收费的,其二就是病人到医院只是进行体检操作,该过程不涉及处方单,但是它也有存在的收费项目,所以下拉框中内容是体检病人进行的体检收费的病人卡号。选择了病人卡号后,你会看到病人收费的详细信息:如下图所示:


2.9.8(图58)

数据库中表与关系有:


2.9.8(图59)


2.9.8(图60)

界面上用到的控件有:

                控件

          说明

 

 

从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范

 

文本框 (TextBox)

下拉框 (ComBobox)

数据表格  (DataGridView)

按钮(Button)

标签 (Label)


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)

   

项目单位


8:科室表:(TechnicalOfficesTable)

            列名

数据类型

主键/外键

说明

TechnicalOfficesID

int

   主键

科室ID

DepartmentID

int

   外键

部门ID

TechnicalOfficesNumber

nchar (20)

    

科室编号

TechnicalOfficesName

nchar (20)

     

科室名称

RegisterSum

decimal (18, 2)

     

挂号金额

WhetherAllowRegister

bit

    

允许挂号否

AlphabeticBrevityCode

nchar (20)

   

拼音简码

WubiInCode

nchar (20)

   

五笔简码

TechnicalOfficesLocation

nchar (100)

   

科室位置

Remarks

nchar (200)

     

备注

WhetherEffective

bit

((1))

有效否


辅助项目明细表 (PW_AuxiliaryItemDetailTable) 

            列名

数据类型

主键/外键

说明

AuxiliaryItemDetailID

int

      主键

辅助明细项目ID

RegisterID

int

      外键

挂号ID

AllItemID

int

      外键

总项目ID

ItemCategoryID

int

      外键

项目类别ID

WhetherEffective

bit

      ((1))

是否有效

AS_PhysicalExaminationRegisterID

int

      外键

体检登记ID

OrdonnanceID

int

      外键

处方单ID


该过程涉及到的储存过程有:

-单击某病人,获取该病人下的体检项目(没有收费)
	IF @Type = 'FRM_QianTaoShouFei_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(BT_ItemTable.ItemName) AS ItemName, 
                      RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, BT_ItemTable.ItemUnit, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, 
                      RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(1) AS TotalDrug, RTRIM(0) AS MedicarePrice, 
                      BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName
		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
                      BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID   
         WHERE     1 = 1 AND PW_ItemCategoryTable.ItemCategoryID = 4 AND BT_PatientTable.PatientID = @PatientID AND PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 0
	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, BT_ItemTable.ItemUnit, RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, 
                      RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, RTRIM(1) AS TotalDrug, RTRIM(0) AS MedicarePrice, 
                      BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName
		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
                      BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID 
        WHERE   1=1 AND  PW_ItemCategoryTable.ItemCategoryID = 1 AND  BT_PatientTable.PatientID = @PatientID and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 0
	END

BLL中的方法有:

#region  单击某病人,获取该病人下的体检项目(没有收费)
         [OperationContract]
         public DataSet FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID(int intPatientID)//获取界面传入的病人ID
         {
             SqlParameter[] mySqlParameters = {
                                               new SqlParameter("@Type",SqlDbType .Char ),
                                               new SqlParameter ("@PatientID",SqlDbType .Int ),//根据病人ID查找没有收费的体检项目
                                               };
             mySqlParameters[0].Value = "FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID ";
             mySqlParameters[1].Value = intPatientID;
             DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
             DataSet ds = new DataSet();
             ds.Tables.Add(dt);
             return ds;
         }
        #endregion

UIL中的代码有:

在窗体的加载(Load)事件中的代码有:

//调用公共方法绑定病人卡号
            DataTable dtNumber = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectPatientCardNumberOnOrdonnanceNumber().Tables[0];
            cboOrdonnanceNumber = PublicStaticMothd.SetZhiXiaLaKuang(cboOrdonnanceNumber, dtNumber, "PatientID", "PatientCardNumber");
            intPatientID = Convert.ToInt32(cboOrdonnanceNumber.SelectedValue);

公共方法:

#region 设置下拉框
        //定义一个公共方法,分别以下拉框,数据表格,字符串,字符串为参数
        public static ComboBox SetZhiXiaLaKuang(ComboBox cbo下拉框, System.Data.DataTable dt数据表, string str列ID, string str列名)
        {
            try
            {
                cbo下拉框.DataSource = dt数据表;//下拉框的数据源为传入的数据表
                cbo下拉框.DisplayMember = str列名;//绑定显示的成员
                cbo下拉框.ValueMember = str列ID;//绑定列名中的ID
                return cbo下拉框;
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
                return null;
            }
        }
        #endregion

在下拉框中查找的事件,并且在里面写下如下代码:

 #region 根据病人卡号查询处方信息
        private void cboOrdonnanceNumber_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (intPatientID  > 0)//获取选择的收费病人ID
            {
                //根据病人ID查找病人的基本信息,并把基本信息绑定到相应的控件中
                DataTable dtOrdonnance = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectPatientChargeBillItems(Convert.ToInt32(cboOrdonnanceNumber.SelectedValue)).Tables[0];
                txtPatientCardNumber.Text = dtOrdonnance.Rows[0]["PatientCardNumber"].ToString().Trim();
                txtPatientName.Text = dtOrdonnance.Rows[0]["PatientName"].ToString().Trim();
                txtAge.Text = dtOrdonnance.Rows[0]["Age"].ToString().Trim();
                txtPrescriptionTime.Text = dtOrdonnance.Rows[0]["RegisterTime"].ToString().Trim();
               
                txtPatientCategory.Text = dtOrdonnance.Rows[0]["CategoryName"].ToString().Trim();
                txtInsuredType.Text = dtOrdonnance.Rows[0]["医保类型"].ToString().Trim();                
                txtSex.Text = dtOrdonnance.Rows[0]["sex"].ToString().Trim();
               
                intPatientID = Convert.ToInt32(dtOrdonnance.Rows[0]["PatientID"]);
                cboMemberType.SelectedValue = Convert.ToInt32(dtOrdonnance.Rows[0]["MemberTypeID"]);//获取会员类别ID 
                string strExistNowIntegral = dtOrdonnance.Rows[0]["NowIntegral"].ToString().Trim();//获取当前积分
                if (strExistNowIntegral == "")//如果积分为空,说明该病人不是会员,不存在积分,否则获取积分
                { 
                    lblALL.Text = "不存在积分";
                }
                else
                {
                    lblALL.Text = strExistNowIntegral;
                }
                dgvOrdonnanceDetail.AutoGenerateColumns = false;//设置dgv的列不可改边
                //根据病人ID查找病人的收费项目
                DataTable dtOrdonnanceDetail = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID(Convert.ToInt32(cboOrdonnanceNumber.SelectedValue)).Tables[0];
                dgvOrdonnanceDetail.DataSource = dtOrdonnanceDetail;//把查询到的信息绑定到数据表格中           
                //dgvOrdonnanceDetail.ClearSelection();
                for (int i = 0; i < dgvOrdonnanceDetail.Rows.Count; i++)//遍历获取收费的详细信息
                {
                    //如果收费表格中的用药总量(TotalDrug)和 价格(AllIPrice)都不为空
                    if (dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value.ToString() != "" && dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value.ToString() != "")
                    {
                        //那么金额的值为 = 用药总量* 价格
                        dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value) *
                            Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value);
                    }
                    else//否则金额的值为价格 或者 为“0”;
                    {
                        if (dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value != null)
                        {
                            dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = Convert.ToInt32(1) * Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["AllIPrice"].Value);
                        }
                        else
                        {
                            dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value = "0";
                        }
                    }
                }
                //查询全部的会员类别
                DataTable dtMemberType = myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_SelectMemberCategory().Tables[0];
                int MemberType = Convert.ToInt32(cboMemberType.SelectedValue);//获取会员类别ID
                for (int i = 0; i < dtMemberType.Rows.Count; i++)//循环会员类别
                {
                    if (MemberType == Convert.ToInt32(dtMemberType.Rows[i]["MemberCategoryID"]))//如果获取的会员类别ID与遍历的会员类别ID 相同,获取该会员类别折扣
                    {
                        string strReMonveXiaoShu = dtMemberType.Rows[i]["MemberCategoryDiscount"].ToString().Trim();//获取会员类别折扣
                        string[] strShuZu = strReMonveXiaoShu.Split('.');//根据‘.’划分会员类别折扣
                        txtDiscount.Text = strShuZu[0];//获取会员类别折扣中的整数
                    }
                }  
            }

        }
        #endregion

根据选择的病人进行查找会员类别和会员折扣

系统会支持根据查找出来的会员类别折扣进行自动核算病人的应付金额如下图:


那么核算的原则有:


该过程第一步点击 第二步:在属性中找到txtDiscount_TextChanged事件在里面写如下的代码:

#region txtDiscount_TextChanged事件
        private void txtDiscount_TextChanged(object sender, EventArgs e)
        {
            decimal AllSum = 0;//获取最终金额
            decimal AllSum1 = 0;//获取金额
            decimal AllSum2 = 0;
            decimal decMedicarePayMoney = 0;//医保金额
            for (int i = 0; i < dgvOrdonnanceDetail.Rows.Count; i++)//遍历获取收费的详细信息
            {
                //如果收费表格中的用药总量(TotalDrug)和 价格(AllIPrice)都不为空 否则累加金额
                if (dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value.ToString() != "" && dgvOrdonnanceDetail.Rows[i].Cells["MedicarePrice"].Value.ToString() != "")
                {
                    //
                    AllSum1 += Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value);//累加金额的值
                    //医保金额 = 用药总量 * 医保金额
                    decMedicarePayMoney += Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["TotalDrug"].Value) *
                        Convert.ToDecimal(dgvOrdonnanceDetail.Rows[i].Cells["MedicarePrice"].Value);
                }
                else
                {
                    AllSum2 += Convert.ToInt32(dgvOrdonnanceDetail.Rows[i].Cells["PRICE"].Value);     //累加金额               
                }
                AllSum = AllSum1 + AllSum2;//获取最终金额
            }
            txtReceive.Text = (Convert.ToDecimal(txtMoney.Text) + Convert.ToDecimal(txtMedicare.Text) + Convert.ToDecimal(txtCarComeDownWith.Text)).ToString();//收到金额
            lblNow.Text = Convert.ToDecimal(AllSum * Convert.ToDecimal(0.01)).ToString().Trim(); //本单积分 = 最终金额 * 0.01    
            #region 价格处理
            int Discount = 0;
            try
            {
                Discount = Convert.ToInt32(txtDiscount.Text);//获取折扣(整数)
                decimal decDiscount = Convert.ToDecimal(Discount) * Convert.ToDecimal(0.01);//获取折扣(小数)
                txtLastDiscountPay.Text = AllSum.ToString().Trim();//折前应收 
                txtNextDiscountPay.Text = (AllSum * decDiscount).ToString();//折后应收           
                txtMedicarePayMoney.Text = decMedicarePayMoney.ToString();//医保金额
                txtMedicare.Text = decMedicarePayMoney.ToString();//医保
                txtPrivilege.Text = (AllSum - (AllSum * decDiscount)).ToString();//优惠
                txtMustCharge.Text = (AllSum * decDiscount).ToString();  //应付金额

            }
            catch (Exception)
            {
            }
            #endregion
        }
        #endregion

选择好了要收费的病人,输入现金价格 后点击收费对其进行收费操作

收费中涉及到的储存过程有:新增的收费单中的储存过程中的意思是:查询刚才新增的收费单ID ,用于修改体检登记病人表

--新增收费单
	IF(@Type ='btnCharge_Click_InsertChargeBillTable')
	BEGIN
		INSERT     PW_ChargeBillTable(ReceiptNumber, BillNumber, AS_ChargeStatusID, OrdonnanceID, Discount, CashPaySum, 
		    MedicarePaySum, BlockPaySum, TallyPaySum, Operator_StaffID, OperateTime,WhetherCancel, WhetherEffective,WhetherOrdonnance) 			  
		VALUES         (@ReceiptNumber, @BillNumber, 160, @OrdonnanceID, @Discount, @CashPaySum, 
		     @MedicarePaySum, @BlockPaySum, @TallyPaySum, @Operator_StaffID, @OperateTime,   0, 0,0)
		    --修改收据单号
	    UPDATE		PW_TheLargestNumberStatisticalTable
	    SET   	ReceiptMaximumNumber = ReceiptMaximumNumber + 2
	   
		SELECT @@IDENTITY 
	END


--修改体检登记病人表
	IF @Type = 'FRM_QianTaoShouFei_btnCharge_Click_Update'
	BEGIN
		UPDATE    PW_PhysicalExaminationChargeBillPatientTable
		SET              PatientID =@PatientID, ChargeBillID =@ChargeBillID, AuxiliaryItemDetailID =@AuxiliaryItemDetailID, WhetherCharge =1
		where     PhysicalExaminationChargeBillPatientID = @PhysicalExaminationChargeBillPatientID
	END

BLL中涉及到的方法有:

#region 收费
          [OperationContract]
         public int btnCharge_Click_InsertChargeBillTable(string strReceiptNumber, string strBillNumber, int intOrdonnanceID, decimal decDiscount, decimal decCashPaySum,
             decimal decMedicarePaySum, decimal decBlockPaySum, decimal decTallyPaySum, int intOperator_StaffID, DateTime dtmOperateTime)//获取界面中传入的各个参数的值
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@ReceiptNumber",SqlDbType.Char ),//获取界面中收费单据数
                                           new  SqlParameter ("@BillNumber",SqlDbType.Char),//获取界面中收费发票号
                                           new  SqlParameter ("@OrdonnanceID",SqlDbType.Int),//获取界面中的病人ID
                                           new  SqlParameter ("@Discount",SqlDbType.Decimal ),   //获取界面中收费时对病人的折扣
                                           new  SqlParameter ("@CashPaySum",SqlDbType.Decimal),//获取界面中现金支付
                                           new  SqlParameter ("@MedicarePaySum",SqlDbType.Decimal),//获取界面中医保金额
                                           new  SqlParameter ("@BlockPaySum",SqlDbType.Decimal), //获取界面中卡付金额
                                           new  SqlParameter ("@TallyPaySum",SqlDbType.Decimal),  //获取界面中记账金额
                                           new  SqlParameter ("@Operator_StaffID",SqlDbType.Int ),//获取界面中操作人员ID
                                           new  SqlParameter ("@OperateTime",SqlDbType.DateTime),//获取界面中当前时间
                                       };
             SQLCMDpas[0].Value = "btnCharge_Click_InsertChargeBillTable";
             SQLCMDpas[1].Value = strReceiptNumber;
             SQLCMDpas[2].Value = strBillNumber;
             SQLCMDpas[3].Value = intOrdonnanceID;
             SQLCMDpas[4].Value = decDiscount;
             SQLCMDpas[5].Value = decCashPaySum;
             SQLCMDpas[6].Value = decMedicarePaySum;
             SQLCMDpas[7].Value = decBlockPaySum;
             SQLCMDpas[8].Value = decTallyPaySum;
             SQLCMDpas[9].Value = intOperator_StaffID;
             SQLCMDpas[10].Value = dtmOperateTime;

             DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             int Count = Convert.ToInt32(dt.Rows[0][0]);//获取刚才新增的收费单ID
             return Count;//返回新增的收费单ID
         }
         #endregion


  #region 修改体检登记病人表
         [OperationContract]获取界面传入的病人ID、收费单ID 、辅助项目明细ID、体检登记病人ID 
         public int FRM_QianTaoShouFei_btnCharge_Click_Update(int intPatientID, int intChargeBillID, int intAuxiliaryItemDetailID, int intPhysicalExaminationChargeBillPatientID)
         {
             SqlParameter[] SQLCMDpas ={
                                           new  SqlParameter ("@Type",SqlDbType.Char),
                                           new  SqlParameter ("@PatientID",SqlDbType.Int),//把病人ID传入数据库中并保存下来
                                           new  SqlParameter ("@ChargeBillID",SqlDbType.Int),//把收费单ID传入数据库中并保存下来
                                           new  SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),//把辅助项目明细ID传入数据库中并保存下来
                                           new  SqlParameter ("@PhysicalExaminationChargeBillPatientID",SqlDbType.Int), //把体检登记病人ID传入数据库中并保存下来
                                       };
             SQLCMDpas[0].Value = "FRM_QianTaoShouFei_btnCharge_Click_Update";
             SQLCMDpas[1].Value = intPatientID;
             SQLCMDpas[2].Value = intChargeBillID;
             SQLCMDpas[3].Value = intAuxiliaryItemDetailID;
             SQLCMDpas[4].Value = intPhysicalExaminationChargeBillPatientID;
             int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
             return count;
         }
         #endregion

UIL中点击收费按钮在其中写的代码有:

 #region 收费
        private void btnCharge_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("确认是否进行收费操作?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    if (Convert .ToDecimal ( txtReceive.Text) > 0)//如果收到的费用大于零,就进行收费,否则就提示收费
                    {
                        string strReceiptNumber = txtReceiptNumber.Text;//获取收费单据数
                        string strBillNumber = txtInvoiceNumber.Text;//获取收费发票号
                        decimal decDiscount = Convert.ToDecimal(txtDiscount.Text);//获取收费时对病人的折扣
                        decimal decCashPaySum = Convert.ToDecimal(txtReceive.Text);//获取现金支付
                        decimal decMedicarePaySum = Convert.ToDecimal(txtMedicare.Text);//获取医保金额
                        decimal decBlockPaySum = Convert.ToDecimal(txtCarComeDownWith.Text);//卡付金额
                        decimal decTallyPaySum = Convert.ToDecimal(txtTally.Text);//获取记账金额
                        int intOperator_StaffID = Convert.ToInt32(cboStaff.SelectedValue);//获取操作人员ID
                        DateTime dtmOperateTime = DateTime.Now;//获取当前时间
                        //进行收费操作各个控件对应地插入收费单表中的字段
                        int ChargeBillID = myFRM_TiJianDengJi_MainClient.btnCharge_Click_InsertChargeBillTable(strReceiptNumber, strBillNumber, intPatientID, decDiscount,
                              decCashPaySum, decMedicarePaySum, decBlockPaySum, decTallyPaySum, intOperator_StaffID, dtmOperateTime);
                        if (ChargeBillID > 0)//刚刚新增的收费单ID获取出来
                        {
                            int intSueessCount = 0;
                            //根据收费病人ID查找病人登记表中的体检登记病人ID
                            DataTable dtPhysicalExaminationChargeBillPatientID = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_btnCharge_Click_SelectPhysicalExaminationChargeBillPatientID(intPatientID).Tables[0];
                            if (dtPhysicalExaminationChargeBillPatientID.Rows.Count > 0)//如果查找的体检登记病人ID的集合  > 0
                            {
                                for (int i = 0; i < dtPhysicalExaminationChargeBillPatientID.Rows.Count; i++)//遍历循环体检登记病人信息
                                {
                                    //获取体检登记病人ID
                                    int intPhysicalExaminationChargeBillPatientID = Convert.ToInt32(dtPhysicalExaminationChargeBillPatientID.Rows[i]["PhysicalExaminationChargeBillPatientID"]);
                                    int intAuxiliaryItemDetailID = Convert.ToInt32(dtPhysicalExaminationChargeBillPatientID.Rows[i]["AuxiliaryItemDetailID"]);//获取辅助项目明细ID
                                    //根据病人ID 、收费单ID、 辅助项目明细ID 、体检登记病人ID修改病人信息 
                                    intSueessCount += myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_btnCharge_Click_Update(intPatientID, ChargeBillID, intAuxiliaryItemDetailID, intPhysicalExaminationChargeBillPatientID);
                                }
                            }
                            if (intSueessCount == dtPhysicalExaminationChargeBillPatientID.Rows.Count && intSueessCount > 0)//如果变量修改成功,就累加变量
                            {
                                if (lblALL.Text.Trim() != "不存在积分")//如果存在积分,即是会员病人
                                {
                                    //积分累加
                                    myFRM_TiJianDengJi_MainClient.FRM_ShouFeiLuRu_Load_UpdateNowIntegralOnPatientID(intPatientID, Convert.ToDecimal(lblNow.Text));
                                }
                                MessageBox.Show("成功收费!" + "收据号:" + txtReceiptNumber.Text + "\n" + "发票号:" + txtInvoiceNumber);
                                this.Dispose();//释放资源
                                this.Close();//关闭窗体
                            }
                        }
                        else
                        {
                            MessageBox.Show("收费失败!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("你还没有输入收到的金额,请输入!");
                    }
                }  
            }
            catch
            {
            }
        }
        #endregion

这样对病人的收费就已经完成了,收费完成后在病人在体检登记主界面上就有了病人体检的信息,如图:



其中的刚才已经收费的病人信息如下:

 

该过程涉及到的储存过程有:

	--查询体检登记页面中的病人登记信息
	IF @Type = 'FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu'
	BEGIN  
			SELECT    RTRIM( BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber , RTRIM(BT_PatientTable.PatientName) AS PatientName, 
					  RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID,RTRIM(PW_AuxiliaryItemDetailTable.
					  AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsID) AS AttributeDetailsID, 
					  RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 体检登记, RTRIM('无') AS OrdonnanceNumber,RTRIM( BT_PatientTable.PatientID) AS PatientID, 
					  RTRIM(PW_ChargeBillTable.Operator_StaffID) AS TreatmentDoctor_StaffID, RTRIM(0) AS OrdonnanceID, PW_ChargeBillTable.OperateTime AS PrescriptionDate,
					  RTRIM(PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID) AS 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
			WHERE     (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 1) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) OR
                      (PW_ItemCategoryTable.ItemCategoryID = 4) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0)   
        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 体检登记,RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber,
					  RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, 
					  RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID,PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS 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.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 体检登记, RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber, 
                       RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, 
                      RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID, PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS 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 = 4 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 order by 体检登记                       
                             
	END

BLL中的方法有:

#region  体检病人登记信息表格绑定
        [OperationContract]
        public DataSet FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu()
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                          
                                              };
            mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu ";
            DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }
        #endregion


UIL中的代码有:

//查询出来所有的病人信息
            DataTable dtPhysicalExamination = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu().Tables[0];
            dgv_PhysicalExaminationRegister.DataSource = dtPhysicalExamination;

作人员根据病人拿来的收费单对病人进行体检登记,即 提交体检登记后病人的体检状态就会变成,医生就可以对病人执行体检操作。

提交体检登记的储存过程有经过过处方单的:

--单击处方单,获取该处方单下的体检项目
	IF @Type = 'FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID'
	BEGIN
		SELECT     PW_OrdonnanceTable.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 体检状态, 
                      RTRIM(BT_ItemTable.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName,
                      RTRIM(BT_ItemTable.ItemCoding) AS ItemCoding 
		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
		 WHERE   1=1 AND  PW_ItemCategoryTable.ItemCategoryID =4 AND PW_OrdonnanceTable .OrdonnanceID = @OrdonnanceID
		union 
		SELECT    PW_OrdonnanceTable.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.ProjectPrice) AS ProjectPrice, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName,
                      RTRIM(BT_ItemTable.ItemCoding) AS ItemCoding
		FROM         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
       WHERE   1=1 AND  PW_ItemCategoryTable.ItemCategoryID = 1 AND PW_OrdonnanceTable .OrdonnanceID = @OrdonnanceID

	END

不经过处方单的储存过程有:

--单击某病人,获取该病人下的体检项目(不经过处方,已收费) 
	IF @Type = 'FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge'
	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_ItemTable.ProjectPrice) AS ProjectPrice, 
                      RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName,
                      PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName, 
                      BT_ItemTable.ItemUnit
		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
                      PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN
                      BT_PatientTable ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN
                      BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID
		WHERE     (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 4) AND (BT_PatientTable.PatientID = @PatientID) 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_ItemTable.ProjectPrice) AS ProjectPrice, 
                      RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, 
                      PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID, BT_ItemTable.ItemCoding, BT_ItemTable.TechnicalOfficesID, BT_TechnicalOfficesTable.TechnicalOfficesName, 
                      BT_ItemTable.ItemUnit
		FROM         PW_ItemCategoryTable INNER JOIN
                      PW_AuxiliaryItemDetailTable ON PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN
                      BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID 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
                      BT_TechnicalOfficesTable ON BT_ItemTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesID
        WHERE   1=1 AND  PW_ItemCategoryTable.ItemCategoryID = 1 AND  BT_PatientTable.PatientID = @PatientID and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0 
				AND PW_PhysicalExaminationChargeBillPatientTable .WhetherCharge = 1 AND PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = @ChargeBillID
	END

根据辅助项目明细ID修改体检状态ID 

--修改体检状态ID
	IF @Type = 'FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click'
	BEGIN
		UPDATE PW_AuxiliaryItemDetailTable 
		SET AS_PhysicalExaminationRegisterID = 363
		WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
	END

BLL中的方法有:

经过处方的BLL中的方法:

#region 根据处方单ID查询体检项目中的辅助项目ID
         [OperationContract]
         public DataSet FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(int intOrdonnanceID)//根据处方单ID查询体检项目中的辅助项目ID
         {
             SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              new SqlParameter ("@OrdonnanceID",SqlDbType.Int ),    //根据处方单ID查询体检项目中的辅助项目ID                              
                                              };
             mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID ";
             mySqlParameters[1].Value = intOrdonnanceID;
             DataTable dt =  myDALMethod.QueryDataTable ("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
             DataSet ds = new DataSet();
             ds.Tables.Add(dt);
             return ds;

         }
            #endregion

不经过处方的BLL中的方法:

[OperationContract]
         public DataSet  FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(int intPatientID, int intChargeBillID)//根据病人ID和收费单ID 查找辅助项目ID
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              new SqlParameter ("@PatientID",SqlDbType.Int ),//根据病人ID和收费单ID查找辅助项目ID
                                                new SqlParameter ("@ChargeBillID",SqlDbType.Int ),
                                              };
            mySqlParameters[0].Value = "FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge ";
            mySqlParameters[1].Value = intPatientID;
            mySqlParameters[2].Value = intChargeBillID;
            DataTable dt= myDALMethod.QueryDataTable ("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
             DataSet ds = new DataSet();
             ds.Tables.Add (dt);
             return ds;
        }
        #endregion

BLL中的修改体检状态ID中的方法有:

#region 根据辅助项目ID修改体检状态
         [OperationContract]
        public int FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click(int intAuxiliaryItemDetailID)//根据辅助项目ID修改体检状态
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int ),
                                     
                                              };
            mySqlParameters[0].Value = "FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click ";
            mySqlParameters[1].Value = intAuxiliaryItemDetailID;
            return myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);

        }
        #endregion

UIL中点击提交体检登记在其中写的代码有:

#region 提交体检登记
        private void btn_PhysicalExaminationRegister_Click(object sender, EventArgs e)
        {
           
            if (intPhysicalExaminationRegisterID == 362)
            {
                if (MessageBox.Show("注意: 是否进行体检登记操作?请认真核实登记信息,一旦登记,不可以修改!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    DataTable dtAuxiliaryItemDetailID = new DataTable();
                    if (intOrdonnanceID > 0)
                    {
                        //根据处方单ID查询体检项目中的辅助项目ID
                        dtAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(intOrdonnanceID).Tables[0];
                    }
                    else if (intOrdonnanceID == 0 && strOrdonnanceNumber == "无")//如果处方ID为空且处方编号为‘无’
                    {
                        //根据病人ID和收费单ID查询出辅助项目ID
                        dtAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(intPatientID, intChargeBillID).Tables[0];
                    }
                    int intAuxiliaryItemDetailID = 0; int intSuccess = 0;
                    for (int i = 0; i < dtAuxiliaryItemDetailID.Rows.Count; i++)//遍历获取体检辅助项目ID
                    {
                        //获取辅助项目ID
                        intAuxiliaryItemDetailID = Convert.ToInt32(dtAuxiliaryItemDetailID.Rows[i]["AuxiliaryItemDetailID"]);
                        //修改体检登记状态
                        intSuccess += myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_btn_PhysicalExaminationRegister_Click(intAuxiliaryItemDetailID);
                    }
                    if (intSuccess == dtAuxiliaryItemDetailID.Rows.Count && intSuccess > 0)
                    {
                        MessageBox.Show("提交体检登记成功!");
                        FRM_TiJianDengJi_Main_Load(null, null);//重新加载窗体。刷新
                    }
                    else
                    {
                        MessageBox.Show("提交体检登记失败!");
                    }
                   
                }
            }
           else
            {
                MessageBox.Show("提交体检登记失败!该病人已经提交,请重新选择其他病人!");
            }
        }
        #endregion 

提交体检登记后,医生在体检执行处就可以到病人的执行信息,就可以为病人执行体检信息了。


注意:该文章仅用于学习用途,违者后果自负





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值