示例#1
0
        /// <summary>
        /// 获取学生的产品级别
        /// 1】学生至少有一个级别
        /// 2】学生级别数量取最接近实际的
        /// </summary>
        /// <returns></returns>
        private async Task <List <string> > GetStudentProductLevelsOfClassAsync(CrmClassCourse cc, CrmClassStudent cs, int ClassPerLevel)
        {
            //学生剩余课时
            var studentWaitHour   = (cs.Clst_ClassHour - cs.Clst_AdjustHour - cs.Clst_FinishHour) * 3;
            var remainHourOfClass = await GetRemainHourOfClassAsync(cc, ClassPerLevel);

            var currentPlName = await GetCurrentProductLevelOfClassAsync(cc, ClassPerLevel);

            var allPlNames = await GetProductLevelsOfClassAsync(cc);

            var startIndex = allPlNames.IndexOf(currentPlName);
            var plCount    = 0;

            if (studentWaitHour <= remainHourOfClass)
            {
                plCount = 1;
            }
            else
            {
                plCount = Convert.ToInt32(Math.Round((decimal)(studentWaitHour - remainHourOfClass) / ClassPerLevel) + 1);
            }
            var plNames = allPlNames.Skip(startIndex).Take(plCount).ToList();

            if (plNames.Count == 0)
            {
                var a = 1;
            }
            return(plNames);
        }
示例#2
0
        /// <summary>
        /// 获取班级的当前级别(逻辑正确)
        /// </summary>
        /// <param name="cc"></param>
        /// <returns></returns>
        private async Task <string> GetCurrentProductLevelOfClassAsync(CrmClassCourse cc, int ClassPerLevel)
        {
            var plCount = Convert.ToInt32(Math.Round((decimal)cc.Clas_ClassHour * 3 / ClassPerLevel));
            var plNames = await GetProductLevelsOfClassAsync(cc, plCount);

            var waitHour = cc.ClassSchedules.Count(e => e.Clsc_Status == 0 && e.Clsc_Deleted == 0);
            var fullHour = waitHour * 3;

            //超过总共的时间,直接从0开始
            if (fullHour >= plCount * ClassPerLevel)
            {
                return(plNames[0]);
            }
            var startIndex = 0;

            if (fullHour != 0 && fullHour % ClassPerLevel == 0)
            {
                startIndex = plCount - (fullHour / ClassPerLevel);
            }
            else
            {
                startIndex = plCount - Convert.ToInt32(Math.Ceiling((decimal)fullHour / ClassPerLevel));
            }
            return(plNames[startIndex]);
        }
示例#3
0
        /// <summary>
        /// 获取班级的所有级别
        /// </summary>
        /// <param name="cc"></param>
        /// <returns></returns>
        private async Task <List <string> > GetProductLevelsOfClassAsync(CrmClassCourse cc, int?plCount = null)
        {
            List <string> plNames    = new List <string>();
            var           newProduct = await GetNewProductByOriginProductAsync(cc.Product);

            var plIds = newProduct.Prod_Levels.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList().Select <string, int>(e => int.Parse(e));

            if (plCount == null)
            {
                plNames = await _productLevelRepository.Where(e => plIds.Contains(e.Prol_ID)).Select(e => e.Prol_Name).OrderBy(e => e).ToListAsync();
            }
            else
            {
                plNames = await _productLevelRepository.Where(e => plIds.Contains(e.Prol_ID)).Select(e => e.Prol_Name).OrderBy(e => e).Take((int)plCount).ToListAsync();
            }
            return(plNames);
        }
示例#4
0
        /// <summary>
        /// 获取班级剩余课时(逻辑正确)
        /// </summary>
        /// <param name="cc"></param>
        /// <returns></returns>
        private async Task <int> GetRemainHourOfClassAsync(CrmClassCourse cc, int ClassPerLevel)
        {
            var waitHour   = cc.ClassSchedules.Count(e => e.Clsc_Status == 0 && e.Clsc_Deleted == 0);
            var plCount    = Convert.ToInt32(Math.Round((decimal)cc.Clas_ClassHour * 3 / ClassPerLevel));
            var remainHour = 0;
            var fullHour   = waitHour * 3;

            //当总课时超过或者是卡在等级上的时候
            if ((fullHour >= plCount * ClassPerLevel) || (fullHour != 0 && fullHour % ClassPerLevel == 0))
            {
                remainHour = ClassPerLevel;
            }
            else
            {
                remainHour = fullHour % ClassPerLevel;
            }
            return(await Task.FromResult(remainHour));
        }