请假单审批的问题,如何判断前面的人已经审批过?

nimeide1234567890 2011-01-13 03:16:38


leave是请假单表
leaveApprove是审批表,其中leaveID为请假单ID,deptID为部门ID,positionID为职位ID,approve是否审批(0未审批,1已审批),positionID为3的表示为部门主管,positionID为2的表示为部门经理,positionID为6的表示人事负责人,

就拿leaveApprove里leaveID为3的这条请假单来先说清楚这个问题吧,leaveID为3的有3条数据,表示需要3个人审批,并且按id的大小顺序审批,也就是id为5的先审批,然后6审批,最后7审批,这也和职位审批顺序吻合,正好是部门主管-->部门经理-->人事负责人这样的审批顺序,

那现在假如我是人事负责人要审批属于我要审批的请假单,而且是我部门的请假单,假如我部门deptID是7,那么我找到deptID和positionID分别为7和6的数据,而且approve为0(也就是还未审批的),

那问题来了,因为我要审批的话,先要判断部门主管和部门经理审批了才该我审批吧,也就是要判断id为5和6的数据的approve为1,也就是怎么判断部门主管和部门经理的approve都为1呢?一条SQL似乎不能实现吧?
有思路的说思路,最好写出具体实现SQL,万分谢谢

...全文
563 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
emqgowyq 2011-05-27
  • 打赏
  • 举报
回复
還有個問題,部門不同請假審批的人也不同,這個問題有考慮到麼?
xuStanly 2011-01-14
  • 打赏
  • 举报
回复
业务逻辑不要写这么多SQL,P哥见了又会忍不住批评你们啦.



看业务规模,如果几十个人的小应用,写死是没问题的.
复杂的审批流应用做起来的话会非常麻烦的.
nimeide1234567890 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xustanly 的回复:]
业务逻辑不要写这么多SQL,P哥见了又会忍不住批评你们啦.



看业务规模,如果几十个人的小应用,写死是没问题的.
复杂的审批流应用做起来的话会非常麻烦的.
[/Quote]

俗话说:要做就做最好
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
SELECT *
FROM leave
WHERE (id IN
(SELECT (leaveID)
FROM leaveApprove
WHERE (leaveID IN
(SELECT leaveID
FROM leaveApprove
WHERE positionID = 6 AND deptID = 7 AND approve = 0)) AND
(approve = 1)))

原本2个表一起查询是这样的,所以一定要leaveID

FROM leave
WHERE (id IN
(SELECT (leaveID)
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pengyi_205 的回复:]
看我说得对不对,,

请假表,每插入一个请假单,

则在leaveApprove 审批表 插入多条记录,,比如请假单id 为 3 的 请假条插入时,

在 leaveApprove 表中同时插入,id 为 5,6,7的三条记录,你上面所说的要据假天数的不同,插入到

leaveApprove中表记得的条数也不同。

现在的问题是:目前该文谁审批?

我的想法是:找一个比当前……
[/Quote]

前面的说的太对了,后面的思路也很对,但我认为只要找到当前数据的前一条数据审批了,就表示这条该自己审批了,因为前面一条如果审批了,就代表前面的前面的一条也审批,依次类推,所以现在的问题是如何找到当前数据的前一条数据审批过?

SELECT leaveID
FROM leaveApprove
WHERE (leaveID IN
(SELECT leaveID
FROM leaveApprove
WHERE positionID = 6 AND deptID = 7 AND approve = 0)) AND
(approve = 1)

只能在这个基础上改
夺命胖子 2011-01-13
  • 打赏
  • 举报
回复
看我说得对不对,,

请假表,每插入一个请假单,

则在leaveApprove 审批表 插入多条记录,,比如请假单id 为 3 的 请假条插入时,

在 leaveApprove 表中同时插入,id 为 5,6,7的三条记录,你上面所说的要据假天数的不同,插入到

leaveApprove中表记得的条数也不同。

现在的问题是:目前该文谁审批?

我的想法是:找一个比当前审批id=7 小的 leaveID=3 and approve=1 的最大id

select max(id) from leaveApprove where leaveID=3 and approve=1 and id<7

同时这个id 在去掉条件approve=1 后仍然不变。


select max(id) from leaveApprove where leaveID=3 and id<7


两条语句所得的max(id) 相等。说明就该id=7的家伙审批。
ly19870605 2011-01-13
  • 打赏
  • 举报
回复
说个简单完整的思路吧。


你可以写到数据库,或则写死。
web.config:
<add key="2天" value="3,6"/>
<add key="2-5天" value="3,2,6"/>
<add key="5天以上" value="3,2,4,6"/>
意思就是判断当前用户是请的几天假,对应找出value的值。
value就是我开始说的职务ID。

获取到value后就可以找到string aa=value.split(',');
int bb=aa.length

SQL获取 Where ID in (value) And approve=1 就可以查出此SQl语句的DataSet
获取返回的行。int cc=tbl.rows.count

if(bb==cc){显示给自己审批。}
else{不显示}
yan267 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yan267 的回复:]
select * from leaveApprove where leaveID in (select leaveID from leaveApprove
where approve=1 and positionID=下级的ID
)

就是当前需要审批的。

只要你级别是一级一级的关系,只需要找出你下级审批过的就可以了,你下级的下级是否审批不关你的事,而关你下级的事,
[/Quote]

你部门没有表表示 positionID 6 是positionID为2的上级么?

如果你确定
select * from leaveApprove where leaveID in (select leaveID from leaveApprove
where approve=1 and positionID=2) and positionID=6 and approve=0

6 只需要审核 2 已经审核过的,并且属于6的,没有审核过的。

大概思路就是这样了。




nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hj_daxian 的回复:]
这个流程貌似不算复杂呀
[/Quote]

你坐着说话不腰疼,你搞出来啊?
  • 打赏
  • 举报
回复
这个流程貌似不算复杂呀
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ihandler 的回复:]
建议有个表来记录审批流向,如 from to
[/Quote]

已经是2个表了啊
IHandler 2011-01-13
  • 打赏
  • 举报
回复
建议有个表来记录审批流向,如 from to
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ly19870605 的回复:]
引用 5 楼 luojianfeng 的回复:
引用 2 楼 ly19870605 的回复:
通过sql语句,找到自己的职位。并且找到自己管辖的职位ID,
例如:自己的ID=7,管辖ID=5,6;
那么可以通过SQL语句判断Where ID in (5,6) And approve=1 的。才显示给ID=7的自己看。



这样写的结果是前面审批人只要一个人审批了就表示都审批了,这……
[/Quote]


positionID为3的表示为部门主管,positionID为2的表示为部门经理,4为总经理,positionID为6的表示人事负责人

请假单根据天数来跑流程:
比如2天内的跑 3,6
2天到5天的跑 3,2,6
5天以上的跑 3,2,4,6

懂吗?
ly19870605 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luojianfeng 的回复:]
引用 2 楼 ly19870605 的回复:
通过sql语句,找到自己的职位。并且找到自己管辖的职位ID,
例如:自己的ID=7,管辖ID=5,6;
那么可以通过SQL语句判断Where ID in (5,6) And approve=1 的。才显示给ID=7的自己看。



这样写的结果是前面审批人只要一个人审批了就表示都审批了,这样不对吧
[/Quote]

写法不对,但思路是对的。。。你可以用我提供的思路。
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yan267 的回复:]
select * from leaveApprove where leaveID in (select leaveID from leaveApprove
where approve=1 and positionID=下级的ID
)

就是当前需要审批的。

只要你级别是一级一级的关系,只需要找出你下级审批过的就可以了,你下级的下级是否审批不关你的事,而关你下级的事,
[/Quote]

不对
yan267 2011-01-13
  • 打赏
  • 举报
回复
select * from leaveApprove where leaveID in (select leaveID from leaveApprove
where approve=1 and positionID=下级的ID
)

就是当前需要审批的。

只要你级别是一级一级的关系,只需要找出你下级审批过的就可以了,你下级的下级是否审批不关你的事,而关你下级的事,
nimeide1234567890 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ly19870605 的回复:]
通过sql语句,找到自己的职位。并且找到自己管辖的职位ID,
例如:自己的ID=7,管辖ID=5,6;
那么可以通过SQL语句判断Where ID in (5,6) And approve=1 的。才显示给ID=7的自己看。
[/Quote]


这样写的结果是前面审批人只要一个人审批了就表示都审批了,这样不对吧
笨熊熊 2011-01-13
  • 打赏
  • 举报
回复
而且不需要生成幾條紀錄。。
直接一條紀錄就可以。。
字段爲主管_app,經理_app,人事_app.
笨熊熊 2011-01-13
  • 打赏
  • 举报
回复
你在讀取數據的時候SQL直接就加上條件。判斷前面的是否已經審批
沒有審批你那就看不到。。
只有審批過了你那才能看到那條紀錄。。
ly19870605 2011-01-13
  • 打赏
  • 举报
回复
通过sql语句,找到自己的职位。并且找到自己管辖的职位ID,
例如:自己的ID=7,管辖ID=5,6;
那么可以通过SQL语句判断Where ID in (5,6) And approve=1 的。才显示给ID=7的自己看。


加载更多回复(1)
基于ssm的高校在线请假与审批系统 Java;SSM;MySQL;JSP; 本文使用jsp,mysql为开发工具,进行系统开发,实现了学生请假管理系统中系统管理、请假信息数据库管理、信息修改等功能。其中系统管理包括登录、退出、学生部分、教师部分、管理员等模块。给予高校管理学生请假信息带来了极大便利。 请假管理系统是学生实现请假的整个过程。所以其包括请假信息申请,我的申请查询,审核信息查询等。学生(student): 请假系统的主要服务对象之一,也是服务数量最多的对象。主要负责提交本人的请假开始到结束时间、请假的详细原因。学生可以通过在线请假系统在任何可以上网的设备上提交请假单据信息,也可以在线进行销假,只需要等待教师申请通过即可。 老师具有查询学生信息,管理学生请假和销假的申请处理功能。教师在线审批请假前必须确认学生请假的情况是否属实,在对请假单审核通过情况。请假功能也是本系统关键所在,前面所准备是为了请假功能实现做好基础。通过学生的提交信息,教师在网页上进行审核,再把信息返回给学生,学生就能在自己的网页看看过审核结果。本功能,避免了学生因没及时找到老师,而延误了请假的时间;避免了学生假签的情况。同时也为学生请假服务做出力进一步的贡献。 请假功能的实现,提高了学生请假管理的效率,也为学生请假信息的备案,使得学生工作管理者,在任意时间,只要在能上网的设备,均能实现请假审核和查看学生请假信息。教师,班主任辅导员等及时有效准确的掌握了学生请假的信息。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧