3b90e8717befe39af4d9384252d27b7a768a773f..fba48d2d676cd9b6d493163aef9d87f6e5090aee
2025-09-12 如洲 陈
出库检和退货检验
fba48d 对比 | 目录
2025-08-05 如洲 陈
出库检
c9789c 对比 | 目录
已修改47个文件
已添加21个文件
5216 ■■■■■ 文件已修改
MES.Service/Dto/service/LLJDto.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/OQCDto.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/THJDto.cs 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/XJPageResult.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpItems.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesInvItemStocks.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesItems.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcBarcode.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcCheckitem.cs 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcCheckitemDt.cs 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcCheckitemType.cs 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcItemsDetect02.cs 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcItemsDetectDetail12.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesOqcItemsDetectDetail5.cs 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesQsImage.cs 7 ●●●● 补丁 | 查看 | 原始文档 | 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 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/QC/MesOqcItemsDetect02Manager.cs 632 ●●●●● 补丁 | 查看 | 原始文档 | 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/Base/LoginController.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/BaseController.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/MesOqcItemsDetect02Controller.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/RKJController.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/QC/THJController.cs 604 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/MESApplication.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/MESApplication.csproj.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Properties/PublishProfiles/FolderProfile.pubxml.user 4 ●●●● 补丁 | 查看 | 原始文档 | 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 41 ●●●● 补丁 | 查看 | 原始文档 | 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.staticwebassets.endpoints.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Debug/net8.0/MESApplication.xml 100 ●●●●● 补丁 | 查看 | 原始文档 | 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 41 ●●●● 补丁 | 查看 | 原始文档 | 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.staticwebassets.endpoints.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/MESApplication.xml 121 ●●●●● 补丁 | 查看 | 原始文档 | 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 41 ●●●● 补丁 | 查看 | 原始文档 | 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.staticwebassets.endpoints.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/bin/Release/net8.0/publish/MESApplication.xml 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/service/LLJDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
using MES.Service.Modes;
namespace MES.Service.Dto.service;
public class LLJDto
{
    public string? userNo { get; set; }
    //检验单号
    public string? releaseNo { get; set; }
    //主表id
    public int? gid { get; set; }
    //子表id
    public int? pid { get; set; }
    //孙表id
    public int? id { get; set; }
    //备注
    public string? Remarks { get; set; }
    //==========================================
    //巡检主子表需要的数据
    public QsItemOqcReq? from { get; set; }
    public List<MesQaItemsDetectDetail5>? items { get; set; }
    //==========================================
    //巡检子孙表需要的数据
    public MesQaItemsDetectDetail5? ItemXj01 { get; set; }
   // public List<MesQaItemsDetectDetail12>? ItemXj02s { get; set; }
}
MES.Service/Dto/service/OQCDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using MES.Service.Dto.@base;
using MES.Service.Modes;
namespace MES.Service.Dto.service;
public class OQCDto : Page
{
    public string? CreateUser { get; set; }
    public decimal? Id { get; set; }
    public decimal? MainId { get; set; }
    public string? ReleaseNo { get; set; }
    public string? OrderNo { get; set; }
    public List<MesInvItemStocks>? ItemBarCodeData { get; set; }
    public MesOqcItemsDetectDetail5? ItemXj01 { get; set; }
    public List<MesOqcItemsDetectDetail12>? ItemXj02s { get; set; }
}
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/service/XJPageResult.cs
@@ -82,4 +82,7 @@
    [SugarColumn(ColumnName = "DAA008")]
    public decimal? Daa008 { get; set; }
    [SugarColumn(ColumnName = "ItemCode")]
    public string? ItemCode { get; set; }
    //public string? id { 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/MesInvItemStocks.cs
@@ -200,4 +200,10 @@
    /// </summary>
    [SugarColumn(ColumnName = "LINE_K3ID")]
    public decimal? LineK3id { get; set; }
    [SugarColumn(IsIgnore = true)]
    public string? ItemName { get; set; }
    [SugarColumn(IsIgnore = true)]
    public string? ItemModel { 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/MesOqcBarcode.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     OQC出库条码
/// </summary>
[SugarTable("MES_OQC_BARCODE")]
public class MesOqcBarcode
{
    /// <summary>
    ///     ä¸»é”®åºåˆ—为POWER_ID
    /// </summary>
    [SugarColumn(ColumnName = "ID", OracleSequenceName = "POWER_ID",
        IsPrimaryKey = true)]
    public decimal Id { get; set; }
    /// <summary>
    ///     MES_OQC_ITEMS_DETECT_02表的id
    /// </summary>
    [SugarColumn(ColumnName = "PID")]
    public decimal? Pid { get; set; }
    /// <summary>
    ///     æ‰«ç äºº
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    ///     æ‰«ç æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { get; set; }
    /// <summary>
    ///     ç‰©æ–™æ¡ç 
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_BARCODE")]
    public string? ItemBarcode { get; set; }
    /// <summary>
    ///     æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "QTY")]
    public decimal? Qty { get; set; }
    /// <summary>
    ///     ç‰©æ–™id
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_ID")]
    public decimal? ItemId { get; set; }
    /// <summary>
    ///     ç‰©æ–™å·
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_NO")]
    public string? ItemNo { get; set; }
    /// <summary>
    ///     å·¥å•号
    /// </summary>
    [SugarColumn(ColumnName = "SALE_ORDER_NO")]
    public string? SaleOrderNo { get; set; }
}
MES.Service/Modes/MesOqcCheckitem.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,174 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// </summary>
[SugarTable("MES_OQC_CHECKITEM")]
public class MesOqcCheckitem
{
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ID")]
    public decimal Id { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_BY")]
    public string CreateBy { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { 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>
 /// </summary>
 [SugarColumn(ColumnName = "MEMO")]
    public string Memo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ITEM_NO")]
    public string ItemNo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTYPE")]
    public string Ftype { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CHECK_TYPE")]
    public string CheckType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "NAME1")]
    public string Name1 { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FSPECIAL_ITEM")]
    public decimal? FspecialItem { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FACTORY")]
    public string Factory { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FINSPECTION_LEVEL")]
    public string FinspectionLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_LEVEL")]
    public string FcheckLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FRECEIVING_LEVEL")]
    public string FreceivingLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKED")]
    public short? FoneChecked { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKOR")]
    public string FoneCheckor { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKDATE")]
    public DateTime? FoneCheckdate { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKED")]
    public short? FtwoChecked { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKOR")]
    public string FtwoCheckor { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKDATE")]
    public DateTime? FtwoCheckdate { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "EDIT_STATUS")]
    public short? EditStatus { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FVERSION")]
    public long? Fversion { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ISENABLED")]
    public short? Isenabled { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "COMPANY")]
    public string Company { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "KUNNR")]
    public string Kunnr { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "MAX_CHECK_QTY")]
    public decimal? MaxCheckQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "REM_QTY")]
    public decimal? RemQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "OTHERFLAG")]
    public short? Otherflag { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "BATTYPE")]
    public string Battype { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "PROJECT_NAME")]
    public string ProjectName { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "TNAME")]
    public string Tname { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ITEM_ID")]
    public decimal? ItemId { get; set; }
}
MES.Service/Modes/MesOqcCheckitemDt.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,214 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// </summary>
[SugarTable("MES_OQC_CHECKITEM_DT")]
public class MesOqcCheckitemDt
{
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ID")]
    public decimal Id { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_BY")]
    public string CreateBy { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { 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>
 /// </summary>
 [SugarColumn(ColumnName = "MEMO")]
    public string Memo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ITEM_NO")]
    public string ItemNo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FORDER")]
    public decimal? Forder { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FUP_ALLOW")]
    public string FupAllow { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_ITEM")]
    public string FcheckItem { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FSPEC_TYPE")]
    public string FspecType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "WORKSHOP_CENTER_CODE")]
    public decimal? WorkshopCenterCode { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "PROC_NO")]
    public string ProcNo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "SAMPLE_SIZE_NO")]
    public string SampleSizeNo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_TOOL")]
    public string FcheckTool { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FDOWN_ALLOW")]
    public string FdownAllow { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_LEVEL")]
    public string FcheckLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FSTAND")]
    public string Fstand { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FAC_LEVEL")]
    public string FacLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FEATU_PROC")]
    public string FeatuProc { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FEATU_PROD")]
    public string FeatuProd { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "AQL1_ID")]
    public string Aql1Id { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FQA_TYPE")]
    public string FqaType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ISDANWEI")]
    public decimal? Isdanwei { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTYPE")]
    public decimal? Ftype { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "EDIT_STATUS")]
    public short? EditStatus { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CHECK_QTY")]
    public decimal? CheckQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FAC_QTY")]
    public decimal? FacQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "PID")]
    public decimal? Pid { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "COMPANY")]
    public string Company { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FACTORY")]
    public string Factory { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "F_TYPE")]
    public string FType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FREQUENCY")]
    public string Frequency { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FSPEC_REQU")]
    public string FspecRequ { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_TYPE")]
    public string FcheckType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FUNIT")]
    public string Funit { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "REPORF_CHECK")]
    public short? ReporfCheck { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "GIVEN_MODIFY")]
    public short? GivenModify { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FUCL")]
    public decimal? Fucl { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FLCL")]
    public decimal? Flcl { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FRUCL")]
    public decimal? Frucl { get; set; }
}
MES.Service/Modes/MesOqcCheckitemType.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,174 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
/// </summary>
[SugarTable("MES_OQC_CHECKITEM_TYPE")]
public class MesOqcCheckitemType
{
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ID")]
    public decimal Id { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_BY")]
    public string CreateBy { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CREATE_DATE")]
    public DateTime? CreateDate { 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>
 /// </summary>
 [SugarColumn(ColumnName = "MEMO")]
    public string Memo { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ITEM_TYPE")]
    public string ItemType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTYPE")]
    public string Ftype { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "CHECK_TYPE")]
    public string CheckType { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "NAME1")]
    public string Name1 { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FSPECIAL_ITEM")]
    public decimal? FspecialItem { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FACTORY")]
    public string Factory { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FINSPECTION_LEVEL")]
    public string FinspectionLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FCHECK_LEVEL")]
    public string FcheckLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FRECEIVING_LEVEL")]
    public string FreceivingLevel { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKED")]
    public short? FoneChecked { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKOR")]
    public string FoneCheckor { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FONE_CHECKDATE")]
    public DateTime? FoneCheckdate { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKED")]
    public short? FtwoChecked { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKOR")]
    public string FtwoCheckor { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FTWO_CHECKDATE")]
    public DateTime? FtwoCheckdate { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "EDIT_STATUS")]
    public short? EditStatus { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "FVERSION")]
    public long? Fversion { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ISENABLED")]
    public short? Isenabled { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "COMPANY")]
    public string Company { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "KUNNR")]
    public string Kunnr { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "MAX_CHECK_QTY")]
    public decimal? MaxCheckQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "REM_QTY")]
    public decimal? RemQty { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "OTHERFLAG")]
    public short? Otherflag { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "BATTYPE")]
    public string Battype { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "PROJECT_NAME")]
    public string ProjectName { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "TNAME")]
    public string Tname { get; set; }
 /// <summary>
 /// </summary>
 [SugarColumn(ColumnName = "ITEM_TYPE_ID")]
    public decimal? ItemTypeId { get; set; }
}
MES.Service/Modes/MesOqcItemsDetect02.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
using SqlSugar;
namespace MES.Service.Modes
{
    /// <summary>
    /// IQC抽检表头
    ///</summary>
    [SugarTable("MES_OQC_ITEMS_DETECT_02")]
    public class MesOqcItemsDetect02
    {
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID",
            IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// æ£€éªŒå•号
        ///</summary>
        [SugarColumn(ColumnName = "RELEASE_NO")]
        public string? ReleaseNo { get; set; }
        /// <summary>
        /// æ£€éªŒäººå‘˜
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_BY")]
        public string? FcheckBy { get; set; }
        /// <summary>
        /// æäº¤æ ‡è¯†
        ///</summary>
        [SugarColumn(ColumnName = "FSUBMIT")]
        public decimal? Fsubmit { get; set; }
        /// <summary>
        /// æ£€éªŒç»“æžœ
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_RESU")]
        public string? FcheckResu { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        ///</summary>
        [SugarColumn(ColumnName = "ITEM_NO")]
        public string? ItemNo { get; set; }
        /// <summary>
        /// äºŒæ¬¡åˆ¤å®šç»“æžœ
        ///</summary>
        [SugarColumn(ColumnName = "FSECOND_RESU")]
        public string? FsecondResu { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        ///</summary>
        [SugarColumn(ColumnName = "CREATE_BY")]
        public string? CreateBy { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¥æœŸ
        ///</summary>
        [SugarColumn(ColumnName = "CREATE_DATE")]
        public DateTime? CreateDate { 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>
        /// å®¡æ ¸æ ‡è¯†
        ///</summary>
        [SugarColumn(ColumnName = "ISMODIFY1")]
        public decimal? Ismodify1 { get; set; }
        /// <summary>
        /// å®¡æ ¸äºº
        ///</summary>
        [SugarColumn(ColumnName = "MODIFY1_BY")]
        public string? Modify1By { get; set; }
        /// <summary>
        /// å®¡æ ¸æ—¶é—´
        ///</summary>
        [SugarColumn(ColumnName = "MODIFY1_DATE")]
        public DateTime? Modify1Date { get; set; }
        /// <summary>
        /// ä½œåºŸæ ‡è¯†
        ///</summary>
        [SugarColumn(ColumnName = "FCANCEL")]
        public string? Fcancel { get; set; }
        /// <summary>
        /// æ£€éªŒæ—¥æœŸ
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_DATE")]
        public DateTime? FcheckDate { get; set; }
        /// <summary>
        /// è®¡åˆ’数量
        ///</summary>
        [SugarColumn(ColumnName = "PLAN_QTY")]
        public decimal? PlanQty { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        ///</summary>
        [SugarColumn(ColumnName = "REMEKE")]
        public string? Remeke { get; set; }
        /// <summary>
        /// ç‰©æ–™id
        ///</summary>
        [SugarColumn(ColumnName = "ITEM_ID")]
        public decimal? ItemId { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        ///</summary>
        [SugarColumn(ColumnName = "SALE_ORDER_NO")]
        public string? SaleOrderNo { get; set; }
        /// <summary>
        /// ä»“库id
        ///</summary>
        [SugarColumn(ColumnName = "DEPOT_ID")]
        public decimal? DepotId { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? ItemName{ get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? ItemModel { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? CreateUser { get; set; }
        //fcheckBy
        [SugarColumn(IsIgnore = true)]
        public string? FcheckUser { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? DepotName { get; set; }
    }
}
MES.Service/Modes/MesOqcItemsDetectDetail12.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace MES.Service.Modes
{
    /// <summary>
    /// OQC检验
    ///</summary>
    [SugarTable("MES_OQC_ITEMS_DETECT_DETAIL12")]
    public class MesOqcItemsDetectDetail12
    {
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID",
            IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// æ£€éªŒç»“æžœ
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_RESU")]
        public string? FcheckResu { get; set; }
        /// <summary>
        /// æ£€éªŒé¡¹ç›®
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_ITEM")]
        public string? FcheckItem { get; set; }
        /// <summary>
        /// ç‰©æ–™æ¡ç 
        ///</summary>
        [SugarColumn(ColumnName = "ITEM_BARCODE")]
        public string? ItemBarcode { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "RELEASE_NO")]
        public string? ReleaseNo { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "MAIN_ID")]
        public decimal? MainId { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "CREATE_DATE")]
        public DateTime? CreateDate { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "COMPANY")]
        public string? Company { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "FACTORY")]
        public string? Factory { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "FSTAND")]
        public string? Fstand { get; set; }
        /// <summary>
        /// ç”Ÿæˆäºº
        ///</summary>
        [SugarColumn(ColumnName = "LASTUPDATE_BY")]
        public string? LastupdateBy { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "CREATE_BY")]
        public string? CreateBy { get; set; }
        [SugarColumn(IsIgnore = true)] public int? count { get; set; }
    }
}
MES.Service/Modes/MesOqcItemsDetectDetail5.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,197 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace MES.Service.Modes
{
    /// <summary>
    /// OQC检验从表
    ///</summary>
    [SugarTable("MES_OQC_ITEMS_DETECT_DETAIL5")]
    public class MesOqcItemsDetectDetail5
    {
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID",
            IsPrimaryKey = true)]
        public decimal Id { get; set; }
        /// <summary>
        /// æ ‡å‡†å€¼ç±»åž‹
        ///</summary>
        [SugarColumn(ColumnName = "FTEXT_TYPE")]
        public string? FtextType { get; set; }
        /// <summary>
        /// æ ‡å‡†å€¼
        ///</summary>
        [SugarColumn(ColumnName = "FSTAND")]
        public decimal? Fstand { get; set; }
        /// <summary>
        /// ä¸Šå…¬å·®
        ///</summary>
        [SugarColumn(ColumnName = "FUP_ALLOW")]
        public string? FupAllow { get; set; }
        /// <summary>
        /// ä¸‹å…¬å·®
        ///</summary>
        [SugarColumn(ColumnName = "FDOWN_ALLOW")]
        public string? FdownAllow { get; set; }
        /// <summary>
        /// æ£€éªŒæ°´å‡†
        ///</summary>
        [SugarColumn(ColumnName = "SAMPLE_SIZE_NO")]
        public string? SampleSizeNo { 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 = "FCHECK_ITEM")]
        public string? FcheckItem { get; set; }
        /// <summary>
        /// è§„格要求
        ///</summary>
        [SugarColumn(ColumnName = "FSPEC_REQU")]
        public string? FspecRequ { get; set; }
        /// <summary>
        /// æŠ½æ£€æ•°é‡
        ///</summary>
        [SugarColumn(ColumnName = "CHECK_QYT")]
        public decimal? CheckQyt { get; set; }
        /// <summary>
        /// æ£€éªŒç»“æžœ
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_RESU")]
        public string? FcheckResu { get; set; }
        /// <summary>
        /// AC数量
        ///</summary>
        [SugarColumn(ColumnName = "FAC_QTY")]
        public decimal? FacQty { get; set; }
        /// <summary>
        /// RE数量
        ///</summary>
        [SugarColumn(ColumnName = "FRE_QTY")]
        public decimal? FreQty { get; set; }
        /// <summary>
        /// ä¸åˆæ ¼æ•°
        ///</summary>
        [SugarColumn(ColumnName = "FNG_QTY")]
        public decimal? FngQty { get; set; }
        /// <summary>
        /// ä¸è‰¯çއ
        ///</summary>
        [SugarColumn(ColumnName = "FNG_RATE")]
        public decimal? FngRate { get; set; }
        /// <summary>
        /// å·²å½•入数量
        ///</summary>
        [SugarColumn(ColumnName = "FENTER_QTY")]
        public decimal? FenterQty { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "RELEASE_NO")]
        public string? ReleaseNo { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "COMPANY")]
        public string? Company { get; set; }
        /// <summary>
        ///
        ///</summary>
        [SugarColumn(ColumnName = "FACTORY")]
        public string? Factory { get; set; }
        /// <summary>
        /// æ£€éªŒé¡¹ç›®æè¿°
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_ITEM_DESC")]
        public string? FcheckItemDesc { get; set; }
        /// <summary>
        /// å·¥åºå·
        ///</summary>
        [SugarColumn(ColumnName = "PROC_NO")]
        public string? ProcNo { get; set; }
        /// <summary>
        /// å·¥ä½œä¸­å¿ƒç¼–码
        ///</summary>
        [SugarColumn(ColumnName = "WORKSHOP_CENTER_CODE")]
        public string? WorkshopCenterCode { get; set; }
        /// <summary>
        /// å•位
        ///</summary>
        [SugarColumn(ColumnName = "FUNIT")]
        public string? Funit { get; set; }
        /// <summary>
        /// ç‰¹å®šä¿®æ”¹
        ///</summary>
        [SugarColumn(ColumnName = "GIVEN_MODIFY")]
        public short? GivenModify { get; set; }
        /// <summary>
        /// æ£€éªŒå·¥å…·
        ///</summary>
        [SugarColumn(ColumnName = "FCHECK_TOOL")]
        public string? FcheckTool { 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>
        /// ä¸è‰¯æè¿°
        ///</summary>
        [SugarColumn(ColumnName = "REMARKS")]
        public string? Remarks { get; set; }
        /// <summary>
        /// æ£€éªŒä¾æ®
        ///</summary>
        [SugarColumn(ColumnName = "FEATU_PROC")]
        public string? FeatuProc { get; set; }
        [SugarColumn(IsIgnore = true)] public int? Unqualified { 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>
@@ -52,4 +52,7 @@
    public string? Picturename { get; set; }
    [SugarColumn(IsIgnore = true)] public string? base64Date { get; set; }
    [SugarColumn(ColumnName = "ORDER_NO")] //用于SqlSugar
    public string? OrderNo { get; set; }
}
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 =>
@@ -51,4 +66,95 @@
        
    }
    public List<MesQsImage> getByOqcFid(decimal id, string qsType)
    {
        var db = SqlSugarHelper.GetInstance();
        var mesQsImages = db.Queryable<MesQsImage>()
            .Where(s => s.Fid == id && s.QsType == qsType).ToList();
        var mesOqcItemsDetect02 = db.Queryable<MesOqcItemsDetect02>()
            .Where(s => s.Id == id).First();
        if (mesOqcItemsDetect02?.SaleOrderNo != null)
        {
            var baseOrderNo = mesOqcItemsDetect02.SaleOrderNo.Split('-')[0];
            var additionalImages = db.Queryable<MesQsImage>()
                .Where(s => s.OrderNo == baseOrderNo && s.QsType == qsType)
                .Where(s => !mesQsImages.Any(existing => existing.Id == s.Id))
                .ToList();
            mesQsImages.AddRange(additionalImages);
            if (mesQsImages.Count > 9)
            {
                mesQsImages = mesQsImages.Take(9).ToList();
            }
        }
        mesQsImages.ForEach(s =>
        {
            if (s.ImageData is { Length: > 0 })
                s.base64Date = Convert.ToBase64String(s.ImageData);
        });
        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/MesOqcItemsDetect02Manager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,632 @@
using System.Data;
using Masuit.Tools;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using DbType = System.Data.DbType;
namespace MES.Service.service.QC;
public class MesOqcItemsDetect02Manager : Repository<MesOqcItemsDetect02>
{
    public (List<MesOqcItemsDetect02> item, int TotalCount) GetPage(
        XJPageResult queryObj)
    {
        if (queryObj == null)
            throw new ArgumentNullException(nameof(queryObj));
        //if (string.IsNullOrEmpty(queryObj.CreateBy))
        //    return (new List<MesOqcItemsDetect02>(), 0);
        //if (queryObj.CreateBy.IsNullOrEmpty()) return ([], 0);
        var db = Db;
        //安全的类型转换
        if (!decimal.TryParse(queryObj.Id.ToString(), out decimal id))
        {
            id = 0;
            // å¤„理转换失败的情况
        }
        var totalCount = 0;
        var pageList = Db.Queryable<MesOqcItemsDetect02, MesItems
                , SysUser, SysUser, MesDepots>((a, b, c, d, e) =>
                new JoinQueryInfos(JoinType.Left, a.ItemNo == b.ItemNo,
                    JoinType.Left, a.CreateBy == c.Fcode,
                    JoinType.Left, a.FcheckBy == d.Fcode,
                    JoinType.Left, a.DepotId == e.DepotId
                ))
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
                "未完成".Equals(queryObj.Result),
                (a, b, c, d, e) => a.FcheckResu == null || a.Fsubmit == 0)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
                !"未完成".Equals(queryObj.Result),
                (a, b, c, d, e) => a.FcheckResu != null && a.Fsubmit == 1)
            .WhereIF(id > 0, (a, b, c, d, e) => a.Id == id)
            .OrderByDescending((a, b, c, d, e) => a.Id)
            .Select((a, b, c, d, e) => new MesOqcItemsDetect02()
            {
                ItemNo = b.ItemNo,
                ItemName = b.ItemName,
                ItemModel = b.ItemModel,
                CreateUser = c.Fname,
                FcheckUser = d.Fname,
                DepotName = e.DepotName
            }, true)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        return (pageList, totalCount);
    }
    public List<MesOqcItemsDetectDetail5> GetDetail5(OQCDto dto)
    {
        return Db.Queryable<MesOqcItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == dto.ReleaseNo)
            .ToList();
    }
    public List<MesOqcItemsDetectDetail12> GetDetail12(OQCDto dto)
    {
        return Db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.ReleaseNo == dto.ReleaseNo
                        && s.MainId == dto.MainId)
            .ToList();
    }
    public MesInvItemStocks GetItemBarCode(XJPageResult queryObj)
    {
        if (queryObj.ItemCode.IsNullOrEmpty())
        {
            throw new NotImplementedException("请扫描条码");
        }
        var mesInvItemStocks = Db.Queryable<MesInvItemStocks>()
            .Where(a => a.ItemBarcode == queryObj.ItemCode)
            .First();
        if (mesInvItemStocks == null)
        {
            throw new NotImplementedException("条码不存在于库存中");
        }
        // æ£€æŸ¥æ¡ç æ˜¯å¦å·²ç»å­˜åœ¨äºŽMesOqcBarcode表中(已检验过)
        var existingBarcode = Db.Queryable<MesOqcBarcode>()
            .Where(a => a.ItemBarcode == queryObj.ItemCode)
            .First();
        if (existingBarcode != null)
        {
            throw new NotImplementedException("该条码已经检验过,不能重复检验");
        }
        /*var mesDepots = Db.Queryable<MesDepots>()
            .Where(s => s.DepotId == 121163).First();
        if (!mesDepots.Equals(mesInvItemStocks.DepotsCode))
        {
            throw new NotImplementedException("只能扫描" + mesDepots.DepotCode +
                                              "仓库的码");
        }*/
        if (mesInvItemStocks.ItemNo is null)
        {
            throw new NotImplementedException("物料是非法的");
        }
        var mesItems = Db.Queryable<MesItems>()
            .Where(b => b.ItemNo == mesInvItemStocks.ItemNo)
            .Select<MesItems>(b => new MesItems
            {
                ItemName = b.ItemName,
                ItemModel = b.ItemModel,
            })
            .First();
        mesInvItemStocks.ItemName = mesItems.ItemName;
        mesInvItemStocks.ItemModel = mesItems.ItemModel;
        return mesInvItemStocks;
    }
    //OQCDto
    public int ItemBarCodeSubmit(OQCDto dto)
    {
        //getbillcode1
        var billNo = Db.Ado.GetString(
            "SELECT getbillcode1('1000', '1000', 'OQC') FROM DUAL");
        var dtoItemBarCodeData = dto.ItemBarCodeData;
        var sum = dtoItemBarCodeData.Sum(s => s.Quantity);
        MesOqcItemsDetect02 from = new MesOqcItemsDetect02
        {
            CreateBy = dto.CreateUser,
            CreateDate = DateTime.Now,
            ReleaseNo = billNo,
            Fsubmit = 0,
            Ismodify1 = 0,
            FcheckBy = dto.CreateUser,
            FcheckDate = DateTime.Now,
            ItemNo = dtoItemBarCodeData[0].ItemNo,
            //ItemId = dtoItemBarCodeData[0].ItemId,
            PlanQty = sum,
            SaleOrderNo = dtoItemBarCodeData[0].TaskNo,
            DepotId = 121163
        };
        var id = Db.Insertable(from)
            .IgnoreColumns(ignoreNullColumn: true)
            .ExecuteReturnIdentity();
        //记录条码
        List<MesOqcBarcode> oqcBarcodes = new List<MesOqcBarcode>();
        foreach (var mesInvItemStockse in dtoItemBarCodeData)
        {
            MesOqcBarcode entity = new MesOqcBarcode()
            {
                CreateBy = dto.CreateUser,
                CreateDate = DateTime.Now,
                ItemBarcode = mesInvItemStockse.ItemBarcode,
                //ItemId = mesInvItemStockse.ItemId,
                ItemNo = mesInvItemStockse.ItemNo,
                Qty = mesInvItemStockse.Quantity,
                Pid = id,
                SaleOrderNo = mesInvItemStockse.TaskNo,
            };
            oqcBarcodes.Add(entity);
        }
        var executeCommand = Db.Insertable(oqcBarcodes).PageSize(1)
            .IgnoreColumnsNull()
            .ExecuteCommand();
        //PRC_OQC_ITEM_INSERT_BTN
        if (executeCommand > 0 && id > 0)
        {
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("PO_RESULT", null,
                DbType.Int32, ParameterDirection.Output, 4000);
            var outputMessage = new SugarParameter("PO_TEXT", null,
                DbType.String,
                ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("P_RELEASE_NO", from.ReleaseNo, DbType.String,
                    ParameterDirection.Input),
                new("P_ITEM_NO", from.ItemNo, DbType.String ,
                    ParameterDirection.Input),
                new("P_BILL_NO  ", "", DbType.String,
                    ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            var db = SqlSugarHelper.GetInstance();
            // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_OQC_ITEM_INSERT_BTN(:P_RELEASE_NO,:P_ITEM_ID,:P_BILL_NO,:PO_RESULT, :PO_TEXT); END;",
                parameters.ToArray());
            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue))
                // å¤„理失败情况,返回错误信息
                throw new Exception($"操作失败: {messageValue}");
            // å½“ resultValue ä¸º "0" æ—¶è¿”回成功状态
            return id;
        }
        return 0;
    }
    public OQCDto getXjDetail02ById(decimal? id)
    {
        var rkjDto = new OQCDto();
        var qsItemOqcItem =
            Db.Queryable<MesOqcItemsDetectDetail5>().Single(s => s.Id == id);
        /* if (qsItemOqcItem.IsPass == 0)
             qsItemOqcItem.Result = "不合格";
         else if (qsItemOqcItem.IsPass == 1)
             qsItemOqcItem.Result = "合格";
         else
             qsItemOqcItem.Result = "未完成";
         if (qsItemOqcItem.Picture is { Length: > 0 })
             qsItemOqcItem.imageData =
                 Convert.ToBase64String(qsItemOqcItem.Picture);
 */
        //获取不合格数
        var count = Db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.Fstand == "×" && s.MainId == id).Count();
        qsItemOqcItem.Unqualified = count;
        rkjDto.ItemXj01 = qsItemOqcItem;
        rkjDto.ItemXj02s = Db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == id)
            .ToList();
        return rkjDto;
    }
    public int UpdateQSItemDetail(MesOqcItemsDetectDetail12 detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesOqcItemsDetectDetail12>()
                .SetColumns(s => s.LastupdateBy == detail.LastupdateBy)
                // .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.Fstand),
                    s => s.Fstand == detail.Fstand)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.FcheckResu),
                    s => s.FcheckResu == detail.FcheckResu)
                .Where(s => s.MainId == detail.MainId && s.Id == detail.Id)
                .ExecuteCommand();
        });
        detail.CreateBy = detail.LastupdateBy;
        withOracle += autoResult(detail);
        return withOracle;
    }
    private int autoResult(MesOqcItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        // Single æ²¡æœ‰æŸ¥è¯¢åˆ°ç»“果时返回Null,如果结果大于1条会抛出错误
        var QsItemOqcItem = db.Queryable<MesOqcItemsDetectDetail5>()
            .Single(s => s.Id == detail.MainId);
        if (QsItemOqcItem == null) return 0;
        //查询这个检验项目下的检验结果
        var count = db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        updateDetail5(detail);
        var result = "";
        //检验实际结果不等于应该检验的个数时直接推出
        if (QsItemOqcItem.CheckQyt != count) return 0;
        //合格的有多少个
        var passCount = db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "√").Count();
        //不合格的有多少个
        var noCount = db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count();
        if (count == passCount)
            result = "合格";
        //else if (count - passCount < QsItemOqcItem.FreQty)
        //    result = "不合格";
        else if (noCount >= QsItemOqcItem.FreQty)
            result = "不合格";
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                var commit = 0;
                commit += db.Updateable<MesOqcItemsDetectDetail5>()
                    .SetColumns(s => s.FcheckResu == result)
                    .SetColumns(s => s.FenterQty == count)
                    .Where(s => s.Id == detail.MainId)
                    .ExecuteCommand();
                return commit;
            });
        var isNull = db.Queryable<MesOqcItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == null)
            .Count();
        if (isNull > 0) return 1;
        //获取检验单的检验项目的个数
        var sum = db.Queryable<MesOqcItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == detail.ReleaseNo).Count();
        if (sum == 0) return 1;
        //获取检验单下的合格的检验项目个数
        var icount = db.Queryable<MesOqcItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == "合格")
            .Count();
        var FcheckResu = "不合格";
        //实际个数等于理论个数时对检验单进行判定
        if (sum == icount)
            //合格的检验结果等于总检验数视为合格
            FcheckResu = "合格";
        //var sysUser = db.Queryable<SysUser>()
        //    .Where(s => s.Fcode == detail.CreateBy).First();
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesOqcItemsDetect02>()
                .SetColumns(s => s.FcheckResu == FcheckResu)
                .SetColumns(s => s.FcheckDate == DateTime.Now)
                //.SetColumns(s => s.FcheckBy == sysUser.Fname)
                .SetColumns(s => s.LastupdateBy == detail.CreateBy)
                .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .Where(s => s.ReleaseNo == detail.ReleaseNo)
                .ExecuteCommand();
        });
        //  if (FcheckResu.Equals("不合格"))
        //自动生成入库检异常对策
        ///     saveDetect02(detail.Id, detail.CreateBy);
        return useTransactionWithOracle;
    }
    private int updateDetail5(MesOqcItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        //查询这个检验项目下的检验数量
        var count = db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        //获取不合格数
        var countNo = db.Queryable<MesOqcItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count();
        //更新检验明细已检数量
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesOqcItemsDetectDetail5>()
                .SetColumns(s => s.FenterQty == count)
                .SetColumns(s => s.FngQty == countNo)
                .Where(s => s.Id == detail.MainId)
                .ExecuteCommand();
        });
        return withOracle;
    }
    public int saveRemarksPid(LLJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesOqcItemsDetectDetail5>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.pid)
                .ExecuteCommand();
        });
    }
    public bool IqcQaSubmit(LLJDto dto)
    {
        try
        {
            // å®šä¹‰è¾“出参数
            var outputResult = new SugarParameter("o_Result", null,
                DbType.Int32, ParameterDirection.Output,
                4000);
            var outputMessage = new SugarParameter("o_Msg", null,
                DbType.String,
                ParameterDirection.Output, 4000);
            // å®šä¹‰è¾“入参数
            var parameters = new List<SugarParameter>
            {
                new("p_Release_No", dto.releaseNo, DbType.String,
                    ParameterDirection.Input),
                new("p_User", dto.userNo, DbType.String,
                    ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            var db = SqlSugarHelper.GetInstance();
            // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            db.Ado.ExecuteCommand(
                "BEGIN PRC_MES_OQC_QA_SUBMIT82(: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);
            return true;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    public int saveRemarksGid(LLJDto dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesOqcItemsDetect02>()
                .SetColumns(it =>
                    it.Remeke == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.ReleaseNo == dto.releaseNo)
                .ExecuteCommand();
        });
    }
    public int SetQSItemDetail(MesOqcItemsDetectDetail12 detail)
    {
        var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            List<MesOqcItemsDetectDetail12> result = new();
            for (var i = 0; i < detail.count; i++)
            {
                var item = new MesOqcItemsDetectDetail12();
                item.MainId = detail.MainId;
                item.ReleaseNo = detail.ReleaseNo;
                item.Fstand = detail.Fstand;
                item.FcheckResu = detail.FcheckResu;
                item.CreateBy = detail.LastupdateBy;
                item.CreateDate = DateTime.Now;
                item.Factory = "1000";
                item.Company = "1000";
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
        detail.CreateBy = detail.LastupdateBy;
        autoResult(detail);
        return oracle;
    }
    public List<QsItemIpiItem> SetQSItems(string itemNo)
    {
        var db = SqlSugarHelper.GetInstance();
        // é¦–先检查MES_QA表中该物料的检验项目是否已审核
        var qaCount = db.Queryable<MesQa>()
            .Where(q => q.ItemNo == itemNo && q.QsType == "6" && q.Fsubmit == 1).Count();
        if (qaCount <= 0) return [];
        // ç›´æŽ¥æŸ¥è¯¢MesQualityStandard表中qsType为"6"的检验项目
        var count = db.Queryable<MesQualityStandard>()
            .Where(b => b.QsType == "6" && b.ItemNo == itemNo).Count();
        if (count <= 0) return [];
        return db
            .Queryable<MesQualityStandard>()
            .Where(b => b.QsType == "6" && b.ItemNo == itemNo).Select(
                b => new QsItemIpiItem
                {
                    ProjName = b.ProjName,
                    ItemMod = b.ItemMod,
                    InspectionMethod = b.InspectionMethod,
                    UsingInstruments = b.UsingInstruments,
                    LevelNum = SqlFunc.IsNull(
                        SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
                        b.InspectionLevel),
                    MaxValue = b.MaxValue,
                    StandardValue = b.StandardValue,
                    MinValue = b.MinValue,
                    Notes = b.Notes,
                    FcheckLevel = b.FcheckLevel,
                    FacLevel = b.FacLevel,
                    QsCode = b.QsCode,
                    QsName = b.QsName,
                    Picture = b.Picture,
                    Picturename = b.Picturename,
                    result = "未检测",
                    isCheck = 0
                }).ToList();
    }
    public List<MesOqcItemsDetectDetail5> SaveItem(string releaseNo, List<QsItemIpiItem> items)
    {
        var db = SqlSugarHelper.GetInstance();
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            // æ–°å¢žå‰å…ˆè¿›è¡Œåˆ é™¤æ—§é¡¹ç›®ï¼ˆè¦†ç›–操作)
            db.Deleteable<MesOqcItemsDetectDetail5>().Where(it => it.ReleaseNo == releaseNo).ExecuteCommand();
            db.Deleteable<MesOqcItemsDetectDetail12>().Where(it => it.ReleaseNo == releaseNo).ExecuteCommand();
            // è½¬æ¢QsItemIpiItem为MesOqcItemsDetectDetail5并插入
            var oqcItems = items.Select(item => new MesOqcItemsDetectDetail5
            {
                ReleaseNo = releaseNo,
                FcheckItem = item.ProjName,
                FcheckItemDesc = item.ItemMod,
                CheckQyt = item.LevelNum,
                FcheckResu = "未检验",
                FenterQty = 0,
                Company = "1000",
                Factory = "1000",
                FcheckLevel = item.FcheckLevel,
                FacLevel = item.FacLevel,
                FcheckTool = item.UsingInstruments,
                FspecRequ = item.InspectionMethod,
                Fstand = item.StandardValue,
                FupAllow = item.MaxValue?.ToString(),
                FdownAllow = item.MinValue?.ToString(),
                Remarks = item.Notes,
                LastupdateBy = "system",
                LastupdateDate = DateTime.Now,
                // AC数和RE数将通过存储过程设置
                FacQty = 0,
                FreQty = 0
            }).ToList();
            // æ’入检验项目
            var insertResult = db.Insertable(oqcItems).ExecuteCommand();
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹è®¾ç½®AC数和RE数
            if (insertResult > 0)
            {
                try
                {
                    // å®šä¹‰è¾“出参数
                    var outputResult = new SugarParameter("PO_RESULT", null,
                        DbType.Int32, ParameterDirection.Output, 4000);
                    var outputMessage = new SugarParameter("PO_TEXT", null,
                        DbType.String, ParameterDirection.Output, 4000);
                    // å®šä¹‰è¾“入参数
                    var parameters = new List<SugarParameter>
                    {
                        new("P_RELEASE_NO", releaseNo, DbType.String, ParameterDirection.Input),
                        outputResult,
                        outputMessage
                    };
                    // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
                    db.Ado.ExecuteCommand(
                        "BEGIN prc_mes_oqc_check_items(:P_RELEASE_NO, :PO_RESULT, :PO_TEXT); END;",
                        parameters.ToArray());
                    // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
                    var resultValue = outputResult.Value?.ToString();
                    var messageValue = outputMessage.Value?.ToString();
                    if ("1".Equals(resultValue))
                    {
                        // å¤„理失败情况,返回错误信息
                        throw new Exception($"设置AC数RE数失败: {messageValue}");
                    }
                }
                catch (Exception ex)
                {
                    // å¦‚果存储过程调用失败,记录错误但不影响主流程
                    Console.WriteLine($"调用prc_mes_oqc_check_items存储过程失败: {ex.Message}");
                }
            }
            return insertResult;
        });
        // è¿”回更新后的检验项目列表
        return GetDetail5(new OQCDto { ReleaseNo = releaseNo });
    }
}
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/Base/LoginController.cs
@@ -3,6 +3,7 @@
using MES.Service.service;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace MESApplication.Controllers.Base;
@@ -14,6 +15,12 @@
[ApiController]
public class LoginController : ControllerBase
{
    public class Root
    {
        public string version { get; set; }
        public string apkUrl { get; set; }
    }
    /// <summary>
    ///     ç™»å½•
    /// </summary>
@@ -105,4 +112,36 @@
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///    èŽ·å–App最新版本信息
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    [HttpPost("getAppUpgradeInfo")]
    public async Task<ResponseResult> getAppUpgradeInfo()
    {
        try
        {
            HttpClient client = new();
            var requestUrl = $"http://192.168.1.223:10054/UpgradeInformation.json";
            var response = await client.GetAsync(requestUrl);
            response.EnsureSuccessStatusCode(); // æ£€æŸ¥HTTP状态码
            var responseContent = await response.Content.ReadAsStringAsync();
            var a = JsonConvert.DeserializeObject<Root>(responseContent);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = a
            };
        }
        catch (Exception ex)
        {
            return null;
        }
    }
}
MESApplication/Controllers/QC/BaseController.cs
@@ -81,4 +81,55 @@
            return ResponseResult.ResponseError(ex);
        }
    }
    //getByOqcFid
    [HttpPost("getByOqcFid")]
    public ResponseResult getByOqcFid([FromBody] JObject data)
    {
        var id = Convert.ToInt32(data["fid"].ToString());
        var qsType = data["qsType"].ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var tbBillList =
                new BaseService().getByOqcFid(id, qsType);
            resultInfos.tbBillList = tbBillList;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //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,54 @@
        }
    }
<<<<<<< HEAD
    [HttpPost("SetQSItems")]
    public ResponseResult SetQSItems([FromBody] JObject data)
    {
        var itemNo = data["itemNo"].ToString();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var detail021 = m.SetQSItems(itemNo);
            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] JObject data)
    {
        var releaseNo = data["releaseNo"].ToString();
        var items = data["items"].ToObject<List<QsItemIpiItem>>();
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var detail021 = m.SaveItem(releaseNo, items);
            resultInfos.tbBillList = detail021;
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
=======
>>>>>>> 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/MESApplication.csproj.user
@@ -5,6 +5,6 @@
  </PropertyGroup>
  <PropertyGroup>
    <ActiveDebugProfile>IIS Express</ActiveDebugProfile>
    <NameOfLastUsedPublishProfile>F:\F盘桌面专属\润达项目\润达项目api\StandardPda\MESApplication\Properties\PublishProfiles\FolderProfile1.pubxml</NameOfLastUsedPublishProfile>
    <NameOfLastUsedPublishProfile>E:\Desktop\接口\RD\RD_MES_Api\MESApplication\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
  </PropertyGroup>
</Project>
MESApplication/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,8 +4,8 @@
-->
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>F:\F盘桌面专属\润达项目\润达项目api\StandardPda\MESApplication\bin\Release\net8.0\publish\</_PublishTargetUrl>
    <History>True|2025-03-27T15:22:42.3501020Z;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>
    <_PublishTargetUrl>E:\Desktop\接口\RD\RD_MES_Api\MESApplication\bin\Release\net8.0\publish\</_PublishTargetUrl>
    <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"
          }
        }
      },
@@ -1412,7 +1412,10 @@
          "SqlSugarCore": "5.1.4.158"
        },
        "runtime": {
          "MES.Service.dll": {}
          "MES.Service.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
@@ -1472,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.staticwebassets.endpoints.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[]}
MESApplication/bin/Debug/net8.0/MESApplication.xml
@@ -30,6 +30,13 @@
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.LoginController.getAppUpgradeInfo">
            <summary>
               èŽ·å–App最新版本信息
            </summary>
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.MessageCenterController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
@@ -915,6 +922,99 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetById(System.Int32)">
            <summary>
                æ ¹æ®ä¸»é”®èŽ·å–
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.DeleteByIds(System.Object[])">
            <summary>
                æ ¹æ®ä¸»é”®åˆ é™¤
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Add(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ 
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.InsertReturnIdentity(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ è¿”å›žè‡ªå¢ž
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Update(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                ä¿®æ”¹
            </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"
          }
        }
      },
@@ -1412,7 +1412,10 @@
          "SqlSugarCore": "5.1.4.158"
        },
        "runtime": {
          "MES.Service.dll": {}
          "MES.Service.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
@@ -1472,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.staticwebassets.endpoints.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[]}
MESApplication/bin/Release/net8.0/MESApplication.xml
@@ -30,6 +30,13 @@
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.LoginController.getAppUpgradeInfo">
            <summary>
               èŽ·å–App最新版本信息
            </summary>
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.MessageCenterController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
@@ -498,6 +505,27 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.QueryPurview(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æŸ¥è¯¢æƒé™
            </summary>
            <param name="userno">用户Id</param>
            <returns>权限信息</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.GetRfSetup(Newtonsoft.Json.Linq.JObject)">
            <summary>
            åŠŸèƒ½ç•Œé¢
            </summary>
            <param name="functionName">方法名称</param>
            <returns>功能界面信息</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.GetExcProc(Newtonsoft.Json.Linq.JObject)">
            <summary>
            åŠŸèƒ½æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            </summary>
            <param name="data">请求参数</param>
            <returns>API响应结果</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.SalesOrderController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
@@ -894,6 +922,99 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetById(System.Int32)">
            <summary>
                æ ¹æ®ä¸»é”®èŽ·å–
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.DeleteByIds(System.Object[])">
            <summary>
                æ ¹æ®ä¸»é”®åˆ é™¤
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Add(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ 
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.InsertReturnIdentity(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ è¿”å›žè‡ªå¢ž
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Update(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                ä¿®æ”¹
            </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"
          }
        }
      },
@@ -1160,7 +1160,10 @@
          "SqlSugarCore": "5.1.4.158"
        },
        "runtime": {
          "MES.Service.dll": {}
          "MES.Service.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
@@ -1220,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.staticwebassets.endpoints.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Publish","Endpoints":[]}
MESApplication/bin/Release/net8.0/publish/MESApplication.xml
@@ -30,6 +30,13 @@
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.LoginController.getAppUpgradeInfo">
            <summary>
               èŽ·å–App最新版本信息
            </summary>
            <param name="data"></param>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.Base.MessageCenterController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
@@ -498,6 +505,27 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.QueryPurview(Newtonsoft.Json.Linq.JObject)">
            <summary>
            æŸ¥è¯¢æƒé™
            </summary>
            <param name="userno">用户Id</param>
            <returns>权限信息</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.GetRfSetup(Newtonsoft.Json.Linq.JObject)">
            <summary>
            åŠŸèƒ½ç•Œé¢
            </summary>
            <param name="functionName">方法名称</param>
            <returns>功能界面信息</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.ModulesController.GetExcProc(Newtonsoft.Json.Linq.JObject)">
            <summary>
            åŠŸèƒ½æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            </summary>
            <param name="data">请求参数</param>
            <returns>API响应结果</returns>
        </member>
        <member name="M:MESApplication.Controllers.BasicData.SalesOrderController.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
@@ -894,6 +922,99 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetList">
            <summary>
                èŽ·å–æ‰€æœ‰
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.GetById(System.Int32)">
            <summary>
                æ ¹æ®ä¸»é”®èŽ·å–
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.DeleteByIds(System.Object[])">
            <summary>
                æ ¹æ®ä¸»é”®åˆ é™¤
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Add(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ 
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.InsertReturnIdentity(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                æ·»åŠ è¿”å›žè‡ªå¢ž
            </summary>
            <returns></returns>
        </member>
        <member name="M:MESApplication.Controllers.QC.MesOqcItemsDetect02Controller.Update(MES.Service.Modes.MesOqcItemsDetect02)">
            <summary>
                ä¿®æ”¹
            </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"
}