●ENS 最高级别认证 · 有效
● system online24
个功能域,从客户到薪资
3
个后端服务:PHP、Java 与 Python
2
种打卡模式:共享平板与个人手机
4
年工时记录留存,按法律要求
// 需求背景
散落在一堆表格里的经营。
Staroil 经营加油站与油品配送中心。在 Pulse 之前,每个部门各自维护自己的表格和邮件文件夹。需求不是「做一个应用」,而是把已经在做的事收拢到一处,并且过程中业务不能停。
01
部门之间的数据对不上。 客户的合同在一处,用量在另一处,风险只存在某个人的脑子里。
02
审批走邮件。 一笔折扣或采购在某个邮件线程里获批,事后谁也找不到。
03
考勤靠纸。 而法律要求全员工时记录保存四年。
// 覆盖范围
二十四个功能域,一套系统。
每个功能域都有自己的功能文档、数据模型和按角色划分的权限。按组划分,系统内部是这些:
商务
客户、线索,以及把二者串起来的漏斗。每个账户是谁、进展到哪一步。
合同
加油站与配送中心合同,含条款、折扣及相关风险。
运营
站点、用量、补货、前场平板与客户自助终端。
采购与库存
供应商、订单、商品与库存,以及相应的事件与告警。
人员
用户、角色、劳动关系、薪资与承包商。以及全员考勤。
管控
审批、变更审计、告警、内部支持与管理层看板。
// 移动应用
十秒完成打卡,用手机或用站点平板。
应用只有一个,已上架 Google Play 与 App Store,并按设备注册时使用的码呈现两种不同形态。手机绝不会以平板模式启动,即便收到的是站点码。
07 号站
谁来打卡?
点选你的名字,看向摄像头。
ARAna R.BCBruno C.CMCarla M.DPDiego P.ESElena S.FTFran T.GLGema L.HVHugo V.
打卡拍照
上班打卡
共享设备
站点平板
公司里任何人都可以在列表中选中自己打卡。每次打卡前置摄像头都会拍一张照片,因为平板不需要密码:这正是用来核实谁打了卡的依据。
个人设备
本人手机
只有机主本人打卡,使用邮箱和密码。位置仅在按下「打卡」的那一瞬间读取——绝不会在后台读取。此外还有排班、请假与打卡提醒。
应用的数据处理方式写在它的隐私政策里:仅在打卡时读取位置,不做人脸识别,无广告无分析,数据存放在欧盟境内。
// 技术内部
刻意的多语言架构。
每个部件都用最适合它的语言编写,再由同一套脚本统一编排。这不是为了折中,而是为了能逐块替换,而不必推倒重来。
浏览器
HTTPS
Web 内核
PHP · nginx
pulse-api
Java · Spring Boot
移动应用
React Native · Expo
BFF
Python · FastAPI
io/v1
Python · Flask
数据库MySQL · pulse
- 01PHP 内核,运行在 nginx 与 MySQL 之上,带版本化迁移与变更审计。
- 02Java API,基于 Spring Boot,承担需要强类型与并发的处理。
- 03Python API,基于 Flask,负责导入与告警,另有一个 FastAPI 的 BFF 服务移动端。
- 04React Native 与 Expo 应用,打卡提醒在手机本地排程:没有推送通知,也没有任何「谁装了这个应用」的记录。