AOI
啊鑫
2025-07-10 a5019b475f8620dba3b495da983f4db9e32f7ca8
AOI
已添加6个文件
1564 ■■■■■ 文件已修改
MES.Service/Dto/service/SingleBoardGenerateDto.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/WholeboardGenerateDto.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesPcbComponentData.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesPcbTestData.cs 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/PcbTestDataService.cs 366 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/PcbTestDataController.cs 508 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/SingleBoardGenerateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace MES.Service.Dto.service
{
    /// <summary>
    /// æ‹¼æ¿(单板)生成数据DTO
    /// </summary>
    public class SingleBoardGenerateDto
    {
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        [JsonPropertyName("device_name")]
        public string DeviceName { get; set; }
        /// <summary>
        /// æ•´æ¿æ¡ç 
        /// </summary>
        [JsonPropertyName("pcb_sn")]
        public string PcbSn { get; set; }
        /// <summary>
        /// è½¨é“信息(1,1轨)(2,2轨)
        /// </summary>
        [JsonPropertyName("pcb_track_line")]
        public int PcbTrackLine { get; set; }
        /// <summary>
        /// æ¿é¢ï¼ˆT,顶面)(B,底面)(T+B,板面+底面)
        /// </summary>
        [JsonPropertyName("pcb_board_side")]
        public string PcbBoardSide { get; set; }
        /// <summary>
        /// æ£€æµ‹æ—¶é—´
        /// </summary>
        [JsonPropertyName("pcb_test_time")]
        public string PcbTestTime { get; set; }
        /// <summary>
        /// æ£€æµ‹è€—时,单位秒
        /// </summary>
        [JsonPropertyName("pcb_cycle_time")]
        public float PcbCycleTime { get; set; }
        /// <summary>
        /// ç¨‹åºå/板式名
        /// </summary>
        [JsonPropertyName("pcb_project_name")]
        public string PcbProjectName { get; set; }
        /// <summary>
        /// æ•´æ¿æ£€æµ‹ç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_robot_result")]
        public string PcbRobotResult { get; set; }
        /// <summary>
        /// æ•´æ¿å¤åˆ¤ç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_user_result")]
        public string PcbUserResult { get; set; }
        /// <summary>
        /// æ•´æ¿æœ€ç»ˆç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_final_result")]
        public string PcbFinalResult { get; set; }
        /// <summary>
        /// ç»´ä¿®ç«™å¤åˆ¤ç”¨æˆ·å
        /// </summary>
        [JsonPropertyName("pcb_repair_user")]
        public string PcbRepairUser { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_board_number")]
        public int PcbBoardNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶æ€»æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_comp_number")]
        public int PcbCompNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ¡ç 
        /// </summary>
        [JsonPropertyName("board_sn")]
        public string BoardSn { get; set; }
        /// <summary>
        /// æ‹¼æ¿åºå·
        /// </summary>
        [JsonPropertyName("board_no")]
        public string BoardNo { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ£€æµ‹ç»“æžœ
        /// </summary>
        [JsonPropertyName("board_robot_result")]
        public string BoardRobotResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿å¤åˆ¤ç»“æžœ
        /// </summary>
        [JsonPropertyName("board_user_result")]
        public string BoardUserResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿æœ€ç»ˆç»“æžœ
        /// </summary>
        [JsonPropertyName("board_final_result")]
        public string BoardFinalResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶æ•°é‡
        /// </summary>
        [JsonPropertyName("board_comp_number")]
        public int BoardCompNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶æ£€æµ‹NG总数
        /// </summary>
        [JsonPropertyName("board_comp_robot_ng_number")]
        public int BoardCompRobotNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶å¤åˆ¤NG总数
        /// </summary>
        [JsonPropertyName("board_comp_user_ng_number")]
        public int BoardCompUserNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶è¯¯æŠ¥æ€»æ•°
        /// </summary>
        [JsonPropertyName("board_comp_repass_number")]
        public int BoardCompRepassNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶åˆ—表
        /// </summary>
        [JsonPropertyName("comp_data")]
        public List<ComponentDataDto> CompData { get; set; }
    }
}
MES.Service/Dto/service/WholeboardGenerateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace MES.Service.Dto.service
{
    /// <summary>
    /// æ•´æ¿ç”Ÿæˆæ•°æ®DTO
    /// </summary>
    public class WholeboardGenerateDto
    {
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        [JsonPropertyName("device_name")]
        public string DeviceName { get; set; }
        /// <summary>
        /// æ•´æ¿æ¡ç 
        /// </summary>
        [JsonPropertyName("pcb_sn")]
        public string PcbSn { get; set; }
        /// <summary>
        /// è½¨é“信息(1,1轨)(2,2轨)
        /// </summary>
        [JsonPropertyName("pcb_track_line")]
        public int PcbTrackLine { get; set; }
        /// <summary>
        /// æ¿é¢ï¼ˆT,顶面)(B,底面)(T+B,板面+底面)
        /// </summary>
        [JsonPropertyName("pcb_board_side")]
        public string PcbBoardSide { get; set; }
        /// <summary>
        /// æ£€æµ‹æ—¶é—´ï¼Œæ ¼å¼yyyy-mm-dd hh:mm:ss
        /// </summary>
        [JsonPropertyName("pcb_test_time")]
        public string PcbTestTime { get; set; }
        /// <summary>
        /// æ£€æµ‹è€—时,单位秒
        /// </summary>
        [JsonPropertyName("pcb_cycle_time")]
        public float PcbCycleTime { get; set; }
        /// <summary>
        /// ç¨‹åºå/板式名
        /// </summary>
        [JsonPropertyName("pcb_project_name")]
        public string PcbProjectName { get; set; }
        /// <summary>
        /// æ•´æ¿æ£€æµ‹ç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_robot_result")]
        public string PcbRobotResult { get; set; }
        /// <summary>
        /// æ•´æ¿å¤åˆ¤ç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_user_result")]
        public string PcbUserResult { get; set; }
        /// <summary>
        /// æ•´æ¿æœ€ç»ˆç»“æžœ
        /// </summary>
        [JsonPropertyName("pcb_final_result")]
        public string PcbFinalResult { get; set; }
        /// <summary>
        /// ç»´ä¿®ç«™å¤åˆ¤ç”¨æˆ·å
        /// </summary>
        [JsonPropertyName("pcb_repair_user")]
        public string PcbRepairUser { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_board_number")]
        public int PcbBoardNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ£€æµ‹NG数量
        /// </summary>
        [JsonPropertyName("pcb_board_robot_ng_number")]
        public int PcbBoardRobotNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å¤åˆ¤NG数量
        /// </summary>
        [JsonPropertyName("pcb_board_user_ng_number")]
        public int PcbBoardUserNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿è¯¯æŠ¥æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_board_repass_number")]
        public int PcbBoardRepassNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶æ€»æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_comp_number")]
        public int PcbCompNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹NG数量
        /// </summary>
        [JsonPropertyName("pcb_comp_robot_ng_number")]
        public int PcbCompRobotNgNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤NG数量
        /// </summary>
        [JsonPropertyName("pcb_comp_user_ng_number")]
        public int PcbCompUserNgNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶è¯¯æŠ¥æ•°é‡
        /// </summary>
        [JsonPropertyName("pcb_comp_repass_number")]
        public int PcbCompRepassNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿åˆ—表
        /// </summary>
        [JsonPropertyName("board_data")]
        public List<BoardDataDto> BoardData { get; set; }
    }
    /// <summary>
    /// æ‹¼æ¿æ•°æ®DTO
    /// </summary>
    public class BoardDataDto
    {
        /// <summary>
        /// æ‹¼æ¿æ¡ç 
        /// </summary>
        [JsonPropertyName("board_sn")]
        public string BoardSn { get; set; }
        /// <summary>
        /// æ‹¼æ¿åºå·
        /// </summary>
        [JsonPropertyName("board_no")]
        public string BoardNo { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ£€æµ‹ç»“æžœ
        /// </summary>
        [JsonPropertyName("board_robot_result")]
        public string BoardRobotResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿å¤åˆ¤ç»“æžœ
        /// </summary>
        [JsonPropertyName("board_user_result")]
        public string BoardUserResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿æœ€ç»ˆç»“æžœ
        /// </summary>
        [JsonPropertyName("board_final_result")]
        public string BoardFinalResult { get; set; }
        /// <summary>
        /// å™¨ä»¶åˆ—表
        /// </summary>
        [JsonPropertyName("comp_data")]
        public List<ComponentDataDto> CompData { get; set; }
    }
    /// <summary>
    /// å™¨ä»¶æ•°æ®DTO
    /// </summary>
    public class ComponentDataDto
    {
        /// <summary>
        /// å™¨ä»¶ä½å·
        /// </summary>
        [JsonPropertyName("comp_designator")]
        public string CompDesignator { get; set; }
        /// <summary>
        /// å™¨ä»¶æ–™å·
        /// </summary>
        [JsonPropertyName("comp_part")]
        public string CompPart { get; set; }
        /// <summary>
        /// å™¨ä»¶å°è£…
        /// </summary>
        [JsonPropertyName("comp_package")]
        public string CompPackage { get; set; }
        /// <summary>
        /// å™¨ä»¶ç±»åž‹
        /// </summary>
        [JsonPropertyName("comp_type")]
        public string CompType { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹ä¸è‰¯ä»£ç 
        /// </summary>
        [JsonPropertyName("comp_robot_code")]
        public string CompRobotCode { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹ç»“æžœ
        /// </summary>
        [JsonPropertyName("comp_robot_result")]
        public string CompRobotResult { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤ä¸è‰¯ä»£ç 
        /// </summary>
        [JsonPropertyName("comp_user_code")]
        public string CompUserCode { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤ç»“æžœ
        /// </summary>
        [JsonPropertyName("comp_user_result")]
        public string CompUserResult { get; set; }
        /// <summary>
        /// å™¨ä»¶å›¾ç‰‡åœ°å€
        /// </summary>
        [JsonPropertyName("comp_image")]
        public string CompImage { get; set; }
    }
}
MES.Service/Modes/MesPcbComponentData.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
using SqlSugar;
using System;
namespace MES.Service.Modes
{
    /// <summary>
    /// PCB器件检测数据表
    /// </summary>
    [SugarTable("MES_PCB_COMPONENT_DATA")]
    public class MesPcbComponentData
    {
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_PCB_COMPONENT_DATA", IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// æ£€æµ‹æ•°æ®ä¸»è¡¨ID
        /// </summary>
        [SugarColumn(ColumnName = "TEST_DATA_ID")]
        public decimal TestDataId { get; set; }
        /// <summary>
        /// å™¨ä»¶ä½å·
        /// </summary>
        [SugarColumn(ColumnName = "COMP_DESIGNATOR")]
        public string? CompDesignator { get; set; }
        /// <summary>
        /// å™¨ä»¶æ–™å·
        /// </summary>
        [SugarColumn(ColumnName = "COMP_PART")]
        public string? CompPart { get; set; }
        /// <summary>
        /// å™¨ä»¶å°è£…
        /// </summary>
        [SugarColumn(ColumnName = "COMP_PACKAGE")]
        public string? CompPackage { get; set; }
        /// <summary>
        /// å™¨ä»¶ç±»åž‹
        /// </summary>
        [SugarColumn(ColumnName = "COMP_TYPE")]
        public string? CompType { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹ä¸è‰¯ä»£ç 
        /// </summary>
        [SugarColumn(ColumnName = "COMP_ROBOT_CODE")]
        public string? CompRobotCode { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹ç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "COMP_ROBOT_RESULT")]
        public string? CompRobotResult { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤ä¸è‰¯ä»£ç 
        /// </summary>
        [SugarColumn(ColumnName = "COMP_USER_CODE")]
        public string? CompUserCode { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤ç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "COMP_USER_RESULT")]
        public string? CompUserResult { get; set; }
        /// <summary>
        /// å™¨ä»¶å›¾ç‰‡åœ°å€
        /// </summary>
        [SugarColumn(ColumnName = "COMP_IMAGE")]
        public string? CompImage { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "CREATE_TIME")]
        public DateTime? CreateTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "UPDATE_TIME")]
        public DateTime? UpdateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(ColumnName = "REMARKS")]
        public string? Remarks { get; set; }
    }
}
MES.Service/Modes/MesPcbTestData.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,210 @@
using SqlSugar;
using System;
namespace MES.Service.Modes
{
    /// <summary>
    /// PCB检测数据表(整板/单板统一存储)
    /// </summary>
    [SugarTable("MES_PCB_TEST_DATA")]
    public class MesPcbTestData
    {
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_PCB_TEST_DATA", IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// æ•°æ®ç±»åž‹ï¼šWHOLE-整板,SINGLE-单板
        /// </summary>
        [SugarColumn(ColumnName = "DATA_TYPE")]
        public string DataType { get; set; }
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        [SugarColumn(ColumnName = "DEVICE_NAME")]
        public string? DeviceName { get; set; }
        /// <summary>
        /// æ•´æ¿æ¡ç 
        /// </summary>
        [SugarColumn(ColumnName = "PCB_SN")]
        public string? PcbSn { get; set; }
        /// <summary>
        /// è½¨é“信息(1-1轨,2-2轨)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_TRACK_LINE")]
        public int? PcbTrackLine { get; set; }
        /// <summary>
        /// æ¿é¢ï¼ˆT-顶面,B-底面,T+B-顶面+底面)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_BOARD_SIDE")]
        public string? PcbBoardSide { get; set; }
        /// <summary>
        /// æ£€æµ‹æ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "PCB_TEST_TIME")]
        public DateTime? PcbTestTime { get; set; }
        /// <summary>
        /// æ£€æµ‹è€—时(秒)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_CYCLE_TIME")]
        public decimal? PcbCycleTime { get; set; }
        /// <summary>
        /// ç¨‹åºå/板式名
        /// </summary>
        [SugarColumn(ColumnName = "PCB_PROJECT_NAME")]
        public string? PcbProjectName { get; set; }
        /// <summary>
        /// æ•´æ¿æ£€æµ‹ç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "PCB_ROBOT_RESULT")]
        public string? PcbRobotResult { get; set; }
        /// <summary>
        /// æ•´æ¿å¤åˆ¤ç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "PCB_USER_RESULT")]
        public string? PcbUserResult { get; set; }
        /// <summary>
        /// æ•´æ¿æœ€ç»ˆç»“æžœ
        /// </summary>
        [SugarColumn(ColumnName = "PCB_FINAL_RESULT")]
        public string? PcbFinalResult { get; set; }
        /// <summary>
        /// ç»´ä¿®ç«™å¤åˆ¤ç”¨æˆ·å
        /// </summary>
        [SugarColumn(ColumnName = "PCB_REPAIR_USER")]
        public string? PcbRepairUser { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ•°é‡ï¼ˆæ•´æ¿æ•°æ®ä½¿ç”¨ï¼‰
        /// </summary>
        [SugarColumn(ColumnName = "PCB_BOARD_NUMBER")]
        public int? PcbBoardNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ£€æµ‹NG数量(整板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_BOARD_ROBOT_NG_NUMBER")]
        public int? PcbBoardRobotNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å¤åˆ¤NG数量(整板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_BOARD_USER_NG_NUMBER")]
        public int? PcbBoardUserNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿è¯¯æŠ¥æ•°é‡ï¼ˆæ•´æ¿æ•°æ®ä½¿ç”¨ï¼‰
        /// </summary>
        [SugarColumn(ColumnName = "PCB_BOARD_REPASS_NUMBER")]
        public int? PcbBoardRepassNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶æ€»æ•°é‡
        /// </summary>
        [SugarColumn(ColumnName = "PCB_COMP_NUMBER")]
        public int? PcbCompNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶æ£€æµ‹NG数量(整板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_COMP_ROBOT_NG_NUMBER")]
        public int? PcbCompRobotNgNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶å¤åˆ¤NG数量(整板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "PCB_COMP_USER_NG_NUMBER")]
        public int? PcbCompUserNgNumber { get; set; }
        /// <summary>
        /// å™¨ä»¶è¯¯æŠ¥æ•°é‡ï¼ˆæ•´æ¿æ•°æ®ä½¿ç”¨ï¼‰
        /// </summary>
        [SugarColumn(ColumnName = "PCB_COMP_REPASS_NUMBER")]
        public int? PcbCompRepassNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ¡ç ï¼ˆå•板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_SN")]
        public string? BoardSn { get; set; }
        /// <summary>
        /// æ‹¼æ¿åºå·ï¼ˆå•板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_NO")]
        public string? BoardNo { get; set; }
        /// <summary>
        /// æ‹¼æ¿æ£€æµ‹ç»“果(单板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_ROBOT_RESULT")]
        public string? BoardRobotResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿å¤åˆ¤ç»“果(单板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_USER_RESULT")]
        public string? BoardUserResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿æœ€ç»ˆç»“果(单板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_FINAL_RESULT")]
        public string? BoardFinalResult { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶æ•°é‡ï¼ˆå•板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_COMP_NUMBER")]
        public int? BoardCompNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶æ£€æµ‹NG总数(单板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_COMP_ROBOT_NG_NUMBER")]
        public int? BoardCompRobotNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶å¤åˆ¤NG总数(单板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_COMP_USER_NG_NUMBER")]
        public int? BoardCompUserNgNumber { get; set; }
        /// <summary>
        /// æ‹¼æ¿å™¨ä»¶è¯¯æŠ¥æ€»æ•°ï¼ˆå•板数据使用)
        /// </summary>
        [SugarColumn(ColumnName = "BOARD_COMP_REPASS_NUMBER")]
        public int? BoardCompRepassNumber { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "CREATE_TIME")]
        public DateTime? CreateTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        [SugarColumn(ColumnName = "UPDATE_TIME")]
        public DateTime? UpdateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(ColumnName = "REMARKS")]
        public string? Remarks { get; set; }
    }
}
MES.Service/service/QC/PcbTestDataService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,366 @@
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
{
    /// <summary>
    /// PCB检测数据服务
    /// </summary>
    public class PcbTestDataService
    {
        /// <summary>
        /// ä¿å­˜æ•´æ¿æ£€æµ‹æ•°æ®
        /// </summary>
        /// <param name="dto">整板检测数据DTO</param>
        /// <returns>保存结果</returns>
        public bool SaveWholeboardData(WholeboardGenerateDto dto)
        {
            try
            {
                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 componentDataList = new List<MesPcbComponentData>();
                        foreach (var boardData in dto.BoardData)
                        {
                            if (boardData.CompData != null && boardData.CompData.Count > 0)
                            {
                                var componentData = ConvertComponentListToEntity(boardData.CompData, testDataId);
                                componentDataList.AddRange(componentData);
                            }
                        }
                        if (componentDataList.Count > 0)
                        {
                            affectedRows += db.Insertable(componentDataList).ExecuteCommand();
                        }
                    }
                    return affectedRows;
                }) > 0;
            }
            catch (Exception ex)
            {
                throw new Exception($"保存整板检测数据失败: {ex.Message}", ex);
            }
        }
        /// <summary>
        /// ä¿å­˜å•板检测数据
        /// </summary>
        /// <param name="dto">单板检测数据DTO</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">数据类型(WHOLE/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>
        /// å°†æ•´æ¿DTO转换为实体
        /// </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>
        /// å°†å•板DTO转换为实体
        /// </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>
        /// å°†å™¨ä»¶DTO列表转换为实体列表
        /// </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
    }
}
MESApplication/Controllers/QC/PcbTestDataController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,508 @@
using System;
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
{
    /// <summary>
    /// PCB检测数据控制器
    /// </summary>
    [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/";
        /// <summary>
        /// ä¿å­˜æ•´æ¿æ£€æµ‹æ•°æ®
        /// </summary>
        /// <param name="dto">整板检测数据DTO</param>
        /// <returns>保存结果</returns>
        [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);
            }
        }
        /// <summary>
        /// ä¿å­˜å•板检测数据
        /// </summary>
        /// <param name="dto">单板检测数据DTO</param>
        /// <returns>保存结果</returns>
        [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);
            }
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢PCB检测数据
        /// </summary>
        /// <param name="request">查询请求</param>
        /// <returns>分页数据</returns>
        [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<int>() ?? 1;
                var pageSize = request["pageSize"]?.ToObject<int>() ?? 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);
            }
        }
        /// <summary>
        /// æ ¹æ®ID获取PCB检测数据
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>PCB检测数据</returns>
        [HttpPost("GetById")]
        public ResponseResult GetById([FromBody] JObject request)
        {
            try
            {
                var id = request["id"]?.ToObject<decimal>();
                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);
            }
        }
        /// <summary>
        /// æ ¹æ®PCB条码获取检测数据
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>检测数据列表</returns>
        [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);
            }
        }
        /// <summary>
        /// èŽ·å–å™¨ä»¶æ£€æµ‹æ•°æ®
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>器件检测数据</returns>
        [HttpPost("GetComponentData")]
        public ResponseResult GetComponentData([FromBody] JObject request)
        {
            try
            {
                var testDataId = request["testDataId"]?.ToObject<decimal>();
                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);
            }
        }
        /// <summary>
        /// èŽ·å–æ£€æµ‹ç»Ÿè®¡æ•°æ®
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>统计数据</returns>
        [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);
            }
        }
        /// <summary>
        /// åˆ é™¤PCB检测数据
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>删除结果</returns>
        [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<decimal>();
                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);
            }
        }
        /// <summary>
        /// ç»Ÿä¸€ä¿å­˜æŽ¥å£ï¼ˆè‡ªåŠ¨è¯†åˆ«æ•´æ¿æˆ–å•æ¿æ•°æ®ï¼‰
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>保存结果</returns>
        [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();
                bool result = false;
                string message = "";
                switch (dataType.ToUpper())
                {
                    case "WHOLE":
                        var wholeboardDto = request["data"]?.ToObject<WholeboardGenerateDto>();
                        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<SingleBoardGenerateDto>();
                        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);
            }
        }
    }
}