概述

通过AI,自动化生成Jira报告,根据用户输入的起止日期,从Jira平台抓取工单数据,经数据清洗、聚合计算,最终生成 每周人力成本.Excel 以及 研发中心周报.Word ,并提供文档下载链接,实现整个统计报告流程的AI自动化。

项目部分截图

工作流

网页入口

文档示例

项目细节

技术方案概述

(一)数据获取

利用Jira提供的API接口,通过身份验证后,根据用户指定的开始和结束日期构建查询请求,获取相关工单数据,如提出部门,开发部门,工时等关键字段。

(二)数据清洗

对抓取到的工单数据进行清洗,识别缺失值字段。根据业务规则和数据特性,采用填充默认值、过滤异常记录等方式处理数据,保证数据的完整性。

(三)数据聚合计算

利用ai大模型动态生成聚合计算的java代码,执行生成的java代码完成数据的聚合计算

(四)文档生成

将聚合计算后的数据填入 “每周人力成本” 及 “研发中心” 模板,最后生成Excel及Word文档。

挑战及应对策略

挑战:

原计划直接采用AI大模型对Jira工单数据进行聚合计算,但在实际测试中发现,当输入数据量超过一定阈值后,AI大模型的计算结果会出现显著偏差。

应对策略:

优化实现路径:
转为利用AI大模型生成聚合计算代码,通过执行生成代码完成数据处理。该方案具备双重优势:

1、确保计算准确性:
通过代码执行规避大模型直接计算的误差风险

2、保持规则灵活性:
基于提示词动态调整计算逻辑,满足持续演变的业务需求

代码生成提示词:

[角色]
资深的java程序员
[任务]
编写一个处理json数据的java方法
[需求]
待处理json数据格式示例如下:
[
        {
                "reportDepartment": "产品",
                "department": "应用研发",
                "manDay": 100
        },{
                "reportDepartment": "产品",
                "department": "应用研发",
                "manDay": 60
        },{
                "reportDepartment": "产品",
                "department": "应用研发",
                "manDay": 200
        },{
                "reportDepartment": "技术",
                "department": "未知",
                "manDay": 60,
                "key": "RCVF-12",
                "assignee": "开发者"
        }
]
参考"待处理json数据格式示例"
1、将所有json对象reportDepartment与department拼接得到allDepartment
2、将所有allDepartment相同且department不是"未知"的json对象聚合,再将聚合后所有的manDay相加得到totalManDay,最后成新的json数据,并赋值给新json的"workload"字段
3、将所有department是"未知"的json对象的reportDepartment, manDay, assignee, key字段汇总生成新的json数据,并赋值给新json的"unknowWorkload"字段
4、将新生成数据的totalManDay及manDay除以100,且不进行四舍五入,小数点后保留两位

汇总后生成新的json数据格式示例如下:
{
    "unknowWorkload": [{
        "reportDepartment": "产品",
        "manDay": 0.6,
        "key": "RCVF-12",
        "assignee": "开发者"
    }],
    "workload": [{
        "reportDepartment": "产品",
        "department": "应用研发",
        "totalManDay": 3.6
    }]
}

[代码模板]
import com.fasterxml.jackson.*

public class WorkloadHandler {
    public String gatherWorkload(Map<String, String> jsonData) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            String result = jsonData.get("result");
            if (result == null || result.isEmpty()) {
                return "[]";
            }
            JsonNode resultNode = objectMapper.readTree(result);
            JsonNode workloadJsonNode = resultNode.get("workloadList");

            // 待填充部分
         } catch (Exception e) {
            e.printStackTrace();
            return "[]";
        }
    }
}
[要求]
1、参考[代码模板],在[代码模板]的基础上填充代码,workloadJsonNode为"待处理json数据"
2、使用jackson处理json数据
3、禁止在代码中使用需要转义的字符比如|
[输出]
填充代码后的[代码模板]
作者:admin  创建时间:2025-07-01 17:59
最后编辑:admin  更新时间:2025-07-11 10:07