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();
}
}