zoukankan      html  css  js  c++  java
  • 禅道统计BUG解决时长过滤节假日和跨天问题

    之前发过禅道的各种数据统计报表,使用过程中优化了一些,反映最多的是项目bug的解决时长统计问题:

    1.比如当天下班左右提交的bug,研发第二天来解决,晚上这段时间应该去掉,不应计算在内

    2.节假日、周末这些时间也应该去掉

    python有公用模块chinesecalendar可以解决解决第二个问题,不过这个模块有个缺陷,每年需要更新一下,获取当年的节假日,当然你也可以把节假日周末信息存入数据库动态调整获取。

    common_workday.py  计算两个时间内的休息日天数
     1 ##common_workday.py
     2 
     3 
     4 # coding = utf-8
     5 # 计算周末、节假日时间天数
     6 
     7 from datetime import datetime, timedelta
     8 from chinese_calendar import is_workday
     9 
    10 
    11 def workdays(start, end):
    12     """
    13     :param start:
    14     :param end:
    15     :return:
    16     """
    17     # 字符串格式日期的处理
    18     if type(start) == str:
    19         start = datetime.strptime(start, '%Y-%m-%d').date()
    20     if type(end) == str:
    21         end = datetime.strptime(end, '%Y-%m-%d').date()
    22     # 开始日期大,颠倒开始日期和结束日期
    23     if start > end:
    24         start, end = end, start
    25     counts = 0
    26     while True:
    27         if start > end:
    28             break
    29         # 计算两个日期间的节假日和周末数
    30         if is_workday(start) is False:
    31             counts += 1
    32         start += timedelta(days=1)
    33     return counts

    bug_time_summary.py  统计汇总时间(从数据库查询出数据后直接处理)

    ## bug_time_summary.py
    
    ##*****代码片段*****##
    
    mysql_l = deal_mysql(sys._getframe())
    if len(mysql_l) > 0:
        le = []
        for i in mysql_l:
            le.append(list(i))
        for i in le:
            # bug解决时间减去bug提交时间
            ta = round(float((i[7] - i[6]).total_seconds() / 3600), 2)
            # 两个时间之间的周末、节假日天数
            tb = float(workday.workdays(i[6].date(), i[7].date()) * 24)
            hour_sub = 0
            if i[6].day != i[7].day and i[6].hour >= 17:
                # 17点后提交的bug,计算需扣除的跨天小时数【8.5:计算方式自己动态调整,9点上班,考虑有人8点半来就修复bug了,所以取个8.5,提交bug分钟数舍弃计算,影响不大;另外17点之前提交的bug,不排除跨天时间】
                hour_sub = 24 - i[6].hour + 8.5
            # 最终结果
            time_subtract = round(ta - tb - hour_sub, 2)
            i.append(time_subtract)
        end = []
        name = ''
        count = 0
        avg_time = 0
        for index, i in enumerate(le):
            if index == 0:
                name = i[5]
                count = 1
                avg_time = i[8]
            else:
                if i[5] == name:
                    count += 1
                    avg_time += i[8]
                    if index == len(le) - 1:
                        end.append([le[index][0], le[index][1], le[index][5], count, round(avg_time / count, 2)])
                else:
                    end.append([le[index - 1][0], le[index - 1][1], le[index - 1][5], count, round(avg_time / count, 2)])
                    name = i[5]
                    count = 1
                    avg_time = i[8]
                    if index == len(le) - 1:
                        end.append([le[index][0], le[index][1], le[index][5], count, round(avg_time / count, 2)])
        sum_p = 0
        sum_time = 0
        for i in end:
            sum_p += i[3]
            sum_time += i[4]*i[3]
        avn = round(sum_time / sum_p, 2)
        end = sorted(end, key=lambda x: x[3], reverse=True)
        data = np.tile(end, 1)
        d = data.T
        # 获取列表合并算法
        al = dt.find_same_column(d, 1)
        # td 处理
        td = deal_td(al)
        # tr处理
        tr = deal_tr(td)
        s, h = deal_html(tr, avn)
    ##*****代码片段*****##

    改进前:

     改进后:

    同样的详情表也可以这样处理~~

  • 相关阅读:
    JPA总结——实体关系映射(一对多@OneToMany)
    JPA——映射持久化对象(Entity)
    jackson annotations注解详解
    Spring Data JPA
    Spring Data JPA初使用
    Spring注解Annotion详解
    JPA概要
    The requested resource is not available错误
    Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
    Spring——Eclipse上安装springsource-tool-suite与jar包详解
  • 原文地址:https://www.cnblogs.com/drewgg/p/13261106.html
Copyright © 2011-2022 走看看