using AutoMapper; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Security.Cryptography; using VOL.Entity.DomainModels.XinWei; using YD_XinWei.Api.Context; using YD_XinWei.Api.Services.Interface; using YD_XinWei.Api.SmartSportsEntitys; using YD_XinWei.Api.Utilities; using YD_XinWei.Commons.Dto.Common; using YD_XinWei.Commons.Dto.HomeWork; using YD_XinWei.Commons.Dto.Open; using YD_XinWei.Commons.Dto.School; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace YD_XinWei.Api.Services.Impl { /// /// 服务实现 /// public class XinWeiService : IXinWeiService { public SmartSportsContext _sportsContext; private readonly IMapper _mapper; /// /// 构造 /// /// /// public XinWeiService(SmartSportsContext sportsContext, IMapper mapper) { _sportsContext = sportsContext; _mapper = mapper; } /// /// 获取设备信息 /// /// /// /// public async Task DeviceInfo(string deviceSerial) { var deviceInfo = await _sportsContext.XW_Device.FirstOrDefaultAsync(x => x.DeviceSerial == deviceSerial); var res = _mapper.Map(deviceInfo); return res; } /// /// 项目模式 /// /// public async Task> SportsModelTypeList() { var res = await _sportsContext.XW_ProjectMode.Select(x => new ProjectModeDto() { Id = x.Id, ProjectKind = x.ProjectKind, Name = x.Name }).ToListAsync(); return res; } /// /// 体育项目 /// /// 学校Id /// public async Task> OrgSportsProjectList(int orgId) { var res = await _sportsContext.XW_TestingProject.Where(x => x.OrgId == orgId).Select(x => new TestingProjectDto() { ProjectId = x.ProjectId, IsOpen = x.IsOpen, IsShow = x.IsShow, ProjectName = x.ProjectName }).ToListAsync(); return res; } /// /// 获取学生信息 /// /// 学校Id /// public async Task> MinimumOfStudentInfoList(int orgId) { string schoolCode = await _sportsContext.School.Where(x => x.Id == orgId).Select(x => x.SchoolCode).FirstAsync(); var res = await (from s in _sportsContext.Student join c in _sportsContext.Class on s.ClassId equals c.Id join g in _sportsContext.Grade on c.GradeId equals g.Id where s.SchoolCode == schoolCode select new StudentInfoDto() { Id = s.Id, OrgId = orgId, UserId = s.Id, StudentNo = s.StudentNo, Name = s.StudentName, Sex = s.Sex == 1 ? "男" : "女", ClassId = c.Id, GradeId = g.Id, RuleGradeId = g.Id, ClassName = c.ClassName, GradeName = g.GradeName, CardNo = new List() }).ToListAsync(); return res; } /// /// 获取名单列表 /// /// /// /// /// public async Task> SportsRosterList(int orgId, int userId = 0) { string schoolCode = await _sportsContext.School.Where(x => x.Id == orgId).Select(x => x.SchoolCode).FirstAsync(); var studentList = await _sportsContext.Student.Where(x => x.SchoolCode == schoolCode).ToListAsync(); var list = await (from c in _sportsContext.Class join g in _sportsContext.Grade on c.GradeId equals g.Id where c.SchoolCode == schoolCode select new SportsRosterDto() { Id = c.Id, OrgId = orgId, Name = c.ClassName, GradeId = g.Id, RuleGradeId = g.Id, GradeName = g.GradeName, Status = 1, Type = 1 }).ToListAsync(); foreach (var item in list) { var stuList = studentList.Where(x => x.ClassId == item.Id).ToList(); List sportList = new List(); foreach (var sport in stuList) { sportList.Add(new SportsRosterStudentDto() { Id = sport.Id, GroupName = item.Name, ClassId = item.Id, ClassName = item.Name, GradeId = item.GradeId, GradeName = item.GradeName, OrgId = orgId, Sex = sport.Sex, UserName = sport.StudentName, StudentNo = sport.StudentNo, UserId = sport.Id, GroupOrder = 1, RosterId = 1, }); } item.RosterGroupList.Add(new SportsRosterGroupDto() { GroupName = item.Name, RosterStudentList = sportList }); } return list; } /// /// 获取人脸信息 /// /// /// public async Task FaceListOfDevicePage(FaceListOfDeviceDto dto) { var total = await _sportsContext.Student.CountAsync(); string schoolCode = await _sportsContext.School.Where(x => x.Id == dto.OrgId).Select(x => x.SchoolCode).FirstAsync(); var list = await _sportsContext.Student .Where(x => x.SchoolCode == schoolCode) .Select(s => new DeviceUserFaceVo() { FaceId = s.StudentNo, FaceType = 1, FaceUrl = s.Photo, PersonId = s.IDCard, UserId = s.Id }) .Skip((dto.PageNo - 1) * dto.PageSize) .Take(dto.PageSize) .ToListAsync(); return new FaceListOfDevicePageDto() { Total = total, PageNum = dto.PageNo, Pages = dto.PageSize, List = list }; } /// /// 获取训练评分规则 /// /// 学校Id /// public async Task> ScoreRules(int orgId) { var scoreRules = await _sportsContext.HealthStandards.Where(x => x.CategoryEnum == "Pull_Up").ToArrayAsync(); var groupedData = scoreRules.GroupBy(x => x.GradeId).ToList(); var result = groupedData.Select(group => new ScoreRuleDto { GradeId = group.Key, ProjectKind = 6, ProjectName = "引体向上", MarkType = 1, ModelType = 13, OrgId = orgId, ProjectRuleId = 6, RuleType = 1, ProjectId = 6, Items = group.Select(item => new ScoreRuleItemDto { Id = item.Id, Sex = item.Sex, Name = "1", Score = item.Score, Max = item.MaxValue, Min = item.MinValue }).ToList(), Pluses = new List { new ScoreRulePlusDto() { Id = group.FirstOrDefault()?.Id ?? 0, Sex = 1, Max = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MaxValue), Min = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MinValue), MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score), Score = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score) }, new ScoreRulePlusDto() { Id = group.FirstOrDefault()?.Id ?? 0, Sex = 2, Max = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MaxValue), Min = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MinValue), MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score), Score = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score) } }, ScoreScopes = new List { new ScoreScope() { Gender = 1, MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score), MaxCount = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MaxValue) }, new ScoreScope() { Gender = 2, MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.Score), MaxCount = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x.MaxValue) } } }).ToList(); var scoreRules1 = await _sportsContext.HealthStandards.Where(x => x.CategoryEnum == "One_Minute_Sit_Up").ToArrayAsync(); var groupedData1 = scoreRules1.GroupBy(x => x.GradeId).ToList(); var result1 = groupedData1.Select(group => new ScoreRuleDto { GradeId = group.Key, ProjectKind = 5, ProjectName = "仰卧起坐", MarkType = 1, ModelType = 13, OrgId = orgId, ProjectRuleId = 5, RuleType = 1, ProjectId = 5, Items = group.Select(item => new ScoreRuleItemDto { Id = item.Id, Sex = item.Sex, Name = "1", Score = item.Score, Max = item.MaxValue, Min = item.MinValue }).ToList(), Pluses = new List { new ScoreRulePlusDto() { Id = group.FirstOrDefault()?.Id ?? 0, Sex = 1, Max = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MaxValue), Min = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MinValue), MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score), Score = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score) }, new ScoreRulePlusDto() { Id = group.FirstOrDefault()?.Id ?? 0, Sex = 2, Max = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MaxValue), Min = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MinValue), MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score), Score = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score) } }, ScoreScopes = new List { new ScoreScope() { Gender = 1, MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score), MaxCount = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MaxValue) }, new ScoreScope() { Gender = 2, MaxScore = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.Score), MaxCount = group.Where(x => x.Sex == 1).DefaultIfEmpty().Max(x => x?.MaxValue) } } }).ToList(); return result.Concat(result1).ToList(); } /// /// 新增训练 /// /// /// public async Task AddTrain(AddTrainDto dto) { var entity = _mapper.Map(dto); if (entity != null) { await _sportsContext.XW_SportsTestData.AddAsync(entity); await _sportsContext.SaveChangesAsync(); } } } }