c# - 在员工管理系统中实现假期

标签 c# asp.net sql-server database webforms

我正在开发一个员工管理系统,员工可以在其中

  • 打卡/打卡(标记每日出勤)
  • 申请休假,即生病
  • 生成报告,即他们每天的入住/退房时间、总工作时间等。

现在我要介绍一种方法来处理这些报表中的公共(public)假期和员工缺勤。我在网上看了一些文章比如

但我什么也想不通。我的问题基本上是。

  • 处理员工缺勤的最佳方法是什么?考虑到员工不会在那一天签到这一事实。

  • 如何在报告中添加/指定周末/公共(public)假期?由于 future 更改公共(public)/常规假期很可能会影响我们前几个月的报告。

非常感谢您的帮助! 谢谢

最佳答案

很少(如果有的话)数据库将日期范围作为一种数据类型来处理,虽然有一些方法可以计算日期范围交集,但它们很昂贵,并且会导致任何大型数据集被抓取。因此你需要用计算速度来换取数据存储

因此,最好的检查方法是有一个存储日期的表,然后使用该表中的日期将日期范围扩大到范围内的所有日期,结构很简单,只有一个包含日期的列在里面

我不建议使用日期表来跟踪假期,而只是将这些作为“公共(public)假期”类型的缺席包括在内,您可能想在日期表中标记周末(或一周中的哪一天),但不要不要用它来表示一个人那天是否工作,而是有一个 workingPattern 表,上面写着 factory worker 类型的员工周一工作 4 小时,周二工作 6 小时。这将为您提供员工的预期工作时间以及他们一周内预计工作的天数,而不会强制每个员工遵循相同的工作模式

例如

select d.Date, a.*
from absence as a
join dates as d on d.Date between a.StartDate and a.EndDate

然后这将为您提供此人缺席的每个日期,让您可以非常轻松地比较不同的缺席时间

大多数雇佣系统很少允许员工提前一年以上工作,所以我建议有一个每月运行的工作,并使用 (今天 + 12 个月)(今天 + 13 个月) 您也可以删除旧日期,但在执行此操作之前,请确保没有需要查询数据的情况。即,您离开的最晚日期之前的所有内容都已存档。

接下来要记住的是人为因素,人们会忘记上类或下类打卡,因此您需要牢记这一点,并有一份日常工作来寻找没有匹配打卡下类的打卡,反之亦然, 然后您可以标记这些以供人工更正或自动处理它们

一旦你对这两个元素进行排序,你就可以计算每个人每天的工作时间,将其交叉连接到每日缺勤 View ,这将允许你检查不一致,比如日期表上没有打卡或缺勤的日期(未经授权absence)可以通过缺勤表中的适当条目或冲突来纠正,例如有人在他们应该休假的时候上类,你可以再次标记为人工更正或自动处理,比如如果打卡存在则忽略缺勤

你实际如何构建你的系统取决于你的系统需要什么,但如果你不考虑这些因素,这些是会杀死你的系统的常见因素

关于c# - 在员工管理系统中实现假期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562078/

相关文章:

c# - 除了 LOCALMACHINE - 没有管理权限的注册表之外,我可以在哪里放置普通用户数据

c# - 如何使用C#创建.ics文件?

c# - 使用 C# Sql Reader 从 SQL Server 表中检索日期时间值

c# - ExecuteScalarAsync 挂起但 ExecuteScalar 立即返回

c# - 是否可以扩展 DataColumn.Expression

c# - 如何从 WIA 相机获取视频?

c# - 如果URL包含“#”,如何在C#中获取页面的完整URL?

sql - 如何从 SSMS 获取完整结果集

c# - 更新对从 linq 查询返回的对象的原始引用

c# - 全局覆盖 ASP.Net MVC 默认属性错误消息