This Domain(Admin5.com) is for Sale:

关于值班管理的数据库存储过程

时间:2007-12-23  来源:不详  作者:迈克DB
一个bt主任的要求 值班治理 要求如下

1 一组队列 n 个人, 有4种角色,领导,汉子,大妈,司机。n个人根据自己角色按顺序排好队 织梦内容管理系统

2 值班要求:周一到周日 1个领导值班1个司机值班;周一到周日 每晚1个汉子 值班;周六 周日 上午下午2个大妈值班;假期天天1个领导1个司机1个汉子上午下午2个大妈 copyright dedecms

3 要求队列可增删查该 ,人员顺序可以调整,队列发生变化时,值班表自动更新 织梦好,好织梦

4 要求队列人员随时可以抽调对列中的人员不参加本轮排序(出差或请假)下轮继续按队列顺序排序,人员抽调后 ,队列自动向前顶替 dedecms.com

5 换班等... dedecms.com

建2个表

dedecms.com

1 watching

本文来自织梦

[datetime] 日期 [weekday]星期 [leaderid]领导id [maleid]汉子id [female1]大妈1id [female2]大妈2id[driverid] 司机id [mark]备注 内容来自dedecms

2 watching_person copyright dedecms

[ordercode]人员编号 [personid] 人员id [part]人员角色 [leave]是否离开 [mark]备注

copyright dedecms

part 为人员角色 1领导2汉子3大妈4司机

内容来自dedecms

当新的队列产生时需要更细从明天以后的值班安排表(此处为30天),然后将 按角色排队好的 起始位置传给存储过程 (即 领到从第几位开始排 司机从第几位开始排 汉子 大妈...)
织梦内容管理系统

create proc Proc_WatchingSetup
--参数为四种角色的起始位置
@leader int,
@Male int,
@Female int,
@Driver int
as 内容来自dedecms

declare @i int --计数器
declare @j int
declare @PersonID int
declare @weekday int
declare @InsertPoint datetime
declare @msg char(20) 织梦好,好织梦

set @i=1
set @j=1 dedecms.com

-- 事务开始
Begin tran ReChange
--删除明天以后的记录(队列已改变删除以前的)
delete from Watching where [Datetime]>GetDate() copyright dedecms

if (@@error <>0)
Begin
rollback tran
set @msg='error1'
return
end

织梦好,好织梦

--重新插入后30天的日期和星期
while @i<=30
begin
insert Watching (Datetime,WeekDay) values (dateadd(day,@i,{fn curdate()}),datepart(weekday,dateadd(day,@i,{fn curdate()})))
set @i=@i 1
end

织梦好,好织梦

if (@@error !=0)
Begin
rollback tran
set @msg='error2'
return
end 织梦内容管理系统

--开始使用游标 织梦好,好织梦

set @j=1

dedecms.com

--////首先按排队顺序读出领导的队列 dedecms.com

declare cur_watchingPerson scroll cursor For
select Personid from watching_person where part=1 order by orderCode asc

织梦好,好织梦

open cur_watchingPerson 内容来自dedecms

--移动到开始位置
fetch absolute @leader from cur_watchingPerson into @PersonID
if @@fetch_status=-1
fetch first from cur_watchingperson into @PersonID 织梦好,好织梦

set @i=1

本文来自织梦


while @i<=30
begin 本文来自织梦

while @j<=7 --最长可能是1人插入7天
begin
update watching set LeaderId=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))
if (@@error !=0)
Begin
rollback tran
set @msg='error3'
return
end
--假如不足7天就到周末 退出循环 换人
select @weekday=datepart(weekday,dateadd(day,@i,{fn curdate()}))
set @i=@i 1
if (@weekday=1)
break

end 织梦好,好织梦

set @j=1

fetch next from cur_watchingperson into @PersonID
-- 假如超出边界 回头队列第一位
if @@fetch_status=-1
fetch first from cur_watchingperson into @PersonID
end

dedecms.com

Close cur_watchingPerson
deallocate cur_watchingPerson

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息