using System.Dynamic; using MES.Service.Dto.service; using MES.Service.Modes; using MES.Service.service.QC; using MES.Service.util; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System.Web; namespace MESApplication.Controllers.QC; [Route("api/[controller]")] [ApiController] public class XJController : ControllerBase { [HttpPost("getAll")] public ResponseResult getAll([FromBody] JObject data) { var modify1Flag = Convert.ToInt32(data["modify1Flag"]?.ToString() ?? "0"); try { dynamic resultInfos = new ExpandoObject(); // var tbBillList = // new XJService().getAll(modify1Flag); // resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getMaxReleaseNo [HttpPost("getMaxReleaseNo")] public ResponseResult getMaxReleaseNo() { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getMaxReleaseNo(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getLine [HttpPost("getLineAll")] public ResponseResult getLineAll() { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getLineAll(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取工单 /// [HttpPost("getDaa001")] public ResponseResult getDaa001([FromBody] JObject data) { var daa020 = data["daa020"]?.ToString() ?? ""; try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getDaa001(daa020); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取工单详细信息(包含物料信息) /// [HttpPost("getWorkOrderWithItem")] public ResponseResult getWorkOrderWithItem([FromBody] JObject data) { var daa020 = data["daa020"]?.ToString() ?? ""; try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getWorkOrderWithItem(daa020); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 根据产线获取物料编码 lineNo /// /// [HttpPost("getBoardItem")] public ResponseResult getBoardItem([FromBody] JObject data) { var lineNo = data["lineNo"]?.ToString() ?? ""; try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getBoardItem(lineNo); // 按 itemNo 去重 tbBillList = tbBillList.GroupBy(x => x.ItemNo).Select(g => g.First()).ToList(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getItem [HttpPost("getItem")] public ResponseResult getItem([FromBody] JObject data) { var daa001 = data["daa001"]?.ToString() ?? ""; try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getItem(daa001); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //setJYItem [HttpPost("setJYItem")] public ResponseResult setJYItem([FromBody] JObject data) { var itemNo = data["itemNo"]?.ToString() ?? ""; try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().setJYItem(itemNo); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //save [HttpPost("save")] public ResponseResult save([FromBody] XJDto xjDto) { try { dynamic resultInfos = new ExpandoObject(); var result = new XJService().save(xjDto); // 返回完整的XJDto对象,包含更新后的items resultInfos.tbBillList = result; resultInfos.xjDto = xjDto; // 包含完整的检验项目信息 return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("saveItem")] public ResponseResult saveItem([FromBody] XJDto xjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().saveItem(xjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getPage [HttpPost("getPage")] public ResponseResult getPage([FromBody] XJPageResult queryObj) { try { dynamic resultInfos = new ExpandoObject(); var (item, totalCount) = new XJService().getPage(queryObj); resultInfos.tbBillList = item; return new ResponseResult { status = 0, message = "OK", data = resultInfos, TotalCount = totalCount }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getJYItem [HttpPost("getJYItem")] public ResponseResult getJYItem([FromBody] JObject data) { var pid = data["pid"]?.ToString(); var id = data["id"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getJYItem(Convert.ToDecimal(pid), Convert.ToDecimal(id)); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getXjDetail02ById [HttpPost("getXjDetail02ById")] public ResponseResult getXjDetail02ById([FromBody] JObject data) { var id = data["id"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().getXjDetail02ById(Convert.ToDecimal(id)); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("SetQSItemDetail")] public ResponseResult SetQSItemDetail([FromBody] QsQaItemXj02 detail) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService(); var detail021 = tbBillList.SetQSItemDetail(detail); resultInfos.tbBillList = detail021; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("UpdateQSItemDetail")] public ResponseResult UpdateQSItemDetail( [FromBody] QsQaItemXj02 detail) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService(); var detail021 = tbBillList.UpdateQSItemDetail(detail); resultInfos.tbBillList = detail021; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //removeXJ [HttpPost("removeXJ")] public ResponseResult removeXJ([FromBody] JObject data) { var id = data["id"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().removeXJ(Convert.ToDecimal(id)); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //saveRemarksGid [HttpPost("saveRemarksGid")] public ResponseResult saveRemarksGid([FromBody] XJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().saveRemarksGid(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //saveRemarksPid [HttpPost("saveRemarksPid")] public ResponseResult saveRemarksPid([FromBody] XJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().saveRemarksPid(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //saveRemarksById [HttpPost("saveRemarksById")] public ResponseResult saveRemarksById([FromBody] XJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().saveRemarksById(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //刷新检验项目 [HttpPost("GenUpdate")] public ResponseResult GenUpdate([FromBody] JObject data) { try { decimal? id = data["id"]?.ToObject(); string? no = data["no"]?.ToString(); string? user = data["user"]?.ToString(); var (result, message) = new XJService().GenUpdate(id, no, user); dynamic resultInfos = new ExpandoObject(); resultInfos.result = result; resultInfos.message = message; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //提交检验 [HttpPost("SjSubmit")] public ResponseResult SjSubmit([FromBody] SJDto sjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().SjSubmit(sjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取有线体的部门列表 /// [HttpPost("getDepartmentsWithLines")] public ResponseResult GetDepartmentsWithLines() { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().GetDepartmentsWithLines(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 保存部门选择 /// [HttpPost("saveDepartmentSelection")] public ResponseResult SaveDepartmentSelection([FromBody] JObject data) { try { var id = Convert.ToDecimal(data["id"]); var departmentId = data["departmentId"]?.ToString() ?? ""; var departmentName = data["departmentName"]?.ToString() ?? ""; dynamic resultInfos = new ExpandoObject(); var result = new XJService().SaveDepartmentSelection(id, departmentId, departmentName); resultInfos.tbBillList = result; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 根据部门ID获取该部门下的线体列表 /// [HttpPost("getLinesByDepartment")] public ResponseResult GetLinesByDepartment([FromBody] JObject data) { try { var departmentId = data["departmentId"]?.ToString() ?? ""; dynamic resultInfos = new ExpandoObject(); var tbBillList = new XJService().GetLinesByDepartment(departmentId); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取附件信息 /// /// 包含itemNo的JSON对象 /// 附件列表 [HttpPost("getAttachments")] public ResponseResult GetAttachments([FromBody] JObject data) { var itemNo = data["itemNo"]?.ToString(); try { dynamic resultInfos = new System.Dynamic.ExpandoObject(); var tbBillList = new XJService().GetAttachments(itemNo); if (tbBillList == null || tbBillList.Count == 0) { return new ResponseResult { status = 1, message = "该检验单未上传附件信息!", data = null }; } resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 预览FTP文件 /// /// 物料编码 /// 文件名 /// FTP服务器地址 /// 文件内容 [HttpGet("PreviewFtpFile")] public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer) { try { // 添加CORS响应头 Response.Headers.Add("Access-Control-Allow-Origin", "*"); Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS"); Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type"); Response.Headers.Add("Access-Control-Expose-Headers", "Content-Type, Content-Length"); var service = new XJService(); var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer); if (fileBytes == null || fileBytes.Length == 0) { return NotFound("文件在FTP服务器上不存在"); } var contentType = service.GetContentType(fileName); fileName = fileName?.Trim().Replace("\r", "").Replace("\n", ""); return File(fileBytes, contentType); } catch (Exception ex) { return StatusCode(500, $"预览文件失败:{ex.Message}"); } } /// /// 下载FTP文件 /// /// 物料编码 /// 文件名 /// FTP服务器地址 /// 文件下载 [HttpGet("DownloadFtpFile")] public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer) { try { // 添加CORS响应头 - 关键配置用于解决跨域问题 Response.Headers.Add("Access-Control-Allow-Origin", "*"); Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS"); Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization"); Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition, Content-Length, Content-Type"); var service = new XJService(); var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer); if (fileBytes == null || fileBytes.Length == 0) { return NotFound("文件在FTP服务器上不存在"); } var contentType = service.GetContentType(fileName); fileName = fileName?.Trim().Replace("\r", "").Replace("\n", ""); // 设置正确的Content-Disposition响应头以支持文件下载 var result = File(fileBytes, "application/octet-stream", fileName); // 确保Content-Disposition头正确设置,支持中文文件名 if (!string.IsNullOrEmpty(fileName)) { var encodedFileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8); Response.Headers.Add("Content-Disposition", $"attachment; filename*=UTF-8''{encodedFileName}"); } return result; } catch (Exception ex) { return StatusCode(500, $"下载文件失败:{ex.Message}"); } } [HttpOptions("PreviewFtpFile")] [HttpOptions("DownloadFtpFile")] public IActionResult HandleOptions() { Response.Headers.Add("Access-Control-Allow-Origin", "*"); Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS"); Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization"); Response.Headers.Add("Access-Control-Max-Age", "86400"); return Ok(); } }