示例#1
0
文件: DbService.cs 项目: ipax77/www
        public async Task Delete(WwwContext context, WwwClass wwwClass, bool bulk = false)
        {
            var entities = await context.wwwEntities.Where(x => x.WwwClass == wwwClass).ToListAsync();

            foreach (var ent in entities)
            {
                await Delete(context, ent, true);
            }

            context.wwwClasses.Remove(wwwClass);
            if (bulk == false)
            {
                await context.SaveChangesAsync();
            }
        }
示例#2
0
文件: DbService.cs 项目: ipax77/www
        public async Task <WwwFeedback> Submit(WwwContext context, EntityRunFormData data, bool bulk = false)
        {
            if (data.Identifier == WwwData.Admin && data.Credential == WwwData.AdminCredential)
            {
                return new WwwFeedback()
                       {
                           EntPosition = 1337,
                           SchoolTotal = 1337
                       }
            }
            ;

            if (data.Credential != WwwData.Credential)
            {
                return new WwwFeedback()
                       {
                           EntPosition = -1
                       }
            }
            ;

            await semaphoreSlim.WaitAsync();

            WwwEntity ent = null;

            try
            {
                var walk = await context.wwwWalks.FirstAsync(f => f.Name == WwwData.s_walk);

                // var school = await context.wwwSchools.FirstAsync(f => f.Name == WwwData.s_school);
                var school = await context.wwwSchools.FirstAsync(f => f.WwwWalk == walk);

                WwwClass wwwClass = await context.wwwClasses.FirstOrDefaultAsync(f => f.Name == data.SchoolClass);

                WwwEntity entity = await context.wwwEntities
                                   .Include(i => i.WwwClass)
                                   .FirstOrDefaultAsync(f => f.Pseudonym == data.Identifier);

                if (wwwClass == null)
                {
                    if (wwwClass == null)
                    {
                        wwwClass           = new WwwClass();
                        wwwClass.WwwSchool = school;
                        wwwClass.Name      = data.SchoolClass;
                        wwwClass.Year      = 0;
                        string year = String.Empty;
                        for (int i = 0; i < wwwClass.Name.Length; i++)
                        {
                            if (Char.IsDigit(wwwClass.Name[i]))
                            {
                                year += wwwClass.Name[i];
                            }
                            else
                            {
                                break;
                            }
                        }
                        int iyear = 0;
                        if (int.TryParse(year, out iyear))
                        {
                            wwwClass.Year = iyear;
                        }
                        context.wwwClasses.Add(wwwClass);
                    }
                    await context.SaveChangesAsync();
                }

                if (entity == null)
                {
                    entity                     = new WwwEntity();
                    wwwClass.WwwSchool         = school;
                    wwwClass.WwwSchool.WwwWalk = walk;
                    entity.WwwClass            = wwwClass;
                    entity.Pseudonym           = data.Identifier;
                    context.wwwEntities.Add(entity);

                    wwwClass.TotalEntities++;
                    school.TotalEntities++;
                    walk.TotalEntities++;
                }

                if (entity.WwwClass == wwwClass)
                {
                    WwwRun run = new WwwRun();
                    run.WwwEntity = entity;
                    run.Time      = data.Time;
                    run.Distance  = data.Distance;

                    context.wwwRuns.Add(run);

                    entity.TotalRuns   += run.Distance;
                    wwwClass.TotalRuns += run.Distance;
                    school.TotalRuns   += run.Distance;
                    walk.TotalRuns     += run.Distance;

                    entity.Runs++;

                    if (bulk == false)
                    {
                        await context.SaveChangesAsync();

                        return(await GetFeedback(context, walk, school, wwwClass, entity));
                    }
                    else
                    {
                        ent = entity;
                        return(null);
                    }
                }
                else
                {
                    return(new WwwFeedback()
                    {
                        EntPosition = -2
                    });
                }
            }
            catch (Exception e)
            {
                logger.LogError(e.Message);
            }
            finally
            {
                semaphoreSlim.Release();
            }
            return(null);
        }
示例#3
0
文件: DbService.cs 项目: ipax77/www
        public async Task <WwwFeedback> GetFeedback(WwwContext context, WwwWalk walk, WwwSchool school, WwwClass wwwclass, WwwEntity entity)
        {
            WwwFeedback feedback = new WwwFeedback();

            feedback.SchoolPosition   = (await context.wwwSchools.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == school.ID) + 1;
            feedback.SchoolPercentage = MathF.Round(school.TotalRuns * 100 / walk.TotalRuns, 2);
            feedback.SchoolTotal      = MathF.Round(school.TotalRuns, 2);
            feedback.ClassPosition    = (await context.wwwClasses.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == wwwclass.ID) + 1;
            feedback.ClassPercentage  = MathF.Round(wwwclass.TotalRuns * 100 / walk.TotalRuns, 2);
            feedback.ClassTotal       = MathF.Round(wwwclass.TotalRuns, 2);
            feedback.EntPosition      = (await context.wwwEntities.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == entity.ID) + 1;
            feedback.EntPercentage    = MathF.Round(entity.TotalRuns * 100 / walk.TotalRuns, 2);
            feedback.EntTotal         = MathF.Round(entity.TotalRuns, 2);

            var years = await context.wwwClasses.AsNoTracking().Select(s => s.Year).Distinct().ToArrayAsync();

            List <KeyValuePair <int, float> > YearList = new List <KeyValuePair <int, float> >();

            foreach (var year in years)
            {
                float sum = await context.wwwClasses.AsNoTracking().Where(x => x.Year == year).SumAsync(s => s.TotalRuns);

                YearList.Add(new KeyValuePair <int, float>(year, sum));
                if (year == wwwclass.Year)
                {
                    feedback.YearTotal = sum;
                }
            }
            feedback.YearPosition   = YearList.Select(s => s.Value).OrderByDescending(o => o).ToList().FindIndex(f => f == feedback.YearTotal) + 1;
            feedback.YearPercentage = MathF.Round(feedback.YearTotal * 100 / walk.TotalRuns, 2);
            return(feedback);
        }