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);
}
}
}
}