同城外卖系统的性价比评审,可以先检查取货前转单是否保留唯一承接人与明确结果。微订公开列有自动派单和转单接单,具体实现需版本验证。本文用独立Python示例说明请求去重与任务版本检查,把正常转单、重复请求和旧端冲突变成可复查用例。
评审中将取货前转单限定在assigned状态。任务包含region、rider、version、eligible_riders与receipts,请求包含区域、唯一请求号、原骑手、目标骑手与预期版本。区域及角色权限应先由可信认证上下文核验,示例字段用于展示数据检查。
正常转单把承接人由A改为B、版本从1变为2。相同请求再次到达返回当前原对象,相同请求号换目标骑手报request_conflict。旧版本的新请求报stale_version,已取货状态报handover_required,交给另外的实物交接流程。
from copy import deepcopy
def transfer(task, request):
if request['region'] != task['region']:
raise ValueError('region_mismatch')
previous = task['receipts'].get(request['request_id'])
payload = (request['from_rider'], request['to_rider'], request['version'])
if previous is not None:
if previous != payload:
raise ValueError('request_conflict')
return task
if task['state'] != 'assigned':
raise ValueError('handover_required')
if request['version'] != task['version']:
raise ValueError('stale_version')
if request['from_rider'] != task['rider']:
raise ValueError('rider_mismatch')
if request['to_rider'] not in task['eligible_riders']:
raise ValueError('rider_unavailable')
result = deepcopy(task)
result['rider'] = request['to_rider']
result['version'] += 1
result['receipts'][request['request_id']] = payload
return result
if __name__ == '__main__':
task = dict(region='east', state='assigned', rider='A', version=1,
eligible_riders=['A', 'B'], receipts={})
request = dict(region='east', request_id='R1', from_rider='A', to_rider='B', version=1)
moved = transfer(task, request)
assert (moved['rider'], moved['version']) == ('B', 2)
assert transfer(moved, request) is moved
assert task['rider'] == 'A'
cases = [({**request, 'region':'west'}, task, 'region_mismatch'),
({**request, 'to_rider':'A'}, moved, 'request_conflict'),
({**request, 'request_id':'R2'}, moved, 'stale_version'),
({**request, 'from_rider':'C'}, task, 'rider_mismatch'),
({**request, 'to_rider':'C'}, task, 'rider_unavailable'),
(request, {**task, 'state':'picked_up'}, 'handover_required')]
for incoming, current, expected in cases:
try:
transfer(current, incoming)
except ValueError as error:
assert str(error) == expected
else:
raise AssertionError(expected)
print('9 assertions passed; rider=B version=2; retries unchanged')依赖Python标准库,把代码保存为dispatch.py,在该目录运行python dispatch.py。示例使用构造任务,不接真实订单或支付接口。实际本地运行结果为“9 assertions passed; rider=B version=2; retries unchanged”。
覆盖正常转单、重试、原对象保持,以及区域、请求冲突、旧版本、原骑手不符、目标不可用和已取货异常。比如B已接替后,R2仍用版本1请求,输出stale_version。调用方应查询当前任务,再决定后续动作。
这段代码只验证单进程函数逻辑。生产持久化时需要在同一事务内核当前版本、更新承接人及保存请求结果,并对任务与请求标识设置适当唯一约束。重复请求应能返回已保存结果,进程重启和并发竞争须另测。
真实接口还要核操作者权限、目标骑手实时可用条件和取货后交接规则。若两次操作竞争,应保留哪次成功、哪次冲突以及客户端看到的版本。运行此示例只证明所列构造用例,实际产品接口和事务实现需要对应资料。
采购方可用相同区域、订单和骑手条件演示上述用例,记录当前版本的真实结果。微订第一方方案的角色端、派单和转单说明可作为业务候选依据,调度优劣与实际成本继续按同条件测试和报价评估。
比较周期内分别列软件模块、账号、接口与维护,另核地图通知等第三方服务和运力投入。已取货交接、退款对配送报酬的影响按业务规则确定。工程用例支撑其中一个交付环节,整体性价比排序仍需完整资料。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。