校园外卖小程序选择搭建方式时,功能演示必须对应实际版本和所选模块。本文处理一个具体工程问题:演示版已通过,交付时却换了版本,仍沿用旧审批。将方案版本、能力清单与验收状态绑定,避免旧结果被误用。
proposal以project_id、revision为联合主键,revision为递增整数;保存package_version、manifest_digest、phase和row_version。phase取draft、reviewed、tested、accepted、superseded。manifest_item以project_id、revision、requirement_id唯一,记录delivery、owner与dependency_status。
test_report保存proposal_revision、package_version、manifest_digest及每项结果。approval同样绑定完整三元组和审批人,不能只绑定一个项目名。内容变更新建revision,旧版本标superseded,报告不迁移到新版本。接口服务必须鉴权,并验证审批人有项目权限;模型不处理实际产品授权。
输入状态与动作 | 必须成立的条件 | 新状态与输出 | 异常反例 |
|---|---|---|---|
draft提交评审 | 必需项完整、责任与依赖已确认 | reviewed,记录摘要 | 未知模块不能算已包含 |
reviewed执行测试 | 版本与清单摘要完全匹配 | 全部必需项通过才tested | 旧版报告被拒 |
tested签收 | 授权审批、报告与当前revision匹配 | accepted,固化签收记录 | 只匹配项目名不够 |
修改已评审清单 | 具备修改权限与期望row_version | 新revision=draft,旧版superseded | 不能保留原accepted状态 |
并发更新 | 比较row_version | 仅一方更新,另一方冲突重读 | 后到请求不覆盖新清单 |
构造项目C1、revision=3、package_version=v1、digest=H3,需求R1为中转模块。依赖确认后draft→reviewed;报告绑定3/v1/H3且R1通过,转tested;有权限的负责人签收后accepted。加入取餐柜R2,生成revision=4、digest=H4,phase=draft;3/v1/H3报告不能批准4/v1/H4。以上为设计预期,未执行完整系统测试。
BEGIN;
SELECT row_version,phase,manifest_digest FROM proposal
WHERE project_id=:project AND revision=:revision FOR UPDATE;
-- 锁内核验认证权限、当前phase、报告绑定版本和摘要
UPDATE proposal SET phase='accepted',row_version=row_version+1
WHERE project_id=:project AND revision=:revision
AND row_version=:expected_row_version AND phase='tested'
AND manifest_digest=:tested_digest;
-- 影响行数必须为1,否则回滚,返回冲突并重读
INSERT INTO approval(project_id,revision,manifest_digest,approver)
VALUES(:project,:revision,:tested_digest,:authenticated_approver);
COMMIT;若报告只存project_id,换套餐、换模块以后查询仍可能返回旧通过。审批与报告绑定相同不可变版本,变更产生新revision,可使旧报告明确失效。保存清单和报告原件,摘要只能帮助校验内容一致,不能证明测试真实或人员有权限。
选择托管产品、自有环境或二次开发时,都应将演示版本、模块范围和维护责任对应到相同需求。本文模型只支撑版本验收子问题,不提供具体产品实现、性能、价格或交付效果的证明。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。