WCF醫院管理系統技術解析(四)體檢登記(三)
體檢登記中的新增歷史病人(需要注意的是:該病人不經過掛號和處方,只是到醫院進行體檢)與醫院中的前臺登記病人不同。
對於這種情況:我的思路是:該病人先到醫院進行登記體檢,然後設置好體檢的項目,再到前臺進行收費,最後拿着收費單到體檢執行處,執行體檢處將體檢的結果以紙質形式返回給病人。
選擇好歷史病人後,歷史病人的病歷就會顯示出來效果圖爲:
2.9.8(圖25)
該界面用到的控件有:
控件 |
說明 從工具箱中找到對應的控件,拖動到界面,右鍵屬性可以設置控件的一些屬性樣式和事件。如顯示的文本,命名是規範
|
文本框 (TextBox) |
|
下拉框 (ComBobox) |
|
數據表格 (DataGridView) |
|
按鈕(Button) |
|
標籤 (Label) |
|
容器(Panel) |
|
選項卡(TabContral) |
涉及到的表和關係有:
2.9.8(圖26)
2.9.8(圖27)
表1:門診病歷模板表(BT_OutpatientMedicalRecordsTemplateTable)
用於記錄掛號病人的病歷和其他信息
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
OutpatientMedicalRecordsTemplateID |
int |
主鍵 |
門診病歷模板ID |
TemplateNumber |
nchar (50) |
|
模板編號 |
TemplateName |
nchar (50) |
|
模板名稱 |
WriteDoctor_StaffID |
int |
外鍵 |
撰寫醫生_員工ID |
WriteTechnicalOfficesID |
int |
外鍵 |
撰寫科室_科室ID |
AS_TemplateTypeID |
int |
外鍵 |
模板類型ID |
AS_InvokingJurisdictionID |
int |
外鍵 |
調用權限ID |
WhetherOperation |
bit |
|
是否手術 |
TemplateRemarks |
nchar (200) |
|
模板備註 |
SuitCase |
nchar (200) |
|
適合情況 |
PatientActionInChief |
nchar (300) |
|
病人主訴 |
PatientMedicalHistory |
nchar (300) |
|
病人病史 |
PhysicalExaminationCase |
nchar (300) |
|
體檢情況 |
InitialDiagnosis |
nchar (300) |
|
初步診斷 |
DisposeIdea |
nchar (300) |
|
處理意見 |
WhetherEffective |
bit |
((1)) |
有效否 |
RegisterID |
int |
外鍵 |
掛號ID |
表2:掛號表(RegisterTable)
用於對病人進行掛號候等醫生看病人的情況
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
RegisterID |
int |
主鍵 |
掛號ID |
RegisterNumber |
nchar (50) |
|
掛號單號 |
PatientID |
int |
外鍵 |
病人ID |
AS_SettleAccountsWayID |
int |
外鍵 |
結算方式ID |
TechnicalOfficesID |
int |
外鍵 |
科室ID |
Doctor_StaffID |
int |
外鍵 |
醫生_員工ID |
RegisterSum |
decimal (18, 2) |
|
掛號金額 |
DiagnosisFee |
decimal (18, 2) |
|
診察費 |
CaseHistorySum |
decimal (18, 2) |
|
病歷金額 |
RegisterRemarks |
nchar (50) |
|
掛號備註 |
RegisterTime |
datetime |
|
掛號時間 |
AS_RegisterStatusID |
int |
外鍵 |
掛號狀態ID |
ClassesID |
int |
外鍵 |
班次ID |
InvoiceNumber |
nchar (50) |
|
發票號 |
RegisterOperator_StaffID |
int |
外鍵 |
掛號人員(操作員)_員工ID |
WhetherEffective |
bit |
((1)) |
有效否 |
NullifyRemarks |
nchar (100) |
|
作廢備註 |
NullifyOperator_StaffID |
int |
外鍵 |
作廢操作員_員工ID |
表3.病人表(BT_PatientTable)
用於新增病人
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
PatientID |
int |
主鍵 |
病人ID |
PatientCardNumber |
nchar (50) |
|
病人卡號 |
PatientName |
nchar (30) |
|
病人名稱 |
RegisterCategoryID |
int |
外鍵 |
掛號類別 ID |
AS_SexID |
int |
外鍵 |
性別ID |
Birthday |
datetime |
|
出生年月 |
IDCardNo |
nchar (50) |
|
身份證號 |
AS_MaritalStatusID |
int |
外鍵 |
婚姻情況ID |
Profession |
nchar (50) |
|
所在職業 |
MemberTypeID |
int |
外鍵 |
會員類型ID |
MedicareCardNumber |
nchar (50) |
|
醫保卡號 |
AS_InsuredTypeID |
int |
外鍵 |
參保類型ID |
ContactTelephone |
nchar (30) |
|
聯繫電話 |
ContactAddress |
nchar (100) |
|
聯繫地址 |
DrugAllergyHistory |
nchar (100) |
|
藥物過敏史 |
PatientCategoryID |
int |
外鍵 |
病人類別ID |
Age |
nchar (30) |
|
年齡 |
AlphabeticBrevityCode |
nchar (20) |
|
拼音簡碼 |
WubiInCode |
nchar (20) |
|
五筆簡碼 |
ContactMobilePhone |
nchar (30) |
|
聯繫手機 |
|
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 |
|
是否體檢 |
表4:屬性明細表(BT_AttributeDetailsTable)
用於普通常用字段錄入
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
AttributeDetailsID |
int |
主鍵 |
屬性明細ID |
AttributeDetailsID_F |
int |
外鍵 |
屬性明細ID_F |
AttributeSetID |
int |
外鍵 |
屬性明細ID |
AttributeDetailsName |
nchar (30) |
|
屬性明細名稱 |
Number |
nchar (30) |
|
編號 |
RetrievalInCode |
nchar (30) |
|
檢索簡碼 |
BuiltInIdentifiers |
bit |
((0)) |
內置標識 |
Remarks |
nchar (100) |
|
備註 |
WhetherEffective |
bit |
((1)) |
有效否 |
表5:收費單表(PW_ChargeBillID)
用於對病人的處方單或者其他收費單進行收費的憑證
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
ChargeBillID |
int |
主鍵 |
收費單ID |
ReceiptNumber |
nchar (30) |
|
收據號 |
BillNumber |
nchar (30) |
|
發票號 |
AS_ChargeStatusID |
int |
外鍵 |
收費狀態ID |
OrdonnanceID |
int |
外鍵 |
處方單ID |
Discount |
decimal (18, 2) |
|
折扣 |
CashPaySum |
decimal (18, 2) |
|
現金支付金額 |
MedicarePaySum |
decimal (18, 2) |
|
醫保支付金額 |
BlockPaySum |
decimal (18, 2) |
|
卡付金額 |
TallyPaySum |
decimal (18, 2) |
|
記賬支付金額 |
Operator_StaffID |
int |
外鍵 |
操作員_員工ID |
OperateTime |
datetime |
|
操作時間 |
WhetherCancel |
bit |
|
作廢否 |
WhetherEffective |
bit |
((1)) |
有效否 |
WhetherOrdonnance |
Bit |
|
是否經過處方 |
表6:體檢登記病人表(PW_PhysicalExaminationChargeBillPatientTable)
用於記錄不經過處方只是體檢的病人的收費情況
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
PhysicalExaminationChargeBillPatientID |
Int |
主鍵 |
體檢登記病人ID |
PatientID |
Int |
外鍵 |
病人ID |
ChargeBillID |
Int |
外鍵 |
收費單ID |
AuxiliaryItemDetailID |
Int |
外鍵 |
輔助項目明細ID |
WhetherChargeBill |
Bit |
|
是否收費 |
表7:處方單表(PW_OrdonnanceTable)
用於對體檢病人進行開處方
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
OrdonnanceID |
int |
主鍵 |
處方單ID |
OrdonnanceNumber |
nchar (30) |
|
處方單號 |
PatientID |
int |
外鍵 |
病人ID |
PrescriptionDate |
datetime |
|
處方時間 |
ClinicTechnicalOffices_TechnicalOfficesID |
int |
外鍵 |
就診科室_科室ID |
TreatmentDoctor_StaffID |
int |
外鍵 |
就診醫生_員工ID |
AS_ChargeStatusID |
int |
外鍵 |
收費狀態ID |
ChargeForPersonnel_StaffID |
int |
外鍵 |
收費人員_員工ID |
ChargeTime |
datetime |
|
收費時間 |
AS_TakeMedicineStatusID |
int |
外鍵 |
發藥狀態ID |
TakeMedicinePersonnel_StaffID |
int |
外鍵 |
發藥人員_員工ID |
TakeMedicineTime |
datetime |
|
發藥時間 |
BedID |
int |
外鍵 |
牀位ID |
WhetherEffective |
bit |
((1)) |
有效否 |
表8:藥品表【DrugTable】
用於存放藥品
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
DrugID |
int |
主鍵 |
藥品ID |
DrugName |
nchar (70) |
|
藥品名稱 |
ChargeCategoryID |
int |
外鍵 |
收費類別 ID |
DrugEncoding |
nchar (30) |
|
藥品編碼 |
StripShapeEncoding |
nchar (50) |
|
條形碼 |
MedicineEncoding |
nchar (30) |
|
醫學編碼 |
EnglishName |
nchar (50) |
|
英文名稱 |
RatifyWritingNumber |
nchar (70) |
|
批准文號 |
AlphabeticBrevityCode |
nchar (20) |
|
拼音簡碼 |
WubiInCode |
nchar (20) |
|
五筆簡碼 |
AS_DrugAgentTypeID |
int |
外鍵 |
藥品類型ID |
AS_DoseUnitID |
int |
外鍵 |
劑量單位ID |
UnitDose |
nchar (30) |
|
單位劑量 |
DrugSpecification |
nchar (50) |
|
藥品規格 |
AS_ScatteredUnitID |
int |
外鍵 |
散裝單位I |
AS_PieceUnitID |
int |
外鍵 |
件裝單位ID |
AS_DrugTypeID |
int |
外鍵 |
藥品類型ID |
DrugPicture |
char (200) |
|
藥品圖片 |
WhetherMedicare |
bit |
|
是否醫保 |
MedicareEncoding |
nchar (50) |
|
醫保編碼 |
WhetherMedicalRecord |
bit |
|
在病歷中否 |
WhetherAddWater |
bit |
|
是否加水 |
WhetherSkinTest |
bit |
|
是否皮試 |
WhetherSpecialDrugs |
bit |
|
特殊藥品否 |
AS_DistributionWayID |
int |
外鍵 |
經銷方式ID |
AS_UserStatusID |
int |
外鍵 |
使用狀態ID |
AS_MedicareCategoryID |
int |
外鍵 |
醫保類別 ID |
ApplicableSymptoms |
nchar (100) |
|
適用症狀 |
PromotionalLogo |
nchar (50) |
|
促銷標識 |
MainEfficacy |
nchar (100) |
|
主要功效 |
WhetherIntegral |
bit |
|
積分否 |
IntegralProportion |
decimal (18, 2) |
|
積分比例 |
IntegralScores |
decimal (18, 2) |
|
積分分數 |
WhetherParticipateInInventoryAccountingManagement |
bit |
|
參與庫存覈算管理否 |
WhetherAllowTheFrontDeskToChangePriceSales |
bit |
|
允許前臺改價銷售否 |
WhetherAllowTheFrontDeskDiscountSales |
bit |
|
允許前臺折扣銷售否 |
AS_ValuationWayID |
int |
外鍵 |
計價方式ID |
EntryStaff_StaffID |
int |
外鍵 |
錄入人員_員工ID |
EntryDate |
datetime |
|
錄入日期 |
UpdateStaff_StaffID |
int |
外鍵 |
更新人員_員工ID |
UpdateDate |
datetime |
|
更新日期 |
WhetherEffective |
bit |
((1)) |
有效否 |
AS_DrugAgentTypeID |
Int |
外鍵 |
藥品劑型ID |
ScatteredStockPrice |
decimal (18, 2 |
|
散裝進價 |
PieceStockPrice |
decimal (18, 2 |
|
件裝進價 |
ScatteredPrice |
decimal (18, 2) |
|
散裝售價 |
PiecePrice |
decimal (18, 2) |
|
件裝售價 |
ScatteredMemberPrice |
decimal (18, 2) |
|
散會員價 |
表9:藥品價格表(DrugPriceTable)
列名 |
數據類型 |
主鍵/外鍵 |
說明 |
DrugPriceID |
int - Identity |
主鍵 |
藥品價格ID |
DrugID |
int |
外鍵 |
藥品ID |
ScatteredPrice |
decimal (18, 2) |
|
散裝售價 |
ScatteredMemberPrice |
decimal (18, 2) |
|
散會員價 |
PiecePrice |
decimal (18, 2) |
|
件裝售價 |
MedicarePrice |
decimal (18, 2) |
|
醫保價格 |
SupplierID |
int |
外鍵 |
供貨商ID |
ManufacturerName |
nchar (100) |
|
廠商名稱 |
ProductionField |
nchar (100) |
|
生產產地 |
ProductionBatchNumber |
nchar (50) |
|
生產批號 |
ProductionDate |
datetime |
|
生產日期 |
ValidityPeriod |
datetime |
|
有效期 |
WhetherEffective |
bit |
((1)) |
有效否 |
DataOperateRecordID |
int |
|
數據操作記錄ID |
數據庫中涉及的儲存過程有:
--根據病人IF查找病人的病歷
IF @Type = 'FRM_TiJianDengJi_Insert_Load_SelectBingLi'
BEGIN
SELECT BT_PatientTable.PatientID, BT_PatientTable.PatientName, BT_PatientTable.AS_SexID, BT_AttributeDetailsTable.AttributeDetailsName <span style="white-space:pre"> </span> AS Sex, BT_OutpatientMedicalRecordsTemplateTable.PatientActionInChief, BT_OutpatientMedicalRecordsTemplateTable.PatientMedicalHi<span style="white-space:pre"> </span>, PW_RegisterTable.RegisterTime, PW_RegisterTable.RegisterID
FROM BT_OutpatientMedicalRecordsTemplateTable INNER JOIN
PW_RegisterTable ON BT_OutpatientMedicalRecordsTemplateTable.RegisterID = PW_RegisterTable.RegisterID INNER JOIN
BT_PatientTable ON PW_RegisterTable.PatientID = BT_PatientTable.PatientID INNER JOIN
BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID
WHERE BT_PatientTable.PatientID = @PatientID
END
BLL中涉及到的對應方法有:
#region 查詢病人的病歷
[OperationContract]
public DataSet FRM_TiJianDengJi_Insert_Load_SelectBingLi(int intPatientID)//獲取界面中選擇的歷史病人
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@PatientID",SqlDbType.Char),//根據病人ID查找數據庫中的病人病史
};
mySqlParameters[0].Value = "FRM_TiJianDengJi_Insert_Load_SelectBingLi";
mySqlParameters[1].Value = intPatientID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Patient_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
UIL中涉及到的代碼有:
// 根據病人ID把查詢到的病人信息綁定到對應的控件中
DataTable dtMedicalHistory = myFRM_TiJianDengJi_Patient_MainClient.FRM_TiJianDengJi_Insert_Load_SelectBingLi(intPatienID).Tables[0];
if (dtMedicalHistory.Rows.Count == 0)
{ }
else
{
string[] strMedicalHistory = new string[dtMedicalHistory.Rows.Count];//聲明一個字符串的數組,長度爲dtMedicalHistory中行的集合
string strBingLi = ""; int intCount = 0;
for (int i = 0; i < dtMedicalHistory.Rows.Count; i++)//遍歷查詢出來的病人病歷信息表
{
intCount = i + 1;//累加病人看病的次數
//數組成員獲取病人的看病次數和病歷
strMedicalHistory[i] = "第" + intCount + "次到醫院病史情況:" + "\t" + dtMedicalHistory.Rows[i]["PatientMedicalHistory"].ToString().Trim() + "\r\n";
strBingLi += strMedicalHistory[i] + "\r\n";//累加數組成員
}
txt_CaseHistory.Text = strBingLi;//把病人的看病情況進行賦值給病歷文本框
}
歷史病人的賬戶流水效果圖如下:
2.9.8(圖28)
圖解:通過圖像可以看出處方單號中的第一條數據的單號爲“無”,那麼這是怎麼回事?那是因爲該條單據是病人到醫院只是做了體檢項目的收費,並不經過處方涉及到其他的收費項目,所以她的處方單號爲“無”,但是第二條數據就不同了,那條數據她是經過處方單開的收費項目,
涉及到的表和關係有:
經過處方單的
2.9.8(圖29)
2.9.8(圖30)
不經過處方單的:
2.9.8(圖32)
涉及到的儲存過程有:
-根據病人ID查找處方ID
IF @Type = 'FRM_TiJianBingRen_Insert_SelectOrdonnanceIDOnPatientID'
BEGIN
--經過處方
SELECT PW_OrdonnanceTable.PatientID, PW_OrdonnanceTable.OrdonnanceID, RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber, RTRIM(BT_PatientTable.PatientName)
AS PatientName, PW_OrdonnanceTable.PrescriptionDate, BT_PatientTable.AS_SexID, rtrim(BT_AttributeDetailsTable.AttributeDetailsName) as AttributeDetailsName ,
rtrim(BT_PatientTable.PatientCardNumber ) as PatientCardNumber,RTRIM(0) AS ChargeBillID
FROM BT_PatientTable INNER JOIN
PW_OrdonnanceTable ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID INNER JOIN
BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID
where BT_PatientTable.PatientID = @PatientID
UNION
--不經過處方
SELECT DISTINCT
BT_PatientTable.PatientID, RTRIM(0) AS OrdonnanceID, RTRIM('無') AS OrdonnanceNumber, BT_PatientTable.PatientName, PW_ChargeBillTable.OperateTime AS PrescriptionDate,
BT_PatientTable.AS_SexID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber,
PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID
FROM PW_ChargeBillTable INNER JOIN
PW_PhysicalExaminationChargeBillPatientTable ON PW_ChargeBillTable.ChargeBillID = PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID INNER JOIN
BT_PatientTable ON PW_PhysicalExaminationChargeBillPatientTable.PatientID = BT_PatientTable.PatientID INNER JOIN
BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID
WHERE BT_PatientTable.PatientID = @PatientID
END
BLL中涉及的方法有:
#region 根據病人ID查找處方ID
[OperationContract]
public DataSet FRM_TiJianBingRen_Insert_SelectOrdonnanceIDOnPatientID(int intPatientID)//獲取界面中傳入的病人ID
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@PatientID",SqlDbType.Char),//根據界面中傳入的病人ID 查詢數據庫病人的信息
};
mySqlParameters[0].Value = "FRM_TiJianBingRen_Insert_SelectOrdonnanceIDOnPatientID";
mySqlParameters[1].Value = intPatientID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Patient_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
UIL中涉及到的代碼有:
dgv_PatientOrdonnance.AutoGenerateColumns = false;//設置dgv_PatientOrdonnance中的列不可改變性
dgv_PatientOrdonnance.DataSource = myFRM_TiJianDengJi_Patient_MainClient.FRM_TiJianBingRen_Insert_SelectOrdonnanceIDOnPatientID(intPatienID).Tables[0];//把從數據庫中查詢出來的病人信息綁定到數據表格上
點擊收費詳細信息 能查看該病人的詳細收費項目:
效果如圖所示:
2.9.8(圖33)
涉及到的表和關係有:
2.9.8(圖34
涉及到的儲存過程有:
進過處方的體檢、化驗、治療等收費信息
-查詢病人每個處方以前的各種收費項目
IF @Type = 'FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMu'
BEGIN
SELECT LTRIM(RTRIM(PW_OrdonnanceDetailTable.TotalDrug)) AS TotalDrug,
LTRIM(RTRIM(BT_DrugTable.DrugSpecification)) AS DrugSpecification,
LTRIM(RTRIM(1))AS IssueMedicineUnit, --用藥單位
LTRIM(RTRIM(BT_DrugTable.WhetherMedicare)) AS WhetherMedicare,
LTRIM(RTRIM(BT_DrugPriceTable.MedicarePrice)) AS MedicarePrice,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.DrugID)) AS AllItemID,
LTRIM(RTRIM(PW_OrdonnanceDetailTable.OrdonnanceDetailEncoding)) AS AllICoding,
LTRIM(RTRIM(BT_DrugTable.DrugName)) AS AllIName,
isnull(BT_DrugPriceTable.ScatteredPrice , 0) AS AllIPrice
FROM BT_DrugPriceTable RIGHT OUTER JOIN
BT_DrugTable ON BT_DrugPriceTable.DrugID = BT_DrugTable.DrugID RIGHT OUTER JOIN
PW_OrdonnanceDetailTable ON BT_DrugTable.DrugID = PW_OrdonnanceDetailTable.DrugID
WHERE PW_OrdonnanceDetailTable.OrdonnanceID =@OrdonnanceID
union
--查詢輔助檢查項目(體檢項目)
SELECT
LTRIM(RTRIM(1)) AS TotalDrug,
LTRIM(RTRIM(0)) AS DrugSpecification,
LTRIM(RTRIM(0)) AS IssueMedicineUnit,
LTRIM(RTRIM(0)) AS WhetherMedicare,
LTRIM(RTRIM(0)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID,
LTRIM(RTRIM(BT_ItemTable.ItemCoding)) AS AllICoding,
LTRIM(RTRIM(BT_ItemTable.ItemName)) AS AllIName,
isnull(BT_ItemTable.ProjectPrice,0) AS AllIPrice
FROM PW_AuxiliaryItemDetailTable INNER JOIN
BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID
WHERE PW_AuxiliaryItemDetailTable.OrdonnanceID =@OrdonnanceID AND PW_AuxiliaryItemDetailTable.ItemCategoryID =1
union
--化驗項目
SELECT
LTRIM(RTRIM(1)) AS TotalDrug,
LTRIM(RTRIM(0)) AS DrugSpecification,
LTRIM(RTRIM(0)) AS IssueMedicineUnit,
LTRIM(RTRIM(0)) AS WhetherMedicare,
LTRIM(RTRIM(0)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID,
LTRIM(RTRIM(BT_AssayItemsTable.AssayItemsNumber)) AS AllICoding,
LTRIM(RTRIM(BT_AssayItemsTable.ChineseName)) AS AllIName,
isnull(BT_AssayItemsTable.AssayItemsPrice,0) AS AllIPrice
FROM PW_AuxiliaryItemDetailTable INNER JOIN
BT_AssayItemsTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_AssayItemsTable.AssayItemsID
WHERE PW_AuxiliaryItemDetailTable.OrdonnanceID = @OrdonnanceID AND PW_AuxiliaryItemDetailTable.ItemCategoryID =2
--治療項目
union
SELECT LTRIM(RTRIM(BT_TreatmentItemsTable.TotalInvestment)) AS TotalDrug,
LTRIM(RTRIM(0)) AS DrugSpecification,
LTRIM(RTRIM(0)) AS IssueMedicineUnit,
LTRIM(RTRIM(BT_TreatmentItemsTable.WhetherMedicare)) AS WhetherMedicare,
LTRIM(RTRIM(BT_TreatmentItemsTable.MedicarePricing)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID,
LTRIM(RTRIM(BT_TreatmentItemsTable.ItemNumber)) AS AllICoding,
LTRIM(RTRIM(BT_TreatmentItemsTable.TreatmentItemName)) AS AllIName,
LTRIM(RTRIM(BT_TreatmentItemsTable.GeneralPricing)) AS AllIPrice
FROM PW_AuxiliaryItemDetailTable LEFT OUTER JOIN
BT_TreatmentItemsTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_TreatmentItemsTable.TreatmentItemID
WHERE PW_AuxiliaryItemDetailTable.OrdonnanceID = @OrdonnanceID AND PW_AuxiliaryItemDetailTable.ItemCategoryID =3
--體檢套餐
union
SELECT
LTRIM(RTRIM(1)) AS TotalDrug,
LTRIM(RTRIM(0)) AS DrugSpecification,
LTRIM(RTRIM(0)) AS IssueMedicineUnit,
LTRIM(RTRIM(0)) AS WhetherMedicare,
LTRIM(RTRIM(0)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID,
LTRIM(RTRIM(BT_PhysicalExaminationSetMealTable.SetMealNumber)) AS AllICoding,
LTRIM(RTRIM(BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealName)) AS AllIName,
isnull(BT_PhysicalExaminationSetMealTable.CashPrice,0) AS AllIPrice
FROM PW_AuxiliaryItemDetailTable INNER JOIN
BT_PhysicalExaminationSetMealTable ON PW_AuxiliaryItemDetailTable.AllItemID =
BT_PhysicalExaminationSetMealTable.PhysicalExaminationSetMealID
WHERE PW_AuxiliaryItemDetailTable.OrdonnanceID = @OrdonnanceID AND PW_AuxiliaryItemDetailTable.ItemCategoryID =4
--化驗組合
union
SELECT
LTRIM(RTRIM(1)) AS TotalDrug,
LTRIM(RTRIM(0)) AS DrugSpecification,
LTRIM(RTRIM(0)) AS IssueMedicineUnit,
LTRIM(RTRIM(0)) AS WhetherMedicare,
LTRIM(RTRIM(0)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID,
LTRIM(RTRIM(BT_AssayInspectCombinationTable.CombinationNumber)) AS AllICoding,
LTRIM(RTRIM(BT_AssayInspectCombinationTable.CombinationName)) AS AllIName,
isnull(BT_AssayInspectCombinationTable.Price,0) AS AllIPrice
FROM PW_AuxiliaryItemDetailTable INNER JOIN
BT_AssayInspectCombinationTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_AssayInspectCombinationTable.AssayInspectCombinationID
WHERE PW_AuxiliaryItemDetailTable.OrdonnanceID = @OrdonnanceID AND PW_AuxiliaryItemDetailTable.ItemCategoryID =5
END
不經過處方的體檢項目:
--不經過處方的體檢項目
IF @Type = 'FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMuNotOrdonnance'
BEGIN
SELECT LTRIM(RTRIM(1)) AS TotalDrug, LTRIM(RTRIM(0)) AS DrugSpecification, LTRIM(RTRIM(0)) AS IssueMedicineUnit, LTRIM(RTRIM(0)) AS WhetherMedicare, LTRIM(RTRIM(0)) AS MedicarePrice,
LTRIM(RTRIM(PW_AuxiliaryItemDetailTable.AllItemID)) AS AllItemID, LTRIM(RTRIM(BT_ItemTable.ItemCoding)) AS AllICoding, LTRIM(RTRIM(BT_ItemTable.ItemName)) AS AllIName,
ISNULL(BT_ItemTable.ProjectPrice, 0) AS AllIPrice, PW_ChargeBillTable.ChargeBillID
FROM PW_AuxiliaryItemDetailTable INNER JOIN
BT_ItemTable ON PW_AuxiliaryItemDetailTable.AllItemID = BT_ItemTable.ItemID INNER JOIN
PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID INNER JOIN
PW_ChargeBillTable ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID
WHERE PW_ChargeBillTable.ChargeBillID = @ChargeBillID AND PW_AuxiliaryItemDetailTable.ItemCategoryID = 1 AND PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0
END
BLL中涉及到的方法有:
經過處方的:
#region 查詢病人每個處方以前的各種收費項目
[OperationContract]
public DataSet FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMu(int intOrdonnanceID)//獲取界面點擊收費詳細信息中傳入的處方ID
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@OrdonnanceID",SqlDbType.Char),///根據界面點擊收費詳細信息中傳入的處方ID查詢數據庫中對應的收費項目
};
mySqlParameters[0].Value = "FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMu";
mySqlParameters[1].Value = intOrdonnanceID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Patient_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
不經過處方的:
#region 不經過處方的體檢項目
[OperationContract]
public DataSet FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMuNotOrdonnance(int intChargeBillID)//獲取點擊界面詳細收費項目傳入的收費單ID
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@ChargeBillID",SqlDbType.Char),//根據收費單ID查詢數據庫中某病人的詳細收費項目
};
mySqlParameters[0].Value = "FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMuNotOrdonnance";
mySqlParameters[1].Value = intChargeBillID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Patient_Main", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
UIL中涉及到的方法有:
private void dgv_PatientOrdonnance_CellClick(object sender, DataGridViewCellEventArgs e)
{
//獲取處方ID
int intOrdonnanceID =Convert .ToInt32 ( dgv_PatientOrdonnance.CurrentRow .Cells["OrdonnanceID"].Value .ToString());
if (e.ColumnIndex == 9)//點擊收費詳細信息
{
pnl_ShouFeiXiangMu.Visible = true;//Panle容器顯示出來
if (intOrdonnanceID == 0)//如何處方ID爲0
{
//獲取收費單ID
int intChargeBillID = Convert.ToInt32(dgv_PatientOrdonnance.CurrentRow.Cells["收費單ID"].Value);
//根據收費單ID查詢收費項目信息
dgv_ChargeBillItem.DataSource = myFRM_TiJianDengJi_Patient_MainClient.FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMuNotOrdonnance(intChargeBillID).Tables[0];
}
else
{
//根據處方單查詢收費項目信息
dgv_ChargeBillItem.DataSource = myFRM_TiJianDengJi_Patient_MainClient.FRM_TiJianDengJi_Insert_Load_SelectGeZhongShouFeiXiangMu(intOrdonnanceID).Tables[0];
}
}
}
選擇歷史病人進行點擊選擇歷史病人後,其界面效果圖如下:
2.9.8(圖35)
點擊保存,即讓該歷史病人進入體檢中心。
2.9.8(圖36)
解析:因爲該病人在醫院上有過看病記錄,所以不會新增該病人,只是在原有基礎上把數據庫中的“WhetherFromPhysicalExamination”的值改爲“false”,就可以了
數據庫中的儲存過程:
--修改病人中的是否體檢
IF @Type = 'FRM_TiJianBingRen_Main_Load_UpdateWhetherFromPhysicalExamination'
BEGIN
UPDATE BT_PatientTable
SET WhetherFromPhysicalExamination = 0
WHERE PatientID = @PatientID
END
BLL中涉及到的方法有:
#region 修改病人中的是否體檢
[OperationContract]
public int FRM_TiJianBingRen_Main_Load_UpdateWhetherFromPhysicalExamination(int intPatientID)//獲取界面傳入的病人ID
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type",SqlDbType .Char ),
new SqlParameter ("@PatientID",SqlDbType.Char),//根據界面中傳入的病人ID查詢數據庫中的病人信息
};
mySqlParameters[0].Value = "FRM_TiJianBingRen_Main_Load_UpdateWhetherFromPhysicalExamination";
mySqlParameters[1].Value = intPatientID;
return myDALMethod.UpdateData ("TiJianZhongXin_TiJianDengJi_Patient_Main", mySqlParameters);
}
#endregion
UIL中涉及到的代碼:
if (myFRM_TiJianDengJi_Patient_MainClient.FRM_TiJianBingRen_Main_Load_UpdateWhetherFromPhysicalExamination(intPatientID) > 0)//如果病人的是否體檢爲0,就///保存成功,否則保存失敗
{
MessageBox.Show("保存成功!");
}
else
{
MessageBox.Show("保存失敗!");
}
這樣就可以對歷史病人再次體檢進行設置體檢項目了。注:此文章只供學習參考,禁止用於商業用途。否則後果自負