예제 #1
0
 public bool CheckIn(CheckInTime time)
 {
     using (BaseDbContext db = new BaseDbContext())
     {
         var      manager  = db.Managers.Find(ManagerId);
         DateTime datetime = DateTime.Now;
         int      lateTime = (int)(datetime.TimeOfDay - time.LateTime).TotalMinutes;
         if (lateTime <= 0)
         {
             lateTime = 0;
         }
         bool saveFailed;
         do
         {
             saveFailed = false;
             manager.AddTime(time.TotalTime - lateTime, lateTime);
             db.Status.Add(new Status {
                 StatusId = Guid.Empty, Name = Name, TimeName = time.TimeName
             });
             db.Logs.Add(new Log(string.Format("系统:添加[{0}]值班员[{1}]的在线纪录。", time.TimeName, Name)));
             db.Logs.Add(new Log(string.Format("【{3}】值班员【{0}】于{1}签到,迟到{2}分钟。", Name, datetime, lateTime, time.TimeName)));
             try
             {
                 db.SaveChanges();
             }
             catch (DbUpdateConcurrencyException e)
             {
                 saveFailed = true;
                 e.Entries.Single().Reload();
             }
         } while (saveFailed);
         return(true);
     }
 }
예제 #2
0
        /// <summary>
        /// 获取Manager为空的可用ManageTable(由ManageTableRecord组成的集合类型)。
        /// </summary>
        /// <returns>Manager为空而包含值班时间的ManageTable</returns>
        public static ManageTable GetEmptyManageTable(List <AvailableTime> availableTimeList)
        {
            var manageTable        = new ManageTable(CheckInTime.CheckInTimeList);
            var availableTimeTable = new AvailableTimeHelper.AvailableTimeTable(availableTimeList);

            for (int i = 11; i != 0; i = CheckInTime.GetNextTimeId(i))
            {
                if (availableTimeTable[i].ManagerList.Count == 0)
                {
                    return(null);
                }
                if (availableTimeTable[i].ManagerList.Count == 1)
                {
                    manageTable[i].Manager = availableTimeTable[i].ManagerList.SingleOrDefault();
                }
            }
            return(manageTable);
        }
예제 #3
0
 public AvailableTimeTableRecord(CheckInTime time)
 {
     Time        = time;
     ManagerList = new List <Manager>();
 }
예제 #4
0
        private void fillInManageTable(ManageTable table)
        {
            var        availableTimeTable = new AvailableTimeHelper.AvailableTimeTable(availableTimeList);
            List <int> jumpList           = new List <int>();

            manageTableList = new List <ManageTable>();
            manageTableList.Add(new ManageTable(CheckInTime.CheckInTimeList));
            for (int i = 11; i != 0; i = CheckInTime.GetNextTimeId(i))
            {
                if (availableTimeTable[i].ManagerList.Count == 0)
                {
                    return;
                }
                if (availableTimeTable[i].ManagerList.Count == 1)
                {
                    manageTableList.Single()[i].Manager = availableTimeTable[i].ManagerList.Single();
                    jumpList.Add(i);
                }
            }
            for (int i = 11; i != 0; i = CheckInTime.GetNextTimeId(i))
            {
                if (jumpList.Contains(i))
                {
                    continue;
                }
                List <ManageTableRecord> recordList = new List <ManageTableRecord>();
                foreach (var availableTime in availableTimeList)
                {
                    if (availableTime.TimeId == i)
                    {
                        recordList.Add(new ManageTableRecord {
                            Manager = availableTime.Manager, Demand = availableTime.Demand, Time = Manager.FindCheckInTime(availableTime.TimeId)
                        });
                    }
                }
                List <ManageTable> newTableList = new List <ManageTable>();
                foreach (var record in recordList)
                {
                    if (manageTableList.Count == 0)
                    {
                        var initialManageTable = GetEmptyManageTable(availableTimeList);
                        initialManageTable[i] = record;
                        newTableList.Add(initialManageTable);
                    }
                    else
                    {
                        foreach (var manageTable in manageTableList)
                        {
                            var newManageTable = manageTable.Clone();
                            newManageTable[i] = record;
                            newTableList.Add(newManageTable);
                        }
                    }
                }
                if (newTableList.Count == 0)
                {
                    manageTableList = new List <ManageTable>();
                    return;
                }
                newTableList    = newTableList.Distinct(new ManageTableComparer()).ToList();
                manageTableList = checkManageTableList(newTableList);
                if (i == 76)
                {
                    break;
                }
            }
        }