/*为处方单付款*/ public TransactionInfo PayPrescription(string sPrescriptionID, string payPassword) { TransactionInfoEntity transactionInfoEntity = null; if (sPrescriptionID == null) { transactionInfoEntity = new TransactionInfoEntity(); transactionInfoEntity.ErrorMessage = "221 Empty PrescriptionID! @Service"; } else if (payPassword == null) { transactionInfoEntity = new TransactionInfoEntity(); transactionInfoEntity.ErrorMessage = "222 Empty User PayPassword! @Service"; } else { transactionInfoEntity = pharmacyLogic.PayPrescription(sPrescriptionID, payPassword, "Yes We Can!"); } TransactionInfo transactionInfo = new TransactionInfo(); TranslateTransactionInfoEntityToTransactionInfoContractData(transactionInfoEntity, transactionInfo); return transactionInfo; }
/*将TransactionInfo对应的Entity翻译为数据契约*/ private void TranslateTransactionInfoEntityToTransactionInfoContractData( TransactionInfoEntity transactionInfoEntity, TransactionInfo transactionInfo) { transactionInfo.ErrorMessage = transactionInfoEntity.ErrorMessage; transactionInfo.TransactionID = transactionInfoEntity.TransactionID.ToString(); transactionInfo.LastName = transactionInfoEntity.LastName; transactionInfo.FirstName = transactionInfoEntity.FirstName; transactionInfo.PharmacyID = transactionInfoEntity.PharmacyID; transactionInfo.Date = transactionInfoEntity.Date; transactionInfo.Amount = transactionInfoEntity.Amount; transactionInfo.UserBalanceThen = transactionInfoEntity.UserBalanceThen; transactionInfo.Action = transactionInfoEntity.Action; }
/*为处方单付款*/ public TransactionInfoEntity PayPrescription(Guid gPrescriptionID, string pharmacyID, string payPassword) { if (confirmed == false) { TransactionInfoEntity transactionInfoEntity = new TransactionInfoEntity(); transactionInfoEntity.ErrorMessage = "Not Logged in Yet! @Logic"; return transactionInfoEntity; } else { return userDAO.PayPrescription(gPrescriptionID, pharmacyID, payPassword); } }
/*为处方单付款,仅供Pharmacy调用*/ public TransactionInfoEntity PayPrescription(string sPrescriptionID, string payPassword, string take) { TransactionInfoEntity transactionInfoEntity = null; if (confirmed == false) { transactionInfoEntity = new TransactionInfoEntity(); transactionInfoEntity.ErrorMessage = "223 Not Logged in Yet! @Logic"; } else { transactionInfoEntity = pharmacyDAO.PayPrescription(sPrescriptionID, confirmedPharmacyID, payPassword, take); } return transactionInfoEntity; }
/*为处方单付款*/ 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; }