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 { /// /// RepairRequestForm /// [Route("Repair/RepairRequestForm")] [ApiDescriptionSettings("Repair", Name = "报修单", Order = 1000)] public class RepairRequestForm_Controller : IDynamicApiController { private readonly IHttpContextAccessor _httpContextAccessor; /// /// /// public RepairRequestForm_Controller(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// 插入一条 (同时上传一个或多个文件) /// [Route("Insert@V1.0")] [HttpPost] public long Insert([FromForm] AddRepairRequestFormInput input) { if (input == null) return default; var model = input.Adapt(); var fileList = new List(); var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files != null && request.Form.Files.Count > 0) { for (int i = 0; i < request.Form.Files.Count; i++) { var uploadFile = request.Form.Files[i]; var file = new Model.RepairRequestFile(); file.CorpID = input.CorpID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.FileFormat = FileHelper.GetFormat(file.FileSuffix); file.StorageHouse = Constant.RequestStorageHouse; file.StorageCode = FileHelper.UploadSubFile(Constant.RequestStorageHouse, uploadFile.OpenReadStream(), Path.GetExtension(uploadFile.FileName)); file.SortCode = i + 1; fileList.Add(file); } } var id = new Service.RepairRequestForm().Insert(model, fileList); return id; } /// /// 驳回 /// [Route("Reject@V1.0")] [HttpPut] public bool Reject([Required] RepairRequestRejectInput input) { var service = new Service.RepairRequestForm(); var model = service.GetByID(input.CorpID,input.ID); if (model.FormStatus != Model.Repair.eRequestStatus.Pending) return false; var bol = service.Reject(input.CorpID,input.ID,input.Reason,UserManager.UserID,DateTime.Now); return bol; } /// /// 受理 /// [Route("Accept@V1.0")] [HttpPut] public bool Accept([Required] RepairRequestAcceptInput input) { var service = new Service.RepairRequestForm(); var model = service.GetByID(input.CorpID, input.ID); if (model.FormStatus != Model.Repair.eRequestStatus.Pending) return false; var bol = service.Accept(input.CorpID, input.ID,input.Note, UserManager.UserID, DateTime.Now); return bol; } /// /// 获取分页列表 /// [Route("GetPageList@V1.0")] [HttpGet] public PageListOutput GetPageList([FromQuery][Required] GetRepairRequestFormPageListInput input) { int total = 0; var list = new Service.RepairRequestForm().GetFluzzyPageList (input.CorpID,input.BelongType,input.BelongID,input.CreateUserID,input.FormStatus,input.Urgency,input.FormNo,input.StartTime,input.EndTime,input.PageIndex,input.PageSize,ref total); if (list == null || list.Count < 1) return new PageListOutput() { Total=0,List=null}; var productList = new Service.Product().GetByIds(input.CorpID,list.Select(x=>x.ProductID).Distinct().ToList()); var vmList = new List(); foreach (var item in list) { var product = productList?.Find(x=>x.ID==item.ProductID); var vm = new RepairRequestFormDto(item,product); vmList.Add(vm); } return new PageListOutput() { Total=total,List=vmList}; } /// /// 获取待受理分页列表 /// [Route("GetPendingPageList@V1.0")] [HttpGet] public PageListOutput GetPendingPageList([FromQuery][Required] GetRepairRequestFormPendingPageListInput input) { int total = 0; var list = new Service.RepairRequestForm().GetFluzzyPageList (input.CorpID, input.BelongType, input.BelongID, input.CreateUserID, Model.Repair.eRequestStatus.Pending, input.Urgency, input.FormNo, input.StartTime, input.EndTime, input.PageIndex, input.PageSize, ref total); if (list == null || list.Count < 1) return new PageListOutput() { Total = 0, List = null }; var productList = new Service.Product().GetByIds(input.CorpID, list.Select(x => x.ProductID).Distinct().ToList()); var vmList = new List(); foreach (var item in list) { var product = productList?.Find(x => x.ID == item.ProductID); var vm = new RepairRequestFormDto(item, product); vmList.Add(vm); } return new PageListOutput() { Total = total, List = vmList }; } /// /// 获取待派单分页列表 /// [Route("GetJustAcceptedPageList@V1.0")] [HttpGet] public PageListOutput GetJustAcceptedPageList([FromQuery][Required] GetRepairRequestFormJustAcceptedPageListInput input) { int total = 0; var list = new Service.RepairRequestForm().GetJustAcceptedPageList (input.CorpID, input.BelongType, input.BelongID, input.CreateUserID, input.Urgency, input.FormNo, input.StartTime, input.EndTime, input.PageIndex, input.PageSize, ref total); if (list == null || list.Count < 1) return new PageListOutput() { Total = 0, List = null }; var productList = new Service.Product().GetByIds(input.CorpID, list.Select(x => x.Item1.ProductID).Distinct().ToList()); var vmList = new List(); foreach (var item in list) { var product = productList?.Find(x => x.ID == item.Item1.ProductID); var vm = new RepairRequestFormJustAcceptedDto(item.Item1,item.Item2, product); vmList.Add(vm); } return new PageListOutput() { Total = total, List = vmList }; } /// /// 通过 ID 获取详细 (文件url采用全路径 使用ip+port访问正常,用域名访问会有问题) /// [Route("GetDetailByID@V1.0")] [HttpGet] public RepairRequestFormDetailDto GetDetailByID_V1_0([FromQuery][Required] IDUnderCorpInput input) { var model = new Service.RepairRequestForm().GetByID(input.CorpID, input.ID); if (model == null) return default; var product = new Service.Product().GetByID(input.CorpID, model.ProductID); var vm = new RepairRequestFormDetailDto(model, product); var fileList = new Service.RepairRequestFile().GetByFormID(input.CorpID, model.ID); if (fileList != null && fileList.Count > 0) { var vmFileList = new List(); foreach (var file in fileList) { var vmFile = new RepairRequestFileDetailDto(file); vmFile.StorageUrl= $"http://{_httpContextAccessor.HttpContext.Request.Host}/{FileHelper.GetRelatedFilePath(file.StorageHouse, file.StorageCode)}"; vmFileList.Add(vmFile); } vm.FileList = vmFileList; } return vm; } /// /// 通过 ID 获取详细 (文件url去除前缀) /// [Route("GetDetailByID@V1.1")] [HttpGet] public RepairRequestFormDetailDto GetDetailByID_V1_1([FromQuery][Required] IDUnderCorpInput input) { var model = new Service.RepairRequestForm().GetByID(input.CorpID, input.ID); if (model == null) return default; var product = new Service.Product().GetByID(input.CorpID, model.ProductID); var vm = new RepairRequestFormDetailDto(model, product); var fileList = new Service.RepairRequestFile().GetByFormID(input.CorpID, model.ID); if (fileList != null && fileList.Count > 0) { var vmFileList = new List(); foreach (var file in fileList) { var vmFile = new RepairRequestFileDetailDto(file); vmFileList.Add(vmFile); } vm.FileList = vmFileList; } return vm; } } }