目录

一个简单的提交统计工具

项目由来

最近在做一些群内的人员管理工作,经常要下发表格,筛选出没提交的人。 众所周知,懒是第一生产力,于是开发了一个可以根据人员信息表与实际提交信息,直接计算出未提交名单的工具。

目前只做了桌面命令行极简版。仓库地址:aFlyBird0/submit_tools: 看看谁还没提交!!!

思路介绍

先考虑最简单的情况:如果所有人的信息,仅提供姓名。

那么只要先维护一个姓名列表,然后使用某种途径获取已经提交了人的列表。遍历姓名列表,一个个看该姓名是否出现在了提交列表中即可。

稍微复杂一些:提交列表不一定是规整的数组,可能来源于网页表格;也可能来源于QQ的投票统计,是OCR的结果。即,拥有许多杂乱的内容。这时候可以退而求其次,把提交信息统一转化成一个多行字符串,将列表的对应查询变成了 strings.Contains() 操作。

目前版本

再丰富些:添加别名功能。比如,可能我们需要判断谁不在 Github 组织里,或者说收集表上只有大家的手机号而没有姓名字段,所有数据结构可以这样设计:

type Person struct {
	Name   string   //标准名
	Alias  []string //别名,可以是邮箱、QQ号等
	Submit bool     // 是否已提交
}

维护一张信息表,使用 csv 结构,一行是一个人员信息。其中第一列是姓名,即标准名。后面的列数量任意,都是能唯一标识该人的 ID ,如 QQ、电话、邮箱。

只要标准名或别名中的任何一个字段命中了提交信息(字符串),就认为该人已提交。

不足

这样有个 bug,如果一个人叫「张三」、另一个叫「张三丰」,那么只要后者提交了,前者会被误判为已提交。 适当规避这个 bug 的方式是,使用较长的唯一 id。

未来可能的改进思路

和 Kevin 大佬聊了之后,有了以下几个改进思路:

  1. 原来的提交信息只是纯文本字符串。可以把这个改成一个接口,对于不同的类型,如 csv、在线表格,实现不同的命中方法。其他的,从给出的提交信息中,抽取可以被当作 ID 的字段也可以封装为接口。
  2. 把提交信息由原来的一大串文本改为,只接受一行一行的提交。每行提交只能被命中一次,若被命中多次,提示用户可能存在歧义。
  3. 利用 qq_bot 等工具收集人员信息。之前收集群所有人的备注,OCR 可能会出问题,如果能直接调 QQ 接口更好。