using Microsoft.Extensions.Options;
using System.Web;
using YBEE.EQM.Core;
namespace YBEE.EQM.Application;
///
/// 监测机构反馈结果管理服务
///
[ApiDescriptionSettings(Name = "exam-org-result")]
[Route("exam/org/result")]
public class ExamOrgResultAppService : IDynamicApiController
{
private readonly IExamOrgResultService _examOrgResultService;
private readonly EqmSiteOptions _eqmSiteOptions;
public ExamOrgResultAppService(IExamOrgResultService examOrgResultService, IOptions options)
{
_examOrgResultService = examOrgResultService;
_eqmSiteOptions = options.Value;
}
///
/// 上传监测机构反馈文件
///
///
///
[RequestSizeLimit(long.MaxValue)]
[RequestFormLimits(MultipartBodyLengthLimit = long.MaxValue)]
public async Task Upload([FromForm] UploadExamOrgResultInput input)
{
var savePath = Path.Combine(input.ExamPlanId.ToString(), input.ExamDataPublishId.ToString());
var saveRoot = Path.Combine(_eqmSiteOptions.ExamResultRoot, savePath);
if (!Directory.Exists(saveRoot))
{
Directory.CreateDirectory(saveRoot);
}
var extName = Path.GetExtension(input.File.FileName);
var fileName = Guid.NewGuid().ToString("N") + extName;
using var stream = File.Create(Path.Combine(saveRoot, fileName));
await input.File.CopyToAsync(stream);
await stream.FlushAsync();
AddExamOrgResultInput item = input.Adapt();
item.FileName = input.File.FileName;
item.FilePath = Path.Combine(savePath, fileName);
item.FileSize = input.File.Length;
item.FileExtName = Path.GetExtension(input.File.FileName);
await _examOrgResultService.Add(item);
}
///
/// 根据文件ID下载文件
///
///
///
[HttpGet, NonUnify]
public async Task Download([FromQuery][Required] int id)
{
var item = await _examOrgResultService.GetById(id);
var filePath = Path.Combine(_eqmSiteOptions.ExamResultRoot, item.FilePath);
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream")
{
FileDownloadName = item.FileName,
};
}
///
/// 删除文件
///
///
///
public async Task Del(BaseId input)
{
await _examOrgResultService.Del(input);
}
///
/// 获取ID获取监测机构反馈文件信息
///
///
///
public async Task GetById([FromQuery][Required] int id)
{
return await _examOrgResultService.GetById(id);
}
///
/// 根据监测计划获取机构反馈文件列表
///
///
///
public async Task> GetByExamPlanId(int examPlanId)
{
return await _examOrgResultService.GetByExamPlanId(examPlanId);
}
///
/// 根据发布内容ID获取机构文件列表
///
///
///
public async Task> GetByPublishId([FromQuery][Required] int publishId)
{
return await _examOrgResultService.GetByPublishId(publishId);
}
}