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