示例#1
0
        public void CreateLeaveApplication(LeaveApplication leaveApplication)
        {
            if (IsScheduleConflict(leaveApplication))
            {
                throw new InvalidOperationException("当前请假时间和已存在的请假申请冲突");
            }
            AnnualLeaveStatistic annualLeaveStatistic = GetAnnualLeaveStatistic(leaveApplication.Initiator);

            if (leaveApplication.TotalDays > annualLeaveStatistic.RemainingDays)
            {
                throw new InvalidOperationException("剩余假期不足,请重新选择请假时间");
            }
            annualLeaveStatistic.RemainingDays = annualLeaveStatistic.RemainingDays - leaveApplication.TotalDays;
            leaveApplication.TaskState         = TaskState.Applying;
            using (DbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    _context.LeaveApplications.Add(leaveApplication);
                    _context.AnnualLeaveStatistics.Attach(annualLeaveStatistic);
                    _context.Entry(annualLeaveStatistic).State = EntityState.Modified;
                    _context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    _logger.Error(e.Message, e);
                    throw;
                }
            }
        }
示例#2
0
        public ReturnResult ModifyMeeting(Meeting meeting)
        {
            ReturnResult returnResult = new ReturnResult();

            if (!IsScheduleConflict(meeting))
            {
                lock (_locker)
                {
                    using (DbContextTransaction transaction = _context.Database.BeginTransaction())
                    {
                        try
                        {
                            _context.Attendees.Attach(meeting.Attendee);
                            _context.Entry(meeting.Attendee).State = EntityState.Modified;
                            _context.Meetings.Attach(meeting);
                            _context.Entry(meeting).State = EntityState.Modified;
                            _context.SaveChanges();
                            transaction.Commit();
                            returnResult.Result = true;
                            return(returnResult);
                        }
                        catch (Exception e)
                        {
                            transaction.Rollback();
                            returnResult.Result  = false;
                            returnResult.Message = e.Message;
                            _logger.Error("Faild to modify a Meeting", e);
                            return(returnResult);
                        }
                    }
                }
            }
            returnResult.Result  = false;
            returnResult.Message = "会议时间冲突";
            return(returnResult);
        }