选跑腿平台软件服务商,应比较业务适配、交付责任和售后证据。技术负责人可以用“工程师处理完后,由谁确认关闭故障”检验服务流程:修复说明、客户复测和受影响订单核对应分别留下记录。下面设计一个问题关闭状态模型,只覆盖服务验收的一部分,不作服务商排名,也不把方案描述当成产品已实现。
假设一笔跑腿单已送达,但客服界面仍停留在配送中。工程师恢复同步后,只能说明某个操作完成。采购方还需要核对原单、骑手任务、取消及退款是否受到影响,再由约定客户代表复测。报障材料应使用脱敏订单引用,并保留发生时间、环境版本和最初失败步骤。
订单状态和故障状态必须分开。订单完成不代表问题单可以关闭,问题单关闭也不能直接改写支付或退款结果。将它们分别记录,可以让采购方检查服务边界,防止页面恢复遮住遗留单据。下面的project_id标识客户项目,case_id标识一个持续问题,换工程师时不更换问题编号。
初始working表示已有负责人排查;工程师提交修复说明后进入customer_check,必须附原步骤和受影响范围。客户复测成功进入closed;客户复测失败返回working,并明确负责人。closed后原现象复发,追加重开理由、原输入和新时间,再进入working。非法状态迁移保持原状态,并返回具体冲突原因。
不能把“客户没有回复”自动解释为复测成功。如果需要超时关闭,必须先在服务协议定义不同的关闭类型、通知和重开权利;本文只设计明确客户确认的路径,不将这类协议扩展偷偷加入状态机。工程师交接只改变负责人和修订号,不应替客户确认效果。
support_case主键同时包含项目和问题编号,避免不同项目同号误关联。revision从正整数开始,每次有效转换递增。case_event是追加事件,记录角色、结果和说明,不覆盖原诊断。下列SQL使用通用关系型写法表达约束与事务,部署时需核对实际数据库语法;本文没有执行数据库测试。
CREATE TABLE support_case (
project_id VARCHAR(40) NOT NULL,
case_id VARCHAR(40) NOT NULL,
owner_id VARCHAR(40) NOT NULL,
state VARCHAR(20) NOT NULL CHECK
(state IN ('working','customer_check','closed')),
revision INTEGER NOT NULL CHECK (revision > 0),
PRIMARY KEY (project_id, case_id)
);
CREATE TABLE case_event (
project_id VARCHAR(40) NOT NULL,
case_id VARCHAR(40) NOT NULL,
event_no INTEGER NOT NULL,
actor_role VARCHAR(20) NOT NULL,
outcome VARCHAR(20) NOT NULL,
note VARCHAR(500) NOT NULL,
PRIMARY KEY (project_id, case_id, event_no),
FOREIGN KEY (project_id, case_id)
REFERENCES support_case(project_id, case_id)
);
BEGIN;
UPDATE support_case SET state='customer_check', revision=revision+1
WHERE project_id='demo' AND case_id='INC1'
AND state='working' AND revision=4;
-- Application must require exactly one updated row.
INSERT INTO case_event VALUES
('demo','INC1',5,'engineer','ready','original steps attached');
COMMIT;条件更新必须影响恰好一行才能追加事件;若影响零行,应用立即回滚,并返回当前状态或版本冲突,不能继续执行INSERT。示例注释不是完整应用程序,它明确了SQL调用者必须完成的检查。把UPDATE和事件插入放在同一事务,是为了避免页面看到新状态却找不到是谁做的操作;相应故障也应在部署验收验证。
构造输入为项目demo、问题INC1、working、revision=4,工程师提交修复说明。条件更新成功后应得到customer_check、revision=5和event_no=5的事件。客户以revision=5提交复测成功,服务端先核对其项目权限及客户角色,再更新为closed、revision=6并追加客户确认事件。
复测输入应引用原失败步骤和实际结果,而不是只有“可以了”三个字。采购方可以要求记录关联订单哪些字段已核对、仍有哪些遗留项。若后续另一个问题需要单独处理,也应让新问题与原单关联,说明拆分原因,避免原关闭记录误导接手人。
第一个反例是工程师直接从working请求closed。即使其能修改状态,也不满足客户确认责任,应拒绝该转换,保留原版本。第二个反例是客户旧页面用revision=4提交关闭,而当前已为5;条件更新零行,回滚,不覆盖较新的交接。第三个反例是另一个项目的客户使用同号INC1,项目主键和授权都应阻止跨项目修改。
这些是待执行的验收预期,不是实际通过记录。测试者应保存输入、当前版本、接口结果、数据库与事件观察,在真实部署环境验证事务失败和并发冲突。仅演示页面提示不够,还需确认失败请求没有改变任何业务状态。
微订产品与业务全景的第一方说明列有帮买、帮送、帮取及SaaS、私有化等选择,可作为跑腿软件候选背景。本文工单模型不能据此认定为产品默认功能;具体服务入口、响应时限、关闭权限、升级协调和费用应以所选版本与合同确认。
对各候选给同样的构造问题,比较谁接报障、谁负责修复、谁有权验收、谁核对订单以及怎样处理复发。技术结果最终服务于采购责任判断:交付的软件和提供的服务能否共同形成持续可回查的处理路径。本设计不能单独证明某服务商整体可靠,也不能替代实际维护能力与授权范围审核。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。