Beispiel #1
0
        /// <summary>
        /// 获取未交接的报班订单列表(问题单与未交接)
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-21</para>
        /// </summary>
        /// <param name="personalId">招生专员Id</param>
        /// <returns>收款交接订单添加的实体列表</returns>
        public List <OrderHandleAddResponse> GetUnHandleAddList(string personalId)
        {
            var result = new List <OrderHandleAddResponse>();
            //获取招生专员对应的学生报名信息
            var enrollOrderInfoList = new EnrollOrderService(_schoolId).GetEnrollOrderByCreatorId(personalId).Result.Where(a => a.OrderStatus == (int)OrderStatus.Paid).ToList();

            if (enrollOrderInfoList != null && enrollOrderInfoList.Count > 0)
            {
                //获取招生专员对应的订单交接核对明细信息
                var handoverDetailList = _detailRepository.Value.GetDetailsByPersonalId(_schoolId, personalId).Result;
                //获取报班订单问题单/未交接的数据
                var enrollOrderList = enrollOrderInfoList.Where(a => !handoverDetailList.Any(b => b.OrderId == a.EnrollOrderId && b.OrderTradeType == (int)OrderTradeType.EnrollOrder) ||
                                                                (handoverDetailList.Exists(c => a.EnrollOrderId == c.OrderId && c.OrderTradeType == (int)OrderTradeType.EnrollOrder && c.HandoverStatus == (int)HandoverStatus.Problematic)));
                if (enrollOrderList != null && enrollOrderList.Any())
                {
                    result = enrollOrderList.Select(a => new OrderHandleAddResponse
                    {
                        OrderId        = a.EnrollOrderId,
                        OrderTradeType = (int)OrderTradeType.EnrollOrder,
                        CreateTime     = a.CreateTime
                    }).ToList();
                }
            }
            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// 学生写生排课
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2019-01-05</para>
        /// </summary>
        /// <param name="request">学期班级学生请求参数</param>
        /// <param name="lifeClassInfo">写生课信息</param>
        /// <param name="lessonClassList">报班明细信息</param>
        /// <returns>写生排课结果</returns>
        private LifeClassResultResponse MakeLessonForStudent(List <TimeLessonClassRequest> request, TblTimLifeClass lifeClassInfo, List <ViewTimeLessonClass> lessonClassList)
        {
            LifeClassResultResponse resultResponse = new LifeClassResultResponse();

            foreach (var studentId in lessonClassList.Select(a => a.StudentId).Distinct())
            {
                lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_AMSSCHOOLSTUDENT, _schoolId, studentId.ToString()))
                {
                    //1.获取学生对应的课次信息
                    var studentLessonList = lessonClassList.Where(a => a.StudentId == studentId);

                    //2.获取报名订单课程明细信息
                    var studentEnrollItemList = EnrollOrderService.GetEnrollOrderItemByItemId(studentLessonList.Select(a => a.EnrollOrderItemId).Distinct());

                    //3.获取需要生成的写生课明细、一个学生多个班级列表和课次不够的学生列表
                    var result = GetLifeClassLesson(request, lifeClassInfo, studentLessonList, studentEnrollItemList);
                    resultResponse.LackTimeList.AddRange(result.Item1);                   //获取课次不够的学生列表
                    List <LifeClassLessonMakeRequest> lifeClassLessonList = result.Item2; //获取写生课明细
                    resultResponse.StudentClassList.AddRange(result.Item3);               //获取一个学生多个班级列表

                    //4.进行写生排课
                    MakeLifeClass(lifeClassInfo, lifeClassLessonList);
                }
            }
            return(resultResponse);
        }
Beispiel #3
0
        /// <summary>
        /// 对写生排课进行数据校验
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-20</para>
        /// </summary>
        /// <param name="request">学期班级学生实体请求对象</param>
        /// <param name="lifeClassInfo">写生课对象</param>
        /// <param name="lessonClassList">课次基础信息表</param>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:
        /// 13. 系统不存在该写生课信息
        /// 28. 系统不存在该报名订单课程明细信息
        /// 29. 请选择学生进行写生排课
        /// </exception>
        private void CheckDataBeforeMake(List <TimeLessonClassRequest> request, TblTimLifeClass lifeClassInfo, List <ViewTimeLessonClass> lessonClassList)
        {
            //获取写生课信息
            if (lifeClassInfo == null)
            {
                throw new BussinessException(ModelType.Timetable, 13);
            }
            if (request == null || request.Count == 0)
            {
                throw new BussinessException(ModelType.Timetable, 29);
            }

            //获取报名订单课程明细信息
            var enrollOrderItemInfoList = EnrollOrderService.GetEnrollOrderItemByItemId(lessonClassList.Select(a => a.EnrollOrderItemId).Distinct());

            //检查课次基础信息是否存在
            var classEnrollOrderItemList = lessonClassList.Where(a => request.Any(b => b.TermId == a.TermId && b.ClassId == a.ClassId)).GroupBy(g => new { g.EnrollOrderItemId, g.StudentId, g.ClassId })
                                           .Select(s => new { s.Key.ClassId, s.Key.EnrollOrderItemId, s.Key.StudentId });

            //如果学生不存在课次基础信息,则直接抛出异常信息
            if (!enrollOrderItemInfoList.Exists(a => classEnrollOrderItemList.Any(b => b.EnrollOrderItemId == a.EnrollOrderItemId) && a.Status == (int)OrderItemStatus.Enroll))
            {
                throw new BussinessException(ModelType.Timetable, 28);
            }
        }
 /// <summary>
 /// 描述:课次创建完成后的回调方法
 /// <para>作    者:瞿琦</para>
 /// <para>创建时间:2018-11-7</para>
 /// </summary>
 public void AfterLessonCreate()
 {
     //已排课次的影响
     if (base._entity.ClassTimes != _actualLesson)
     {
         EnrollOrderService service = new EnrollOrderService(base._entity.SchoolId);
         service.AddClassTimesUse(_enrollOrderItemId, base._entity.ClassTimes - _actualLesson, base._unitOfWork);
     }
 }
Beispiel #5
0
        /// <summary>
        /// 获取学生课次费用明细(已排课+未排课)
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-11-8</para>
        /// </summary>
        /// <param name="leaveTime">休学日期</param>
        /// <param name="companyId">公司编号</param>
        /// <returns>报名课次费用明细</returns>
        /// <exception cref="AMS.Core.BussinessException">无</exception>
        internal List <RefundOrderTransactDetailListResponse> GetCourseLessonList(DateTime leaveTime, string companyId)
        {
            //获取所有的课程信息
            var courseList = CourseService.GetAllAsync().Result;
            //获取所有的学期类型
            var termTypeList = new TermTypeService().GetAll();
            //获取所有的课程级别集合
            var courseLevelList = new CourseLevelService(companyId).GetList().Result;

            var enrollOrderTrade = new EnrollOrderService(this._schoolId);
            //已排课的信息
            var studentTimetableService = new StudentTimetableService(this._schoolId, this._studentId);
            var hasLessonList           = studentTimetableService.GetLeaveSchoolLessonCount(leaveTime); //获取休学课次信息

            var enroOrderList = new List <RefundOrderTransactDetailListResponse>();

            var enroOrderItemList = enrollOrderTrade.GetStudentEnroOrderItem(this._studentId, leaveTime);

            foreach (var item in enroOrderItemList)
            {
                var lessonArray = hasLessonList.FirstOrDefault(x => x.EnrollOrderItemId == item.EnrollOrderItemId);
                var lessonCount = lessonArray?.Count ?? 0;                                                    //休学课次
                //上课课次
                var haveClassLesson = item.ClassTimes - (item.ClassTimes - item.ClassTimesUse) - lessonCount; //上课课次=报名课次-未排课次-休学课次
                var refundNum       = item.PayAmount - (haveClassLesson * (item.TuitionFee + item.MaterialFee));
                var refundAmount    = refundNum > 0 ? refundNum : 0;                                          //退费金额=实收金额-扣除金额  退费金额为负数时等于0

                var entity = new RefundOrderTransactDetailListResponse
                {
                    Year               = item.Year,
                    TermTypeId         = item.TermTypeId,
                    TermTypeName       = termTypeList.FirstOrDefault(k => k.TermTypeId == item.TermTypeId)?.TermTypeName,
                    EnrollOrderItemId  = item.EnrollOrderItemId,
                    CourseId           = item.CourseId,
                    CourseName         = courseList.FirstOrDefault(k => k.CourseId == item.CourseId)?.CourseCnName,
                    CourseLevelId      = item.CourseLevelId,
                    CourseLevelName    = courseLevelList.FirstOrDefault(k => k.CourseLevelId == item.CourseLevelId)?.LevelCnName,
                    ClassTimes         = item.ClassTimes,
                    PaidAmount         = item.PayAmount,
                    HaveClassLesson    = haveClassLesson,                                        //上课课次=报名课次-休学课次-未排课课次
                    DeductAmount       = haveClassLesson * (item.TuitionFee + item.MaterialFee), //扣除费用=上课课次*原课次单价
                    LeaveSchoolLessons = lessonCount,                                            //排课部分休学课次
                    RefundAmount       = refundAmount,                                           ////退费金额=实收金额-扣除金额  退费金额为负数时等于0  没有排课时退费金额=实收金额
                    TuitionFee         = item.TuitionFee,
                    MaterialFee        = item.MaterialFee,
                    DiscountFee        = item.DiscountFee,
                    Status             = item.Status
                };
                enroOrderList.Add(entity);
            }

            return(enroOrderList);
        }
Beispiel #6
0
 /// <summary>
 /// 生成写生课之后的操作
 /// <para>作    者:郭伟佳</para>
 /// <para>创建时间:2018-11-13</para>
 /// </summary>
 public void AfterLessonCreate()
 {
     if (this._data != null && this._data.Count > 0)
     {
         //对报名的课程明细的已排课次进行累加
         EnrollOrderService service = new EnrollOrderService(_entity.SchoolId);
         foreach (var itemId in _data.Select(a => a.EnrollOrderItemId).Distinct())
         {
             service.AddClassTimesUse(itemId, _entity.UseLessonCount, _unitOfWork);
         }
     }
 }
        /// <summary>
        /// 描述:根据退费订单的Id获取退费订单的课程明细
        /// <para>作    者:瞿  琦</para>
        /// <para>创建时间:2018-12-20</para>
        /// </summary>
        /// <param name="refundOrderId">退费订单表Id</param>
        /// <param name="companyId">公司编号</param>
        /// <returns>休学订单课程明细</returns>
        internal static List <RefundOrderTransactDetailListResponse> GetRefundCourseAmountDetail(long refundOrderId, string companyId)
        {
            //获取所有的课程信息
            var courseList = CourseService.GetAllAsync().Result;
            //获取所有的学期类型
            var termTypeList = new TermTypeService().GetAll();
            //获取所有的课程级别集合
            var courseLevelList = new CourseLevelService(companyId).GetList().Result;

            var refundCourseList        = new TblOdrRefundOrdeEnrollRepository().GetRefundOrderByOrderEnroll(refundOrderId);
            var leaveSchoolCourseIdList = refundCourseList.Select(x => x.EnrollOrderItemId);

            var courseOrderDetailList = EnrollOrderService.GetEnrollOrderItemIdByEnroOrderList(leaveSchoolCourseIdList);
            var refundCourseDetail    = new List <RefundOrderTransactDetailListResponse>();

            foreach (var item in courseOrderDetailList)
            {
                var refundCourseInfo = refundCourseList.FirstOrDefault(k => k.EnrollOrderItemId == item.EnrollOrderItemId);
                //获取上课课次
                var haveClassLesson = refundCourseInfo?.UseLessonCount ?? 0;
                //获取扣除费用
                var deductAmount = haveClassLesson * (item.MaterialFee + item.TuitionFee);
                //获取休学/退班课次
                var leaveSchoolLessons = refundCourseInfo?.LessonCount ?? 0;
                //获取退费金额
                var refundAmount = refundCourseInfo?.Amount ?? 0;

                var entity = new RefundOrderTransactDetailListResponse
                {
                    Year               = item.Year,
                    TermTypeId         = item.TermTypeId,
                    TermTypeName       = termTypeList.FirstOrDefault(k => k.TermTypeId == item.TermTypeId)?.TermTypeName,
                    EnrollOrderItemId  = item.EnrollOrderItemId,
                    CourseId           = item.CourseId,
                    CourseName         = courseList.FirstOrDefault(k => k.CourseId == item.CourseId)?.CourseCnName,
                    CourseLevelId      = item.CourseLevelId,
                    CourseLevelName    = courseLevelList.FirstOrDefault(k => k.CourseLevelId == item.CourseLevelId)?.LevelCnName,
                    ClassTimes         = item.ClassTimes,
                    PaidAmount         = item.PayAmount,
                    HaveClassLesson    = haveClassLesson,    //上课课次
                    DeductAmount       = deductAmount,       //扣除费用
                    LeaveSchoolLessons = leaveSchoolLessons, //休学/退班课次
                    RefundAmount       = refundAmount,       //退费金额
                    TuitionFee         = item.TuitionFee,
                    MaterialFee        = item.MaterialFee,
                    DiscountFee        = item.DiscountFee,
                };
                refundCourseDetail.Add(entity);
            }

            return(refundCourseDetail);
        }
        /// <summary>
        /// 描述:休学办理
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-11-7</para>
        /// </summary>
        /// <param name="iRequest">休学的相关数据</param>
        /// <param name="companyId">公司编号</param>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:8,异常描述:没有要休学的课程
        /// </exception>
        public override void Transact(IRefundOrderTransactRequest iRequest, string companyId)   //
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_AMSSCHOOLSTUDENT, base._schoolId, base._studentId.ToString()))
            {
                var request = iRequest as LeaveSchoolOrderAddRequest;
                //获取学生课次费用明细
                var courseLessonList = base.GetCourseLessonList(request.LeaveTime, companyId);

                if (!courseLessonList.Any()) //如果订单课程已休学则获取不到学生课次费用明细,则抛出异常
                {
                    throw new BussinessException(ModelType.Order, 8);
                }

                using (var unitOfWork = new UnitOfWork())
                {
                    try
                    {
                        unitOfWork.BeginTransaction();
                        //1.写入退费订单主表                      --休学订单表
                        var refundOrder = AddOdrRefundOrder(request, courseLessonList, unitOfWork);
                        //2.写入退费订单课程明细
                        AddOdrRefundOrdeEnroll(courseLessonList, refundOrder, unitOfWork);
                        //3.写入休学表详细信息表
                        var leaveSchoolOrder = AddOdrLeaveSchoolOrder(request, courseLessonList, refundOrder, unitOfWork);
                        //4.添加附件
                        AddAttachment(request, leaveSchoolOrder, unitOfWork);
                        //5、课次调用
                        LeaveSchoolLessonFinisher leaveSchoolFinisher = new LeaveSchoolLessonFinisher(refundOrder, leaveSchoolOrder, unitOfWork);
                        LessonService             lessonService       = new LessonService(unitOfWork);
                        lessonService.Finish(leaveSchoolFinisher);//课次销毁
                        //6、资金调用
                        LeaveSchoolOrderTrade orderTrade = new LeaveSchoolOrderTrade(refundOrder);
                        TradeService          trade      = new TradeService(orderTrade, unitOfWork);
                        trade.Trade();
                        //7、修改课程明细表为休学状态
                        EnrollOrderService service = new EnrollOrderService(this._schoolId);
                        var enrollOrderItemIdList  = courseLessonList.Select(x => x.EnrollOrderItemId).ToList();
                        service.ChangeToLeaveSchool(enrollOrderItemIdList, unitOfWork).Wait();
                        //8.修改学生状态
                        var studentService = new StudentService(this._schoolId);
                        studentService.UpdateStudentStatusById(this._studentId, unitOfWork, StudyStatus.Suspension);

                        unitOfWork.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        unitOfWork.RollbackTransaction();
                        throw ex;
                    }
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// 排课之后跟家长确认
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-02-19</para>
        /// </summary>
        public void AfterLessonCreate()
        {
            ValidateObject(_makeLesson);

            //跟家长确认
            _makeLesson.IsConfirm  = true;
            _makeLesson.ClassTimes = _lessonCount;
            _makeLessonRepository.Update(_makeLesson);

            EnrollOrderService service = new EnrollOrderService(_makeLesson.SchoolId);

            service.AddClassTimesUse(_makeLesson.EnrollOrderItemId, this._lessonCount, _unitOfWork);
        }
Beispiel #10
0
        /// <summary>
        /// 获取学生正常的订单
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-11-09</para>
        /// </summary>
        /// <returns>报名订单集合</returns>
        private List <TblOdrEnrollOrder> GetStudentOrders()
        {
            EnrollOrderService enrollOrderService = new EnrollOrderService(_schoolId);

            List <TblOdrEnrollOrder> studentAllOrders = enrollOrderService.GetStudentOrders(_studentId).Result;

            int paid   = (int)OrderStatus.Paid;
            int finish = (int)OrderStatus.Finish;

            List <TblOdrEnrollOrder> studentNormalOrders =
                studentAllOrders.Where(x => x.OrderStatus == paid || x.OrderStatus == finish).ToList();

            return(studentNormalOrders);
        }
        /// <summary>
        /// 取消之后的操作
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-10</para>
        /// </summary>
        public void AfterLessonFinish()
        {
            var lessonInfoList = _lessonRepository.Value.GetByLessonIdTask(_lessonIdList).Result;

            if (lessonInfoList != null && lessonInfoList.Count > 0)
            {
                //对报名的课程明细的已排课次进行扣减
                EnrollOrderService service = new EnrollOrderService(_entity.SchoolId);
                foreach (var itemId in lessonInfoList.Select(a => a.EnrollOrderItemId).Distinct())
                {
                    service.AddClassTimesUse(itemId, -_entity.UseLessonCount, _unitOfWork);
                }
            }
        }
Beispiel #12
0
        /// <summary>
        /// 获取学生报名订单课程明细
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-11-09</para>
        /// </summary>
        /// <param name="enrollOrderId">报名订单ID</param>
        /// <returns>报名订单课程明细集合</returns>
        private List <TblOdrEnrollOrderItem> GetStudentOrderItems(IEnumerable <long> enrollOrderId)
        {
            EnrollOrderService enrollOrderService = new EnrollOrderService(_schoolId);

            //已报名
            int enroll = (int)OrderItemStatus.Enroll;

            List <TblOdrEnrollOrderItem> studentOrderItems =
                enrollOrderService.GetEnrollOrderItemByEnrollOrderId(enrollOrderId)
                .Result
                .Where(x => x.Status == enroll)
                .ToList();

            return(studentOrderItems);
        }
Beispiel #13
0
        /// <summary>
        /// 获取下一需要交接的订单
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-19</para>
        /// </summary>
        /// <param name="personalId">招生专员Id</param>
        /// <param name="orderId">已核对的订单Id</param>
        /// <returns>收款交接订单添加的实体</returns>
        public OrderHandleAddResponse GetNextHandoverOrder(string personalId, long orderId)
        {
            OrderHandleAddResponse result = new OrderHandleAddResponse();
            var enrollOrderInfoList       = new EnrollOrderService(_schoolId).GetEnrollOrderByCreatorId(personalId).Result.Where(a => a.OrderStatus == (int)OrderStatus.Paid).ToList();

            if (enrollOrderInfoList != null && enrollOrderInfoList.Count > 0)
            {
                //获取时间最早的一笔未交接的报名订单,下一步进行核对
                var enrollOrderInfo = enrollOrderInfoList.OrderBy(o => o.CreateTime).FirstOrDefault(a => a.EnrollOrderId != orderId);
                if (enrollOrderInfo != null)
                {
                    result.OrderId        = enrollOrderInfo.EnrollOrderId;
                    result.OrderTradeType = (int)OrderTradeType.EnrollOrder;
                }
            }
            return(result);
        }
Beispiel #14
0
        /// <summary>
        /// 获取报班未交接的列表
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-15</para>
        /// </summary>
        /// <param name="personalId">招生专员Id</param>
        /// <returns>订单未交接列表</returns>
        public List <OrderUnHandoverListResponse> GetUnHandList(string personalId)
        {
            List <OrderUnHandoverListResponse> result = new List <OrderUnHandoverListResponse>();
            //获取招生专员对应的学生报名信息
            var enrollOrderInfoList = new EnrollOrderService(_schoolId).GetEnrollOrderByCreatorId(personalId).Result.Where(a => a.OrderStatus == (int)OrderStatus.Paid).ToList();

            if (enrollOrderInfoList != null && enrollOrderInfoList.Count > 0)
            {
                //获取学生信息
                var studentInfoList = StudentService.GetStudentByIds(enrollOrderInfoList.Select(a => a.StudentId)).Result;
                //获取招生专员对应的订单交接核对明细信息
                var handoverDetailList = _detailRepository.Value.GetDetailsByPersonalId(_schoolId, personalId).Result;
                //过滤报班订单已交接的数据
                var enrollOrderList = enrollOrderInfoList.Where(a => !handoverDetailList.Any(b => b.OrderId == a.EnrollOrderId && b.OrderTradeType == (int)OrderTradeType.EnrollOrder) ||
                                                                (handoverDetailList.Exists(c => a.EnrollOrderId == c.OrderId && c.OrderTradeType == (int)OrderTradeType.EnrollOrder && c.HandoverStatus != (int)HandoverStatus.Handover)));
                foreach (var item in enrollOrderList)
                {
                    //学生对应的学生信息
                    var studentInfo = studentInfoList.FirstOrDefault(s => s.StudentId == item.StudentId);
                    OrderUnHandoverListResponse handoverModel = new OrderUnHandoverListResponse()
                    {
                        OrderId       = item.EnrollOrderId,
                        OrderNo       = item.OrderNo,
                        StudentNo     = studentInfo?.StudentNo,
                        StudentName   = studentInfo?.StudentName,
                        PayAmount     = item.PayAmount,
                        TradeType     = (int)OrderTradeType.EnrollOrder,
                        TradeTypeName = EnumName.GetDescription(typeof(OrderTradeType), (int)OrderTradeType.EnrollOrder),//报班
                        Status        = (int)TransferStatus.UnTransfer,
                        StatusName    = EnumName.GetDescription(typeof(TransferStatus), (int)TransferStatus.UnTransfer),
                        Remark        = item.Remark,
                        CreateTime    = item.CreateTime
                    };
                    //报单订单对应的订单交接核对明细信息
                    var handoverDetail = handoverDetailList.FirstOrDefault(h => h.PersonalId == item.CreateId && h.OrderId == item.EnrollOrderId);
                    if (handoverDetail != null)
                    {
                        handoverModel.Status     = handoverDetail.HandoverStatus.Value;
                        handoverModel.StatusName = EnumName.GetDescription(typeof(HandoverStatus), handoverDetail.HandoverStatus);
                    }
                    result.Add(handoverModel);
                }
            }
            return(result);
        }
        /// <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);
        }
Beispiel #16
0
        /// <summary>
        /// 写生排课(选择学生班级)
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2019-01-03</para>
        /// </summary>
        /// <param name="lifeClassSelectList">学生班级课程对象</param>
        /// <returns>学生课次不够的信息列表</returns>
        internal List <LifeClassLackTimesListResponse> SelectClassToMake(List <LifeClassSelectClassRequest> lifeClassSelectList)
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_LIFE_CLASS, _lifeClassId.ToString()))
            {
                List <LifeClassLackTimesListResponse> result = new List <LifeClassLackTimesListResponse>();

                //1.获取写生课信息
                TblTimLifeClass lifeClassInfo = _repository.Value.GetLifeClassInfo(_lifeClassId);

                foreach (var studentId in lifeClassSelectList.Select(a => a.StudentId).Distinct())
                {
                    lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_AMSSCHOOLSTUDENT, _schoolId, studentId.ToString()))
                    {
                        //2.获取学生对应的班级课程信息
                        var studentLifeList = lifeClassSelectList.Where(a => a.StudentId == studentId);

                        //3.获取报名订单课程明细信息
                        var enrollOrderItemInfoList = EnrollOrderService.GetEnrollOrderItemByItemId(studentLifeList.Select(a => a.EnrollOrderItemId).Distinct());

                        //4.获取课次不够扣的报名订单课程明细信息
                        var enrollNotEnoughTimeList = enrollOrderItemInfoList.Where(a => a.Status == (int)OrderItemStatus.Enroll && a.ClassTimes - a.ClassTimesUse < lifeClassInfo.UseLessonCount);

                        //5.获取课次不够的学生列表
                        result.AddRange(GetNoEnoughTimeList(lifeClassInfo, studentLifeList, enrollNotEnoughTimeList));

                        //6.过滤课次不够的写生排课
                        var lifeClassList = studentLifeList.Where(a => !enrollNotEnoughTimeList.Any(b => b.EnrollOrderItemId == a.EnrollOrderItemId))
                                            .Select(a => new LifeClassLessonMakeRequest()
                        {
                            StudentId         = a.StudentId,
                            ClassId           = a.ClassId,
                            EnrollOrderItemId = a.EnrollOrderItemId
                        }).ToList();

                        //7.写生排课
                        MakeLifeClass(lifeClassInfo, lifeClassList);
                    }
                }
                return(result);
            }
        }
Beispiel #17
0
        /// <summary>
        /// 描述:办理
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-11-8</para>
        /// </summary>
        /// <param name="iRequest">要退费的信息</param>
        /// <param name="companyId">公司编号</param>
        /// <returns>无</returns>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:22,异常描述:找不到可退班的订单课程
        /// 异常ID:20,异常描述:该订单课程已退班退费
        /// </exception>
        public override void Transact(IRefundOrderTransactRequest iRequest, string companyId)
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_AMSSCHOOLSTUDENT, this._schoolId, this._studentId.ToString()))
            {
                var request       = iRequest as LeaveClassOrderAddRequest;
                var vailteRequest = EnrollOrderService.GetEnrollOrderItemIdByEnroOrderList(request.RefundCourseLesson);
                if (!request.RefundCourseLesson.Any())
                {
                    throw new BussinessException((byte)ModelType.Order, 22);
                }
                if (vailteRequest.Any(x => x.Status != OrderItemStatus.Enroll))  //如果订单课程不是已报名,则抛出异常
                {
                    throw new BussinessException((byte)ModelType.Order, 20);
                }

                //获取要退班的课次
                var courseLessonList = base.GetCourseLessonList(request.LeaveTime, companyId).Where(x => request.RefundCourseLesson.Contains(x.EnrollOrderItemId)).ToList();
                if (!courseLessonList.Any()) //如果要退费的订单课程为空,则抛出异常
                {
                    throw new BussinessException((byte)ModelType.Order, 22);
                }

                using (var unitOfWork = new UnitOfWork())
                {
                    try
                    {
                        unitOfWork.BeginTransaction();
                        //1.退费订单
                        var tblOdrRefundOrder = AddOdrRefundOrder(request, courseLessonList, unitOfWork);
                        //2.退费订单课程明细
                        AddOdrRefundOrdeEnroll(courseLessonList, tblOdrRefundOrder, unitOfWork);
                        //3.其他费用
                        AddOdrRefundOrderCost(request, tblOdrRefundOrder, unitOfWork);
                        //4.支付信息
                        AddOdrRefundPay(request, tblOdrRefundOrder, unitOfWork);
                        //5.退班详细信息
                        var tblOdrLeaveClassOrder = AddOdrLeaveClassOrder(request, tblOdrRefundOrder, unitOfWork);
                        //6.添加附件
                        AddAttachment(request, tblOdrRefundOrder, unitOfWork);

                        //7、课次调用
                        LeaveClassLessonFinisher leaveSchoolFinisher = new LeaveClassLessonFinisher(tblOdrRefundOrder, tblOdrLeaveClassOrder, request.RefundCourseLesson, unitOfWork);
                        LessonService            lessonService       = new LessonService(unitOfWork);
                        lessonService.Finish(leaveSchoolFinisher);//课次销毁


                        //8、资金调用
                        LeaveClassOrderTrade orderTrade = new LeaveClassOrderTrade(tblOdrRefundOrder, request.RefundType);
                        TradeService         trade      = new TradeService(orderTrade, unitOfWork);
                        trade.Trade();

                        //9、修改为退班状态
                        EnrollOrderService service = new EnrollOrderService(this._schoolId);
                        var enrollOrderItemIdList  = courseLessonList.Select(x => x.EnrollOrderItemId).ToList();
                        service.ChangeToLeaveClass(enrollOrderItemIdList, unitOfWork).Wait();

                        //10.修改学生状态
                        var studentService = new StudentService(this._schoolId);
                        studentService.UpdateStudentStatusById(this._studentId, unitOfWork);

                        unitOfWork.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        unitOfWork.RollbackTransaction();
                        throw;
                    }
                }
            }
        }