From e6a18a1229e11f468a9109cad9c2abb71054527e Mon Sep 17 00:00:00 2001
From: zrg <z1873@LAPTOP-EAVL132E>
Date: 星期三, 26 八月 2026 17:50:12 +0800
Subject: [PATCH] 1

---
 Gy_BarcodePrint/Gy_BarcodePrint.cs |  238 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 148 insertions(+), 90 deletions(-)

diff --git a/Gy_BarcodePrint/Gy_BarcodePrint.cs b/Gy_BarcodePrint/Gy_BarcodePrint.cs
index 11f9062..9102812 100644
--- a/Gy_BarcodePrint/Gy_BarcodePrint.cs
+++ b/Gy_BarcodePrint/Gy_BarcodePrint.cs
@@ -25,7 +25,8 @@
         private const int COL_QTY = 4;        
         private const int COL_ISPRINTED = 5;   
         private const int COL_PRINTDATE = 6;  
-        private const int COL_PRINTERNAME = 7; 
+        private const int COL_PRINTERNAME = 7;
+        private const int COL_REMARK = 8;      // 鏂板锛氬唴澶栫鏍囪瘑
 
         // 鎶ヨ〃鐩稿叧
         private GridppReport Report;
@@ -60,7 +61,7 @@
 
             // 鍒濆鐘舵�侊細鎸夐挳绂佺敤锛屽畾鏃跺櫒鏈惎鍔�
             btnToggleAutoPrint.Enabled = false;
-            timer1.Interval = 60000;
+            timer1.Interval = 30000;
             timer1.Stop();
         }
 
@@ -306,13 +307,6 @@
                         return;
                     }
 
-                    string templateName = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "./Config/PWD.config", "PrintTemplate");
-                    if (string.IsNullOrEmpty(templateName) || templateName == "undefined")
-                    {
-                        LogService.Write("鑷姩鎵撳嵃: 鏈厤缃墦鍗版ā鏉匡紝璺宠繃");
-                        return;
-                    }
-
                     string safeAlias = alias.Replace("'", "''");
 
                     string sql = $@"
@@ -322,103 +316,136 @@
                             a.HQty AS 鏁伴噺,
                             a.HIsPrintSuccess AS 鏄惁鎵撳嵃鎴愬姛,
                             a.HLastPrintDate AS 鎵撳嵃鏃堕棿,
+                            a.HRemark AS 鍐呭绠�,
                             a.HPrintName AS 鎵撳嵃鏈哄悕绉�
                         FROM Gy_BarCodeBill_Split a
                         INNER JOIN Gy_Material b ON a.HMaterID = b.HItemID
                         WHERE a.HIsPrintSuccess = 0 AND ISNULL(a.HPrintName,'') = '{safeAlias}'
                         ORDER BY a.HItemId";
 
-                    DataSet ds = oCn.RunProcReturn(sql, "AutoPrintQuery");
+                    DataSet ds = oCn.RunProcReturn(sql, "Gy_BarCodeBill_Split");
                     if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
                         return;
 
-                    List<string> barcodeList = new List<string>();
-                    List<int> idList = new List<int>();
+                    // 鏀堕泦鎵�鏈夊緟鎵撳嵃鏉$爜淇℃伅
+                    List<Tuple<int, string, string>> items = new List<Tuple<int, string, string>>();
                     foreach (DataRow dr in ds.Tables[0].Rows)
                     {
                         string barcode = dr["鏉$爜缂栧彿"].ToString().Trim();
                         if (string.IsNullOrEmpty(barcode)) continue;
-                        barcodeList.Add(barcode.Replace("'", "''"));
-                        idList.Add(Convert.ToInt32(dr["id"]));
+                        int id = Convert.ToInt32(dr["id"]);
+                        string remark = dr["鍐呭绠�"]?.ToString() ?? "";
+                        items.Add(Tuple.Create(id, barcode, remark));
                     }
 
-                    if (barcodeList.Count == 0) return;
+                    if (items.Count == 0) return;
 
-                    string inClause = string.Join(",", barcodeList.Select(b => "'" + b + "'"));
-                    string viewSql = $@"
-                        SELECT 
-                            鏉$爜缂栧彿,
-                            鐗╂枡浠g爜,
-                            鐗╂枡鍚嶇О,
-                            瑙勬牸鍨嬪彿,
-                            鎵瑰彿,
-                            鏁伴噺,
-                            渚涘簲鍟�,
-                            缁勬墭鍗曞彿,
-                            鐢熶骇鏃ユ湡,
-                            婧愬崟鍗曞彿
-                        FROM h_v_IF_BarCodeBillList_Split
-                        WHERE 鏉$爜缂栧彿 IN ({inClause})";
+                    // 鎸夌被鍨嬶紙鍐呭绠憋級鍒嗙粍
+                    var groups = items.GroupBy(x => x.Item3);
+                    int totalPrinted = 0;
 
-                    DataSet dsView = oCn.RunProcReturn(viewSql, "AutoPrintView");
-                    if (dsView == null || dsView.Tables.Count == 0 || dsView.Tables[0].Rows.Count == 0)
-                        return;
-
-                    DataTable dtPrint = new DataTable();
-                    dtPrint.Columns.Add("鏉$爜缂栧彿", typeof(string));
-                    dtPrint.Columns.Add("鐗╂枡浠g爜", typeof(string));
-                    dtPrint.Columns.Add("鐗╂枡鍚嶇О", typeof(string));
-                    dtPrint.Columns.Add("瑙勬牸鍨嬪彿", typeof(string));
-                    dtPrint.Columns.Add("鎵瑰彿", typeof(string));
-                    dtPrint.Columns.Add("鏁伴噺", typeof(string));
-                    dtPrint.Columns.Add("渚涘簲鍟�", typeof(string));
-                    dtPrint.Columns.Add("缁勬墭鍗曞彿", typeof(string));
-                    dtPrint.Columns.Add("鐢熶骇鏃ユ湡", typeof(string));
-                    dtPrint.Columns.Add("婧愬崟鍗曞彿", typeof(string));
-
-                    foreach (DataRow dr in dsView.Tables[0].Rows)
+                    foreach (var group in groups)
                     {
-                        DataRow newRow = dtPrint.NewRow();
-                        newRow["鏉$爜缂栧彿"] = dr["鏉$爜缂栧彿"].ToString();
-                        newRow["鐗╂枡浠g爜"] = dr["鐗╂枡浠g爜"].ToString();
-                        newRow["鐗╂枡鍚嶇О"] = dr["鐗╂枡鍚嶇О"].ToString();
-                        newRow["瑙勬牸鍨嬪彿"] = dr["瑙勬牸鍨嬪彿"].ToString();
-                        newRow["鎵瑰彿"] = dr["鎵瑰彿"].ToString();
-                        object qty = dr["鏁伴噺"];
-                        newRow["鏁伴噺"] = qty == DBNull.Value ? "0" : Convert.ToDecimal(qty).ToString("0");
-                        newRow["渚涘簲鍟�"] = dr["渚涘簲鍟�"].ToString();
-                        newRow["缁勬墭鍗曞彿"] = dr["缁勬墭鍗曞彿"].ToString();
-                        object prodDate = dr["鐢熶骇鏃ユ湡"];
-                        newRow["鐢熶骇鏃ユ湡"] = prodDate == DBNull.Value ? "" : Convert.ToDateTime(prodDate).ToString("yyyy-MM-dd");
-                        newRow["婧愬崟鍗曞彿"] = dr["婧愬崟鍗曞彿"].ToString();
-                        dtPrint.Rows.Add(newRow);
+                        string remark = group.Key;
+                        string templateName = GetTemplateNameByRemark(remark);
+                        if (string.IsNullOrEmpty(templateName) || templateName == "undefined")
+                        {
+                            LogService.Write($"鑷姩鎵撳嵃: 鏈壘鍒扮被鍨嬧�渰remark}鈥濆搴旂殑妯℃澘锛岃烦杩囪缁�");
+                            continue;
+                        }
+
+                        // 鏋勫缓璇ョ粍鐨勬潯鐮佸垪琛ㄥ拰ID鍒楄〃
+                        List<string> barcodeList = group.Select(x => x.Item2.Replace("'", "''")).ToList();
+                        List<int> idList = group.Select(x => x.Item1).ToList();
+
+                        string inClause = string.Join(",", barcodeList.Select(b => "'" + b + "'"));
+
+                        // 鏌ヨ瑙嗗浘鏁版嵁
+                        string viewSql = $@"
+                                SELECT 
+                                    鏉$爜缂栧彿,
+                                    鐗╂枡浠g爜,
+                                    鐗╂枡鍚嶇О,
+                                    瑙勬牸鍨嬪彿,
+                                    鎵瑰彿,
+                                    鏁伴噺,
+                                    渚涘簲鍟�,
+                                    缁勬墭鍗曞彿,
+                                    鐢熶骇鏃ユ湡,
+                                    婧愬崟鍗曞彿
+                                FROM h_v_IF_BarCodeBillList_Split
+                                WHERE 鏉$爜缂栧彿 IN ({inClause})";
+
+                        DataSet dsView = oCn.RunProcReturn(viewSql, "h_v_IF_BarCodeBillList_Split");
+                        if (dsView == null || dsView.Tables.Count == 0 || dsView.Tables[0].Rows.Count == 0)
+                        {
+                            LogService.Write($"鑷姩鎵撳嵃: 绫诲瀷鈥渰remark}鈥濈殑鏉$爜璇︽儏鏌ヨ鏃犵粨鏋滐紝璺宠繃");
+                            continue;
+                        }
+
+                        // 鏋勫缓鎵撳嵃鏁版嵁琛�
+                        DataTable dtPrint = new DataTable();
+                        dtPrint.Columns.Add("鏉$爜缂栧彿", typeof(string));
+                        dtPrint.Columns.Add("鐗╂枡浠g爜", typeof(string));
+                        dtPrint.Columns.Add("鐗╂枡鍚嶇О", typeof(string));
+                        dtPrint.Columns.Add("瑙勬牸鍨嬪彿", typeof(string));
+                        dtPrint.Columns.Add("鎵瑰彿", typeof(string));
+                        dtPrint.Columns.Add("鏁伴噺", typeof(string));
+                        dtPrint.Columns.Add("渚涘簲鍟�", typeof(string));
+                        dtPrint.Columns.Add("缁勬墭鍗曞彿", typeof(string));
+                        dtPrint.Columns.Add("鐢熶骇鏃ユ湡", typeof(string));
+                        dtPrint.Columns.Add("婧愬崟鍗曞彿", typeof(string));
+
+                        foreach (DataRow dr in dsView.Tables[0].Rows)
+                        {
+                            DataRow newRow = dtPrint.NewRow();
+                            newRow["鏉$爜缂栧彿"] = dr["鏉$爜缂栧彿"].ToString();
+                            newRow["鐗╂枡浠g爜"] = dr["鐗╂枡浠g爜"].ToString();
+                            newRow["鐗╂枡鍚嶇О"] = dr["鐗╂枡鍚嶇О"].ToString();
+                            newRow["瑙勬牸鍨嬪彿"] = dr["瑙勬牸鍨嬪彿"].ToString();
+                            newRow["鎵瑰彿"] = dr["鎵瑰彿"].ToString();
+                            object qty = dr["鏁伴噺"];
+                            newRow["鏁伴噺"] = qty == DBNull.Value ? "0" : Convert.ToDecimal(qty).ToString("0");
+                            newRow["渚涘簲鍟�"] = dr["渚涘簲鍟�"].ToString();
+                            newRow["缁勬墭鍗曞彿"] = dr["缁勬墭鍗曞彿"].ToString();
+                            object prodDate = dr["鐢熶骇鏃ユ湡"];
+                            newRow["鐢熶骇鏃ユ湡"] = prodDate == DBNull.Value ? "" : Convert.ToDateTime(prodDate).ToString("yyyy-MM-dd");
+                            newRow["婧愬崟鍗曞彿"] = dr["婧愬崟鍗曞彿"].ToString();
+                            dtPrint.Rows.Add(newRow);
+                        }
+
+                        // 鍒涘缓涓存椂DataGridView锛堝惈鍏ㄩ�夊垪锛�
+                        DataGridView tempGrid = new DataGridView();
+                        tempGrid.DataSource = dtPrint;
+                        DataGridViewCheckBoxColumn selectCol = new DataGridViewCheckBoxColumn();
+                        selectCol.HeaderText = "閫夋嫨";
+                        selectCol.Name = "閫夋嫨";
+                        tempGrid.Columns.Insert(0, selectCol);
+                        foreach (DataGridViewRow row in tempGrid.Rows)
+                        {
+                            row.Cells["閫夋嫨"].Value = true;
+                        }
+
+                        // 璁剧疆鎶ヨ〃骞舵墦鍗�
+                        Sub_SetReport(templateName, tempGrid);
+                        Report.Printer.PrinterName = txtPrinter.Text.Trim();
+                        Report.Print(false);
+
+                        // 鏇存柊璇ョ粍鏉$爜鐘舵�佷负宸叉墦鍗�
+                        if (idList.Count > 0)
+                        {
+                            string ids = string.Join(",", idList);
+                            string updateSql = $@"UPDATE Gy_BarCodeBill_Split SET HIsPrintSuccess = 1, HLastPrintDate = GETDATE() WHERE HItemId IN ({ids})";
+                            oCn.RunProc(updateSql);
+                        }
+
+                        totalPrinted += barcodeList.Count;
+                        LogService.Write($"鑷姩鎵撳嵃: 绫诲瀷鈥渰remark}鈥濇墦鍗板畬鎴愶紝鍏� {barcodeList.Count} 涓潯鐮併��");
                     }
 
-                    DataGridView tempGrid = new DataGridView();
-                    tempGrid.DataSource = dtPrint;
-                    DataGridViewCheckBoxColumn selectCol = new DataGridViewCheckBoxColumn();
-                    selectCol.HeaderText = "閫夋嫨";
-                    selectCol.Name = "閫夋嫨";
-                    tempGrid.Columns.Insert(0, selectCol);
-                    foreach (DataGridViewRow row in tempGrid.Rows)
-                    {
-                        row.Cells["閫夋嫨"].Value = true;
-                    }
-
-                    Sub_SetReport(templateName, tempGrid);
-                    Report.Printer.PrinterName = txtPrinter.Text.Trim();
-                    //Report.PrintPreview(true);  // 寮瑰嚭棰勮绐楀彛
-                    Report.Print(false);
-
-                    if (idList.Count > 0)
-                    {
-                        string ids = string.Join(",", idList);
-                        string updateSql = $@"UPDATE Gy_BarCodeBill_Split SET HIsPrintSuccess = 1, HLastPrintDate = GETDATE() WHERE HItemId IN ({ids})";
-                        oCn.RunProc(updateSql);
-                    }
-
+                    // 鍒锋柊鐣岄潰鏁版嵁
                     LoadData();
-                    LogService.Write($"鑷姩鎵撳嵃瀹屾垚锛屽叡鎵撳嵃 {barcodeList.Count} 涓潯鐮併��");
+                    LogService.Write($"鑷姩鎵撳嵃鍏ㄩ儴瀹屾垚锛屾�昏鎵撳嵃 {totalPrinted} 涓潯鐮併��");
                 }));
             }
             catch (Exception ex)
@@ -451,7 +478,7 @@
         #region 琛ㄦ牸鍒濆鍖�
         private void InitGrids()
         {
-            grdUnprinted.ColumnCount = 8;
+            grdUnprinted.ColumnCount = 9;
             grdUnprinted.Columns[COL_ID].HeaderText = "ID";
             grdUnprinted.Columns[COL_ID].Visible = false;
             grdUnprinted.Columns[COL_BARCODE].HeaderText = "鏉$爜缂栧彿";
@@ -468,13 +495,15 @@
             grdUnprinted.Columns[COL_PRINTDATE].Width = 150;
             grdUnprinted.Columns[COL_PRINTERNAME].HeaderText = "鎵撳嵃鏈哄悕绉�";
             grdUnprinted.Columns[COL_PRINTERNAME].Width = 200;
+            grdUnprinted.Columns[COL_REMARK].HeaderText = "鍐呭绠�";
+            grdUnprinted.Columns[COL_REMARK].Visible = false;
 
             grdUnprinted.ReadOnly = true;
             grdUnprinted.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
             grdUnprinted.MultiSelect = true;
 
 
-            grdPrinted.ColumnCount = 8;
+            grdPrinted.ColumnCount = 9;
             grdPrinted.Columns[COL_ID].HeaderText = "ID";
             grdPrinted.Columns[COL_ID].Visible = false;
             grdPrinted.Columns[COL_BARCODE].HeaderText = "鏉$爜缂栧彿";
@@ -491,6 +520,8 @@
             grdPrinted.Columns[COL_PRINTDATE].Width = 180;
             grdPrinted.Columns[COL_PRINTERNAME].HeaderText = "鎵撳嵃鏈哄悕绉�";
             grdPrinted.Columns[COL_PRINTERNAME].Width = 200;
+            grdPrinted.Columns[COL_REMARK].HeaderText = "鍐呭绠�";
+            grdPrinted.Columns[COL_REMARK].Visible = false;
 
             grdPrinted.ReadOnly = true;
             grdPrinted.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
@@ -522,6 +553,7 @@
                         a.HQty AS 鏁伴噺,
                         a.HIsPrintSuccess AS 鏄惁鎵撳嵃鎴愬姛,
                         a.HLastPrintDate AS 鎵撳嵃鏃堕棿,
+                        a.HRemark AS 鍐呭绠�,
                         a.HPrintName AS 鎵撳嵃鏈哄悕绉�
                     FROM Gy_BarCodeBill_Split a
                     INNER JOIN Gy_Material b ON a.HMaterID = b.HItemID
@@ -541,11 +573,12 @@
 
                 foreach (DataRow dr in ds.Tables[0].Rows)
                 {
-                    object[] rowData = new object[8];  // 8鍒�
+                    object[] rowData = new object[9];  // 8鍒�
                     rowData[COL_ID] = dr["id"];
                     rowData[COL_BARCODE] = dr["鏉$爜缂栧彿"].ToString();
                     rowData[COL_MATERIALCODE] = dr["鐗╂枡浠g爜"]?.ToString() ?? "";
                     rowData[COL_MATERIALNAME] = dr["鐗╂枡鍚嶇О"]?.ToString() ?? "";
+                    rowData[COL_REMARK] = dr["鍐呭绠�"]?.ToString() ?? "";
 
                     // 鏁伴噺锛堢储寮�4锛�
                     object qtyObj = dr["鏁伴噺"];
@@ -690,10 +723,26 @@
                 return;
             }
 
-            string templateName = GetConfigKey_Print(AppDomain.CurrentDomain.BaseDirectory + "./Config/PWD.config", "PrintTemplate");
+            // ---------- 鏀瑰姩1锛氬厛鏀堕泦閫変腑琛岀殑 remark锛屽苟妫�鏌ユ槸鍚︿竴鑷� ----------
+            List<string> remarkList = new List<string>();
+            foreach (DataGridViewRow row in currentGrid.SelectedRows)
+            {
+                object remarkObj = row.Cells[COL_REMARK].Value;
+                string remark = remarkObj?.ToString() ?? "";
+                remarkList.Add(remark);
+            }
+            if (remarkList.Distinct().Count() > 1)
+            {
+                MessageBox.Show("閫変腑鏉$爜鍖呭惈鍐呯鍜屽绠憋紝璇峰垎鍒�夋嫨鍚屼竴绫诲瀷鎵撳嵃銆�", "鎻愮ず", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            string firstRemark = remarkList.FirstOrDefault();
+
+            // ---------- 鏀瑰姩2锛氭牴鎹� remark 鍔ㄦ�佽幏鍙栨ā鏉� ----------
+            string templateName = GetTemplateNameByRemark(firstRemark);
             if (string.IsNullOrEmpty(templateName) || templateName == "undefined")
             {
-                MessageBox.Show("鏈厤缃墦鍗版ā鏉匡紙PrintTemplate锛夛紝璇峰湪閰嶇疆鏂囦欢涓缃��", "閿欒", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                MessageBox.Show($"鏈壘鍒扮被鍨嬧�渰firstRemark}鈥濆搴旂殑鎵撳嵃妯℃澘锛岃妫�鏌ラ厤缃��", "閿欒", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 return;
             }
 
@@ -823,5 +872,14 @@
             timer1?.Stop();
             timer1?.Dispose();
         }
+        private string GetTemplateNameByRemark(string remark)
+        {
+            string configPath = AppDomain.CurrentDomain.BaseDirectory + "./Config/PWD.config";
+            // 鏍规嵁澶囨敞鍐呭鍒ゆ柇锛岃嫢鍖呭惈"澶栫"鍒欎娇鐢ㄥ绠辨ā鏉匡紝鍚﹀垯榛樿鍐呯
+            if (!string.IsNullOrEmpty(remark) && remark.Trim().Contains("澶栫鐮�"))
+                return GetConfigKey_Print(configPath, "PrintTemplate2");
+            else
+                return GetConfigKey_Print(configPath, "PrintTemplate");
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1