using System.Collections.Generic;
|
using System.Dynamic;
|
using System.Linq;
|
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;
|
|
/// <summary>
|
/// SPI/AOI检测数据控制器
|
/// </summary>
|
[Route("api/[controller]")]
|
[ApiController]
|
public class SpiAoiController : ControllerBase
|
{
|
private readonly MessageCenterManager _manager = new();
|
private readonly SpiAoiService _service = new();
|
|
private const string METHOD = "POST";
|
private const string HeaderTableName = "MES_SPI_AOI_HEADER";
|
private const string DetailTableName = "MES_SPI_AOI_DETAIL";
|
private const string BaseUrl = "http://localhost:10054/api/QC/SpiAoi/";
|
|
/// <summary>
|
/// Upload AOI header data.
|
/// </summary>
|
/// <param name="header">AOI header payload.</param>
|
/// <returns>Upload result.</returns>
|
[HttpPost("UploadAoiHeader")]
|
public ResponseResult UploadAoiHeader(
|
[FromBody] SpiAoiHeaderDto header)
|
{
|
var entity = new MessageCenter
|
{
|
TableName = HeaderTableName,
|
Url = BaseUrl + "UploadAoiHeader",
|
Method = METHOD,
|
Data = JsonConvert.SerializeObject(header),
|
Status = 1,
|
CreateBy = "SPI_AOI_SYSTEM"
|
};
|
|
try
|
{
|
var response = _service.UploadAoiHeader(header);
|
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.headerId = response.HeaderId;
|
resultInfos.message = "AOI header upload succeeded";
|
|
entity.Result = 1;
|
entity.DealWith = 1;
|
entity.ResultData = JsonConvert.SerializeObject(response);
|
_manager.save(entity);
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
entity.Result = 0;
|
entity.DealWith = 0;
|
entity.ResultData = ex.Message;
|
_manager.save(entity);
|
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// Batch upload AOI header data.
|
/// </summary>
|
/// <param name="headers">AOI header payload collection.</param>
|
/// <returns>Upload result.</returns>
|
[HttpPost("UploadAoiHeaderBatch")]
|
public ResponseResult UploadAoiHeaderBatch(
|
[FromBody] List<SpiAoiHeaderDto> headers)
|
{
|
var entity = new MessageCenter
|
{
|
TableName = HeaderTableName,
|
Url = BaseUrl + "UploadAoiHeaderBatch",
|
Method = METHOD,
|
Data = JsonConvert.SerializeObject(headers),
|
Status = 1,
|
CreateBy = "SPI_AOI_SYSTEM"
|
};
|
|
try
|
{
|
var responses = _service.UploadAoiHeaderBatch(headers);
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.headerIds = responses.Select(r => r.HeaderId).ToList();
|
resultInfos.message = "AOI header batch upload succeeded";
|
|
entity.Result = 1;
|
entity.DealWith = 1;
|
entity.ResultData = JsonConvert.SerializeObject(responses);
|
_manager.save(entity);
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
entity.Result = 0;
|
entity.DealWith = 0;
|
entity.ResultData = ex.Message;
|
_manager.save(entity);
|
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// Upload SPI detail data.
|
/// </summary>
|
/// <param name="request">SPI detail payload.</param>
|
/// <returns>Upload result.</returns>
|
[HttpPost("UploadSpiDetails")]
|
public ResponseResult UploadSpiDetails(
|
[FromBody] SpiAoiDetailDto request)
|
{
|
var entity = new MessageCenter
|
{
|
TableName = DetailTableName,
|
Url = BaseUrl + "UploadSpiDetails",
|
Method = METHOD,
|
Data = JsonConvert.SerializeObject(request),
|
Status = 1,
|
CreateBy = "SPI_AOI_SYSTEM"
|
};
|
|
try
|
{
|
var response = _service.UploadSpiDetails(request);
|
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.detailCount = response.DetailCount;
|
resultInfos.message = "SPI detail upload succeeded";
|
|
entity.Result = 1;
|
entity.DealWith = 1;
|
entity.ResultData = JsonConvert.SerializeObject(response);
|
_manager.save(entity);
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
entity.Result = 0;
|
entity.DealWith = 0;
|
entity.ResultData = ex.Message;
|
_manager.save(entity);
|
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// Batch upload SPI detail data.
|
/// </summary>
|
/// <param name="requests">SPI detail payload collection.</param>
|
/// <returns>Upload result.</returns>
|
[HttpPost("UploadSpiDetailsBatch")]
|
public ResponseResult UploadSpiDetailsBatch(
|
[FromBody] List<SpiAoiDetailDto> requests)
|
{
|
var entity = new MessageCenter
|
{
|
TableName = DetailTableName,
|
Url = BaseUrl + "UploadSpiDetailsBatch",
|
Method = METHOD,
|
Data = JsonConvert.SerializeObject(requests),
|
Status = 1,
|
CreateBy = "SPI_AOI_SYSTEM"
|
};
|
|
try
|
{
|
var response = _service.UploadSpiDetailsBatch(requests);
|
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.detailCount = response.DetailCount;
|
resultInfos.message = "SPI detail batch upload succeeded";
|
|
entity.Result = 1;
|
entity.DealWith = 1;
|
entity.ResultData = JsonConvert.SerializeObject(response);
|
_manager.save(entity);
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
entity.Result = 0;
|
entity.DealWith = 0;
|
entity.ResultData = ex.Message;
|
_manager.save(entity);
|
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// 根据条码查询SPI/AOI检测数据
|
/// </summary>
|
/// <param name="request">请求参数</param>
|
/// <returns>检测数据</returns>
|
[HttpPost("GetByBarcode")]
|
public ResponseResult GetByBarcode([FromBody] JObject request)
|
{
|
try
|
{
|
var boardBarcode = request["boardBarcode"]?.ToString();
|
if (StringUtil.IsNullOrEmpty(boardBarcode))
|
{
|
return new ResponseResult
|
{
|
status = 1,
|
message = "boardBarcode 不能为空",
|
data = null
|
};
|
}
|
|
var (header, details) = _service.GetByBarcode(boardBarcode);
|
|
if (header == null)
|
{
|
return new ResponseResult
|
{
|
status = 1,
|
message = $"未找到条码 {boardBarcode} 的检测数据",
|
data = null
|
};
|
}
|
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.header = header;
|
resultInfos.details = details;
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// 根据ID查询SPI/AOI检测数据
|
/// </summary>
|
/// <param name="request">请求参数</param>
|
/// <returns>检测数据</returns>
|
[HttpPost("GetById")]
|
public ResponseResult GetById([FromBody] JObject request)
|
{
|
try
|
{
|
var headerId = request["headerId"]?.ToObject<decimal>();
|
if (!headerId.HasValue)
|
{
|
return new ResponseResult
|
{
|
status = 1,
|
message = "headerId 不能为空",
|
data = null
|
};
|
}
|
|
var (header, details) = _service.GetById(headerId.Value);
|
|
if (header == null)
|
{
|
return new ResponseResult
|
{
|
status = 1,
|
message = $"未找到ID {headerId} 的检测数据",
|
data = null
|
};
|
}
|
|
dynamic resultInfos = new ExpandoObject();
|
resultInfos.header = header;
|
resultInfos.details = details;
|
|
return new ResponseResult
|
{
|
status = 0,
|
message = "OK",
|
data = resultInfos
|
};
|
}
|
catch (Exception ex)
|
{
|
return ResponseResult.ResponseError(ex);
|
}
|
}
|
|
/// <summary>
|
/// 分页查询SPI/AOI检测数据
|
/// </summary>
|
/// <param name="request">查询请求</param>
|
/// <returns>分页数据</returns>
|
[HttpPost("GetPage")]
|
public ResponseResult GetPage([FromBody] JObject request)
|
{
|
try
|
{
|
var boardBarcode = request["boardBarcode"]?.ToString();
|
var workOrder = request["workOrder"]?.ToString();
|
var surface = request["surface"]?.ToString();
|
var startDate = request["startDate"]?.ToString();
|
var endDate = request["endDate"]?.ToString();
|
var pageIndex = request["pageIndex"]?.ToObject<int>() ?? 1;
|
var pageSize = request["pageSize"]?.ToObject<int>() ?? 20;
|
|
DateTime? startDateTime = null;
|
DateTime? endDateTime = null;
|
|
if (StringUtil.IsNotNullOrEmpty(startDate) &&
|
DateTime.TryParse(startDate, out var start))
|
{
|
startDateTime = start;
|
}
|
|
if (StringUtil.IsNotNullOrEmpty(endDate) &&
|
DateTime.TryParse(endDate, out var end))
|
{
|
endDateTime = end;
|
}
|
|
var (items, totalCount) = _service.GetPage(
|
boardBarcode, workOrder, surface, 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);
|
}
|
}
|
}
|