Merge branch 'aiapi2.0' into dev

This commit is contained in:
tanglong 2025-07-09 10:02:26 +08:00
commit a78947ea00
6 changed files with 168 additions and 4 deletions

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Ai.IRepositories
{
/// <summary>
/// Ai扫码登陆
/// </summary>
public interface IScanCodeLoginRepository : IDependency, IRepository<Ai_ScanCodeLogin>
{
}
}

View File

@ -191,6 +191,21 @@ namespace VOL.Ai.IServices
/// <returns></returns>
Task<IsActivityInListDto> IsActivityInList(IsActivityInListRequest paramDto);
/// <summary>
/// Ai一体机扫描那登录轮询
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
Task<Ai_TeacherFaceInfo> ScanCodeLogin(Ai_Request paramDto);
/// <summary>
/// 退出登录
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
Task<bool> LogOut(LoginOutDto paramDto);
#endregion
}
}

View File

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VOL.Ai.IRepositories;
using VOL.Business.IRepositories;
using VOL.Core.BaseProvider;
using VOL.Core.EFDbContext;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Ai.Repositories
{
/// <summary>
/// Ai扫码登陆
/// </summary>
public partial class ScanCodeLoginRepository : RepositoryBase<Ai_ScanCodeLogin>, IScanCodeLoginRepository
{
public ScanCodeLoginRepository(VOLContext dbContext)
: base(dbContext)
{
}
public static IScanCodeLoginRepository Instance
{
get { return AutofacContainerModule.GetService<IScanCodeLoginRepository>(); }
}
}
}

View File

@ -33,7 +33,7 @@ namespace VOL.Ai.Services
private readonly IS_ClassRepository _classRepository;
private readonly IN_SportsTestCategoryRepository _sportsTestCategoryRepository;
private readonly IN_HealthStandardsRepository _healthStandardsRepository;
private readonly IN_SportsTestResultRepository _sportsTestResultRepository;
private readonly IScanCodeLoginRepository _scanCodeLoginRepository;
private readonly IN_SportsTrainingCategoryRepository _sportsTrainingCategoryRepository;
private readonly IClassRoomRecordRepository _classRoomRecordRepository;
private readonly IHeartRateDataRepository _heartRateDataRepository;
@ -50,7 +50,7 @@ namespace VOL.Ai.Services
IS_ClassRepository classRepository,
IN_SportsTestCategoryRepository sportsTestCategoryRepository,
IN_HealthStandardsRepository healthStandardsRepository,
IN_SportsTestResultRepository sportsTestResultRepository,
IScanCodeLoginRepository scanCodeLoginRepository,
IN_SportsTrainingCategoryRepository sportsTrainingCategoryRepository,
IClassRoomRecordRepository classRoomRecordRepository,
IHeartRateDataRepository heartRateDataRepository,
@ -65,7 +65,7 @@ namespace VOL.Ai.Services
_studentRepository = studentRepository;
_sportsTestCategoryRepository = sportsTestCategoryRepository;
_healthStandardsRepository = healthStandardsRepository;
_sportsTestResultRepository = sportsTestResultRepository;
_scanCodeLoginRepository = scanCodeLoginRepository;
_teacherRepository = teacherRepository;
_sportsTrainingCategoryRepository = sportsTrainingCategoryRepository;
_classRoomRecordRepository = classRoomRecordRepository;
@ -842,7 +842,7 @@ namespace VOL.Ai.Services
entity.Year = semesterDto.Year;
entity.Semester = semesterDto.Semester;
var student = await (from s in _studentRepository.FindAsIQueryable(x => x.SchoolCode == paramDto.SchoolCode && x.StudentNo == paramDto.StudentNo)
join c in _studentRepository.DbContext.Set<S_Class>() on s.ClassId equals c.Id
join c in _classRepository.DbContext.Set<S_Class>() on s.ClassId equals c.Id
select new
{
s.ClassId,
@ -1199,5 +1199,65 @@ namespace VOL.Ai.Services
return res;
}
/// <summary>
/// Ai一体机扫描那登录轮询
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
public async Task<Ai_TeacherFaceInfo> ScanCodeLogin(Ai_Request paramDto)
{
var loginInfo = await _scanCodeLoginRepository.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == paramDto.SchoolCode).FirstOrDefaultAsync();
if (loginInfo == null)
return new Ai_TeacherFaceInfo();
var res = await _teacherRepository.FindAsIQueryable(x => x.SchoolCode == paramDto.SchoolCode && x.TeacherStatus != TeacherStatus.Depart && x.TeacherPhoneNo == loginInfo.TeacherPhoneNo && x.Id == loginInfo.TeacherId)
.Select(x =>
new Ai_TeacherFaceInfo()
{
Id = x.Id,
Age = x.Age,
//SchoolCode = x.SchoolCode,
Sex = x.Sex,
Phone = x.TeacherPhoneNo,
TeacherName = x.TeacherName,
Photo = x.TeacherPhoto,
}).FirstOrDefaultAsync();
if (res == null)
throw new Exception("未查询到登陆信息");
var grades = await (
from t in _studentRepository.DbContext.Set<S_ClassAssocTeacher>()
join c in _studentRepository.DbContext.Set<S_Class>() on t.ClassId equals c.Id into classGroup
from c in classGroup.DefaultIfEmpty()
where t.TeacherId == res.Id && c != null
select new Classes()
{
Id = c.Id,
Name = $"{c.GradeName}-{c.ClassName}",
}).ToListAsync();
res.GradeAndClassList = grades;
return res;
}
/// <summary>
/// 退出登录
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
public async Task<bool> LogOut(LoginOutDto paramDto)
{
var teacher = await _scanCodeLoginRepository.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == paramDto.SchoolCode).FirstOrDefaultAsync();
if (teacher == null) return true;
_scanCodeLoginRepository.Delete(teacher);
return await _teacherRepository.SaveChangesAsync() > 0;
}
}
}

View File

@ -77,4 +77,17 @@ namespace VOL.Model.Ai
/// </summary>
//public string StudentNo { get; set; }
}
/// <summary>
/// 退出登录
/// </summary>
public class LoginOutDto : Ai_Request
{
/// <summary>
/// 教师Id
/// </summary>
public int TeacherId { get; set; }
}
}

View File

@ -436,5 +436,31 @@ namespace VOL.WebApi.Controllers
var result = await _aiAppService.FastJumpRopeRanking(paramDto);
return result;
}
/// <summary>
/// Ai一体机扫描那登录轮询
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpPost(nameof(ScanCodeLogin))]
public async Task<Ai_TeacherFaceInfo> ScanCodeLogin([FromBody] Ai_Request paramDto)
{
var result = await _aiAppService.ScanCodeLogin(paramDto);
return result;
}
/// <summary>
/// 退出登录
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpPost(nameof(LogOut))]
public async Task<bool> LogOut([FromBody] LoginOutDto paramDto)
{
var result = await _aiAppService.LogOut(paramDto);
return result;
}
}
}