static void Cmd(string ke) { DateTime st = DateTime.Now; switch (ke) { case "1": CreateStaffs(); break; case "2": CreateShiftSheduce(); break; case "3": CreateAttRecord(); break; case "4": Console.WriteLine("input date(default is DateTime.now):"); string dates = Console.ReadLine(); DateTime date = string.IsNullOrEmpty(dates)? DateTime.Now : DateTime.Parse(dates); AttendanceRecordService ars = new AttendanceRecordService(Settings.Default.db); ars.CalculateAttendRecord(date, new List <string>() { "晚" }); break; default: break; } Console.WriteLine((DateTime.Now - st).TotalMilliseconds); }
/// <summary> /// 新增點名活動成員資料 /// </summary> /// <param name="circleId"></param> /// <param name="eventId"></param> /// <param name="creator"></param> /// <param name="rollCallId"></param> /// <returns></returns> public bool InsertSignInLogData(int circleId, Guid eventId, int creator, int rollCallId) { var db = _uow.DbContext; // 2.1 取得所有應該要被點名的成員 var memberIds = (from m in db.Members join cmr in db.CircleMemberRoleplay on m.Id equals cmr.MemberId join lr in db.LearningRole on cmr.RoleId equals lr.Id where cmr.CircleId == circleId && lr.IsAdminRole == false select m.Id).ToArray(); var attendanceRecordService = new AttendanceRecordService(); // 2.2 整理資料-點名紀錄 var attendances = attendanceRecordService.GetInitAttendanceRecords(circleId, eventId, memberIds); // 2.3 整理資料-核心出缺勤資料表 var logs = GetInitLogs(creator, memberIds); //2.1 更新點名活動id,新增點名紀錄 logs.ForEach(x => x.RollCallId = rollCallId); //2.1.1檢查是否有請假資訊 var newLog = CheckLeaveInfo(DateTime.UtcNow, logs, circleId); try { db.ActRollCallLog.AddRange(newLog); //2.2 新增核心出缺勤紀錄 db.AttendanceRecord.AddRange(attendances); db.SaveChanges(); //執行 return(true); } catch (Exception ex) { return(false); throw ex; } }
/// <summary> /// 更新點名開始時間 /// </summary> /// <param name="eventId">活動guid</param> /// <param name="memberId">更新者id</param> /// <param name="circleId">學習圈編號</param> /// <returns></returns> public void StartEvent(int circleId, Guid eventId, int memberId) { // 1.更新開始時間 & 最後編輯時間 UpdateStartDate(eventId, memberId, true); #region // 2.點名名單檢核 var authService = new AuthService(); // 1.取得所有應該要被點名的成員 // var memberIds = AuthMember.GeFunctionMemberList(circleId, SignInFunction.Member).Select(x => x.AccountId); var memberIds = authService.GeFunctionMemberListByLinQ(circleId, SignInFunction.Member).Select(x => x.AccountId); var signIn = GetSignInInfomation(eventId); var existMembers = signInLogService.GetLogList(signIn.Id); // 2.是否有要新增點名的成員 var extraMembers = memberIds.Except(existMembers.Select(t => t.StudId)).ToArray(); var db = _uow.DbContext; if (extraMembers.Count() > 0) { var attendanceRecordService = new AttendanceRecordService(); // 3.1 整理資料-點名紀錄 var attendances = attendanceRecordService.GetInitAttendanceRecords(circleId, eventId, extraMembers); // 3.2 整理資料-核心出缺勤資料表 var logs = GetInitLogs(memberId, extraMembers); logs.ForEach(x => x.RollCallId = signIn.Id); // 3.3 整理資料-查看請假紀錄 var newLogs = CheckLeaveInfo(signIn.Created.Utc.Value.Date, logs, circleId); try { //4.1 新增點名紀錄 db.ActRollCallLog.AddRange(newLogs); //4.2 新增核心出缺勤紀錄 db.AttendanceRecord.AddRange(attendances); //執行 db.SaveChanges(); } catch (Exception ex) { throw ex; } } #endregion //// 3.更新log最後編輯時間 //var log = signInLogService.GetLogList(signIn.Id); //log.ForEach(x => { x.UpdateUser = memberId; x.Updated = TimeData.Create(DateTime.UtcNow); }); //db.SaveChanges(); }
/// <summary> /// 分发任务 /// </summary> /// <param name="ts"></param> public void Dispatch(TaskSetting ts) { ITaskRoundService trs = new TaskRoundService(this.DbString); TaskRound taskRound = null; try { if (ts.LogTaskRound) { taskRound = trs.Create(ts.TaskType); } LogUtil.Logger.Info("获取到任务信息:"); LogUtil.Logger.Info(ts.TaskType); LogUtil.Logger.Info(ts.JsonParameter); switch (ts.TaskType) { case TaskType.CalAtt: CalAttParameter calAtt = JSONHelper.parse <CalAttParameter>(ts.JsonParameter); IAttendanceRecordService ars = new AttendanceRecordService(this.DbString); //ars.CalculateAttendRecord(calAtt.AttCalculateDateTime, calAtt.ShiftCodes); ars.CalculateAttendRecordWithExtrawork(calAtt.AttCalculateDateTime); // add send email to queue SendAttWarnEmailMessage(calAtt.AttCalculateDateTime, calAtt.ShiftCodes); // create message record SendAttWarnMsgRecordMessage(calAtt.AttCalculateDateTime, calAtt.ShiftCodes); break; case TaskType.SendMail: break; case TaskType.SendAttExceptionMail: AttWarnEmailParameter attWarn = JSONHelper.parse <AttWarnEmailParameter>(ts.JsonParameter); IAttendanceRecordCalService arcs = new AttendanceRecordCalService(this.DbString); arcs.SendWarnEmail(attWarn.AttWarnDate); break; case TaskType.ToFullMemeberWarn: IMessageRecordService mrs = new MessageRecordService(this.DbString); mrs.CreateToFullMemberMessage(ts.TaskCreateAt.Date); break; case TaskType.AttExceptionWarn: AttWarnParameter attWarnP = JSONHelper.parse <AttWarnParameter>(ts.JsonParameter); IMessageRecordService mrss = new MessageRecordService(this.DbString); mrss.CreateAttExceptionMessage(attWarnP.AttWarnDate); break; case TaskType.ReStartSvc: this.IsRestartSvc = true; break; default: throw new TaskTypeNotSupportException(); } if (ts.LogTaskRound && taskRound != null) { trs.FinishTaskByUniqId(taskRound.uuid, "任务运行成功"); } } catch (Exception ex) { string msg = string.Format("{0}: {1}", ex.Message, ex.StackTrace); LogUtil.Logger.Error("任务执行错误:", ex); try { if (ts.LogTaskRound && taskRound != null) { trs.FinishTaskByUniqId(taskRound.uuid, msg, true); } } catch { } throw new Exception(msg, ex); } }
public void CalculateAttendeRcordTest() { AttendanceRecordService ars = new AttendanceRecordService(Settings.Default.db); ars.CalculateAttendRecord(DateTime.Now.Date, null, new Data.Model.Search.StaffSearchModel()); }