using Microsoft.AspNetCore.Mvc; using System.Net; using System.Net.Http.Headers; using Microsoft.Extensions.Hosting.Internal; using Microsoft.AspNetCore.Http.Extensions; using IStation.Untity; using Furion.DynamicApiController; using System.ComponentModel.DataAnnotations; using Mapster; using Microsoft.AspNetCore.Http; namespace IStation.Application { /// /// EpanetFile /// [Route("Epanet/EpanetFile")] [ApiDescriptionSettings("Epanet", Name = "Epanet文件", Order = 1000)] public class EpanetFile_Controller : IDynamicApiController { private readonly IHttpContextAccessor _httpContextAccessor; /// /// /// public EpanetFile_Controller(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } private readonly Service.EpanetFile _service = new Service.EpanetFile(); #region Query /// /// 通过 CorpID 获取 /// [Route("GetByCorpID@V1.0")] [HttpGet] public List GetByCorpID([FromQuery][Required] CorpIDInput input) { var list = _service.GetByCorpID(input.CorpID); var vmList = list?.Select(x => new EpanetFileDto(x)).ToList(); return vmList; } /// /// 通过 ID 获取 /// [Route("GetByID@V1.0")] [HttpGet] public EpanetFileDto GetByID([FromQuery][Required] IDUnderCorpInput input) { var model = _service.GetByID(input.CorpID, input.ID); if (model == null) return default; var vm = new EpanetFileDto(model); return vm; } /// /// 通过 Ids 获取 /// [Route("GetByIds@V1.0")] [HttpGet] public List GetByIds([FromQuery] IdsUnderCorpInput input) { var ids = LongListHelper.ToList(input.Ids); var list = _service.GetByIds(input.CorpID, ids); var vmList = list?.Select(x => new EpanetFileDto(x)).ToList(); return vmList; } /// /// 通过 BelongType 和 BelongID 获取 /// [Route("GetByBelongTypeAndBelongID@V1.0")] [HttpGet] public List GetByBelongTypeAndBelongID([FromQuery][Required] BelongUnderCorpInput input) { var list = _service.GetByBelongTypeAndBelongID(input.CorpID, input.BelongType, input.BelongID); var vmList = list?.Select(x => new EpanetFileDto(x)).ToList(); return vmList; } /// /// 通过 BelongType 和 BelongID 获取工作文件 /// [Route("GetWorkingByBelongTypeAndBelongID@V1.0")] [HttpGet] public EpanetFileDto GetWorkingByBelongTypeAndBelongID([FromQuery][Required] BelongUnderCorpInput input) { var model = _service.GetWorkingByBelongTypeAndBelongID(input.CorpID,input.BelongType,input.BelongID); if (model == null) return default; var vm = new EpanetFileDto(model); return vm; } /// /// 通过 BelongType 和 BelongID 获取默认工作文件 /// [Route("GetDefaultWorkingByBelongTypeAndBelongID@V1.0")] [HttpGet] public EpanetFileDto GetDefaultWorkingByBelongTypeAndBelongID([FromQuery][Required] BelongUnderCorpInput input) { var model = _service.GetWorkingByBelongTypeAndBelongID(input.CorpID, input.BelongType, input.BelongID); if (model == null) return default; var vm = new EpanetFileDto(model); return vm; } /// /// 获取文件Url(全路径 采用ip+port访问正常,用域名访问会有问题) /// [Route("GetFileUrl@V1.0")] [HttpGet] public string GetFileUrl([FromQuery] IDUnderCorpInput input) { var model = _service.GetByID(input.CorpID,input.ID); if (model == null) { throw new Exception("未检索到基础信息"); } var url = $"http://{_httpContextAccessor.HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(model.StorageHouse,model.StorageCode)}"; return url; } /// /// 获取文件相对Url(去掉前缀) /// [Route("GetFileRelatedUrl@V1.0")] [HttpGet] public string GetFileRelatedUrl([FromQuery] IDUnderCorpInput input) { var model = _service.GetByID(input.CorpID, input.ID); if (model == null) { throw new Exception("未检索到基础信息"); } var url = FileHelper.GetRelatedFilePath(model.StorageHouse, model.StorageCode); return url; } /// /// 下载文件(返回流) /// [Route("DownloadFile@V1.0")] [HttpGet] [NonUnify] public HttpResponseMessage DownloadFile([FromQuery] IDUnderCorpInput input) { var model=_service.GetByID(input.CorpID,input.ID); if (model == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } if (string.IsNullOrEmpty(model.StorageCode)) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var file = FileHelper.DownloadSubFile(model.StorageHouse, model.StorageCode); if (file == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } var result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } #endregion #region Insert /// /// 上传文件返回存储编码(仅支持上传一个文件) /// [Route("UploadFile@V1.0")] [HttpPost] public string UploadFile() { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count != 1) { return string.Empty; } var uploadFile = request.Form.Files[0]; var fileName = FileHelper.UploadSubFile(Constant.EpanetStorageHouse, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); return fileName; } /// /// 插入一条 (文件已单独上传,提交的数据中包含文件存储编码) /// [Route("Insert@V1.0")] [HttpPost] public long Insert_V1_0(AddEpanetFileInput input) { if (input == null) return default; var model = input.Adapt(); var id = _service.Insert(model); return id; } /// /// 插入一条 (文件与基础数据一起提交) /// [Route("Insert@V1.1")] [HttpPost] public long Insert_V1_1([FromForm] AddEpanetFileTogetherInput input) { if (input == null) return default; var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count < 1) return default; var uploadFile = request.Form.Files[0]; var storageCode = FileHelper.UploadSubFile(Constant.EpanetStorageHouse, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); var model = input.Adapt(); model.StorageCode = storageCode; var id = _service.Insert(model); return id; } #endregion #region Update /// /// 更新一条 /// [Route("Update@V1.0")] [HttpPut] public bool Update([Required] UpdateEpanetFileInput input) { if (input == null) return false; var model = _service.GetByID(input.CorpID, input.ID); if (model == null) return false; var rhs = new Model.EpanetFile(model); input.Adapt(rhs); var bol = _service.Update(rhs); return bol; } /// /// 更新多条 /// [Route("Updates@V1.0")] [HttpPut] public bool Updates([Required] List inputList) { if (inputList == null || inputList.Count() < 1) { return false; } var corpIds = inputList.Select(x => x.CorpID).Distinct().ToList(); if (corpIds.Count > 1) return false; var modelList = _service.GetByIds(corpIds[0], inputList.Select(x => x.ID).ToList()); if (modelList == null || modelList.Count < 1) return false; var rhsList = new List(); modelList.ForEach(x => { var input = inputList.Find(t => t.ID == x.ID); if (input != null) { var rhs = new Model.EpanetFile(x); input.Adapt(rhs); rhsList.Add(rhs); } }); if (rhsList.Count < 1) return false; var bol = _service.Updates(rhsList); return bol; } /// /// 更新文件(用新的文件更新旧文件,并更新基础信息) /// [Route("UpdateFile@V1.0")] [HttpPut] public bool UpdateFile([FromForm] IDUnderCorpInput input) { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count <1) { return default; } var model = _service.GetByID(input.CorpID,input.ID); if (model == null) { throw new Exception("未检索到基础数据"); } var uploadFile = request.Form.Files[0]; var code = FileHelper.UpdateSubFile(Constant.EpanetStorageHouse, model.StorageCode, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); var bol = _service.UpdateStorageCode(input.CorpID,input.ID,code,UserManager.UserID,DateTime.Now); return bol; } #endregion #region Set /// /// 设置工作文件 /// [Route("SetWorking@V1.0")] [HttpPost] public bool SetWorking([Required] SetEpanetFileWorkingInput input) { if (input == null) return default; var bol = _service.SetWorking(input.CorpID, input.BelongType,input.BelongID, input.ID,UserManager.UserID,DateTime.Now); return bol; } #endregion #region Delete /// /// 删除 /// [Route("DeleteByID@V1.0")] [HttpDelete] public DeleteReasonOutput DeleteByID([FromQuery][Required] IDUnderCorpInput input) { var bol = _service.DeleteByID(input.CorpID, input.ID, out string Msg); return new DeleteReasonOutput() { Success = bol, Reason = Msg }; } #endregion } }