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 RKJController : ControllerBase { //getMaxReleaseNo [HttpPost("getMaxReleaseNo")] public ResponseResult getMaxReleaseNo() { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().getMaxBillNo(); 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 RKJService().getLineNo(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getDaa001 [HttpPost("getDaa001")] public ResponseResult getDaa001([FromBody] JObject data) { var lineNo = data["lineNo"].ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().GetDaa001s(lineNo); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("setJYItem")] public ResponseResult setJYItem([FromBody] JObject data) { var itemNo = data["itemNo"].ToString(); var quantityStr = data["quantity"]?.ToString(); // 处理quantity为空或无效的情况 decimal quantity = 0; if (!string.IsNullOrEmpty(quantityStr) && decimal.TryParse(quantityStr, out var parsedQuantity)) { quantity = parsedQuantity; } try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().SetItems(itemNo, quantity); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("save")] public ResponseResult save([FromBody] RKJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().save(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("getPage")] public ResponseResult getPage([FromBody] XJPageResult queryObj) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().getPage(queryObj); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //getItems [HttpPost("getItems")] public ResponseResult getJYItem([FromBody] JObject data) { var pid = data["pid"]?.ToString(); var id = data["id"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().GetItems(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); } } //removeXJ [HttpPost("removeXJ")] public ResponseResult removeXJ([FromBody] JObject data) { var id = data["id"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().removeXJ(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 RKJService().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] QsItemOqcItemDetail detail) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService(); 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] QsItemOqcItemDetail detail) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService(); var detail021 = tbBillList.UpdateQSItemDetail(detail); resultInfos.tbBillList = detail021; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } //saveRemarksGid [HttpPost("saveRemarksGid")] public ResponseResult saveRemarksGid([FromBody] RKJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().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] RKJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().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] RKJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().saveRemarksById(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } [HttpPost("saveItem")] public ResponseResult saveItem([FromBody] RKJDto xjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().saveItem(xjDto); 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 RKJService().GetDepartmentsWithLines(); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 根据部门ID获取该部门下的线体列表 /// /// 包含departmentId的JSON对象 /// 线体列表 [HttpPost("GetLinesByDepartment")] public ResponseResult GetLinesByDepartment([FromBody] JObject data) { var departmentId = data["departmentId"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().GetLinesByDepartment(departmentId); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 保存部门选择 /// /// 包含id、departmentId、departmentName的JSON对象 /// 保存结果 [HttpPost("SaveDepartmentSelection")] public ResponseResult SaveDepartmentSelection([FromBody] JObject data) { var id = Convert.ToDecimal(data["id"]?.ToString()); var departmentId = data["departmentId"]?.ToString(); var departmentName = data["departmentName"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().SaveDepartmentSelection(id, departmentId, departmentName); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 提交检验单 /// /// 包含id、userNo的JSON对象 /// 提交结果 [HttpPost("submitInspection")] public ResponseResult SubmitInspection([FromBody] JObject data) { var id = Convert.ToDecimal(data["id"]?.ToString()); var userNo = data["userNo"]?.ToString(); try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().SubmitInspection(id, userNo); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 刷新检验项目 - 调用存储过程 /// /// 包含id、no、user的JSON对象 /// 刷新结果 [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 RKJService().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); } } /// /// 保存下拉框字段(不良原因、评审状态、所属车间) /// /// 包含字段数据的DTO /// 保存结果 [HttpPost("saveDropdownFields")] public ResponseResult SaveDropdownFields([FromBody] RKJDto rkjDto) { try { dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().SaveDropdownFields(rkjDto); resultInfos.tbBillList = tbBillList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 保存不良描述 /// /// 包含gid和fngDesc的JSON对象 /// 保存结果 [HttpPost("saveFngDesc")] public ResponseResult SaveFngDesc([FromBody] JObject data) { try { var gid = Convert.ToDecimal(data["gid"]?.ToString()); var fngDesc = data["fngDesc"]?.ToString(); dynamic resultInfos = new ExpandoObject(); var tbBillList = new RKJService().SaveFngDesc(gid, fngDesc); 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 RKJService().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 RKJService(); 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 RKJService(); 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}"); } } /// /// 处理CORS预检请求 /// /// OK [HttpOptions("PreviewFtpFile")] [HttpOptions("DownloadFtpFile")] public IActionResult HandleOptions() { // 处理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"); Response.Headers.Add("Access-Control-Max-Age", "86400"); return Ok(); } }