开发文档
鲜花交易系统与鲜花交易平台(PHP / ThinkPHP 版)的研发记录:功能上线、架构演进与实施经验,按发布日期持续更新。
下游赊销怎么建模:信用额度、额度占用、账期账单与回款
批发业务里"先发货、月底结账"是常态,但平台默认要求在线支付。要做赊销,必须把「还能欠多少、这单占了额度、这个月该收多少、收了没有」四件事分别建模,否则一定会出现一边欠钱一边继续赊…
租户自助注册:一条跨三端的开通链路怎么设计
SaaS 的开通不是"插一条记录"那么简单:要建租户、建首个管理员、发试用授权、让授权下发到实例、还要让客户马上能登录。这条链路跨了三个端,任何一环断了客户看到的都是"打不开"。这…
一套代码,三类用户:厂商端、平台端、租户端怎么分离
系统里同时存在三种身份:卖软件的厂商、运营平台的公司、使用平台的商户。它们的后台长得像、功能重叠,但绝不能互相看到对方的页面。这篇讲我们怎么用一份代码 + 多入口 + 权限闸门实现…
多租户改造:153 张表加租户列、56 个唯一键重排,为什么现在做
一套 B2B2C 系统要从"一个客户一套部署"变成"一套部署服务多家客户",最贵的一步是数据库。这篇讲我们怎么在 167 张表的基线上,把所有租户数据表加上租户两列、把唯一键改成租…
数据库迁移要留台账:checksum、批次与 baseline
一个正在演进的系统,SQL 变更脚本只会越来越多。等到 50 个脚本时,"这个客户的库到底跑过哪些"就成了必须回答的问题。这篇讲这套平台的迁移台账设计:命令、台账表、校验和与存量库…
鉴权与授权的边界:一个配置项是怎么把令牌过期搞坏的
授权模块和鉴权模块都要读配置,看起来共用一套配置更省事。我们因此踩了一个高危问题:令牌过期判断被放大了十几倍,而所有测试都通过。这篇讲根因、修法与三条防复发约束。
私有化部署的"上线登记":厂商怎么知道客户在用什么
软件装在客户机房后,厂商就成了"瞎子":不知道谁真的上线了、跑的是哪个版本、哪些模块在用。上线登记(beacon)就是为这个问题设计的轻量机制——只上报规模与状态,不碰业务数据。
换服务器、重装、换码:把运维动作做成产品功能
私有化系统上线后,客户最常提的三件事是"我要换服务器""我重装了系统""我升级了套餐"。如果每次都要厂商改数据库,交付成本会失控。这篇讲授权码自助激活与实例改绑的设计。
后台权限的第 4 层:授权状态怎么裁剪菜单
常规权限模型解决"这个人能不能看这个页面",但解决不了"这套系统当前有没有这个能力"。授权过期、模块未购、平台专属功能,都需要第四层拦截。这篇讲我们怎么把四层权限叠起来而不互相打架…
私有化交付的软件授权怎么设计:授权码、心跳与吊销
系统卖给客户后部署在客户自己的服务器上,怎么证明"这份是正版""到期了要提醒""租户数不能超"?这篇讲这套平台采用的授权模型:授权码签发、实例绑定、心跳上报与 CRL 吊销。
删掉 SEO 表:为什么"通用 key-value 表"最后都会变成负担
一开始我们把 SEO 做成一张独立表(多态关联),把模块配置做成一张 key-value 表。两周后两张表都被删掉,字段内联回内容表。这篇讲这个反悔的技术理由。
配置中心怎么拆:从一张大表单到 10 个分组面板
一套交易平台有上百个配置项:站点信息、上传限制、短信、支付、地图、AI、静态化、评论开关…… 全塞在一页里,运营找不到,开发也不敢改。这篇讲配置中心的分组设计、敏感项处理与"改完立…