/// <summary> /// 描述:报名时使用优惠券,并修改优惠券状态 /// <para>作 者:瞿琦</para> /// <para>创建时间:2018-11-24</para> /// </summary> /// <param name="couponIdList">优惠券Id集合</param> /// <param name="enrollOrderId">报名订单Id</param> /// <param name="tblDctCouponRepository">优惠券仓储</param> /// <returns>使用的满减和转介绍的优惠券集合</returns> /// <exception cref="AMS.Core.BussinessException"> /// 异常ID:13, 异常描述:全免时不可选择多张优惠券 /// </exception> private List <CouponGenerateResponse> UseCoupon(List <long> couponIdList, long enrollOrderId, TblDctCouponRepository tblDctCouponRepository) { //此方法其实只有转介绍和校长奖学金两种优惠券进来,满减在另外一个方法 var result = new List <CouponGenerateResponse>(); if (!couponIdList.Any()) { return(result); } //优惠券ID集合不为空,则使用优惠券 var couponInfoList = tblDctCouponRepository.GetCouponInfo(couponIdList).Result; //有使用全免优惠券时,不可选择多张优惠券 if (couponInfoList.Count > 1 && couponInfoList.Any(x => x.CouponType == (int)CouponType.HeadmasterBonus && x.IsFreeAll)) { throw new BussinessException(ModelType.Discount, 13); } var fullReduceOrRecommendList = new List <long>(); //满减或者转介绍优惠券Id集合 var headmasterBonusList = new List <long>(); //校长奖学金优惠券Id集合 foreach (var item in couponInfoList) { switch (item.CouponType) { case (int)CouponType.FullReduce: //满减或者转介绍 fullReduceOrRecommendList.Add(item.CouponId); break; case (int)CouponType.Recommend: fullReduceOrRecommendList.Add(item.CouponId); break; //校长奖学金需重新绑定订单Id case (int)CouponType.HeadmasterBonus: if (item.IsFreeAll) //校长奖学金是全免的时候则减免全部学费 { item.Amount = this._totalAmount; _IsFreeAll = true; } headmasterBonusList.Add(item.CouponId); break; } var entity = new CouponGenerateResponse { CouponId = item.CouponId, CouponRuleAmount = item.Amount, //校长奖学金是全免的时候则减免全部学费 CouponType = (CouponType)item.CouponType }; result.Add(entity); } tblDctCouponRepository.UpdateCouponAsync(fullReduceOrRecommendList, Dto.Enum.CouponStatus.HasUse, DateTime.Now, enrollOrderId).Wait(); tblDctCouponRepository.UpdateCouponAsync(headmasterBonusList, Dto.Enum.CouponStatus.HasUse, DateTime.Now, enrollOrderId).Wait(); //使用校长奖学金时需要绑定订单Id return(result); }
/// <summary> /// 描述:添加转介绍优惠券,并修改优惠券的状态 /// <para>作 者:瞿琦</para> /// <para>创建时间:2019-1-10</para> /// </summary> /// <param name="useCouponList">已使用的优惠券信息集合</param> /// <param name="enrollStudentId">报名学生Id</param> /// <param name="recommendStudentId">转介绍人Id(没有转介绍时为空)</param> /// <param name="recommendCouponRuleId">转介绍的规则Id(没有勾选时传空)</param> /// <param name="enrollOrderId">订单表主键</param> /// <param name="tblDctCouponRepository">优惠券表仓储</param> /// <param name="tblDctCouponRuleRepository">优惠信息规则表仓储</param> /// <returns>已使用的转介绍优惠券集合</returns> /// <exception cref="AMS.Core.BussinessException"> /// 异常ID:15, 异常描述:该转介绍奖学金信息不存在 /// </exception> private List <CouponGenerateResponse> OperationRecommendCoupon(List <CouponGenerateResponse> useCouponList, long enrollStudentId, long?recommendStudentId, long?recommendCouponRuleId, long enrollOrderId, TblDctCouponRepository tblDctCouponRepository, TblDctCouponRuleRepository tblDctCouponRuleRepository) { if (recommendStudentId.HasValue && recommendStudentId > 0) //介绍人不为空时才有转介绍优惠 { var couponRuleService = new CouponRuleService(this._schoolId); TblDctCouponRule recommendRuleModel; if (recommendCouponRuleId.HasValue && recommendCouponRuleId > 0) //如果报名页面勾选转介绍 ,则根据id查询转介绍信息 { recommendRuleModel = couponRuleService.GetCouponRuleIdByRuleList(recommendCouponRuleId.Value); if (recommendRuleModel == null) { throw new BussinessException(ModelType.Discount, 15); } } else //如果报名页面没有勾选转介绍 ,则获取本校区转介绍最新优惠信息 { recommendRuleModel = couponRuleService.GetTblDctCouponRuleInfo(); } if (recommendRuleModel != null) //为空代表没有转介绍优惠,有转介绍的话则添加两张优惠券 { var enrollStuCouponId = AddCouponInfo(recommendRuleModel, enrollStudentId, CouponType.Recommend, enrollOrderId, Dto.Enum.CouponStatus.NoUse, tblDctCouponRepository).Result; //同时添加2张优惠券 AddCouponInfo(recommendRuleModel, recommendStudentId.Value, CouponType.Recommend, enrollOrderId, Dto.Enum.CouponStatus.NoUse, tblDctCouponRepository).Wait(); recommendRuleModel.UseQuota = recommendRuleModel.UseQuota + 2; tblDctCouponRuleRepository.Update(recommendRuleModel); //修改使用人数 LogWriter.Write(this, "测试转介绍:" + recommendCouponRuleId); if (recommendCouponRuleId.HasValue && recommendCouponRuleId > 0) //转介绍规则Id不为空,则使用该优惠券 { tblDctCouponRepository.UpdateCouponAsync(enrollStuCouponId, Dto.Enum.CouponStatus.HasUse, DateTime.Now, null).Wait(); //将当前报名学生的优惠券使用掉 修改优惠券状态 var recommendRuleEntity = new CouponGenerateResponse { CouponId = enrollStuCouponId, CouponRuleAmount = recommendRuleModel.CouponAmount, CouponType = CouponType.Recommend }; useCouponList.Add(recommendRuleEntity); } } } return(useCouponList); }
/// <summary> /// 描述:预览生成优惠数据(满减金额+转介绍) /// <para>作 者:瞿琦</para> /// <para>创建时间:2018-11-2</para> /// </summary> /// <param name="studentId">学生Id</param> /// <returns>优惠信息集合</returns> public async Task <List <CouponGenerateResponse> > Peek(long studentId) { var result = new List <CouponGenerateResponse>(); //1.满减信息 var resultFullReduce = new CouponGenerateResponse(); //获取赠与奖学金金额 var query = (await _tblDctCouponRuleRepository.Value.GetAmountByCouponRule(_schoolId, _totalAmount)).FirstOrDefault(); resultFullReduce.CouponRuleId = query?.CouponRuleId ?? 0; resultFullReduce.CouponRuleAmount = query?.CouponAmount ?? 0; resultFullReduce.CouponType = CouponType.FullReduce; result.Add(resultFullReduce); //2.转介绍信息 //获取学生是否有转介绍Id var studentService = new StudentService(_schoolId); var studenInfo = studentService.GetStudent(studentId); //获取学生是否有报名信息 var enrollOrderService = new EnrollOrderService(_schoolId); var studentOrder = enrollOrderService.GetStudentOrders(studentId).Result; if (!studentOrder.Any()) //没有报过名,并且有转介绍人 才返回转介绍信息 { if (studenInfo.ParentId <= 0) { return(result); } var couponRuleService = new CouponRuleService(_schoolId); var couponRuleResult = couponRuleService.GetTblDctCouponRuleInfo(); var resultRecommend = new CouponGenerateResponse { CouponRuleId = couponRuleResult?.CouponRuleId ?? 0, CouponRuleAmount = couponRuleResult?.CouponAmount ?? 0, CouponType = CouponType.Recommend }; result.Add(resultRecommend); } return(result); }
/// <summary> /// 描述:使用满减优惠,并添加优惠券表数据 /// <para>作 者:瞿琦</para> /// <para>创建时间:2018-11-24</para> /// </summary> /// <param name="fullCouponRulId">满减规则Id</param> /// <param name="useCouponList">已使用的优惠券信息集合</param> /// <param name="enrollStudentId">报名学生Id</param> /// <param name="enrollOrderId">订单表主键</param> /// <param name="tblDctCouponRepository">优惠券表仓储</param> /// <param name="tblDctCouponRuleRepository">优惠信息规则表仓储</param> /// <returns>使用的满减优惠券的集合</returns> /// <exception cref="AMS.Core.BussinessException"> /// 异常ID:16, 异常描述:该满减奖学金信息不存在 /// </exception> private List <CouponGenerateResponse> OperationFullReduceCoupon(long?fullCouponRulId, List <CouponGenerateResponse> useCouponList, long enrollStudentId, long enrollOrderId, TblDctCouponRepository tblDctCouponRepository, TblDctCouponRuleRepository tblDctCouponRuleRepository) { //使用满减优惠 if (!fullCouponRulId.HasValue || fullCouponRulId <= 0) { return(useCouponList); } var query = tblDctCouponRuleRepository.GetCouponRuleIdByRuleList(fullCouponRulId.Value).Result; if (query == null) //如果满减不存在 { throw new BussinessException(ModelType.Discount, 16); } //优惠券不能过期 var currentDate = DateTime.Now; if (query.IsDisabled == false && ((query.MaxQuota > 0 && query.UseQuota < query.MaxQuota) || query.MaxQuota == 0) && query.BeginDate <= currentDate && currentDate <= query.EndDate.AddDays(1)) { //添加优惠券并修改使用人数 var fullReduceId = this.AddCouponInfo(query, enrollStudentId, CouponType.FullReduce, enrollOrderId, Dto.Enum.CouponStatus.HasUse, tblDctCouponRepository).Result; //添加满减优惠券 query.UseQuota = query.UseQuota + 1; tblDctCouponRuleRepository.Update(query); //修改使用人数 var fullReduceEntity = new CouponGenerateResponse { CouponId = fullReduceId, CouponRuleAmount = query.CouponAmount, CouponType = CouponType.FullReduce }; useCouponList.Add(fullReduceEntity); } else { throw new BussinessException(ModelType.Discount, 16); } return(useCouponList); }