尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

CoopCycle核心领域模型指南:Task、TaskList与Delivery关系完整解析

CoopCycle核心领域模型指南:Task、TaskList与Delivery关系完整解析 CoopCycle核心领域模型指南Task、TaskList与Delivery关系完整解析【免费下载链接】coopcycle-webLogistics marketplace platform. Only for worker-owned business.项目地址: https://gitcode.com/gh_mirrors/co/coopcycle-webCoopCycle 是一个面向工人合作企业的开源物流与市场平台其核心领域模型由Task任务、TaskList任务列表和Delivery配送三个实体构成。理解它们的定义与关系是快速上手 CoopCycle 二次开发的第一步。本文将带你用最短时间搞懂这套物流领域模型。一、Task物流领域的最小执行单元Task任务是 CoopCycle 中最基础的领域对象代表一次具体的取货或送货动作。每个 Task 都有明确的类型定义见 Task.php常量含义典型场景TYPE_DROPOFF送货任务把餐品送到客户手中TYPE_PICKUP取货任务从门店/仓库取走包裹一个 Task 通常包含以下关键属性地址Address任务发生的位置时间窗口任务的最早/最晚时间范围执行人可分配给某位骑手courier️分组Group与标签Tag用于批量操作和分类统计Task 还支持开始、完成、失败、取消、改期等状态流转对应 API 端点如/tasks/{id}/done、/tasks/{id}/reschedule等这些操作都声明在 Task.php 的ApiResource注解中。二、TaskList骑手的每日工作清单源码注释对 TaskList 的定义非常直白——一位骑手每天的排班计划A TaskList represents the daily planning for a courier见 TaskList.php。TaskList 的关键属性包括date日期每个 TaskList 只属于某一天courier骑手该清单的执行者vehicle / trailer车辆/挂车骑手当天使用的交通工具值得注意的是TaskList 与 Task 之间并不是直接的一对多关系而是通过中间实体 Item.php 连接。每个 Item 持有三样东西task具体任务tour巡游路线多个任务可串成一条 tourposition执行顺序这个设计让调度员可以把一天的任务自由编排成若干线路再通过/task_lists/{id}/optimize接口交给 Vroom 路线优化引擎自动规划最优顺序。三、Delivery取货 送货 一单配送如果说 Task 是动作那么 Delivery 就是业务单据。它对应标准 Schema.org 的ParcelDelivery类型见 Delivery.php由pickup取货任务和dropoff送货任务两个 Task 组合而成。Delivery 支持四种组合形态定义在 Delivery.php类型常量结构说明TYPE_SIMPLE1 取 1 送最常见的一对一配送TYPE_MULTI_PICKUPN 取 1 送多店集货后统一送达TYPE_MULTI_DROPOFF1 取 N 送一次取货、多点派送TYPE_MULTI_MULTIN 取 N 送复杂的多对多调度此外Delivery 还能关联 Sylius 订单体系支持报价、支付并提供/deliveries/assert可行性校验与/deliveries/suggest_optimizations优化建议等实用接口。四、三者关系一图看懂用一句话概括Delivery 用 Task 表达取什么、送哪里TaskList 用 Task 表达某位骑手某天按什么顺序做什么。TaskList ── Item ── Task ── Delivery1个Delivery pickup dropoff 两个Task │ │ ├── date日期 ├── Address地址 ├── courier骑手 ├── 时间窗口 └── vehicle车辆 └── 分组 / 标签一个Task可以同时属于一个 Delivery作为取/送货动作和被编排进某个 TaskList作为当日计划项TaskList是人-车-日维度的运营视角Delivery是订单-货物维度的业务视角两个视角通过共享同一个Task实体打通这是整个领域模型最精妙的设计相关事件TaskCreated、TaskDone、TaskListUpdated 等定义在 src/Domain/Task/Event/ 目录可通过消息总线解耦通知、计费与路线重算等下游逻辑。五、动手定位核心文件速查表想理解什么去看哪里Task 实体与 API 操作src/Entity/Task.phpTaskList 实体与骑手日计划src/Entity/TaskList.phpTaskList 与 Task 的关联src/Entity/TaskList/Item.phpDelivery 实体与配送类型src/Entity/Delivery.php任务状态事件src/Domain/Task/Event/Cube.js 分析模型cube/Task.js、cube/Delivery.js、cube/TaskList.js总结CoopCycle 的核心领域模型可以浓缩为一张关系网Task 是原子Delivery 是取送的业务组合TaskList 是人车日的调度载体。掌握了这三者的定义与连接方式尤其是 TaskList 通过 Item 编排 Task 的设计你就已经读懂了 CoopCycle 调度系统的一半。如果你想搭建本地环境实践可以 clone 仓库git clone https://gitcode.com/gh_mirrors/co/coopcycle-web【免费下载链接】coopcycle-webLogistics marketplace platform. Only for worker-owned business.项目地址: https://gitcode.com/gh_mirrors/co/coopcycle-web创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表