ABE BIYOSIDAL · 2020 – 至今
Biocidal 现场作业管理系统
多租户、基于 GIS 的现场作业管理软件,将市政机构和民营虫害防治公司的虫害与病媒生物防治业务整合到同一系统中,覆盖从市民报修到每日收工核对的全过程。已有多个市政机构在使用。
我的角色: 软件架构:我从零设计了系统架构,并自 2020 年起主导其开发。
biocidal.com.tr- 年起上线运行
- 2020
- 各机构数据相互隔离
- 多租户
- 空间查询
- PostGIS
- 市政机构在使用
- 多个
问题
在病媒生物防治中,工作分散在多个环节:收到市民投诉,转为工单,现场团队实施作业,所用药剂从库存中扣减,最后还要按照招标技术规范编制报告。
当这些环节分散在不同的地方时,“哪个团队在哪里用了什么药剂、用了多少?”这个问题就很难回答,审计和报表要耗费好几天。
架构
管理后台
- Angular
地图
现场应用
- React Native
移动端
GraphQL API
- GraphQL Yoga
- WebSocket
实时数据与订阅
数据库
- PostgreSQL
- PostGIS
按租户隔离的数据
缓存
- Redis
实时事件
通知分为两层:应用打开时通过 WebSocket 订阅推送,应用关闭时通过推送、短信和邮件送达。
我实现了什么
现场作业
报修 → 工单 → 现场作业 → 每日收工核对的完整流程;工单通过状态机流转。
空间智能
借助 PostGIS 实现责任区划分、路线规划,以及判断某个位置落在哪个区域的点面匹配。
库存与成本核算
批次追踪、近效期先出(FEFO)的发放规则,以及先进先出(FIFO)的成本核算。
现场领用与核对
交给团队的药剂登记在该团队名下;现场作业审核通过后扣减库存。
权限与审计追踪
按模块和操作配置的动态权限;记录谁在何时修改了什么。
报表与通知
按省、区生成报表;支持应用内、推送、短信和邮件通知。
我解决的难题
- 1
为运行中的系统加入多租户
我在已投入生产的数据库结构上加入了按机构隔离数据的能力。对租户数据表的查询会在数据层自动过滤,因此即使开发人员忘记加过滤条件,也不会造成数据泄露。
- 2
库存计价
同一产品的不同批次价格和有效期各不相同:发放遵循 FEFO,成本核算遵循 FIFO;现场消耗会对应到正确的批次和成本。
- 3
在线迁移数据层
在系统持续使用的情况下更换了 ORM 和 GraphQL schema 的构建方式;schema 定义迁移到了手写的 SDL 文件中。
技术
- Angular
- TypeScript
- GraphQL
- Node.js
- Prisma
- PostgreSQL
- PostGIS
- Redis
- Firebase
相关服务
您正在规划类似的系统吗? 从架构设计到正式上线,我全程为您提供支持。
联系我