ESAP达摩院 思想有多远,我们就能走多远

微信企业号结合ES玩转优秀员工投票系统


引子

近半年村长主要研究企业移动办公,微信企业号开发快速迭代中,大受用户好评,年末了,年会将近,捱不住HR小MM的撒娇,于是答应开发个【优秀员工投票系统】,供大家乐(fen)乐(zang)。

基本构成

  • 数据源:评选是公司内部员工,所以要用的素材例如名单,照片等就直接从ES系统取现成数据。

  • 前端:当然是用Vue写个web页面啦,考虑到投票需要限定仅本公司人员可投票,所以使用微信企业号的OAuth2鉴权。

  • 后端:要打通前端和ES,一两天就完成开发部署,还支持大并发,除了golang,也是没谁了,哈哈。

  • 统计投票:当然是扔给ES啦,一个EXCEL表而已。

玩法简介

  • ES里面建立个候选名单表,里面设置各个比评的数据字段,然后就甩给HR小MM去填。

  • ES里面建立投票模板,设置好字段,便于后面统计,请无视我那简洁的代号,因为只是开个存储表而已。

  • 数据容器准备妥当,可以快乐的用vue撸前端页面了,大概是这样子,点击选择时会显示一个大红心。

  • 接下来是后端,主要是与ES数据库交互,主要包括这么几点。
  1. 验证用户是否为在职员工,通过微信号进行认证,微信号(wxid)通过企业号OAuth2鉴权获得。
    // 检查是否为在职员工
    ok := sqlsrv.CheckBool("select 1 from 员工 where 微信号=? and 状态='在职' ", wxid.Value)
    fmt.Println("--isEmp:", ok)
    if !ok {
        return "您不是在册员工,不能参与此次投票"
    }
  1. 插入投票记录,为了能在ES工作台中正常显示,除了正常插入表单数据,还要构造插入es_repcase记录。
    // 插入投票记录
    uid := wxid.Value
    rcid := "rc" + time.Now().Format("060102150405.99")
    now := time.Now().Format("2006-01-02 15:04:05")
    fmt.Println("rcid to insert:", rcid, wxid)
    err = sqlsrv.Exec("insert 投票(uid,姓名,wxid,T1,T2,T3,X1,X2,X3,excelserverrcid,excelserverrtid) values(?,?,?,?,?,?,?,?,?,?,549.1)", uid, m["姓名"], wxid.Value,
        m["T1"], m["T2"], m["T3"],
        m["X1"], m["X2"], m["X3"],
        rcid)
    if err != nil {
        return fmt.Sprintln("您已经投过票了", err)
    }
    err = sqlsrv.Exec("insert es_repcase(rcid,rtid,fillDate,lstFiller,lstFillerName,lstFillDate) values(?,549.1,?,1,'sys',?)", rcid, now, now)

    if err != nil {
        return fmt.Sprintln("系统数据插入错误,投票失败", err)
    }
  • 最后,完善一下候选名单模板,设置一条表间公式就可以实现票数统计啦

经验总结

  • 虽然是个小投票系统,但也折腾了2天,主要有两处较麻烦,一是员工微信号注册,还好公司有微信群,拿到后让HR的小MM维护进ES,村长再做个模板,把员工信息连同微信号一起导出来,就可以直接导进企业号通讯录了,偷懒成功!

  • 另一个就是照片问题,ES系统的照片都是大图,一个2M多,这会极大拖慢投票页面的加载速度,于是村长又更新了一下ESAP2服务器接口,增加了缩略图接口,这样请求到的图片(240*320)就只有20k不到了,页面速度哇哇快。

更多精彩功能请关注我们^_^


近似文章