工作随记-Java利用企业微信群机器人定时发送消息
hi,大家好,我是恰恰
阅读本文需要2分钟~
1.返奖率通知与告警:抽奖箱能抽出垃圾也能抽出大货,每隔5分钟查询一下这个返奖率,如果用户频繁抽出大货,这个抽奖箱的返奖率已经高出了阈值,那么我们就将其下架。
2.自动发送导表文件:关于运营每天都需要导表,我已俨然成为了一名导表侠,迫在眉睫我必须自我解放,所以可以利用机器人每天早上十点给运营们发送导表文件。
以自动发送导表文件为例 我需要把新注册的用户在平台消费大于等于50元的用户ID给到运营同学
开始写代码~
-
新建一个类 把URL信息填充好 1.先筛选出消费大于等于50元用户的List,组装数据保存到电脑D盘(EasyUtil是一个把List导出到本地的工具) List<NewRegistrationUser> collect = resultList.stream().filter(r -> r.getOpenBoxAmount() + r.getDirectPurAmount() >= 50).collect(Collectors.toList()); List<Map<String, Object>> list = new ArrayList<>(); for (int i = 0; i < collect.size(); i++) { LinkedHashMap<String, Object> map = new LinkedHashMap<>(); NewRegistrationUser user = collect.get(i); map.put("用户ID ", user.getUserId()); map.put("付费金额", user.getOpenBoxAmount()+user.getDirectPurAmount()); list.add(map); } List<String> arrayList = new ArrayList(list.get(0).keySet()); //表头信息 String head =date+"消费大于等于50元名单"; EasyUtil.easyUtil(arrayList, head, list);
2.先将文件上传到企微的文件上传接口里去,使用hutool发送Post请求,他会返回一个media_id,
String path = "D:\导表\" + head + ".xlsx"; // 上传文件 HashMap<String, Object> sendMap = new HashMap<>(); sendMap.put("file", FileUtil.file(path)); String result = cn.hutool.http.HttpUtil.post(UPLOAD_FILE_URL,sendMap); JSONObject jsonObject = JSON.parseObject(result); Integer errcode = Integer.valueOf(jsonObject.get("errcode").toString());
3.如果code返回0说明文件上传成功,进行下一步把文件推送到企微
if (errcode.equals(0)) { // 推送消息 String mediaid = (String) jsonObject.get("media_id"); Map<String,Object> mediaMap = new HashMap<>(); mediaMap.put("media_id",mediaid); Map<String,Object> msgMap = new HashMap<>(); msgMap.put("msgtype","file"); msgMap.put("file",mediaMap); cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap));
4.再发送一句文字消息
HashMap<String, Object> paramMap = new HashMap<>(); HashMap<String, Object> aMap = new HashMap<>(); String format = String.format("%s | %s | %d ", date, newRegistrationUser.size(), collect.size()); aMap.put("content", "导表小助手来咯~"+" "+"时间 | 新注册人数 | 消费大于等于50人数 " + String.join(" ", format)); msgMap.put("text",aMap); paramMap.put("msgtype", "text"); paramMap.put("text", aMap); cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap)); }
效果就是这样的
5.如果是通知告警信息是个LIst就把文字组装成这样
List<String> warnTexts = recordsList.stream().map(wi -> String.format("%s | %s | %d | %.2f%%", wi.getComboBoxId(), wi.getAdminUserName(),wi.getProfit(),wi.getProfitRate()).collect(Collectors.toList()); HashMap<String, Object> paramMap = new HashMap<>(); HashMap<String, Object> aMap = new HashMap<>(); aMap.put("content", LocalDateTime.now() + " "+ "自动下架通知(请相关人员注意)~"+" " + "ID | 负责人 | 利润 | 利润率 " + String.join(" ", warnTexts)); paramMap.put("msgtype", "text"); paramMap.put("text", aMap); cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap));
6.再写一个定时任务调一下咱们写的这个方法~就可以定时啦
//每天上午10点执行任务 @Scheduled(cron = "0 0 10 * * ?") public void NewUserAmount(){ //拉取前一天的数据 newUserAmountService.NewUserAmount(LocalDate.now().minusDays(1)); }