using Azure; using FastEndpoints; using Microsoft.Extensions.Logging; using MoviconWebApi.Common; namespace MoviconWebApi.API.ClearDataQrApi { /// /// 根据设备编号和部件二维码查询清洗数据端点 /// public class GetByQrEndpoint : Endpoint>> { private readonly IFreeSql _freeSql; public GetByQrEndpoint(IFreeSql freeSql) { _freeSql = freeSql; } public override void Configure() { Get("/cleardata-qr/list"); AllowAnonymous(); Summary(s => { s.Summary = "根据设备编号和部件二维码查询清洗数据"; s.Description = "可以通过设备编号、部件二维码或两者组合查询清洗数据"; s.Response>>(200, "成功返回清洗数据列表"); s.Response(404, "未找到数据"); s.Response(500, "服务器内部错误"); }); } public override async Task HandleAsync(ClearDataQrRequest request, CancellationToken ct) { try { // 参数兜底 if (request.PageNo <= 0) request.PageNo = 1; if (request.PageSize <= 0) request.PageSize = 100; if (request.PageSize > 100) request.PageSize = 100; var result = await Data.GetClearDataByQr(request, _freeSql); var dataList = result.Item1; var total = result.Item2; var resp = ApiResponse>.Success( dataList ?? new List(), (dataList != null && dataList.Count > 0) ? "请求成功" : "暂无数据"); resp.pagination = new MoviconWebApi.Common.Pagination { total = total, count = dataList?.Count ?? 0, pageNo = request.PageNo, totalPage = request.PageSize > 0 ? (int)Math.Ceiling((double)total / request.PageSize) : 0, pageSize = request.PageSize }; Response = resp; } catch (Exception ex) { //Logger.LogError(ex, "根据二维码查询清洗数据失败"); //await Send.ErrorsAsync(500, ct); Logger.LogError(ex, "根据二维码查询清洗数据失败"); Response = ApiResponse>.Error( "500", "服务器内部错误", new List() ); } } } /// /// 分页查询清洗数据端点 /// public class GetPagedByQrEndpoint : Endpoint { private readonly IFreeSql _freeSql; public GetPagedByQrEndpoint(IFreeSql freeSql) { _freeSql = freeSql; } public override void Configure() { Post("/cleardata-qr/paged"); AllowAnonymous(); Summary(s => { s.Summary = "分页查询清洗数据"; s.Description = "根据设备编号和部件二维码分页查询清洗数据"; s.Response(200, "成功返回分页数据"); s.Response(500, "服务器内部错误"); }); } public override async Task HandleAsync(ClearDataQrPagedRequest request, CancellationToken ct) { try { // 验证分页参数 if (request.PageIndex < 1) request.PageIndex = 1; if (request.PageSize < 1) request.PageSize = 20; if (request.PageSize > 100) request.PageSize = 100; // 调用Data层方法,获取元组返回值 var (data, total) = await Data.GetClearDataPagedByQr(request, _freeSql); // 构建响应对象 Response = new ClearDataQrPagedResponse { Items = data, TotalCount = total, PageIndex = request.PageIndex, PageSize = request.PageSize }; } catch (Exception ex) { Logger.LogError(ex, "分页查询清洗数据失败"); await Send.ErrorsAsync(500, ct); } } } /// /// 获取最新清洗数据端点 /// public class GetLatestByQrEndpoint : Endpoint { private readonly IFreeSql _freeSql; public GetLatestByQrEndpoint(IFreeSql freeSql) { _freeSql = freeSql; } public override void Configure() { Get("/cleardata-qr/latest"); AllowAnonymous(); Summary(s => { s.Summary = "获取最新的清洗数据"; s.Description = "根据设备编号和部件二维码获取最新的一条清洗数据"; s.Response(200, "成功返回最新清洗数据"); s.Response(404, "未找到数据"); s.Response(500, "服务器内部错误"); }); } public override async Task HandleAsync(ClearDataQrRequest request, CancellationToken ct) { try { // 调用重构后的方法,直接传递request对象 var latestData = await Data.GetLatestClearData(request, _freeSql); if (latestData == null) { //await Send.NotFoundAsync(ct); Response = latestData ?? new ClearDataQrResponse(); } else { Response = latestData; } } catch (Exception ex) { Logger.LogError(ex, "获取最新清洗数据失败"); await Send.ErrorsAsync(500, ct); } } } /// /// 根据部件二维码获取所有清洗记录端点 /// public class GetByPartQrCodeRequest { /// /// 部件二维码(必填) /// public string PartQRCode { get; set; } = string.Empty; } public class GetByPartQrCodeEndpoint : Endpoint> { private readonly IFreeSql _freeSql; public GetByPartQrCodeEndpoint(IFreeSql freeSql) { _freeSql = freeSql; } public override void Configure() { Get("/cleardata-qr/by-qrcode/{PartQRCode}"); AllowAnonymous(); Summary(s => { s.Summary = "根据部件二维码获取所有清洗记录"; s.Description = "仅根据部件二维码查询该部件的所有清洗历史记录"; s.Response>(200, "成功返回清洗数据列表"); s.Response(400, "请求参数错误"); s.Response(404, "未找到数据"); s.Response(500, "服务器内部错误"); }); } public override async Task HandleAsync(GetByPartQrCodeRequest request, CancellationToken ct) { try { // 验证参数 if (string.IsNullOrWhiteSpace(request.PartQRCode)) { AddError("PartQRCode", "部件二维码不能为空"); await Send.ErrorsAsync(400, ct); return; } // 调用重构后的方法 var dataList = await Data.GetClearDataByPartQRCode(request.PartQRCode, _freeSql); if (dataList == null || dataList.Count == 0) { //await Send.NotFoundAsync(ct); Response = dataList ?? new List(); } else { Response = dataList; } } catch (Exception ex) { Logger.LogError(ex, "根据部件二维码查询清洗数据失败"); await Send.ErrorsAsync(500, ct); } } } }