• 82303

    文章

  • 735

    评论

  • 18

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

钉钉值班机器人入门

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

最近周末心血来潮写了一个晨会的机器人(每天大家轮流做主持),没想到挺受欢迎,代码执行是没问题,但放到服务器上运行时十分曲折,作为一个半桶水测试,还是第一次接触到git/或者是打jar到服务器上定时运行,所以准备在这个过程写下来,吸取教训,也积累知识吧

官网:https://open-doc.dingtalk.com/microapp/serverapi2,先看一遍文档,然后开干,下载java sdk

本地解压,里面有各种封装方法,先看一遍,找出自己能用的方法名,我的代码里用到了这几个:

先贴上代码再讲:

package com.qiyue;


import com.qiyue.dingtalk.DingtalkChatbotClient;
import com.qiyue.dingtalk.SendResult;
import com.qiyue.dingtalk.message.TextMessage;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;


public class RobotClient {

    private DingtalkChatbotClient client = new DingtalkChatbotClient();

    // 钉钉机器人发送地址
    private static final String url = "https://oapi.dingtalk.com/robot/send?access_token=";
    // 钉钉机器人的token
    // 测试群里机器人的token,自己先试试,不要去大群里骚扰
    //private static final String token = "901489840593ad21e12e3d8074dacdc8585f8819fad7";
    //正式----在小群里测试通过后,可以放大群里实行了
    private static final String token = "5363b5cad4d9d9c0785cbe2457595c";

    // 按星期发送时发送日期与发送人的关系
    //private static Map<String, String> atUserMap;

    // 轮询发送时的发送人列表
    private static List<String> atUserList;

    static {
        // 初始化发送人数据
      /*  atUserMap = new HashMap<String, String>();
        atUserMap.put("Sunday", "");//引号里是手机号,贴出来的时候去掉了
        atUserMap.put("Monday", "");
        atUserMap.put("Tuesday", "");
        atUserMap.put("Wednesday", "");
        atUserMap.put("Thursday", "");
        atUserMap.put("Friday", "");
        atUserMap.put("Saturday", "");
        */
        atUserList = new ArrayList<String>();
        atUserList.add("17610259");   //此处是需要被@人的dingding手机号码 ,依次往后加
      
    


    }

    /**
     * 按星期发送消息
     * @throws Exception
     */
  /*  public void sendWeeklyTextMessage() throws Exception {
        TextMessage message = new TextMessage("test at someone");
        List<String> mobiles = new ArrayList<String>();
        mobiles.add(atUserMap.get(getWeekOfDate(new Date())));
        message.setAtMobiles(mobiles);
        SendResult result = this.client.send(url + token, message);
        System.out.println(result);
    }*/

    /**
     * 获取指定日期的星期
     * @param date
     * @return
     */
   /* private static String getWeekOfDate(Date date) {
        String[] weekDays = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        return weekDays[w];
    }*/

    /**
     * 每天给发送人轮询发送消息
     * @throws Exception
     */
    public void sendDailyMsg() throws Exception {
        TextMessage message = new TextMessage("今天的晨会主持人");
        List<String> mobiles = new ArrayList<String>();
        int day = readDay();
        mobiles.add(atUserList.get(day));
        message.setAtMobiles(mobiles);
        SendResult result = client.send(url + token, message);
        System.out.println(result);

        day++;
        if (day == atUserList.size()) {
            day = 0;
        }
        modifyConfigField("day", String.valueOf(day));
    }

    /**
     * 从配置文件中获取当前应该给第几个发送消息
     * @return
     */
    private int readDay() {
        String propertiesPath = getPropertiesPath();
        Properties properties = new Properties();
        try {
            InputStream in = new FileInputStream(propertiesPath);
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Integer.parseInt(properties.getProperty("day"));
    }

    /**
     * 修改配置文件中在值
     * @param key
     * @param value
     */
    private void modifyConfigField(String key, String value) {
        String propertiesPath = getPropertiesPath();
        Properties properties = new Properties();
        try {
            InputStream in = new FileInputStream(propertiesPath);
            properties.load(in);
            properties.setProperty(key, value);
            in.close();
            OutputStream os = new FileOutputStream(propertiesPath);
            properties.store(os, null);
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
//获取服务器上的day配置文件
    private String getPropertiesPath() {
        String jarWholePath = RobotClient.class.getProtectionDomain().getCodeSource().getLocation().getFile();
        try {
            jarWholePath = java.net.URLDecoder.decode(jarWholePath, "UTF-8");
        } catch (UnsupportedEncodingException e) { System.out.println(e.toString()); }
        String jarPath = new File(jarWholePath).getParentFile().getAbsolutePath();
        String propertiesPath = jarPath + "/day.properties";
        System.out.println(propertiesPath);
        return propertiesPath;
    }

}

这代码猛一看有点乱,却也代表了我曲折的设计思路

一开始简单的想定个列表循环,后来一想遇到周末咋办?然后改成按星期的,结果一算,我们组有9个一,一个星期不够分哇?那就写表单吧,运行是没问题了,那怎么定时运行呢,jenkins试了下,照网上的教程配置maven项目,总是失败,最多也只能做到每次重新更新代码,始终只运行第一个用户,不会记忆上次的表单列表;然后

 


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客