/// <summary> /// 随机立减处理 /// </summary> /// <returns></returns> private async Task handleRandomPreference(int hotelId, Dine dine, DinePaidDetail mainPaidDetail) { PayKind randomPreferencePayKind = await ctx.PayKinds.FirstOrDefaultAsync(p => p.Type == PayKindType.RandomPreference && p.Usable == true); if (randomPreferencePayKind != null) { int top = (int)Math.Ceiling(mainPaidDetail.Price / 50); Random random = new Random(DateTime.Now.Millisecond); decimal randomPrice = (decimal)random.NextDouble(); randomPrice *= top; randomPrice = Math.Floor(randomPrice * 10) / 10; //if(randomPrice == 0) { // randomPrice = 0.1m; //} // 如果随机立减超过应付金额则全额支付 if (randomPrice > mainPaidDetail.Price) { randomPrice = mainPaidDetail.Price; } if (randomPrice != 0) { dine.DinePaidDetails.Add(new DinePaidDetail { PayKind = randomPreferencePayKind, Price = randomPrice }); mainPaidDetail.Price -= randomPrice; } } }
/// <summary> /// 整单打折处理 /// </summary> /// <param name="payKind"></param> /// <param name="dine"></param> /// <returns></returns> private async Task handleDiscount(PayKind payKind, Dine dine) { double minDiscount = 1; string minDiscountName = null; DiscountType minDiscountType = DiscountType.None; if (payKind.Discount < minDiscount) { minDiscount = payKind.Discount; minDiscountName = payKind.Name + "折扣"; minDiscountType = DiscountType.PayKind; } DayOfWeek week = DateTime.Now.DayOfWeek; List <TimeDiscount> timeDicsounts = await ctx.TimeDiscounts.Where(p => p.Week == week).ToListAsync(); TimeSpan now = DateTime.Now.TimeOfDay; foreach (TimeDiscount timeDiscount in timeDicsounts) { if (now >= timeDiscount.From && now <= timeDiscount.To) { if (timeDiscount.Discount < minDiscount) { minDiscount = timeDiscount.Discount; minDiscountName = timeDiscount.Name; minDiscountType = DiscountType.Time; } break; } } Customer customer = await ctx.Customers.FirstOrDefaultAsync(p => p.Id == dine.UserId); if (customer != null) { VipDiscount vipDiscounts = await ctx.VipDiscounts.FirstOrDefaultAsync(p => p.Level.Id == customer.VipLevelId); if (vipDiscounts != null) { if (vipDiscounts.Discount < minDiscount) { minDiscount = vipDiscounts.Discount; minDiscountName = vipDiscounts.Name; minDiscountType = DiscountType.Vip; } } } dine.Discount = minDiscount; dine.DiscountName = minDiscountName; dine.DiscountType = minDiscountType; }
//DEL:PayKinds /// <summary> /// 切换usable状态 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <JsonResult> SwitchPayKinds(int id) { PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == id); if (paykinds == null) { return(Json(new { succeeded = false })); } else { paykinds.Usable = !paykinds.Usable; await db.SaveChangesAsync(); return(Json(new { succeeded = true })); } }
public async Task <JsonResult> DeletePayKind(int Id) { PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == Id); if (paykinds == null) { return(Json(new { succeeded = false })); } else { db.PayKinds.Remove(paykinds); await db.SaveChangesAsync(); return(Json(new { succeeded = true })); } }
//ALT:PayKinds /// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="name"></param> /// <param name="description"></param> /// <param name="discount"></param> /// <returns></returns> public async Task <JsonResult> AltPayKinds(int id, string name, string description, double discount) { PayKind paykinds = await db.PayKinds.FirstOrDefaultAsync(p => p.Id == id); if (paykinds == null) { return(Json(new { succeeded = false })); } else { paykinds.Name = name; paykinds.Description = description; paykinds.Discount = discount / 100; await db.SaveChangesAsync(); return(Json(new { succeeded = true })); } }
/// <summary> /// 释放资源 /// </summary> /// <param name="isDisposing"></param> protected override void Dispose(bool isDisposing) { if (this.alreadyDisposed) { return; } if (this.payKind != null) { this.payKind.Dispose(); this.payKind = null; } if (this.rate != null) { this.rate.Dispose(); this.rate = null; } base.Dispose(isDisposing); this.alreadyDisposed = true; }
public void WriteD3(Lib.XmlExporter xml, Data.IInvoice pool, InvoiceRecord irec) { xml.Writer.WriteStartElement("Z_SL"); xml.Writer.WriteElementString("IDCASE", Identity); #if FOMS xml.Writer.WriteElementString("USL_OK", Conditions); #endif xml.Writer.WriteElementString("VIDPOM", AidKind.ToString()); #if FOMS xml.Writer.WriteElementString("FOR_POM", AidForm.ToString()); #endif xml.Writer.WriteElementString("LPU", Options.LpuCode); // Dinamically? xml.WriteBool("VBR", MobileBrigade); xml.Writer.WriteElementString("DATE_Z_1", DateFrom.AsXml()); xml.Writer.WriteElementString("DATE_Z_2", DateTill.AsXml()); // Dynamically xml.WriteBool("P_OTK", DispanserisationRefusal); xml.Writer.WriteElementString("RSLT_D", DispanserisationResult); #if FOMS xml.Writer.WriteElementString("ISHOD", Outcome); #endif if (specialCase != null) { foreach (SpecialCase c in specialCase) { xml.Writer.WriteElementString("OS_SLUCH", ((int)c).ToString()); } } foreach (Event e in Events) { e.WriteD3(xml, pool, irec, this); } xml.Writer.WriteElementString("IDSP", PayKind.ToString()); xml.Writer.WriteElementString("SUMV", Total.ToString("F2", Options.NumberFormat)); if (PayType != Model.PayType.None) { xml.Writer.WriteElementString("OPLATA", ((int)PayType).ToString()); } if (AcceptedSum > 0) { xml.Writer.WriteElementString("SUMP", AcceptedSum.ToString("F2", Options.NumberFormat)); } // Сведения о санкциях // Описывает санкции, примененные в рамках данного случая. foreach (Sanction s in pool.LoadSanctions(irec, this)) { s.Write(xml, pool); } if (DeniedSum > 0) { xml.Writer.WriteElementString("SANKIT", DeniedSum.ToString("F2", Options.NumberFormat)); } xml.Writer.WriteEndElement(); }
public void WriteD2(Lib.XmlExporter xml, Data.IInvoice pool, InvoiceRecord irec) { xml.Writer.WriteStartElement("Z_SL"); xml.Writer.WriteElementString("IDCASE", Identity); xml.Writer.WriteElementString("USL_OK", Conditions.ToString()); xml.Writer.WriteElementString("VIDPOM", AidKind.ToString()); xml.Writer.WriteElementString("FOR_POM", AidForm.ToString()); if (!string.IsNullOrEmpty(DirectedFrom)) { xml.Writer.WriteElementString("NPR_MO", DirectedFrom); xml.Writer.WriteElementString("NPR_DATE", DirectionDate.AsXml()); } xml.Writer.WriteElementString("LPU", Options.LpuCode); xml.Writer.WriteElementString("DATE_Z_1", DateFrom.AsXml()); xml.Writer.WriteElementString("DATE_Z_2", DateTill.AsXml()); if (BedDays > 0) { xml.Writer.WriteElementString("KD_Z", BedDays.ToString()); } if (BirthWeight > 0) { xml.Writer.WriteElementString("VNOV_M", BirthWeight.ToString()); } xml.Writer.WriteElementString("RSLT", Result); xml.Writer.WriteElementString("ISHOD", Outcome.ToString()); if (specialCase != null) { foreach (SpecialCase c in specialCase) { xml.Writer.WriteElementString("OS_SLUCH", ((int)c).ToString()); } } foreach (Event e in Events) { e.WriteD2(xml, pool, irec, this); } xml.Writer.WriteElementString("IDSP", PayKind.ToString()); xml.Writer.WriteElementString("SUMV", Total.ToString("F2", Options.NumberFormat)); if (PayType != Model.PayType.None) { xml.Writer.WriteElementString("OPLATA", ((int)PayType).ToString()); } if (AcceptedSum > 0) { xml.Writer.WriteElementString("SUMP", AcceptedSum.ToString("F2", Options.NumberFormat)); } // Сведения о санкциях // Описывает санкции, примененные в рамках данного случая. foreach (Sanction s in pool.LoadSanctions(irec, this)) { s.Write(xml, pool); } if (DeniedSum > 0) { xml.Writer.WriteElementString("SANKIT", DeniedSum.ToString("F2", Options.NumberFormat)); } xml.Writer.WriteEndElement(); }
public async Task <JsonResult> Pay(Cart cart) { CartAddition addition = new CartAddition(); // 新建或获取用户Id User user = await createOrGetUser(User.Identity.GetUserId(), "OrderSystem"); if (user == null) { return(Json(new JsonError("创建匿名用户失败"))); } SigninManager.Signin(user, true); addition.UserId = user.Id; // 创建新订单 FunctionResult result = await OrderManager.CreateDine(cart, addition); if (!result.Succeeded) { if (await UserManager.IsInRoleAsync(user.Id, Role.Nemo)) { await UserManager.DeleteAsync(user); await YummyOnlineManager.RecordLog(YummyOnlineDAO.Models.Log.LogProgram.Identity, YummyOnlineDAO.Models.Log.LogLevel.Warning, $"Anonymous User Deleted {user.Id}, Via OrderSystem"); } await HotelManager.RecordLog(HotelDAO.Models.Log.LogLevel.Error, $"{result.Detail}, Host:{Request.UserHostAddress}", HttpPost.GetPostData(Request)); return(Json(new JsonError(result.Message))); } Dine dine = ((Dine)result.Data); await newDineInform(dine, "OrderSystem"); PayKind payKind = await HotelManager.GetPayKindById(cart.PayKindId); string redirectUrl = $"{payKind.CompleteUrl}?Succeeded={true}&DineId={dine.Id}"; if (payKind.Type == PayKindType.Online) { DinePaidDetail mainPaidDetail = await HotelManager.GetDineOnlinePaidDetail(dine.Id); // 如果实际需要支付的价格等于0则直接显示支付完成界面 if (mainPaidDetail.Price == 0) { await onlinePayCompleted(dine.Id, null); } else { redirectUrl = await getOnlineRedirectUrl(dine.Id); } } else { HotelConfig config = await HotelManager.GetHotelConfig(); if (config.IsPrintReciptAfterPayingOffline) { await requestPrintDine(dine.Id, new List <PrintType> { PrintType.Recipt }); } } return(Json(new JsonSuccess(redirectUrl))); }