首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python实现自动计算排工期

一、需求说明

如果大家涉及到项目管理的话,那么一定逃不掉规划工期。由于在规划工期的时候需要考虑将法定节假日和周六日进行去除,所以许多人都会打开日历,一天一天的去计算。这样效率即慢,同时也容易出现错误,那么如何快速实现工期的排定呢?

假设开发的过程和顺序如下(其他行业的当然也可以自行调整):

开发测试辅助测试预上线测试提审上线

二、需求分析

1.任务并行和串行情况

测试&UI跟测&产品跟测由于任务性质为并行,其他的都为串行

UI跟测开始时间=测试开始时间

产品跟测结束时间=测试结束时间

备注:所有的开始和结束时间都算作正常的工期内

2.工作日计算方式

需去除国家法定家假日和周六日

三、程序实现

1.运行环境

win10+pthon3.9.6+pycharm2020.1.1

2.三方库

chinese_calendar:主要使用其is_workday判断指定日期是否为节假日【chinese_calendar为2024年11月30日导入的最新版本,后续若想使用最新的法定节假日,可自行更新版本】

datetime:用于转化日期

openpyxl:用于导出excel

3.实现步骤

3.1初始化开始时间和各阶段所需工期

kaifa_start_date = datetime.date(2024, 12, 2)#开发开始时间

kaifa_workdays = 12 #开发时间

ceshi_workdays = 8 #测试时间

uitest_workdays = 3 #UI跟测时间

pmtest_workdays = 3 #产品跟测时间

fuzhutest_workdays = 3 #辅助测试时间

yushangxiantest_workdays = 1 #预上线测试时间

tishen_workdays = 1 #提审时间

shangxian_workdays =1 #上线时间

3.2书写工具方法(主要是计算工作日加减)

#1.计算两个日期内的工作日天数

def count_workdays(start_date, end_date):

workdays = 0

current_date = start_date

while current_date <= end_date:

if is_workday(current_date):

workdays += 1

current_date += datetime.timedelta(days=1)

return workdays

#2.在当前日期的基础上,增加固定的工作日(不含周六日和法定节假日)

def add_workdays(start_date, workdays):

current_date = start_date

workdays -= 1

while workdays >0 :

current_date += datetime.timedelta(days = 1)

if is_workday(current_date):

workdays -= 1

return current_date

#3.在当前日期的基础上,减少固定的工作日(不含周六日和法定节假日)

def reduce_workdays(end_date, workdays):

current_date = end_date

while workdays > 0:

current_date -= datetime.timedelta(days = 1)

if is_workday(current_date):

workdays -= 1

return current_date

3.3计算和存储所有开发的时间

dict_array = []

#开发时间

kaifa_end_date = add_workdays(kaifa_start_date,kaifa_workdays)

dict_array.append({"阶段名称":"开发","开始时间":kaifa_start_date,"结束时间":kaifa_end_date,"当前状态":"进行中","工作日":kaifa_workdays})

#测试环境测试时间

ceshi_start_date = add_workdays(kaifa_end_date,2)

ceshi_end_date = add_workdays(ceshi_start_date,ceshi_workdays)

dict_array.append({"阶段名称":"测试环境测试","开始时间":ceshi_start_date,"结束时间":ceshi_end_date,"当前状态":"进行中","工作日":ceshi_workdays})

#UI跟测时间

ui_start_date = add_workdays(ceshi_start_date,1)

ui_end_date = add_workdays(ui_start_date,uitest_workdays)

dict_array.append({"阶段名称":"UI人员跟测","开始时间":ui_start_date,"结束时间":ui_end_date,"当前状态":"进行中","工作日":uitest_workdays})

#产品跟测时间

pm_end_date = ceshi_end_date

pm_start_date = reduce_workdays(ceshi_end_date,pmtest_workdays-1)

dict_array.append({"阶段名称":"产品人员跟测","开始时间":pm_start_date,"结束时间":pm_end_date,"当前状态":"进行中","工作日":pmtest_workdays})

#辅助测试时间

fuzhutest_start_date = add_workdays(ceshi_end_date,2)

fuzhutest_end_date = add_workdays(fuzhutest_start_date,fuzhutest_workdays)

dict_array.append({"阶段名称":"辅助测试","开始时间":fuzhutest_start_date,"结束时间":fuzhutest_end_date,"当前状态":"进行中","工作日":fuzhutest_workdays})

#预上线测试时间

yushangxiantest_start_date = add_workdays(fuzhutest_end_date,2)

yushangxiantest_end_date = add_workdays(yushangxiantest_start_date,yushangxiantest_workdays)

dict_array.append({"阶段名称":"准线上环境测试","开始时间":yushangxiantest_start_date,"结束时间":yushangxiantest_end_date,"当前状态":"进行中","工作日":yushangxiantest_workdays})

#提审时间

tishen_start_date = add_workdays(yushangxiantest_end_date,2)

tishen_end_date = add_workdays(tishen_start_date,tishen_workdays)

dict_array.append({"阶段名称":"提审","开始时间":tishen_start_date,"结束时间":tishen_end_date,"当前状态":"进行中","工作日":tishen_workdays})

#上线时间

shangxian_start_date = add_workdays(tishen_end_date,2)

shangxian_end_date = add_workdays(shangxian_start_date,shangxian_workdays)

dict_array.append({"阶段名称":"上线","开始时间":shangxian_start_date,"结束时间":shangxian_end_date,"当前状态":"进行中","工作日":shangxian_workdays})

3.4将所有的数据导出到excel

四、程序运行

后续每次只需要修改3.1初始化开始时间和各阶段所需工期参数,然后运行即可,将工期.xlsx文件拷贝出去即可,希望能够帮助到大家。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OlRkIdJJ4PbPxi0oWv5zBG8Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券