/*药房登录: 向数据库提交select查询,若成功则并更新LastLoginDate域,将结果转写为Entity*/ public PharmacyInfoEntity Login(string pharmacyID, string password) { /*数据库访问实例*/ DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); /*查询(pharmacyID,password)对是否匹配*/ Pharmacy pharmacy = (from p in DEntities.Pharmacies where ((p.PharmacyID == pharmacyID) && (p.Password == password)) select p).FirstOrDefault(); /*将结果转写为Entity,仅转写必要登录信息*/ PharmacyInfoEntity pharmacyInfoEntity = null; if (pharmacy != null) { pharmacyInfoEntity = new PharmacyInfoEntity() { PharmacyID = pharmacyID, Name = pharmacy.Name, LastLoginDate = pharmacy.LastLoginDate }; /*更新该Pharmacy的LastLoginDate域*/ pharmacy.LastLoginDate = DateTime.Now; DEntities.SaveChanges(); } return pharmacyInfoEntity; }
/*进行就医消去挂号 FinishAppointment(Guid gGuid)*/ public string FinishAppointment(Guid gGuid) { /*数据库访问实例*/ DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); /*查询符合要求的Appointment, 未做时间判断*/ Appointment appointment = (from ap in DEntities.Appointments where (ap.AppointmentID == gGuid) select ap).FirstOrDefault(); /*若该预约不存在*/ if (appointment == null) { return "No Such Appointment! @Data"; } else { appointment.Status = "[Finished]"; } /*完成消号过程*/ try { DEntities.SaveChanges(); } catch { return "Saving Denied! @Data"; } return null; }
public string SetDailySchedule(string doctorID, DayOfWeek dayOfWeek, int am) { string setting = null; switch (dayOfWeek) { case DayOfWeek.Sunday: setting = "Sun"; break; case DayOfWeek.Monday: setting = "Mon"; break; case DayOfWeek.Tuesday: setting = "Tue"; break; case DayOfWeek.Wednesday: setting = "Wed"; break; case DayOfWeek.Thursday: setting = "Thu"; break; case DayOfWeek.Friday: setting = "Fri"; break; case DayOfWeek.Saturday: setting = "Sat"; break; default: return "Invalid Weekday! @Data"; } if (am > 0) { setting += ":A"; } else { setting += ":P"; } DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); Doctor doctor = (from d in DEntities.Doctors where d.DoctorID == doctorID select d).FirstOrDefault(); if (doctor == null) { return "Invalid DoctorID!"; } Schedule schedule = (from s in DEntities.Schedules where s.DoctorID == doctorID select s).FirstOrDefault(); if (schedule == null) { schedule = new Schedule(); schedule.DoctorID = doctor.DoctorID; schedule.Weekday = setting; schedule.LastCheck = DateTime.Now; DEntities.Schedules.AddObject(schedule); } else { schedule.Weekday = setting; schedule.LastCheck = DateTime.Now; } try { DEntities.SaveChanges(); } catch { return "Set Daily Schedule Failed! @Data"; } return null; }
/*医生撰写邮件Doctor to User*/ public string MessageCompose(string senderID, string receiverID, string text) { Message message = new Message(); DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); Doctor doctor = (from d in DEntities.Doctors where d.DoctorID == senderID select d).FirstOrDefault(); if (doctor == null) { return "Invalid Sender DoctorID!"; } User user = (from u in DEntities.Users where u.UserID == receiverID select u).FirstOrDefault(); if (user == null) { return "Invalid Receiver UserID!"; } message.MessageID = Guid.NewGuid(); message.Sender = doctor.DoctorID; message.Receiver = user.UserID; message.Type = "D2U"; message.Date = DateTime.Now; message.Text = text; try { DEntities.Messages.AddObject(message); DEntities.SaveChanges(); } catch { return "Sending Failed! @Data"; } return null; }
/*医生登录:校验(ID,Password)是否与数据库记录匹配*/ public DoctorInfoEntity Login(string doctorID, string password) { /*数据库访问实例*/ DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); /*查询(DoctorID,password)对是否匹配*/ Doctor doctor = (from d in DEntities.Doctors where ((d.DoctorID == doctorID) && (d.Password == password)) select d).FirstOrDefault(); /*将结果转写为Entity,仅转写必要登录信息*/ DoctorInfoEntity doctorInfoEntity = null; if (doctor != null) { doctorInfoEntity = new DoctorInfoEntity() { DoctorID = doctor.DoctorID, LastName = doctor.LastName, FirstName = doctor.FirstName, SectionID = doctor.SectionID, Designation = doctor.Designation, LastLoginDate = doctor.LastLoginDate }; /*更新该User的LastLoginDate域*/ doctor.LastLoginDate = DateTime.Now; DEntities.SaveChanges(); } return doctorInfoEntity; }
public string CreatePrescription(PrescriptionInfoEntity prescriptionInfoEntity) { Prescription newPrescription = new Prescription(); DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); newPrescription.Detail = ""; for (int i = 0; i < prescriptionInfoEntity.Count; i++) { string sPhysicID = prescriptionInfoEntity.physicID[i]; Physic physic = (from p in DEntities.Physics where p.PhysicID == sPhysicID select p).FirstOrDefault(); if (physic == null) { return "Invalid PhysicID! @Data"; } newPrescription.Detail += prescriptionInfoEntity.physicID[i] + ":" + prescriptionInfoEntity.number[i].ToString() + ";"; } newPrescription.PrescriptionID = Guid.NewGuid(); try { DEntities.Prescriptions.AddObject(newPrescription); DEntities.SaveChanges(); } catch { return "Invalid Case! @Data"; } return String.Format("EA{0}", newPrescription.PrescriptionID.ToString()); }
/*修改病历*/ public CaseInfoEntity ModifyCase(CaseInfoEntity newCase) { CaseHistory oldCase = new CaseHistory(); CaseInfoEntity modifiedCase = new CaseInfoEntity(); if (newCase.CaseID == null) { modifiedCase.ErrorMessage = "Case GUID Missing! @Data"; return modifiedCase; } DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); oldCase = (from c in DEntities.CaseHistories where ((c.CaseID == newCase.CaseID) && (c.DoctorID == newCase.DoctorID)) select c).FirstOrDefault(); if (newCase == null) { modifiedCase.ErrorMessage = "Invalid Case GUID! @Data"; return modifiedCase; } if (oldCase.ModifiedDate != null) { modifiedCase.ErrorMessage = "Modification Denied! @Data"; return modifiedCase; } if (oldCase.ExaminationID == null) { oldCase.ExaminationID = newCase.ExaminationID; } if (oldCase.PrescriptionID == null) { oldCase.PrescriptionID = newCase.PrescriptionID; } if (oldCase.ChiefComplaint == null) { oldCase.ChiefComplaint = newCase.ChiefComplaint; } if (oldCase.TentativeDiagnosis == null) { oldCase.TentativeDiagnosis = newCase.TentativeDiagnosis; } if (oldCase.DifferentialDiagnosis == null) { oldCase.DifferentialDiagnosis = newCase.DifferentialDiagnosis; } if (oldCase.TreatmentPlan == null) { oldCase.TreatmentPlan = newCase.TreatmentPlan; } bool IsSent = oldCase.CountercheckDate.HasValue; if (IsSent == false) { oldCase.CountercheckDate = newCase.CountercheckDate; } if (newCase.IsDraft == false) { oldCase.ModifiedDate = DateTime.Now; } try { DEntities.SaveChanges(); } catch { modifiedCase.ErrorMessage = "Invalid Case! @Data"; return modifiedCase; } if ((IsSent == false) && (oldCase.CountercheckDate.HasValue)) { Doctor doctor = (from d in DEntities.Doctors where d.DoctorID == oldCase.DoctorID select d).FirstOrDefault(); Section section = (from s in DEntities.Sections where s.SectionID == doctor.SectionID select s).FirstOrDefault(); User user = (from u in DEntities.Users where u.UserID == oldCase.UserID select u).FirstOrDefault(); DateTime lastVisit = (DateTime)oldCase.CreatedDate; DateTime countercheckDate = (DateTime)oldCase.CountercheckDate; DateTime currentTime = DateTime.Now; Message message = new Message(); message.MessageID = Guid.NewGuid(); message.Sender = section.HospitalID; message.Receiver = newCase.UserID; message.Date = countercheckDate.AddDays(-3).AddMinutes(currentTime.Minute).AddSeconds(currentTime.Second).AddMilliseconds(currentTime.Millisecond); message.Type = "H2U"; message.Text = String.Format( "Dear {0}.{1} {2},\nDuring your visit on {3}, Dr.{4} {5} ({6}) suggested you pay another visit on {7}. It might be a good idea to make an appointment before it's too late.\nSincerely,\nDr.PE", (user.Gender.ToLower() == "female") ? "Ms" : "Mr", user.LastName, user.FirstName, lastVisit.ToLongDateString(), doctor.LastName, doctor.FirstName, section.Name, countercheckDate.ToLongDateString()); try { DEntities.Messages.AddObject(message); DEntities.SaveChanges(); } catch { modifiedCase.ErrorMessage = "Can't Create Appointment Inform! @Data"; return modifiedCase; } } modifiedCase.CaseID = oldCase.CaseID; modifiedCase.ExaminationID = oldCase.ExaminationID; modifiedCase.PrescriptionID = oldCase.PrescriptionID; modifiedCase.UserID = oldCase.UserID; modifiedCase.DoctorID = oldCase.DoctorID; modifiedCase.SectionID = oldCase.SectionID; modifiedCase.Date = oldCase.CreatedDate; modifiedCase.ChiefComplaint = oldCase.ChiefComplaint; modifiedCase.TentativeDiagnosis = oldCase.TentativeDiagnosis; modifiedCase.DifferentialDiagnosis = oldCase.DifferentialDiagnosis; modifiedCase.TreatmentPlan = oldCase.TreatmentPlan; modifiedCase.CountercheckDate = oldCase.CountercheckDate; return modifiedCase; }
public string SetExceptionSchedule(string doctorID, DateTime? date) { DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); Doctor doctor = (from d in DEntities.Doctors where d.DoctorID == doctorID select d).FirstOrDefault(); if (doctor == null) { return "Invalid DoctorID! @Data"; } if (date == null) { return "Paremeter Date is Null! @Data"; } DateTime newDate = (DateTime)date; DateTime dDate = newDate.Date; if (newDate.CompareTo(dDate.AddHours(12)) >= 0) { dDate = dDate.AddHours(12); } Schedule schedule = (from s in DEntities.Schedules where s.DoctorID == doctorID select s).FirstOrDefault(); if (schedule == null) { schedule = new Schedule(); schedule.DoctorID = doctor.DoctorID; schedule.Exception = dDate; schedule.LastCheck = DateTime.Now; DEntities.Schedules.AddObject(schedule); } else { if (schedule.Addition != null) { if (((DateTime)schedule.Addition) == dDate) { return "Conflict with Additonal Date! @Data"; } } schedule.Exception = dDate; schedule.LastCheck = DateTime.Now; } try { DEntities.SaveChanges(); } catch { return "Set Exceptional Schedule Failed! @Data"; } return null; }
/*创建病历并针对复查日期创建message*/ public CaseInfoEntity CreateCase(CaseInfoEntity caseInfoEntity) { DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); CaseHistory newCase = new CaseHistory(); CaseInfoEntity addedCase = new CaseInfoEntity(); newCase.CaseID = Guid.NewGuid(); newCase.ExaminationID = caseInfoEntity.ExaminationID; newCase.PrescriptionID = caseInfoEntity.PrescriptionID; newCase.UserID = caseInfoEntity.UserID; newCase.DoctorID = caseInfoEntity.DoctorID; Doctor doctor = (from d in DEntities.Doctors where d.DoctorID == newCase.DoctorID select d).FirstOrDefault(); if (doctor == null) { addedCase.ErrorMessage = "Invalid DoctorID! @Data"; return addedCase; } else { newCase.SectionID = doctor.SectionID; } newCase.CreatedDate = DateTime.Now; if (caseInfoEntity.IsDraft == false) { newCase.ModifiedDate = newCase.CreatedDate; } newCase.ChiefComplaint = caseInfoEntity.ChiefComplaint; newCase.TentativeDiagnosis = caseInfoEntity.TentativeDiagnosis; newCase.DifferentialDiagnosis = caseInfoEntity.DifferentialDiagnosis; newCase.TreatmentPlan = caseInfoEntity.TreatmentPlan; newCase.CountercheckDate = caseInfoEntity.CountercheckDate; try { DEntities.CaseHistories.AddObject(newCase); DEntities.SaveChanges(); } catch { addedCase.ErrorMessage = "Invalid Case! @Data"; return addedCase; } if (caseInfoEntity.CountercheckDate != null) { Section section = (from s in DEntities.Sections where s.SectionID == doctor.SectionID select s).FirstOrDefault(); User user = (from u in DEntities.Users where u.UserID == caseInfoEntity.UserID select u).FirstOrDefault(); DateTime lastVisit = (DateTime)newCase.CreatedDate; DateTime countercheckDate = (DateTime)newCase.CountercheckDate; DateTime currentTime = DateTime.Now; Message message = new Message(); message.MessageID = Guid.NewGuid(); message.Sender = section.HospitalID; message.Receiver = newCase.UserID; message.Date = countercheckDate.AddDays(-3).AddMinutes(currentTime.Minute).AddSeconds(currentTime.Second).AddMilliseconds(currentTime.Millisecond); message.Type = "H2U"; message.Text = String.Format( "Dear {0}.{1} {2},\nDuring your visit on {3}, Dr.{4} {5} ({6}) suggested you pay another visit on {7}. It might be a good idea to make an appointment before it's too late.\nSincerely,\nDr.PE", (user.Gender.ToLower() == "female") ? "Ms" : "Mr", user.LastName, user.FirstName, lastVisit.ToLongDateString(), doctor.LastName, doctor.FirstName, section.Name, countercheckDate.ToLongDateString()); try { DEntities.Messages.AddObject(message); DEntities.SaveChanges(); } catch { addedCase.ErrorMessage = "Can't Create Appointment Inform! @Data"; return addedCase; } } addedCase.CaseID = newCase.CaseID; addedCase.ExaminationID = newCase.ExaminationID; addedCase.PrescriptionID = newCase.PrescriptionID; addedCase.UserID = newCase.UserID; addedCase.DoctorID = newCase.DoctorID; addedCase.SectionID = newCase.SectionID; addedCase.Date = newCase.CreatedDate; addedCase.ChiefComplaint = newCase.ChiefComplaint; addedCase.TentativeDiagnosis = newCase.TentativeDiagnosis; addedCase.DifferentialDiagnosis = newCase.DifferentialDiagnosis; addedCase.TreatmentPlan = newCase.TreatmentPlan; addedCase.CountercheckDate = newCase.CountercheckDate; if (newCase.ModifiedDate == null) { addedCase.IsDraft = true; } else { addedCase.IsDraft = false; } return addedCase; }
/*为处方单付款*/ public TransactionInfoEntity PayPrescription(string sPrescriptionID, string pharmacyID, string payPassword, string take) { DrPEDatabaseEntities DEntities = new DrPEDatabaseEntities(); TransactionInfoEntity transactionInfoEntity = new TransactionInfoEntity(); /*获取处方信息*/ Guid gPrescriptionID = Guid.Empty; try { gPrescriptionID = new Guid(sPrescriptionID); } catch { transactionInfoEntity.ErrorMessage = "224 Wrong Prescription GUID! @Data"; return transactionInfoEntity; } Prescription prescription = (from p in DEntities.Prescriptions where p.PrescriptionID == gPrescriptionID select p).FirstOrDefault(); /*若处方不存在*/ if (prescription == null) { transactionInfoEntity.ErrorMessage = "225 No Such Prescription! @Data"; return transactionInfoEntity; } /*获取所属病历信息*/ CaseHistory caseHistory = (from c in DEntities.CaseHistories where c.PrescriptionID == gPrescriptionID select c).FirstOrDefault(); /*若处方不属于任何病历*/ if (caseHistory == null) { transactionInfoEntity.ErrorMessage = "226 This Prescription Belongs to No Case! @Data"; return transactionInfoEntity; } /*获取病历所属用户信息*/ User user = (from u in DEntities.Users where ((u.UserID == caseHistory.UserID) && (u.PayPassword == payPassword)) select u).FirstOrDefault(); /*若支付密码错误*/ if (user == null) { transactionInfoEntity.ErrorMessage = "227 Wrong PayPassword! @Data"; return transactionInfoEntity; } /*判断是否已付款*/ string sCheck = String.Format("P:{0}", gPrescriptionID.ToString()); Transaction transaction = (from t in DEntities.Transactions where t.Status == sCheck select t).FirstOrDefault(); if (transaction != null) { /*查询交易药房*/ Pharmacy pharmacy = (from p in DEntities.Pharmacies where p.PharmacyID == transaction.PharmacyID select p).FirstOrDefault(); /*是否与本药房交易*/ if (pharmacy.PharmacyID == pharmacyID) { /*药物是否已经领取*/ if (transaction.Detail == null) { transactionInfoEntity.Amount = transaction.Amount; transactionInfoEntity.ErrorMessage = String.Format("231 Already Paid at {0}, But Not Taken Yet! @Data", transaction.Date); /*进行领取操作*/ transaction.Detail = "[Taken]"; DEntities.SaveChanges(); } else { transactionInfoEntity.Amount = transaction.Amount; transactionInfoEntity.ErrorMessage = String.Format("232 Already Paid and Taken at {0}! @Data", transaction.Date); } } else { transactionInfoEntity.ErrorMessage = String.Format("233 Already Bought in {0}({1}) at {2}! @Data", pharmacy.Name, pharmacy.PharmacyID, transaction.Date); } return transactionInfoEntity; } /*获取处方费用*/ PrescriptionCostEntity prescriptionCostEntity = GetPrescriptionCost(sPrescriptionID, pharmacyID, user.Password); if (prescriptionCostEntity.ErrorMessage != null) { transactionInfoEntity.ErrorMessage = prescriptionCostEntity.ErrorMessage; return transactionInfoEntity; } /*判断用户帐号是否允许支付*/ if (user.Balance == null) { transactionInfoEntity.ErrorMessage = String.Format("228 User's Balance Not Available! @Data"); return transactionInfoEntity; } /*判断用户是否有足够的余额支付*/ if (user.Balance < prescriptionCostEntity.Amount) { transactionInfoEntity.ErrorMessage = String.Format("229 Needs RMB{0}, But Only RMB{1} Left! @Data", prescriptionCostEntity.Amount, user.Balance); return transactionInfoEntity; } /*支付密码正确,生成新交易*/ Transaction newTransaction = new Transaction(); newTransaction.TransactionID = Guid.NewGuid(); newTransaction.UserID = user.UserID; newTransaction.PharmacyID = pharmacyID; newTransaction.Date = DateTime.Now; newTransaction.Amount = prescriptionCostEntity.Amount; newTransaction.Status = sCheck; if (take != null) { newTransaction.Detail = "[Taken]"; } /*提交修改至数据库*/ try { DEntities.Transactions.AddObject(newTransaction); DEntities.SaveChanges(); } catch { transactionInfoEntity.ErrorMessage = "241 GUID Conflicts! @Data"; return transactionInfoEntity; } /*从用户帐号扣款*/ user.Balance -= prescriptionCostEntity.Amount; DEntities.SaveChanges(); /*将款项加入药房*/ Pharmacy newPharmacy = (from ph in DEntities.Pharmacies where ph.PharmacyID == pharmacyID select ph).FirstOrDefault(); if (newPharmacy.Balance == null) { newPharmacy.Balance = prescriptionCostEntity.Amount; } else { newPharmacy.Balance += prescriptionCostEntity.Amount; } DEntities.SaveChanges(); /*返回交易详情*/ transactionInfoEntity.TransactionID = newTransaction.TransactionID; transactionInfoEntity.LastName = user.LastName; transactionInfoEntity.FirstName = user.FirstName; transactionInfoEntity.PharmacyID = newTransaction.PharmacyID; transactionInfoEntity.Date = newTransaction.Date; transactionInfoEntity.Amount = newTransaction.Amount; transactionInfoEntity.UserBalanceThen = user.Balance; if (newTransaction.Detail != null) { transactionInfoEntity.Action = newTransaction.Detail; } else { transactionInfoEntity.Action = "[Left]"; } return transactionInfoEntity; }