protected override List<object> GetDataSource()
 {
     List<DeviceInfo> attendanceReaders = (new DeviceInfoBLL(AppSettings.CurrentSetting.ConnectUri)).GetAttendanceReaders().QueryObjects;
     if (attendanceReaders == null || attendanceReaders.Count == 0)
     {
         MessageBox.Show("还没有指定考勤点,请先在 \"考勤点选择\" 上指定考勤点");
         return null;
     }
     List<string> readers = attendanceReaders.Select(it => it.ID).ToList();
     List<Staff> users = departmentTreeview1.SelectedStaff;
     if (users != null && users.Count > 0)
     {
         List<int> staff = users.Select(item => item.ID).ToList();
         AttendanceLogSearchCondition con = new AttendanceLogSearchCondition();
         con.Staff = staff;
         con.ContainManualLogs = true;
         con.Readers = readers;
         con.ReadDateTime = new DatetimeRange(ucDateTimeInterval1.StartDateTime, ucDateTimeInterval1.EndDateTime.Date.AddDays(1).AddSeconds(-1));
         List<AttendanceLog> arranges = (new AttendanceLogBLL(AppSettings.CurrentSetting.ConnectUri)).GetItems(con).QueryObjects;
         List<object> items = new List<object>();
         foreach (Staff s in users)
         {
             List<AttendanceLog> rets = (from it in arranges where it.StaffID == s.ID orderby it.ReadDateTime ascending select it).ToList();
             if (rets != null && rets.Count > 0)
             {
                 rets.ForEach(it => it.StaffName = s.Name);
                 List<IGrouping<string, AttendanceLog>> groups = rets.GroupBy(item => item.ReadDateTime.ToString("yyyy-MM-dd")).ToList();
                 List<object> sas = (from g in groups select (object)g).ToList();
                 items.AddRange(sas);
             }
         }
         return items;
     }
     return null;
 }
        private bool CreateAttendanceResults(Staff staff, DatetimeRange dr, List<string> readers)
        {
            ShiftArrangeSearchCondition con1 = new ShiftArrangeSearchCondition();
            con1.StaffID = staff.ID;
            con1.ShiftDate = dr;
            List<ShiftArrange> sas = (new ShiftArrangeBLL(AppSettings.CurrentSetting.ConnectUri)).GetItems(con1).QueryObjects;

            TASheetSearchCondition con2 = new TASheetSearchCondition();
            con2.StaffID = staff.ID;
            List<TASheet> sheets = (new TASheetBLL(AppSettings.CurrentSetting.ConnectUri)).GetItems(con2).QueryObjects;

            AttendanceLogSearchCondition con3 = new AttendanceLogSearchCondition();
            con3.Staff = new List<int>();
            con3.Staff.Add(staff.ID);
            con3.Readers = readers;
            con3.ReadDateTime = dr;
            con3.ContainManualLogs = true;
            List<AttendanceLog> records = (new AttendanceLogBLL(AppSettings.CurrentSetting.ConnectUri)).GetItems(con3).QueryObjects;

            List<AttendanceResult> results = (new AttendanceAnalyst()).Analist(staff, sas, records, sheets, dr);
            CommandResult ret = (new AttendanceResultBLL(AppSettings.CurrentSetting.ConnectUri)).Add(staff.ID, dr, results);
            return ret.Result == ResultCode.Successful;
        }