using log4net; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Ropin.Inspection.Api.Common; using Ropin.Inspection.Model.SearchModel.LGS; using Ropin.Inspection.Model.ViewModel.LGS; using Ropin.Inspection.Model; using Ropin.Inspection.Service.LGS.Interface; using System.Threading.Tasks; using System; using System.IO; using System.Security.Claims; using Ropin.Inspection.Common.Accessor.Interface; namespace Ropin.Inspection.Api.Controllers.LGS { public class LargeScreenController : BaseController { private readonly ILGSLargeScreenService _repository; private readonly IClaimsAccessor _claims; private static readonly ILog log = LogManager.GetLogger(typeof(LargeScreenController)); /// /// 构造函数 /// /// public LargeScreenController(ILGSLargeScreenService repository, IClaimsAccessor claims) { _repository = repository; _claims = claims; } /// /// 创建大屏 /// /// /// [HttpPost("CreateLargeScreenAsync")] public async Task CreateLargeScreenAsync(LargeScreenViewModel content) { if (content == null) { return new ApiResult(ReturnCode.ArgsError); } try { await _repository.CreateOneAsync(content); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 删除大屏 /// /// /// [HttpDelete("DeleteLargeScreenAsync/{id}")] public async Task DeleteLargeScreenAsync(string id) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { await _repository.DeleteAsync(id); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 更新大屏 /// /// /// /// [HttpPut("UpdateLargeScreenAsync/{id}")] [AllowAnonymous] public async Task UpdateLargeScreenAsync(string id, LargeScreenViewModel updateModel) { if (string.IsNullOrEmpty(id)) { return new ApiResult(ReturnCode.GeneralError); } try { await _repository.UpdateAsync(updateModel, id); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } return new ApiResult(ReturnCode.Success); } /// /// 获取大屏列表 /// /// [HttpPost("GetLargeScreenAsync")] [AllowAnonymous] public async Task GetLargeScreenAsync(LargeScreenSearch searchModel) { if (searchModel == null) { return new ApiResult(ReturnCode.ArgsError); } try { var contentList = await _repository.GetConditionAsync(searchModel); return new ApiResult>(new PagesModel(contentList, searchModel)); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 通过id获取大屏详情 /// /// [HttpGet("GetLargeScreenByIDAsync")] [AllowAnonymous] public async Task GetLargeScreenByIDAsync(string Id) { if (string.IsNullOrEmpty(Id)) { return new ApiResult(ReturnCode.ArgsError); } try { LargeScreenViewModel data = await _repository.GetByIdAsync(Id); return new ApiResult(data); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 保存大屏缩略图 /// /// /// [HttpPost("SaveLargeScreenImage")] public async Task SaveLargeScreenImage(LargeScreenImageModel model) { if (model==null||string.IsNullOrEmpty(model.Id)) { return new ApiResult(ReturnCode.ArgsError); } try { LargeScreenViewModel data = await _repository.GetByIdAsync(model.Id); if (data == null) { return new ApiResult(ReturnCode.DataError,"获取数据失败"); } string fileName = model.Id + ".png"; var dateDirectory = DateTime.Now.ToString("yyyyMM"); var relativePath = Path.Combine("wwwroot/uploads/images/", _claims.Linsence + "/" + dateDirectory); var directoryPath = Path.Combine(Directory.GetCurrentDirectory(), relativePath); var fileRelativePath = Path.Combine(relativePath + "/", fileName); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } var filePath = Path.Combine(directoryPath + "/", fileName); // 移除可能存在的 Base64 数据前缀 if (model.base64Image.StartsWith("data:image", StringComparison.OrdinalIgnoreCase)) { int commaIndex = model.base64Image.IndexOf(','); if (commaIndex > 0) { model.base64Image = model.base64Image.Substring(commaIndex + 1); } } // 将 Base64 字符串解码为字节数组 byte[] imageBytes = Convert.FromBase64String(model.base64Image); // 将字节数组写入文件 System.IO.File.WriteAllBytes(filePath, imageBytes); bool result = await _repository.UpdateImageAsync("/"+ fileRelativePath,model.Id); if (result) { return new ApiResult(ReturnCode.Success); } else { return new ApiResult(ReturnCode.GeneralError); } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError); } } } }