每天叫醒我的不是闹钟,而是“自律喵”

一起用代码吸猫!本文正在参与【喵星人征文活动】

前言

没有猫怎么办?那自己 new 一只 Cat ,然后慢慢的“撸”。怎么撸?基于近期在研究企业微信第三方应用,那就建一只“自律喵”。先让它每次提醒我待办事件吧。

总体设计

系统架构图

slftcat-struct.png

内容:通过访问微信小程序 “自律喵”服务,提交每日待办事件,自律喵服务将推送给catHook服务,让catHook服务到点回调“自律喵”服务中的发送消息功能,并将消息推送给微信小程序。

需求:

1、用户通过打开小程序,今日每日一喵,提交自己的每日任务,包含类型,事件内容,提醒时间

2、Cathook 作为调度中心既要接收所有的信息,还要能够到点触发提醒

3、selfCat server 推送消息给企业微信的功能

详细设计

SelfCat-Server

提供前端页面 和 相关服务接口,技术栈:nodejs + Koa

1、用户点击页面时根据 accessToken 获取用户的wxuid

2、前端用户提交待提醒的任务后,将转发到 CatHook 调度中心统一调度

3、提供消息发送接口,调度中心触发消息推送时调用该接口,并将任务到时间点推送给用户

其中发送消息主要通过使用已封装好的第三方模块 wechat-enterprise:

var API = require("wechat-enterprise").API;
​
var api = new API(null, null, cfg.agentid, function (callback) {
    callback(null, {
      accessToken: token,
});
​
api.send(postData.to, postData.message, function (err, value) {
    if (err) {
      if (err.code && err.code === 81013) {
        logger.warn(`【warn】未找到对应用户,错误信息:${err},${JSON.stringify(data)}`);
        callback(null, value);
      } else {
        logger.debug(`错误信息:${err}`);
      }
    }
    callback(err, value);
});
复制代码

CatHook-Server

主要提供定时调度任务和接收调度任务,技术栈:nodejs + express + mongodb

1、使用 node-schedule 模块,启动定时任务。

2、提供启动定时调度任务接口,可支持一次性定时提醒或定期定时提醒功能,将接收到定时任务都存储到mongodb中。

3、提供关闭调度任务接口,主要为了满足撤销定时任务的需求。

以下是定时调度任务接口的方法代码:

function schedule_start(execModel) {
   // 根据任务Id 去调用
   var jobId = execModel.jobId;
   schedules.scheduleJob(jobId, rule, () => {
        schServer.callWebhookSchedule(jobId, webhook, false).then(result => {
            sendMessage(`${config.appName}${result.msg}`, null);
          }).catch(errMsg => {
           sendMessage(`${config.appName}${errMsg}`, null);
      });
  });
}
​
function callWebhookSchedule(jobId, webhook,isOnce){
      return reqServer.callApi(webhook).then(result => {
        let msg = '';
        if (result.errcode === 0) {
            msg = `jobCode:${jobId},url:${webhook}任务调度成功`;
            logger.info(msg);
            //调度成功后如果是一次执行删除mongo中存储
            if(isOnce){
                deleteDBOverJob(jobId).catch(errMsg => {
                    return Promise.reject(errMsg);
                });
            }
            return Promise.resolve({code:0,msg:msg});         
        } else {
            msg = `【调度失败】jobCode:${jobId},url:${webhook}错误:${JSON.stringify(result) }`;
            logger.error(msg);          
            return Promise.reject(msg);
        }       
    }).catch(err => {
        let errMsg = `任务${jobId},调用接口url:${webhook}异常:${err}`
        logger.error(errMsg);
        return Promise.reject(errMsg);
    })
}
复制代码

效果展示

好像很简单的功能,但是陆陆续续差不多快敲了十几天的代码,也只是一部分功能的完成,部署到我云服务上,试运行一下。

自律喵.png

自律喵message.png

话最后

这只喵的用途太简单,只是提醒我做事。那我怎么知道我拖延症是不是治愈了?接下来将持续改进,增加功能:对我每次完成任务的情况和处理时间的比率统计,以便我每周对我完成任务所花费时间的一个复盘。

每天叫醒我的不是闹钟,而是自律喵!!!

加油!!

猜你喜欢

转载自juejin.im/post/7031720693653831710
今日推荐