Example #1
0
        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);
        }
Example #2
0
        /// <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;
            }
        }
Example #3
0
        /// <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();
        }
Example #4
0
        /// <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());
        }