Beispiel #1
0
        /// <summary>
        ///  描述:获取赠与奖学金设置列表
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-10-29</para>
        /// </summary>
        /// <param name="request">列表筛选条件</param>
        /// <returns>赠与奖学金分页列表</returns>

        public static PageResult <CouponRuleListResponse> GetList(CouponRuleListSearchRequest request)
        {
            var result = new PageResult <CouponRuleListResponse>();
            var query  = new TblDctCouponRuleRepository().GetList(request);

            result.Data        = Mapper.Map <List <TblDctCouponRule>, List <CouponRuleListResponse> >(query.Data);
            result.CurrentPage = query.CurrentPage;
            result.PageSize    = query.PageSize;
            result.TotalData   = query.TotalData;

            //判断奖学金是否生效
            var currentDate = DateTime.Now;

            foreach (var item in result.Data)
            {
                var effectType = CouponRuleStatus.Effect;

                if (item.BeginDate <= currentDate && currentDate <= item.EndDate.AddDays(1))
                {
                    effectType = CouponRuleStatus.Effect;
                }
                else if (item.BeginDate >= currentDate)
                {
                    effectType = CouponRuleStatus.WaitEffect;
                }
                else if (item.EndDate.AddDays(1) <= currentDate)
                {
                    effectType = CouponRuleStatus.NoEffect;
                }

                item.EffectType = effectType;
            }
            return(result);
        }
Beispiel #2
0
        /// <summary>
        ///  描述:开关
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-10-29</para>
        /// </summary>
        /// <param name="couponId">优惠券Id</param>
        /// <param name="disabled">是否启用</param>
        /// <returns>无</returns>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:1, 异常描述:该奖学金信息不存在
        /// </exception>
        private static void SetSwitch(long couponId, bool disabled)
        {
            var resultModel = new TblDctCouponRuleRepository().Load(x => x.CouponRuleId == couponId);

            if (resultModel == null)
            {
                throw new BussinessException(ModelType.Discount, 1);
            }

            resultModel.IsDisabled = disabled;
            new TblDctCouponRuleRepository().Update(resultModel);
        }
Beispiel #3
0
        /// <summary>
        ///  描述:启用
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-10-29</para>
        /// </summary>
        /// <param name="couponId">优惠券Id</param>
        /// <returns>无</returns>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:11, 异常描述:此时间段内已存在转介绍的优惠设置
        /// </exception>
        public static void SetEnable(long couponId)
        {
            //当前优惠券的信息
            var resultModel = new TblDctCouponRuleRepository().Load(x => x.CouponRuleId == couponId);
            //判断是否存在其他优惠券的信息
            var result = new CouponRuleService(resultModel.SchoolId).GetTypeByCouponRule(CouponType.Recommend)
                         .Where(x => x.CouponRuleId != couponId);

            if (resultModel.CouponType == (int)CouponType.Recommend)
            {
                if (result.Any(item => (item.BeginDate <= resultModel.BeginDate && resultModel.BeginDate <= item.EndDate) || (item.BeginDate <= resultModel.EndDate && resultModel.EndDate <= item.EndDate)))
                {
                    throw new BussinessException(ModelType.Discount, 11);
                }
            }
            SetSwitch(couponId, false);
        }
        /// <summary>
        /// 描述:订单作废,退回优惠券
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间: 2018-11-2</para>
        /// </summary>
        /// <param name="couponIds">退回优惠券Id</param>
        /// <param name="signUpStudengId">报名学生Id</param>
        /// <param name="unitOfWork">事务</param>
        /// <returns>无</returns>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:9, 异常描述:修改赠与奖学金使用人数失败
        /// </exception>
        public static void RefundCoupon(IEnumerable <long> couponIds, long signUpStudengId, UnitOfWork unitOfWork)
        {
            TblDctCouponRepository     tblDctCouponRepository     = unitOfWork.GetCustomRepository <TblDctCouponRepository, TblDctCoupon>();
            TblDctCouponRuleRepository tblDctCouponRuleRepository = unitOfWork.GetCustomRepository <TblDctCouponRuleRepository, TblDctCouponRule>();

            //获取到优惠券的信息
            var couponInfoList = tblDctCouponRepository.GetCouponInfo(couponIds).Result;
            var fullReduceOrRecommendIdList = new List <long>();

            var enrollOrderIdLists = couponInfoList.Select(x => x.EnrollOrderId);
            //根据订单号获取优惠券
            var couponList = tblDctCouponRepository.GetEnrollOrderByCoupon(enrollOrderIdLists.Distinct());

            foreach (var item in couponList)
            {
                if (item.CouponType == (int)CouponType.Recommend && item.StudentId != signUpStudengId && item.Status == (int)Dto.Enum.CouponStatus.HasUse && item.UseTime.HasValue)   //如果已使用则不作废
                {
                    continue;
                }

                if (item.CouponType == (int)CouponType.FullReduce || item.CouponType == (int)CouponType.Recommend)    //满减奖学金或者 转介绍 ,将已发放优惠券改为作废
                {
                    item.Status = (int)Dto.Enum.CouponStatus.Invalid;
                    fullReduceOrRecommendIdList.Add(item.FromId);
                }
                else if (item.CouponType == (int)CouponType.HeadmasterBonus)  //校长奖学金,将已发放优惠券改为未使用
                {
                    item.Status = (int)Dto.Enum.CouponStatus.NoUse;
                }
                tblDctCouponRepository.Update(item);
            }

            if (fullReduceOrRecommendIdList.Any())
            {
                var flag = tblDctCouponRuleRepository.UpdateUseQuotaAsync(fullReduceOrRecommendIdList, -1).Result;  //使用人数-1  //修改赠与奖学金表的使用人数
                if (!flag)
                {
                    throw new BussinessException(ModelType.Discount, 9);
                }
            }
        }
        /// <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);
        }
        /// <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="couponIdList">优惠券主键Id,没有可用的优惠券集合为空</param>
        /// <param name="enrollStudentId">报名学生</param>
        /// <param name="recommendStudentId">被介绍人(没有转介绍时为空)</param>
        /// <param name="recommendCouponRuleId">转介绍的规则Id(没有勾选时传空)</param>
        /// <param name="fullCouponRulId">满减规则Id</param>
        /// <param name="enrollOrderId">订单表主键</param>
        /// <param name="unitOfWork">事务</param>
        /// <returns>使用的优惠券集合</returns>

        public List <CouponGenerateResponse> Create(List <long> couponIdList, long enrollStudentId, long?recommendStudentId, long?recommendCouponRuleId, long?fullCouponRulId, long enrollOrderId, UnitOfWork unitOfWork)
        {
            TblDctCouponRepository     tblDctCouponRepository     = unitOfWork.GetCustomRepository <TblDctCouponRepository, TblDctCoupon>();
            TblDctCouponRuleRepository tblDctCouponRuleRepository = unitOfWork.GetCustomRepository <TblDctCouponRuleRepository, TblDctCouponRule>();

            //1.报名时先使用优惠券,并修改优惠券状态
            var result = UseCoupon(couponIdList, enrollOrderId, tblDctCouponRepository);

            //2.添加转介绍优惠券,并修改优惠券的状态
            result = OperationRecommendCoupon(result, enrollStudentId, recommendStudentId, recommendCouponRuleId, enrollOrderId, tblDctCouponRepository, tblDctCouponRuleRepository);

            #region  暂时不需要用到,防止变更先注释
            ////筛选出转介绍的优惠券
            //var recommendList = result.Where(x => x.CouponType == CouponType.Recommend).Select(x => x.CouponId);
            ////根据优惠券Id找到赠与奖学金表Id,并修改使用人数和状态
            //var couponRuleIdList = (await tblDctCouponRepository.GetCouponInfo(recommendList)).Select(x => x.FromId);

            ////如果有转介绍的名额,则修改使用人数, 使用人数+1,
            ////修改赠与奖学金表名额(转介绍)
            //await tblDctCouponRuleRepository.UpdateUseQuotaAsync(couponRuleIdList, 1);

            //2.添加转介绍优惠券,并修改优惠券的状态
            //if (recommendStudentId.HasValue)   //介绍人不为空时才有转介绍优惠
            //{
            //    var couponRuleService = new CouponRuleService(this._schoolId);
            //    TblDctCouponRule recommendRuleModel;
            //    if (recommendCouponRuleId.HasValue)  //如果报名页面勾选转介绍 ,则根据id查询转介绍信息
            //    {
            //        recommendRuleModel = couponRuleService.GetCouponRuleIdByRuleList(recommendCouponRuleId.Value);
            //        if (recommendRuleModel == null)
            //        {
            //            throw new BussinessException(ModelType.Discount, 15);
            //        }
            //    }
            //    else //如果报名页面没有勾选转介绍 ,则获取本校区转介绍最新优惠信息
            //    {
            //        recommendRuleModel = couponRuleService.GetTblDctCouponRuleInfo();
            //    }

            //    if (recommendRuleModel != null)  //为空代表没有转介绍优惠,有转介绍的话则添加两张优惠券
            //    {
            //        var enrollStuCouponId = await AddCouponInfo(recommendRuleModel, enrollStudentId, CouponType.Recommend, enrollOrderId, Dto.Enum.CouponStatus.NoUse, unitOfWork);  //同时添加2张优惠券
            //        await AddCouponInfo(recommendRuleModel, recommendStudentId.Value, CouponType.Recommend, enrollOrderId, Dto.Enum.CouponStatus.NoUse, unitOfWork);

            //        recommendRuleModel.UseQuota = recommendRuleModel.UseQuota + 2;
            //        await tblDctCouponRuleRepository.UpdateTask(recommendRuleModel);  //修改使用人数

            //        if (recommendCouponRuleId.HasValue)   //转介绍规则Id不为空,则使用该优惠券
            //        {
            //            await tblDctCouponRepository.UpdateCouponAsync(enrollStuCouponId, Dto.Enum.CouponStatus.HasUse, DateTime.Now, null);  //将当前报名学生的优惠券使用掉 修改优惠券状态

            //            var recommendRuleEntity = new CouponGenerateResponse
            //            {
            //                CouponId = enrollStuCouponId,
            //                CouponRuleAmount = recommendRuleModel.CouponAmount,
            //                CouponType = CouponType.Recommend
            //            };
            //            result.Add(recommendRuleEntity);
            //        }
            //    }
            //}
            //3.使用满减优惠,并添加优惠券表数据
            //if (_totalAmount > 0)   //使用满减优惠
            //{
            //    var query = (await tblDctCouponRuleRepository.GetAmountByCouponRule(this._schoolId, this._totalAmount)).FirstOrDefault();
            //    if (query != null)
            //    {
            //        //添加优惠券并修改使用人数
            //        var fullReduceId = await this.AddCouponInfo(query, enrollStudentId, CouponType.FullReduce, enrollOrderId, Dto.Enum.CouponStatus.HasUse, unitOfWork);   //添加满减优惠券

            //        query.UseQuota = query.UseQuota + 1;
            //        await tblDctCouponRuleRepository.UpdateTask(query);  //修改使用人数

            //        var fullReduceEntity = new CouponGenerateResponse
            //        {
            //            CouponId = fullReduceId,
            //            CouponRuleAmount = query.CouponAmount,
            //            CouponType = CouponType.FullReduce
            //        };
            //        result.Add(fullReduceEntity);
            //    }
            //}
            #endregion

            //3.使用满减优惠,并添加优惠券表数据
            if (_IsFreeAll)
            {
                return(result);              //如果是全免则没有满减优惠
            }
            result = OperationFullReduceCoupon(fullCouponRulId, result, enrollStudentId, enrollOrderId, tblDctCouponRepository, tblDctCouponRuleRepository);

            return(result);
        }