From dabfdd9dbf0364b1134daaad86af7e13f6437295 Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期四, 30 十月 2025 12:40:30 +0800
Subject: [PATCH] XJ,SJ,RKJ检验项目序号,LLJ单个检验项目FTP附件信息

---
 StandardInterface/MES.Service/Modes/QsItemOqcItem.cs              |    7 
 StandardInterface/MES.Service/service/QC/RKJService.cs            |   42 ++-
 StandardInterface/MES.Service/Dto/service/SJPageResult.cs         |   12 +
 StandardInterface/MES.Service/Modes/QsQaItemXj01.cs               |    7 
 StandardInterface/MES.Service/service/QC/SJService.cs             |  199 +++++++++++++++------
 StandardInterface/MESApplication/appsettings.json                 |    2 
 StandardInterface/MES.Service/Dto/service/XJPageResult.cs         |   10 +
 StandardInterface/MES.Service/service/QC/BaseService.cs           |   77 ++++++++
 StandardInterface/MES.Service/service/QC/LljService.cs            |   41 +++
 StandardInterface/MES.Service/service/QC/XJService.cs             |   22 ++
 StandardInterface/MESApplication/Controllers/QC/BaseController.cs |   48 +++++
 StandardInterface/MES.Service/Modes/QsItemIpiItem.cs              |    7 
 StandardInterface/MESApplication/Controllers/QC/LljController.cs  |   21 +
 13 files changed, 402 insertions(+), 93 deletions(-)

diff --git a/StandardInterface/MES.Service/Dto/service/SJPageResult.cs b/StandardInterface/MES.Service/Dto/service/SJPageResult.cs
index b872b61..a033419 100644
--- a/StandardInterface/MES.Service/Dto/service/SJPageResult.cs
+++ b/StandardInterface/MES.Service/Dto/service/SJPageResult.cs
@@ -114,4 +114,16 @@
     public string? searchField { get; set; }  // 鎼滅储瀛楁鍚�
     [SugarColumn(IsIgnore = true)]
     public string? SearchValue { get; set; }  // 鎼滅储鍊�
+    
+    /// <summary>
+    /// 杞﹂棿ID锛岀敤浜嶲C绛涢��
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? departmentId { get; set; }
+    
+    /// <summary>
+    /// 绾夸綋ID锛岀敤浜嶲C绛涢��
+    /// </summary>
+    [SugarColumn(IsIgnore = true)]
+    public string? lineId { get; set; }
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Dto/service/XJPageResult.cs b/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
index 9b5bd7a..5823aae 100644
--- a/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
+++ b/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
@@ -25,5 +25,15 @@
     /// 鎼滅储瀛楁鍚嶏紝鐢ㄤ簬鎸囧畾鎼滅储鍝釜瀛楁
     /// </summary>
     public string? searchField { get; set; }
+    
+    /// <summary>
+    /// 杞﹂棿ID锛岀敤浜嶲C绛涢��
+    /// </summary>
+    public string? departmentId { get; set; }
+    
+    /// <summary>
+    /// 绾夸綋ID锛岀敤浜嶲C绛涢��
+    /// </summary>
+    public string? lineId { get; set; }
 
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Modes/QsItemIpiItem.cs b/StandardInterface/MES.Service/Modes/QsItemIpiItem.cs
index 047cd21..9ccaefb 100644
--- a/StandardInterface/MES.Service/Modes/QsItemIpiItem.cs
+++ b/StandardInterface/MES.Service/Modes/QsItemIpiItem.cs
@@ -184,6 +184,13 @@
     [Column("SNUM")]
     [SugarColumn(ColumnName = "SNUM")]
     public decimal? Snum { get; set; }
+    
+    /// <summary>
+    ///     椤哄簭
+    /// </summary>
+    [Column("FORDER")]
+    [SugarColumn(ColumnName = "FORDER")]
+    public decimal? Forder { get; set; }
 
     /// <summary>
     ///     绌村彿淇℃伅锛堢敤浜庡墠绔樉绀猴級
diff --git a/StandardInterface/MES.Service/Modes/QsItemOqcItem.cs b/StandardInterface/MES.Service/Modes/QsItemOqcItem.cs
index 574410f..2e8253d 100644
--- a/StandardInterface/MES.Service/Modes/QsItemOqcItem.cs
+++ b/StandardInterface/MES.Service/Modes/QsItemOqcItem.cs
@@ -185,4 +185,11 @@
     /// </summary>
     [SugarColumn(IsIgnore = true)]
     public string? ItemNo { get; set; }
+    
+    /// <summary>
+    ///     椤哄簭
+    /// </summary>
+    [Column("FORDER")]
+    [SugarColumn(ColumnName = "FORDER")]
+    public decimal? Forder { get; set; }
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Modes/QsQaItemXj01.cs b/StandardInterface/MES.Service/Modes/QsQaItemXj01.cs
index ca55436..5a3f411 100644
--- a/StandardInterface/MES.Service/Modes/QsQaItemXj01.cs
+++ b/StandardInterface/MES.Service/Modes/QsQaItemXj01.cs
@@ -168,4 +168,11 @@
     /// </summary>
     [SugarColumn(IsIgnore = true)]
     public string? ItemNo { get; set; }
+    
+    /// <summary>
+    ///     椤哄簭
+    /// </summary>
+    [Column("FORDER")]
+    [SugarColumn(ColumnName = "FORDER")]
+    public decimal? Forder { get; set; }
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/service/QC/BaseService.cs b/StandardInterface/MES.Service/service/QC/BaseService.cs
index a827168..87bc106 100644
--- a/StandardInterface/MES.Service/service/QC/BaseService.cs
+++ b/StandardInterface/MES.Service/service/QC/BaseService.cs
@@ -49,4 +49,81 @@
         });
         return mesQsImages;
     }
+
+    /// <summary>
+    /// 鑾峰彇QC杞﹂棿鍒楄〃锛堟牴鎹鍥� V_MES_QC_CJ锛�
+    /// </summary>
+    /// <returns>杞﹂棿鍒楄〃</returns>
+    public List<dynamic> GetQCDepartments()
+    {
+        var db = SqlSugarHelper.GetInstance();
+        var sql = @"
+            SELECT
+                T.DEPARTMENTNAME as departmentname,
+                T.DEPARTMENTID as departmentid
+            FROM SYS_DEPARTMENT T
+            WHERE T.DEPARTMENTID IN (
+                2951904,2951874,2973564,3131720,3252567,3306857,3335722,2306534,2670262,
+                2365021,2365022,2749927,2306535,2558979,2558980,2558981,2558982,1606194,
+                1608020,1608021,1606193,1608022,1638037,1682634,1802281,1802278,1802279,
+                1802280,1999190,1999191,2272979,2513368,2513369,2513370,2513371,2558971,
+                2558972,2558973,2558974,2558975,2558976,2558977,2749970,2749946,2749947,
+                2749948,2670253,2670258,2670260,2513372,2513373,2513374,2513375,2513376,
+                2670261,139517,139518,139519,209814,211639,221640,378794,440720,441918,
+                441919,502188,507542,507545,507546,139524
+            )
+            ORDER BY T.DEPARTMENTNAME";
+        
+        return db.Ado.SqlQuery<dynamic>(sql);
+    }
+
+    /// <summary>
+    /// 鑾峰彇QC绾夸綋鍒楄〃锛堟牴鎹溅闂碔D绛涢�夛紝鍩轰簬瑙嗗浘 V_MES_QC_XT锛�
+    /// </summary>
+    /// <param name="departmentId">杞﹂棿ID锛屽鏋滀负绌哄垯杩斿洖鎵�鏈塓C绾夸綋</param>
+    /// <returns>绾夸綋鍒楄〃</returns>
+    public List<MesLine> GetQCLines(string? departmentId)
+    {
+        var db = SqlSugarHelper.GetInstance();
+        
+        if (string.IsNullOrEmpty(departmentId))
+        {
+            // 濡傛灉娌℃湁鎸囧畾杞﹂棿锛岃繑鍥炴墍鏈塓C绾夸綋
+            var sql = @"
+                SELECT E.LINE_NO as LineNo, E.LINE_NAME as LineName, E.DEPOT_ID as DepotId
+                FROM MES_LINE E
+                LEFT JOIN (
+                    SELECT T.DEPARTMENTID
+                    FROM SYS_DEPARTMENT T
+                    WHERE T.DEPARTMENTID IN (
+                        2951904,2951874,2973564,3131720,3252567,3306857,3335722,2306534,2670262,
+                        2365021,2365022,2749927,2306535,2558979,2558980,2558981,2558982,1606194,
+                        1608020,1608021,1606193,1608022,1638037,1682634,1802281,1802278,1802279,
+                        1802280,1999190,1999191,2272979,2513368,2513369,2513370,2513371,2558971,
+                        2558972,2558973,2558974,2558975,2558976,2558977,2749970,2749946,2749947,
+                        2749948,2670253,2670258,2670260,2513372,2513373,2513374,2513375,2513376,
+                        2670261,139517,139518,139519,209814,211639,221640,378794,440720,441918,
+                        441919,502188,507542,507545,507546,139524
+                    )
+                ) C ON C.DEPARTMENTID = E.DEPOT_ID
+                WHERE C.DEPARTMENTID IS NOT NULL
+                ORDER BY E.LINE_NO DESC";
+            
+            return db.Ado.SqlQuery<MesLine>(sql);
+        }
+        else
+        {
+            // 濡傛灉鎸囧畾浜嗚溅闂达紝鍙繑鍥炶杞﹂棿涓嬬殑绾夸綋
+            return db.Queryable<MesLine>()
+                .Where(e => e.DepotId.ToString() == departmentId)
+                .OrderBy(e => e.LineNo, SqlSugar.OrderByType.Desc)
+                .Select(e => new MesLine
+                {
+                    LineNo = e.LineNo,
+                    LineName = e.LineName,
+                    DepotId = e.DepotId
+                })
+                .ToList();
+        }
+    }
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/service/QC/LljService.cs b/StandardInterface/MES.Service/service/QC/LljService.cs
index 6f77e61..71d481a 100644
--- a/StandardInterface/MES.Service/service/QC/LljService.cs
+++ b/StandardInterface/MES.Service/service/QC/LljService.cs
@@ -89,7 +89,9 @@
                     // 娣诲姞璇勫鐘舵��
                     PSZT = a.PSZT,
                     // 娣诲姞妫�楠岄」鐩淮鎶ょ姸鎬�
-                    Jyxm = a.Jyxm
+                    Jyxm = a.Jyxm,
+                    // 娣诲姞鐗堟湰鍙凤紙鐢ㄤ簬FTP璺緞锛�
+                    Fversion = a.Fversion
                 })
                 .OrderBy("IQC_DATE DESC")
                 .OrderBy("CASE WHEN EMERGENCY = 1 THEN 0 ELSE 1 END")
@@ -164,7 +166,9 @@
                     // 娣诲姞璇勫鐘舵��
                     PSZT = a.PSZT,
                     // 娣诲姞妫�楠岄」鐩淮鎶ょ姸鎬�
-                    Jyxm = a.Jyxm
+                    Jyxm = a.Jyxm,
+                    // 娣诲姞鐗堟湰鍙凤紙鐢ㄤ簬FTP璺緞锛�
+                    Fversion = a.Fversion
                 })
                 .OrderBy("IQC_DATE DESC")
                 .OrderBy("CASE WHEN EMERGENCY = 1 THEN 0 ELSE 1 END")
@@ -504,7 +508,13 @@
         return input.Substring(startIndex + 1, length);
     }
 
-    public List<QamftpDto> GetAttachments(string ItemNo)
+    /// <summary>
+    /// 鑾峰彇闄勪欢淇℃伅
+    /// </summary>
+    /// <param name="ItemNo">鐗╂枡缂栫爜</param>
+    /// <param name="fversion">鐗堟湰鍙凤紙鍙�夛紝鐢ㄤ簬杩囨护锛�</param>
+    /// <returns>闄勪欢鍒楄〃</returns>
+    public List<QamftpDto> GetAttachments(string ItemNo, string fversion = null)
     {
         //if (string.IsNullOrEmpty(ItemNo))
         //{
@@ -514,8 +524,17 @@
         var db = SqlSugarHelper.GetInstance();
         try
         {
-            return db.Queryable<MesQamftp>()
+            var query = db.Queryable<MesQamftp>()
                 .Where(x => x.ItemNo == ItemNo)
+                .Where(x => x.Ftype == "鏉ユ枡妫�");  // 娣诲姞FTYPE = '鏉ユ枡妫�'鐨勯檺鍒�
+            
+            // 濡傛灉浼犲叆浜唂version锛屽垯鎸塅version杩囨护
+            if (!string.IsNullOrEmpty(fversion))
+            {
+                query = query.Where(x => x.Fversion == fversion);
+            }
+            
+            return query
                 .OrderBy(x => x.Fdate, OrderByType.Desc)
                 // .ThenBy(x => x.CreateDate, OrderByType.Desc)
                 .Select(x => new QamftpDto
@@ -543,7 +562,7 @@
         }
     }
 
-    public byte[] GetFtpFile(string itemNo, string fileName, string ftpServer)
+    public byte[] GetFtpFile(string itemNo, string fileName, string ftpServer, string fversion = null)
     {
         // 鍙傛暟楠岃瘉
         if (string.IsNullOrEmpty(itemNo) || string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(ftpServer))
@@ -557,8 +576,16 @@
         // 鏍囧噯鍖朏TP鏈嶅姟鍣ㄥ湴鍧�
         string normalizedServer = NormalizeFtpServer(ftpServer);
         
-        // 鏋勫缓FTP鏂囦欢璺緞
-        string ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fileName}";
+        // 鏋勫缓FTP鏂囦欢璺緞 - 鏉ユ枡妫�浣跨敤IQC鐩綍锛屼娇鐢╢version浣滀负瀛愮洰褰�
+        string ftpPath;
+        if (!string.IsNullOrEmpty(fversion))
+        {
+            ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fversion}/{fileName}";
+        }
+        else
+        {
+            ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fileName}";
+        }
         
         try
         {
diff --git a/StandardInterface/MES.Service/service/QC/RKJService.cs b/StandardInterface/MES.Service/service/QC/RKJService.cs
index 83a7b51..e3c8ff7 100644
--- a/StandardInterface/MES.Service/service/QC/RKJService.cs
+++ b/StandardInterface/MES.Service/service/QC/RKJService.cs
@@ -291,7 +291,8 @@
                 a.FcheckLevel,
                 a.FacLevel,
                 a.QsCode,
-                a.QsName
+                a.QsName,
+                a.Forder
             }).Select((a, b) => new QsItemOqcItem
             {
                 ProjName = a.ProjName,
@@ -308,10 +309,11 @@
                 FacLevel = a.FacLevel,
                 QsCode = a.QsCode,
                 QsName = a.QsName,
+                Forder = a.Forder,
                 isCheck = SqlFunc.AggregateCount(b.Id),
                 Result = SqlFunc.AggregateCount(b.Id) == 0 ? "鏈畬鎴�" :
                          a.IsPass == 1 ? "鍚堟牸" : "涓嶅悎鏍�"
-            }).OrderBy("result desc").ToList();
+            }).OrderBy("FORDER").ToList();
     }
 
     public dynamic save(RKJDto rkjDto)
@@ -610,49 +612,55 @@
 
 
         return db
-            .Queryable<QsItemOqcReq, Womdaa, MesItems>((a, da, b) =>
+            .Queryable<QsItemOqcReq, Womdaa, MesItems, MesLine>((a, da, b, m) =>
                 new JoinQueryInfos(
                     JoinType.Left, da.Daa001 == a.BillNo,
-                    JoinType.Left, a.ItemId == b.Id
+                    JoinType.Left, a.ItemId == b.Id,
+                    JoinType.Left, da.Daa015 == m.LineNo
                 ))
             .WhereIF(lineNo != null && lineNo.Length > 0,
-                (a, da, b) => lineNo.Contains(da.Daa015))
+                (a, da, b, m) => lineNo.Contains(da.Daa015))
+            // 娣诲姞QC绛涢�夋潯浠讹細杞﹂棿鍜岀嚎浣�
+            .WhereIF(!string.IsNullOrEmpty(queryObj.departmentId),
+                (a, da, b, m) => m.DepotId.ToString() == queryObj.departmentId)
+            .WhereIF(!string.IsNullOrEmpty(queryObj.lineId),
+                (a, da, b, m) => m.LineNo == queryObj.lineId)
             .WhereIF(
                 StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                 "鏈畬鎴�".Equals(queryObj.result),
-                (a, da, b) => a.FcheckResu == null || a.FcheckResu == "")
+                (a, da, b, m) => a.FcheckResu == null || a.FcheckResu == "")
             .WhereIF(
                 StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                 !"鏈畬鎴�".Equals(queryObj.result),
-                (a, da, b) => a.FcheckResu != null && a.FcheckResu != "")
-            .WhereIF(id > 0, (a, da, b) => a.Id == id)
+                (a, da, b, m) => a.FcheckResu != null && a.FcheckResu != "")
+            .WhereIF(id > 0, (a, da, b, m) => a.Id == id)
             // 娣诲姞fsubmit瀛楁杩囨护閫昏緫 - 鍙湁鍦ㄦ槑纭寚瀹歠submit鍙傛暟鏃舵墠杩囨护锛屼笖娌℃湁浼犻�抜d鏃舵墠杩囨护
             .WhereIF(
                 id <= 0 && StringUtil.IsNotNullOrEmpty(queryObj.fsubmit) && queryObj.fsubmit == "1",
-                (a, da, b) => a.Fsubmit == 1)
+                (a, da, b, m) => a.Fsubmit == 1)
             .WhereIF(
                 id <= 0 && StringUtil.IsNotNullOrEmpty(queryObj.fsubmit) && queryObj.fsubmit == "0",
-                (a, da, b) => a.Fsubmit == 0 || a.Fsubmit == null)
+                (a, da, b, m) => a.Fsubmit == 0 || a.Fsubmit == null)
             // 娣诲姞鎼滅储鏉′欢 - 鏍规嵁閫夋嫨鐨勬悳绱㈠瓧娈佃繘琛岀簿纭悳绱�
             .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "billNo",  // 宸ュ崟
-                (a, da, b) => a.BillNo.Contains(queryObj.SearchValue))
+                (a, da, b, m) => a.BillNo.Contains(queryObj.SearchValue))
             .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "releaseNo",  // 妫�楠屽崟鍙�
-                (a, da, b) => a.ReleaseNo.Contains(queryObj.SearchValue))
+                (a, da, b, m) => a.ReleaseNo.Contains(queryObj.SearchValue))
             .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "daa015",  // 浜х嚎
-                (a, da, b) => da.Daa015.Contains(queryObj.SearchValue))
+                (a, da, b, m) => da.Daa015.Contains(queryObj.SearchValue))
             .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "itemNo",  // 鐗╂枡缂栫爜
-                (a, da, b) => a.ItemNo.Contains(queryObj.SearchValue))
+                (a, da, b, m) => a.ItemNo.Contains(queryObj.SearchValue))
             .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "itemName",  // 鐗╂枡鍚嶇О
-                (a, da, b) => b.ItemName.Contains(queryObj.SearchValue))
+                (a, da, b, m) => b.ItemName.Contains(queryObj.SearchValue))
             // 涓轰簡鍏煎鏃х増鏈紝濡傛灉娌℃湁浼犻�� searchField锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
             .WhereIF(string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue),
-                (a, da, b) => 
+                (a, da, b, m) => 
                     a.ItemNo.Contains(queryObj.SearchValue) ||
                     b.ItemName.Contains(queryObj.SearchValue) ||
                     a.BillNo.Contains(queryObj.SearchValue) ||
                     a.ReleaseNo.Contains(queryObj.SearchValue) ||
                     da.Daa015.Contains(queryObj.SearchValue))
-            .Select((a, da, b) => new QsItemOqcReq
+            .Select((a, da, b, m) => new QsItemOqcReq
             {
                 Id = a.Id,
                 ReleaseNo = a.ReleaseNo,
diff --git a/StandardInterface/MES.Service/service/QC/SJService.cs b/StandardInterface/MES.Service/service/QC/SJService.cs
index aa32e8c..fc8c81e 100644
--- a/StandardInterface/MES.Service/service/QC/SJService.cs
+++ b/StandardInterface/MES.Service/service/QC/SJService.cs
@@ -44,69 +44,145 @@
         if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
             lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
 
-        var query = db.Queryable<SJPageResult>()
-            .WhereIF(lineNo != null && lineNo.Length > 0,
-                a => lineNo.Contains(a.line))
-            .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id)
-            .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
-                a => a.BillNo == queryObj.BillNo)
-            .WhereIF(
-                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
-                "鏈畬鎴�".Equals(queryObj.Result),
-                a => a.Fsubmit == 0)
-            .WhereIF(
-                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
-                !"鏈畬鎴�".Equals(queryObj.Result),
-                a => a.Fsubmit == 1);
-
-        // 鏂板鐨勫姩鎬佹悳绱㈤�昏緫
-        if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField))
+        // 濡傛灉鏈夎溅闂存垨绾夸綋绛涢�夛紝闇�瑕佽仈鎺� MES_LINE 琛�
+        if (!string.IsNullOrEmpty(queryObj.departmentId) || !string.IsNullOrEmpty(queryObj.lineId))
         {
-            switch (queryObj.searchField)
+            var query = db.Queryable<SJPageResult, MesLine>((a, m) => 
+                    new JoinQueryInfos(JoinType.Left, a.line == m.LineNo))
+                .WhereIF(lineNo != null && lineNo.Length > 0,
+                    (a, m) => lineNo.Contains(a.line))
+                .WhereIF(queryObj.Id != null, (a, m) => a.Id == queryObj.Id)
+                .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
+                    (a, m) => a.BillNo == queryObj.BillNo)
+                .WhereIF(
+                    StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
+                    "鏈畬鎴�".Equals(queryObj.Result),
+                    (a, m) => a.Fsubmit == 0)
+                .WhereIF(
+                    StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
+                    !"鏈畬鎴�".Equals(queryObj.Result),
+                    (a, m) => a.Fsubmit == 1)
+                // 娣诲姞杞﹂棿绛涢��
+                .WhereIF(!string.IsNullOrEmpty(queryObj.departmentId),
+                    (a, m) => m.DepotId.ToString() == queryObj.departmentId)
+                // 娣诲姞绾夸綋绛涢��
+                .WhereIF(!string.IsNullOrEmpty(queryObj.lineId),
+                    (a, m) => m.LineNo == queryObj.lineId);
+
+            // 娣诲姞鎼滅储鏉′欢
+            if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField))
             {
-                case "daa001":  // 宸ュ崟
-                    query = query.Where(x => x.daa001.Contains(queryObj.SearchValue));
-                    break;
-                case "billNo":  // 妫�楠屽崟鍙�
-                    query = query.Where(x => x.BillNo.Contains(queryObj.SearchValue));
-                    break;
-                case "line":    // 浜х嚎
-                    query = query.Where(x => x.line.Contains(queryObj.SearchValue));
-                    break;
-                case "itemNo":  // 鐗╂枡缂栫爜
-                    query = query.Where(x => x.ItemNo.Contains(queryObj.SearchValue));
-                    break;
-                case "daa003":  // 鐗╂枡鍚嶇О
-                    query = query.Where(x => x.Daa003.Contains(queryObj.SearchValue));
-                    break;
-                default:
-                    // 濡傛灉娌℃湁鎸囧畾瀛楁鎴栧瓧娈典笉鍖归厤锛屼娇鐢ㄥ師鏈夌殑妯$硦鏌ヨ閫昏緫浣滀负鍏滃簳鏂规
-                    query = query.Where(x => 
-                        x.ItemNo.Contains(queryObj.SearchValue) ||
-                        x.Daa003.Contains(queryObj.SearchValue) ||
-                        x.daa001.Contains(queryObj.SearchValue) ||
-                        x.BillNo.Contains(queryObj.SearchValue) ||
-                        x.line.Contains(queryObj.SearchValue));
-                    break;
+                switch (queryObj.searchField)
+                {
+                    case "daa001":  // 宸ュ崟
+                        query = query.Where((a, m) => a.daa001.Contains(queryObj.SearchValue));
+                        break;
+                    case "billNo":  // 妫�楠屽崟鍙�
+                        query = query.Where((a, m) => a.BillNo.Contains(queryObj.SearchValue));
+                        break;
+                    case "line":    // 浜х嚎
+                        query = query.Where((a, m) => a.line.Contains(queryObj.SearchValue));
+                        break;
+                    case "itemNo":  // 鐗╂枡缂栫爜
+                        query = query.Where((a, m) => a.ItemNo.Contains(queryObj.SearchValue));
+                        break;
+                    case "daa003":  // 鐗╂枡鍚嶇О
+                        query = query.Where((a, m) => a.Daa003.Contains(queryObj.SearchValue));
+                        break;
+                    default:
+                        query = query.Where((a, m) => 
+                            a.ItemNo.Contains(queryObj.SearchValue) ||
+                            a.Daa003.Contains(queryObj.SearchValue) ||
+                            a.daa001.Contains(queryObj.SearchValue) ||
+                            a.BillNo.Contains(queryObj.SearchValue) ||
+                            a.line.Contains(queryObj.SearchValue));
+                        break;
+                }
             }
+            else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue))
+            {
+                query = query.Where((a, m) => 
+                    a.ItemNo.Contains(queryObj.SearchValue) ||
+                    a.Daa003.Contains(queryObj.SearchValue) ||
+                    a.daa001.Contains(queryObj.SearchValue) ||
+                    a.BillNo.Contains(queryObj.SearchValue) ||
+                    a.line.Contains(queryObj.SearchValue));
+            }
+
+            var totalCount = 0;
+            var data = query.OrderBy((a, m) => a.BillNo, OrderByType.Desc)
+                .Select((a, m) => a)
+                .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
+
+            return (data, totalCount);
         }
-        // 涓轰簡鍏煎鏃х増鏈紝濡傛灉娌℃湁浼犻�� searchField锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
-        else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue))
+        else
         {
-            // 淇濇寔鍘熸湁鐨勫瀛楁妯$硦鏌ヨ閫昏緫
-            query = query.Where(x => 
-                x.ItemNo.Contains(queryObj.SearchValue) ||
-                x.Daa003.Contains(queryObj.SearchValue) ||
-                x.daa001.Contains(queryObj.SearchValue) ||
-                x.BillNo.Contains(queryObj.SearchValue) ||
-                x.line.Contains(queryObj.SearchValue));
+            // 娌℃湁杞﹂棿鍜岀嚎浣撶瓫閫夋椂锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
+            var query = db.Queryable<SJPageResult>()
+                .WhereIF(lineNo != null && lineNo.Length > 0,
+                    a => lineNo.Contains(a.line))
+                .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id)
+                .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
+                    a => a.BillNo == queryObj.BillNo)
+                .WhereIF(
+                    StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
+                    "鏈畬鎴�".Equals(queryObj.Result),
+                    a => a.Fsubmit == 0)
+                .WhereIF(
+                    StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
+                    !"鏈畬鎴�".Equals(queryObj.Result),
+                    a => a.Fsubmit == 1);
+
+            // 鏂板鐨勫姩鎬佹悳绱㈤�昏緫
+            if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField))
+            {
+                switch (queryObj.searchField)
+                {
+                    case "daa001":  // 宸ュ崟
+                        query = query.Where(x => x.daa001.Contains(queryObj.SearchValue));
+                        break;
+                    case "billNo":  // 妫�楠屽崟鍙�
+                        query = query.Where(x => x.BillNo.Contains(queryObj.SearchValue));
+                        break;
+                    case "line":    // 浜х嚎
+                        query = query.Where(x => x.line.Contains(queryObj.SearchValue));
+                        break;
+                    case "itemNo":  // 鐗╂枡缂栫爜
+                        query = query.Where(x => x.ItemNo.Contains(queryObj.SearchValue));
+                        break;
+                    case "daa003":  // 鐗╂枡鍚嶇О
+                        query = query.Where(x => x.Daa003.Contains(queryObj.SearchValue));
+                        break;
+                    default:
+                        // 濡傛灉娌℃湁鎸囧畾瀛楁鎴栧瓧娈典笉鍖归厤锛屼娇鐢ㄥ師鏈夌殑妯$硦鏌ヨ閫昏緫浣滀负鍏滃簳鏂规
+                        query = query.Where(x => 
+                            x.ItemNo.Contains(queryObj.SearchValue) ||
+                            x.Daa003.Contains(queryObj.SearchValue) ||
+                            x.daa001.Contains(queryObj.SearchValue) ||
+                            x.BillNo.Contains(queryObj.SearchValue) ||
+                            x.line.Contains(queryObj.SearchValue));
+                        break;
+                }
+            }
+            // 涓轰簡鍏煎鏃х増鏈紝濡傛灉娌℃湁浼犻�� searchField锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
+            else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue))
+            {
+                // 淇濇寔鍘熸湁鐨勫瀛楁妯$硦鏌ヨ閫昏緫
+                query = query.Where(x => 
+                    x.ItemNo.Contains(queryObj.SearchValue) ||
+                    x.Daa003.Contains(queryObj.SearchValue) ||
+                    x.daa001.Contains(queryObj.SearchValue) ||
+                    x.BillNo.Contains(queryObj.SearchValue) ||
+                    x.line.Contains(queryObj.SearchValue));
+            }
+
+            var totalCount = 0;
+            var data = query.OrderBy(a => a.BillNo, OrderByType.Desc)
+                .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
+
+            return (data, totalCount);
         }
-
-        var totalCount = 0;
-        var data = query.OrderBy(a => a.BillNo, OrderByType.Desc)
-            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
-
-        return (data, totalCount);
     }
 
 
@@ -208,7 +284,8 @@
                 Mnum = b.Mnum,  // 浠庝富琛ㄨ幏鍙朚NUM
                 Dnum = b.Dnum,  // 浠庡瓙琛ㄨ幏鍙朌NUM
                 Snum = a.Snum,  // 閫佹鎵规暟
-                Remarks = a.Remarks
+                Remarks = a.Remarks,
+                Forder = a.Forder  // 椤哄簭瀛楁
             }).ToList();
 
         var array = qsItemIpiItems.Select(s => s.Id).ToArray();
@@ -300,8 +377,10 @@
                 qsItemIpiItem.imageData = Convert.ToBase64String(s.Picture);
             });
 
-        //鎺掑簭锛屾湭瀹屾垚鐨勬帓鍦ㄥ墠闈�
-        qsItemIpiItems = qsItemIpiItems.OrderBy(s => s.isCheck).ToList();
+        //鎺掑簭锛氬彧鎸塅ORDER椤哄簭鎺掑簭
+        qsItemIpiItems = qsItemIpiItems
+            .OrderBy(s => s.Forder ?? 0)
+            .ToList();
 
         // 涓烘瘡涓楠岄」鐩敓鎴愮┐鍙蜂俊鎭�
         qsItemIpiItems.ForEach(item =>
diff --git a/StandardInterface/MES.Service/service/QC/XJService.cs b/StandardInterface/MES.Service/service/QC/XJService.cs
index df2f739..210860e 100644
--- a/StandardInterface/MES.Service/service/QC/XJService.cs
+++ b/StandardInterface/MES.Service/service/QC/XJService.cs
@@ -153,10 +153,23 @@
                 )
             );
             
-        // 娣诲姞绾夸綋绛涢�夋潯浠�
+        // 娣诲姞绾夸綋绛涢�夋潯浠讹紙鍩轰簬鐢ㄦ埛鏉冮檺锛�
         if (lineNo != null && lineNo.Length > 0)
         {
             query = query.Where((s, a, c, b) => lineNo.Contains(c.LineNo));
+        }
+        
+        // 娣诲姞QC绛涢�夋潯浠讹細杞﹂棿鍜岀嚎浣�
+        if (!string.IsNullOrEmpty(queryObj.departmentId))
+        {
+            // 濡傛灉鎸囧畾浜嗚溅闂达紝绛涢�夎杞﹂棿涓嬬殑绾夸綋
+            query = query.Where((s, a, c, b) => c.DepotId.ToString() == queryObj.departmentId);
+        }
+        
+        if (!string.IsNullOrEmpty(queryObj.lineId))
+        {
+            // 濡傛灉鎸囧畾浜嗙嚎浣擄紝鐩存帴绛涢�夌嚎浣�
+            query = query.Where((s, a, c, b) => c.LineNo == queryObj.lineId);
         }
         
         // 娣诲姞鐘舵�佺瓫閫夋潯浠� - 鏄庣‘鍖归厤鍓嶇浼犻�掔殑鍊�
@@ -287,6 +300,7 @@
         var qsQaItemXj01s = db.Queryable<QsQaItemXj01>()
             .WhereIF(pid > 0, a => a.Pid == pid)
             .WhereIF(id > 0, a => a.Id == id)
+            .OrderBy(a => a.Forder ?? 0)
             .ToList();
 
         var array = qsQaItemXj01s.Select(s => s.Id).ToArray();
@@ -323,8 +337,10 @@
                 s.imageData = Convert.ToBase64String(s.Picture);
         });
 
-        //鎺掑簭锛屾湭瀹屾垚鐨勬帓鍦ㄥ墠闈�
-        qsQaItemXj01s = qsQaItemXj01s.OrderBy(s => s.isCheck).ToList();
+        //鎺掑簭锛氬彧鎸塅ORDER椤哄簭鎺掑簭
+        qsQaItemXj01s = qsQaItemXj01s
+            .OrderBy(s => s.Forder ?? 0)
+            .ToList();
 
         return qsQaItemXj01s;
     }
diff --git a/StandardInterface/MESApplication/Controllers/QC/BaseController.cs b/StandardInterface/MESApplication/Controllers/QC/BaseController.cs
index dd54e7f..2a22c56 100644
--- a/StandardInterface/MESApplication/Controllers/QC/BaseController.cs
+++ b/StandardInterface/MESApplication/Controllers/QC/BaseController.cs
@@ -81,4 +81,52 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+
+    /// <summary>
+    /// 鑾峰彇QC杞﹂棿鍒楄〃
+    /// </summary>
+    /// <returns>杞﹂棿鍒楄〃</returns>
+    [HttpPost("GetQCDepartments")]
+    public ResponseResult GetQCDepartments()
+    {
+        try
+        {
+            var departments = new BaseService().GetQCDepartments();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = departments
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鑾峰彇QC绾夸綋鍒楄〃锛堟牴鎹溅闂碔D绛涢�夛級
+    /// </summary>
+    /// <param name="data">鍖呭惈 departmentId 鐨勮姹傛暟鎹�</param>
+    /// <returns>绾夸綋鍒楄〃</returns>
+    [HttpPost("GetQCLines")]
+    public ResponseResult GetQCLines([FromBody] JObject data)
+    {
+        try
+        {
+            string? departmentId = data["departmentId"]?.ToString();
+            var lines = new BaseService().GetQCLines(departmentId);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = lines
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
 }
\ No newline at end of file
diff --git a/StandardInterface/MESApplication/Controllers/QC/LljController.cs b/StandardInterface/MESApplication/Controllers/QC/LljController.cs
index eb626a0..6c6bea7 100644
--- a/StandardInterface/MESApplication/Controllers/QC/LljController.cs
+++ b/StandardInterface/MESApplication/Controllers/QC/LljController.cs
@@ -366,10 +366,21 @@
     public ResponseResult GetAttachments([FromBody] JObject data)
     {
         var itemNo = data["itemNo"]?.ToString();
+        var fversion = data["fversion"]?.ToString();
+        var fromPage = data["fromPage"]?.ToString();
+        
+        // 鏍规嵁鏉ユ簮椤甸潰鍐冲畾鏄惁杩囨护
+        string filterFversion = null;
+        if (fromPage == "Detail" && !string.IsNullOrEmpty(fversion))
+        {
+            filterFversion = fversion;  // Detail椤甸潰闇�瑕佽繃婊�
+        }
+        // Add椤甸潰涓嶄紶閫抐ilterFversion锛屾樉绀烘墍鏈夐檮浠�
+        
         try
         {
             dynamic resultInfos = new System.Dynamic.ExpandoObject();
-            var tbBillList = new LljService().GetAttachments(itemNo);
+            var tbBillList = new LljService().GetAttachments(itemNo, filterFversion);
             if (tbBillList == null || tbBillList.Count == 0)
             {
                 return new ResponseResult
@@ -394,7 +405,7 @@
     }
 
     [HttpGet("PreviewFtpFile")]
-    public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
+    public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer, [FromQuery] string fversion = null)
     {
         try
         {
@@ -405,7 +416,7 @@
             Response.Headers.Add("Access-Control-Expose-Headers", "Content-Type, Content-Length");
             
             var service = new LljService();
-            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer);
+            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer, fversion);
             
             if (fileBytes == null || fileBytes.Length == 0)
             {
@@ -424,7 +435,7 @@
     }
 
     [HttpGet("DownloadFtpFile")]
-    public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
+    public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer, [FromQuery] string fversion = null)
     {
         try
         {
@@ -435,7 +446,7 @@
             Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition, Content-Length, Content-Type");
             
             var service = new LljService();
-            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer);
+            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer, fversion);
             
             if (fileBytes == null || fileBytes.Length == 0)
             {
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