https://mp.weixin.qq.com/s/X2_YNKzTVo2NjbdAk4OcVw
Code Block |
---|
// API访问凭证端口 def endPoint = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/" // 飞书机器人应用凭证的App ID def appID = "xxx" // 飞书机器人应用凭证的App Secret def appSecret = "yyy" // 设置所要发送消息的Jira用户组列表 def userGroups = ["研发部", "质量部"] def groupManager = ComponentAccessor.getGroupManager() def userManager = ComponentAccessor.getUserManager() def userPropertyManager = ComponentAccessor.userPropertyManager users.each{user-> if(user.isActive()){ appUser = userManager.getUserByKey(user.getKey()) // 针对每个人的信息 displayName = appUser.getDisplayName() userName = appUser.getUsername() larkUserOpenId = userPropertyManager.getPropertySet(userManager.getUserByName(userName)).getString(userPropertyKey) // API访问凭证URL urlString = endPoint + "?app_id=" + appID + "&app_secret=" + appSecret larkURL = new URL(urlString) // 获取API访问凭证 accessToken = result['tenant_access_token'].toString() // 发送消息API urlString = "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id" larkURL = new URL(urlString) HttpURLConnection httpConn = (HttpURLConnection) larkURL.openConnection() // 设置是否向 HttpUrlConnection 输出,对于post请求,参数要放在 http 正文内,因此需要设为true,默认为false httpConn.connect() // ***动态获取每个成员本周数据*** // searchService = ComponentAccessor.getComponent(SearchService.class) // 1.获取每个成员本周工时数据${totalLoggedWork} // 2.获取每个成员本周投入项目个数${numberofProjects} jqlSearch = "worklogAuthor = \"" + userName + "\" AND (worklogDate >= startOfWeek() AND worklogDate <= endOfWeek()) ORDER BY project" query = queryParser.parseQuery(jqlSearch) search = searchService.search(loggedInUser, query, PagerFilter.getUnlimitedFilter()) worklogManager = ComponentAccessor.getWorklogManager() search.results.each{retrievedIssue-> worklogs = worklogManager.getByIssue(retrievedIssue) // 获取项目Key,去重计算参与的项目个数 if (projectKey != retrievedIssue.projectObject.key) { numberofProjects += 1 } worklogs.each{workLog-> // 默认毫秒,除以3600转换成单位:小时 loggedTime = workLog.getTimeSpent()/3600?:0 // 工作日志记录中登记者为当前用户,且登记的开始日期为本周内时,累加本周合计总工时 if (workLog.getAuthorObject().getDisplayName() == displayName && workLog.getStartDate() >= startofWeek && workLog.getStartDate() <= endofWeek){ totalLoggedWork += loggedTime } } } // 本周总投入工作量(小时)保留一位小数 totalLoggedWork = totalLoggedWork.round(1) // 飞书消息核心内容,来自:https://open.feishu.cn/tool/cardbuilder?from=howtoguide contentBody = "{\"config\":{\"wide_screen_mode\":true},\"header\":{\"template\":\"red\",\"title\":{\"content\":\"项目一周小结\",\"tag\":\"plain_text\"}},\"i18n_elements\":{\"zh_cn\":[{\"alt\":{\"content\":\"\",\"tag\":\"plain_text\"},\"img_key\":\"img_v2_df1bbd76-f942-41d4-8ca6-538c0a0fcb6g\",\"tag\":\"img\"},{\"tag\":\"markdown\",\"content\":\"${displayName},感谢您一周辛苦工作\\n共投入 **${totalLoggedWork}** 小时\\n工作在 **${numberofProjects}** 个Jira项目上\\n完成了 **${numberofTasks}** 个任务\\n修复了 **${numberofBugs}** 个缺陷\\n目前有 **${numberofOverdueTasks}** 个任务已逾期\\n请记得及时处理呦~\\n[详见Jira系统仪表盘>>](http://hangzhouace.atlassian.net)\\n\\n**一个高度,一个境界;一个角度,一个世界。祝周末愉快!**\"}]}}" // 构建飞书消息HTTP POST请求体 builder = new JsonBuilder([content: contentBody, msg_type: messageType, receive_id: larkUserOpenId]) OutputStream outputStream = httpConn.getOutputStream() outputStream.write(builder.toString().getBytes("utf-8")) outputStream.flush() outputStream.close() // 从连接中读取响应信息 if (httpConn.getResponseCode() != 200 && httpConn.getResponseCode() != 201) { sb.append( "消息推送失败响应代码:" + httpConn.getResponseCode() + " || 响应消息体:" + httpConn.getResponseMessage()) } //断开HttpURL连接,释放资源 httpConn.disconnect() } } |