| using Microsoft.AspNetCore.Authorization; | 
| using Microsoft.AspNetCore.Http; | 
| using Microsoft.AspNetCore.Mvc; | 
| using System.Security.Claims; | 
| using System; | 
| using WMS.Entity.BllQualityEntity; | 
| using WMS.IBLL.IBllQualityServer; | 
| using Model.ModelVm.BllQualityVm; | 
| using Model.ModelVm; | 
| using Wms.Tools; | 
| using Microsoft.Extensions.Options; | 
| using System.Collections.Generic; | 
| using System.IO; | 
| using System.Threading.Tasks; | 
| using System.Linq; | 
|   | 
|   | 
| namespace Wms.Controllers | 
| { | 
|     [Route("api/[controller]/[action]")] | 
|     [ApiController] | 
|     [Authorize] | 
|     public class BllQualityController : ControllerBase | 
|     { | 
|   | 
|         private readonly IQualityInspectServer _qualityServer;              //质检信息 | 
|         private readonly IInspectionRequest _inspectionRequestServer;       // 质检请验 | 
|         private readonly ApiUrlConfig _config; //接口交互路径 | 
|   | 
|         /// <summary> | 
|         /// 构造函数 | 
|         /// </summary> | 
|         /// <param name="qualityServer">质检信息</param> | 
|         public BllQualityController(IQualityInspectServer qualityServer,IInspectionRequest inspectionRequestServer, IOptions<ApiUrlConfig> setting) | 
|         { | 
|             _qualityServer = qualityServer; | 
|             _inspectionRequestServer = inspectionRequestServer; | 
|             _config = setting.Value; | 
|         } | 
|   | 
|   | 
|         #region 质检信息 | 
|   | 
|         /// <summary> | 
|         /// 获取质检信息 | 
|         /// </summary> | 
|         /// <param name="model">质检信息实体模型</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetBllQualityList(BllQualityInspect model) | 
|         { | 
|             try | 
|             { | 
|                 var bolls = _qualityServer.GetBllQualityList(model); | 
|   | 
|                 return Ok(new { code = 0, msg = "质检信息", data = bolls }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|   | 
|         /// <summary> | 
|         /// 添加物料质检信息 | 
|         /// </summary> | 
|         /// <param name="model">质检信息实体模型</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult InsertQuality(BllQualityInspect model) | 
|         { | 
|             try | 
|             { | 
|                 //获取当前登录的用户ID | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 model.CreateUser = int.Parse(userId); | 
|                 _qualityServer.InsertQuality(model); | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "物料质检信息操作成功", data = "" }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         #endregion | 
|   | 
|   | 
|         #region 质检请验 | 
|         /// <summary> | 
|         /// 获取请验单信息 | 
|         /// </summary> | 
|         /// <param name="model">查询条件</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetInspectionRequest(BllQualityInspectionRequestVm model)  | 
|         { | 
|             try | 
|             { | 
|                 var models = _inspectionRequestServer.GetInspectionRequest(model, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "获取请验单信息成功", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取请验单对应的取样信息 | 
|         /// </summary> | 
|         /// <param name="model">查询条件</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetSamplingDetails(BllSamplingDetailsVm model)  | 
|         { | 
|             try | 
|             { | 
|                 var models = _inspectionRequestServer.GetSamplingDetails(model, out int count); | 
|   | 
|                 return Ok(new { code = 0, count, msg = "获取取样信息功能", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 删除取样记录 | 
|         /// </summary> | 
|         /// <param name="model">主键ID</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelSamplingDetails(IdVm model)  | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|   | 
|                 var models = _inspectionRequestServer.DelSamplingDetails(model, int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, count=0, msg = "删除取样记录成功", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         [HttpPost] | 
|         public IActionResult upLoadRequest(IdVm model)  | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userName = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier)?.Value; | 
|   | 
|   | 
|                 return Ok(new { code = 0, count = 0, msg = "上传图片成功!"}); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|          | 
|   | 
|         /// <summary> | 
|         /// 删除请验单信息 | 
|         /// </summary> | 
|         /// <param name="model">主键ID</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DelInspectionRequest(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|   | 
|                 var models = _inspectionRequestServer.DelInspectionRequest(model, int.Parse(userId)); | 
|   | 
|                 return Ok(new { code = 0, count=0, msg = "删除请验单信息成功", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 执行取样出库动作 | 
|         /// </summary> | 
|         /// <param name="model">主键ID</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult OutWhInspectionRequest(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                  | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|   | 
|                 string url = _config.WcsHost + _config.IssueComApiUrl; | 
|                 var models = _inspectionRequestServer.OutWhInspectionRequest(model, int.Parse(userId), url); | 
|   | 
|                 return Ok(new { code = 0, count=0, msg = "取样出库操作成功!", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         }  | 
|   | 
|         /// <summary> | 
|         /// 完成请验单据 | 
|         /// </summary> | 
|         /// <param name="model">主键ID</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult ClossInspectionRequest(IdVm model) | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 if (claimsIdentity == null) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (string.IsNullOrWhiteSpace(userId)) | 
|                 { | 
|                     return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); | 
|                 } | 
|   | 
|                 string url = _config.WcsHost + _config.IssueComApiUrl; | 
|                 var models = _inspectionRequestServer.ClossInspectionRequest(model, int.Parse(userId),url); | 
|   | 
|                 return Ok(new { code = 0, msg = "完成请验单", data = models }); | 
|             } | 
|             catch (Exception e) | 
|             { | 
|                 return Ok(new { code = 1, msg = e.Message }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         ///  图片上传 | 
|         /// </summary> | 
|         /// <param name="file"></param> | 
|         /// <param name="qualityId"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public async Task<IActionResult> UploadImage([FromForm] IFormFile file, [FromForm] int qualityId) | 
|         { | 
|             try | 
|             { | 
|                 var claimsIdentity = this.User.Identity as ClaimsIdentity; | 
|                 var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; | 
|                 if (file == null || file.Length == 0) | 
|                     return BadRequest(new { code = 1, msg = "请选择上传文件" }); | 
|   | 
|                 // 验证文件类型 | 
|                 var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" }; | 
|                 var fileExtension = Path.GetExtension(file.FileName).ToLower(); | 
|                 if (!allowedExtensions.Contains(fileExtension)) | 
|                     return BadRequest(new { code = 2, msg = "只允许上传图片文件" }); | 
|   | 
|                 // 限制文件大小 (5MB) | 
|                 if (file.Length > 5 * 1024 * 1024) | 
|                     return BadRequest(new { code = 3, msg = "文件大小不能超过5MB" }); | 
|   | 
|                 // 创建质量相关的图片目录 | 
|                 var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwRoot", "uploads", "quality", qualityId.ToString()); | 
|                 if (!Directory.Exists(uploadPath)) | 
|                     Directory.CreateDirectory(uploadPath); | 
|   | 
|                 // 生成唯一文件名 | 
|                 var fileName = $"{DateTime.Now:yyyyMMddHHmmss}_{userId}{fileExtension}"; | 
|                 var filePath = Path.Combine(uploadPath, fileName); | 
|   | 
|                 // 保存文件 | 
|                 using (var stream = new FileStream(filePath, FileMode.Create)) | 
|                 { | 
|                     await file.CopyToAsync(stream); | 
|                 } | 
|   | 
|                 // 返回文件访问路径 | 
|                 var fileUrl = $"/wwwRoot/uploads/quality/{qualityId}/{fileName}"; | 
|   | 
|                 // 这里可以添加数据库记录等操作 | 
|                 // _qualityService.AddImageRecord(qualityId, userId, fileUrl, fileName); | 
|   | 
|                 return Ok(new | 
|                 { | 
|                     code = 0, | 
|                     msg = "上传成功", | 
|                     data = new | 
|                     { | 
|                         url = fileUrl, | 
|                         fileName = fileName | 
|                     } | 
|                 }); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return StatusCode(500, new { code = 500, msg = $"上传失败: {ex.Message}" }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 图片获取 | 
|         /// </summary> | 
|         /// <param name="model"></param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult GetImage(BllQualityInspect model) | 
|         { | 
|             try | 
|             { | 
|   | 
|                 var fullPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwRoot", "uploads", "quality", model.Id.ToString()); | 
|                 if (!Directory.Exists(fullPath)) | 
|                 { | 
|                     return StatusCode(1, new { code = 1, msg = "图片不存在" }); | 
|                 } | 
|                 var files = Directory.GetFiles(fullPath); | 
|                 if (files.Length <= 0) | 
|                     return StatusCode(1, new { code = 1, msg = "图片不存在" }); | 
|                 List<string> images = new List<string>(); | 
|                 foreach (var file in files) | 
|                 { | 
|                     images.Add($"{Request.Scheme}://{Request.Host}/uploads/quality/{model.Id.ToString()}/{Path.GetFileName(file)}"); | 
|                 } | 
|                 return Ok(new | 
|                 { | 
|                     code = 0, | 
|                     msg = "图片" + files.Length + "张", | 
|                     data = images | 
|                 }); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return StatusCode(500, new { code = 500, msg = $"获取图片失败: {ex.Message}" }); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 删除图片 | 
|         /// </summary> | 
|         /// <param name="data">图片信息</param> | 
|         /// <returns></returns> | 
|         [HttpPost] | 
|         public IActionResult DeleteImage(QualityImageVM data) | 
|         { | 
|             try | 
|             { | 
|                 string fileName = Path.GetFileName(data.ImageUrl); | 
|   | 
|                 var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwRoot", "uploads", "quality", data.QualityId.ToString(), fileName); | 
|                 if (System.IO.File.Exists(filePath)) | 
|                 { | 
|                     System.IO.File.Delete(filePath); | 
|   | 
|                     return Ok(new { code = 0, msg = "删除成功" }); | 
|                 } | 
|                 else | 
|                 { | 
|                     return Ok(new { code = 1, msg = "图片不存在" }); | 
|                 } | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return Ok(new { code = 1, msg = ex.Message }); | 
|             } | 
|         } | 
|         #endregion | 
|     } | 
| } |