会议室预定系统

最近完成的小系统,会议室预定系统。可预览:

 

 技术分析:
1,准备一个表,存储会议室,可以添加,编辑,启用或禁用(为控制某一会议室是否显示给用户在预定时是否可见),删除功能,可有可无,如果实现,当删除时,需要写触发器,把此预定过此会议室的记录一同删除。

2,准备两个表,存储时间记录(id,TimeName),每半个小时,如00:00,00:30,01:00直至23:30;另一个表是存储星期(id,weekName),你可以存储中文或是英文星期名称。这两个表均是为用户选择时间而准备。

3,预定你可以使用用户登录功能,登录成功之后,才可以预定,这样可以实现不同的人可以管理好自己的预定记录。

4,会议类型分为一次性,或是周期性。一次性的会议,日期需大于或等于当天。而开始时间,还需要判断,始时间须大于当前时间加上一小时。因为系统会预留半小时,不够半小时的,算够半小时。系统会作发送邮件。

5,准备一个表,存储预定记录,(id,会议室Id,WeekName,预定日期,开始,结束,...)上面使用中文,只是为了更好作解释。存储预定记录时,如果是周期性的,预定日期字段是为空的。另外,如果是存储一次性,预定日期字段不能为空,或是weekName要把预定日期转换算出是星期几填充WeekName字段,这样我们为下面判断时间是否有冲突,就方便多了。

5,判断预定时间是否有冲突,同一会议室,不管是一次性,还是周期性,时间不能重叠。

View Code
IF EXISTS (SELECT TOP 1 1 FROM [xxx] WHERE [MRId] = @MRId AND [WeekName] = @W AND @StartTime < [EndTime] AND @EndTime > [StartTime])
BEGIN
    
RAISERROR(N'不能预定此会议室,会议时间发生重叠。',16,1)
    
RETURN
END

 

 6,预定成功,给预定人和会议联系人发送会议室预定成功的邮件。

7,写一个进程,30秒判断一次,当前的时间,分钟部分是否为00或是30,如果是的话,把当前这个时间加半小时,去判断预定开始时间是否相同,如果相同,发送邮件。

View Code
 int currentHour = e.SignalTime.Hour;
            
int currentMinute = e.SignalTime.Minute;

            
if (currentMinute == 0 || currentMinute == 30)
            {
                
try
                {
                    AutomationEntity objAutomationEntity 
= new AutomationEntity();
                    objAutomationEntity.MeetingNotify(currentHour, currentMinute);
                }
                
catch (Exception ex)
                {
                    
throw new Exception(ex.Message);
                }
            }

 

上面有一个方法MeetingNotify(xxx,xxx):

View Code
 public void MeetingNotify(int currentHour, int currentMinute)
        {
            
int cHour = 0;
            
int cMinute = 0;

            
if (currentMinute == 0)
            {
                cHour 
= currentHour;
                cMinute 
= 30;
            }

            
if (currentMinute == 30)
            {
                cHour 
= currentHour + 1;
                cMinute 
= 0;
            }     

            
//传入数据库
        }

 

8,最后一个需要说的,就是会议参与人的字段,在发送邮件时,需要在SQL做split。sql没有此函数,但你可以在网上找到很多相关的方法。

 

另外,提供一下前端页面显示:

 

今天的预定:

SELECT ...
FROM [dbo].[xxx]
WHERE [MRId] <> 1 AND ([WeekName] = DATENAME(w,CURRENT_TIMESTAMPOR [BookingDate] = CAST(CURRENT_TIMESTAMP AS DATE))


明天的预定:

DECLARE @tomorrow DATE = DATEADD(day,1,CURRENT_TIMESTAMP)

SELECT ...
FROM [dbo].[xxx]
WHERE [MRId] <> 1 AND ([WeekName] = DATENAME(w,@tomorrowOR [BookingDate] = @tomorrow)

 

本周的预定,本月和所有的预定存储过程略。

取消或是过期:

首先要写一个预定记录Status的函数:

DECLARE @BookingDateTime DATETIME = '预定日期' + '开始时间'
    
    
IF (@IsEnable = 0)
        
SET @ReturnValue = 1 --取消
    
    
IF ('一次性' AND (@BookingDateTime < CURRENT_TIMESTAMP))
        
SET @ReturnValue = 2 --过期
        
    
IF     (@IsEnable = 0 AND '一次性' AND@BookingDateTime < CURRENT_TIMESTAMP))
        
SET @ReturnValue = 3 --取消与过期

  

SELECT ...
FROM [dbo].[xxx]
WHERE [MRId] <> 1  AND [Status] <> 0

 

posted @ 2011-08-27 08:52  Insus.NET  阅读(4831)  评论(2编辑  收藏  举报