From c6d9fc76d16c944e64d6490eb2a6d866fd7a38f0 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 12 十一月 2025 09:06:01 +0800
Subject: [PATCH] 11
---
MES.Service/service/QC/PcbTestDataService.cs | 703 +++++++++++++++++++++++++++++----------------------------
1 files changed, 359 insertions(+), 344 deletions(-)
diff --git a/MES.Service/service/QC/PcbTestDataService.cs b/MES.Service/service/QC/PcbTestDataService.cs
index 2f70d7b..0f5aa5c 100644
--- a/MES.Service/service/QC/PcbTestDataService.cs
+++ b/MES.Service/service/QC/PcbTestDataService.cs
@@ -1,366 +1,381 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
-namespace MES.Service.service.QC
+namespace MES.Service.service.QC;
+
+/// <summary>
+/// PCB妫�娴嬫暟鎹湇鍔�
+/// </summary>
+public class PcbTestDataService
{
/// <summary>
- /// PCB妫�娴嬫暟鎹湇鍔�
+ /// 淇濆瓨鏁存澘妫�娴嬫暟鎹�
/// </summary>
- public class PcbTestDataService
+ /// <param name="dto">鏁存澘妫�娴嬫暟鎹瓺TO</param>
+ /// <returns>淇濆瓨缁撴灉</returns>
+ public bool SaveWholeboardData(WholeboardGenerateDto dto)
{
- /// <summary>
- /// 淇濆瓨鏁存澘妫�娴嬫暟鎹�
- /// </summary>
- /// <param name="dto">鏁存澘妫�娴嬫暟鎹瓺TO</param>
- /// <returns>淇濆瓨缁撴灉</returns>
- public bool SaveWholeboardData(WholeboardGenerateDto dto)
+ try
{
- try
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
{
- return SqlSugarHelper.UseTransactionWithOracle(db =>
+ var testData = ConvertWholeboardToEntity(dto);
+ testData.CreateTime = DateTime.Now;
+ testData.DataType = "WHOLE";
+
+ var testDataId =
+ db.Insertable(testData).ExecuteReturnIdentity();
+
+ var affectedRows = 1;
+ if (dto.BoardData != null && dto.BoardData.Count > 0)
{
- var testData = ConvertWholeboardToEntity(dto);
- testData.CreateTime = DateTime.Now;
- testData.DataType = "WHOLE";
-
- var testDataId = db.Insertable(testData).ExecuteReturnIdentity();
-
- var affectedRows = 1;
- if (dto.BoardData != null && dto.BoardData.Count > 0)
- {
- var componentDataList = new List<MesPcbComponentData>();
- foreach (var boardData in dto.BoardData)
+ var componentDataList = new List<MesPcbComponentData>();
+ foreach (var boardData in dto.BoardData)
+ if (boardData.CompData != null &&
+ boardData.CompData.Count > 0)
{
- if (boardData.CompData != null && boardData.CompData.Count > 0)
- {
- var componentData = ConvertComponentListToEntity(boardData.CompData, testDataId);
- componentDataList.AddRange(componentData);
- }
+ var componentData =
+ ConvertComponentListToEntity(boardData.CompData,
+ testDataId);
+ componentDataList.AddRange(componentData);
}
- if (componentDataList.Count > 0)
- {
- affectedRows += db.Insertable(componentDataList).ExecuteCommand();
- }
- }
+ if (componentDataList.Count > 0)
+ affectedRows += db.Insertable(componentDataList)
+ .ExecuteCommand();
+ }
- return affectedRows;
- }) > 0;
- }
- catch (Exception ex)
- {
- throw new Exception($"淇濆瓨鏁存澘妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
+ return affectedRows;
+ }) > 0;
}
-
- /// <summary>
- /// 淇濆瓨鍗曟澘妫�娴嬫暟鎹�
- /// </summary>
- /// <param name="dto">鍗曟澘妫�娴嬫暟鎹瓺TO</param>
- /// <returns>淇濆瓨缁撴灉</returns>
- public bool SaveSingleBoardData(SingleBoardGenerateDto dto)
+ catch (Exception ex)
{
- try
- {
- return SqlSugarHelper.UseTransactionWithOracle(db =>
- {
- var testData = ConvertSingleBoardToEntity(dto);
- testData.CreateTime = DateTime.Now;
- testData.DataType = "SINGLE";
-
- var testDataId = db.Insertable(testData).ExecuteReturnIdentity();
-
- var affectedRows = 1;
- if (dto.CompData != null && dto.CompData.Count > 0)
- {
- var componentDataList = ConvertComponentListToEntity(dto.CompData, testDataId);
- affectedRows += db.Insertable(componentDataList).ExecuteCommand();
- }
-
- return affectedRows;
- }) > 0;
- }
- catch (Exception ex)
- {
- throw new Exception($"淇濆瓨鍗曟澘妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
+ throw new Exception($"淇濆瓨鏁存澘妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
}
-
- /// <summary>
- /// 鏍规嵁ID鑾峰彇PCB妫�娴嬫暟鎹�
- /// </summary>
- /// <param name="id">鏁版嵁ID</param>
- /// <returns>PCB妫�娴嬫暟鎹�</returns>
- public MesPcbTestData GetPcbTestDataById(decimal id)
- {
- try
- {
- var db = SqlSugarHelper.GetInstance();
- return db.Queryable<MesPcbTestData>()
- .Where(x => x.Id == id)
- .First();
- }
- catch (Exception ex)
- {
- throw new Exception($"鑾峰彇PCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
- }
-
- /// <summary>
- /// 鏍规嵁鏉′欢鍒嗛〉鏌ヨPCB妫�娴嬫暟鎹�
- /// </summary>
- /// <param name="dataType">鏁版嵁绫诲瀷锛圵HOLE/SINGLE锛�</param>
- /// <param name="deviceName">璁惧鍚嶇О</param>
- /// <param name="pcbSn">PCB鏉$爜</param>
- /// <param name="startTime">寮�濮嬫椂闂�</param>
- /// <param name="endTime">缁撴潫鏃堕棿</param>
- /// <param name="pageIndex">椤电爜</param>
- /// <param name="pageSize">椤靛ぇ灏�</param>
- /// <returns>鍒嗛〉鏁版嵁</returns>
- public (List<MesPcbTestData> items, int totalCount) GetPcbTestDataPage(
- string dataType = null,
- string deviceName = null,
- string pcbSn = null,
- DateTime? startTime = null,
- DateTime? endTime = null,
- int pageIndex = 1,
- int pageSize = 20)
- {
- try
- {
- var db = SqlSugarHelper.GetInstance();
- var totalCount = 0;
-
- var data = db.Queryable<MesPcbTestData>()
- .WhereIF(StringUtil.IsNotNullOrEmpty(dataType), x => x.DataType == dataType)
- .WhereIF(StringUtil.IsNotNullOrEmpty(deviceName), x => x.DeviceName.Contains(deviceName))
- .WhereIF(StringUtil.IsNotNullOrEmpty(pcbSn), x => x.PcbSn.Contains(pcbSn))
- .WhereIF(startTime.HasValue, x => x.PcbTestTime >= startTime.Value)
- .WhereIF(endTime.HasValue, x => x.PcbTestTime <= endTime.Value)
- .OrderBy(x => x.PcbTestTime, OrderByType.Desc)
- .ToPageList(pageIndex, pageSize, ref totalCount);
-
- return (data, totalCount);
- }
- catch (Exception ex)
- {
- throw new Exception($"鏌ヨPCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
- }
-
- /// <summary>
- /// 鏍规嵁娴嬭瘯鏁版嵁ID鑾峰彇鍣ㄤ欢鏁版嵁
- /// </summary>
- /// <param name="testDataId">娴嬭瘯鏁版嵁ID</param>
- /// <returns>鍣ㄤ欢鏁版嵁鍒楄〃</returns>
- public List<MesPcbComponentData> GetComponentDataByTestDataId(decimal testDataId)
- {
- try
- {
- var db = SqlSugarHelper.GetInstance();
- return db.Queryable<MesPcbComponentData>()
- .Where(x => x.TestDataId == testDataId)
- .OrderBy(x => x.CompDesignator)
- .ToList();
- }
- catch (Exception ex)
- {
- throw new Exception($"鑾峰彇鍣ㄤ欢鏁版嵁澶辫触: {ex.Message}", ex);
- }
- }
-
- /// <summary>
- /// 鏍规嵁PCB鏉$爜鑾峰彇妫�娴嬫暟鎹�
- /// </summary>
- /// <param name="pcbSn">PCB鏉$爜</param>
- /// <returns>妫�娴嬫暟鎹垪琛�</returns>
- public List<MesPcbTestData> GetPcbTestDataByPcbSn(string pcbSn)
- {
- try
- {
- var db = SqlSugarHelper.GetInstance();
- return db.Queryable<MesPcbTestData>()
- .Where(x => x.PcbSn == pcbSn)
- .OrderBy(x => x.PcbTestTime, OrderByType.Desc)
- .ToList();
- }
- catch (Exception ex)
- {
- throw new Exception($"鏍规嵁PCB鏉$爜鑾峰彇妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
- }
-
- /// <summary>
- /// 鍒犻櫎PCB妫�娴嬫暟鎹紙绾ц仈鍒犻櫎鍣ㄤ欢鏁版嵁锛�
- /// </summary>
- /// <param name="id">鏁版嵁ID</param>
- /// <returns>鍒犻櫎缁撴灉</returns>
- public bool DeletePcbTestData(decimal id)
- {
- try
- {
- return SqlSugarHelper.UseTransactionWithOracle(db =>
- {
- var affectedRows = 0;
-
- // 鍏堝垹闄ゅ櫒浠舵暟鎹�
- affectedRows += db.Deleteable<MesPcbComponentData>()
- .Where(x => x.TestDataId == id)
- .ExecuteCommand();
-
- // 鍐嶅垹闄や富鏁版嵁
- affectedRows += db.Deleteable<MesPcbTestData>()
- .Where(x => x.Id == id)
- .ExecuteCommand();
-
- return affectedRows;
- }) > 0;
- }
- catch (Exception ex)
- {
- throw new Exception($"鍒犻櫎PCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
- }
- }
-
- /// <summary>
- /// 鑾峰彇妫�娴嬬粺璁℃暟鎹�
- /// </summary>
- /// <param name="dataType">鏁版嵁绫诲瀷</param>
- /// <param name="deviceName">璁惧鍚嶇О</param>
- /// <param name="startTime">寮�濮嬫椂闂�</param>
- /// <param name="endTime">缁撴潫鏃堕棿</param>
- /// <returns>缁熻鏁版嵁</returns>
- public dynamic GetTestStatistics(string dataType = null, string deviceName = null,
- DateTime? startTime = null, DateTime? endTime = null)
- {
- try
- {
- var db = SqlSugarHelper.GetInstance();
-
- var statistics = db.Queryable<MesPcbTestData>()
- .WhereIF(StringUtil.IsNotNullOrEmpty(dataType), x => x.DataType == dataType)
- .WhereIF(StringUtil.IsNotNullOrEmpty(deviceName), x => x.DeviceName == deviceName)
- .WhereIF(startTime.HasValue, x => x.PcbTestTime >= startTime.Value)
- .WhereIF(endTime.HasValue, x => x.PcbTestTime <= endTime.Value)
- .GroupBy(x => new { x.DataType, x.DeviceName })
- .Select(x => new
- {
- DataType = x.DataType,
- DeviceName = x.DeviceName,
- TotalCount = SqlFunc.AggregateCount(x.Id),
- PassCount = SqlFunc.AggregateCount(SqlFunc.IIF(x.PcbFinalResult == "PASS", x.Id, 0)),
- FailCount = SqlFunc.AggregateCount(SqlFunc.IIF(x.PcbFinalResult == "FAIL", x.Id, 0)),
- AvgCycleTime = SqlFunc.AggregateAvg(x.PcbCycleTime)
- })
- .ToList();
-
- return statistics;
- }
- catch (Exception ex)
- {
- throw new Exception($"鑾峰彇妫�娴嬬粺璁℃暟鎹け璐�: {ex.Message}", ex);
- }
- }
-
- #region 绉佹湁鏂规硶 - DTO杞崲
-
- /// <summary>
- /// 灏嗘暣鏉緿TO杞崲涓哄疄浣�
- /// </summary>
- /// <param name="dto">鏁存澘DTO</param>
- /// <returns>瀹炰綋瀵硅薄</returns>
- private MesPcbTestData ConvertWholeboardToEntity(WholeboardGenerateDto dto)
- {
- return new MesPcbTestData
- {
- DeviceName = dto.DeviceName,
- PcbSn = dto.PcbSn,
- PcbTrackLine = dto.PcbTrackLine,
- PcbBoardSide = dto.PcbBoardSide,
- PcbTestTime = StringUtil.IsNotNullOrEmpty(dto.PcbTestTime) ?
- DateTime.Parse(dto.PcbTestTime) : null,
- PcbCycleTime = (decimal?)dto.PcbCycleTime,
- PcbProjectName = dto.PcbProjectName,
- PcbRobotResult = dto.PcbRobotResult,
- PcbUserResult = dto.PcbUserResult,
- PcbFinalResult = dto.PcbFinalResult,
- PcbRepairUser = dto.PcbRepairUser,
- PcbBoardNumber = dto.PcbBoardNumber,
- PcbBoardRobotNgNumber = dto.PcbBoardRobotNgNumber,
- PcbBoardUserNgNumber = dto.PcbBoardUserNgNumber,
- PcbBoardRepassNumber = dto.PcbBoardRepassNumber,
- PcbCompNumber = dto.PcbCompNumber,
- PcbCompRobotNgNumber = dto.PcbCompRobotNgNumber,
- PcbCompUserNgNumber = dto.PcbCompUserNgNumber,
- PcbCompRepassNumber = dto.PcbCompRepassNumber
- };
- }
-
- /// <summary>
- /// 灏嗗崟鏉緿TO杞崲涓哄疄浣�
- /// </summary>
- /// <param name="dto">鍗曟澘DTO</param>
- /// <returns>瀹炰綋瀵硅薄</returns>
- private MesPcbTestData ConvertSingleBoardToEntity(SingleBoardGenerateDto dto)
- {
- return new MesPcbTestData
- {
- DeviceName = dto.DeviceName,
- PcbSn = dto.PcbSn,
- PcbTrackLine = dto.PcbTrackLine,
- PcbBoardSide = dto.PcbBoardSide,
- PcbTestTime = StringUtil.IsNotNullOrEmpty(dto.PcbTestTime) ?
- DateTime.Parse(dto.PcbTestTime) : null,
- PcbCycleTime = (decimal?)dto.PcbCycleTime,
- PcbProjectName = dto.PcbProjectName,
- PcbRobotResult = dto.PcbRobotResult,
- PcbUserResult = dto.PcbUserResult,
- PcbFinalResult = dto.PcbFinalResult,
- PcbRepairUser = dto.PcbRepairUser,
- PcbBoardNumber = dto.PcbBoardNumber,
- PcbCompNumber = dto.PcbCompNumber,
- BoardSn = dto.BoardSn,
- BoardNo = dto.BoardNo,
- BoardRobotResult = dto.BoardRobotResult,
- BoardUserResult = dto.BoardUserResult,
- BoardFinalResult = dto.BoardFinalResult,
- BoardCompNumber = dto.BoardCompNumber,
- BoardCompRobotNgNumber = dto.BoardCompRobotNgNumber,
- BoardCompUserNgNumber = dto.BoardCompUserNgNumber,
- BoardCompRepassNumber = dto.BoardCompRepassNumber
- };
- }
-
- /// <summary>
- /// 灏嗗櫒浠禗TO鍒楄〃杞崲涓哄疄浣撳垪琛�
- /// </summary>
- /// <param name="dtoList">鍣ㄤ欢DTO鍒楄〃</param>
- /// <param name="testDataId">娴嬭瘯鏁版嵁ID</param>
- /// <returns>瀹炰綋鍒楄〃</returns>
- private List<MesPcbComponentData> ConvertComponentListToEntity(List<ComponentDataDto> dtoList, decimal testDataId)
- {
- return dtoList.Select(dto => new MesPcbComponentData
- {
- TestDataId = testDataId,
- CompDesignator = dto.CompDesignator,
- CompPart = dto.CompPart,
- CompPackage = dto.CompPackage,
- CompType = dto.CompType,
- CompRobotCode = dto.CompRobotCode,
- CompRobotResult = dto.CompRobotResult,
- CompUserCode = dto.CompUserCode,
- CompUserResult = dto.CompUserResult,
- CompImage = dto.CompImage,
- CreateTime = DateTime.Now
- }).ToList();
- }
-
- #endregion
}
+
+ /// <summary>
+ /// 淇濆瓨鍗曟澘妫�娴嬫暟鎹�
+ /// </summary>
+ /// <param name="dto">鍗曟澘妫�娴嬫暟鎹瓺TO</param>
+ /// <returns>淇濆瓨缁撴灉</returns>
+ public bool SaveSingleBoardData(SingleBoardGenerateDto dto)
+ {
+ try
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ var testData = ConvertSingleBoardToEntity(dto);
+ testData.CreateTime = DateTime.Now;
+ testData.DataType = "SINGLE";
+
+ var testDataId =
+ db.Insertable(testData).ExecuteReturnIdentity();
+
+ var affectedRows = 1;
+ if (dto.CompData != null && dto.CompData.Count > 0)
+ {
+ var componentDataList =
+ ConvertComponentListToEntity(dto.CompData, testDataId);
+ affectedRows += db.Insertable(componentDataList)
+ .ExecuteCommand();
+ }
+
+ return affectedRows;
+ }) > 0;
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"淇濆瓨鍗曟澘妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鏍规嵁ID鑾峰彇PCB妫�娴嬫暟鎹�
+ /// </summary>
+ /// <param name="id">鏁版嵁ID</param>
+ /// <returns>PCB妫�娴嬫暟鎹�</returns>
+ public MesPcbTestData GetPcbTestDataById(decimal id)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+ return db.Queryable<MesPcbTestData>()
+ .Where(x => x.Id == id)
+ .First();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鑾峰彇PCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鏍规嵁鏉′欢鍒嗛〉鏌ヨPCB妫�娴嬫暟鎹�
+ /// </summary>
+ /// <param name="dataType">鏁版嵁绫诲瀷锛圵HOLE/SINGLE锛�</param>
+ /// <param name="deviceName">璁惧鍚嶇О</param>
+ /// <param name="pcbSn">PCB鏉$爜</param>
+ /// <param name="startTime">寮�濮嬫椂闂�</param>
+ /// <param name="endTime">缁撴潫鏃堕棿</param>
+ /// <param name="pageIndex">椤电爜</param>
+ /// <param name="pageSize">椤靛ぇ灏�</param>
+ /// <returns>鍒嗛〉鏁版嵁</returns>
+ public (List<MesPcbTestData> items, int totalCount) GetPcbTestDataPage(
+ string dataType = null,
+ string deviceName = null,
+ string pcbSn = null,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
+ int pageIndex = 1,
+ int pageSize = 20)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+ var totalCount = 0;
+
+ var data = db.Queryable<MesPcbTestData>()
+ .WhereIF(StringUtil.IsNotNullOrEmpty(dataType),
+ x => x.DataType == dataType)
+ .WhereIF(StringUtil.IsNotNullOrEmpty(deviceName),
+ x => x.DeviceName.Contains(deviceName))
+ .WhereIF(StringUtil.IsNotNullOrEmpty(pcbSn),
+ x => x.PcbSn.Contains(pcbSn))
+ .WhereIF(startTime.HasValue,
+ x => x.PcbTestTime >= startTime.Value)
+ .WhereIF(endTime.HasValue, x => x.PcbTestTime <= endTime.Value)
+ .OrderBy(x => x.PcbTestTime, OrderByType.Desc)
+ .ToPageList(pageIndex, pageSize, ref totalCount);
+
+ return (data, totalCount);
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鏌ヨPCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鏍规嵁娴嬭瘯鏁版嵁ID鑾峰彇鍣ㄤ欢鏁版嵁
+ /// </summary>
+ /// <param name="testDataId">娴嬭瘯鏁版嵁ID</param>
+ /// <returns>鍣ㄤ欢鏁版嵁鍒楄〃</returns>
+ public List<MesPcbComponentData> GetComponentDataByTestDataId(
+ decimal testDataId)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+ return db.Queryable<MesPcbComponentData>()
+ .Where(x => x.TestDataId == testDataId)
+ .OrderBy(x => x.CompDesignator)
+ .ToList();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鑾峰彇鍣ㄤ欢鏁版嵁澶辫触: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鏍规嵁PCB鏉$爜鑾峰彇妫�娴嬫暟鎹�
+ /// </summary>
+ /// <param name="pcbSn">PCB鏉$爜</param>
+ /// <returns>妫�娴嬫暟鎹垪琛�</returns>
+ public List<MesPcbTestData> GetPcbTestDataByPcbSn(string pcbSn)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+ return db.Queryable<MesPcbTestData>()
+ .Where(x => x.PcbSn == pcbSn)
+ .OrderBy(x => x.PcbTestTime, OrderByType.Desc)
+ .ToList();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鏍规嵁PCB鏉$爜鑾峰彇妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鍒犻櫎PCB妫�娴嬫暟鎹紙绾ц仈鍒犻櫎鍣ㄤ欢鏁版嵁锛�
+ /// </summary>
+ /// <param name="id">鏁版嵁ID</param>
+ /// <returns>鍒犻櫎缁撴灉</returns>
+ public bool DeletePcbTestData(decimal id)
+ {
+ try
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ var affectedRows = 0;
+
+ // 鍏堝垹闄ゅ櫒浠舵暟鎹�
+ affectedRows += db.Deleteable<MesPcbComponentData>()
+ .Where(x => x.TestDataId == id)
+ .ExecuteCommand();
+
+ // 鍐嶅垹闄や富鏁版嵁
+ affectedRows += db.Deleteable<MesPcbTestData>()
+ .Where(x => x.Id == id)
+ .ExecuteCommand();
+
+ return affectedRows;
+ }) > 0;
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鍒犻櫎PCB妫�娴嬫暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ /// <summary>
+ /// 鑾峰彇妫�娴嬬粺璁℃暟鎹�
+ /// </summary>
+ /// <param name="dataType">鏁版嵁绫诲瀷</param>
+ /// <param name="deviceName">璁惧鍚嶇О</param>
+ /// <param name="startTime">寮�濮嬫椂闂�</param>
+ /// <param name="endTime">缁撴潫鏃堕棿</param>
+ /// <returns>缁熻鏁版嵁</returns>
+ public dynamic GetTestStatistics(string dataType = null,
+ string deviceName = null,
+ DateTime? startTime = null, DateTime? endTime = null)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+ var statistics = db.Queryable<MesPcbTestData>()
+ .WhereIF(StringUtil.IsNotNullOrEmpty(dataType),
+ x => x.DataType == dataType)
+ .WhereIF(StringUtil.IsNotNullOrEmpty(deviceName),
+ x => x.DeviceName == deviceName)
+ .WhereIF(startTime.HasValue,
+ x => x.PcbTestTime >= startTime.Value)
+ .WhereIF(endTime.HasValue, x => x.PcbTestTime <= endTime.Value)
+ .GroupBy(x => new { x.DataType, x.DeviceName })
+ .Select(x => new
+ {
+ x.DataType,
+ x.DeviceName,
+ TotalCount = SqlFunc.AggregateCount(x.Id),
+ PassCount = SqlFunc.AggregateCount(
+ SqlFunc.IIF(x.PcbFinalResult == "PASS", x.Id, 0)),
+ FailCount = SqlFunc.AggregateCount(
+ SqlFunc.IIF(x.PcbFinalResult == "FAIL", x.Id, 0)),
+ AvgCycleTime = SqlFunc.AggregateAvg(x.PcbCycleTime)
+ })
+ .ToList();
+
+ return statistics;
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鑾峰彇妫�娴嬬粺璁℃暟鎹け璐�: {ex.Message}", ex);
+ }
+ }
+
+ #region 绉佹湁鏂规硶 - DTO杞崲
+
+ /// <summary>
+ /// 灏嗘暣鏉緿TO杞崲涓哄疄浣�
+ /// </summary>
+ /// <param name="dto">鏁存澘DTO</param>
+ /// <returns>瀹炰綋瀵硅薄</returns>
+ private MesPcbTestData ConvertWholeboardToEntity(WholeboardGenerateDto dto)
+ {
+ return new MesPcbTestData
+ {
+ DeviceName = dto.DeviceName,
+ PcbSn = dto.PcbSn,
+ PcbTrackLine = dto.PcbTrackLine,
+ PcbBoardSide = dto.PcbBoardSide,
+ PcbTestTime = StringUtil.IsNotNullOrEmpty(dto.PcbTestTime)
+ ? DateTime.Parse(dto.PcbTestTime)
+ : null,
+ PcbCycleTime = (decimal?)dto.PcbCycleTime,
+ PcbProjectName = dto.PcbProjectName,
+ PcbRobotResult = dto.PcbRobotResult,
+ PcbUserResult = dto.PcbUserResult,
+ PcbFinalResult = dto.PcbFinalResult,
+ PcbRepairUser = dto.PcbRepairUser,
+ PcbBoardNumber = dto.PcbBoardNumber,
+ PcbBoardRobotNgNumber = dto.PcbBoardRobotNgNumber,
+ PcbBoardUserNgNumber = dto.PcbBoardUserNgNumber,
+ PcbBoardRepassNumber = dto.PcbBoardRepassNumber,
+ PcbCompNumber = dto.PcbCompNumber,
+ PcbCompRobotNgNumber = dto.PcbCompRobotNgNumber,
+ PcbCompUserNgNumber = dto.PcbCompUserNgNumber,
+ PcbCompRepassNumber = dto.PcbCompRepassNumber
+ };
+ }
+
+ /// <summary>
+ /// 灏嗗崟鏉緿TO杞崲涓哄疄浣�
+ /// </summary>
+ /// <param name="dto">鍗曟澘DTO</param>
+ /// <returns>瀹炰綋瀵硅薄</returns>
+ private MesPcbTestData ConvertSingleBoardToEntity(
+ SingleBoardGenerateDto dto)
+ {
+ return new MesPcbTestData
+ {
+ DeviceName = dto.DeviceName,
+ PcbSn = dto.PcbSn,
+ PcbTrackLine = dto.PcbTrackLine,
+ PcbBoardSide = dto.PcbBoardSide,
+ PcbTestTime = StringUtil.IsNotNullOrEmpty(dto.PcbTestTime)
+ ? DateTime.Parse(dto.PcbTestTime)
+ : null,
+ PcbCycleTime = (decimal?)dto.PcbCycleTime,
+ PcbProjectName = dto.PcbProjectName,
+ PcbRobotResult = dto.PcbRobotResult,
+ PcbUserResult = dto.PcbUserResult,
+ PcbFinalResult = dto.PcbFinalResult,
+ PcbRepairUser = dto.PcbRepairUser,
+ PcbBoardNumber = dto.PcbBoardNumber,
+ PcbCompNumber = dto.PcbCompNumber,
+ BoardSn = dto.BoardSn,
+ BoardNo = dto.BoardNo,
+ BoardRobotResult = dto.BoardRobotResult,
+ BoardUserResult = dto.BoardUserResult,
+ BoardFinalResult = dto.BoardFinalResult,
+ BoardCompNumber = dto.BoardCompNumber,
+ BoardCompRobotNgNumber = dto.BoardCompRobotNgNumber,
+ BoardCompUserNgNumber = dto.BoardCompUserNgNumber,
+ BoardCompRepassNumber = dto.BoardCompRepassNumber
+ };
+ }
+
+ /// <summary>
+ /// 灏嗗櫒浠禗TO鍒楄〃杞崲涓哄疄浣撳垪琛�
+ /// </summary>
+ /// <param name="dtoList">鍣ㄤ欢DTO鍒楄〃</param>
+ /// <param name="testDataId">娴嬭瘯鏁版嵁ID</param>
+ /// <returns>瀹炰綋鍒楄〃</returns>
+ private List<MesPcbComponentData> ConvertComponentListToEntity(
+ List<ComponentDataDto> dtoList, decimal testDataId)
+ {
+ return dtoList.Select(dto => new MesPcbComponentData
+ {
+ TestDataId = testDataId,
+ CompDesignator = dto.CompDesignator,
+ CompPart = dto.CompPart,
+ CompPackage = dto.CompPackage,
+ CompType = dto.CompType,
+ CompRobotCode = dto.CompRobotCode,
+ CompRobotResult = dto.CompRobotResult,
+ CompUserCode = dto.CompUserCode,
+ CompUserResult = dto.CompUserResult,
+ CompImage = dto.CompImage,
+ CreateTime = DateTime.Now
+ }).ToList();
+ }
+
+ #endregion
}
\ No newline at end of file
--
Gitblit v1.9.3