namespace Yw.Application { /// /// RepairTaskForm /// [Route("Repair/Task/Form")] [ApiDescriptionSettings("Repair", Name = "维修单", Order = 9000)] public class RepairTaskForm_Controller : IDynamicApiController { private readonly IHttpContextAccessor _httpContextAccessor; /// /// /// public RepairTaskForm_Controller(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } private readonly Service.RepairTaskForm _service = new(); /// /// 上传文件 /// [Route("UploadFile@V1.0")] [HttpPost] public bool UploadFile([FromForm][Required] UploadRepairTaskFormFileInput input) { var request = _httpContextAccessor.HttpContext.Request; if (request.Form.Files == null || request.Form.Files.Count < 1) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, "请选择文件后重试"); } var model = _service.GetByID(input.FormID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"FormID:{input.FormID} 数据不存在"); } var serviceLog = new Yw.Service.RepairTaskLog(); var log = serviceLog.GetByID(input.LogID); if (log == null) { log = serviceLog.GetLastByFormID(input.FormID); } if (log == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"操作日志异常"); } var serviceLogFile = new Yw.Service.RepairTaskLogFile(); var sortCode = serviceLogFile.GetMaxSortCodeByLogID(model.ID, log.ID); var fileList = new List(); for (int i = 0; i < request.Form.Files.Count; i++) { var uploadFile = request.Form.Files[i]; var file = new Model.RepairTaskLogFile(); file.FormID = input.FormID; file.LogID = log.ID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.StorageHouse = ConfigHelper.DataFolder; file.StorageCode = Service.FileHelper.UploadSubFile(file.StorageHouse, uploadFile.OpenReadStream(), file.FileSuffix); file.SortCode = sortCode + 1 + i; fileList.Add(file); } var bol = serviceLogFile.Inserts(fileList); return bol; } /// /// 派单 /// [Route("Assign@V1.0")] [HttpPut] public bool Assign([Required] RepairTaskAssignInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus >= eTaskStatus.Assigned) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var bol = _service.Assign(input.ID, input.RepairUserID, input.RepairUserName, input.Note, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 接单 /// [Route("Receive@V1.0")] [HttpPut] public bool Receive([Required] RepairTaskReceiveInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Assigned) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var bol = _service.Receive(input.ID, input.Note, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 开工 (支持上传文件) /// [Route("Start@V1.0")] [HttpPost] public bool Start([FromForm][Required] RepairTaskStartInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Received) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var request = _httpContextAccessor.HttpContext.Request; var fileList = new List(); 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.RepairTaskLogFile(); file.FormID = input.ID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.StorageHouse = ConfigHelper.DataFolder; file.StorageCode = Service.FileHelper.UploadSubFile(file.StorageHouse, uploadFile.OpenReadStream(), file.FileSuffix); file.SortCode = i + 1; fileList.Add(file); } } var bol = _service.Start(input.ID, input.Note, fileList, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 暂停 (支持上传文件) /// [Route("Pause@V1.0")] [HttpPost] public bool Pause([FromForm][Required] RepairTaskPauseInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Started && model.FormStatus != eTaskStatus.Restarted) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var request = _httpContextAccessor.HttpContext.Request; var fileList = new List(); 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.RepairTaskLogFile(); file.FormID = input.ID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.StorageHouse = ConfigHelper.DataFolder; file.StorageCode = Service.FileHelper.UploadSubFile(file.StorageHouse, uploadFile.OpenReadStream(), file.FileSuffix); file.SortCode = i + 1; fileList.Add(file); } } var bol = _service.Pause(input.ID, input.Note, fileList, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 重新开工 (支持上传文件) /// [Route("Restart@V1.0")] [HttpPost] public bool Restart([FromForm][Required] RepairTaskRestartInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Paused) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var request = _httpContextAccessor.HttpContext.Request; var fileList = new List(); 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.RepairTaskLogFile(); file.FormID = input.ID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.StorageHouse = ConfigHelper.DataFolder; file.StorageCode = Service.FileHelper.UploadSubFile(file.StorageHouse, uploadFile.OpenReadStream(), file.FileSuffix); file.SortCode = i + 1; fileList.Add(file); } } var bol = _service.Restart(input.ID, input.Note, fileList, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 完工 (支持上传文件) /// [Route("Finish@V1.0")] [HttpPost] public bool Finish([FromForm][Required] RepairTaskFinishInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Started && model.FormStatus != eTaskStatus.Restarted) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var request = _httpContextAccessor.HttpContext.Request; var fileList = new List(); 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.RepairTaskLogFile(); file.FormID = input.ID; file.FileSuffix = Path.GetExtension(uploadFile.FileName); file.FileName = Path.GetFileNameWithoutExtension(uploadFile.FileName); file.StorageHouse = ConfigHelper.DataFolder; file.StorageCode = Service.FileHelper.UploadSubFile(file.StorageHouse, uploadFile.OpenReadStream(), file.FileSuffix); file.SortCode = i + 1; fileList.Add(file); } } var bol = _service.Finish(input.ID, input.Note, fileList, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 验收通过 /// [Route("Success@V1.0")] [HttpPut] public bool Success([Required] RepairTaskSuccessInput input) { var model = _service.GetByID(input.ID); if (model == null) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.D001, $"ID:{input.ID} 数据不存在"); } if (model.FormStatus != eTaskStatus.Finished) { throw YOops.Oh(eResultCode.Alert, ErrorCodes.V001, $"ID:{input.ID} 表单状态异常"); } var bol = _service.Success(input.ID, input.Note, UserManager.UserID, DateTime.Now, UserManager.UserName); return bol; } /// /// 获取进度分页列表 /// [Route("GetProgressPageList@V1.0")] [HttpGet] public PageListOutput GetProgressPageList([FromQuery][Required] QueryRepairTaskFormProgressPageListInput input) { int total = 0; var list = _service.GetProgressPageList (LongListHelper.ToList(input.EquipmentIds), input.RepairUserID, 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 logList = new Service.RepairTaskLog().GetByFormIds(list.Select(x => x.Item1.ID).Distinct().ToList()); var equipmentList = new Service.Equipment().GetByIds(list.Select(x => x.Item1.EquipmentID).Distinct().ToList()); var vmList = new List(); foreach (var item in list) { var itemLogList = logList?.Where(x => x.FormID == item.Item1.ID).OrderBy(x => x.OperateTime).ToList(); var equipment = equipmentList?.Find(x => x.ID == item.Item1.EquipmentID); var vm = new RepairTaskFormProgressDto(item.Item1, equipment, item.Item2, itemLogList); vmList.Add(vm); } return new PageListOutput() { Total = total, List = vmList }; } /// /// 获取完工分页列表 /// [Route("GetFinishedPageList@V1.0")] [HttpGet] public PageListOutput GetFinishedPageList([FromQuery][Required] QueryRepairTaskFormFinishedPageListInput input) { int total = 0; var list = new Service.RepairTaskForm().GetPageList (LongListHelper.ToList(input.EquipmentIds), input.RepairUserID, eTaskStatus.Finished, 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 equipmentList = new Service.Equipment().GetByIds(list.Select(x => x.Item1.EquipmentID).Distinct().ToList()); var logList = new Service.RepairTaskLog().GetByFormIds(list.Select(x => x.Item1.ID).Distinct().ToList()); var vmList = new List(); foreach (var item in list) { var itemLogList = logList?.Where(x => x.FormID == item.Item1.ID).OrderBy(x => x.OperateTime).ToList(); var equipment = equipmentList?.Find(x => x.ID == item.Item1.EquipmentID); var vm = new RepairTaskFormFinishedDto(item.Item1, equipment, item.Item2, itemLogList); vmList.Add(vm); } return new PageListOutput() { Total = total, List = vmList }; } /// /// 获取我的已派单分页列表 /// [Route("GetMyAssignedPageList@V1.0")] [HttpGet] public PageListOutput GetMyAssignedPageList([FromQuery][Required] QueryMyRepairTaskFormAssignedPageListInput input) { int total = 0; var list = new Service.RepairTaskForm().GetPageList (null, UserManager.UserID, eTaskStatus.Assigned, null, null, input.StartTime, input.EndTime, input.PageIndex, input.PageSize, ref total); if (list == null || list.Count < 1) { return new PageListOutput() { Total = total, List = null }; } var serviceEquipment = new Yw.Service.Equipment(); var serviceLog = new Yw.Service.RepairTaskLog(); var vmList = new List(); foreach (var item in list) { var equipment = serviceEquipment.GetByID(item.Item1.EquipmentID); var logList = serviceLog.GetByFormID(item.Item1.ID); var vm = new MyRepairTaskFormAssignedDto(item.Item1, equipment, logList); vmList.Add(vm); } return new PageListOutput() { Total = total, List = vmList }; } /// /// 获取我的进行中的分页列表 /// [Route("GetMyProgressPageList@V1.0")] [HttpGet] public PageListOutput GetMyProgressPageList([FromQuery][Required] QueryMyRepairTaskFormProgressPageListInput input) { int total = 0; var list = new Service.RepairTaskForm().GetProgressPageList (null, UserManager.UserID, null, null, input.StartTime, input.EndTime, input.PageIndex, input.PageSize, ref total); var vmList = list?.Select(x => new MyRepairTaskFormProgressDto(x.Item1)).ToList(); return new PageListOutput() { Total = total, List = vmList }; } /// /// 获取我的已完成的分页列表 /// [Route("GetMyHasFinishedPageList@V1.0")] [HttpGet] public PageListOutput GetMyHasFinishedPageList([FromQuery][Required] QueryMyRepairTaskFormHasFinishedPageListInput input) { int total = 0; var list = new Service.RepairTaskForm().GetHasFinishedPageList (null, UserManager.UserID, null, null, input.StartTime, input.EndTime, input.PageIndex, input.PageSize, ref total); var vmList = list?.Select(x => new MyRepairTaskFormHasFinishedDto(x.Item1)).ToList(); return new PageListOutput() { Total = total, List = vmList }; } } }