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); } }
/// <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); }
public AvailableTimeTableRecord(CheckInTime time) { Time = time; ManagerList = new List <Manager>(); }
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; } } }