/// <summary> /// 分批執行匯入 /// </summary> /// <param name="Rows">IRowStream物件列表</param> /// <returns>分批匯入完成訊息</returns> public override string Import(List <IRowStream> Rows) { if (mOption.Action == ImportAction.InsertOrUpdate) { try { // log DAO.LogTransfer _logTransfer = new DAO.LogTransfer(); List <DAO.UDT_StudQuizDataDef> StudQuizDataList = new List <DAO.UDT_StudQuizDataDef>(); List <DAO.UDT_StudQuizDataDef> DelQuizDataList = new List <DAO.UDT_StudQuizDataDef>(); List <DAO.UDT_StudQuizDataDef> HasQuizDataList = new List <DAO.UDT_StudQuizDataDef>(); // 新增 Log Dictionary <int, StringBuilder> Log_Insert = new Dictionary <int, StringBuilder> (); // 刪除 Log Dictionary <int, StringBuilder> Log_Delete = new Dictionary <int, StringBuilder>(); List <string> studentNumberList = new List <string>(); List <string> ClassSeatNoList = new List <string>(); // 取得試別有學生資料 HasQuizDataList = _UDTTransfer.GetStudQuizDataByQuizID(_QuizID); int count = 0; string AuthorID = Utility.GetAuthorID(); foreach (IRowStream irs in Rows) { count++; this.ImportProgress = count; int sid = 0; // 依學號比對 if (irs.Contains("學號") && irs.Contains("狀態")) { if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態"))) { sid = Utility.GetStudentID(irs.GetValue("學號"), irs.GetValue("狀態")); studentNumberList.Add("學號:" + irs.GetValue("學號")); } } // 依班座比對 if (irs.Contains("班級") && irs.Contains("座號") && irs.Contains("狀態")) { if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態"))) { sid = Utility.GetStudentID(irs.GetValue("班級"), irs.GetValue("座號"), irs.GetValue("狀態")); ClassSeatNoList.Add("班級:" + irs.GetValue("班級") + ",座號:" + irs.GetValue("座號")); } } // 比對需要刪除 foreach (DAO.UDT_StudQuizDataDef data in HasQuizDataList.Where(x => x.StudentID == sid)) { DelQuizDataList.Add(data); } DAO.UDT_StudQuizDataDef sqd = new DAO.UDT_StudQuizDataDef(); sqd.QuizID = int.Parse(_QuizID); sqd.AuthorID = AuthorID; sqd.StudentID = sid; DateTime dt1, dt2; if (irs.Contains("實施日期")) { if (DateTime.TryParse(irs.GetValue("實施日期"), out dt1)) { sqd.ImplementationDate = dt1; } } if (irs.Contains("解析日期")) { if (DateTime.TryParse(irs.GetValue("解析日期"), out dt2)) { sqd.AnalysisDate = dt2; } } List <XElement> elmList = new List <XElement>(); foreach (string str in _DataFieldNameList) { if (irs.Contains(str)) { XElement elm = new XElement("Item"); elm.SetAttributeValue("name", str); elm.SetAttributeValue("value", irs.GetValue(str)); elmList.Add(elm); } } sqd.Content = Utility.ConvertXmlListToString1(elmList); StudQuizDataList.Add(sqd); } if (DelQuizDataList.Count > 0) { List <int> intList = (from data in DelQuizDataList select data.StudentID).ToList(); Dictionary <int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList); // 收集 Log foreach (DAO.UDT_StudQuizDataDef data in DelQuizDataList) { if (studNameDict.ContainsKey(data.StudentID)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("匯入輔導測驗-刪除"); sb.AppendLine(studNameDict[data.StudentID]); sb.AppendLine("測驗名稱:" + _QuizName); if (data.ImplementationDate.HasValue) { sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString()); } if (data.AnalysisDate.HasValue) { sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString()); } XElement elmContent = Utility.ConvertStringToXelm1(data.Content); if (elmContent != null) { foreach (XElement elm in elmContent.Elements("Item")) { if (elm.Attribute("name") != null && elm.Attribute("value") != null) { sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value); } } } if (!Log_Delete.ContainsKey(data.StudentID)) { Log_Delete.Add(data.StudentID, sb); } } } _UDTTransfer.DeleteStudQuizDataLlist(DelQuizDataList); } if (StudQuizDataList.Count > 0) { List <int> intList = (from data in StudQuizDataList select data.StudentID).ToList(); Dictionary <int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList); // 收集 Log foreach (DAO.UDT_StudQuizDataDef data in StudQuizDataList) { if (studNameDict.ContainsKey(data.StudentID)) { StringBuilder sb = new StringBuilder(); // 檢查是否有刪除,有放上面 if (Log_Delete.ContainsKey(data.StudentID)) { sb.AppendLine(Log_Delete[data.StudentID].ToString()); sb.AppendLine(); } sb.AppendLine("匯入輔導測驗-新增"); sb.AppendLine(studNameDict[data.StudentID]); sb.AppendLine("測驗名稱:" + _QuizName); if (data.ImplementationDate.HasValue) { sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString()); } if (data.AnalysisDate.HasValue) { sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString()); } XElement elmContent = Utility.ConvertStringToXelm1(data.Content); if (elmContent != null) { foreach (XElement elm in elmContent.Elements("Item")) { if (elm.Attribute("name") != null && elm.Attribute("value") != null) { sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value); } } } if (!Log_Insert.ContainsKey(data.StudentID)) { Log_Insert.Add(data.StudentID, sb); } } } _UDTTransfer.InsertStudQuizDataLlist(StudQuizDataList); } // log 資料 if (Log_Insert.Count > 0) { foreach (KeyValuePair <int, StringBuilder> data in Log_Insert) { _logTransfer.SaveLog("輔導系統-匯入測驗資料", "匯入", "student", data.Key.ToString(), data.Value); } } // 總共 StringBuilder logData = new StringBuilder(); logData.AppendLine("測驗名稱:" + _QuizName); if (ClassSeatNoList.Count > 0) { logData.AppendLine("--依班級座號匯入--"); foreach (string str in ClassSeatNoList) { logData.AppendLine(str); } logData.AppendLine("匯入學生共" + ClassSeatNoList.Count + "人"); } if (studentNumberList.Count > 0) { logData.AppendLine("--依學號匯入--"); foreach (string str in studentNumberList) { logData.AppendLine(str); } logData.AppendLine("匯入學生共" + studentNumberList.Count + "人"); } // 寫入 log _logTransfer.SaveLog("輔導系統.匯入測驗資料", "匯入", "", "", logData); } catch (Exception ex) { throw ex; } } return(""); }