如何计算两个日期之间的工作日天数原创
金蝶云社区-陈来珍
陈来珍
3人赞赏了该文章 1,229次浏览 未经作者许可,禁止转载编辑于2023年10月25日 17:36:00

关键词:工作日历、工作日

一、需求

研发项目单据中,需要在维护完日期之后,根据系统维护的工作日历,自动计算出该日期范围内的工作日的天数。

image.png


image.png

二、思路与方案

1、进入系统工作日历,系统自动打开日历设置界面。

      (1)系统路径:

            V5.0及以下:【系统服务云】→【基础资料】→【公共数据】→【工作日历】

            V6.0.1:【基础服务云】→【基础资料】→【公共数据】→【工作日历】

       (2) 工作日历实体是:bd_workcalendar,在单据体dateentry中存储了所有有效日期的日期类型(休息日、工作日、半工作日、节假日)。

image.png

2、计算思路:值更新事件中,通过接口BaseDataServiceHelper查出某组织,例如集团公司cosmic-simple对应的工作日历,然后遍历在选择的日期范围内为工作日的天数。

三、实现过程

/**
 * 单据界面插件
 */
public class DevProjectEditPlugin extends AbstractBillPlugIn implements Plugin {

    @Override
    public void propertyChanged(PropertyChangedArgs e) {
        String name =e.getProperty().getName();
        if (name.equals("sunp_datestart")||name.equals("sunp_dateend")){
            Date datestart = (Date) this.getModel().getValue("sunp_datestart");
            Date dateend = (Date) this.getModel().getValue("sunp_dateend");
            if (datestart==null||dateend==null){
                this.getModel().setValue("sunp_days",0);
                return;
            }
            DynamicObject org = QueryServiceHelper.queryOne("bos_org", "id", new QFilter[]{new QFilter("number", QCP.equals, "cosmic-simple")});
            BaseDataServiceHelper bd=new BaseDataServiceHelper();
            //根据某集团组织查出该组织下的工作日历
            DynamicObject workCalendar = bd.getWorkCalendar(org.getLong("id"));
            if (workCalendar==null) {
                 return;
            }
            DynamicObjectCollection dateentry = workCalendar.getDynamicObjectCollection("dateentry");
            int days=0;
            for(DynamicObject date:dateentry){
                Date nowdate = date.getDate("workdate");
                //判断在日期范围内为工作日的天数
                if (nowdate.compareTo(datestart)>=0&&nowdate.compareTo(dateend)<=0&&date.get("datetype").equals("1")){
                    days++;
                }
            }
            this.getModel().setValue("sunp_days",days);
        }
        super.propertyChanged(e);
    }
}

四、效果图

image.png

五、开发环境版本

V5.0.011

六、参考资料

https://vip.kingdee.com/article/13235?productLineId=29&isKnowledge=2


图标赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0