using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using YD_YiLu.Api.Services.Interface; using YD_YiLu.Commons.Dto.DeviceSync; namespace YD_YiLu.Api.Controllers { /// /// 设备同步 HTTP 接口。 /// [AllowAnonymous] public class DeviceSyncController : ControllerBase { private readonly IDeviceSyncService _deviceSyncService; private readonly ILogger _logger; public DeviceSyncController(IDeviceSyncService deviceSyncService, ILogger logger) { _deviceSyncService = deviceSyncService; _logger = logger; } /// /// 人员全量拉取。 /// [HttpPost] [Route("/device/sync/user")] public async Task UserPullFull([FromBody] DeviceSyncUserRequestDto dto) { return await _deviceSyncService.UserSyncAsync(dto.DeviceSerial, dto.DeviceType, dto.UserType); } /// /// 人员分页下发。 /// [HttpPost] [Route("/device/sync/user_page")] public async Task UserPullPage([FromBody] DeviceSyncUserPageRequestDto dto) { if (dto.PageSize <= 0 && !dto.FullSync) dto.PageSize = 10; if (dto.PageIndex < 1) dto.PageIndex = 1; var res = await _deviceSyncService.UserPageAsync(dto); return res; } /// /// user_trace 别名。 /// [HttpPost] [Route("/device/sync/user_trace")] public Task UserTrace([FromBody] DeviceSyncUserPageRequestDto dto) => UserPullPage(dto); /// /// 获取人员详情。 /// [HttpGet] [Route("/device/sync/user/detail")] public async Task UserDetail([FromQuery] string deviceSerial, [FromQuery] int userId) { return await _deviceSyncService.GetUserDetailAsync(deviceSerial, userId); } /// /// 组织信息下发。 /// [HttpPost] [Route("/device/sync/organization")] public async Task Organization([FromBody] DeviceSyncOrganizationRequestDto dto) { return await _deviceSyncService.OrganizationAsync(dto); } /// /// 人员上次成绩。 /// [HttpPost] [Route("/device/sync/grade/last_grade")] public async Task LastGrade([FromBody] DeviceSyncLastGradeRequestDto dto) { if (dto == null || string.IsNullOrWhiteSpace(dto.DeviceSerial)) return new List(); return await _deviceSyncService.LastGradeAsync(dto); } /// /// 成绩批量上报。 /// [HttpPost] [Route("/device/sync/train_push")] public async Task TrainPush([FromBody] List list) { var rawBody = HttpContext.Items["TrainPushRawBody"] as string; _logger.LogInformation( "TrainPush model binding result. RawBodyLength: {RawBodyLength}, MappedCount: {MappedCount}, Body: {RawBody}", rawBody?.Length ?? 0, list?.Count ?? 0, rawBody); var res = await _deviceSyncService.TrainPushAsync(list); return res; } /// /// 获取训练详情。 /// [HttpGet] [Route("/device/sync/train/details")] public async Task TrainDetails([FromQuery] int trainId) { var res = await _deviceSyncService.TrainDetailsAsync(trainId); return res; } /// /// 个人成绩排行榜。 /// [HttpPost] [Route("/device/sync/grade/order")] public async Task GradeOrder([FromBody] DeviceSyncGradeOrderRequestDto dto) { var res = await _deviceSyncService.GradeOrderAsync(dto); return res; } /// /// 组织(班级)成绩排行榜。 /// [HttpPost] [Route("/device/sync/organization_grade/order")] public async Task OrganizationGradeOrder([FromBody] DeviceSyncGradeOrderRequestDto dto) { var res = await _deviceSyncService.OrganizationGradeOrderAsync(dto); return res; } /// /// 查询挑战最好成绩。 /// [HttpPost] [Route("/device/sync/grade/best_score")] public async Task BestScore([FromBody] DeviceSyncBestScoreRequestDto dto) { var res = await _deviceSyncService.BestScoreAsync(dto); return res; } /// /// 查询运动记录。 /// [HttpPost] [Route("/device/sync/grade/record")] [Route("/applet/train/record_app")] public async Task RecordApp([FromBody] DeviceSyncRecordAppRequestDto dto) { var res = await _deviceSyncService.RecordAppAsync(dto); return res; } /// /// 查询我的运动。 /// [HttpPost] [Route("/device/sync/grade/my_record")] public async Task MyRecord([FromBody] DeviceSyncMyRecordRequestDto dto) { var res = await _deviceSyncService.MyRecordAsync(dto); return res; } /// /// 查询我的运动(壹体屏) /// /// /// [HttpPost] [Route("/device/sync/train/my_record/ytp")] public async Task YtpMyRecord([FromBody] DeviceSyncYtpMyRecordRequestDto dto) { var res = await _deviceSyncService.YtpMyRecordAsync(dto); return res; } /// /// 视频回放上传。 /// [HttpPost("device/sync/video/upload")] public async Task UploadVideo([FromForm] DeviceVideoUploadRequestDto dto) { var res = await _deviceSyncService.DeviceVideoUploadAsync(dto); return res; } } }