From f5748ce6f1a30333b5707b4c1ffe18fa0a3fa87b Mon Sep 17 00:00:00 2001
From: cnf <3283105747@qq.com>
Date: 星期四, 13 十一月 2025 19:28:55 +0800
Subject: [PATCH] 委外工单合并完成

---
 DevApp/Gs.DevApp/DevFrm/QC/MesQcExceptional.cs |  201 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 162 insertions(+), 39 deletions(-)

diff --git a/DevApp/Gs.DevApp/DevFrm/QC/MesQcExceptional.cs b/DevApp/Gs.DevApp/DevFrm/QC/MesQcExceptional.cs
index ddf3ed8..603a583 100644
--- a/DevApp/Gs.DevApp/DevFrm/QC/MesQcExceptional.cs
+++ b/DevApp/Gs.DevApp/DevFrm/QC/MesQcExceptional.cs
@@ -9,22 +9,22 @@
 using System.Diagnostics;
 using System.Threading.Tasks;
 using System.Windows.Forms;
-
-
+ 
+ 
 namespace Gs.DevApp.DevFrm.QC
 {
     public partial class MesQcExceptional : DevExpress.XtraEditors.XtraForm
     {
         string _webServiceName = "MesQcExceptionalManager/";
         List<FilterEntity> _filterList = new List<FilterEntity>();
-
+ 
         public void Initialize(string param)
         {
             // 浣跨敤param杩涜鍒濆鍖栧伐浣�
             Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 0);
             getModel(param);
         }
-
+ 
         public MesQcExceptional()
         {
             InitializeComponent();
@@ -37,7 +37,7 @@
             toolBarMenu1.btnFChkClick += ToolBarMenu1_btnFChkClick;
             toolBarMenu1.btnChkClick += ToolBarMenu1_btnChkClick;
             this.toolBarMenu1.btnEscClick += ToolBarMenu1_btnEscClick;
-
+ 
             this.toolBarMenu1.getXmlConfig();
             Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx1);
             Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameter(gridView1, picCheckBox, this, "chkStatus", "", (value) =>
@@ -53,10 +53,10 @@
             }, lbGuid);
             getPageList(1);
             pageBar1.PagerEvent += PageBar1_PagerEvent;
-
+ 
             
-
-
+ 
+ 
         }
        
         private void GridView1_ColumnFilterChanged(object sender, EventArgs e)
@@ -101,7 +101,7 @@
             frm.UpdateParent += Frm_UpdateParent;
             frm.ShowDialog();
         }
-
+ 
         /// <summary>
         /// 鏌ヨ鍥炶皟
         /// </summary>
@@ -112,7 +112,7 @@
             _filterList = e.FilterList;
             getPageList(1);
         }
-
+ 
         /// <summary>
         /// 鍒锋柊浜嬩欢
         /// </summary>
@@ -205,7 +205,7 @@
                 // 鍒涘缓闇�瑕佺壒娈婂鐞嗙殑琛ㄦ牸瑙嗗浘鍒楄〃
                 List<DevExpress.XtraGrid.Views.Grid.GridView> gvList = new List<DevExpress.XtraGrid.Views.Grid.GridView>();
                 gvList.Add(gvMx1); // 娣诲姞鏄庣粏琛ㄨ鍥�1
-
+ 
                 // 鍚敤缂栬緫妯″紡涓嬬殑鎵�鏈夋帶浠�
                 // 鍙傛暟璇存槑锛�
                 // - this.layoutMx1.Controls锛氳鍚敤鐨勬帶浠跺鍣�
@@ -216,7 +216,7 @@
             
             }
         }
-
+ 
         /// <summary>
         /// 淇濆瓨 -鎸夐挳鐐瑰嚮浜嬩欢 澶勭悊寮傚父鍗曟槑缁嗙殑淇濆瓨閫昏緫
         /// </summary>
@@ -245,22 +245,26 @@
             // 4. 鏀堕泦鏄庣粏鏁版嵁
             for (var i = 0; i < gvMx1.DataRowCount; i++)
             {
-
+ 
                 var row = gvMx1.GetDataRow(i);
                 if (row != null)
                 {
                     // 鑾峰彇褰撳墠鏄庣粏琛岀殑GUID
                     Guid? _guid = UtilityHelper.ToGuid(row["guid"].ToString());
                     // 娣诲姞鏄庣粏椤瑰埌璇锋眰瀵硅薄
+                    // 璇存槑锛�
+                    // 鈶� 鏃ч�昏緫浣跨敤 row["process"].ToString()锛屽悗鍙板彧瑕佹妸鍒楀悕鏀规垚 processName/gs003 鎴栧瓨鍦ㄥぇ灏忓啓宸紓锛屽氨浼氭姏鍑� 鈥淐olumn 'process' does not belong to table鈥� 寮傚父锛�
+                    // 鈶� GetRowString 浼氬湪 DataTable 涓寜涓嶅尯鍒嗗ぇ灏忓啓鐨勬柟寮忛�愪釜鍖归厤鍊欓�夊垪鍚嶏紝骞舵妸 DBNull/null 缁熶竴杞崲涓虹┖瀛楃涓诧紝鍏煎涓嶅悓鎺ュ彛涓庡巻鍙叉暟鎹紱
+                    // 鈶� 瀛楁鍒楄〃鎻愪緵澶氫釜鍊欓�夊�硷紙process/processName/processDesc/processWay/gs003锛夛紝纭繚鍚庣瀛楁鍛藉悕璋冩暣鏃朵粛鑳芥垚鍔熶繚瀛樸��
                     _obj.list.Add(new
                     {
                         Guid = _guid,
-                        BatchQty = (row["batchQty"].ToString()),       // 鎵规鏁伴噺
-                        GfRkqty = (row["gfRkqty"].ToString()),         // 鍚堟牸鍏ュ簱鏁伴噺
-                        LfRkqtyz = (row["lfRkqty"].ToString()),        // 涓嶅悎鏍煎叆搴撴暟閲�
-                        HandResult = (row["handResult"].ToString()),        // 閫夊埆绫诲瀷
-                        ChooseType = (row["chooseType"].ToString()),        // 澶勭悊鎰忚
-                        Process = (row["process"].ToString()),        // 閫�鏂欐柟寮�
+                        BatchQty = GetRowString(row, "batchQty"),       // 鎵规鏁伴噺
+                        //GfRkqty = GetRowString(row, "gfRkqty"),         // 鍚堟牸鍏ュ簱鏁�
+                        //LfRkqtyz = GetRowString(row, "lfRkqty"),        // 涓存斁鍏ュ簱鏁�
+                        HandResult = GetRowString(row, "handResult"),        // 閫夊埆鎰忚
+                        ChooseType = GetRowString(row, "chooseType"),        // 寮傚父绫诲埆
+                        Process = GetRowString(row, "process"),        // 閫�鏂欐柟寮�
 
                     });
                 }
@@ -291,7 +295,7 @@
                     getModel(lbGuid.Text.Trim());
                     // 鍒锋柊鍒楄〃椤垫暟鎹�
                     getPageList(this.pageBar1.CurrentPage); 
-
+ 
                     // 璺宠浆鍒版煡鐪嬬粨鏋滈〉闈�
                     Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 6);
                 }
@@ -301,8 +305,8 @@
                 ToolBox.MsgHelper.Warning("鎻愮ず锛�" + ex.Message);
             }
         }
-
-
+ 
+ 
         /// <summary>
         /// 
         /// </summary>
@@ -358,15 +362,15 @@
         {
             // 瀹氫箟鍙橀噺鏍囪褰撳墠鏄惁涓虹紪杈戠姸鎬侊紙榛樿闈炵紪杈戠姸鎬侊級
             bool isEdit = false;
-
+ 
             // 鑻ュ綋鍓嶅伐鍏锋爮鎿嶄綔鏄�"鏂板"锛坅dd锛夛紝鏃犻渶鍔犺浇宸叉湁鏁版嵁锛岀洿鎺ヨ繑鍥�
             // 鍘熷洜锛氭柊澧炵姸鎬佷笅搴旀樉绀虹┖鐧借〃鍗曪紝鑰岄潪鍔犺浇鍘嗗彶鏁版嵁
             if (toolBarMenu1.currentAction == "add") return;
-
+ 
             // 鑻ュ綋鍓嶅伐鍏锋爮鎿嶄綔鏄�"缂栬緫"锛坋dit锛夛紝灏嗙紪杈戠姸鎬佹爣璁颁负true
             // 鍚庣画鐣岄潰鎺т欢鐨勫彲缂栬緫鎬у皢鍩轰簬姝ゅ彉閲忓垽鏂�
             if (toolBarMenu1.currentAction == "edit") isEdit = true;
-
+ 
             // 鏍¢獙鍙傛暟锛氳嫢鏈紶鍏ユ湁鏁堢殑GUID锛堢敤鎴锋湭閫夋嫨浠讳綍琛岋級锛屾彁绀虹敤鎴峰苟缁堟鎵ц
             if (string.IsNullOrEmpty(strGuid))
             {
@@ -374,14 +378,14 @@
                 MsgHelper.Warning("璇峰厛閫夋嫨浣犺鎿嶄綔鐨勮锛�");
                 return;
             }
-
+ 
             // 鏋勫缓璇锋眰鍙傛暟瀵硅薄锛氫互鍖垮悕绫诲舰寮忓皝瑁呰鏌ヨ鐨勫疄浣撲富閿紙GUID锛�
             // 璇ュ弬鏁板皢鐢ㄤ簬鍚戞湇鍔$璇锋眰瀵瑰簲鐨勫疄浣撴暟鎹�
             var _obj = new
             {
                 guid = strGuid,// 涓婚敭瀛楁锛屾湇鍔$閫氳繃姝ゅ�煎畾浣嶅叿浣撹褰�
             };
-
+ 
             try
             {
                 // 璋冪敤HTTP宸ュ叿绫诲彂閫丳OST璇锋眰锛岃幏鍙栨湇鍔$杩斿洖鐨凧SON鏁版嵁
@@ -390,25 +394,25 @@
                 //   绗簩涓弬鏁帮細鎺ュ彛璺緞锛堢粨鍚坃webServiceName鍓嶇紑锛屽畬鏁磋矾寰勪负"MesQcExceptionalManager/GetModel"锛�
                 //   绗笁涓弬鏁帮細灏嗘煡璇㈠弬鏁板簭鍒楀寲涓篔SON瀛楃涓�
                 string strJson = UtilityHelper.HttpPost("", _webServiceName + "GetModel", JsonConvert.SerializeObject(_obj));
-
+ 
                 // 灏嗘湇鍔$杩斿洖鐨凧SON瀛楃涓茶浆鎹负閫氱敤杩斿洖妯″瀷锛圧eturnModel锛�
                 // ReturnModel鍖呭惈鐘舵�佺爜锛坮tnCode锛夈�佹秷鎭紙rtnMsg锛夈�佹暟鎹紙rtnData锛変笁涓牳蹇冨瓧娈�
                 ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson);
-
+ 
                 // 妫�鏌ユ湇鍔$杩斿洖鐘舵�侊細rtnCode > 0 琛ㄧず璇锋眰鎴愬姛锛堜笟鍔″眰闈㈢殑鎴愬姛锛�
                 if (_rtn.rtnCode > 0)
                 {
                     // 鎻愬彇杩斿洖鏁版嵁涓殑瀹炰綋璇︽儏锛坉ynamic绫诲瀷鍙姩鎬佽闂瓧娈碉紝鏃犻渶棰勫厛瀹氫箟瀹炰綋绫伙級
                     dynamic dy = _rtn.rtnData;
-
+ 
                     // 鍦ㄧ晫闈㈢殑lbGuid鏍囩涓婃樉绀哄綋鍓嶅疄浣撶殑GUID锛堢敤浜庢爣璇嗗綋鍓嶆搷浣滅殑璁板綍锛�
                     lbGuid.Text = strGuid;
-
+ 
                     // 鍒涘缓缃戞牸瑙嗗浘鍒楄〃锛屽寘鍚渶瑕佸鐞嗙殑鏄庣粏缃戞牸瑙嗗浘gvMx1
                     // 鍚庣画灏嗛�氳繃宸ュ叿鏂规硶缁熶竴璁剧疆杩欎簺缃戞牸鐨勫睘鎬э紙濡傚彲缂栬緫鎬э級
                     List<DevExpress.XtraGrid.Views.Grid.GridView> gvList = new List<DevExpress.XtraGrid.Views.Grid.GridView>();
                     gvList.Add(gvMx1);
-
+ 
                     // 璋冪敤宸ュ叿鏂规硶鎵归噺璁剧疆鐣岄潰鎺т欢鐨勫�煎拰鍙紪杈戠姸鎬�
                     // 鍙傛暟璇存槑锛�
                     //   this.layoutMx1.Controls锛氬竷灞�瀹瑰櫒涓殑鎵�鏈夋帶浠讹紙鏂囨湰妗嗐�佷笅鎷夋绛夛級
@@ -416,8 +420,8 @@
                     //   isEdit锛氭槸鍚︿负缂栬緫鐘舵�侊紙鎺у埗鎺т欢鏄惁鍙紪杈戯級
                     //   gvList锛氶渶瑕佸悓姝ヨ缃殑缃戞牸瑙嗗浘鍒楄〃
                     UtilityHelper.SetValueByObj(this.layoutMx1.Controls, dy, isEdit, gvList);
-
-
+ 
+ 
                     // 瑙f瀽鏈嶅姟绔繑鍥炵殑JSON锛屾彁鍙栨槑缁嗘暟鎹垪琛紙瀛樺偍鍦╮tnData涓嬬殑list瀛楁涓級
                     // 浣跨敤JObject瑙f瀽JSON锛屼究浜庢彁鍙栧祵濂楃粨鏋勭殑鏁版嵁
                     JObject _job = JObject.Parse(strJson);
@@ -427,10 +431,11 @@
                     {
                         array.Add(a);
                     }
-
+ 
                     // 灏嗘槑缁嗘暟鎹殑JSON鏁扮粍杞崲涓篋ataTable锛堥�傚悎浣滀负缃戞牸鎺т欢鐨勬暟鎹簮锛�
                     DataTable dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
-
+                    EnsureProcessColumn(dt);
+ 
                     // 鑻ユ槑缁嗘暟鎹瓨鍦紙DataTable琛屾暟>0锛�
                     if (dt.Rows.Count > 0)
                     {
@@ -463,6 +468,124 @@
                 // 鏄剧ず寮傚父淇℃伅锛屼究浜庤皟璇曞拰鐢ㄦ埛鍙嶉
                 ToolBox.MsgHelper.Warning("鎻愮ず锛�" + ex.Message);
             }
+        }
+        /// <summary>
+        /// 缁熶竴灏佽 DataRow 瀛楁璇诲彇閫昏緫锛氭寜鐓у�欓�夊垪鍚嶅垪琛ㄤ緷娆℃煡鎵剧湡瀹炲垪锛屽拷鐣ュぇ灏忓啓骞惰閬� DBNull銆�
+        /// </summary>
+        /// <param name="row">褰撳墠寰幆鍒扮殑 DataRow锛岃嫢涓� null 鐩存帴杩斿洖绌哄瓧绗︿覆銆�</param>
+        /// <param name="columnCandidates">鎸変紭鍏堢骇鎺掑垪鐨勫�欓�夊垪鍚嶉泦鍚堬紙渚嬪 process/processName/gs003锛夈��</param>
+        /// <returns>鍖归厤鍒扮殑鍒楀�硷紱鑻ユ墍鏈夊�欓�夊垪鍧囦笉瀛樺湪鎴栧�间负 DBNull锛屽垯杩斿洖 string.Empty銆�</returns>
+        /// <remarks>
+        /// MesQcExceptional 鐨勪繚瀛樺姩浣滀緷璧栬鏂规硶锛屼互鍏煎鍚庣鎺ュ彛瀛楁鏀瑰悕鎴栧ぇ灏忓啓宸紓锛岄伩鍏嶅啀娆″嚭鐜� 鈥淐olumn 'process' does not belong to table鈥� 寮傚父銆�
+        /// </remarks>
+        private static string GetRowString(DataRow row, params string[] columnCandidates)
+        {
+            if (row == null || row.Table == null || columnCandidates == null)
+                return string.Empty;
+
+            foreach (var candidate in columnCandidates)
+            {
+                if (string.IsNullOrEmpty(candidate))
+                    continue;
+                var match = FindMatchingColumn(row.Table, candidate);
+                if (!string.IsNullOrEmpty(match))
+                    return NormalizeValue(row[match]);
+            }
+
+            return string.Empty;
+        }
+
+        private static string FindMatchingColumn(DataTable table, string columnName)
+        {
+            if (table == null || string.IsNullOrEmpty(columnName))
+                return null;
+
+            foreach (DataColumn column in table.Columns)
+            {
+                if (string.Equals(column.ColumnName, columnName, StringComparison.OrdinalIgnoreCase))
+                    return column.ColumnName;
+            }
+
+            return null;
+        }
+
+        private static string FindFirstAvailableColumn(DataTable table, params string[] candidates)
+        {
+            if (table == null || candidates == null)
+                return null;
+
+            foreach (var candidate in candidates)
+            {
+                var match = FindMatchingColumn(table, candidate);
+                if (!string.IsNullOrEmpty(match))
+                    return match;
+            }
+
+            return null;
+        }
+
+        private static bool HasColumnExact(DataTable table, string columnName)
+        {
+            if (table == null || string.IsNullOrEmpty(columnName))
+                return false;
+
+            foreach (DataColumn column in table.Columns)
+            {
+                if (string.Equals(column.ColumnName, columnName, StringComparison.Ordinal))
+                    return true;
+            }
+
+            return false;
+        }
+
+        private static void CopyColumn(DataTable table, string sourceColumnName, string targetColumnName)
+        {
+            if (table == null || string.IsNullOrEmpty(sourceColumnName) || string.IsNullOrEmpty(targetColumnName))
+                return;
+
+            if (!HasColumnExact(table, targetColumnName))
+                table.Columns.Add(targetColumnName, typeof(string));
+
+            foreach (DataRow row in table.Rows)
+            {
+                row[targetColumnName] = NormalizeValue(row[sourceColumnName]);
+            }
+        }
+
+        /// <summary>
+        /// 鍦ㄧ粦瀹� gvMx1 鏄庣粏鍓嶇‘淇� DataTable 涓瓨鍦ㄥ悕涓� process 鐨勫垪锛�
+        /// 1. 浼樺厛澶嶇敤涓嶅尯鍒嗗ぇ灏忓啓鍖归厤鍒扮殑鍚屽悕鍒楋紝淇濊瘉 GridColumn23 鐨勭粦瀹氫笉鍙楀奖鍝嶏紱
+        /// 2. 鑻ユ棤鍚屽悕鍒楋紝鍒欏皾璇曚娇鐢ㄥ父瑙佸埆鍚嶏紙processName/processDesc/processWay/gs003锛夊鍒剁敓鎴愶紱
+        /// 3. 鑻ヤ粛鏃犳硶瀹氫綅鏈夋晥鍒楋紝鍒欏垱寤虹┖鐨� process 鍒楋紝閬垮厤鍓嶇璁块棶鏃舵姏鍑哄垪涓嶅瓨鍦ㄥ紓甯搞��
+        /// </summary>
+        /// <param name="table">鎺ュ彛杩斿洖鐨勬槑缁� DataTable銆�</param>
+        private static void EnsureProcessColumn(DataTable table)
+        {
+            if (table == null)
+                return;
+
+            var existing = FindMatchingColumn(table, "process");
+            if (!string.IsNullOrEmpty(existing))
+            {
+                if (!HasColumnExact(table, "process"))
+                    CopyColumn(table, existing, "process");
+                return;
+            }
+
+            var fallback = FindFirstAvailableColumn(table, "processName", "processDesc", "processWay", "gs003");
+            if (string.IsNullOrEmpty(fallback))
+            {
+                if (!HasColumnExact(table, "process"))
+                    table.Columns.Add("process", typeof(string));
+                return;
+            }
+
+            CopyColumn(table, fallback, "process");
+        }
+
+        private static string NormalizeValue(object value)
+        {
+            return value == null || value == DBNull.Value ? string.Empty : value.ToString();
         }
         /// <summary>
         /// 宸ュ叿鏉′簨浠�
@@ -523,7 +646,7 @@
                 var strJson = UtilityHelper.HttpPost("",  _webServiceName + "EditModelSubmit", JsonConvert.SerializeObject(_obj));
                 var _rtn = UtilityHelper.ReturnToDynamic(strJson);
                 MsgHelper.Warning(_rtn.rtnData.outMsg.ToString());
-
+ 
                 if (_rtn.rtnCode > 0 && _rtn.rtnData.outSum * 1 > 0)
                 {
                     if (xtraTabControl1.SelectedTabPageIndex == 1)
@@ -540,8 +663,8 @@
                 MsgHelper.Warning("鎻愮ず锛�" + ex.Message);
             }
         }
-
+ 
          
-
+ 
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3