From 2b81edc873cc53d774104e4be2c26562cbe6f6ba Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期三, 19 十一月 2025 13:29:24 +0800
Subject: [PATCH] 超期复检

---
 StandardInterface/MESApplication/Controllers/QC/CqjController.cs |  400 ++++++++++++++++
 StandardInterface/MES.Service/Modes/LtsCqj.cs                    |  124 ++++
 StandardInterface/MES.Service/service/QC/CqjService.cs           |  577 +++++++++++++++++++++++
 StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs  |   85 +++
 StandardInterface/MES.Service/Modes/MesQsImage.cs                |    4 
 StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs   |  157 ++++++
 StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs        |  127 +++++
 StandardInterface/MESApplication/appsettings.json                |    2 
 8 files changed, 1,473 insertions(+), 3 deletions(-)

diff --git a/StandardInterface/MES.Service/Modes/LtsCqj.cs b/StandardInterface/MES.Service/Modes/LtsCqj.cs
new file mode 100644
index 0000000..78da457
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/LtsCqj.cs
@@ -0,0 +1,124 @@
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 瓒呮湡妫�楠岃鍥� V_CQJ
+/// </summary>
+[SugarTable("V_CQJ")]
+public class LtsCqj
+{
+    /// <summary>
+    /// ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+    /// <summary>
+    /// 妫�楠屽崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { 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 = "ITEM_NAME")]
+    public string? ItemName { get; set; }
+
+    /// <summary>
+    /// 瑙勬牸鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_MODEL")]
+    public string? ItemModel { get; set; }
+
+    /// <summary>
+    /// 閫佹鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_NO")]
+    public string? LotNo { get; set; }
+
+    /// <summary>
+    /// 鎻愪氦鏍囪瘑
+    /// </summary>
+    [SugarColumn(ColumnName = "FSUBMIT")]
+    public decimal? Fsubmit { get; set; }
+
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    /// 鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CJR")]
+    public string? Cjr { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀粨鏋�
+    /// </summary>
+    [SugarColumn(ColumnName = "FCHECK_RESU")]
+    public string? FcheckResu { get; set; }
+
+    /// <summary>
+    /// 澶囨敞淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_NO1")]
+    public string? LotNo1 { get; set; }
+
+    /// <summary>
+    /// 涓嶈壇鎻忚堪
+    /// </summary>
+    [SugarColumn(ColumnName = "FNG_DESC")]
+    public string? FngDesc { get; set; }
+
+    /// <summary>
+    /// 閫佹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "FBATCH_QTY")]
+    public decimal? FbatchQty { get; set; }
+
+    /// <summary>
+    /// 鎻愪氦浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "TJR")]
+    public string? Tjr { get; set; }
+
+    /// <summary>
+    /// 鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "FNUMBER")]
+    public string? Fnumber { get; set; }
+
+    /// <summary>
+    /// 閫佹浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "SJR")]
+    public string? Sjr { get; set; }
+
+    /// <summary>
+    /// 閫佹鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DECLARATION_NO")]
+    public string? DeclarationNo { get; set; }
+
+    /// <summary>
+    /// 妫�楠岄」鐩暟閲忥紙闈炴暟鎹簱瀛楁锛岀敤浜庡墠绔樉绀猴級
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public int? InspectionItemCount { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs b/StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs
new file mode 100644
index 0000000..a903c8a
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/MesCqItemsDetect01.cs
@@ -0,0 +1,127 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 瓒呮湡妫�楠屽崟涓昏〃 MES_CQ_ITEMS_DETECT_01
+/// </summary>
+[Table("MES_CQ_ITEMS_DETECT_01")]
+[SugarTable("MES_CQ_ITEMS_DETECT_01")]
+public class MesCqItemsDetect01
+{
+    /// <summary>
+    /// 涓婚敭ID
+    /// </summary>
+    [Column("ID")]
+    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+    /// <summary>
+    /// 妫�楠屽崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { 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 = "LOT_NO")]
+    public string? LotNo { 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 = "FCHECK_DATE")]
+    public DateTime? FcheckDate { get; set; }
+
+    /// <summary>
+    /// 妫�楠屼汉
+    /// </summary>
+    [SugarColumn(ColumnName = "FCHECK_BY")]
+    public string? FcheckBy { get; set; }
+
+    /// <summary>
+    /// 澶囨敞淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_NO1")]
+    public string? LotNo1 { get; set; }
+
+    /// <summary>
+    /// 涓嶈壇鎻忚堪
+    /// </summary>
+    [SugarColumn(ColumnName = "FNG_DESC")]
+    public string? FngDesc { get; set; }
+
+    /// <summary>
+    /// 閫佹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "FBATCH_QTY")]
+    public decimal? FbatchQty { get; set; }
+
+    /// <summary>
+    /// 鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_UNIT")]
+    public decimal? ItemUnit { 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 = "FACTORY")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    /// 鍏徃
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string? Company { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs b/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs
new file mode 100644
index 0000000..69324aa
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail12.cs
@@ -0,0 +1,85 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 瓒呮湡妫�楠岀粨鏋滆〃 MES_CQ_ITEMS_DETECT_DETAIL12
+/// </summary>
+[Table("MES_CQ_ITEMS_DETECT_DETAIL12")]
+[SugarTable("MES_CQ_ITEMS_DETECT_DETAIL12")]
+public class MesCqItemsDetectDetail12
+{
+    /// <summary>
+    /// 涓婚敭ID
+    /// </summary>
+    [Column("ID")]
+    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+    /// <summary>
+    /// 涓昏〃ID锛堝叧鑱擬ES_CQ_ITEMS_DETECT_DETAIL5锛�
+    /// </summary>
+    [SugarColumn(ColumnName = "MAIN_ID")]
+    public decimal? MainId { get; set; }
+
+    /// <summary>
+    /// 妫�楠屽崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { get; set; }
+
+    /// <summary>
+    /// 鏍囧噯鍊�
+    /// </summary>
+    [SugarColumn(ColumnName = "FSTAND")]
+    public string? Fstand { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀粨鏋�
+    /// </summary>
+    [SugarColumn(ColumnName = "FCHECK_RESU")]
+    public string? FcheckResu { 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(IsIgnore = true)]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    /// 宸ュ巶
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    /// 鍏徃
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    /// 鏁伴噺锛堢敤浜庢壒閲忔彃鍏ワ級
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public int? count { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs b/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs
new file mode 100644
index 0000000..6ed6ab0
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/MesCqItemsDetectDetail5.cs
@@ -0,0 +1,157 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 瓒呮湡妫�楠岄」鐩〃 MES_CQ_ITEMS_DETECT_DETAIL5
+/// </summary>
+[Table("MES_CQ_ITEMS_DETECT_DETAIL5")]
+[SugarTable("MES_CQ_ITEMS_DETECT_DETAIL5")]
+public class MesCqItemsDetectDetail5
+{
+    /// <summary>
+    /// 涓婚敭ID
+    /// </summary>
+    [Column("ID")]
+    [SugarColumn(IsPrimaryKey = true, OracleSequenceName = "SEQ_CQ_ID", ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+    /// <summary>
+    /// 妫�楠屽崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { 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 = "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 = "FUP_ALLOW")]
+    public string? FupAllow { get; set; }
+
+    /// <summary>
+    /// 鏍锋湰閲�
+    /// </summary>
+    [SugarColumn(ColumnName = "SAMPLE_SIZE_NO")]
+    public string? SampleSizeNo { get; set; }
+
+    /// <summary>
+    /// 瑙勬牸瑕佹眰
+    /// </summary>
+    [SugarColumn(ColumnName = "FSPEC_REQU")]
+    public string? FspecRequ { get; set; }
+
+    /// <summary>
+    /// 鎷掓敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "FRE_QTY")]
+    public decimal? FreQty { 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>
+    /// 妫�楠岄」鐩弿杩�
+    /// </summary>
+    [SugarColumn(ColumnName = "FCHECK_ITEM_DESC")]
+    public string? FcheckItemDesc { get; set; }
+
+    /// <summary>
+    /// 鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "FUNIT")]
+    public string? Funit { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "MEOM")]
+    public string? Meom { get; set; }
+
+    /// <summary>
+    /// 宸ュ巶
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    /// 鍏徃
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    /// 宸叉鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "FENTER_QTY")]
+    public int? FenterQty { get; set; }
+
+    /// <summary>
+    /// 涓嶈壇鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "FNG_QTY")]
+    public int? FngQty { get; set; }
+
+    /// <summary>
+    /// AC鏁帮紙鎺ユ敹鏁伴噺锛�
+    /// </summary>
+    [SugarColumn(ColumnName = "FAC_QTY")]
+    public int? FacQty { get; set; }
+
+    /// <summary>
+    /// 鍫嗙┐鍙凤紙瓒呮湡妫�楠屼笉浣跨敤锛�
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? Dnum { get; set; }
+
+    /// <summary>
+    /// 涓嶅悎鏍兼暟锛堥潪鏁版嵁搴撳瓧娈碉級
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public int? Unqualified { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/MesQsImage.cs b/StandardInterface/MES.Service/Modes/MesQsImage.cs
index 3f627b2..beea629 100644
--- a/StandardInterface/MES.Service/Modes/MesQsImage.cs
+++ b/StandardInterface/MES.Service/Modes/MesQsImage.cs
@@ -36,11 +36,11 @@
     public byte[]? ImageData { get; set; }
 
     /// <summary>
-    ///     1涓洪妫�锛�2涓哄贰妫�锛�3涓哄叆搴撴
+    ///     1涓洪妫�锛�2涓哄贰妫�锛�3涓哄叆搴撴锛�4涓烘潵鏂欐楠岋紝5涓鸿秴鏈熸楠�
     /// </summary>
     [Column("QS_TYPE")]
     [SugarColumn(ColumnName = "QS_TYPE")] //鐢ㄤ簬SqlSugar
-    [StringLength(1, ErrorMessage = "1涓洪妫�锛�2涓哄贰妫�锛�3涓哄叆搴撴闀垮害涓嶈兘瓒呭嚭1")]
+    [StringLength(1, ErrorMessage = "妫�楠岀被鍨嬮暱搴︿笉鑳借秴鍑�1")]
     public string? QsType { get; set; }
 
     /// <summary>
diff --git a/StandardInterface/MES.Service/service/QC/CqjService.cs b/StandardInterface/MES.Service/service/QC/CqjService.cs
new file mode 100644
index 0000000..4ba40f3
--- /dev/null
+++ b/StandardInterface/MES.Service/service/QC/CqjService.cs
@@ -0,0 +1,577 @@
+using System.Data;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.util;
+using SqlSugar;
+
+namespace MES.Service.service.QC;
+
+public class CqjService
+{
+    /// <summary>
+    /// 鑾峰彇瓒呮湡妫�楠屽垪琛紙鍒嗛〉锛�
+    /// </summary>
+    /// <param name="queryObj">鏌ヨ瀵硅薄</param>
+    /// <returns>鍒嗛〉鏁版嵁</returns>
+    public (List<LtsCqj> item, int TotalCount) GetPage(XJPageResult queryObj)
+    {
+        if (string.IsNullOrEmpty(queryObj.createUser)) return ([], 0);
+
+        var db = SqlSugarHelper.GetInstance();
+        var id = Convert.ToDecimal(queryObj.id);
+        int totalCount = 0;
+
+        // 鏌ヨ瓒呮湡妫�楠屽垪琛�
+        var pageList = db.Queryable<LtsCqj>()
+            .WhereIF(
+                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
+                "鏈畬鎴�".Equals(queryObj.result),
+                a => a.FcheckResu == null)
+            .WhereIF(
+                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
+                !"鏈畬鎴�".Equals(queryObj.result),
+                a => a.FcheckResu != null)
+            .WhereIF(id > 0, a => a.Id == id)
+            // 鎼滅储鏉′欢
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 1, // 鐗╂枡缂栧彿鎼滅储
+                a => a.ItemNo != null && a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 2, // 鐗╂枡鍚嶇О鎼滅储
+                a => a.ItemName != null && a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 3, // 閫佹鎵规鎼滅储
+                a => a.LotNo != null && a.LotNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 4, // 閫佹鍗曞彿鎼滅储
+                a => a.DeclarationNo != null && a.DeclarationNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 5, // 妫�楠屽崟鍙锋悳绱�
+                a => a.ReleaseNo != null && a.ReleaseNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 6, // 鐗╂枡瑙勬牸鎼滅储
+                a => a.ItemModel != null && a.ItemModel.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .Select(a => new LtsCqj
+            {
+                Id = a.Id,
+                ReleaseNo = a.ReleaseNo,
+                ItemId = a.ItemId,
+                ItemNo = a.ItemNo,
+                ItemName = a.ItemName,
+                ItemModel = a.ItemModel,
+                LotNo = a.LotNo,
+                Fsubmit = a.Fsubmit,
+                CreateDate = a.CreateDate,
+                Cjr = a.Cjr,
+                FcheckResu = a.FcheckResu,
+                LotNo1 = a.LotNo1,
+                FngDesc = a.FngDesc,
+                FbatchQty = a.FbatchQty,
+                Tjr = a.Tjr,
+                Fnumber = a.Fnumber,
+                Sjr = a.Sjr,
+                DeclarationNo = a.DeclarationNo
+            })
+            .OrderBy(a => a.CreateDate, OrderByType.Desc)
+            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
+
+        // 鎵归噺鑾峰彇妫�楠岄」鐩暟閲�
+        if (pageList.Any())
+        {
+            var releaseNos = pageList.Select(x => x.ReleaseNo).Distinct().ToList();
+            
+            foreach (var item in pageList)
+            {
+                var count = db.Queryable<MesCqItemsDetectDetail5>()
+                    .Where(x => x.ReleaseNo == item.ReleaseNo)
+                    .Count();
+                item.InspectionItemCount = count;
+            }
+        }
+
+        // 璁$畻鎬绘暟
+        int allDataQuery = db.Queryable<LtsCqj>()
+            .WhereIF(
+                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
+                "鏈畬鎴�".Equals(queryObj.result),
+                a => a.FcheckResu == null)
+            .WhereIF(
+                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
+                !"鏈畬鎴�".Equals(queryObj.result),
+                a => a.FcheckResu != null)
+            .WhereIF(id > 0, a => a.Id == id)
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 1,
+                a => a.ItemNo != null && a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 2,
+                a => a.ItemName != null && a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 3,
+                a => a.LotNo != null && a.LotNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 4,
+                a => a.DeclarationNo != null && a.DeclarationNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 5,
+                a => a.ReleaseNo != null && a.ReleaseNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && queryObj.selectedIndex == 6,
+                a => a.ItemModel != null && a.ItemModel.ToLower().Contains(queryObj.SearchValue.ToLower()))
+            .Select(a => a.ReleaseNo)
+            .Distinct()
+            .Count();
+
+        return (pageList, allDataQuery);
+    }
+
+    /// <summary>
+    /// 璋冪敤瀛樺偍杩囩▼锛岄噸鏂拌幏鍙栨楠岄」鐩�
+    /// </summary>
+    /// <param name="itemNo">鐗╂枡缂栧彿</param>
+    /// <param name="quantity">鏁伴噺</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    public string[] SetItems(decimal itemNo, decimal quantity, string releaseNo)
+    {
+        // 瀹氫箟杈撳嚭鍙傛暟
+        var outputResult = new SugarParameter("PO_RESULT", null,
+            System.Data.DbType.Int32, ParameterDirection.Output, 4000);
+
+        var outputMessage = new SugarParameter("PO_TEXT", 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_ITEM_ID", itemNo, System.Data.DbType.Decimal, ParameterDirection.Input),
+            outputResult,
+            outputMessage
+        };
+
+        var db = SqlSugarHelper.GetInstance();
+
+        // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼
+        db.Ado.ExecuteCommand(
+            "BEGIN PRC_CQ_ITEM_INSERT_BTN(:P_RELEASE_NO, :P_ITEM_ID, :PO_RESULT, :PO_TEXT); END;",
+            parameters.ToArray());
+
+        // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+        var resultValue = outputResult.Value?.ToString();
+        var messageValue = outputMessage.Value?.ToString();
+        
+        string[] msg = new string[2];
+        msg[0] = resultValue;
+        msg[1] = messageValue;
+        return msg;
+    }
+
+    /// <summary>
+    /// 鑾峰彇妫�楠岄」鐩垪琛�
+    /// </summary>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <param name="id">椤圭洰ID</param>
+    /// <returns>妫�楠岄」鐩垪琛�</returns>
+    public List<MesCqItemsDetectDetail5> GetItems(string? releaseNo, decimal? id)
+    {
+        var db = SqlSugarHelper.GetInstance();
+
+        return db.Queryable<MesCqItemsDetectDetail5, MesCqItemsDetectDetail12>(
+                (a, b) => new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
+            .Where((a, b) => a.ReleaseNo == releaseNo)
+            .GroupBy((a, b) => new
+            {
+                a.Id,
+                a.ReleaseNo,
+                a.FacLevel,
+                a.FcheckItem,
+                a.FcheckTool,
+                a.FdownAllow,
+                a.FcheckLevel,
+                a.Fstand,
+                a.FupAllow,
+                a.SampleSizeNo,
+                a.FspecRequ,
+                a.FreQty,
+                a.CheckQyt,
+                a.FcheckResu,
+                a.FcheckItemDesc,
+                a.Funit,
+                a.Meom,
+                a.FngQty,  // 娣诲姞涓嶅悎鏍兼暟
+                a.FacQty   // 娣诲姞AC鏁�
+            }).Select((a, b) => new MesCqItemsDetectDetail5
+            {
+                Id = a.Id,
+                ReleaseNo = a.ReleaseNo,
+                CheckQyt = a.CheckQyt,
+                FacLevel = a.FacLevel,
+                FcheckItem = a.FcheckItem,
+                FcheckTool = a.FcheckTool,
+                FdownAllow = a.FdownAllow,
+                FcheckLevel = a.FcheckLevel,
+                Fstand = a.Fstand,
+                FupAllow = a.FupAllow,
+                SampleSizeNo = a.SampleSizeNo,
+                FspecRequ = a.FspecRequ,
+                FreQty = a.FreQty,
+                Factory = "1000",
+                Company = "1000",
+                FenterQty = SqlFunc.AggregateCount(b.Id),  // 宸插綍鍏ユ暟閲�
+                FngQty = a.FngQty,  // 涓嶅悎鏍兼暟锛堜粠鏁版嵁搴撹鍙栵紝鐢� updateDetail5 鏇存柊锛�
+                FacQty = a.FacQty,  // AC鏁�
+                FcheckResu = a.FcheckResu,
+                FcheckItemDesc = a.FspecRequ,
+                Funit = a.Funit,
+                Meom = a.Meom
+            })
+            .OrderBy(a => SqlFunc.IIF(a.Fstand != null, 0, 1))
+            .OrderBy(a => a.FcheckItem, OrderByType.Desc)
+            .ToList();
+    }
+
+    /// <summary>
+    /// 鍒犻櫎瓒呮湡妫�楠屽崟
+    /// </summary>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int RemoveCqj(string? releaseNo)
+    {
+        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
+        {
+            var commit = 0;
+            // 鍒犻櫎涓昏〃
+            commit += db.Deleteable<MesCqItemsDetect01>()
+                .Where(s => s.ReleaseNo == releaseNo)
+                .ExecuteCommand();
+            // 鍒犻櫎瀛愯〃
+            commit += db.Deleteable<MesCqItemsDetectDetail5>()
+                .Where(s => s.ReleaseNo == releaseNo)
+                .ExecuteCommand();
+            // 鍒犻櫎瀛欒〃
+            commit += db.Deleteable<MesCqItemsDetectDetail12>()
+                .Where(s => s.ReleaseNo == releaseNo)
+                .ExecuteCommand();
+            return commit;
+        });
+
+        return withOracle;
+    }
+
+    /// <summary>
+    /// 淇濆瓨涓嶈壇鎻忚堪鍒颁富琛�
+    /// </summary>
+    /// <param name="gid">涓昏〃ID</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <param name="fngDesc">涓嶈壇鎻忚堪</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int SaveRemarksGid(decimal gid, string? releaseNo, string? fngDesc)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Updateable<MesCqItemsDetect01>()
+            .SetColumns(it => new MesCqItemsDetect01
+            {
+                FngDesc = fngDesc  // 浣跨敤FNG_DESC瀛楁瀛樺偍涓嶈壇鎻忚堪
+            })
+            .Where(it => it.Id == gid && it.ReleaseNo == releaseNo)
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 淇濆瓨澶囨敞鍒颁富琛�
+    /// </summary>
+    /// <param name="gid">涓昏〃ID</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <param name="lotNo1">澶囨敞鍐呭</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int SaveLotNo1(decimal gid, string? releaseNo, string? lotNo1)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Updateable<MesCqItemsDetect01>()
+            .SetColumns(it => new MesCqItemsDetect01
+            {
+                LotNo1 = lotNo1  // 浣跨敤LOT_NO1瀛楁瀛樺偍澶囨敞
+            })
+            .Where(it => it.Id == gid && it.ReleaseNo == releaseNo)
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 淇濆瓨涓嶈壇鎻忚堪鍒板瓙琛�
+    /// </summary>
+    /// <param name="pid">瀛愯〃ID</param>
+    /// <param name="funit">涓嶈壇鎻忚堪</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int SaveRemarksPid(decimal pid, string? funit)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Updateable<MesCqItemsDetectDetail5>()
+            .SetColumns(it => new MesCqItemsDetectDetail5
+            {
+                Funit = funit
+            })
+            .Where(it => it.Id == pid)
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 淇濆瓨澶囨敞鍒板瓙琛�
+    /// </summary>
+    /// <param name="pid">瀛愯〃ID</param>
+    /// <param name="meom">澶囨敞</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int SaveMeom(decimal pid, string? meom)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        return db.Updateable<MesCqItemsDetectDetail5>()
+            .SetColumns(it => new MesCqItemsDetectDetail5
+            {
+                Meom = meom
+            })
+            .Where(it => it.Id == pid)
+            .ExecuteCommand();
+    }
+
+    /// <summary>
+    /// 鏂板妫�楠岃鎯呰褰曪紙鎵归噺锛�
+    /// </summary>
+    /// <param name="detail">妫�楠岃鎯呭璞�</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int SetQSItemDetail(MesCqItemsDetectDetail12 detail)
+    {
+        var dbd = SqlSugarHelper.GetInstance();
+        var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
+        {
+            List<MesCqItemsDetectDetail12> result = new();
+            for (var i = 0; i < detail.count; i++)
+            {
+                var item = new MesCqItemsDetectDetail12();
+                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;
+
+        updateDetail5(detail);
+        autoResult(detail);
+
+        return oracle;
+    }
+
+    //鏇存柊妫�楠屾槑缁嗗凡妫�銆佷笉鍚堟牸鏁伴噺  
+    private int updateDetail5(MesCqItemsDetectDetail12 detail)
+    {
+        var db = SqlSugarHelper.GetInstance();
+
+        //鏌ヨ杩欎釜妫�楠岄」鐩笅鐨勬楠屾暟閲�
+        var count = db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(s => s.MainId == detail.MainId).Count();
+
+        //鑾峰彇涓嶅悎鏍兼暟
+        var countNo = db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(s => s.MainId == detail.MainId && s.Fstand == "脳").Count();
+        
+        //鏇存柊妫�楠屾槑缁嗗凡妫�鏁伴噺  
+        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
+        {
+            return db.Updateable<MesCqItemsDetectDetail5>()
+                .SetColumns(s => s.FenterQty == count)
+                .SetColumns(s => s.FngQty == countNo)
+                .Where(s => s.Id == detail.MainId)
+                .ExecuteCommand();
+        });
+
+        return withOracle;
+    }
+
+    private int autoResult(MesCqItemsDetectDetail12 detail)
+    {
+        var db = SqlSugarHelper.GetInstance();
+
+        // Single 娌℃湁鏌ヨ鍒扮粨鏋滄椂杩斿洖Null锛屽鏋滅粨鏋滃ぇ浜�1鏉′細鎶涘嚭閿欒
+        var QsItemOqcItem = db.Queryable<MesCqItemsDetectDetail5>()
+            .Single(s => s.Id == detail.MainId);
+
+        if (QsItemOqcItem == null) return 0;
+
+        //鏌ヨ杩欎釜妫�楠岄」鐩笅鐨勬楠岀粨鏋�
+        var count = db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(s => s.MainId == detail.MainId).Count();
+
+        updateDetail5(detail);
+        var result = "";
+
+        //妫�楠屽疄闄呯粨鏋滀笉绛変簬搴旇妫�楠岀殑涓暟鏃剁洿鎺ラ��鍑�
+        if (QsItemOqcItem.CheckQyt != count) return 0;
+
+        //鍚堟牸鐨勬湁澶氬皯涓�
+        var passCount = db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(s => s.MainId == detail.MainId && s.Fstand == "鈭�").Count();
+        //涓嶅悎鏍肩殑鏈夊灏戜釜
+        var noCount = db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(s => s.MainId == detail.MainId && s.Fstand == "脳").Count();
+
+        if (count == passCount)
+            result = "鍚堟牸";
+        else if (noCount >= QsItemOqcItem.FreQty)
+            result = "涓嶅悎鏍�";
+        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
+            db =>
+            {
+                var commit = 0;
+                commit += db.Updateable<MesCqItemsDetectDetail5>()
+                    .SetColumns(s => s.FcheckResu == result)
+                    .SetColumns(s => s.FenterQty == count)
+                    .Where(s => s.Id == detail.MainId)
+                    .ExecuteCommand();
+
+                return commit;
+            });
+
+        return useTransactionWithOracle;
+    }
+
+    /// <summary>
+    /// 鑾峰彇妫�楠岃鎯呰褰曞垪琛�
+    /// </summary>
+    /// <param name="id">涓绘楠岄」鐩甀D</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <returns>妫�楠岃鎯呭垪琛�</returns>
+    public List<MesCqItemsDetectDetail12> GetQSItemDetail(decimal id, string? releaseNo)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        return db.Queryable<MesCqItemsDetectDetail12>()
+            .Where(x => x.MainId == id && x.ReleaseNo == releaseNo)
+            .OrderBy(x => x.CreateDate, OrderByType.Asc)
+            .Select(x => new MesCqItemsDetectDetail12
+            {
+                Id = x.Id,
+                MainId = x.MainId,
+                ReleaseNo = x.ReleaseNo,
+                Fstand = x.Fstand,
+                FcheckResu = x.FcheckResu,
+                CreateBy = x.CreateBy,
+                CreateDate = x.CreateDate,
+                LastupdateBy = x.LastupdateBy,
+                Factory = x.Factory,
+                Company = x.Company
+                // 涓嶅寘鍚� LastupdateDate 瀛楁
+            })
+            .ToList();
+    }
+
+    /// <summary>
+    /// 鏇存柊妫�楠岃鎯呰褰�
+    /// </summary>
+    /// <param name="id">璇︽儏璁板綍ID</param>
+    /// <param name="mainId">涓绘楠岄」鐩甀D</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <param name="fstand">妫�楠屾爣鍑�</param>
+    /// <param name="fcheckResu">妫�楠岀粨鏋�</param>
+    /// <param name="updateBy">鏇存柊浜�</param>
+    /// <returns>褰卞搷琛屾暟</returns>
+    public int UpdateQSItemDetail(decimal id, decimal mainId, string? releaseNo, string? fstand, string? fcheckResu, string? updateBy)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        // 鍏堟洿鏂版楠岃鎯呰褰�
+        var updateResult = db.Updateable<MesCqItemsDetectDetail12>()
+            .SetColumns(it => new MesCqItemsDetectDetail12
+            {
+                Fstand = fstand,
+                FcheckResu = fcheckResu,
+                LastupdateBy = updateBy
+                // 涓嶈缃� LastupdateDate锛屽洜涓烘暟鎹簱涓笉瀛樺湪姝ゅ瓧娈�
+            })
+            .Where(it => it.Id == id && it.MainId == mainId && it.ReleaseNo == releaseNo)
+            .ExecuteCommand();
+
+        // 鏋勯�� detail 瀵硅薄鐢ㄤ簬璋冪敤 autoResult
+        var detail = new MesCqItemsDetectDetail12
+        {
+            Id = id,
+            MainId = mainId,
+            ReleaseNo = releaseNo,
+            Fstand = fstand,
+            FcheckResu = fcheckResu,
+            LastupdateBy = updateBy,
+            CreateBy = updateBy
+        };
+
+        // 鏇存柊宸叉鏁伴噺鍜屼笉鍚堟牸鏁伴噺锛堝湪鏇存柊璁板綍涔嬪悗鎵ц锛岀‘淇濊兘鏌ヨ鍒版渶鏂扮殑 Fstand锛�
+        updateDetail5(detail);
+        
+        // 鑷姩鍒ゅ畾妫�楠岀粨鏋�
+        autoResult(detail);
+
+        return updateResult;
+    }
+
+    /// <summary>
+    /// 妫�楠屾彁浜�
+    /// </summary>
+    /// <param name="userNo">鐢ㄦ埛璐﹀彿</param>
+    /// <param name="releaseNo">妫�楠屽崟鍙�</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    public string[] SubmitInspection(string? userNo, string? releaseNo)
+    {
+        try
+        {
+            var db = SqlSugarHelper.GetInstance();
+
+            // 鑾峰彇妫�楠屽崟淇℃伅锛堝彧鏌ヨ闇�瑕佺殑瀛楁锛岄伩鍏嶅疄浣撴槧灏勯敊璇級
+            var fngDesc = db.Queryable<MesCqItemsDetect01>()
+                .Where(x => x.ReleaseNo == releaseNo)
+                .Select(x => x.FngDesc)
+                .First();
+
+            // 妫�鏌ユ楠屽崟鏄惁瀛樺湪
+            var exists = db.Queryable<MesCqItemsDetect01>()
+                .Where(x => x.ReleaseNo == releaseNo)
+                .Any();
+
+            if (!exists)
+            {
+                return new[] { "1", "妫�楠屽崟涓嶅瓨鍦�" };
+            }
+
+            // 瀹氫箟杈撳嚭鍙傛暟
+            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("PI_FACTORY", "1000", System.Data.DbType.String, ParameterDirection.Input, 50),
+                new("PI_COMPANY", "1000", System.Data.DbType.String, ParameterDirection.Input, 50),
+                new("p_Release_No", releaseNo ?? "", System.Data.DbType.String, ParameterDirection.Input, 50),
+                new("p_badReason", "", System.Data.DbType.String, ParameterDirection.Input, 200),  // 绌哄瓧绗︿覆鑰岄潪NULL
+                new("p_iqcStatus", "", System.Data.DbType.String, ParameterDirection.Input, 200),  // 绌哄瓧绗︿覆鑰岄潪NULL
+                new("p_workShop", "", System.Data.DbType.String, ParameterDirection.Input, 200),   // 绌哄瓧绗︿覆鑰岄潪NULL
+                new("p_remark", fngDesc ?? "", System.Data.DbType.String, ParameterDirection.Input, 4000),  // 涓嶈壇鎻忚堪
+                new("p_User", userNo ?? "", System.Data.DbType.String, ParameterDirection.Input, 50),
+                outputResult,
+                outputMessage
+            };
+
+            // 璋冪敤瀛樺偍杩囩▼
+            db.Ado.ExecuteCommand(
+                "BEGIN Prc_Mes_CQJ_Qa_Submit(:PI_FACTORY, :PI_COMPANY, :p_Release_No, :p_badReason, :p_iqcStatus, :p_workShop, :p_remark, :p_User, :o_Result, :o_Msg); END;",
+                parameters.ToArray());
+
+            // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+            var resultValue = outputResult.Value?.ToString() ?? "1";
+            var messageValue = outputMessage.Value?.ToString() ?? "鎻愪氦澶辫触";
+
+            return new[] { resultValue, messageValue };
+        }
+        catch (Exception ex)
+        {
+            return new[] { "1", $"鎻愪氦寮傚父锛歿ex.Message}" };
+        }
+    }
+}
diff --git a/StandardInterface/MESApplication/Controllers/QC/CqjController.cs b/StandardInterface/MESApplication/Controllers/QC/CqjController.cs
new file mode 100644
index 0000000..2e4b4d0
--- /dev/null
+++ b/StandardInterface/MESApplication/Controllers/QC/CqjController.cs
@@ -0,0 +1,400 @@
+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;
+
+/// <summary>
+/// 瓒呮湡妫�楠屾帶鍒跺櫒
+/// </summary>
+[Route("api/[controller]")]
+[ApiController]
+public class CqjController : ControllerBase
+{
+    /// <summary>
+    /// 鑾峰彇瓒呮湡妫�楠屽垪琛紙鍒嗛〉锛�
+    /// </summary>
+    /// <param name="queryObj">鏌ヨ鍙傛暟</param>
+    /// <returns>鍒嗛〉鏁版嵁</returns>
+    [HttpPost("getPage")]
+    public ResponseResult getPage([FromBody] XJPageResult queryObj)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var (item, totalCount) = new CqjService().GetPage(queryObj);
+            resultInfos.tbBillList = item;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos,
+                TotalCount = totalCount
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 璋冪敤瀛樺偍杩囩▼锛岃幏鍙栨楠岄」鐩�
+    /// </summary>
+    /// <param name="data">鍖呭惈itemNo銆乹uantity銆乺eleaseNo</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("setJYItem")]
+    public ResponseResult setJYItem([FromBody] JObject data)
+    {
+        var itemNo = Convert.ToDecimal(data["itemNo"].ToString());
+        var quantity = Convert.ToDecimal(data["quantity"].ToString());
+        var releaseNo = data["releaseNo"].ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var result = new CqjService().SetItems(itemNo, quantity, releaseNo);
+            resultInfos.tbBillList = result;
+            
+            // 鏍规嵁瀛樺偍杩囩▼杩斿洖缁撴灉鍒ゆ柇鏄惁鎴愬姛
+            var resultCode = result[0];
+            var resultMessage = result[1];
+            
+            if (resultCode == "0")
+            {
+                return new ResponseResult
+                {
+                    status = 0,
+                    message = resultMessage,
+                    data = resultInfos
+                };
+            }
+            else
+            {
+                return new ResponseResult
+                {
+                    status = 1,
+                    message = resultMessage,
+                    data = resultInfos
+                };
+            }
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鑾峰彇妫�楠岄」鐩垪琛�
+    /// </summary>
+    /// <param name="data">鍖呭惈releaseNo銆乮d</param>
+    /// <returns>妫�楠岄」鐩垪琛�</returns>
+    [HttpPost("getJYItem")]
+    public ResponseResult getJYItem([FromBody] JObject data)
+    {
+        var id = data["id"]?.ToString();
+        var releaseNo = data["releaseNo"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().GetItems(releaseNo,
+                string.IsNullOrEmpty(id) ? null : Convert.ToDecimal(id));
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鍒犻櫎瓒呮湡妫�楠屽崟
+    /// </summary>
+    /// <param name="data">鍖呭惈releaseNo</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("removeCqj")]
+    public ResponseResult removeCqj([FromBody] JObject data)
+    {
+        var releaseNo = data["releaseNo"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().RemoveCqj(releaseNo);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 淇濆瓨涓嶈壇鎻忚堪鍒颁富琛�
+    /// </summary>
+    /// <param name="data">鍖呭惈gid銆乺eleaseNo銆乫ngDesc</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("saveRemarksGid")]
+    public ResponseResult saveRemarksGid([FromBody] JObject data)
+    {
+        var gid = Convert.ToDecimal(data["gid"].ToString());
+        var releaseNo = data["releaseNo"]?.ToString();
+        var fngDesc = data["fngDesc"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().SaveRemarksGid(gid, releaseNo, fngDesc);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 淇濆瓨澶囨敞鍒颁富琛�
+    /// </summary>
+    /// <param name="data">鍖呭惈gid銆乺eleaseNo銆乴otNo1</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("saveLotNo1")]
+    public ResponseResult saveLotNo1([FromBody] JObject data)
+    {
+        var gid = Convert.ToDecimal(data["gid"].ToString());
+        var releaseNo = data["releaseNo"]?.ToString();
+        var lotNo1 = data["lotNo1"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().SaveLotNo1(gid, releaseNo, lotNo1);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 淇濆瓨涓嶈壇鎻忚堪鍒板瓙琛�
+    /// </summary>
+    /// <param name="data">鍖呭惈pid銆乫unit</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("saveRemarksPid")]
+    public ResponseResult saveRemarksPid([FromBody] JObject data)
+    {
+        var pid = Convert.ToDecimal(data["pid"].ToString());
+        var funit = data["funit"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().SaveRemarksPid(pid, funit);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 淇濆瓨澶囨敞鍒板瓙琛�
+    /// </summary>
+    /// <param name="data">鍖呭惈pid銆乵eom</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("saveMeom")]
+    public ResponseResult saveMeom([FromBody] JObject data)
+    {
+        var pid = Convert.ToDecimal(data["pid"].ToString());
+        var meom = data["meom"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().SaveMeom(pid, meom);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鏂板/鏌ヨ妫�楠岃鎯呰褰�
+    /// </summary>
+    /// <param name="data">鍖呭惈mainId銆乺eleaseNo銆乫stand銆乫checkResu銆丩astupdateBy銆乧ount锛堟柊澧炴椂锛夋垨id銆乺eleaseNo锛堟煡璇㈡椂锛�</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("SetQSItemDetail")]
+    public ResponseResult SetQSItemDetail([FromBody] JObject data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            
+            // 鍒ゆ柇鏄柊澧炶繕鏄煡璇�
+            if (data.ContainsKey("fcheckResu") && data["fcheckResu"] != null)
+            {
+                // 鏂板鎿嶄綔 - 鎸夌収LLJ妯″紡锛屼娇鐢ㄥ璞℃帴鏀跺弬鏁�
+                var detail = new MesCqItemsDetectDetail12
+                {
+                    MainId = Convert.ToDecimal(data["mainId"].ToString()),
+                    ReleaseNo = data["releaseNo"]?.ToString(),
+                    Fstand = data["fstand"]?.ToString(),
+                    FcheckResu = data["fcheckResu"]?.ToString(),
+                    LastupdateBy = data["LastupdateBy"]?.ToString(),  // 浣跨敤LastupdateBy鑰屼笉createBy
+                    count = data.ContainsKey("count") && data["count"] != null 
+                        ? Convert.ToInt32(data["count"].ToString()) 
+                        : 1  // 榛樿涓�1
+                };
+                
+                var tbBillList = new CqjService().SetQSItemDetail(detail);
+                resultInfos.tbBillList = tbBillList;
+            }
+            else
+            {
+                // 鏌ヨ鎿嶄綔
+                var id = Convert.ToDecimal(data["id"].ToString());
+                var releaseNo = data["releaseNo"]?.ToString();
+                
+                var tbBillList = new CqjService().GetQSItemDetail(id, releaseNo);
+                resultInfos.tbBillList = tbBillList;
+            }
+            
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鏇存柊妫�楠岃鎯呰褰�
+    /// </summary>
+    /// <param name="data">鍖呭惈id銆乵ainId銆乺eleaseNo銆乫stand銆乫checkResu銆乽pdateBy</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("UpdateQSItemDetail")]
+    public ResponseResult UpdateQSItemDetail([FromBody] JObject data)
+    {
+        var id = Convert.ToDecimal(data["id"].ToString());
+        var mainId = Convert.ToDecimal(data["mainId"].ToString());
+        var releaseNo = data["releaseNo"]?.ToString();
+        var fstand = data["fstand"]?.ToString();
+        var fcheckResu = data["fcheckResu"]?.ToString();
+        var updateBy = data["updateBy"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var tbBillList = new CqjService().UpdateQSItemDetail(id, mainId, releaseNo, fstand, fcheckResu, updateBy);
+            resultInfos.tbBillList = tbBillList;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 妫�楠屾彁浜�
+    /// </summary>
+    /// <param name="data">鍖呭惈userNo銆乺eleaseNo</param>
+    /// <returns>鎵ц缁撴灉</returns>
+    [HttpPost("submitInspection")]
+    public ResponseResult submitInspection([FromBody] JObject data)
+    {
+        var userNo = data["userNo"]?.ToString();
+        var releaseNo = data["releaseNo"]?.ToString();
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var result = new CqjService().SubmitInspection(userNo, releaseNo);
+            resultInfos.tbBillList = result;
+            
+            // 鏍规嵁瀛樺偍杩囩▼杩斿洖缁撴灉鍒ゆ柇鏄惁鎴愬姛
+            var resultCode = result[0];
+            var resultMessage = result[1];
+            
+            if (resultCode == "0")
+            {
+                return new ResponseResult
+                {
+                    status = 0,
+                    message = resultMessage,
+                    data = resultInfos
+                };
+            }
+            else
+            {
+                return new ResponseResult
+                {
+                    status = 1,
+                    message = resultMessage,
+                    data = resultInfos
+                };
+            }
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 澶勭悊OPTIONS璇锋眰锛堢敤浜庤法鍩熼妫�锛�
+    /// </summary>
+    [HttpOptions("{**any}")]
+    public IActionResult HandleOptions()
+    {
+        return Ok();
+    }
+}
diff --git a/StandardInterface/MESApplication/appsettings.json b/StandardInterface/MESApplication/appsettings.json
index 28cfc2a..59a3601 100644
--- a/StandardInterface/MESApplication/appsettings.json
+++ b/StandardInterface/MESApplication/appsettings.json
@@ -10,6 +10,6 @@
   "AppSettings": {
     "TestErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfo",
     "ProductionErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfoFormal",
-    "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = hm_prd; Password=hmprd"
+    "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = test_dev; Password=hmprd"
   }
 }

--
Gitblit v1.9.3