引子
近半年村长主要研究企业移动办公,微信企业号开发快速迭代中,大受用户好评,年末了,年会将近,捱不住HR小MM的撒娇,于是答应开发个【优秀员工投票系统】,供大家乐(fen)乐(zang)。
基本构成
-
数据源:评选是公司内部员工,所以要用的素材例如名单,照片等就直接从ES系统取现成数据。
-
前端:当然是用Vue写个web页面啦,考虑到投票需要限定仅本公司人员可投票,所以使用微信企业号的OAuth2鉴权。
-
后端:要打通前端和ES,一两天就完成开发部署,还支持大并发,除了golang,也是没谁了,哈哈。
-
统计投票:当然是扔给ES啦,一个EXCEL表而已。
玩法简介
- ES里面建立个候选名单表,里面设置各个比评的数据字段,然后就甩给HR小MM去填。
- ES里面建立投票模板,设置好字段,便于后面统计,请无视我那简洁的代号,因为只是开个存储表而已。
- 数据容器准备妥当,可以快乐的用vue撸前端页面了,大概是这样子,点击选择时会显示一个大红心。
- 接下来是后端,主要是与ES数据库交互,主要包括这么几点。
- 验证用户是否为在职员工,通过微信号进行认证,微信号(wxid)通过企业号OAuth2鉴权获得。
// 检查是否为在职员工
ok := sqlsrv.CheckBool("select 1 from 员工 where 微信号=? and 状态='在职' ", wxid.Value)
fmt.Println("--isEmp:", ok)
if !ok {
return "您不是在册员工,不能参与此次投票"
}
- 插入投票记录,为了能在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不到了,页面速度哇哇快。
更多精彩功能请关注我们^_^