如洲 陈
2025-09-12 fba48d2d676cd9b6d493163aef9d87f6e5090aee
出库检和退货检验
已修改43个文件
已添加8个文件
3107 ■■■■■ 文件已修改
MES.Service/Dto/service/THJDto.cs 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpItems.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesItems.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesQsImage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QsItemThjWorkno.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QsQaItemThj.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QsQaItemThj01.cs 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/QsQaItemThj02.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Debug/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Debug/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Release/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/bin/Release/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesItemsManager.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/BaseService.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/RKJService.cs 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/SJService.cs 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/THJService.cs 824 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/XJService.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/Warehouse/MesReturnwareManager.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/BaseController.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/MesOqcItemsDetect02Controller.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/RKJController.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/THJController.cs 604 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/MESApplication.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.deps.json 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.exe 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/Microsoft.AspNetCore.JsonPatch.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.deps.json 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.exe 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/Microsoft.AspNetCore.JsonPatch.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MES.Service.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MES.Service.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.deps.json 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.dll 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.exe 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.pdb 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/THJDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,211 @@
using System.ComponentModel.DataAnnotations;
using MES.Service.Modes;
namespace MES.Service.Dto.service;
/// <summary>
/// é”€å”®é€€è´§æ£€éªŒå•分页查询结果
/// </summary>
public class THJPageResult
{
    /// <summary>
    /// ä¸»é”®ID
    /// </summary>
    public decimal? Id { get; set; }
    /// <summary>
    /// æ£€éªŒå•号
    /// </summary>
    public string? ReleaseNo { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¥æœŸ
    /// </summary>
    public DateTime? CreateDate { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string? CreateBy { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    public string? ItemNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string? ItemName { get; set; }
    /// <summary>
    /// è§„格型号
    /// </summary>
    public string? ItemModel { get; set; }
    /// <summary>
    /// å·¥å•数量
    /// </summary>
    public decimal? WorkQty { get; set; }
    /// <summary>
    /// æ£€éªŒäºº
    /// </summary>
    public string? StatusUser { get; set; }
    /// <summary>
    /// æ£€éªŒç»“æžœ
    /// </summary>
    public string? Result { get; set; }
    /// <summary>
    /// é€€è´§å•别
    /// </summary>
    public string? ReturnType { get; set; }
    /// <summary>
    /// é€€è´§å•号
    /// </summary>
    public string? ReturnNo { get; set; }
    /// <summary>
    /// å•据日期
    /// </summary>
    public DateTime? BillDate { get; set; }
    /// <summary>
    /// å®¢æˆ·åç§°
    /// </summary>
    public string? CustomerName { get; set; }
    /// <summary>
    /// é€€è´§æ•°é‡
    /// </summary>
    public decimal? Sl { get; set; }
    /// <summary>
    /// é€€è´§åŽŸå› 
    /// </summary>
    public string? ReturnReason { get; set; }
    /// <summary>
    /// ä¸åˆæ ¼æè¿°
    /// </summary>
    public string? Remarks { get; set; }
    // åˆ†é¡µå‚æ•°
    public int PageIndex { get; set; } = 1;
    public int Limit { get; set; } = 20;
}
/// <summary>
/// é”€å”®é€€è´§æ£€éªŒå•DTO
/// </summary>
public class THJDto
{
    /// <summary>
    /// ä¸»è¡¨ä¿¡æ¯
    /// </summary>
    public QsQaItemThj from { get; set; } = new();
    /// <summary>
    /// æ£€éªŒé¡¹ç›®åˆ—表
    /// </summary>
    public List<QsQaItemThj01> items { get; set; } = new();
    /// <summary>
    /// æ£€éªŒç»“果列表
    /// </summary>
    public List<QsQaItemThj02> Results { get; set; } = new();
    /// <summary>
    /// ç”¨æˆ·ç¼–号
    /// </summary>
    public string userNo { get; set; } = "";
    /// <summary>
    /// ä¸»è¡¨ID
    /// </summary>
    public decimal? gid { get; set; }
    /// <summary>
    /// æ£€éªŒé¡¹ç›®ä¸»è¡¨ID
    /// </summary>
    public decimal? pid { get; set; }
    /// <summary>
    /// æ£€éªŒé¡¹ç›®æ˜Žç»†ID
    /// </summary>
    public decimal? id { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remarks { get; set; } = "";
    /// <summary>
    /// æ£€éªŒé¡¹ç›®ä¸»è¡¨ä¿¡æ¯
    /// </summary>
    public QsQaItemThj01 ItemThj01 { get; set; } = new();
}
/// <summary>
/// é€€è´§å•信息
/// </summary>
public class ReturnwareInfo
{
    /// <summary>
    /// é€€è´§å•别
    /// </summary>
    public string? ReturnType { get; set; }
    /// <summary>
    /// é€€è´§å•号
    /// </summary>
    public string? ReturnNo { get; set; }
    /// <summary>
    /// å•据日期
    /// </summary>
    public DateTime? BillDate { get; set; }
    /// <summary>
    /// å®¢æˆ·åç§°
    /// </summary>
    public string? CustomerName { get; set; }
    /// <summary>
    /// ä¸šåŠ¡äººå‘˜
    /// </summary>
    public string? BusinessBy { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    public string? ItemNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string? ItemName { get; set; }
    /// <summary>
    /// è§„格型号
    /// </summary>
    public string? ItemModel { get; set; }
    /// <summary>
    /// æ•°é‡
    /// </summary>
    public decimal? Quantity { get; set; }
    /// <summary>
    /// é€€è´§ä»“库
    /// </summary>
    public string? DepotCode { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string? Remarks { get; set; }
}
MES.Service/Dto/webApi/ErpItems.cs
@@ -34,4 +34,24 @@
    public string? Expirationdate { get; set; }
    public string? Reviewperiod  { get; set; }
    public decimal? FLeadDays { get; set; }
    /// <summary>
    /// è‡ªå®šä¹‰å­—段4 - å•ä»·
    /// </summary>
    public string? FRemark4 { get; set; }
    /// <summary>
    /// è‡ªå®šä¹‰å­—段5
    /// </summary>
    public string? FRemark5 { get; set; }
    /// <summary>
    /// æœ€å°è£…箱数
    /// </summary>
    public double? FMinPackageQty { get; set; }
    /// <summary>
    /// è´£ä»»éƒ¨é—¨
    /// </summary>
    public string? FDeportCode { get; set; }
}
MES.Service/Modes/MesItems.cs
@@ -239,7 +239,13 @@
    public string? Reviewperiod { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段4
    ///     æœ€å°è£…箱数
    /// </summary>
    [SugarColumn(ColumnName = "MINPACKAGEQTY")]
    public double? MinPackageQty { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段4 - å•ä»·
    /// </summary>
    [SugarColumn(ColumnName = "REMARK4")]
    public string Remark4 { get; set; }
@@ -323,6 +329,11 @@
    [SugarColumn(ColumnName = "LEAD_DAYS")]
    public decimal? LeadDays { get; set; }
    /// <summary>
    ///     è´£ä»»éƒ¨é—¨
    /// </summary>
    [SugarColumn(ColumnName = "DEPORTCODE")]
    public string? DeportCode { get; set; }
    [SugarColumn(IsIgnore = true)] public string? Type { get; set; }
MES.Service/Modes/MesQsImage.cs
@@ -36,11 +36,11 @@
    public byte[]? ImageData { get; set; }
    /// <summary>
    ///     1为首检,2为巡检,3为入库检
    ///     1为首检,2为巡检,3为入库检,8为退货检验
    /// </summary>
    [Column("QS_TYPE")]
    [SugarColumn(ColumnName = "QS_TYPE")] //用于SqlSugar
    [StringLength(1, ErrorMessage = "1为首检,2为巡检,3为入库检长度不能超出1")]
    [StringLength(1, ErrorMessage = "1为首检,2为巡检,3为入库检,8为退货检验长度不能超出1")]
    public string? QsType { get; set; }
    /// <summary>
MES.Service/Modes/QsItemThjWorkno.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     é”€å”®é€€è´§æ£€éªŒå•工单表
/// </summary>
[Table("QS_ITEM_THJ_WORKNO")]
[SugarTable("QS_ITEM_THJ_WORKNO")] //用于SqlSugar
public class QsItemThjWorkno
{
    /// <summary>
    ///     åºåˆ—SEQ_QS_THJ
    /// </summary>
    [Key]
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_QS_THJ",
        ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    ///     æ£€éªŒä¸»è¡¨id
    /// </summary>
    [Column("PID")]
    [SugarColumn(ColumnName = "PID")] //用于SqlSugar
    public decimal? Pid { get; set; }
    /// <summary>
    ///     ç”Ÿäº§å·¥å•
    /// </summary>
    [Column("WORKNO")]
    [SugarColumn(ColumnName = "WORKNO")] //用于SqlSugar
    [StringLength(50, ErrorMessage = "工单号长度不能超出50")]
    public string? Workno { get; set; }
    /// <summary>
    ///     å·¥å•数量
    /// </summary>
    [Column("WORK_QTY")]
    [SugarColumn(ColumnName = "WORK_QTY")] //用于SqlSugar
    public decimal? WorkQty { get; set; }
    [SugarColumn(IsIgnore = true)] public string? ItemName { get; set; }
}
MES.Service/Modes/QsQaItemThj.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,153 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     é”€å”®é€€è´§æ£€éªŒå•主表
/// </summary>
[SugarTable("QS_QA_ITEM_THJ")]
public class QsQaItemThj
{
    /// <summary>
    ///     åºåˆ—SEQ_QS_THJ
    /// </summary>
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_QS_THJ", ColumnName = "ID")]
    public decimal? Id { get; set; }
    /// <summary>
    ///     æ£€éªŒå•号
    /// </summary>
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    /// <summary>
    ///     åˆ›å»ºæ—¥æœŸ
    /// </summary>
    [Column("CREATE_DATE")]
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    ///     åˆ›å»ºäºº
    /// </summary>
    [Column("CREATE_BY")]
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    ///     ç‰©æ–™ç¼–码
    /// </summary>
    [Column("ITEM_NO")]
    [SugarColumn(ColumnName = "ITEM_NO")]
    public string? ItemNo { get; set; }
    /// <summary>
    ///     æ£€éªŒäººå‘˜
    /// </summary>
    [Column("FCHECK_BY")]
    [SugarColumn(ColumnName = "FCHECK_BY")]
    public string? FcheckBy { get; set; }
    /// <summary>
    ///     é€€è´§æ•°é‡
    /// </summary>
    [Column("SL")]
    [SugarColumn(ColumnName = "SL")]
    public decimal? Sl { get; set; }
    /// <summary>
    ///     å·¥å•号(可用于存储退货单号)
    /// </summary>
    [Column("BILL_NO")]
    [SugarColumn(ColumnName = "BILL_NO")]
    public string? BillNo { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [Column("REMARKS")]
    [SugarColumn(ColumnName = "REMARKS")]
    public string? Remarks { get; set; }
    /// <summary>
    ///     æ£€éªŒç»“æžœ
    /// </summary>
    [Column("FCHECK_RESU")]
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    ///     æ£€éªŒæ—¥æœŸ
    /// </summary>
    [Column("FCHECK_DATE")]
    [SugarColumn(ColumnName = "FCHECK_DATE")]
    public DateTime? FcheckDate { get; set; }
    /// <summary>
    ///     æ›´æ–°äºº
    /// </summary>
    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
    public string? LastupdateBy { get; set; }
    /// <summary>
    ///     æ›´æ–°æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
    public DateTime? LastupdateDate { get; set; }
    /// <summary>
    ///     ä¿®æ”¹äºº1
    /// </summary>
    [SugarColumn(ColumnName = "MODIFY1_BY")]
    public string? Modify1By { get; set; }
    /// <summary>
    ///     å•位
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_UNIT")]
    public string? ItemUnit { get; set; }
    /// <summary>
    ///     æ¨¡å…·å·
    /// </summary>
    [SugarColumn(ColumnName = "MOID_NUM")]
    public string? MoidNum { get; set; }
    /// <summary>
    ///     æäº¤äºº
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT_BY")]
    public string? FsubmitBy { get; set; }
    /// <summary>
    ///     æäº¤æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT_DATE")]
    public DateTime? FsubmitDate { get; set; }
    /// <summary>
    ///     æäº¤çŠ¶æ€
    /// </summary>
    [SugarColumn(ColumnName = "FSUBMIT")]
    public decimal? Fsubmit { get; set; }
    /// <summary>
    ///     ç‰©æ–™ID
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_ID")]
    public decimal? ItemId { get; set; }
    /// <summary>
    ///     çº¿ä½“编号
    /// </summary>
    [SugarColumn(ColumnName = "LINE")]
    public string? Line { get; set; }
    /// <summary>
    ///     ä¸åˆæ ¼æè¿°
    /// </summary>
    [SugarColumn(ColumnName = "BHGYY")]
    public string? Bhgyy { get; set; }
}
MES.Service/Modes/QsQaItemThj01.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,149 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     é”€å”®é€€è´§æ£€éªŒå•明细表
/// </summary>
[Table("QS_QA_ITEM_THJ01")]
[SugarTable("QS_QA_ITEM_THJ01")] //用于SqlSugar
public class QsQaItemThj01
{
    /// <summary>
    ///     åºåˆ—SEQ_QS_THJ
    /// </summary>
    [Key]
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_QS_THJ",
        ColumnName = "ID")] //用于SqlSugar
    public decimal? Id { get; set; }
    /// <summary>
    ///     ä¸»è¡¨ID
    /// </summary>
    [SugarColumn(ColumnName = "PID")]
    public decimal? Pid { get; set; }
    /// <summary>
    ///     é¡¹ç›®åç§°
    /// </summary>
    [SugarColumn(ColumnName = "PROJ_NAME")]
    public string? ProjName { get; set; }
    /// <summary>
    ///     è´¨é‡è¦æ±‚
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_MOD")]
    public string? ItemMod { get; set; }
    /// <summary>
    ///     æ£€éªŒæ–¹æ³•
    /// </summary>
    [SugarColumn(ColumnName = "INSPECTION_METHOD")]
    public string? InspectionMethod { get; set; }
    /// <summary>
    ///     ä½¿ç”¨ä»ªå™¨
    /// </summary>
    [SugarColumn(ColumnName = "USING_INSTRUMENTS")]
    public string? UsingInstruments { get; set; }
    /// <summary>
    ///     æ£€éªŒä¸ªæ•°
    /// </summary>
    [SugarColumn(ColumnName = "LEVEL_NUM")]
    public decimal? LevelNum { get; set; }
    /// <summary>
    ///     ä¸Šé™å€¼
    /// </summary>
    [SugarColumn(ColumnName = "MAX_VALUE")]
    public decimal? MaxValue { get; set; }
    /// <summary>
    ///     æ ‡å‡†å€¼
    /// </summary>
    [SugarColumn(ColumnName = "STANDARD_VALUE")]
    public decimal? StandardValue { get; set; }
    /// <summary>
    ///     ä¸‹é™å€¼
    /// </summary>
    [SugarColumn(ColumnName = "MIN_VALUE")]
    public decimal? MinValue { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "NOTES")]
    public string? Notes { get; set; }
    /// <summary>
    ///     æ£€éªŒæ°´å¹³
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_LEVEL")]
    public string? FcheckLevel { get; set; }
    /// <summary>
    ///     æŽ¥æ”¶æ°´å¹³
    /// </summary>
    [SugarColumn(ColumnName = "FAC_LEVEL")]
    public string? FacLevel { get; set; }
    /// <summary>
    ///     è´¨é‡æ ‡å‡†ä»£ç 
    /// </summary>
    [SugarColumn(ColumnName = "QS_CODE")]
    public string? QsCode { get; set; }
    /// <summary>
    ///     è´¨é‡æ ‡å‡†åç§°
    /// </summary>
    [SugarColumn(ColumnName = "QS_NAME")]
    public string? QsName { get; set; }
    /// <summary>
    ///     æ˜¯å¦åˆæ ¼
    /// </summary>
    [SugarColumn(ColumnName = "IS_PASS")]
    public decimal? IsPass { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "REMARKS")]
    public string? Remarks { get; set; }
    /// <summary>
    ///     æ£€éªŒç»“果(用于前端显示,不存储到数据库)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? result { get; set; }
    /// <summary>
    ///     å·²æ£€éªŒä¸ªæ•°ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public int? isCheck { get; set; }
    /// <summary>
    ///     å›¾ç‰‡æ•°æ®ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? imageData { get; set; }
    /// <summary>
    ///     å›¾ç‰‡ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public byte[]? Picture { get; set; }
    /// <summary>
    ///     å›¾ç‰‡åç§°ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? Picturename { get; set; }
}
MES.Service/Modes/QsQaItemThj02.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     é”€å”®é€€è´§æ£€éªŒå•检验结果表
/// </summary>
[Table("QS_QA_ITEM_THJ02")]
[SugarTable("QS_QA_ITEM_THJ02")] //用于SqlSugar
public class QsQaItemThj02
{
    /// <summary>
    ///     åºåˆ—SEQ_QS_THJ
    /// </summary>
    [Key]
    [Column("ID")]
    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_QS_THJ",
        ColumnName = "ID")] //用于SqlSugar
    public decimal? Id { get; set; }
    /// <summary>
    ///     é¦–检子表id
    /// </summary>
    [SugarColumn(ColumnName = "PID")]
    public decimal? Pid { get; set; }
    /// <summary>
    ///     é¦–检主表id
    /// </summary>
    [SugarColumn(ColumnName = "GID")]
    public decimal? Gid { get; set; }
    /// <summary>
    ///     æ£€éªŒç»“æžœ
    /// </summary>
    [SugarColumn(ColumnName = "FCHECK_RESU")]
    public string? FcheckResu { get; set; }
    /// <summary>
    ///     æ ‡å‡†å€¼
    /// </summary>
    [SugarColumn(ColumnName = "FSTAND")]
    public string? Fstand { get; set; }
    /// <summary>
    ///     åˆ›å»ºæ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    ///     åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    ///     æ›´æ–°æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "UPDATE_DATE")]
    public DateTime? UpdateDate { get; set; }
    /// <summary>
    ///     æ›´æ–°äºº
    /// </summary>
    [SugarColumn(ColumnName = "UPDATE_BY")]
    public string? UpdateBy { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "REMARKS")]
    public string? Remarks { get; set; }
    /// <summary>
    ///     å·¥åŽ‚ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“ï¼‰
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? Factory { get; set; }
    /// <summary>
    ///     å…¬å¸ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? Company { get; set; }
    /// <summary>
    ///     æ£€éªŒå•号(用于前端显示,不存储到数据库)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? ReleaseNo { get; set; }
    /// <summary>
    ///     æœ€åŽæ›´æ–°äººï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public string? LastupdateBy { get; set; }
    /// <summary>
    ///     æœ€åŽæ›´æ–°æ—¥æœŸï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public DateTime? LastupdateDate { get; set; }
    /// <summary>
    ///     æ£€éªŒä¸ªæ•°ï¼ˆç”¨äºŽå‰ç«¯æ˜¾ç¤ºï¼Œä¸å­˜å‚¨åˆ°æ•°æ®åº“)
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public int? count { get; set; }
}
MES.Service/bin/Debug/net8.0/MES.Service.dll
Binary files differ
MES.Service/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
MES.Service/bin/Release/net8.0/MES.Service.dll
Binary files differ
MES.Service/bin/Release/net8.0/MES.Service.pdb
Binary files differ
MES.Service/service/BasicData/MesItemsManager.cs
@@ -160,7 +160,11 @@
            Inspectionmethod = item.Inspectionmethod,
            Expirationdate = item.Expirationdate,
            Reviewperiod   = item.Reviewperiod,
            LeadDays       = item.FLeadDays
            LeadDays       = item.FLeadDays,
            Remark4        = item.FRemark4,
            Remark5        = item.FRemark5,
            MinPackageQty  = item.FMinPackageQty,
            DeportCode    = item.FDeportCode
        };
    }
MES.Service/service/QC/BaseService.cs
@@ -22,8 +22,23 @@
        mesQsImages.ForEach(s =>
        {
            if (!string.IsNullOrEmpty(s.base64Date))
            {
                //将base64转换为byte数组
                s.ImageData = Convert.FromBase64String(s.base64Date);
                // ç»Ÿä¸€æ–‡ä»¶åæ ¼å¼ï¼šå¦‚果为空或UUID格式,则生成时间戳格式,后缀为png
                if (string.IsNullOrEmpty(s.Picturename) ||
                    (s.Picturename.Length > 30 && !s.Picturename.Contains(".")))
                {
                    s.Picturename = $"{DateTimeOffset.Now.ToUnixTimeMilliseconds()}.png";
                }
                else if (s.Picturename.Contains("."))
                {
                    // å¦‚果文件名包含扩展名,统一改为png后缀
                    var nameWithoutExt = s.Picturename.Split('.')[0];
                    s.Picturename = $"{nameWithoutExt}.png";
                }
            }
        });
        return SqlSugarHelper.UseTransactionWithOracle(db =>
@@ -85,4 +100,61 @@
        return mesQsImages;
    }
    /// <summary>
    /// èŽ·å–THJ退货检验的图片,支持根据退货单号查找额外图片
    /// </summary>
    public List<MesQsImage> getByThjFid(decimal id, string qsType)
    {
        var db = SqlSugarHelper.GetInstance();
        var mesQsImages = db.Queryable<MesQsImage>()
            .Where(s => s.Fid == id && s.QsType == qsType).ToList();
        // èŽ·å–THJ主表信息
        var qsQaItemThj = db.Queryable<QsQaItemThj>()
            .Where(s => s.Id == id).First();
        if (qsQaItemThj?.BillNo != null)
        {
            // æ ¹æ®é€€è´§å•号查找额外的图片
            var additionalImages = db.Queryable<MesQsImage>()
                .Where(s => s.OrderNo == qsQaItemThj.BillNo && s.QsType == qsType)
                .Where(s => !mesQsImages.Any(existing => existing.Id == s.Id))
                .ToList();
            mesQsImages.AddRange(additionalImages);
            // é™åˆ¶æœ€å¤š9张图片
            if (mesQsImages.Count > 9)
            {
                mesQsImages = mesQsImages.Take(9).ToList();
            }
        }
        mesQsImages.ForEach(s =>
        {
            if (s.ImageData is { Length: > 0 })
            {
                s.base64Date = Convert.ToBase64String(s.ImageData);
                // ç¡®ä¿æ–‡ä»¶åæ ¼å¼æ­£ç¡®ï¼Œç»Ÿä¸€ä½¿ç”¨png后缀
                if (string.IsNullOrEmpty(s.Picturename))
                {
                    s.Picturename = $"{DateTimeOffset.Now.ToUnixTimeMilliseconds()}.png";
                }
                else if (s.Picturename.Contains("."))
                {
                    // å¦‚果文件名包含扩展名,统一改为png后缀
                    var nameWithoutExt = s.Picturename.Split('.')[0];
                    s.Picturename = $"{nameWithoutExt}.png";
                }
            }
            else
            {
                // å¦‚果没有图片数据,设置空的base64
                s.base64Date = string.Empty;
            }
        });
        return mesQsImages;
    }
}
MES.Service/service/QC/RKJService.cs
@@ -3,6 +3,7 @@
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using System.Data;
namespace MES.Service.service.QC;
@@ -367,46 +368,239 @@
                return commit;
            });
        // æ³¨é‡ŠæŽ‰è‡ªåŠ¨æäº¤é€»è¾‘ï¼Œæ”¹ä¸ºæ‰‹åŠ¨æäº¤
        // var isNull = db.Queryable<QsItemOqcItem>()
        //     .Where(s => s.Pid == detail.Gid && s.IsPass == null).Count();
        //
        // if (isNull > 0) return 1;
        //
        //
        // //获取检验单的检验项目的个数
        // var sum = db.Queryable<QsItemOqcItem>()
        //     .Where(s => s.Pid == detail.Gid).Count();
        //
        // if (sum == 0) return 1;
        //
        // //获取检验单下的合格的检验项目个数
        // var icount = db.Queryable<QsItemOqcItem>()
        //     .Where(s => s.Pid == detail.Gid && s.IsPass == 1).Count();
        //
        // var FcheckResu = "不合格";
        //
        // //实际个数等于理论个数时对检验单进行判定
        // if (sum == icount)
        //     //合格的检验结果等于总检验数视为合格
        //     FcheckResu = "合格";
        //
        // SqlSugarHelper.UseTransactionWithOracle(db =>
        // {
        //     return db.Updateable<QsItemOqcReq>()
        //         .SetColumns(s => s.FcheckResu == FcheckResu)
        //         .SetColumns(s => s.FcheckDate == DateTime.Now)
        //         .SetColumns(s => s.FcheckBy == detail.CreateBy)
        //         .SetColumns(s => s.LastupdateBy == detail.CreateBy)
        //         .SetColumns(s => s.LastupdateDate == DateTime.Now)
        //         .Where(s => s.Id == detail.Gid)
        //         .ExecuteCommand();
        // });
        //
        // if (FcheckResu.Equals("不合格"))
        //     //自动生成入库检异常对策
        //     saveDetect02(detail.Gid, detail.CreateBy);
        return useTransactionWithOracle;
    }
    /// <summary>
    /// æ‰‹åŠ¨æäº¤å…¥åº“æ£€ç»“æžœ
    /// </summary>
    /// <param name="gid">入库检主表ID</param>
    /// <param name="userNo">操作人</param>
    /// <returns>提交结果</returns>
    public int SubmitRKJResult(decimal? gid, string userNo)
    {
        var db = SqlSugarHelper.GetInstance();
        // æ£€æŸ¥æ˜¯å¦æ‰€æœ‰æ£€éªŒé¡¹ç›®éƒ½å·²å®Œæˆ
        var isNull = db.Queryable<QsItemOqcItem>()
            .Where(s => s.Pid == detail.Gid && s.IsPass == null).Count();
            .Where(s => s.Pid == gid && s.IsPass == null).Count();
        if (isNull > 0) return 1;
        if (isNull > 0)
        {
            throw new Exception("还有检验项目未完成,无法提交");
        }
        //获取检验单的检验项目的个数
        // èŽ·å–æ£€éªŒå•çš„æ£€éªŒé¡¹ç›®çš„ä¸ªæ•°
        var sum = db.Queryable<QsItemOqcItem>()
            .Where(s => s.Pid == detail.Gid).Count();
            .Where(s => s.Pid == gid).Count();
        if (sum == 0) return 1;
        if (sum == 0)
        {
            throw new Exception("没有检验项目,无法提交");
        }
        //获取检验单下的合格的检验项目个数
        // èŽ·å–æ£€éªŒå•ä¸‹çš„åˆæ ¼çš„æ£€éªŒé¡¹ç›®ä¸ªæ•°
        var icount = db.Queryable<QsItemOqcItem>()
            .Where(s => s.Pid == detail.Gid && s.IsPass == 1).Count();
            .Where(s => s.Pid == gid && s.IsPass == 1).Count();
        var FcheckResu = "不合格";
        //实际个数等于理论个数时对检验单进行判定
        // å®žé™…个数等于理论个数时对检验单进行判定
        if (sum == icount)
            //合格的检验结果等于总检验数视为合格
            // åˆæ ¼çš„æ£€éªŒç»“果等于总检验数视为合格
            FcheckResu = "合格";
        SqlSugarHelper.UseTransactionWithOracle(db =>
        Console.WriteLine($"检验结果判定: æ€»é¡¹ç›®æ•°={sum}, åˆæ ¼é¡¹ç›®æ•°={icount}, åˆ¤å®šç»“æžœ={FcheckResu}");
        var result = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemOqcReq>()
            var updateResult = db.Updateable<QsItemOqcReq>()
                .SetColumns(s => s.FcheckResu == FcheckResu)
                .SetColumns(s => s.FcheckDate == DateTime.Now)
                .SetColumns(s => s.FcheckBy == detail.CreateBy)
                .SetColumns(s => s.LastupdateBy == detail.CreateBy)
                .SetColumns(s => s.FcheckBy == userNo)
                .SetColumns(s => s.LastupdateBy == userNo)
                .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .Where(s => s.Id == detail.Gid)
                .Where(s => s.Id == gid)
                .ExecuteCommand();
            // å¦‚果不合格,在事务内调用存储过程生成异常处置单
            if (FcheckResu.Equals("不合格"))
            {
                CallRKJUnqualifiedStoredProcedureInTransaction(db, gid, userNo);
            }
            return updateResult;
        });
        if (FcheckResu.Equals("不合格"))
            //自动生成入库检异常对策
            saveDetect02(detail.Gid, detail.CreateBy);
        return result;
    }
        return useTransactionWithOracle;
    /// <summary>
    /// è°ƒç”¨å…¥åº“检不合格存储过程(事务内调用)
    /// </summary>
    /// <param name="db">数据库连接</param>
    /// <param name="gid">入库检主表ID</param>
    /// <param name="userNo">操作人</param>
    private void CallRKJUnqualifiedStoredProcedureInTransaction(ISqlSugarClient db, decimal? gid, string userNo)
    {
        try
        {
            Console.WriteLine($"开始调用入库检不合格存储过程,gid: {gid}, userNo: {userNo}");
            // èŽ·å–å…¥åº“æ£€å•ä¿¡æ¯
            var rkjInfo = db.Queryable<QsItemOqcReq>()
                .Where(s => s.Id == gid)
                .First();
            if (rkjInfo == null)
            {
                Console.WriteLine($"未找到入库检单信息,gid: {gid}");
                return;
            }
            Console.WriteLine($"找到入库检单信息,ReleaseNo: {rkjInfo.ReleaseNo}");
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("p_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input),
                new("p_Release_No", rkjInfo.ReleaseNo, System.Data.DbType.String, ParameterDirection.Input),
                new("p_User", userNo, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            Console.WriteLine($"准备执行存储过程,参数: gid={gid}, releaseNo={rkjInfo.ReleaseNo}, userNo={userNo}");
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_MES_RKJ_UNQUALIFIED(:p_Gid, :p_Release_No, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            Console.WriteLine($"存储过程执行完成,结果: {resultValue}, æ¶ˆæ¯: {messageValue}");
            if ("1".Equals(resultValue))
            {
                throw new Exception($"入库检异常处置单生成失败: {messageValue}");
            }
            Console.WriteLine("入库检异常处置单生成成功");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"入库检异常处置单生成失败: {ex.Message}");
            // åœ¨äº‹åŠ¡å†…ï¼Œå¦‚æžœå­˜å‚¨è¿‡ç¨‹è°ƒç”¨å¤±è´¥ï¼Œåº”è¯¥æŠ›å‡ºå¼‚å¸¸ä»¥å›žæ»šäº‹åŠ¡
            throw new Exception($"入库检异常处置单生成失败: {ex.Message}");
        }
    }
    /// <summary>
    /// è°ƒç”¨å…¥åº“检不合格存储过程(事务外调用,用于兼容)
    /// </summary>
    /// <param name="gid">入库检主表ID</param>
    /// <param name="userNo">操作人</param>
    private void CallRKJUnqualifiedStoredProcedure(decimal? gid, string userNo)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // èŽ·å–å…¥åº“æ£€å•ä¿¡æ¯
            var rkjInfo = db.Queryable<QsItemOqcReq>()
                .Where(s => s.Id == gid)
                .First();
            if (rkjInfo == null) return;
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("p_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input),
                new("p_Release_No", rkjInfo.ReleaseNo, System.Data.DbType.String, ParameterDirection.Input),
                new("p_User", userNo, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_MES_RKJ_UNQUALIFIED(:p_Gid, :p_Release_No, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue))
            {
                throw new Exception($"入库检异常处置单生成失败: {messageValue}");
            }
        }
        catch (Exception ex)
        {
            // è®°å½•日志但不影响主流程
            Console.WriteLine($"入库检异常处置单生成失败: {ex.Message}");
            // å¯ä»¥æ ¹æ®éœ€è¦å†³å®šæ˜¯å¦æŠ›å‡ºå¼‚常
            // throw new Exception($"入库检异常处置单生成失败: {ex.Message}");
        }
    }
    public int saveDetect02(decimal? gid, string? createBy)
MES.Service/service/QC/SJService.cs
@@ -6,6 +6,8 @@
using SqlSugar;
using System.Net;
using System.Xml.Linq;
using System.Data;
using System.Data.Common;
namespace MES.Service.service.QC;
@@ -439,7 +441,6 @@
        var count = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => s.Pid == detail.Pid).Count();
        var result = 0;
        if (qsItemIpiItem.LevelNum != count) return 0;
@@ -460,7 +461,6 @@
                return commit;
            });
        //自动判定是否合格
        //获取检验单的检验项目理论个数
        var sum = db.Queryable<QsItemIpiItem>()
@@ -476,30 +476,71 @@
        //实际个数等于理论个数时对检验单进行判定
        if (sum == icount)
        {
            result = 0;
            //获取这个检验单下的所有合格的检验结果
            passCount = db.Queryable<QsItemIpiItemDetail>()
                .Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
            //合格的检验结果等于总检验数视为合格
            if (icount == passCount) result = 1;
            useTransactionWithOracle += SqlSugarHelper.UseTransactionWithOracle(
                db =>
                {
                    return db.Updateable<QsItemIpiReq>()
                        .SetColumns(s => s.IsPass == result)
                        .SetColumns(s => s.StatusUser == detail.CreateBy)
                        .SetColumns(s => s.CompleteTime == DateTime.Now)
                        .Where(s => s.Id == detail.Gid)
                        .ExecuteCommand();
                });
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹è¿›è¡Œè‡ªåŠ¨åˆ¤å®šå’Œæäº¤
            CallSJAutoResultStoredProcedure(detail.Gid, detail.CreateBy);
        }
        return useTransactionWithOracle;
    }
    /// <summary>
    /// è°ƒç”¨é¦–检自动判定和提交存储过程
    /// </summary>
    /// <param name="gid">首检主表ID</param>
    /// <param name="createBy">操作人</param>
    private void CallSJAutoResultStoredProcedure(decimal? gid, string createBy)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // èŽ·å–é¦–æ£€å•ä¿¡æ¯
            var sjInfo = db.Queryable<QsItemIpiReq>()
                .Where(s => s.Id == gid)
                .First();
            if (sjInfo == null) return;
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("p_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input),
                new("p_Bill_No", sjInfo.BillNo, System.Data.DbType.String, ParameterDirection.Input),
                new("p_User", createBy, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_MES_SJ_AUTO_RESULT(:p_Gid, :p_Bill_No, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue))
            {
                throw new Exception($"首检自动判定失败: {messageValue}");
            }
        }
        catch (Exception ex)
        {
            // è®°å½•日志但不影响主流程
            Console.WriteLine($"首检自动判定存储过程调用失败: {ex.Message}");
            // å¯ä»¥æ ¹æ®éœ€è¦å†³å®šæ˜¯å¦æŠ›å‡ºå¼‚常
            // throw new Exception($"首检自动判定失败: {ex.Message}");
        }
    }
    public int UpdateQSItemDetail(QsItemIpiItemDetail detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
MES.Service/service/QC/THJService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,824 @@
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using System.Data;
namespace MES.Service.service.QC;
public class THJService
{
    private static readonly OracleSQLHelper SQLHelper = new();
    private readonly BaseService _baseService = new();
    /// <summary>
    /// ç”Ÿæˆæœ€æ–°çš„æ£€éªŒå•号
    /// </summary>
    public string getMaxReleaseNo()
    {
        var db = SqlSugarHelper.GetInstance();
        var date = DateTime.Now.ToString("yyyy-MM-dd");
        // ä½¿ç”¨æœ‹ä¹çš„函数默认获取单据
        var sql = "select getbillcode1('1000','1000','THJYD') from dual";
        var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
        // å¦‚果为空直接返回默认值
        return maxBillNo ?? "THJ" + DateTime.Now.ToString("yyMMdd") + "0001";
    }
    /// <summary>
    /// åˆ†é¡µæŸ¥è¯¢æ£€éªŒå•列表
    /// </summary>
    public List<THJPageResult> getPage(THJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        // åŸºäºŽæ£€éªŒå•号查询,关联退货明细获取退货单信息
        var sql = @"
            SELECT
                a.ID as Id,
                a.RELEASE_NO as ReleaseNo,
                a.CREATE_DATE as CreateDate,
                a.CREATE_BY as CreateBy,
                a.ITEM_NO as ItemNo,
                a.SL as Sl,
                a.FCHECK_BY as StatusUser,
                a.FCHECK_RESU as Result,
                COALESCE(m.ITEM_NAME, '') as ItemName,
                COALESCE(m.ITEM_MODEL, '') as ItemModel,
                a.SL as WorkQty,
                COALESCE(rd.RETURN_TYPE, '') as ReturnType,
                COALESCE(rd.RETURN_NO, '') as ReturnNo,
                COALESCE(rw.BILL_DATE, a.CREATE_DATE) as BillDate,
                COALESCE(c.CUST_NAME, '') as CustomerName,
                COALESCE(rd.REMARKS, '') as ReturnReason,
                COALESCE(a.BHGYY, '') as Remarks
            FROM QS_QA_ITEM_THJ a
            LEFT JOIN MES_ITEMS m ON a.ITEM_NO = m.ITEM_NO
            LEFT JOIN MES_RETURNWARE_DETAILS rd ON a.ITEM_NO = rd.ITEM_NO
                AND a.BILL_NO = rd.RETURN_TYPE || '-' || rd.RETURN_NO
            LEFT JOIN MES_RETURNWARE rw ON rd.RETURN_TYPE = rw.RETURN_TYPE
                AND rd.RETURN_NO = rw.RETURN_NO
            LEFT JOIN MES_CUSTOMER c ON rw.CUST_NO = c.CUST_NO
            WHERE 1=1";
        var parameters = new List<SugarParameter>();
        // æ ¹æ®ID筛选
        if (queryObj.Id.HasValue && queryObj.Id > 0)
        {
            sql += " AND a.ID = :Id";
            parameters.Add(new SugarParameter(":Id", queryObj.Id.Value));
        }
        // æ ¹æ®çŠ¶æ€ç­›é€‰
        if (!string.IsNullOrEmpty(queryObj.Result))
        {
            if (queryObj.Result == "未完成")
            {
                sql += " AND a.FCHECK_RESU IS NULL";
            }
            else if (queryObj.Result == "已完成")
            {
                sql += " AND a.FCHECK_RESU IS NOT NULL";
            }
        }
        // æ ¹æ®æ£€éªŒäººç­›é€‰
        //if (!string.IsNullOrEmpty(queryObj.StatusUser))
        //{
        //    sql += " AND a.FCHECK_BY = :StatusUser";
        //    parameters.Add(new SugarParameter(":StatusUser", queryObj.StatusUser));
        //}
        // æ ¹æ®ç‰©æ–™ç¼–码筛选
        if (!string.IsNullOrEmpty(queryObj.ItemNo))
        {
            sql += " AND a.ITEM_NO = :ItemNo";
            parameters.Add(new SugarParameter(":ItemNo", queryObj.ItemNo));
        }
        // æ ¹æ®æ£€éªŒå•号筛选
        if (!string.IsNullOrEmpty(queryObj.ReleaseNo))
        {
            sql += " AND a.RELEASE_NO = :ReleaseNo";
            parameters.Add(new SugarParameter(":ReleaseNo", queryObj.ReleaseNo));
        }
        // æ ¹æ®åˆ›å»ºæ—¥æœŸç­›é€‰
        if (queryObj.CreateDate.HasValue)
        {
            sql += " AND TRUNC(a.CREATE_DATE) = TRUNC(:CreateDate)";
            parameters.Add(new SugarParameter(":CreateDate", queryObj.CreateDate.Value));
        }
        // æŽ’序
        sql += " ORDER BY a.CREATE_DATE DESC";
        // åˆ†é¡µæŸ¥è¯¢
        var pageList = db.Ado.SqlQuery<THJPageResult>(sql, parameters.ToArray());
        if (pageList != null)
        {
            pageList = pageList.Skip((queryObj.PageIndex - 1) * queryObj.Limit)
                              .Take(queryObj.Limit)
                              .ToList();
        }
        return pageList ?? new List<THJPageResult>();
    }
    /// <summary>
    /// èŽ·å–æ£€éªŒé¡¹ç›®åˆ—è¡¨
    /// </summary>
    public List<QsQaItemThj01> getQSItems(decimal? pid, decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        var qsQaItemThj01s = db.Queryable<QsQaItemThj01>()
            .Where(a => a.Pid == pid)
            .ToList();
        var array = qsQaItemThj01s.Select(s => s.Id).ToArray();
        var qsQaItemDetails = db.Queryable<QsQaItemThj02>()
            .Where(s => array.Contains(s.Pid))
            .GroupBy(s => s.Pid)
            .Select(s => new
            {
                s.Pid,
                itemCount = SqlFunc.AggregateCount(s.Id)
            }).ToList();
        qsQaItemThj01s.ForEach(s =>
        {
            var find = qsQaItemDetails.Find(a => s.Id == a.Pid);
            if (find == null)
            {
                s.isCheck = 0;
                s.result = "未完成";
            }
            else
            {
                s.isCheck = find.itemCount;
                // ä¿®å¤ç±»åž‹è½¬æ¢é—®é¢˜ï¼šå°†decimal?转换为int进行比较
                var levelNum = s.LevelNum.HasValue ? (int)s.LevelNum.Value : 0;
                if (find.itemCount == levelNum && s.IsPass == 1)
                    s.result = "合格";
                else if (find.itemCount == levelNum && s.IsPass == 0)
                    s.result = "不合格";
                else
                    s.result = "未完成";
            }
            // è¿‡æ»¤å‡ºå›¾ç‰‡id不为空的数据转为base64
            if (s.Picture is { Length: > 0 })
                s.imageData = Convert.ToBase64String(s.Picture);
        });
        // æŽ’序,未完成的排在前面
        qsQaItemThj01s = qsQaItemThj01s.OrderBy(s => s.isCheck).ToList();
        return qsQaItemThj01s;
    }
    /// <summary>
    /// æ ¹æ®ID获取检验项目详情
    /// </summary>
    public ExpandoObject getThjDetail02ById(decimal id)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // èŽ·å–æ£€éªŒé¡¹ç›®ä¸»è¡¨ä¿¡æ¯
            var qsQaItemThj01 = db.Queryable<QsQaItemThj01>()
                .Where(s => s.Id == id)
                .First();
            if (qsQaItemThj01 == null)
            {
                throw new Exception($"检验项目不存在,ID: {id}");
            }
        if (qsQaItemThj01.IsPass == 0)
            qsQaItemThj01.result = "不合格";
        else if (qsQaItemThj01.IsPass == 1)
            qsQaItemThj01.result = "合格";
        else
            qsQaItemThj01.result = "未完成";
        // èŽ·å–ä¸»è¡¨ä¿¡æ¯ï¼ˆæ£€éªŒå•ä¿¡æ¯ï¼‰
        var mainInfo = db.Queryable<QsQaItemThj>()
            .Where(s => s.Id == qsQaItemThj01.Pid)
            .First();
        // æ£€æŸ¥ä¸»è¡¨ä¿¡æ¯æ˜¯å¦æ­£ç¡®èŽ·å–
        if (mainInfo == null)
        {
            throw new Exception($"主表信息不存在,Pid: {qsQaItemThj01.Pid}");
        }
        // ç›´æŽ¥ä»Žç‰©æ–™è¡¨èŽ·å–ç‰©æ–™åç§°
        var itemInfo = db.Queryable<MesItems>()
            .Where(i => i.ItemNo == mainInfo.ItemNo)
            .Select(i => new { i.ItemName })
            .First();
        // é€€è´§å•号就是销售退货检验单的bill_no
        string returnOrderNo = mainInfo.BillNo;
        string itemName = null;
        decimal? returnQty = mainInfo.Sl;
        string returnReason = mainInfo.Remarks;
        // èŽ·å–ç‰©æ–™åç§°
        if (itemInfo != null)
        {
            itemName = itemInfo.ItemName;
        }
        // å¤„理图片数据,避免JSON序列化问题
        string imageData = null;
        if (qsQaItemThj01.Picture is { Length: > 0 })
        {
            try
            {
                imageData = Convert.ToBase64String(qsQaItemThj01.Picture);
            }
            catch (Exception)
            {
                imageData = null;
            }
        }
        // åˆ›å»ºæ‰©å±•çš„itemThj01对象,包含所有需要的字段,确保所有字段都是可序列化的
        var extendedItemThj01 = new
        {
            // åŽŸæœ‰å­—æ®µ - ç¡®ä¿æ‰€æœ‰å­—段都是可序列化的类型
            Id = qsQaItemThj01.Id,
            Pid = qsQaItemThj01.Pid,
            ProjName = qsQaItemThj01.ProjName ?? "",
            ItemMod = qsQaItemThj01.ItemMod ?? "",
            InspectionMethod = qsQaItemThj01.InspectionMethod ?? "",
            UsingInstruments = qsQaItemThj01.UsingInstruments ?? "",
            LevelNum = qsQaItemThj01.LevelNum,
            MaxValue = qsQaItemThj01.MaxValue,
            StandardValue = qsQaItemThj01.StandardValue,
            MinValue = qsQaItemThj01.MinValue,
            Notes = qsQaItemThj01.Notes ?? "",
            FcheckLevel = qsQaItemThj01.FcheckLevel ?? "",
            FacLevel = qsQaItemThj01.FacLevel ?? "",
            QsCode = qsQaItemThj01.QsCode ?? "",
            QsName = qsQaItemThj01.QsName ?? "",
            IsPass = qsQaItemThj01.IsPass,
            Remarks = qsQaItemThj01.Remarks ?? "",
            result = qsQaItemThj01.result ?? "",
            // ä¸»è¡¨å­—段
            releaseNo = mainInfo.ReleaseNo ?? "",
            itemNo = mainInfo.ItemNo ?? "",
            billNo = mainInfo.BillNo ?? "",
            // æ·»åŠ ä¸åˆæ ¼æè¿°å­—æ®µï¼Œæ˜ å°„åˆ°ä¸»è¡¨çš„BHGYY字段
            bhgyy = mainInfo.Bhgyy ?? "",
            // é€€è´§æ˜Žç»†å­—段
            returnOrderNo = returnOrderNo ?? "",
            itemName = itemName ?? "",
            returnQty = returnQty,
            returnReason = returnReason ?? "",
            // å…¶ä»–需要的字段
            qualityStandard = qsQaItemThj01.QsName ?? "",
            // å›¾ç‰‡æ•°æ®ï¼ˆè½¬æ¢ä¸ºbase64字符串,避免序列化问题)
            imageData = imageData ?? ""
        };
        // èŽ·å–æ£€éªŒé¡¹ç›®æ˜Žç»†ï¼Œç¡®ä¿è¿”å›žçš„æ•°æ®æ˜¯å¯åºåˆ—åŒ–çš„
        var qsQaItemThj02s = db.Queryable<QsQaItemThj02>()
            .Where(s => s.Pid == id)
            .OrderBy(s => s.Id)
            .Select(s => new
            {
                Id = s.Id,
                Pid = s.Pid,
                Gid = s.Gid,
                FcheckResu = s.FcheckResu ?? "",
                Fstand = s.Fstand ?? "",
                CreateDate = s.CreateDate,
                CreateBy = s.CreateBy ?? "",
                UpdateDate = s.UpdateDate,
                UpdateBy = s.UpdateBy ?? "",
                Remarks = s.Remarks ?? ""
            })
            .ToList();
        var result = new ExpandoObject();
        ((IDictionary<string, object>)result)["itemThj01"] = extendedItemThj01;
        ((IDictionary<string, object>)result)["itemThj02s"] = qsQaItemThj02s;
        return result;
        }
        catch (Exception ex)
        {
            throw;
        }
    }
    /// <summary>
    /// å®‰å…¨èŽ·å–åŠ¨æ€å¯¹è±¡å±žæ€§å€¼
    /// </summary>
    private object GetDynamicValue(dynamic obj, string propertyName)
    {
        try
        {
            if (obj == null) return null;
            var dict = (IDictionary<string, object>)obj;
            return dict.ContainsKey(propertyName) ? dict[propertyName] : null;
        }
        catch
        {
            return null;
        }
    }
    /// <summary>
    /// èŽ·å–é€€è´§å•åˆ—è¡¨
    /// </summary>
    public List<dynamic> getReturnOrders()
    {
        var db = SqlSugarHelper.GetInstance();
        var sql = @"
            SELECT DISTINCT
                rd.RETURN_TYPE || '-' || rd.RETURN_NO as returnOrderNo,
                I.ITEM_NAME as itemName,
                rd.QUANTITY as returnQty,
                rd.REMARKS as returnReason
            FROM MES_RETURNWARE_DETAILS rd
            LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
            WHERE rd.RETURN_TYPE IS NOT NULL
            AND rd.RETURN_NO IS NOT NULL
            ORDER BY rd.RETURN_TYPE, rd.RETURN_NO";
        var result = db.Ado.SqlQuery<dynamic>(sql);
        return result;
    }
    /// <summary>
    /// èŽ·å–é€€è´§æ˜Žç»†ä¿¡æ¯
    /// </summary>
    public List<dynamic> getReturnwareInfo(string returnType, string returnNo)
    {
        var db = SqlSugarHelper.GetInstance();
        var sql = @"
            SELECT
                rd.RETURN_TYPE || '-' || rd.RETURN_NO as returnOrderNo,
                I.ITEM_NAME as itemName,
                rd.QUANTITY as returnQty,
                rd.REMARKS as returnReason,
                rd.ITEM_NO as itemNo
            FROM MES_RETURNWARE_DETAILS rd
            LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
            WHERE rd.RETURN_TYPE = :returnType
            AND rd.RETURN_NO = :returnNo";
        var result = db.Ado.SqlQuery<dynamic>(sql,
            new SugarParameter(":returnType", returnType),
            new SugarParameter(":returnNo", returnNo));
        return result;
    }
    /// <summary>
    /// èŽ·å–é€€è´§æ˜Žç»† - åŸºäºŽæ£€éªŒå•çš„BILL_NO精确匹配
    /// </summary>
    public List<dynamic> getReturnDetails(string pid)
    {
        var db = SqlSugarHelper.GetInstance();
        var sql = @"
            SELECT
                rd.RETURN_TYPE as returntype,
                rd.RETURN_NO as returnno,
                rd.QUANTITY as quantity,
                rd.REMARKS as remarks,
                rd.ITEM_NO as itemno,
                I.ITEM_NAME as itemname
            FROM MES_RETURNWARE_DETAILS rd
            LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
            LEFT JOIN QS_QA_ITEM_THJ q ON q.ITEM_NO = rd.ITEM_NO
                AND q.BILL_NO = rd.RETURN_TYPE || '-' || rd.RETURN_NO
            WHERE q.ID = :pid";
        var result = db.Ado.SqlQuery<dynamic>(sql,
            new SugarParameter(":pid", Convert.ToDecimal(pid)));
        return result;
    }
    /// <summary>
    /// è®¾ç½®æ£€éªŒé¡¹ç›® - è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
    /// </summary>
    public List<QsQaItemThj01> setInspectItem(string gid, string updateBy = "系统")
    {
        var db = SqlSugarHelper.GetInstance();
        // éªŒè¯gid参数
        if (string.IsNullOrEmpty(gid) || !decimal.TryParse(gid, out decimal gidDecimal))
        {
            throw new Exception("检验单ID格式不正确");
        }
        try
        {
            // å…ˆæ£€æŸ¥æ£€éªŒå•是否存在
            var thjExists = db.Queryable<QsQaItemThj>()
                .Where(s => s.Id == gidDecimal)
                .Any();
            if (!thjExists)
            {
                throw new Exception($"检验单ID {gidDecimal} ä¸å­˜åœ¨");
            }
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("c_result", null, System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("c_msg", null, System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数 - å­˜å‚¨è¿‡ç¨‹æœŸæœ›NUMBER类型
            var parameters = new List<SugarParameter>
            {
                new("p_gid", gidDecimal, System.Data.DbType.Decimal, ParameterDirection.Input),
                new("p_user", updateBy, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PROC_ADD_INSPECT_ITEMS(:p_gid, :p_user, :c_result, :c_msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value;
            var messageValue = outputMessage.Value?.ToString();
            // æ£€æŸ¥å­˜å‚¨è¿‡ç¨‹æ‰§è¡Œç»“æžœ - æ”¯æŒå¤šç§æ•°å€¼ç±»åž‹æ¯”较
            bool isError = false;
            if (resultValue != null)
            {
                if (resultValue is int intVal && intVal == 1)
                    isError = true;
                else if (resultValue is decimal decimalVal && decimalVal == 1)
                    isError = true;
                else if (resultValue is double doubleVal && doubleVal == 1.0)
                    isError = true;
                else if (resultValue.ToString() == "1")
                    isError = true;
            }
            if (isError)
            {
                // å­˜å‚¨è¿‡ç¨‹æ‰§è¡Œå¤±è´¥ï¼ŒæŠ›å‡ºå¼‚常
                throw new Exception(messageValue ?? "获取检验项目失败");
            }
            // å­˜å‚¨è¿‡ç¨‹æ‰§è¡ŒæˆåŠŸï¼ŒèŽ·å–ç”Ÿæˆçš„æ£€éªŒé¡¹ç›®
            var items = db.Queryable<QsQaItemThj01>()
                .Where(s => s.Pid == gidDecimal)
                .ToList();
            // ä¸ºæ¯ä¸ªé¡¹ç›®è®¾ç½®é»˜è®¤å€¼
            items.ForEach(item =>
            {
                item.result = "未检测";
                item.isCheck = 0;
            });
            return items;
        }
        catch (Exception ex)
        {
            // å¦‚果存储过程调用失败,抛出异常
            throw new Exception($"获取检验项目失败: {ex.Message}");
        }
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒé¡¹ç›®
    /// </summary>
    public int saveItem(THJDto thjDto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var commit = 0;
            // ä¿å­˜ä¸»è¡¨
            thjDto.from.CreateBy = thjDto.userNo;
            thjDto.from.CreateDate = DateTime.Now;
            var pid = db.Insertable(thjDto.from).ExecuteReturnIdentity();
            thjDto.from.Id = pid;
            thjDto.gid = pid;
            // ä¿å­˜æ£€éªŒé¡¹ç›®
            if (thjDto.items != null && thjDto.items.Count > 0)
            {
                foreach (var item in thjDto.items) item.Pid = pid;
                commit += db.Insertable(thjDto.items).ExecuteCommand();
            }
            return commit;
        });
    }
    /// <summary>
    /// è®¾ç½®æ£€éªŒé¡¹ç›®è¯¦æƒ…
    /// </summary>
    public int SetQSItemDetail(decimal pid, decimal gid, string fstand, string fcheckResu, string updateBy, int count)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            List<QsQaItemThj02> result = new();
            for (var i = 0; i < count; i++)
            {
                var item = new QsQaItemThj02();
                item.Pid = pid;
                item.Gid = gid;
                item.Fstand = fstand;
                item.FcheckResu = fcheckResu;
                item.CreateBy = updateBy;
                item.CreateDate = DateTime.Now;
                item.Factory = "1000";
                item.Company = "1000";
                result.Add(item);
            }
            var insertResult = db.Insertable(result).ExecuteCommand();
            // æ’入检验结果后,自动更新检验项目的IsPass状态
            autoUpdateInspectionStatus(pid, db);
            return insertResult;
        });
    }
    /// <summary>
    /// è‡ªåŠ¨æ›´æ–°æ£€éªŒé¡¹ç›®çŠ¶æ€
    /// </summary>
    private void autoUpdateInspectionStatus(decimal pid, ISqlSugarClient db)
    {
        // èŽ·å–æ£€éªŒé¡¹ç›®ä¿¡æ¯
        var qsQaItemThj01 = db.Queryable<QsQaItemThj01>()
            .Where(s => s.Id == pid)
            .First();
        if (qsQaItemThj01 == null) return;
        // æŸ¥è¯¢è¿™ä¸ªæ£€éªŒé¡¹ç›®ä¸‹çš„æ£€éªŒç»“果总数
        var totalCount = db.Queryable<QsQaItemThj02>()
            .Where(s => s.Pid == pid)
            .Count();
        // æŸ¥è¯¢åˆæ ¼æ•°é‡
        var passCount = db.Queryable<QsQaItemThj02>()
            .Where(s => s.Pid == pid && s.Fstand == "√")
            .Count();
        // èŽ·å–åº”è¯¥æ£€éªŒçš„æ•°é‡
        var levelNum = qsQaItemThj01.LevelNum.HasValue ? (int)qsQaItemThj01.LevelNum.Value : 1;
        int isPass = 0; // é»˜è®¤ä¸åˆæ ¼
        // å¦‚果检验数量达到要求且全部合格,则设置为合格
        if (totalCount >= levelNum && passCount == totalCount)
        {
            isPass = 1; // åˆæ ¼
        }
        // å¦‚果检验数量达到要求但有不合格的,则设置为不合格
        else if (totalCount >= levelNum && passCount < totalCount)
        {
            isPass = 0; // ä¸åˆæ ¼
        }
        // å¦‚果检验数量未达到要求,保持原状态(不更新IsPass字段)
        // åªæœ‰å½“检验数量达到要求时才更新IsPass字段
        if (totalCount >= levelNum)
        {
            db.Updateable<QsQaItemThj01>()
                .SetColumns(s => s.IsPass == isPass)
                .Where(s => s.Id == pid)
                .ExecuteCommand();
        }
    }
    /// <summary>
    /// æ›´æ–°æ£€éªŒé¡¹ç›®è¯¦æƒ…
    /// </summary>
    public int UpdateQSItemDetail(decimal id, decimal pid, decimal gid, string fstand, string fcheckResu, string updateBy)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            // æ›´æ–°æ£€éªŒç»“果记录
            var updateResult = db.Updateable<QsQaItemThj02>()
                .SetColumns(s => s.UpdateBy == updateBy)
                .SetColumns(s => s.UpdateDate == DateTime.Now)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(fstand),
                    s => s.Fstand == fstand)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(fcheckResu),
                    s => s.FcheckResu == fcheckResu)
                .Where(s => s.Id == id)
                .ExecuteCommand();
            // æ›´æ–°æ£€éªŒç»“果后,重新计算检验项目状态
            autoUpdateInspectionStatus(pid, db);
            return updateResult;
        });
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒé¡¹ç›®å¤‡æ³¨
    /// </summary>
    public int saveRemarksPid(decimal pid, string remarks)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemThj01>()
                .SetColumns(it => it.Remarks == remarks)
                .Where(it => it.Id == pid)
                .ExecuteCommand();
        });
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒå•备注(不合格描述)
    /// </summary>
    public int saveRemarksGid(decimal gid, string remarks)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsQaItemThj>()
                .SetColumns(it => it.Bhgyy == remarks)
                .Where(it => it.Id == gid)
                .ExecuteCommand();
        });
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒç»“æžœ
    /// </summary>
    public int saveInspectItem(string gid, string items, string userNo)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var result = 0;
            var gidDecimal = Convert.ToDecimal(gid);
            // è¿™é‡Œå¯ä»¥æ ¹æ®éœ€è¦è§£æžitems参数并更新检验结果
            // ç”±äºŽå‰ç«¯ä¼ é€’的是字符串,这里简化处理
            result += db.Updateable<QsQaItemThj>()
                .SetColumns(s => s.LastupdateBy == userNo)
                .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .Where(s => s.Id == gidDecimal)
                .ExecuteCommand();
            return result;
        });
    }
    /// <summary>
    /// ä¿å­˜é€€è´§æ˜Žç»†
    /// </summary>
    public List<dynamic> SaveReturnDetails(string returnDetails)
    {
        // è¿™é‡Œå¯ä»¥æ ¹æ®éœ€è¦å¤„理退货明细数据
        // ç”±äºŽå‰ç«¯ä¼ é€’的是字符串,这里返回空列表
        return new List<dynamic>();
    }
    /// <summary>
    /// æäº¤æ£€éªŒç»“æžœ
    /// </summary>
    public bool SubmitTHJResult(decimal gid, string userNo)
    {
        var result = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            // 1. éªŒè¯æ£€éªŒå•是否存在
            var inspectionOrder = db.Queryable<QsQaItemThj>()
                .Where(s => s.Id == gid)
                .First();
            if (inspectionOrder == null)
            {
                throw new Exception($"检验单不存在,ID: {gid}");
            }
            // 2. æ£€æŸ¥æ˜¯å¦å·²ç»æäº¤è¿‡
            if (inspectionOrder.FcheckResu == "已完成")
            {
                throw new Exception("该检验单已经提交,无法重复提交");
            }
            // 3. éªŒè¯æ‰€æœ‰æ£€éªŒé¡¹ç›®æ˜¯å¦éƒ½å·²å®Œæˆ
            var uncompletedItems = db.Queryable<QsQaItemThj01>()
                .Where(s => s.Pid == gid)
                .Where(s => s.IsPass == null || s.IsPass == -1) // å‡è®¾-1表示未完成
                .Count();
            if (uncompletedItems > 0)
            {
                throw new Exception("存在未完成的检验项目,请完成所有检验后再提交");
            }
            // 4. æ›´æ–°æ£€éªŒå•状态
            var updateResult = db.Updateable<QsQaItemThj>()
                .SetColumns(s => s.FcheckResu == "已完成")
                .SetColumns(s => s.FcheckBy == userNo)
                .SetColumns(s => s.FcheckDate == DateTime.Now)
                .SetColumns(s => s.LastupdateBy == userNo)
                .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .Where(s => s.Id == gid)
                .ExecuteCommand();
            if (updateResult <= 0)
            {
                throw new Exception("更新检验单状态失败");
            }
            // 5. è®°å½•提交日志(可选)
            // è¿™é‡Œå¯ä»¥æ·»åŠ æ—¥å¿—è®°å½•æˆ–å…¶ä»–ä¸šåŠ¡é€»è¾‘
            return updateResult;
        });
        return result > 0;
    }
    /// <summary>
    /// é€šè¿‡å­˜å‚¨è¿‡ç¨‹æäº¤æ£€éªŒç»“æžœ
    /// </summary>
    public (bool success, string message) SubmitTHJResultByProcedure(string releaseNo, string userNo)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("O_RESULT", null, System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("O_MSG", null, System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("P_RELEASE_NO", releaseNo, System.Data.DbType.String, ParameterDirection.Input),
                new("P_USER", userNo, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_MES_THJ_QA_SUBMIT82(:P_RELEASE_NO, :P_USER, :O_RESULT, :O_MSG); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value;
            var messageValue = outputMessage.Value?.ToString();
            // æ£€æŸ¥å­˜å‚¨è¿‡ç¨‹æ‰§è¡Œç»“æžœ
            bool isSuccess = false;
            if (resultValue != null)
            {
                if (resultValue is int intVal && intVal == 0)
                    isSuccess = true;
                else if (resultValue is decimal decimalVal && decimalVal == 0)
                    isSuccess = true;
                else if (resultValue is double doubleVal && doubleVal == 0.0)
                    isSuccess = true;
                else if (resultValue.ToString() == "0")
                    isSuccess = true;
            }
            return (isSuccess, messageValue ?? "未知错误");
        }
        catch (Exception ex)
        {
            return (false, $"调用存储过程失败: {ex.Message}");
        }
    }
}
MES.Service/service/QC/XJService.cs
@@ -3,6 +3,8 @@
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using System.Data;
using System.Data.Common;
namespace MES.Service.service.QC;
@@ -496,11 +498,75 @@
                    .Where(s => s.Id == detail.Gid)
                    .ExecuteCommand();
            });
            // æ–°å¢žï¼šå¦‚果判定结果为不合格,调用存储过程生成异常处置单
            if (FcheckResu.Equals("不合格"))
            {
                CallXJUnqualifiedStoredProcedure(detail.Gid, detail.CreateBy);
            }
        }
        return useTransactionWithOracle;
    }
    /// <summary>
    /// è°ƒç”¨å·¡æ£€ä¸åˆæ ¼å¤„理存储过程生成异常处置单
    /// </summary>
    /// <param name="gid">巡检主表ID</param>
    /// <param name="createBy">操作人</param>
    private void CallXJUnqualifiedStoredProcedure(decimal? gid, string createBy)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            // èŽ·å–å·¡æ£€å•ä¿¡æ¯
            var xjInfo = db.Queryable<QsQaItemXj>()
                .Where(s => s.Id == gid)
                .First();
            if (xjInfo == null) return;
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                System.Data.DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                System.Data.DbType.String, ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("p_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input),
                new("p_Bill_No", xjInfo.BillNo, System.Data.DbType.String, ParameterDirection.Input),
                new("p_User", createBy, System.Data.DbType.String, ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹ç”Ÿæˆå¼‚常处置单
            db.Ado.ExecuteCommand(
                "BEGIN PRC_XJ_EXCEPTION_ORDER(:p_Gid, :p_Bill_No, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue))
            {
                throw new Exception($"巡检异常处置单生成失败: {messageValue}");
            }
        }
        catch (Exception ex)
        {
            // è®°å½•日志但不影响主流程
            Console.WriteLine($"巡检异常处置单生成存储过程调用失败: {ex.Message}");
            // å¯ä»¥æ ¹æ®éœ€è¦å†³å®šæ˜¯å¦æŠ›å‡ºå¼‚常
            // throw new Exception($"巡检异常处置单生成失败: {ex.Message}");
        }
    }
    public int UpdateQSItemDetail(QsQaItemXj02 detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
MES.Service/service/Warehouse/MesReturnwareManager.cs
@@ -4,6 +4,7 @@
using MES.Service.DB;
using MES.Service.Modes;
using MES.Service.Dto.webApi;
using System.Data;
namespace MES.Service.service
{
@@ -92,7 +93,12 @@
            var orUpdate = base.Insert(mesReturnware);
            var baOrUpdate = ReturnwareDetailsManager.InsertRange(mesReturnwareDetails);
            if (orUpdate && baOrUpdate) return true;
            if (orUpdate && baOrUpdate)
            {
                // ä¿å­˜æˆåŠŸåŽï¼Œè°ƒç”¨å­˜å‚¨è¿‡ç¨‹ç”Ÿæˆæ£€éªŒå•
                GenerateInspectionOrder(db, mesReturnware, mesReturnwareDetails);
                return true;
            }
            throw new NotImplementedException("插入或更新失败");
@@ -117,7 +123,12 @@
            var insertOrUpdate = db.Deleteable<MesReturnwareDetails>().Where(it => mesReturnwareDetail.Any(p => p.ReturnwareNo == it.ReturnNo && p.ReturnwareType == it.ReturnType)).ExecuteCommand() > 0;
            if (update && insertOrUpdate) return true;
            if (update && insertOrUpdate)
            {
                // æ›´æ–°æˆåŠŸåŽï¼Œè°ƒç”¨å­˜å‚¨è¿‡ç¨‹ç”Ÿæˆæ£€éªŒå•
                GenerateInspectionOrder(db, mesReturnware, mesReturnwareDetails);
                return true;
            }
            throw new NotImplementedException("更新失败");
        }
@@ -187,27 +198,114 @@
        public bool Delete(YFDelete data)
        {
            return UseTransaction(db =>
            {
                var update = db.Deleteable<MesReturnware>()
                       .Where(it => it.ReturnNo == data.FBillNo &&
                                    it.ReturnType == data.FBillTypeID)
                       .ExecuteCommand() > 0;
                var insertOrUpdate = db.Deleteable<MesReturnwareDetails>()
                // å…ˆåˆ é™¤é€€è´§é€šçŸ¥å•明细
                var detailsDeleted = db.Deleteable<MesReturnwareDetails>()
                      .Where(it => it.ReturnNo == data.FBillNo &&
                                   it.ReturnType == data.FBillTypeID)
                      .ExecuteCommand() > 0;
                // å†åˆ é™¤é€€è´§é€šçŸ¥å•主表
                var mainDeleted = db.Deleteable<MesReturnware>()
                       .Where(it => it.ReturnNo == data.FBillNo &&
                                    it.ReturnType == data.FBillTypeID)
                       .ExecuteCommand() > 0;
                if (update && insertOrUpdate) return 1;
                if (detailsDeleted && mainDeleted)
                {
                    // åˆ é™¤æˆåŠŸåŽï¼Œè°ƒç”¨å­˜å‚¨è¿‡ç¨‹åˆ é™¤å¯¹åº”çš„æ£€éªŒå•
                    DeleteInspectionOrder(db, data.FBillTypeID, data.FBillNo);
                    return 1;
                }
                throw new NotImplementedException("删除失败");
            }) > 0;
        }
        /// <summary>
        /// è°ƒç”¨å­˜å‚¨è¿‡ç¨‹ç”Ÿæˆæ£€éªŒå•
        /// </summary>
        /// <param name="mesReturnware">退货通知单主表</param>
        /// <param name="mesReturnwareDetails">退货通知单明细表</param>
        private void GenerateInspectionOrder(SqlSugarScope db, MesReturnware mesReturnware, List<MesReturnwareDetails> mesReturnwareDetails)
        {
            try
            {
                // å®šä¹‰è¾“入参数
                var inputParam1 = new SugarParameter("P_RETURN_TYPE", mesReturnware.ReturnType ?? "");
                var inputParam2 = new SugarParameter("P_RETURN_NO", mesReturnware.ReturnNo ?? "");
                // å®šä¹‰è¾“出参数
                var outParam1 = new SugarParameter("P_RESULT", null, true);
                var outParam2 = new SugarParameter("P_MESSAGE", null, true);
                // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
                db.Ado.ExecuteCommand("BEGIN SP_GEN_RETURN_INSP(:P_RETURN_TYPE,:P_RETURN_NO,:P_RESULT,:P_MESSAGE); END;",
                    inputParam1, inputParam2, outParam1, outParam2);
                // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
                int result = int.Parse((string)outParam1.Value);
                string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
                if (result != 1)
                {
                    // è®°å½•警告日志,但不影响退货通知单的保存
                    Console.WriteLine($"生成检验单警告: {message}");
                }
                else
                {
                    Console.WriteLine($"生成检验单成功: {message}");
                }
            }
            catch (Exception ex)
            {
                // è®°å½•错误日志,但不影响退货通知单的保存
                Console.WriteLine($"生成检验单时发生错误: {ex.Message}");
            }
        }
        /// <summary>
        /// è°ƒç”¨å­˜å‚¨è¿‡ç¨‹åˆ é™¤æ£€éªŒå•
        /// </summary>
        /// <param name="db">数据库连接</param>
        /// <param name="returnType">退货单别</param>
        /// <param name="returnNo">退货单号</param>
        private void DeleteInspectionOrder(SqlSugarScope db, string returnType, string returnNo)
        {
            try
            {
                // å®šä¹‰è¾“入参数
                var inputParam1 = new SugarParameter("P_RETURN_TYPE", returnType ?? "");
                var inputParam2 = new SugarParameter("P_RETURN_NO", returnNo ?? "");
                // å®šä¹‰è¾“出参数
                var outParam1 = new SugarParameter("P_RESULT", null, true);
                var outParam2 = new SugarParameter("P_MESSAGE", null, true);
                // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
                db.Ado.ExecuteCommand("BEGIN SP_DEL_RETURN_INSP(:P_RETURN_TYPE,:P_RETURN_NO,:P_RESULT,:P_MESSAGE); END;",
                    inputParam1, inputParam2, outParam1, outParam2);
                // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
                int result = int.Parse((string)outParam1.Value);
                string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
                if (result != 1)
                {
                    // è®°å½•警告日志,但不影响退货通知单的删除
                    Console.WriteLine($"删除检验单警告: {message}");
                }
                else
                {
                    Console.WriteLine($"删除检验单成功: {message}");
                }
            }
            catch (Exception ex)
            {
                // è®°å½•错误日志,但不影响退货通知单的删除
                Console.WriteLine($"删除检验单时发生错误: {ex.Message}");
            }
        }
MESApplication/Controllers/QC/BaseController.cs
@@ -107,4 +107,29 @@
        }
    }
    //getByThjFid - èŽ·å–THJ退货检验的图片
    [HttpPost("getByThjFid")]
    public ResponseResult getByThjFid([FromBody] JObject data)
    {
        var id = Convert.ToInt32(data["fid"].ToString());
        var qsType = data["qsType"].ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList =
                new BaseService().getByThjFid(id, qsType);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
MESApplication/Controllers/QC/MesOqcItemsDetect02Controller.cs
@@ -58,6 +58,7 @@
        }
    }
<<<<<<< HEAD
    [HttpPost("SetQSItems")]
    public ResponseResult SetQSItems([FromBody] JObject data)
    {
@@ -103,6 +104,8 @@
        }
    }
=======
>>>>>>> 3b90e8717befe39af4d9384252d27b7a768a773f
    //IqcQaSubmit
    [HttpPost("IqcQaSubmit")]
    public ResponseResult IqcQaSubmit(LLJDto rkjDto)
MESApplication/Controllers/QC/RKJController.cs
@@ -364,4 +364,53 @@
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æäº¤å…¥åº“检结果
    /// </summary>
    /// <param name="data">包含gid和userNo的JSON对象</param>
    /// <returns>提交结果</returns>
    [HttpPost("submitRKJResult")]
    public ResponseResult submitRKJResult([FromBody] JObject data)
    {
        try
        {
            var gid = Convert.ToDecimal(data["gid"]?.ToString());
            var userNo = data["userNo"]?.ToString();
            if (gid <= 0)
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "入库检单ID不能为空",
                    data = null
                };
            }
            if (string.IsNullOrEmpty(userNo))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "操作人不能为空",
                    data = null
                };
            }
            dynamic resultInfos = new ExpandoObject();
            var result = new RKJService().SubmitRKJResult(gid, userNo);
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "提交成功",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
MESApplication/Controllers/QC/THJController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,604 @@
using System.Dynamic;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.service.QC;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace MESApplication.Controllers.QC;
[Route("api/[controller]")]
[ApiController]
public class THJController : ControllerBase
{
    [HttpPost("getPage")]
    public ResponseResult GetPage([FromBody] THJPageResult queryObj)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().getPage(queryObj);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("getMaxReleaseNo")]
    public ResponseResult GetMaxReleaseNo()
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().getMaxReleaseNo();
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("getQSItems")]
    public ResponseResult GetQSItems([FromBody] JObject data)
    {
        var pid = data["pid"]?.ToString();
        var id = data["id"]?.ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService();
            var detail021 = tbBillList.getQSItems(Convert.ToDecimal(pid), Convert.ToDecimal(id));
            resultInfos.tbBillList = detail021;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("saveItem")]
    public ResponseResult SaveItem([FromBody] THJDto thjDto)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().saveItem(thjDto);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("submitTHJResult")]
    public ResponseResult SubmitTHJResult([FromBody] JObject data)
    {
        try
        {
            var gid = Convert.ToDecimal(data["gid"]?.ToString());
            var userNo = data["userNo"]?.ToString();
            if (gid <= 0)
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验单ID不能为空",
                    data = null
                };
            }
            if (string.IsNullOrEmpty(userNo))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "操作人不能为空",
                    data = null
                };
            }
            var result = new THJService().SubmitTHJResult(gid, userNo);
            if (result)
            {
                dynamic resultInfos = new ExpandoObject();
                resultInfos.tbBillList = new { success = true, message = "提交成功" };
                return new ResponseResult
                {
                    status = 0,
                    message = "提交成功",
                    data = resultInfos
                };
            }
            else
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "提交失败",
                    data = null
                };
            }
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("getReturnwareInfo")]
    public ResponseResult GetReturnwareInfo([FromBody] JObject data)
    {
        try
        {
            var returnType = data["returnType"]?.ToString();
            var returnNo = data["returnNo"]?.ToString();
            if (string.IsNullOrEmpty(returnType) || string.IsNullOrEmpty(returnNo))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "退货单别和退货单号不能为空",
                    data = null
                };
            }
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().getReturnwareInfo(returnType, returnNo);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("getReturnDetails")]
    public ResponseResult GetReturnDetails([FromBody] JObject data)
    {
        try
        {
            var pid = data["pid"]?.ToString();
            if (string.IsNullOrEmpty(pid))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验单ID不能为空",
                    data = null
                };
            }
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().getReturnDetails(pid);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("setInspectItem")]
    public ResponseResult SetInspectItem([FromBody] JObject data)
    {
        try
        {
            var gid = data["gid"]?.ToString();
            var updateBy = data["updateBy"]?.ToString() ?? "系统";
            if (string.IsNullOrEmpty(gid))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验单ID不能为空",
                    data = null
                };
            }
            dynamic resultInfos = new ExpandoObject();
            var tbBillList = new THJService().setInspectItem(gid, updateBy);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æµ‹è¯•接口 - éªŒè¯åŸºæœ¬åŠŸèƒ½
    /// </summary>
    [HttpPost("testConnection")]
    public ResponseResult TestConnection()
    {
        try
        {
            return new ResponseResult
            {
                status = 0,
                message = "连接正常",
                data = new { timestamp = DateTime.Now }
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æ ¹æ®ID获取检验项目详情
    /// </summary>
    [HttpPost("getThjDetail02ById")]
    public ResponseResult GetThjDetail02ById([FromBody] JObject data)
    {
        try
        {
            var id = Convert.ToDecimal(data["id"]);
            var result = new THJService().getThjDetail02ById(id);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// è®¾ç½®æ£€éªŒé¡¹ç›®è¯¦æƒ…
    /// </summary>
    [HttpPost("SetQSItemDetail")]
    public ResponseResult SetQSItemDetail([FromBody] JObject data)
    {
        try
        {
            var pid = Convert.ToDecimal(data["pid"]);
            var gid = Convert.ToDecimal(data["gid"]);
            var fstand = data["fstand"]?.ToString();
            var fcheckResu = data["fcheckResu"]?.ToString();
            var updateBy = data["updateBy"]?.ToString();
            var count = Convert.ToInt32(data["count"]);
            var result = new THJService().SetQSItemDetail(pid, gid, fstand, fcheckResu, updateBy, count);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// æ›´æ–°æ£€éªŒé¡¹ç›®è¯¦æƒ…
    /// </summary>
    [HttpPost("UpdateQSItemDetail")]
    public ResponseResult UpdateQSItemDetail([FromBody] JObject data)
    {
        try
        {
            // å®‰å…¨åœ°è½¬æ¢decimal参数,处理NULL值
            if (!decimal.TryParse(data["id"]?.ToString(), out decimal id))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验结果ID不能为空或格式不正确",
                    data = null
                };
            }
            if (!decimal.TryParse(data["pid"]?.ToString(), out decimal pid))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验项目ID不能为空或格式不正确",
                    data = null
                };
            }
            if (!decimal.TryParse(data["gid"]?.ToString(), out decimal gid))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验单ID不能为空或格式不正确",
                    data = null
                };
            }
            var fstand = data["fstand"]?.ToString();
            var fcheckResu = data["fcheckResu"]?.ToString();
            var updateBy = data["updateBy"]?.ToString();
            var result = new THJService().UpdateQSItemDetail(id, pid, gid, fstand, fcheckResu, updateBy);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒé¡¹ç›®å¤‡æ³¨
    /// </summary>
    [HttpPost("saveRemarksPid")]
    public ResponseResult SaveRemarksPid([FromBody] JObject data)
    {
        try
        {
            var pid = Convert.ToDecimal(data["pid"]);
            var remarks = data["remarks"]?.ToString();
            var result = new THJService().saveRemarksPid(pid, remarks);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// èŽ·å–é€€è´§å•åˆ—è¡¨
    /// </summary>
    [HttpPost("getReturnOrders")]
    public ResponseResult GetReturnOrders()
    {
        try
        {
            var result = new THJService().getReturnOrders();
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜é€€è´§æ˜Žç»†
    /// </summary>
    [HttpPost("SaveReturnDetails")]
    public ResponseResult SaveReturnDetails([FromBody] JObject data)
    {
        try
        {
            var returnDetails = data["returnDetails"]?.ToString();
            var result = new THJService().SaveReturnDetails(returnDetails);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒé¡¹ç›®
    /// </summary>
    [HttpPost("saveInspectItem")]
    public ResponseResult SaveInspectItem([FromBody] JObject data)
    {
        try
        {
            var gid = data["gid"]?.ToString();
            var items = data["items"]?.ToString();
            var userNo = data["userNo"]?.ToString();
            var result = new THJService().saveInspectItem(gid, items, userNo);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// ä¿å­˜æ£€éªŒå•备注(不合格描述)
    /// </summary>
    [HttpPost("saveRemarksGid")]
    public ResponseResult SaveRemarksGid([FromBody] JObject data)
    {
        try
        {
            var gid = Convert.ToDecimal(data["gid"]?.ToString());
            var remarks = data["remarks"]?.ToString();
            var result = new THJService().saveRemarksGid(gid, remarks);
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = result;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// é€šè¿‡å­˜å‚¨è¿‡ç¨‹æäº¤æ£€éªŒç»“æžœ
    /// </summary>
    [HttpPost("submitTHJResultByProcedure")]
    public ResponseResult SubmitTHJResultByProcedure([FromBody] JObject data)
    {
        try
        {
            var releaseNo = data["releaseNo"]?.ToString();
            var userNo = data["userNo"]?.ToString();
            if (string.IsNullOrEmpty(releaseNo))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "检验单号不能为空",
                    data = null
                };
            }
            if (string.IsNullOrEmpty(userNo))
            {
                return new ResponseResult
                {
                    status = 1,
                    message = "操作人不能为空",
                    data = null
                };
            }
            var result = new THJService().SubmitTHJResultByProcedure(releaseNo, userNo);
            if (result.success)
            {
                dynamic resultInfos = new ExpandoObject();
                resultInfos.tbBillList = new { success = true, message = result.message };
                return new ResponseResult
                {
                    status = 0,
                    message = result.message,
                    data = resultInfos
                };
            }
            else
            {
                return new ResponseResult
                {
                    status = 1,
                    message = result.message,
                    data = null
                };
            }
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
MESApplication/MESApplication.csproj
@@ -9,7 +9,7 @@
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
MESApplication/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\Desktop\接口\RD\RD_MES_Api\MESApplication\bin\Release\net8.0\publish\</_PublishTargetUrl>
    <History>True|2025-08-03T10:48:37.3295098Z||;True|2025-08-01T17:29:02.4576952+08:00||;True|2025-03-27T23:22:42.3501020+08:00||;True|2025-03-10T16:49:08.3476948+08:00||;True|2024-12-24T15:39:58.5366570+08:00||;True|2024-11-26T18:32:03.9568766+08:00||;True|2024-11-21T02:11:35.8050745+08:00||;True|2024-09-21T16:35:22.6651659+08:00||;True|2024-09-21T16:14:11.3450387+08:00||;True|2024-09-19T17:16:11.7338751+08:00||;True|2024-09-19T17:11:21.0116707+08:00||;True|2024-09-19T13:54:25.7455472+08:00||;True|2024-09-15T13:55:51.7095153+08:00||;True|2024-09-12T17:10:20.4734556+08:00||;True|2024-09-10T15:54:07.7463519+08:00||;True|2024-09-06T14:40:56.3762241+08:00||;True|2024-08-20T17:12:00.2924570+08:00||;True|2024-08-17T10:57:05.6670396+08:00||;True|2024-08-17T10:56:46.8068041+08:00||;True|2024-08-16T14:09:17.0526491+08:00||;True|2024-08-15T08:40:32.8134665+08:00||;True|2024-08-14T10:00:27.7017207+08:00||;True|2024-08-14T08:54:44.8284031+08:00||;True|2024-08-07T10:32:10.3689256+08:00||;True|2024-08-05T15:45:03.0864530+08:00||;True|2024-08-03T09:59:13.7916520+08:00||;True|2024-07-31T17:27:28.1965929+08:00||;True|2024-07-31T15:27:34.7943845+08:00||;True|2024-07-30T15:04:50.5849235+08:00||;True|2024-07-30T14:09:06.2877325+08:00||;True|2024-07-29T16:11:30.4493940+08:00||;True|2024-07-23T14:30:34.4591002+08:00||;True|2024-07-22T14:17:39.8186158+08:00||;True|2024-04-10T12:55:31.3963752+08:00||;True|2024-04-08T13:59:25.5487203+08:00||;True|2024-04-06T09:30:09.5350539+08:00||;True|2024-04-06T08:46:05.8814658+08:00||;True|2024-04-05T14:06:52.0448024+08:00||;True|2024-04-05T12:47:46.0561601+08:00||;True|2024-02-26T08:46:22.0988887+08:00||;True|2024-02-24T19:17:13.6770376+08:00||;True|2024-02-24T14:32:37.4450337+08:00||;True|2024-02-23T10:22:06.5150173+08:00||;True|2024-02-22T13:19:56.6997993+08:00||;True|2024-02-22T10:53:17.7929585+08:00||;True|2024-02-21T17:08:06.5553444+08:00||;True|2024-02-19T16:24:37.4912012+08:00||;True|2024-02-02T10:07:23.2726075+08:00||;True|2024-02-02T08:36:49.2904460+08:00||;True|2024-01-29T17:44:43.6800769+08:00||;True|2024-01-23T09:47:26.7811926+08:00||;True|2024-01-18T16:23:30.3373836+08:00||;True|2024-01-17T14:22:04.2552286+08:00||;True|2024-01-16T16:54:42.2316892+08:00||;True|2024-01-16T16:37:23.8028858+08:00||;True|2024-01-16T09:25:24.4007775+08:00||;True|2024-01-15T10:18:57.3362616+08:00||;True|2024-01-15T10:07:14.2044763+08:00||;True|2024-01-10T14:03:36.4451130+08:00||;True|2024-01-09T16:45:32.9601815+08:00||;True|2024-01-06T14:16:34.2732220+08:00||;True|2024-01-06T14:11:45.2134717+08:00||;True|2024-01-06T11:30:58.9198887+08:00||;</History>
    <History>True|2025-09-07T07:57:42.6492991Z||;True|2025-09-02T14:07:59.4933772+08:00||;True|2025-08-22T10:11:31.0216372+08:00||;True|2025-08-18T08:28:20.1447738+08:00||;True|2025-08-12T09:51:50.2822756+08:00||;True|2025-08-10T16:28:17.3559399+08:00||;True|2025-08-06T09:47:19.1451217+08:00||;True|2025-08-06T09:46:51.2621129+08:00||;True|2025-08-03T18:48:37.3295098+08:00||;True|2025-08-01T17:29:02.4576952+08:00||;True|2025-03-27T23:22:42.3501020+08:00||;True|2025-03-10T16:49:08.3476948+08:00||;True|2024-12-24T15:39:58.5366570+08:00||;True|2024-11-26T18:32:03.9568766+08:00||;True|2024-11-21T02:11:35.8050745+08:00||;True|2024-09-21T16:35:22.6651659+08:00||;True|2024-09-21T16:14:11.3450387+08:00||;True|2024-09-19T17:16:11.7338751+08:00||;True|2024-09-19T17:11:21.0116707+08:00||;True|2024-09-19T13:54:25.7455472+08:00||;True|2024-09-15T13:55:51.7095153+08:00||;True|2024-09-12T17:10:20.4734556+08:00||;True|2024-09-10T15:54:07.7463519+08:00||;True|2024-09-06T14:40:56.3762241+08:00||;True|2024-08-20T17:12:00.2924570+08:00||;True|2024-08-17T10:57:05.6670396+08:00||;True|2024-08-17T10:56:46.8068041+08:00||;True|2024-08-16T14:09:17.0526491+08:00||;True|2024-08-15T08:40:32.8134665+08:00||;True|2024-08-14T10:00:27.7017207+08:00||;True|2024-08-14T08:54:44.8284031+08:00||;True|2024-08-07T10:32:10.3689256+08:00||;True|2024-08-05T15:45:03.0864530+08:00||;True|2024-08-03T09:59:13.7916520+08:00||;True|2024-07-31T17:27:28.1965929+08:00||;True|2024-07-31T15:27:34.7943845+08:00||;True|2024-07-30T15:04:50.5849235+08:00||;True|2024-07-30T14:09:06.2877325+08:00||;True|2024-07-29T16:11:30.4493940+08:00||;True|2024-07-23T14:30:34.4591002+08:00||;True|2024-07-22T14:17:39.8186158+08:00||;True|2024-04-10T12:55:31.3963752+08:00||;True|2024-04-08T13:59:25.5487203+08:00||;True|2024-04-06T09:30:09.5350539+08:00||;True|2024-04-06T08:46:05.8814658+08:00||;True|2024-04-05T14:06:52.0448024+08:00||;True|2024-04-05T12:47:46.0561601+08:00||;True|2024-02-26T08:46:22.0988887+08:00||;True|2024-02-24T19:17:13.6770376+08:00||;True|2024-02-24T14:32:37.4450337+08:00||;True|2024-02-23T10:22:06.5150173+08:00||;True|2024-02-22T13:19:56.6997993+08:00||;True|2024-02-22T10:53:17.7929585+08:00||;True|2024-02-21T17:08:06.5553444+08:00||;True|2024-02-19T16:24:37.4912012+08:00||;True|2024-02-02T10:07:23.2726075+08:00||;True|2024-02-02T08:36:49.2904460+08:00||;True|2024-01-29T17:44:43.6800769+08:00||;True|2024-01-23T09:47:26.7811926+08:00||;True|2024-01-18T16:23:30.3373836+08:00||;True|2024-01-17T14:22:04.2552286+08:00||;True|2024-01-16T16:54:42.2316892+08:00||;True|2024-01-16T16:37:23.8028858+08:00||;True|2024-01-16T09:25:24.4007775+08:00||;True|2024-01-15T10:18:57.3362616+08:00||;True|2024-01-15T10:07:14.2044763+08:00||;True|2024-01-10T14:03:36.4451130+08:00||;True|2024-01-09T16:45:32.9601815+08:00||;True|2024-01-06T14:16:34.2732220+08:00||;True|2024-01-06T14:11:45.2134717+08:00||;True|2024-01-06T11:30:58.9198887+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
MESApplication/bin/Debug/net8.0/MES.Service.dll
Binary files differ
MESApplication/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.deps.json
@@ -9,7 +9,7 @@
      "MESApplication/1.0.0": {
        "dependencies": {
          "MES.Service": "1.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "8.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "7.0.0",
          "Microsoft.EntityFrameworkCore.Design": "8.0.1",
          "Microsoft.EntityFrameworkCore.Tools": "8.0.1",
          "Oracle.EntityFrameworkCore": "8.21.121",
@@ -107,28 +107,28 @@
          }
        }
      },
      "Microsoft.AspNetCore.JsonPatch/8.0.0": {
      "Microsoft.AspNetCore.JsonPatch/7.0.0": {
        "dependencies": {
          "Microsoft.CSharp": "4.7.0",
          "Newtonsoft.Json": "13.0.3"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
        "dependencies": {
          "Microsoft.AspNetCore.JsonPatch": "8.0.0",
          "Microsoft.AspNetCore.JsonPatch": "7.0.0",
          "Newtonsoft.Json": "13.0.3",
          "Newtonsoft.Json.Bson": "1.0.2"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
@@ -1475,19 +1475,19 @@
      "path": "masuit.tools.core/2024.3.4",
      "hashPath": "masuit.tools.core.2024.3.4.nupkg.sha512"
    },
    "Microsoft.AspNetCore.JsonPatch/8.0.0": {
    "Microsoft.AspNetCore.JsonPatch/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-klQdb/9+j0u8MDjoqHEgDCPz8GRhfsbRVvZIM3glFqjs8uY7S1hS9RvKZuz8o4dS9NsEpFp4Jccd8CQuIYHK0g==",
      "path": "microsoft.aspnetcore.jsonpatch/8.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.8.0.0.nupkg.sha512"
      "sha512": "sha512-svHQiUvLNdI2nac68WNQHNo/ZWyavFpt3Oip09QRnWeFqG9iyakKiNLavXr6KE8y7KxEXZNld96KQYbKz8SJMQ==",
      "path": "microsoft.aspnetcore.jsonpatch/7.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.7.0.0.nupkg.sha512"
    },
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/e5+eBvY759xiZJO+y1lHi4VzXqbDzTJSyCtKpaj3Ko2JAFQjiCOJ0ZHk2i4g4HpoSdXmzEXQsjr6dUX9U0/JA==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/8.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.8.0.0.nupkg.sha512"
      "sha512": "sha512-IJOsB1cm6FYGXxhlNoWR6zZYFREEBzeFX76NlBGhrZ7+VMK4piLm3fAgUBliasyEUg5MOOqFz5EGv8nmU5rXWQ==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/7.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.7.0.0.nupkg.sha512"
    },
    "Microsoft.Bcl.AsyncInterfaces/6.0.0": {
      "type": "package",
MESApplication/bin/Debug/net8.0/MESApplication.dll
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.exe
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.pdb
Binary files differ
MESApplication/bin/Debug/net8.0/MESApplication.xml
@@ -958,6 +958,63 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.RKJController.submitRKJResult(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æäº¤å…¥åº“检结果
            </summary>
            <param name="data">包含gid和userNo的JSON对象</param>
            <returns>提交结果</returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.TestConnection">
            <summary>
            æµ‹è¯•接口 - éªŒè¯åŸºæœ¬åŠŸèƒ½
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetThjDetail02ById(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ ¹æ®ID获取检验项目详情
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SetQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            è®¾ç½®æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.UpdateQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ›´æ–°æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksPid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®å¤‡æ³¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetReturnOrders">
            <summary>
            èŽ·å–é€€è´§å•åˆ—è¡¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveReturnDetails(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜é€€è´§æ˜Žç»†
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveInspectItem(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksGid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒå•备注(不合格描述)
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SubmitTHJResultByProcedure(Newtonsoft.Json.Linq.JObject)">
            <summary>
            é€šè¿‡å­˜å‚¨è¿‡ç¨‹æäº¤æ£€éªŒç»“æžœ
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.XJController.getDaa001(Newtonsoft.Json.Linq.JObject)">
            <summary>
                èŽ·å–å·¥å•
MESApplication/bin/Debug/net8.0/Microsoft.AspNetCore.JsonPatch.dll
Binary files differ
MESApplication/bin/Debug/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll
Binary files differ
MESApplication/bin/Release/net8.0/MES.Service.dll
Binary files differ
MESApplication/bin/Release/net8.0/MES.Service.pdb
Binary files differ
MESApplication/bin/Release/net8.0/MESApplication.deps.json
@@ -9,7 +9,7 @@
      "MESApplication/1.0.0": {
        "dependencies": {
          "MES.Service": "1.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "8.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "7.0.0",
          "Microsoft.EntityFrameworkCore.Design": "8.0.1",
          "Microsoft.EntityFrameworkCore.Tools": "8.0.1",
          "Oracle.EntityFrameworkCore": "8.21.121",
@@ -107,28 +107,28 @@
          }
        }
      },
      "Microsoft.AspNetCore.JsonPatch/8.0.0": {
      "Microsoft.AspNetCore.JsonPatch/7.0.0": {
        "dependencies": {
          "Microsoft.CSharp": "4.7.0",
          "Newtonsoft.Json": "13.0.3"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
        "dependencies": {
          "Microsoft.AspNetCore.JsonPatch": "8.0.0",
          "Microsoft.AspNetCore.JsonPatch": "7.0.0",
          "Newtonsoft.Json": "13.0.3",
          "Newtonsoft.Json.Bson": "1.0.2"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
@@ -1475,19 +1475,19 @@
      "path": "masuit.tools.core/2024.3.4",
      "hashPath": "masuit.tools.core.2024.3.4.nupkg.sha512"
    },
    "Microsoft.AspNetCore.JsonPatch/8.0.0": {
    "Microsoft.AspNetCore.JsonPatch/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-klQdb/9+j0u8MDjoqHEgDCPz8GRhfsbRVvZIM3glFqjs8uY7S1hS9RvKZuz8o4dS9NsEpFp4Jccd8CQuIYHK0g==",
      "path": "microsoft.aspnetcore.jsonpatch/8.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.8.0.0.nupkg.sha512"
      "sha512": "sha512-svHQiUvLNdI2nac68WNQHNo/ZWyavFpt3Oip09QRnWeFqG9iyakKiNLavXr6KE8y7KxEXZNld96KQYbKz8SJMQ==",
      "path": "microsoft.aspnetcore.jsonpatch/7.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.7.0.0.nupkg.sha512"
    },
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/e5+eBvY759xiZJO+y1lHi4VzXqbDzTJSyCtKpaj3Ko2JAFQjiCOJ0ZHk2i4g4HpoSdXmzEXQsjr6dUX9U0/JA==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/8.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.8.0.0.nupkg.sha512"
      "sha512": "sha512-IJOsB1cm6FYGXxhlNoWR6zZYFREEBzeFX76NlBGhrZ7+VMK4piLm3fAgUBliasyEUg5MOOqFz5EGv8nmU5rXWQ==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/7.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.7.0.0.nupkg.sha512"
    },
    "Microsoft.Bcl.AsyncInterfaces/6.0.0": {
      "type": "package",
MESApplication/bin/Release/net8.0/MESApplication.dll
Binary files differ
MESApplication/bin/Release/net8.0/MESApplication.exe
Binary files differ
MESApplication/bin/Release/net8.0/MESApplication.pdb
Binary files differ
MESApplication/bin/Release/net8.0/MESApplication.xml
@@ -958,6 +958,63 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.RKJController.submitRKJResult(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æäº¤å…¥åº“检结果
            </summary>
            <param name="data">包含gid和userNo的JSON对象</param>
            <returns>提交结果</returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.TestConnection">
            <summary>
            æµ‹è¯•接口 - éªŒè¯åŸºæœ¬åŠŸèƒ½
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetThjDetail02ById(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ ¹æ®ID获取检验项目详情
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SetQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            è®¾ç½®æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.UpdateQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ›´æ–°æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksPid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®å¤‡æ³¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetReturnOrders">
            <summary>
            èŽ·å–é€€è´§å•åˆ—è¡¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveReturnDetails(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜é€€è´§æ˜Žç»†
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveInspectItem(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksGid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒå•备注(不合格描述)
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SubmitTHJResultByProcedure(Newtonsoft.Json.Linq.JObject)">
            <summary>
            é€šè¿‡å­˜å‚¨è¿‡ç¨‹æäº¤æ£€éªŒç»“æžœ
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.XJController.getDaa001(Newtonsoft.Json.Linq.JObject)">
            <summary>
                èŽ·å–å·¥å•
MESApplication/bin/Release/net8.0/Microsoft.AspNetCore.JsonPatch.dll
Binary files differ
MESApplication/bin/Release/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll
Binary files differ
MESApplication/bin/Release/net8.0/publish/MES.Service.dll
Binary files differ
MESApplication/bin/Release/net8.0/publish/MES.Service.pdb
Binary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.deps.json
@@ -9,7 +9,7 @@
      "MESApplication/1.0.0": {
        "dependencies": {
          "MES.Service": "1.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "8.0.0",
          "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "7.0.0",
          "Microsoft.EntityFrameworkCore.Design": "8.0.1",
          "Microsoft.EntityFrameworkCore.Tools": "8.0.1",
          "Oracle.EntityFrameworkCore": "8.21.121",
@@ -100,28 +100,28 @@
          }
        }
      },
      "Microsoft.AspNetCore.JsonPatch/8.0.0": {
      "Microsoft.AspNetCore.JsonPatch/7.0.0": {
        "dependencies": {
          "Microsoft.CSharp": "4.7.0",
          "Newtonsoft.Json": "13.0.3"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.JsonPatch.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
      "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
        "dependencies": {
          "Microsoft.AspNetCore.JsonPatch": "8.0.0",
          "Microsoft.AspNetCore.JsonPatch": "7.0.0",
          "Newtonsoft.Json": "13.0.3",
          "Newtonsoft.Json.Bson": "1.0.2"
        },
        "runtime": {
          "lib/net8.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "8.0.0.0",
            "fileVersion": "8.0.23.53112"
          "lib/net7.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51819"
          }
        }
      },
@@ -1223,19 +1223,19 @@
      "path": "masuit.tools.core/2024.3.4",
      "hashPath": "masuit.tools.core.2024.3.4.nupkg.sha512"
    },
    "Microsoft.AspNetCore.JsonPatch/8.0.0": {
    "Microsoft.AspNetCore.JsonPatch/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-klQdb/9+j0u8MDjoqHEgDCPz8GRhfsbRVvZIM3glFqjs8uY7S1hS9RvKZuz8o4dS9NsEpFp4Jccd8CQuIYHK0g==",
      "path": "microsoft.aspnetcore.jsonpatch/8.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.8.0.0.nupkg.sha512"
      "sha512": "sha512-svHQiUvLNdI2nac68WNQHNo/ZWyavFpt3Oip09QRnWeFqG9iyakKiNLavXr6KE8y7KxEXZNld96KQYbKz8SJMQ==",
      "path": "microsoft.aspnetcore.jsonpatch/7.0.0",
      "hashPath": "microsoft.aspnetcore.jsonpatch.7.0.0.nupkg.sha512"
    },
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/8.0.0": {
    "Microsoft.AspNetCore.Mvc.NewtonsoftJson/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/e5+eBvY759xiZJO+y1lHi4VzXqbDzTJSyCtKpaj3Ko2JAFQjiCOJ0ZHk2i4g4HpoSdXmzEXQsjr6dUX9U0/JA==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/8.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.8.0.0.nupkg.sha512"
      "sha512": "sha512-IJOsB1cm6FYGXxhlNoWR6zZYFREEBzeFX76NlBGhrZ7+VMK4piLm3fAgUBliasyEUg5MOOqFz5EGv8nmU5rXWQ==",
      "path": "microsoft.aspnetcore.mvc.newtonsoftjson/7.0.0",
      "hashPath": "microsoft.aspnetcore.mvc.newtonsoftjson.7.0.0.nupkg.sha512"
    },
    "Microsoft.Bcl.AsyncInterfaces/6.0.0": {
      "type": "package",
MESApplication/bin/Release/net8.0/publish/MESApplication.dll
Binary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.exe
Binary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.pdb
Binary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.xml
@@ -958,6 +958,63 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.RKJController.submitRKJResult(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æäº¤å…¥åº“检结果
            </summary>
            <param name="data">包含gid和userNo的JSON对象</param>
            <returns>提交结果</returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.TestConnection">
            <summary>
            æµ‹è¯•接口 - éªŒè¯åŸºæœ¬åŠŸèƒ½
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetThjDetail02ById(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ ¹æ®ID获取检验项目详情
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SetQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            è®¾ç½®æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.UpdateQSItemDetail(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æ›´æ–°æ£€éªŒé¡¹ç›®è¯¦æƒ…
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksPid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®å¤‡æ³¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.GetReturnOrders">
            <summary>
            èŽ·å–é€€è´§å•åˆ—è¡¨
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveReturnDetails(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜é€€è´§æ˜Žç»†
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveInspectItem(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒé¡¹ç›®
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SaveRemarksGid(Newtonsoft.Json.Linq.JObject)">
            <summary>
            ä¿å­˜æ£€éªŒå•备注(不合格描述)
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.THJController.SubmitTHJResultByProcedure(Newtonsoft.Json.Linq.JObject)">
            <summary>
            é€šè¿‡å­˜å‚¨è¿‡ç¨‹æäº¤æ£€éªŒç»“æžœ
            </summary>
        </member>
        <member name="M:MESApplication.Controllers.QC.XJController.getDaa001(Newtonsoft.Json.Linq.JObject)">
            <summary>
                èŽ·å–å·¥å•
package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
{
  "name": "rd-mes-api-frontend",
  "version": "1.0.0",
  "description": "RD MES API Frontend Vue Components",
  "main": "index.js",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "vue": "^3.3.0",
    "uni-app": "^3.0.0"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.0.0",
    "vite": "^4.0.0",
    "typescript": "^5.0.0",
    "@vue/tsconfig": "^0.4.0"
  },
  "keywords": [
    "vue",
    "uni-app",
    "mes",
    "frontend"
  ],
  "author": "",
  "license": "MIT"
}