关于工作日历的思考

来源:互联网 发布:中国软件测评中心 编辑:程序博客网 时间:2024/05/17 02:41

    企业都有自己的工作日历,工作日历是企业安排生产的基础数据。如果使用计算机辅助企业的管理,工作日历编制、维护和使用是企业管理软件所必需的。如何能快速编制工作日历,工作时间改变时方便的维护工作日历,而在使用工作日历时能够提高程序运行的效率?

    我只接触过一个企业管理软件,它定义工作日历的方式是在数据库中定义一个工作日历的表,一般每次都是定义一年的日历,不管是工作日还是休息日,都按时间顺序添加到这张表中,表中每一条记录对应一个日期,如果某个日期是休息日,就在一个字段中标记它是休息日,如果是工作日就不标记,另外如果有不同的部门使用不同的工作日历的情况,还要为每一个部门按上面的方法定义工作日历。这样的方式,如果有三个部门,一年就要有3×365条数据库记录,再加几个部门、多做几年的日历,可想而知数据量还是不小的。这样的定义方式我不知道好处在哪里,也许可以为每一天添加特定的而外信息?另外在使用工作日历的时候如果涉及到计算的问题(我所涉及到的计算有:1.根据计划开始时间和有效工时计算计划的结束时间;2.根据计划的结束时间和有效工时反算计划的开始时间;3.根据计划的开始时间和结束时间计算有效工时。这些都涉及到跳过工作日历中的休息日的问题),用数据库的方式将会影响计算速度以及占用过多的系统资源。我认为最好的方式是当然是使用数组了,在实际应用中我也是将数据库中的数据读入到一个数组中,再使用数组进行运算,但是转换过程中遍历数据集中的几百条数据也让人不爽。

    以下是我对工作日历定义的几点思考。

    第一,只定义休息日。休息日在一年当中的比例毕竟是少数,只定义休息日就可以了,没定义的就是工作日,没有必要一年365天就用365条数据来定义。我曾有个更偷懒想法,用3个数据来定义:1.定义正常情况下每周星期几是休息日(比如星期六和星期日)2.定义正常情况下的工作日中有哪些是休息日(比如星期一至星期五正常的工作日中有哪些日子也是休息的)3.定义正常情况下的休息日中有哪些是工作日(比如星期六和星期日正常休息日中有哪些日子是需要工作的),有了这有了这三个数据就可以用最少的信息描述整个工作日历。但是后来发现,想法虽然好,但是在应用上实现比较麻烦,更大的问题是:如果上边说的第一条数据改变了(比如一直都是星期六星期日休息,后来订单增多,改为只休星期天),为了考虑这种变化,还要添加第4个数据:有效期,这样一来算法更加复杂,所以这种工作日历的定义方式最终被自己否决了。

    第二,将一个部门的所有休息日定义到一个数组(集合)中去List<DateTime> dateList;用序列化/反序列化(Serialize/Deserialize)的方式对集合进行存取操作。可以存在文件中也可以存在数据库里,存在数据库时用一条记录的一个字段就可以存放一个部门的整个工作日历。

    最后,只要个用户提供一个方便直观的定义界面就可以了,用户不会去管你如何定义和储取实现细节的。

 

工作日历Demo

原创粉丝点击