麦粉社区
>
帖子详情

计划任务通过指标预警将报表当做邮件正文发送邮件

其它 发表于 2023-7-20 15:26
发表于 2023-7-20 15:26:13

https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=92094317


以上案例不能完全满足当前需求


当满足条件时希望将某张报表当做邮件正文发送


因为涉及多家分公司,所以查询条件里需要加上参数,发送的报表也需要加上参数,如果有实现相似的案例,希望可以分享一下,谢谢

发表于 2023-7-20 15:26:14
本帖最后由 君茗 于 2023-7-20 15:36 编辑

这不满足?你的需求描述的这么清楚。


设置告警规则那 在获取字段后 加if else判断下


当然前面的邮件收件人也可以做个指标循环过滤出来应该给谁发 或者多写几个if


中间的sql可以拼接过滤


再参考这个https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=44499313 把后面的发送内容改改


公司随便找个java工程师写就行。再不行找售后提需求

回复

使用道具 1 举报

发表于 2023-7-26 15:32:18
本帖最后由 chen 于 2023-7-26 15:35 编辑

以下实现代码供参考





  1. importPackage(Packages.smartbi.sdk.service.spreadsheetreport);

  2. importPackage(Packages.smartbi.scheduletask.task);

  3. importPackage(Packages.smartbi.sdk.service.systemconfig);

  4. importPackage(Packages.java.lang);

  5. importPackage(Packages.java.util);

  6. importPackage(Packages.java.text);

  7. importPackage(Packages.java.io);

  8. importPackage(Packages.org.apache.commons.lang);

  9. importPackage(Packages.org.apache.commons.mail);

  10. importPackage(Packages.smartbi.scheduletask.component);

  11. importPackage(Packages.smartbi.util);

  12. importPackage(Packages.smartbi.freequery.querydata);

  13. importPackage(Packages.smartbi.sdk.service.datasource);

  14. var report = null;

  15. //定义email对象,初始化参数

  16. var systemConfigService = new SystemConfigService(connector);

  17. var configList = systemConfigService.getSystemConfigs();

  18. var dsService = new DataSourceService(connector);

  19. var mailServer = null;

  20. var fromAddress = null;

  21. var userName = null;

  22. var password = null;

  23. var encryptPassword = null;

  24. var emailSSLEnabled = null;

  25. var emailTLSEnabled = null;

  26. var mailAlias = null;

  27. var port = "";

  28. var ds = "DS.这里是数据库名";var configSql = "select mail_type,cus_id,cus_name,email,sql_param,outputparam1_type,outputparam1,outputparam2_type,outputparam2,ccemail from conf_email ";

  29. // 发送邮件

  30. var sendMail = function(userEmail, erji, jigou, qudao, qudaoparam, ccemail) {

  31.     var multiPartEmail = new SmartbiMultiPartEmail();

  32.         for (var i = 0; i < configList.size(); i++) {

  33.                 var config = configList.get(i);

  34.                 if (config!=null) {

  35.                         if (config.getKey().equals("EMAIL_SMTP_SERVER")) {

  36.                                  mailServer = config.getValue();

  37.                         } else if (config.getKey().equals("EMAIL_USER_NAME")) {

  38.                                  userName = config.getValue();

  39.                         } else if (config.getKey().equals("EMAIL_USER_ALIAS")){

  40.                                 mailAlias = config.getValue();

  41.                         } else if (config.getKey().equals("EMAIL_USER_ADDRESS")) {

  42.                                  fromAddress = config.getValue();

  43.                         } else if (config.getKey().equals("EMAIL_USER_PASSWORD")) {

  44.                                  password= config.getValue();

  45.                         } else if (config.getKey().equals("EMAIL_USER_PASSWORD_ENCRYPT")) {

  46.                                 encryptPassword = config.getValue();

  47.                         } else if (config.getKey().equals("EMAIL_SSL_ENABLED")) {

  48.                                 if (config.getValue().equals("true")) {

  49.                                         emailSSLEnabled = true;

  50.                                 }

  51.                         } else if (config.getKey().equals("EMAIL_TLS_ENABLED")) {

  52.                                 if (config.getValue().equals("true")) {

  53.                                         emailTLSEnabled = true;

  54.                                 }

  55.                         }else if (config.getKey().equals("EMAIL_SMTP_PORT")) {  //端口

  56.                                 port = config.getValue().trim();

  57.                         }

  58.                 }

  59.         }

  60.         if (StringUtil.equals(encryptPassword, "true")) {

  61.                 password = AESCryption.decrypt(password);

  62.         }

  63.         System.out.println(mailServer);

  64.         System.out.println(fromAddress);

  65.         System.out.println(password);

  66.         multiPartEmail.setHostName(mailServer);

  67.         if (!StringUtil.isNullOrEmpty(password)) {

  68.                 multiPartEmail.setAuthentication(userName, password);

  69.         }

  70.         if(mailAlias){

  71.                  multiPartEmail.setFrom(fromAddress, mailAlias);

  72.         } else{

  73.                  multiPartEmail.setFrom(fromAddress);

  74.         }

  75.         if(emailSSLEnabled){

  76.                 multiPartEmail.setSSL(true);

  77.                 if(port != ""){

  78.                         multiPartEmail.setSslSmtpPort(port);

  79.                 }

  80.         }

  81.         if(emailTLSEnabled){

  82.                 multiPartEmail.setTLS(true);

  83.         }

  84.         if(port != "" && !emailSSLEnabled){

  85.                 multiPartEmail.setSmtpPort(port);

  86.         }

  87.     var array = userEmail.split(";");

  88.         for (var i = 0; i < array.length; i++) {

  89.                 multiPartEmail.addTo(array);//接收邮箱地址

  90.         }

  91.         // multiPartEmail.addTo(userEmail);//接收邮箱地址

  92.     if (!StringUtil.isNullOrEmpty(ccemail)) {

  93.         var array = ccemail.split(";");

  94.             for (var i = 0; i < array.length; i++) {

  95.                     multiPartEmail.addCc(array);//抄送邮箱地址

  96.             }

  97.         }

  98.         multiPartEmail.setCharset("GBK");//邮件内容字符集

  99.         multiPartEmail.setSubject("预警通知测试");//邮件标题

  100. //    var sb = new StringBuffer();

  101. //    sb.append("

    这是一个系统自动发送的邮件,请勿回复。


    ");

  102. //    sb.append("\n");

  103.         report = new SSReport(connector);

  104.         report.open("这里是报表资源ID"); //报表资源ID

  105.     report.setParamValue("这里是数据集中参数"+erji, jigou, jigou);

  106.     if (!StringUtil.isNullOrEmpty(qudaoparam) && !StringUtil.isNullOrEmpty(qudao)) {

  107.         report.setParamValue("这里是数据集中参数"+qudao, qudaoparam, qudaoparam);

  108.     }

  109.     var os = new ByteArrayOutputStream();

  110.         report.doExport("HTML","","",os,"","","");

  111.         var html = os.toString("utf8");

  112.         //logger.info(html);

  113.         report.close();

  114.         // 业务库数据源

  115.         //发送邮件

  116.         multiPartEmail.setHtmlMsg(html);

  117.         multiPartEmail.send();

  118. }

  119. // 告警规则

  120. var rule = function(row, userEmail, erji, jigou, qudao, qudaoparam, ccemail) {

  121.     var cnt = row.get(0).getDoubleValue();

  122.     var target = 0;

  123.     if (cnt > target) {

  124.         // 发送邮件

  125.                 sendMail(userEmail, erji, jigou, qudao, qudaoparam, ccemail);

  126.     }

  127. }

  128. // 查询报表数据

  129. var dataQuery = function(userEmail, sqlWhere, erji, jigou, qudao, qudaoparam, ccemail) {

  130.         // 监控sql

  131.         var sql = "select count(1) as cnt from table1 a join table2 b on a.org_id=b.org_id " + sqlWhere;

  132.         var gridData = dsService.executeNoCacheable(ds, sql);

  133.         var data = gridData.getData();

  134.         for (var i = 0; i < data.size(); i++) {

  135.                 var row = data.get(i);

  136.                 // 调用告警规则

  137.                 rule(row, userEmail, erji, jigou, qudao, qudaoparam, ccemail);

  138.         }

  139. }

  140. // 查询配置表

  141. var gridDataGroup = dsService.executeNoCacheable(ds, configSql);

  142. for (var i = 0; i < gridDataGroup.getRowsCount(); i++) {

  143.     var userEmail = gridDataGroup.get(i, 3).getValue();

  144.         var sqlWhere = gridDataGroup.get(i, 4).getValue();

  145.         var erji = gridDataGroup.get(i, 5).getValue();

  146.         var jigou = gridDataGroup.get(i, 6).getValue();

  147.         var qudao = gridDataGroup.get(i, 7).getValue();

  148.         var qudaoparam = gridDataGroup.get(i, 8).getValue();

  149.         var ccemail = gridDataGroup.get(i, 9).getValue();

  150.        

  151.         // 调用保表数据

  152.         dataQuery(userEmail, sqlWhere, erji, jigou, qudao, qudaoparam, ccemail);

  153. }



复制代码

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 0关注人数 1193浏览人数
最后回复于:2023-7-26 15:32
快速回复 返回顶部 返回列表