private void CardUpdate(bool isCardLevelAuto, Guid cardId, decimal dBalance, decimal dPoint) { DXInfo.Models.Cards newCard = uow.Cards.GetById(g => g.Id == cardId); if (newCard == null) { throw new ArgumentException("卡信息未找到"); } newCard.Balance = dBalance; if (isCardLevelAuto) { DXInfo.Models.CardLevels oldCardLevel = uow.CardLevels.GetById(g => g.Id == newCard.CardLevel); if (dPoint > 0) { decimal points = uow.CardPoints.GetAll().Where(w => w.Card == cardId).Sum(s => s.Point); DXInfo.Models.CardLevels cardLevel = uow.CardLevels.GetAll().Where(w => w.Point < points + dPoint && w.Id != newCard.CardLevel).OrderByDescending(o => o.Point).FirstOrDefault(); if (cardLevel != null && cardLevel.Discount < oldCardLevel.Discount) { newCard.CardLevel = cardLevel.Id; } } } uow.Cards.Update(newCard); DXInfo.Models.CardsLog cardLog = Mapper.Map <DXInfo.Models.CardsLog>(newCard); cardLog.CardId = newCard.Id; uow.CardsLog.Add(cardLog); }
private void MemberBalance(Guid orderId, string cardNo) { //结账 //DXInfo.Models.FairiesMemberManage db = new DXInfo.Models.FairiesMemberManage(); DXInfo.Models.Cards card = uow.Cards.GetAll().Where(w => w.CardNo == cardNo).FirstOrDefault(); if (card == null) { MessageBox.Show(cardNo + "未找到会员卡"); return; } DXInfo.Models.Members member = uow.Members.GetAll().Where(w => w.Id == card.Member).FirstOrDefault(); if (member == null) { MessageBox.Show("未找到会员信息"); return; } DXInfo.Models.CardLevels cardLevel = uow.CardLevels.GetAll().Where(w => w.Id == card.CardLevel).FirstOrDefault(); if (cardLevel == null) { MessageBox.Show("未找到卡级别参数"); return; } DXInfo.Models.OrderDishes orderDish = uow.OrderDishes.GetAll().Where(w => w.Id == orderId && w.Status == 2).FirstOrDefault(); if (orderDish == null) { MessageBox.Show("已撤销桌台才可无卡结账"); return; } decimal dDiscount = cardLevel.Discount; //bool isOut = false; Guid gPayType = Guid.Empty; var lsi = (from o in uow.OrderMenus.GetAll() join i in uow.Inventory.GetAll() on o.InventoryId equals i.Id into oi from ois in oi.DefaultIfEmpty() join c in uow.InventoryCategory.GetAll() on ois.Category equals c.Id into ic from ics in ic.DefaultIfEmpty() where o.OrderId == orderId && !(o.Status == 0 || o.Status == 1 || o.Status == 7) select new { ics.IsDiscount, o.InventoryId, ois.Code, ois.Name, ois.EnglishName, o.Price, o.Comment, o.Status, o.Id, o.Amount, o.Quantity, ois.Category }).ToList(); decimal dSum = lsi.Sum(s => s.Amount); decimal dSum1 = lsi.Where(w => w.IsDiscount).Sum(s => s.Amount); decimal dSum2 = lsi.Where(w => !w.IsDiscount).Sum(s => s.Amount); int iCount = Convert.ToInt32(lsi.Sum(s => s.Quantity)); decimal dAmount = (Math.Round(dSum1 * dDiscount / 100, 2) + dSum2); if (dAmount > card.Balance) { MessageBox.Show("余额不足"); return; } //消费积分 Guid deptId = App.MyIdentity.oper.DeptId.Value; decimal point = 0; if (dAmount > 0) { var cp1 = uow.ConsumePoints.GetAll().Where(w => w.DeptId == deptId); var cp = cp1.Count() > 0 ? cp1 : uow.ConsumePoints.GetAll(); foreach (var si in lsi) { if (cp.Count() > 0) { var cpc = cp.Where(w => w.Category == si.Category); if (cpc.Count() > 0) { decimal min = cpc.Min(m => m.Point / m.Amount); point += si.Amount * min; } else { decimal min = cp.Min(m => m.Point / m.Amount); point += si.Amount * min; } } } } var lselInv = lsi.Select(s => new { OrderMenuId = s.Id, Id = s.InventoryId, s.Code, s.Name, s.EnglishName, s.Price, s.Quantity, s.Amount, s.Comment, s.IsDiscount, Status = s.Status }); Guid cardId = card.Id; DateTime dtn = DateTime.Now.AddDays(-1); var di = (from d1 in uow.CardDonateInventory.GetAll().Where(w => w.CardId == cardId).Where(w => w.IsValidate).Where(w => w.InvalideDate > dtn) join i in uow.Inventory.GetAll() on d1.Inventory equals i.Id into d1i from d1is in d1i.DefaultIfEmpty() select new { d1is.Id, d1is.Name }).ToList(); var ctx = new { Id = card.Id, CardNo = card.CardNo, MemberName = member.MemberName, UserId = App.MyIdentity.oper.UserId, FullName = App.MyIdentity.oper.FullName, DeptId = App.MyIdentity.oper.DeptId.Value, DeptName = App.MyIdentity.dept.DeptName, Sum = dSum, Voucher = 0, PayVoucher = 0, Discount = dDiscount, Amount = dAmount, LastBalance = card.Balance, Balance = card.Balance - dAmount, CreateDate = DateTime.Now, lSelInv = lselInv, Point = point, Count = iCount, CardDonateInventory = di, PayType = gPayType, OrderId = orderId }; DeskNoCardConsume2Window cw = new DeskNoCardConsume2Window(uow, ctx); if (cw.ShowDialog().GetValueOrDefault()) { } }