private void GetStudentByNumber(List <IRowStream> Rows)
        {
            StudentByNumberDic = new Dictionary <string, StudRecord>();
            StudentDic         = new Dictionary <string, StudRecord>();

            student_numberList = new List <string>();

            foreach (IRowStream Row in Rows)
            {
                string studentNumber = Row.GetValue("學號");
                if (studentNumber != "")
                {
                    if (!student_numberList.Contains(studentNumber))
                    {
                        student_numberList.Add(studentNumber);
                    }
                }
            }

            StringBuilder sb = new StringBuilder();

            sb.Append(string.Format(@"select student.id,student.name,student.student_number,class.class_name,student.seat_no 
from student 
left join class on class.id=student.ref_class_id
where student_number in ('{0}')", string.Join("','", student_numberList)));
            DataTable dt = tool._Q.Select(sb.ToString());

            foreach (DataRow row in dt.Rows)
            {
                StudRecord stud = new StudRecord(row);
                if (!StudentByNumberDic.ContainsKey(stud.student_number))
                {
                    StudentByNumberDic.Add(stud.student_number, stud);
                }

                if (!StudentDic.ContainsKey(stud.id))
                {
                    StudentDic.Add(stud.id, stud);
                }
            }
        }
        public override string Import(List <Campus.DocumentValidator.IRowStream> Rows)
        {
            if (mOption.Action == ImportAction.InsertOrUpdate)
            {
                List <BodyTmperature> InsertList = new List <BodyTmperature>();
                List <BodyTmperature> UpdateList = new List <BodyTmperature>();

                //學號:學生紀錄
                GetStudentByNumber(Rows);

                GetBodyTmperature();

                foreach (IRowStream Row in Rows)
                {
                    string studentNumber      = Row.GetValue("學號");
                    string body_tag           = Row.GetValue("對象");
                    string category           = Row.GetValue("類別");
                    string measurement_method = Row.GetValue("量測方式");
                    string location           = Row.GetValue("地點");
                    string remark             = Row.GetValue("備註");

                    DateTime occurDate;
                    DateTime.TryParse("" + Row.GetValue("量測日期"), out occurDate);

                    double body_temperature;
                    double.TryParse("" + Row.GetValue("體溫"), out body_temperature);

                    //學生是否存在
                    if (StudentByNumberDic.ContainsKey(studentNumber))
                    {
                        StudRecord stud = StudentByNumberDic[studentNumber];

                        //學號 + 類別 + 日期
                        string name_key = studentNumber + "_" + category + "_" + occurDate.ToString("yyyy/MM/dd");;

                        if (BodyTmperatureDic.ContainsKey(name_key))
                        {
                            //更新,取得原檔
                            BodyTmperature body_tmperature = BodyTmperatureDic[name_key];

                            //20202/3/24 - 建立修改前的副本內容
                            body_tmperature.NowClone();

                            //類別
                            body_tmperature.BodyTag           = "Student";
                            body_tmperature.Category          = category;
                            body_tmperature.BodyTemperature   = body_temperature;
                            body_tmperature.MeasurementMethod = measurement_method;
                            body_tmperature.Location          = location;
                            body_tmperature.Remark            = remark;


                            //證書日期
                            if (occurDate != null)
                            {
                                body_tmperature.OccurDate = occurDate;
                            }

                            UpdateList.Add(body_tmperature);
                        }
                        else
                        {
                            //新增
                            BodyTmperature body_tmperature = new BodyTmperature();
                            if (occurDate != null)
                            {
                                body_tmperature.OccurDate = occurDate;
                            }

                            body_tmperature.BodyTag           = "Student";
                            body_tmperature.Category          = category;
                            body_tmperature.BodyTemperature   = body_temperature;
                            body_tmperature.MeasurementMethod = measurement_method;
                            body_tmperature.Location          = location;
                            body_tmperature.Remark            = remark;

                            body_tmperature.ObjID = int.Parse(stud.id);

                            InsertList.Add(body_tmperature);
                        }
                    }
                }

                if (InsertList.Count > 0)
                {
                    tool._A.InsertValues(InsertList);

                    StringBuilder sb_log_new = new StringBuilder();
                    sb_log_new.AppendLine("新增學生體溫紀錄");

                    foreach (BodyTmperature each in InsertList)
                    {
                        if (StudentDic.ContainsKey(each.ObjID.ToString()))
                        {
                            StudRecord stud = StudentDic[each.ObjID.ToString()];
                            sb_log_new.AppendLine(string.Format("班級「{0}」座號「{1}」學生「{2}」", stud.class_name, stud.seat_no, stud.name));
                            sb_log_new.AppendLine("對象「學生」");
                            sb_log_new.AppendLine("類別「" + each.Category + "」");
                            sb_log_new.AppendLine("量測日期「" + each.OccurDate.ToString("yyyy/MM/dd") + "」");

                            sb_log_new.AppendLine("體溫「" + each.BodyTemperature + "」");
                            sb_log_new.AppendLine("量測方式「" + each.MeasurementMethod + "」");
                            sb_log_new.AppendLine("地點「" + each.Location + "」");
                            sb_log_new.AppendLine("備註「" + each.Remark + "」");
                            sb_log_new.AppendLine("");
                        }
                    }
                    FISCA.LogAgent.ApplicationLog.Log("匯入學生體溫紀錄", "新增", sb_log_new.ToString());
                }

                if (UpdateList.Count > 0)
                {
                    tool._A.UpdateValues(UpdateList);

                    StringBuilder sb_log_update = new StringBuilder();
                    sb_log_update.AppendLine("更新學生體溫紀錄");
                    foreach (BodyTmperature each in UpdateList)
                    {
                        if (StudentDic.ContainsKey(each.ObjID.ToString()))
                        {
                            StudRecord stud = StudentDic[each.ObjID.ToString()];

                            StringBuilder sb_aing = new StringBuilder();
                            bool          change  = false;

                            sb_aing.AppendLine(string.Format("班級「{0}」座號「{1}」學生「{2}」", stud.class_name, stud.seat_no, stud.name));
                            sb_aing.AppendLine(string.Format("日期「{0}」", each.OccurDate.ToString("yyyy/MM/dd")));

                            if (each.bt.BodyTemperature != each.BodyTemperature)
                            {
                                change = true;
                                sb_aing.AppendLine("體溫紀錄由「" + each.bt.BodyTemperature + "」修改為「" + each.BodyTemperature + "」");
                            }

                            if (each.bt.Location != each.Location)
                            {
                                change = true;
                                sb_aing.AppendLine("地點由「" + each.bt.Location + "」修改為「" + each.Location + "」");
                            }

                            if (each.bt.Remark != each.Remark)
                            {
                                change = true;
                                sb_aing.AppendLine("備註由「" + each.bt.Remark + "」修改為「" + each.Remark + "」");
                            }

                            if (each.bt.MeasurementMethod != each.MeasurementMethod)
                            {
                                change = true;
                                sb_aing.AppendLine("量測方式由「" + each.bt.MeasurementMethod + "」修改為「" + each.MeasurementMethod + "」");
                            }

                            sb_aing.AppendLine("");

                            if (change)
                            {
                                sb_log_update.Append(sb_aing.ToString());
                            }
                        }
                    }
                    if (sb_log_update.ToString() != "更新學生體溫紀錄")
                    {
                        FISCA.LogAgent.ApplicationLog.Log("匯入學生體溫紀錄", "更新", sb_log_update.ToString());
                    }
                }
            }

            return("");
        }