using System.Dynamic; using MES.Service.Dto.service; using MES.Service.Modes; using MES.Service.service; using MES.Service.service.QC; using MES.Service.util; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace MESApplication.Controllers.QC; /// /// PCB检测数据控制器 /// [Route("api/[controller]")] [ApiController] public class PcbTestDataController : ControllerBase { private readonly MessageCenterManager _manager = new(); private readonly PcbTestDataService _service = new(); private readonly string METHOD = "POST"; private readonly string TableName = "MES_PCB_TEST_DATA"; private readonly string URL = "http://localhost:10054/api/PcbTestData/"; /// /// 保存整板检测数据 /// /// 整板检测数据DTO /// 保存结果 [HttpPost("SaveWholeboardData")] public ResponseResult SaveWholeboardData( [FromBody] WholeboardGenerateDto dto) { var entity = new MessageCenter(); entity.TableName = TableName; entity.Url = URL + "SaveWholeboardData"; entity.Method = METHOD; entity.Data = JsonConvert.SerializeObject(dto); entity.Status = 1; entity.CreateBy = "PL017"; try { dynamic resultInfos = new ExpandoObject(); var result = _service.SaveWholeboardData(dto); resultInfos.result = result; resultInfos.message = result ? "整板检测数据保存成功" : "整板检测数据保存失败"; entity.Result = result ? (short)1 : (short)0; entity.DealWith = 1; _manager.save(entity); return new ResponseResult { status = result ? 0 : 1, message = result ? "OK" : "FAIL", data = resultInfos }; } catch (Exception ex) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = ex.Message; _manager.save(entity); return ResponseResult.ResponseError(ex); } } /// /// 保存单板检测数据 /// /// 单板检测数据DTO /// 保存结果 [HttpPost("SaveSingleBoardData")] public ResponseResult SaveSingleBoardData( [FromBody] SingleBoardGenerateDto dto) { var entity = new MessageCenter(); entity.TableName = TableName; entity.Url = URL + "SaveSingleBoardData"; entity.Method = METHOD; entity.Data = JsonConvert.SerializeObject(dto); entity.Status = 1; entity.CreateBy = "PL017"; try { dynamic resultInfos = new ExpandoObject(); var result = _service.SaveSingleBoardData(dto); resultInfos.result = result; resultInfos.message = result ? "单板检测数据保存成功" : "单板检测数据保存失败"; entity.Result = result ? (short)1 : (short)0; entity.DealWith = 1; _manager.save(entity); return new ResponseResult { status = result ? 0 : 1, message = result ? "OK" : "FAIL", data = resultInfos }; } catch (Exception ex) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = ex.Message; _manager.save(entity); return ResponseResult.ResponseError(ex); } } /// /// 分页查询PCB检测数据 /// /// 查询请求 /// 分页数据 [HttpPost("GetPage")] public ResponseResult GetPage([FromBody] JObject request) { try { var dataType = request["dataType"]?.ToString(); var deviceName = request["deviceName"]?.ToString(); var pcbSn = request["pcbSn"]?.ToString(); var startTime = request["startTime"]?.ToString(); var endTime = request["endTime"]?.ToString(); var pageIndex = request["pageIndex"]?.ToObject() ?? 1; var pageSize = request["pageSize"]?.ToObject() ?? 20; DateTime? startDateTime = null; DateTime? endDateTime = null; if (StringUtil.IsNotNullOrEmpty(startTime) && DateTime.TryParse(startTime, out var start)) startDateTime = start; if (StringUtil.IsNotNullOrEmpty(endTime) && DateTime.TryParse(endTime, out var end)) endDateTime = end; var (items, totalCount) = _service.GetPcbTestDataPage( dataType, deviceName, pcbSn, startDateTime, endDateTime, pageIndex, pageSize); dynamic resultInfos = new ExpandoObject(); resultInfos.items = items; return new ResponseResult { status = 0, message = "OK", data = resultInfos, TotalCount = totalCount }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 根据ID获取PCB检测数据 /// /// 请求参数 /// PCB检测数据 [HttpPost("GetById")] public ResponseResult GetById([FromBody] JObject request) { try { var id = request["id"]?.ToObject(); if (!id.HasValue) return new ResponseResult { status = 1, message = "ID不能为空", data = null }; var testData = _service.GetPcbTestDataById(id.Value); var componentData = _service.GetComponentDataByTestDataId(id.Value); dynamic resultInfos = new ExpandoObject(); resultInfos.testData = testData; resultInfos.componentData = componentData; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 根据PCB条码获取检测数据 /// /// 请求参数 /// 检测数据列表 [HttpPost("GetByPcbSn")] public ResponseResult GetByPcbSn([FromBody] JObject request) { try { var pcbSn = request["pcbSn"]?.ToString(); if (StringUtil.IsNullOrEmpty(pcbSn)) return new ResponseResult { status = 1, message = "PCB条码不能为空", data = null }; var testDataList = _service.GetPcbTestDataByPcbSn(pcbSn); dynamic resultInfos = new ExpandoObject(); resultInfos.testDataList = testDataList; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取器件检测数据 /// /// 请求参数 /// 器件检测数据 [HttpPost("GetComponentData")] public ResponseResult GetComponentData([FromBody] JObject request) { try { var testDataId = request["testDataId"]?.ToObject(); if (!testDataId.HasValue) return new ResponseResult { status = 1, message = "测试数据ID不能为空", data = null }; var componentData = _service.GetComponentDataByTestDataId(testDataId.Value); dynamic resultInfos = new ExpandoObject(); resultInfos.componentData = componentData; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 获取检测统计数据 /// /// 请求参数 /// 统计数据 [HttpPost("GetStatistics")] public ResponseResult GetStatistics([FromBody] JObject request) { try { var dataType = request["dataType"]?.ToString(); var deviceName = request["deviceName"]?.ToString(); var startTime = request["startTime"]?.ToString(); var endTime = request["endTime"]?.ToString(); DateTime? startDateTime = null; DateTime? endDateTime = null; if (StringUtil.IsNotNullOrEmpty(startTime) && DateTime.TryParse(startTime, out var start)) startDateTime = start; if (StringUtil.IsNotNullOrEmpty(endTime) && DateTime.TryParse(endTime, out var end)) endDateTime = end; var statistics = _service.GetTestStatistics(dataType, deviceName, startDateTime, endDateTime); dynamic resultInfos = new ExpandoObject(); resultInfos.statistics = statistics; return new ResponseResult { status = 0, message = "OK", data = resultInfos }; } catch (Exception ex) { return ResponseResult.ResponseError(ex); } } /// /// 删除PCB检测数据 /// /// 请求参数 /// 删除结果 [HttpPost("Delete")] public ResponseResult Delete([FromBody] JObject request) { var entity = new MessageCenter(); entity.TableName = TableName; entity.Url = URL + "Delete"; entity.Method = METHOD; entity.Data = JsonConvert.SerializeObject(request); entity.Status = 1; entity.CreateBy = "PL017"; try { var id = request["id"]?.ToObject(); if (!id.HasValue) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = "ID不能为空"; _manager.save(entity); return new ResponseResult { status = 1, message = "ID不能为空", data = null }; } var result = _service.DeletePcbTestData(id.Value); dynamic resultInfos = new ExpandoObject(); resultInfos.result = result; resultInfos.message = result ? "删除成功" : "删除失败"; entity.Result = result ? (short)1 : (short)0; entity.DealWith = 1; _manager.save(entity); return new ResponseResult { status = result ? 0 : 1, message = result ? "OK" : "FAIL", data = resultInfos }; } catch (Exception ex) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = ex.Message; _manager.save(entity); return ResponseResult.ResponseError(ex); } } /// /// 统一保存接口(自动识别整板或单板数据) /// /// 请求参数 /// 保存结果 [HttpPost("SaveTestData")] public ResponseResult SaveTestData([FromBody] JObject request) { var entity = new MessageCenter(); entity.TableName = TableName; entity.Url = URL + "SaveTestData"; entity.Method = METHOD; entity.Data = JsonConvert.SerializeObject(request); entity.Status = 1; entity.CreateBy = "PL017"; try { var dataType = request["dataType"]?.ToString(); if (StringUtil.IsNullOrEmpty(dataType)) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = "数据类型不能为空,请指定WHOLE或SINGLE"; _manager.save(entity); return new ResponseResult { status = 1, message = "数据类型不能为空,请指定WHOLE或SINGLE", data = null }; } dynamic resultInfos = new ExpandoObject(); var result = false; var message = ""; switch (dataType.ToUpper()) { case "WHOLE": var wholeboardDto = request["data"] ?.ToObject(); if (wholeboardDto == null) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = "整板数据不能为空"; _manager.save(entity); return new ResponseResult { status = 1, message = "整板数据不能为空", data = null }; } result = _service.SaveWholeboardData(wholeboardDto); message = result ? "整板检测数据保存成功" : "整板检测数据保存失败"; break; case "SINGLE": var singleBoardDto = request["data"] ?.ToObject(); if (singleBoardDto == null) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = "单板数据不能为空"; _manager.save(entity); return new ResponseResult { status = 1, message = "单板数据不能为空", data = null }; } result = _service.SaveSingleBoardData(singleBoardDto); message = result ? "单板检测数据保存成功" : "单板检测数据保存失败"; break; default: entity.Result = 0; entity.DealWith = 0; entity.ResultData = "不支持的数据类型,请指定WHOLE或SINGLE"; _manager.save(entity); return new ResponseResult { status = 1, message = "不支持的数据类型,请指定WHOLE或SINGLE", data = null }; } resultInfos.result = result; resultInfos.message = message; entity.Result = result ? (short)1 : (short)0; entity.DealWith = 1; _manager.save(entity); return new ResponseResult { status = result ? 0 : 1, message = result ? "OK" : "FAIL", data = resultInfos }; } catch (Exception ex) { entity.Result = 0; entity.DealWith = 0; entity.ResultData = ex.Message; _manager.save(entity); return ResponseResult.ResponseError(ex); } } }