员工花名册 Excel 表格批量导入公司人事管理系统

更新日期: 2025-11-08 阅读次数: 34 字数: 1735 分类: MySQL

公司人事管理系统开发完成之后,就需要导入初始数据。例如,员工花名册。 人事部门手头有一个 Excel 表格,包含了所有员工的基本信息,包括姓名、工号、部门、职位等。 当然,主要目的是将既有员工的员工编号录入系统,后续新入职的则会自动按照规则生成员工编号。

而我又承担了这枯燥繁琐的工作任务😅

之前发过一篇笔记,讨论员工编号的生成规则,大家讨论得还挺热烈,参见前文 人事管理系统开发之三,员工编号号批量生成

🍎 花名册导入方案

  • 方案一:自动将 Excel 转换成 SQL 插入语句,直接导入。这个方案,不太行,因为涉及到子公司和部门的关系,简单的插入语句无法处理这些复杂的逻辑。
  • 方案二:编写一个数据导入工具,能够解析 Excel 文件,提取员工信息,并自动创建公司和部门的关系(同步生成公司组织架构)。这个方案可行,但需要一定的开发工作量。

只能自己写导入逻辑了。

✈️ 花名册导入逻辑

  1. 解析 Excel 文件,先遍历一遍收集所有员工所属的子公司和部门信息。
  2. 插入员工信息前,先检测子公司信息是否存在,如果不存在,则先创建子公司信息,或者直接报错并终止导入。提示操作人员,公司名称对应不上。
  3. 将公司和部门的名称与 ID 映射关系,缓存到内存中,以便后续使用。
  4. 插入员工信息时,设置状态为在职
  5. 新增员工备注字段。我看花名册中最常见的备注是“退休返聘”。这个感觉应该是个状态字段,放到备注中不太合适。例如我想筛选出所有退休返聘的员工,可能就需要一个单独的状态字段来标识。
  6. 多次重复导入时的更新逻辑。以员工编号为唯一标识。
  7. 职级等数据字典,要更新,跟花名册中保持一致。可以导入完成后,通过 SQL DISTINCT 语句统计出来,然后更新数据字典。
  8. 本地测试完成后,线上改表。直接改表也没啥问题。
  9. 大老板的身份证号没有提供,HR 直接给了个空字段。Holy Shit, 这下麻烦了,我设计的这个数据表字段是唯一索引且必填,要是再来几个大 boss,直接噶。先随机一个 secret + 时间戳应付一下吧。

最后,得通知前端增加了一个备注字段。先禁止修改,确认没问题之后再开放修改。

🔨 把脏活交给 AI

这种无聊的繁琐的工作,完全可以交给 AI 来完成。只需要把上面整理的逻辑说明变成代码注释,交给 AI,AI 就可以自动生成导入接口的代码。

毕竟批量导入是一个常见的场景,为了更加高效,整理成提示词模板比较好。例如:

⚡️ 提示词模板

使用 golang 实现一个批量导入员工花名册的接口,支持 Excel 文件上传,自动解析并导入员工信息到数据库中。

数据行的格式:

序号 所属公司 姓名 职级 事业部 一级部门 二级部门 三级部门 职务/工种 身份证号码 入职日期 员工编号 备注

说明表头跟 struct 字段名的映射关系:

省略...

处理逻辑:

  • 第一次遍历 Excel 文件,忽略首行的表头信息,收集所有员工所属的子公司和部门信息。
  • 判断子公司是否存在,如果不存在,记录错误信息,并终止导入。如果存在,缓存子公司名称跟 ID 的映射关系。以备后续使用。
  • 判断部门是否存在,如果不存在,则创建部门信息,并缓存部门名称跟 ID 的映射关系。以备后续使用。注意,这里的事业部就是最顶级的部门,相当于一级部门的父级部门。最后只需要设置员工的部门 ID 为三级部门的 ID 即可(也可能有的员工没有三级部门,只有二级部门)。创建部门时,记得设置父级部门 ID。具体实现时,可以先把事业部、一级部门、二级部门、三级部门这四个字段,用斜杠拼接,形成一个完整的部门路径,作为部门的全名与最后一级部门 ID 建立映射关系。类似于之前写的 Magento 的批量导入产品信息的导入逻辑。
  • 第二次遍历 Excel 文件,处理员工信息的插入和更新逻辑。是否更新取决于员工编号是否在数据库中存在。遇到身份证号为空的情况,先随机生成一个 secret + 时间戳应付一下吧。

🤔 思考

我感觉人事系统里维护员工信息,其实不如 Excel 表格直观和灵活。 例如,需要批量更正一批员工的某个字段信息,在 Excel 表格中就可以先过滤,然后拖拉批量修改,操作起来更方便。 Excel 的备份回退也很方便,人事 HR 自己就能文件备份。但是到了系统中,备份只能靠技术人员备份整个数据库,这就麻烦了。

所以,我很好奇,那种大型的企业内部系统,几十万人同时使用的场景,例如银行系统或者电信系统,是如何处理这些问题的呢? 肯定不是全量备份数据库,那如何确保内部工作人员批量修改一批数据,出现问题,然后撤销修改呢?

如果拆分成无数个子系统,每个独立一个数据库,倒是可行。🤨 毕竟他们人多,估计有几千上万名我这样的操作工吧。

关于作者 🌱

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式