/// <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); }
/// <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]); }
/// <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); }
/// <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)); }