From 727cd2b0e561146033c196c77981ee36ef5b87cd Mon Sep 17 00:00:00 2001 From: Neo Yang Date: Mon, 14 Sep 2026 13:07:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B9=B4=E5=BA=A6=E8=AA=B2=E7=A8=8B?= =?UTF-8?q?=E5=9F=B7=E8=A1=8C=E7=8B=80=E6=B3=81=E5=8C=AF=E5=87=BA=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E8=A8=88=E7=95=AB=E5=88=A5=E4=B8=A6=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AC=9B=E5=B8=AB=E5=8F=8A=E6=BB=BF=E6=84=8F=E5=BA=A6=E6=AC=84?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Web/DAC/課程企劃/DAC_訓練課程企劃2.cs | 32 +++++-- .../Web/DAC/辦訓狀況/DAC_滿意度調查2.cs | 17 ++++ .../Web/Report/年度課程執行狀況報表.cs | 86 ++++++++++++------- 3 files changed, 93 insertions(+), 42 deletions(-) diff --git a/教育訓練系統/Web/DAC/課程企劃/DAC_訓練課程企劃2.cs b/教育訓練系統/Web/DAC/課程企劃/DAC_訓練課程企劃2.cs index 0267d5f..736c1a1 100644 --- a/教育訓練系統/Web/DAC/課程企劃/DAC_訓練課程企劃2.cs +++ b/教育訓練系統/Web/DAC/課程企劃/DAC_訓練課程企劃2.cs @@ -481,8 +481,9 @@ namespace Education { DbCommand cmd = NewCommand(); cmd.CommandText = @" - SELECT A.編號, A.訓練名稱, '' AS 訓練計畫別, A.訓練日期, A.訓練日期迄, A.訓練時數, '' AS 訓練場地, - 0 AS 訓練人數, A.預估經費, 0 AS 實際經費, 0.0 AS 學員出席率, 0.0 AS 整體滿意度 + SELECT A.編號, A.訓練名稱, '' AS 講師姓名, A.訓練日期, A.訓練日期迄, A.訓練時數, '' AS 訓練場地, + 0 AS 訓練人數, A.預估經費, 0 AS 實際經費, 0.0 AS 學員出席率, 0.0 AS 整體滿意度, + 0.0 AS 講師滿意度, 0.0 AS 課程滿意度, 0.0 AS 行政滿意度, 0.0 AS 餐點滿意度, 0.0 AS 場地滿意度 FROM 訓練課程企劃 A WHERE A.訓練日期 >= @訓練日期1 AND A.訓練日期 < @訓練日期2 @@ -502,29 +503,42 @@ namespace Education DAC_課程報名 Dao課程報名 = new DAC_課程報名(conn); DAC_課程經費 Dao課程經費 = new DAC_課程經費(conn); DAC_滿意度調查課程企劃 Dao滿意度調查課程企劃 = new DAC_滿意度調查課程企劃(conn); + DAC_滿意度調查 Dao滿意度調查 = new DAC_滿意度調查(conn); + DAC_訓練課程內容 Dao訓練課程內容 = new DAC_訓練課程內容(conn); // 填入統計欄位 foreach (DataRow r in result.Rows) { int 編號 = DAC.GetInt32(r["編號"]); - string 訓練計畫別 = ""; - // 取得訓練計畫別 - DataTable 計畫Table = Dao課程報名.Select確定報名學員計畫(編號); - foreach (DataRow r1 in 計畫Table.Rows) + // 取得講師姓名 + string 講師姓名 = ""; + HashSet 講師Names = new HashSet(); + 訓練課程內容List 課程List = Dao訓練課程內容.SelectBy課程企劃(編號); + foreach (訓練課程內容 課程 in 課程List) { - 訓練計畫別 += DAC.GetString(r1["計畫年度名稱"]) + "\r\n"; + string 姓名 = Select選定講師名稱(編號, 課程.課程序號); + if (!string.IsNullOrEmpty(姓名) && 講師Names.Add(姓名)) + 講師姓名 += 姓名 + "\r\n"; } - if (訓練計畫別.Length > 0) - 訓練計畫別 = 訓練計畫別.Trim(); + if (講師姓名.Length > 0) + 講師姓名 = 講師姓名.Trim(); // 取得場地及滿意度 DataTable 滿意度Table = Dao滿意度調查課程企劃.Select滿意度統計(編號); + DataTable 課程滿意度Table = Dao滿意度調查.Select年度課程滿意度統計(編號); + + r["講師姓名"] = 講師姓名; r["訓練場地"] = Select選定場地名稱(編號); r["訓練人數"] = Dao課程報名.Get出席人數(編號); r["實際經費"] = Dao課程經費.Get經費合計(編號); r["學員出席率"] = Dao課程報名.Get出席率(編號); r["整體滿意度"] = 滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(滿意度Table.Rows[0]["整體滿意度"]) : 0; + r["行政滿意度"] = 滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(滿意度Table.Rows[0]["行政滿意度"]) : 0; + r["餐點滿意度"] = 滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(滿意度Table.Rows[0]["餐點滿意度"]) : 0; + r["場地滿意度"] = 滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(滿意度Table.Rows[0]["場地滿意度"]) : 0; + r["講師滿意度"] = 課程滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(課程滿意度Table.Rows[0]["講師滿意度"]) : 0; + r["課程滿意度"] = 課程滿意度Table.Rows.Count > 0 ? DAC.GetDecimal(課程滿意度Table.Rows[0]["課程滿意度"]) : 0; r.EndEdit(); } result.AcceptChanges(); diff --git a/教育訓練系統/Web/DAC/辦訓狀況/DAC_滿意度調查2.cs b/教育訓練系統/Web/DAC/辦訓狀況/DAC_滿意度調查2.cs index b3af246..e8ba973 100644 --- a/教育訓練系統/Web/DAC/辦訓狀況/DAC_滿意度調查2.cs +++ b/教育訓練系統/Web/DAC/辦訓狀況/DAC_滿意度調查2.cs @@ -194,6 +194,23 @@ namespace Education return Select(cmdSelect); } + /// + /// 講師滿意度 = (講師的授課方式 + 講師的專業知識) / 2 + /// 課程滿意度 = (課程的實用性 + 課程時數安排) / 2 + /// 題目編號 1:課程的實用性 2:講師的授課方式 3:講師的專業知識 4:課程時數安排 + /// + public DataTable Select年度課程滿意度統計(int 訓練課程企劃編號) + { + DbCommand cmdSelect = NewCommand( + @"SELECT + (SELECT ISNULL(AVG(CAST(分數 AS FLOAT)) * 20, 0) FROM 滿意度調查 + WHERE 訓練課程企劃編號 = @訓練課程企劃編號 AND 課程序號 <> 0 AND 題目編號 IN (2, 3)) AS 講師滿意度, + (SELECT ISNULL(AVG(CAST(分數 AS FLOAT)) * 20, 0) FROM 滿意度調查 + WHERE 訓練課程企劃編號 = @訓練課程企劃編號 AND 課程序號 <> 0 AND 題目編號 IN (1, 4)) AS 課程滿意度 "); + AddParam(cmdSelect, "訓練課程企劃編號", 訓練課程企劃編號); + return Select(cmdSelect); + } + } /// diff --git a/教育訓練系統/Web/Report/年度課程執行狀況報表.cs b/教育訓練系統/Web/Report/年度課程執行狀況報表.cs index effe6eb..e2a6f86 100644 --- a/教育訓練系統/Web/Report/年度課程執行狀況報表.cs +++ b/教育訓練系統/Web/Report/年度課程執行狀況報表.cs @@ -24,9 +24,9 @@ namespace Education.Report excel.Sheet = sheet; // 報表抬頭 - excel.MergeCell(0, 0, 0, 10); + excel.MergeCell(0, 0, 0, 15); excel.SetCellValue(0, 0, 公司名稱, titleStyleCenter); - excel.MergeCell(1, 0, 1, 10); + excel.MergeCell(1, 0, 1, 15); if (!包含未開課) excel.SetCellValue(1, 0, String.Format("{0}年度教育訓練課程執行狀況", 年度), titleStyleCenter); else @@ -39,26 +39,36 @@ namespace Education.Report excel.SetCellValue(2, 0, "", bodyStyleCenter); excel.SetCellValue(2, 1, "訓練日期", bodyStyleCenter); excel.SetCellValue(2, 2, "課程企劃編號名稱", bodyStyleCenter); - excel.SetCellValue(2, 3, "訓練計畫別", bodyStyleCenter); - excel.SetCellValue(2, 4, "訓練時數", bodyStyleCenter); - excel.SetCellValue(2, 5, "訓練場地", bodyStyleCenter); - excel.SetCellValue(2, 6, "訓練人數", bodyStyleCenter); - excel.SetCellValue(2, 7, "預估經費", bodyStyleCenter); - excel.SetCellValue(2, 8, "實際經費", bodyStyleCenter); - excel.SetCellValue(2, 9, "學員出席率", bodyStyleCenter); - excel.SetCellValue(2, 10, "整體滿意度", bodyStyleCenter); + excel.SetCellValue(2, 3, "講師姓名", bodyStyleCenter); + excel.SetCellValue(2, 4, "講師滿意度", bodyStyleCenter); + excel.SetCellValue(2, 5, "課程滿意度", bodyStyleCenter); + excel.SetCellValue(2, 6, "行政服務品質滿意度", bodyStyleCenter); + excel.SetCellValue(2, 7, "餐點與茶飲滿意度", bodyStyleCenter); + excel.SetCellValue(2, 8, "場地滿意度", bodyStyleCenter); + excel.SetCellValue(2, 9, "訓練時數", bodyStyleCenter); + excel.SetCellValue(2, 10, "訓練場地", bodyStyleCenter); + excel.SetCellValue(2, 11, "訓練人數", bodyStyleCenter); + excel.SetCellValue(2, 12, "預估經費", bodyStyleCenter); + excel.SetCellValue(2, 13, "實際經費", bodyStyleCenter); + excel.SetCellValue(2, 14, "學員出席率", bodyStyleCenter); + excel.SetCellValue(2, 15, "整體滿意度", bodyStyleCenter); excel.SetColumnWidthInChars(0, 12); excel.SetColumnWidthInChars(1, 12); excel.SetColumnWidthInChars(2, 45); - excel.SetColumnWidthInChars(3, 26); - excel.SetColumnWidthInChars(4, 12); - excel.SetColumnWidthInChars(5, 30); - excel.SetColumnWidthInChars(6, 12); - excel.SetColumnWidthInChars(7, 15); + excel.SetColumnWidthInChars(3, 20); + excel.SetColumnWidthInChars(4, 15); + excel.SetColumnWidthInChars(5, 15); + excel.SetColumnWidthInChars(6, 22); + excel.SetColumnWidthInChars(7, 22); excel.SetColumnWidthInChars(8, 15); - excel.SetColumnWidthInChars(9, 15); - excel.SetColumnWidthInChars(10, 15); + excel.SetColumnWidthInChars(9, 12); + excel.SetColumnWidthInChars(10, 30); + excel.SetColumnWidthInChars(11, 12); + excel.SetColumnWidthInChars(12, 15); + excel.SetColumnWidthInChars(13, 15); + excel.SetColumnWidthInChars(14, 15); + excel.SetColumnWidthInChars(15, 15); excel.SetRowHeightInPoints(2, (int)Math.Truncate(BodyRowHeight * 2.0)); int rowId = 1; @@ -69,14 +79,19 @@ namespace Education.Report excel.SetCellValue(rowId + 2, 0, rowId, bodyStyleCenter); excel.SetCellValue(rowId + 2, 1, 訓練課程企劃.Get訓練日期Str(DAC.GetDateTime(r["訓練日期"]), DAC.GetDateTime(r["訓練日期迄"]), "yyyyMMdd"), bodyStyleCenter); excel.SetCellValue(rowId + 2, 2, String.Format("[{0:000000}]{1}", r["編號"], r["訓練名稱"]), bodyStyleLeft); - excel.SetCellValue(rowId + 2, 3, DAC.GetString(r["訓練計畫別"]), bodyStyleLeft); - excel.SetCellValue(rowId + 2, 4, DAC.GetInt32(r["訓練時數"]), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 5, DAC.GetString(r["訓練場地"]), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 6, DAC.GetInt32(r["訓練人數"]), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 7, DAC.GetInt32(r["預估經費"]), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 8, DAC.GetInt32(r["實際經費"]), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 9, DAC.GetDouble(r["學員出席率"]), bodyPercentStyle); - excel.SetCellValue(rowId + 2, 10, DAC.GetDouble(r["整體滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 3, DAC.GetString(r["講師姓名"]), bodyStyleLeft); + excel.SetCellValue(rowId + 2, 4, DAC.GetDouble(r["講師滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 5, DAC.GetDouble(r["課程滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 6, DAC.GetDouble(r["行政滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 7, DAC.GetDouble(r["餐點滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 8, DAC.GetDouble(r["場地滿意度"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 9, DAC.GetInt32(r["訓練時數"]), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 10, DAC.GetString(r["訓練場地"]), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 11, DAC.GetInt32(r["訓練人數"]), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 12, DAC.GetInt32(r["預估經費"]), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 13, DAC.GetInt32(r["實際經費"]), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 14, DAC.GetDouble(r["學員出席率"]), bodyPercentStyle); + excel.SetCellValue(rowId + 2, 15, DAC.GetDouble(r["整體滿意度"]), bodyPercentStyle); // excel.SetRowHeightInPoints(rowId + 2, (int)Math.Truncate(BodyRowHeight * 1.5)); rowId++; @@ -87,13 +102,18 @@ namespace Education.Report excel.SetCellValue(rowId + 2, 1, "", bodyStyleCenter); excel.SetCellValue(rowId + 2, 2, "", bodyStyleLeft); excel.SetCellValue(rowId + 2, 3, "", bodyStyleLeft); - excel.SetCellFormula(rowId + 2, 4, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 4), Excel.RCtoA1(rowId + 1, 4)), bodyStyleCenter); - excel.SetCellValue(rowId + 2, 5, "", bodyStyleCenter); - excel.SetCellFormula(rowId + 2, 6, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 6), Excel.RCtoA1(rowId + 1, 6)), bodyStyleCenter); - excel.SetCellFormula(rowId + 2, 7, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 7), Excel.RCtoA1(rowId + 1, 7)), bodyStyleCenter); - excel.SetCellFormula(rowId + 2, 8, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 8), Excel.RCtoA1(rowId + 1, 8)), bodyStyleCenter); - excel.SetCellFormula(rowId + 2, 9, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 9), Excel.RCtoA1(rowId + 1, 9)), bodyPercentStyle); - excel.SetCellFormula(rowId + 2, 10, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 10), Excel.RCtoA1(rowId + 1, 10)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 4, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 4), Excel.RCtoA1(rowId + 1, 4)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 5, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 5), Excel.RCtoA1(rowId + 1, 5)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 6, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 6), Excel.RCtoA1(rowId + 1, 6)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 7, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 7), Excel.RCtoA1(rowId + 1, 7)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 8, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 8), Excel.RCtoA1(rowId + 1, 8)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 9, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 9), Excel.RCtoA1(rowId + 1, 9)), bodyStyleCenter); + excel.SetCellValue(rowId + 2, 10, "", bodyStyleCenter); + excel.SetCellFormula(rowId + 2, 11, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 11), Excel.RCtoA1(rowId + 1, 11)), bodyStyleCenter); + excel.SetCellFormula(rowId + 2, 12, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 12), Excel.RCtoA1(rowId + 1, 12)), bodyStyleCenter); + excel.SetCellFormula(rowId + 2, 13, String.Format("SUM({0}:{1})", Excel.RCtoA1(beginRow, 13), Excel.RCtoA1(rowId + 1, 13)), bodyStyleCenter); + excel.SetCellFormula(rowId + 2, 14, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 14), Excel.RCtoA1(rowId + 1, 14)), bodyPercentStyle); + excel.SetCellFormula(rowId + 2, 15, String.Format("AVERAGE({0}:{1})", Excel.RCtoA1(beginRow, 15), Excel.RCtoA1(rowId + 1, 15)), bodyPercentStyle); excel.SetRowHeightInPoints(rowId + 2, (int)Math.Truncate(BodyRowHeight * 2.0)); MemoryStream ms = new MemoryStream(); @@ -101,4 +121,4 @@ namespace Education.Report return ms; } } -} \ No newline at end of file +} -- 2.54.0