using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using VOL.Ai.IServices; using VOL.Business.IServices.School; using VOL.Core.Enums; using VOL.Core.Extensions; using VOL.Core.Filters; using VOL.Core.Services; using VOL.Core.Utilities; using VOL.Model; using VOL.Model.Ai; using VOL.Model.Ai.Request; using VOL.Model.IOT.Response; namespace VOL.WebApi.Controllers { /// /// Ai接口 /// [Route("api")] [ApiController] [ApiExplorerSettings(GroupName = "v5")] [TypeFilter(typeof(CustomApiResponseFilter))] [AllowAnonymous] public class AiController : ControllerBase { #region 初始化 private readonly IFaceDetectService _faceDetectService; private readonly IAiService _aiService; private readonly HttpClient _httpClient; public AiController(IFaceDetectService faceDetectService, IAiService aiService, HttpClient httpClient) { _faceDetectService = faceDetectService; _aiService = aiService; _httpClient = httpClient; } #endregion /// /// 学生人脸识别 /// /// /// [HttpPost("student/face")] public async Task Face([FromBody] GetFaceParam paramDto) { //var base64 = paramDto.Base64.Split(',')[1]; var base64 = ""; var res = await _faceDetectService.Face(base64); // return new Ai_FaceInfo() // { // Classes = "1", // ClassName = "一班", // Grade = "1", // GradeName = "一年级", // IdCard = "", // SchoolName = "测试", // SchoolNo = "1", // Age = res.Age, // Sex = (int)res.Sex, // StudentName = res.StudentName, // StudentNo = res.StudentNo, // Nation = "", // }; if (res != null) { return new Ai_StudentFaceInfo() { ClassId = res.ClassId, ClassName = res.ClassName, GradeId = res.GradeId, GradeName = res.GradeName, //IdCard = "", //SchoolName = "测试", //SchoolCode = "1", Age = res.Age, Sex = res.Sex, StudentName = res.StudentName, StudentCode = res.StudentNo }; } return new Ai_StudentFaceInfo(); } /// /// 获取Ai设备信息 /// /// /// /// [HttpGet("device/detail")] public async Task AiDetail(Ai_DeviceRequest paramDto) { long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var json = JsonSerializer.Serialize(paramDto); var signature = IOTSignatureHelper.GenerateSignature(json, timestamp); _httpClient.DefaultRequestHeaders.Add("X-Timestamp", timestamp.ToString()); _httpClient.DefaultRequestHeaders.Add("X-Signature", signature); HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("http://localhost:9991/api/AiApp/Test", content); response.EnsureSuccessStatusCode(); var responseBody = string.Empty; using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync(), Encoding.UTF8)) { responseBody = await reader.ReadToEndAsync(); } //Console.WriteLine($"Response: {responseBody}"); var res = await _aiService.AiDetail(paramDto); return res; } /// /// 获取学校信息 /// /// /// [HttpGet("school/detail")] public async Task AiSchoolDetail(Ai_SchoolRequest paramDto) { var res = await _aiService.AiSchoolDetail(paramDto); return res; } /// /// 学生 /// /// /// [HttpGet("student/list")] public async Task> StudentList(Ai_StudentListRequest paramDto) { var res = await _aiService.StudentList(paramDto); return res; } /// /// 学生详情 /// /// /// [HttpGet("student/detail")] public async Task StudentDetail(Ai_StudentDetailRequest paramDto) { var res = await _aiService.StudentDetail(paramDto); return res; } /// /// 阿里云OSS获取上传文件的签名 /// /// /// [HttpGet("oss/policy")] public async Task OSSPolicy(Ai_Request paramDto) { return new Ai_OSSSignDto() { Accessid = "1", Policy = 1, Dir = "/", Expire = "30", Host = "127.0.0.1", Signature = "xxxx" }; } /// /// 阿里云OSS获取上传文件的配置信息 /// /// /// [HttpGet("oss/info")] public async Task OSSInfo(Ai_Request paramDto) { return new Ai_OSSInfoDto() { Accessid = "1", AccessKeySecret = "1", BucketName = "1", Endpoint = "127.0.0.1", Prefix = "1" }; } /// /// 局域网OSS上传文件 /// /// /// [HttpPost("oss/upload")] public async Task OSSUpload(IFormFile file) { Logger.Info(LoggerType.System, "局域网OSS上传文件"); return new Ai_OSSUploadDto() { FileName = "FileName", Url = "/" }; } /// /// AI设备上传学生测试成绩 /// /// /// [HttpPost("result/upload")] public async Task ResultUpload([FromBody] Ai_ResultUploadRequest paramDto) { await _aiService.ResultUpload(paramDto); return Ok("上传成功"); } /// /// 接收AI设备的心跳 /// /// /// [HttpPost("device/heartbeat")] public async Task Heartbeat([FromBody] Ai_Request paramDto) { Logger.Info(LoggerType.System, paramDto.Serialize(), paramDto.Serialize(), "接收AI设备的心跳"); return Ok("上传成功"); } /// /// AI设备上传成绩关联文件 /// /// /// [HttpPost("result/files")] public async Task ResultFiles([FromBody] Ai_Request paramDto) { Logger.Info(LoggerType.System, paramDto.Serialize(), paramDto.Serialize(), "AI设备上传成绩关联文件"); return Ok("上传成功"); } /// /// 获取项目类型 /// /// [HttpGet(nameof(GetAiCategoryType))] public async Task> GetAiCategoryType() { return await _aiService.GetAiCategoryType(); } /// /// 年级班级 /// /// /// [HttpGet("school/grades")] public async Task> AiGradesList(string deviceSn) { var res = await _aiService.AiGradesList(deviceSn); return res; } /// /// 成绩排名 /// /// /// [HttpGet("result/ranking")] public async Task> AiGradesList([FromQuery] Ai_RankingListRequest paramDto) { var res = await _aiService.AiScoreRanking(paramDto); return res; } } }