/// <summary> /// 创建新的积分记录对象(未保存) /// </summary> /// <returns></returns> public MemberIntegralLog CreateNewMemberIntegralLog(string memberId, string orderSN, int changeIntegral, decimal cashAmount, string remark) { MemberIntegralLog memberIntegralLog = new MemberIntegralLog(); memberIntegralLog.CreatedOn = DateTime.Now; memberIntegralLog.MemberId = memberId; memberIntegralLog.OrderSN = orderSN; memberIntegralLog.ChangeIntegral = changeIntegral; memberIntegralLog.CashAmount = cashAmount; memberIntegralLog.Remark = remark; memberIntegralLog.IsDeleted = 0; var member = context.Customers.FirstOrDefault(o => o.Id == memberId && o.IsDeleted != 1); if (member != null) { memberIntegralLog.TotalIntegral = member.Integral + changeIntegral; var memberLevel = context.MemberLevel.FirstOrDefault(o => o.MemberLevelValue == member.MemberLevelValue && o.IsDeleted != 1); if (memberLevel != null) { memberIntegralLog.Multiple = memberLevel.IntegralMultiples; } } return(memberIntegralLog); }
/// <summary> /// 退还积分 /// </summary> /// <param name="orderNo"></param> /// <param name="isCommit"></param> /// <returns></returns> public OpResult SendBackIntegral(string orderNo, bool isCommit = false) { var result = OpResult.Fail("退还积分失败"); var order = context.Orders.Where(o => o.No == orderNo && o.IsDeleted != 1).FirstOrDefault(); if (order != null) { var member = context.Customers.Where(o => o.Id == order.CustomerId && o.IsDeleted != 1).FirstOrDefault(); if (member != null) { if (order.UsedIntegralVal > 0) { //保存退还积分记录 if (order.UsedIntegralVal > 0) { MemberIntegralLog memberIntegralLog = CreateNewMemberIntegralLog(order.CustomerId, order.No, order.UsedIntegralVal, order.ActualPay, string.Format("取消订单,订单号:{0},退还{1}积分", order.No, order.UsedIntegralVal)); memberIntegralLog.Id = CommonRules.GUID; context.MemberIntegralLog.Add(memberIntegralLog); } //先记录,再更新,避免记录时获取Context中已更新的数据 member.Integral = member.Integral + order.UsedIntegralVal; if (isCommit) { context.SaveChanges(); } } } } return(result); }
/// <summary> /// 扣除用户积分 /// </summary> /// <param name="memberId"></param> /// <param name="deductIntegralVal"></param> /// <param name="isCommit"></param> /// <returns></returns> public OpResult DeductMemberIntegral(string memberId, int deductIntegralVal, string orderSN, decimal cashAmount, string currentUserId, bool isCommit = false) { var result = OpResult.Success(); var member = DAL.GetQuery <Customers>(o => o.Id == memberId && o.IsDeleted != 1).FirstOrDefault(); if (member == null) { result = OpResult.Fail("对不起,找不到该会员"); return(result); } if (member.Integral < deductIntegralVal) { result = OpResult.Fail("对不起,会员积分不足"); return(result); } if (deductIntegralVal < 0) { result = OpResult.Fail("对不起,扣除的积分不能小于0"); return(result); } //保存扣除积分记录 if (deductIntegralVal > 0) { MemberIntegralLog memberIntegralLog = CreateNewMemberIntegralLog(memberId, orderSN, -deductIntegralVal, cashAmount, string.Format("订单号:{0},使用{1}积分", orderSN, deductIntegralVal)); DAL.AddOrModify(memberIntegralLog, currentUserId); } //先记录,再更新,避免记录时获取Context中已更新的数据 member.Integral = member.Integral - deductIntegralVal; if (isCommit) { DAL.Commit(); } return(result); }
/// <summary> /// 订单完成时更新会员积分、成长值、现金消费金额、会员等级 /// </summary> /// <param name="orderNo"></param> /// <returns></returns> public OpResult CompletedOrderUpdateMemberInfo(string orderNo) { var result = OpResult.Fail("订单完成时,更新会员信息失败"); try { var order = context.Orders.Where(o => o.No == orderNo && o.IsDeleted != 1).FirstOrDefault(); if (order.Status != OrderStatus.Completed) { result = OpResult.Fail("订单未完成,无法更新会员信息"); return(result); } var member = context.Customers.Where(o => o.Id == order.CustomerId && o.IsDeleted != 1).FirstOrDefault(); if (CommonRules.InternalAccount.Contains(member.Mobile)) {//公司内部账号,不累计积分和成长值 member.TotalActualRMBPay = member.TotalActualRMBPay + order.ActualPay; } else { var memberLevel = context.MemberLevel.Where(o => o.MemberLevelValue == member.MemberLevelValue && o.IsDeleted != 1).FirstOrDefault(); //保存增加积分记录 if ((int)(order.ActualPay * memberLevel.IntegralMultiples) > 0) { MemberIntegralLog memberIntegralLog = CreateNewMemberIntegralLog(order.CustomerId, order.No, (int)(order.ActualPay * memberLevel.IntegralMultiples), order.ActualPay, string.Format("完成订单,订单号:{0},增加{1}积分", order.No, (int)(order.ActualPay * memberLevel.IntegralMultiples))); memberIntegralLog.Id = CommonRules.GUID; context.MemberIntegralLog.Add(memberIntegralLog); } //保存增加成长值记录 if ((int)(order.ActualPay * memberLevel.GrowthValueMultiples) > 0) { MemberGrowthValueLog memberGrowthValueLog = CreateNewMemberGrowthValueLog(order.CustomerId, order.No, (int)(order.ActualPay * memberLevel.GrowthValueMultiples), order.ActualPay, string.Format("完成订单,订单号:{0},增加{1}成长值", order.No, (int)(order.ActualPay * memberLevel.GrowthValueMultiples))); memberGrowthValueLog.Id = CommonRules.GUID; context.MemberGrowthValueLog.Add(memberGrowthValueLog); } //更新会员信息(只计算现金支付部分)(先记录后更新,否则记录中会有两倍成长值) member.Integral = member.Integral + (int)(order.ActualPay * memberLevel.IntegralMultiples); member.GrowthValue = member.GrowthValue + (int)(order.ActualPay * memberLevel.GrowthValueMultiples); member.TotalActualRMBPay = member.TotalActualRMBPay + order.ActualPay; //更新会员等级(取可升级等级值的最大值) var newCurMemberLevel = context.MemberLevel.Where(o => o.MinGrowthValue <= member.GrowthValue && o.IsDeleted != 1).ToList(); if (newCurMemberLevel != null) { var curLevel = newCurMemberLevel.Max(o => o.MemberLevelValue); if (curLevel != member.MemberLevelValue) {//会员等级发生变化 member.UpdateMemberLevelTime = DateTime.Now; } member.MemberLevelValue = curLevel; } } context.SaveChanges(); result = OpResult.Success("更新会员信息成功"); } catch (Exception ex) { result = OpResult.Fail(string.Format("订单完成时,更新会员信息失败,订单号:{0},异常信息:{1}", orderNo, ex.Message)); } return(result); }