/// <summary> /// 撤销退款申请 申请中=>已撤销 /// </summary> /// <param name="refund"></param> public void RevokeOrderRefund(OrderRefund refund) { using (var dbContext = new OrderProcessDbContext()) { //修改退款申请状态 refund.RefundStatus = RefundStatus.Revoked; dbContext.Entry <OrderRefund>(refund).State = System.Data.Entity.EntityState.Modified; //修改订单商品退款状态 var singleGoods = dbContext.OrderGoods.FirstOrDefault(x => x.OrderId == refund.OrderId && x.SingleGoodsId == refund.SingleGoodsId); if (singleGoods != null) { singleGoods.RefundStatus = OrderRefundStatus.NoRefund; } //修改订单状态 var order = dbContext.Orders.FirstOrDefault(x => x.Id == refund.OrderId); if (order != null) { order.RefundStatus = GetOrderRefundStatus(refund, RefundStatus.Applying); } dbContext.SaveChanges(); } }
public List <StatisticSalesResult> StatisticSales() { using (var dbContext = new OrderProcessDbContext()) { var startTime = DateTime.Now.AddMonths(-11).ToString("yyyy-MM-01").To <DateTime>(); var query1 = from o in dbContext.Orders where (o.OrderStatus == OrderStatus.Completed || o.OrderStatus == OrderStatus.WaitingForDelivery || o.OrderStatus == OrderStatus.WaitingForReceiving) && o.CreateTime >= startTime && o.CreateTime <= DateTime.Now select new { o.PayFee, Month = o.CreateTime.Year + "-" + (o.CreateTime.Month < 10?"0":"") + o.CreateTime.Month }; var query = from t in query1 group t by t.Month into g select new StatisticSalesResult { Month = g.Key, SalesVolume = g.Count(), SalesAmount = g.Sum(c => c.PayFee) }; return(query.OrderBy(g => g.Month).ToList()); } }
public List <EvaluateDetailsModel> LoadOrderEvaluateList(Guid orderId) { using (var dbContext = new OrderProcessDbContext()) { var query = from g in dbContext.OrderGoods join e in dbContext.Evaluates on g.Id equals e.SourceId where g.OrderId == orderId && e.SourceType.Equals("Order") select new EvaluateDetailsModel { SingleGoodsId = g.SingleGoodsId, GoodsId = g.GoodsId, GoodsName = g.GoodsName, GoodsAttribute = g.GoodsAttribute, Price = g.Price, Quantity = g.Quantity, Score = e.Score, Content = e.Content, IsAnonymity = e.IsAnonymity, MemberName = e.MemberName, EvaluateTime = e.CreateTime, ReplyContent = e.ReplyContent, ReplyTime = e.ReplyTime }; return(query.ToList()); } }
/// <summary> /// 未处理评价数量 /// </summary> /// <returns></returns> public int CountUnDoEvalute() { using (var dbContext = new OrderProcessDbContext()) { return(dbContext.EvaluateViews.Count(e => e.ReplyUserName == null)); } }
public int DeliveryRemindersCount() { using (var dbContext = new OrderProcessDbContext()) { return(dbContext.OrderDeliveryReminders.Count()); } }
public int CountOrder(OrderRefundStatus refundStatus) { using (var dbContext = new OrderProcessDbContext()) { return(dbContext.Orders.Count(o => o.RefundStatus == refundStatus)); } }
/// <summary> /// 创建订单退款申请 /// </summary> /// <param name="refund"></param> public void CreateOrderRefund(OrderRefund refund) { using (var dbContext = new OrderProcessDbContext()) { //修改订单退款状态为 var order = dbContext.Orders.FirstOrDefault(x => x.Id == refund.OrderId); if (order == null) { throw new WebApiInnerException("0002", "订单不存在"); } if (order.RefundStatus != OrderRefundStatus.Refunding) { order.RefundStatus = OrderRefundStatus.Refunding; } var singleGoods = dbContext.OrderGoods.FirstOrDefault(x => x.OrderId == refund.OrderId && x.SingleGoodsId == refund.SingleGoodsId); if (singleGoods == null) { throw new WebApiInnerException("0006", "商品不存在"); } singleGoods.RefundStatus = OrderRefundStatus.Refunding; //新增退款申请 refund.Id = KeyGenerator.GetGuidKey(); refund.RefundNo = KeyGenerator.GetOrderNumber(); refund.CreateTime = DateTime.Now; refund.RefundStatus = RefundStatus.Applying; dbContext.OrderRefunds.Add(refund); dbContext.SaveChanges(); } }
/// <summary> /// 根据条件获取所有商品信息 /// </summary> /// <param name="expression"></param> /// <returns></returns> public List <Order> GetList(Expression <Func <Order, bool> > expression) { using (var dbContex = new OrderProcessDbContext()) { var query = dbContex.Orders.Include(o => o.OrderGoods).Where(expression).ToList(); return(query); } }
public OrderDeliveryReminder GetNewestReminderInfo(Guid orderId, string memberId) { using (var dbContext = new OrderProcessDbContext()) { var reminderInfo = dbContext.OrderDeliveryReminders.Where(c => c.OrderId.Equals(orderId) && c.MemberId.Equals(memberId)).OrderByDescending(c => c.CreateTime).FirstOrDefault(); return(reminderInfo); } }
/// <summary> /// 统计退款数量,按类型统计 /// </summary> /// <param name="type"></param> /// <returns></returns> public int CountRefundOrder(RefundType type) { using (var dbContext = new OrderProcessDbContext()) { Expression <Func <ViewOrderRefund, bool> > expression = l => l.OrderStatus != OrderStatus.Deleted && l.RefundStatus == RefundStatus.Applying && l.RefundType == type; return(dbContext.ViewOrderRefunds.Where(expression).Count()); } }
public bool CheckTodayCanRemind(Guid orderId, string memberId) { using (var dbContext = new OrderProcessDbContext()) { var reminderInfo = dbContext.OrderDeliveryReminders.Where(c => c.OrderId.Equals(orderId) && c.MemberId.Equals(memberId)).OrderByDescending(c => c.CreateTime).FirstOrDefault(); if (reminderInfo != null && reminderInfo.CreateTime.Subtract(DateTime.Now).Days == 0) { return(false); } } return(true); }
public ApiResult GetCenterInfo() { var money = _walletService.GetWalletByMemberId(AuthorizedUser.Id, Wallet.Models.WalletType.Cash)?.Available ?? 0; var integral = _walletService.GetWalletByMemberId(AuthorizedUser.Id, Wallet.Models.WalletType.Integral)?.Available ?? 0; var pendingPayment = 0; var waitingForReceiving = 0; var waitingForEvaluate = 0; var hasRefund = 0; using (var orderDbContext = new OrderProcessDbContext()) { pendingPayment = orderDbContext.Orders.Count(o => o.OrderStatus == OrderProcess.Models.OrderStatus.PendingPayment && o.MemberId.Equals(AuthorizedUser.Id, StringComparison.OrdinalIgnoreCase)); waitingForReceiving = orderDbContext.Orders.Count(o => (o.OrderStatus == OrderProcess.Models.OrderStatus.WaitingForDelivery || o.OrderStatus == OrderProcess.Models.OrderStatus.WaitingForReceiving) && o.MemberId.Equals(AuthorizedUser.Id, StringComparison.OrdinalIgnoreCase)); waitingForEvaluate = orderDbContext.Orders.Count(o => o.OrderStatus == OrderProcess.Models.OrderStatus.Completed && o.EvaluateStatus == OrderProcess.Models.EvaluateStatus.NotEvaluated && o.RefundStatus == OrderProcess.Models.OrderRefundStatus.NoRefund && o.MemberId.Equals(AuthorizedUser.Id, StringComparison.OrdinalIgnoreCase)); hasRefund = orderDbContext.Orders.Count(o => o.RefundStatus == OrderProcess.Models.OrderRefundStatus.Refunding && o.MemberId.Equals(AuthorizedUser.Id, StringComparison.OrdinalIgnoreCase)); } var todayIncome = _walletService.Sum(AuthorizedUser.Id, Wallet.Models.WalletType.Cash, Wallet.Models.BillType.TakeIn, "commision", DateTime.Now.DayZero(), DateTime.Now.DayEnd()); var totalIncome = _walletService.Sum(AuthorizedUser.Id, Wallet.Models.WalletType.Cash, Wallet.Models.BillType.TakeIn, "commision"); var teamCount = _currencyService.Count <Member>(m => m.ParentIds.Contains(AuthorizedUser.Id)); //var maxLevel = _configService.Get<SystemConfig>().MaxLevel; //if (maxLevel > 3) maxLevel = 3; //using (var memberDbContext = new MemberDbContext()) //{ // CountChilds(memberDbContext, AuthorizedUser.Id, maxLevel, ref teamCount); //}//end var member = _memberService.FindMemberById(AuthorizedUser.Id); var result = new ApiResult(); result.SetData(new { Money = money, Integral = integral, PendingPayment = pendingPayment, WaitingForReceiving = waitingForReceiving, WaitingForEvaluate = waitingForEvaluate, HasRefund = hasRefund, TodayIncome = todayIncome, TotalIncome = totalIncome, TeamCount = teamCount, MemberType = member?.MemberType ?? MemberType.General }); return(result); }
public int SalesVolumeToday() { using (var dbContext = new OrderProcessDbContext()) { var startTime = DateTime.Now.DayZero(); var endTime = DateTime.Now.DayEnd(); return (dbContext.Orders.Count( o => o.CreateTime >= startTime && o.CreateTime <= endTime && (o.OrderStatus == OrderStatus.WaitingForDelivery || o.OrderStatus == OrderStatus.WaitingForReceiving || o.OrderStatus == OrderStatus.Completed))); } }
public decimal SalesAmountToday() { using (var dbContext = new OrderProcessDbContext()) { var startTime = DateTime.Now.DayZero(); var endTime = DateTime.Now.DayEnd(); return (dbContext.Orders.Where( o => o.CreateTime >= startTime && o.CreateTime <= endTime && (o.OrderStatus == OrderStatus.WaitingForDelivery || o.OrderStatus == OrderStatus.WaitingForReceiving || o.OrderStatus == OrderStatus.Completed)) .Sum(o => (decimal?)o.PayFee) ?? 0); } }
public List <OrderGoodsEvaluateViewModel> LoadOrderGoodsEvaluateList(Guid orderId) { using (var dbContext = new OrderProcessDbContext()) { var query = from g in dbContext.OrderGoods join e in dbContext.Evaluates on g.Id equals e.SourceId where g.OrderId == orderId && e.SourceType.Equals("Order") select new OrderGoodsEvaluateViewModel { OrderGoods = g, Evaluate = e }; return(query.ToList()); } }
public Order Load(Guid orderId) { using (var dbContext = new OrderProcessDbContext()) { var order = dbContext.Orders.Where(o => o.Id.Equals(orderId)).Include(o => o.OrderActions).Include(o => o.OrderGoods).FirstOrDefault(); if (order != null) { foreach (var goods in order.OrderGoods) { goods.GoodsImage = _storageFileService.GetFiles(goods.Id, OrderProcessModule.Key, "GoodsImage").FirstOrDefault(); } } return(order); } }
public int CancelTimeOutOrder(DateTime outTime) { var count = 0; using (var dbContext = new OrderProcessDbContext()) { var orders = dbContext.Orders.Where(o => o.OrderStatus == OrderStatus.PendingPayment && o.CreateTime < outTime).ToList(); foreach (var order in orders) { order.OrderStatus = OrderStatus.Closed; if (ChangeOrderStatus(order.Id, order.OrderStatus)) { count++; } } return(count); } }
public int CompleteTimeOutOrder(DateTime outTime) { var count = 0; using (var dbContext = new OrderProcessDbContext()) { var orders = dbContext.Orders.Where(o => o.OrderStatus == OrderStatus.WaitingForReceiving && o.ShippingTime < outTime).ToList(); foreach (var order in orders) { order.OrderStatus = OrderStatus.Completed; if (ChangeOrderStatus(order.Id, order.OrderStatus)) { count++; } } return(count); } }
public void AfterReplayOrderEvaluates(Guid orderId) { using (var dbContext = new OrderProcessDbContext()) { var order = dbContext.Orders.FirstOrDefault(x => x.Id == orderId); if (order != null) { var oldEvaluateStatus = order.EvaluateStatus; order.EvaluateStatus = EvaluateStatus.Replied; dbContext.Entry(order).State = System.Data.Entity.EntityState.Modified; var currentUser = _userContainer.CurrentUser; dbContext.OrderActions.Add(new OrderAction { Id = KeyGenerator.GetGuidKey(), OrderId = order.Id, Memo = "评价回复", CreateTime = DateTime.Now, OrderStatus = order.OrderStatus, PayStatus = order.PayStatus, ShippingStatus = order.ShippingStatus, EvaluateStatus = order.EvaluateStatus, RefundStatus = order.RefundStatus, UserId = currentUser.Id, UserName = currentUser.UserName }); if (dbContext.SaveChanges() > 0) { Logger.Operation($"订单{order.OrderNo}评价回复,修改订单评价状态为已回复", OrderProcessModule.Instance); foreach (var proxy in _orderServiceProxy) { if (proxy.ModuleKey().Equals(order.ModuleKey, StringComparison.OrdinalIgnoreCase)) { proxy.AfterChangeEvaluateStatus(order, oldEvaluateStatus); } } } } } }
public void SubmitOrder(Order order, List <OrderGoods> orderGoods) { Argument.ThrowIfNullOrEmpty(order.ModuleKey, "ModuleKey"); using (var dbContext = new OrderProcessDbContext()) { if (order.Id.Equals(Guid.Empty)) { order.Id = KeyGenerator.GetGuidKey(); foreach (var goods in orderGoods) { goods.Id = KeyGenerator.GetGuidKey(); goods.OrderId = order.Id; } } if (string.IsNullOrEmpty(order.OrderNo)) { order.OrderNo = KeyGenerator.GetOrderNumber(); } dbContext.Orders.Add(order); dbContext.OrderGoods.AddRange(orderGoods); if (dbContext.SaveChanges() > 0) { order.OrderGoods = orderGoods; foreach (var proxy in _orderServiceProxy) { if (proxy.ModuleKey().Equals(order.ModuleKey, StringComparison.OrdinalIgnoreCase)) { proxy.AfterSubmitOrder(order); } } foreach (var goods in orderGoods) { if (goods.GoodsImage != null) { _storageFileService.AssociateFile(goods.Id, OrderProcessModule.Key, OrderProcessModule.DisplayName, goods.GoodsImage.Id, "GoodsImage"); } } } } }
public List <Order> LoadByPage(string memberId, out int totalCount, OrderStatus?orderStatus = null, PayStatus?payStatus = null, ShippingStatus?shippingStatus = null, int pageIndex = 1, int pageSize = 10) { using (var dbContext = new OrderProcessDbContext()) { totalCount = dbContext.Orders.Count(); var orders = dbContext.Orders.Where(o => o.MemberId.Equals(memberId, StringComparison.OrdinalIgnoreCase) && o.OrderStatus != OrderStatus.Deleted && (orderStatus == null || o.OrderStatus == orderStatus.Value) && (payStatus == null || o.PayStatus == payStatus.Value) && (shippingStatus == null || o.ShippingStatus == shippingStatus.Value)).Include(o => o.OrderGoods).OrderByDescending(o => o.CreateTime).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); foreach (var order in orders) { foreach (var goods in order.OrderGoods) { goods.GoodsImage = _storageFileService.GetFiles(goods.Id, OrderProcessModule.Key, "GoodsImage") .FirstOrDefault(); } } return(orders); } }
public List <Order> LoadByPage(string memberId, out int totalCount, OrderStatus?orderStatus = null, PayStatus?payStatus = null, ShippingStatus?shippingStatus = null, EvaluateStatus?evaluateStatus = null, OrderRefundStatus?refundStatus = null, string keywords = "", int pageIndex = 1, int pageSize = 10, OrderStatus?extentOrderStatus = null, OrderRefundStatus?extentRefundStatus = null) { using (var dbContext = new OrderProcessDbContext()) { var noKeywords = string.IsNullOrWhiteSpace(keywords); var query = dbContext.Orders.Where(o => o.MemberId.Equals(memberId, StringComparison.OrdinalIgnoreCase) && o.OrderStatus != OrderStatus.Deleted && (orderStatus == null || (o.OrderStatus == orderStatus.Value || (extentOrderStatus != null && o.OrderStatus == extentOrderStatus.Value))) && (payStatus == null || o.PayStatus == payStatus.Value) && (shippingStatus == null || o.ShippingStatus == shippingStatus.Value) && (evaluateStatus == null || o.EvaluateStatus == evaluateStatus.Value) && (refundStatus == null || (o.RefundStatus == refundStatus.Value || (extentRefundStatus != null && o.RefundStatus == extentRefundStatus.Value))) && (noKeywords || o.OrderNo.Contains(keywords))).Include(o => o.OrderGoods).OrderByDescending(o => o.CreateTime); totalCount = query.Count(); var orders = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); foreach (var order in orders) { foreach (var goods in order.OrderGoods) { goods.GoodsImage = _storageFileService.GetFiles(goods.Id, OrderProcessModule.Key, "GoodsImage") .FirstOrDefault(); } } return(orders); } }
public bool SetShippingInfo(Guid orderId, Guid shippingId, string shippingName, string shippingCode, string shippingNo) { using (var dbContext = new OrderProcessDbContext()) { var order = dbContext.Orders.Include(o => o.OrderGoods).FirstOrDefault(o => o.Id.Equals(orderId)); if (order != null && (!order.ShippingId.Equals(shippingId) || !order.ShippingNo.Equals(shippingNo, StringComparison.OrdinalIgnoreCase))) { var memo = $"修改物流:{order.ShippingName}[{order.ShippingNo}]->{shippingName}[{shippingNo}]"; order.ShippingId = shippingId; order.ShippingName = shippingName; order.ShippingCode = shippingCode; order.ShippingNo = shippingNo; if (order.ShippingTime == null) { order.ShippingTime = DateTime.Now; } dbContext.Entry(order).State = EntityState.Modified; var currentUser = _userContainer.CurrentUser; dbContext.OrderActions.Add(new OrderAction { Id = KeyGenerator.GetGuidKey(), OrderId = orderId, Memo = memo, CreateTime = DateTime.Now, OrderStatus = order.OrderStatus, PayStatus = order.PayStatus, ShippingStatus = order.ShippingStatus, EvaluateStatus = order.EvaluateStatus, UserId = currentUser?.Id ?? Guid.Empty.ToString(), UserName = currentUser?.UserName ?? "系统" }); return(dbContext.SaveChanges() > 0); } return(false); } }
/// <summary> /// 订单列表金额统计 /// </summary> /// <returns></returns> public ActionResult StateOrderList() { var result = new DataJsonResult(); //取查询条件 var orderNo = Request.Get("OrderNo"); var checkOrderNo = string.IsNullOrWhiteSpace(orderNo); var consignee = Request.Get("Consignee"); var checkConsignee = string.IsNullOrWhiteSpace(consignee); var memberName = Request.Get("MemberName"); var checkMemberName = string.IsNullOrWhiteSpace(memberName); var orderStatus = Request.Get("OrderStatus"); var checkOrderStatus = string.IsNullOrWhiteSpace(orderStatus); var orderStatusInt = orderStatus.To <int>(); var refundStatus = Request.Get("RefundStatus"); var checkRefundStatus = string.IsNullOrWhiteSpace(refundStatus); var refundStatusInt = refundStatus.To <int>(); var payStatus = Request.Get("PayStatus"); var checkPayStatus = string.IsNullOrWhiteSpace(payStatus); var payStatusInt = payStatus.To <int>(); var shippingStatus = Request.Get("ShippingStatus"); var checkShippingStatus = string.IsNullOrWhiteSpace(shippingStatus); var shippingStatusInt = shippingStatus.To <int>(); var createTimeBegin = Request.Get("CreateTimeBegin"); var checkCreateTimeBegin = string.IsNullOrWhiteSpace(createTimeBegin); var createTimeBeginTime = createTimeBegin.To <DateTime>().DayZero(); var createTimeEnd = Request.Get("CreateTimeEnd"); var checkCreateTimeEnd = string.IsNullOrWhiteSpace(createTimeEnd); var createTimeEndTime = createTimeEnd.To <DateTime>().DayEnd(); var paymentId = Request.Get("PaymentId"); var checkPaymentId = string.IsNullOrWhiteSpace(paymentId); Expression <Func <Order, bool> > expression = l => (checkOrderNo || l.OrderNo.Contains(orderNo)) && (checkConsignee || l.Consignee.Contains(consignee)) && (checkMemberName || l.MemberName.Contains(memberName)) && l.OrderStatus != OrderStatus.Deleted && (checkOrderStatus || (int)l.OrderStatus == orderStatusInt) && (checkRefundStatus || (int)l.RefundStatus == refundStatusInt) && (checkPayStatus || (int)l.PayStatus == payStatusInt) && (checkPaymentId || l.PaymentId.ToString() == paymentId) && (checkShippingStatus || (int)l.ShippingStatus == shippingStatusInt) && (checkCreateTimeBegin || l.CreateTime >= createTimeBeginTime) && (checkCreateTimeEnd || l.CreateTime <= createTimeEndTime); //统计 var totalOrderAmount = 0M; var totalPayFee = 0M; var totalRefundFee = 0M; var totalGoodsAmount = 0M; var totalCouponMoney = 0M; var totalIntegralMoney = 0M; var totalShippingFee = 0M; using (var dbContext = new OrderProcessDbContext()) { var query = dbContext.Orders.Where(expression); totalOrderAmount = query.Sum(me => (decimal?)me.OrderAmount) ?? 0; totalPayFee = query.Sum(me => (decimal?)me.PayFee) ?? 0; totalRefundFee = query.Sum(me => (decimal?)me.RefundFee) ?? 0; totalGoodsAmount = query.Sum(me => (decimal?)me.GoodsAmount) ?? 0; totalCouponMoney = query.Sum(me => (decimal?)me.CouponMoney) ?? 0; totalIntegralMoney = query.Sum(me => (decimal?)me.IntegralMoney) ?? 0; totalShippingFee = query.Sum(me => (decimal?)me.ShippingFee) ?? 0; } result.Data = new { TotalOrderAmount = totalOrderAmount, TotalPayFee = totalPayFee, TotalRefundFee = totalRefundFee, TotalGoodsAmount = totalGoodsAmount, TotalCouponMoney = totalCouponMoney, TotalIntegralMoney = totalIntegralMoney, TotalShippingFee = totalShippingFee }; return(Json(result)); }
public bool ChangeOrderStatus(Guid orderId, OrderStatus orderStatus, PayStatus?payStatus = null, ShippingStatus?shippingStatus = null, EvaluateStatus?evaluateStatus = null, string memo = "") { using (var dbContext = new OrderProcessDbContext()) { var order = dbContext.Orders.Include(o => o.OrderGoods).FirstOrDefault(o => o.Id.Equals(orderId)); if (order != null) { var oldOrderStatus = order.OrderStatus; var oldPayStatus = order.PayStatus; var oldShippingStatus = order.ShippingStatus; var oldEvaluateStatus = order.EvaluateStatus; order.OrderStatus = orderStatus; if (payStatus != null) { order.PayStatus = payStatus.Value; } if (shippingStatus != null) { order.ShippingStatus = shippingStatus.Value; } if (evaluateStatus != null) { order.EvaluateStatus = evaluateStatus.Value; } dbContext.Entry(order).State = EntityState.Modified; var currentUser = _userContainer.CurrentUser; dbContext.OrderActions.Add(new OrderAction { Id = KeyGenerator.GetGuidKey(), OrderId = orderId, Memo = memo, CreateTime = DateTime.Now, OrderStatus = order.OrderStatus, PayStatus = order.PayStatus, ShippingStatus = order.ShippingStatus, EvaluateStatus = order.EvaluateStatus, UserId = currentUser?.Id ?? Guid.Empty.ToString(), UserName = currentUser?.UserName ?? "系统" }); if (dbContext.SaveChanges() > 0) { foreach (var proxy in _orderServiceProxy) { if (proxy.ModuleKey().Equals(order.ModuleKey, StringComparison.OrdinalIgnoreCase)) { proxy.AfterChangeOrderStatus(order, oldOrderStatus); if (payStatus != null) { proxy.AfterChangePayStatus(order, oldPayStatus); } if (shippingStatus != null) { proxy.AfterChangeShippingStatus(order, oldShippingStatus); } if (evaluateStatus != null) { proxy.AfterChangeEvaluateStatus(order, oldEvaluateStatus); } } } return(true); } } return(false); } }
public bool ChangePrice(Guid orderId, Guid orderGoodsId, decimal goodsPrice) { using (var dbContext = new OrderProcessDbContext()) { var order = dbContext.Orders.FirstOrDefault(o => o.Id.Equals(orderId)); if (order == null || order.OrderStatus != OrderStatus.PendingPayment) { throw new Exception("订单状态不合法"); } else { var orderGoods = dbContext.OrderGoods.FirstOrDefault(og => og.Id.Equals(orderGoodsId)); if (orderGoods == null) { throw new Exception("订单商品未找到"); } else { var oldGoodsPrice = orderGoods.Price; orderGoods.Price = goodsPrice; //差价 var difference = (orderGoods.Price - oldGoodsPrice) * orderGoods.Quantity; //计算商品总价 order.GoodsAmount = order.GoodsAmount + difference; //order.OrderGoods.Sum(g => g.Price * g.Quantity); //计算订单总价 order.OrderAmount = order.GoodsAmount + order.ShippingFee; //计算之前折抵的积分还值多少钱 var systemConfig = _configService.Get <SystemConfig>(); var integralMoney = (decimal)order.Integral / 100 * systemConfig.DiscountRate; using (TransactionScope scope = new TransactionScope()) { //如果是降价,并且抵扣的费用比商品总价高了,退还积分 string error = null; if (oldGoodsPrice > orderGoods.Price && order.GoodsAmount < integralMoney) { //新费用需要多少积分 var integral = (int)(order.GoodsAmount / systemConfig.DiscountRate * 100); //计算节省了多少积分 var refundIntegral = order.Integral - integral; order.Integral = integral; order.IntegralMoney = order.GoodsAmount; _walletService.Deposit(order.MemberId, Wallet.Models.WalletType.Integral, refundIntegral, "修改订单产品价格,退还积分", out error); } if (string.IsNullOrWhiteSpace(error)) { //计算需要支付的费用 order.PayFee = order.GoodsAmount - order.IntegralMoney + order.ShippingFee; order.UnpayFee = order.PayFee; dbContext.Entry(orderGoods).State = EntityState.Modified; dbContext.Entry(order).State = EntityState.Modified; Logger.Operation( $"{_userContainer.CurrentUser.UserName}修改了订单{order.OrderNo}中的商品【{orderGoods.GoodsName}】的价格为{orderGoods.Price}", OrderProcessModule.Instance, SecurityLevel.Danger); if (dbContext.SaveChanges() > 0) { scope.Complete(); } return(true); } } } } } return(false); }