宋小菜树根项目计划方案
1、PRD+UI
PRD地址: https://星星.yuque.com/prod-tech/589913/iifqqm
UI: 待定
2、数据模型
2.1 数据结构

3、影响点
采购交互概述
3.1 采购装货单
3.1.1 装货单列表查询
| 现状 |
解决方案 |
| 无 |
检索调度单未关联的的装货单数据 透大致装卸数据[logistics_shipment+logistics_shipment_detail] 供应商承运的只能看到自己创建的采购单相关的装货单 承运的采购单能看到所有相关装货单 |
3.1.1.1 [API]采购-商品详情-装卸路线

根据需求子单source_sub_id查询多条装货单细节信息,并体现出实装、实卸请看
3.1.1.2 [API]物流-装货单列表

3.1.2 装货单-详情查询

| 现状 |
解决方案 |
| 无 |
透出装货单所有装卸货数据细节+采购员+供应商[logistics_shipment+logistics_shipment_detail] |
3.1.2.1 [API]装货单简约信息提取
3.1.2.2 [API]装货单详细信息

3.1.2.3 [API]装货单-调度单编辑详细信息

3.1.3 装货单-装货详情查询

| 现状 |
解决方案 |
| 无 |
透出装货单数据细节 装货点及装货相关skuId,卸货点及卸货相关skuId,采购员&采购单&供应商,装货单制单时间 |
3.1.3.1 [API]装货单详细信息
| _ |
_ |
 |
 |
3.1.3.2 [API]装货单编辑详情信息

3.1.4 装货单创建-同步
| 现状 |
解决方案 |
| 无 |
采购单与采购子单数据同步结构一致 新增采购装货单同步创建逻辑 数据结构如logistics_shipment,logistics_shipment_detail |
3.1.5 装货单-发货

| 现状 |
解决方案 |
| 无 |
根据此次调度数量修改实发数量及附录发货单&车辆照片 |
3.1.5.1 [API]物流-发货操作-沈伟

星星.logisticsservice.delivery.shipment.update
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.delivery.shipment.update
3.1.6 装货单-数量修改
| 现状 |
解决方案 |
| 无 |
装货单直接提供对外数量操作能力 需要遵循的:采购数量=装货总数量=卸货总数量 |
3.1.6.1 [API]采购-线路详情-数量修正

修改某个装货单的应装、应卸数量
3.2 调度单
3.2.1 调度单列表-待|已发货 查询
| 现状 |
解决方案 |
| 无 |
搜罗待发货状态 列表展示调度单号、调度单制单员姓名、调度车辆车牌号及车长、装货点以及计划装货量、卸货点以及计划卸货量 |
3.2.1.1 [API]物流-调度单-待发车列表

3.2.2 调度单详情查询
| 现状 |
解决方案 |
| 无 |
装货单大概信息、装货单卸货详细数据、调度单基本信息 |
3.2.2.1 [API]物流-调度单详情-沈伟
| _ |
_ |
 |
 |
当前调度单详情
星星.logisticsservice.delivery.detail
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.delivery.detail
3.2.3 调度单司机、车辆查询

| 现状 |
解决方案 |
| 根据姓名、手机号查询司机,并填充司机和车辆信息 |
复用原逻辑 |
3.2.3.1 [API]司机车辆各类API

3.2.4 调度单创建

| 现状 |
解决方案 |
| 无 |
发货单剩余发货量,划定此次调度单应承运量 填充司机车辆信息 1:本次调度sku件数小于等于sku采购装货单件数 2:本次剩余调度件数可后续派车生成新的调度单 3:装货单所有sku的本次调度件数都为0时,本装货单过滤不包含在所生成的调度单 4:只有一个装货单且调度件数为0,则调度单生成失败 数据MQ同步采购单状态 |
3.2.4.1 [API]调度单创建-沈伟

星星.logisticsservice.delivery.create
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.delivery.create
3.2.4.2 [API]调度单保存-沈伟

星星.logisticsservice.delivery.update
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.delivery.update
3.2.5 调度单提交-承运单创建

| 现状 |
解决方案 |
| 无 |
1、调度单所有装货单都发货后,调度单可通过点击“生成承运单”按钮创建承运单。承运单取最后一个发车的装货单实际发车时间;承运单创建时间是生成承运单的时间 2、如果调度单发货总量等于应卸总量,按装货单原有卸货分配原则分配各个卸货点的卸货量生成承运单; 3、如果调度单发货总量小于应卸总量,优先分配服务站类型卸货点,其次档口类型卸货点,最后中心仓类型卸货点,同种类型卸货点按卸货先后顺序分配,直到发货量分配完毕; 4、如果调度单发货总量大于应卸总量,剩余量分配到最后卸货点; 5、卸货分配量可修改; 6、确定卸货方案时,校验总发货量是否等于总卸货分配量; 7、调度单生成承运单后,推送调度单的发货信息(装货点以及装货量)到采购模块; 数据MQ同步采购服务装货单:实发数据、采购单状态跟进 8、老批次号逻辑情况原消息通知 |
3.2.5.1 [API]物流-承运单创建-沈伟

星星.logisticsservice.scheduling.delivery.create
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.scheduling.delivery.create
3.2.6 调度单(待发货)取消
3.2.6.1 [API]物流-调度单取消

3.3 承运单
3.3.1 承运单详情-客户分配件数
| 图例 |
图例 |
 |
 |
| 现状 |
解决方案 |
| 无 |
发货过多、过少取不同文案发货不足件数或销端需补单件数 透各个客户的下单、分配、签收量 |
3.3.2 承运单-直发匹配客户订单-沈伟
基地直发基于客户配送推行全国,区分两种订单
A:基于客户配送新流程的订单
B:基于消耗小仓库存老流程的订单
根据以上两类订单,区分两类签收提货操作,由物流承运时告知交易组订单类别
接下来只有A类订单;过渡期禁止业务分操作场内调线这类需要B类订单的调度
1 2 3 4 5 6 7
| 业务规则: 1、调度单生成承运单时,卸货点为服务站的发货量匹配客户订单,匹配规则如下: A、有效订单: 匹配的订单全是基于客户配送新流程订单 B、订单范围:起始时间为上一个自然日凌晨后的订单; C、匹配原则:按订单量由大到小分配消耗卸货点(服务站)发货量,直到发货量匹配消耗完成; 2、已经匹配的客户订单,在承运单生成后40小时触发签收、提货流程(线上原有流程),剩余量等待该服务站后续有新订单时再触发签收、提货流程; 3、所有卸货点分配量完成签收后,承运单状态变更为配送完成;
|
| 现状 |
解决方案 |
| 无 |
1、调度单生成承运单时,卸货点为服务站的发货量匹配[新流程]客户订单,匹配规则如下: A、有效订单: 匹配的订单全是基于客户配送新流程订单 B、订单范围:起始时间为上一个自然日凌晨后的订单; C、匹配原则:按订单量由大到小分配消耗卸货点(服务站)发货量,直到发货量匹配消耗完成; 2、匹配到的客户订单进行交易Mq通知 3、已经匹配的客户订单,在承运单生成后40小时触发签收、提货流程(线上原有流程),剩余量等待该服务站后续有新订单时再触发签收、提货流程; 4、所有卸货点分配量完成签收后,承运单状态变更为配送完成; |
3.3.3 承运单-直发自动签收-沈伟
| 现状 |
解决方案 |
| 无 |
匹配[服务站]基于客户配送新订单后,进行签收动作 承运单数据状态更正 基于客户订单库存入库 当前发货子单[卸货点+sku]分配完应卸数量 通知采购同步装货单签收信息:装货单号,实签数量,实签人,实签时间点,装货子单状态跟进:已签收 通知交易触发订单提货:需求子单号,需求子单状态,实签数量情况 |
订单定时签收
订单客户主动签收
3.3.4 承运单-文案
3.3.5 承运单-多发货点清洗
| 现状 |
解决方案 |
合并清洗硬编码限制单个装货点 站点顺序除类型排序外,实际到达时间点排序 |
解除合并清洗承运单上部分硬编码限制单个装货点 站点顺序除类型排序外,多装货单按货时间先后顺序排列 |
3.3.6 承运单-多发货点查询
| 现状 |
解决方案 |
| 查询条件:发车点,只支持首个发货地 |
变更支持多个发货地查询 |
3.4 批次号影响
3.4.1 基地直发批次号
| 现状 |
解决方案 |
原基地单批次号颗粒度到达需求子单即采购子单 |
现基地单批次号颗粒度不变化 |
3.4.2 客户订单配送批次号入小仓
| 现状 |
解决方案 |
| 原先客户订单配送只支持成配 |
现客户订单配送支持基地,以客户订单号及基地直发批次号入库小仓,并后期签收提货 |
3.5 交易新老客户订单
3.5.1 中间态数据-基地直发单
基地直发基于客户配送推行全国,区分两种订单
A:基于客户配送新流程的订单
B:基于消耗小仓库存老流程的订单
根据以上两类订单,区分两类签收提货操作,由物流承运时告知交易组订单类别
接下来只有A类订单;过渡期禁止业务分操作场内调线这类需要B类订单的调度
| 现状 |
解决方案 |
只有苏锡常城配派送的订单才是A类订单 由于交易改造对基地单未处理,无法使用调整路线配送 |
树根推行上海,苏锡常,浙江三地 基地直发单将自动匹配A类订单并进行自动或主动签收、提货 中间态基地直发单允许使用调整路线,派送的订单是B类订单 所有城市的城配订单将使用A类订单 |
3.6 场内调线
3.6.1 场内调整路线
关闭调线功能
| 现状 |
解决方案 |
| 原先基于客户订单配送,由于签收和派送不确定性,试点城市的调整路线功能关闭 |
现如今交易改造#客户订单城配+树根#基地直发推行全国,场内调整路线关闭 其他调度流程(基地直发+客户订单城配)的订单走基于客户自动提货流程 |
3.7 采购单
3.7.1 采购单确认-沈伟
| 现状 |
解决方案 |
| _ |
对采购单所关联的所有未生效装货自动进行生效 |
星星.logisticsservice.requirement.valid
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.requirement.valid
3.7.2 采购单取消-沈伟
| 现状 |
解决方案 |
| _ |
当前采购单如果有关联调度单,则不允许采购单取消操作 |
星星.logisticsservice.requirement.valid
http://gateway.星星.com/api_admin/api_doc/detail.htm?api_name=星星.logisticsservice.requirement.valid
4、交互内容确定
[采购交互点]-MQ-生成采购单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| @Data public class PurchaseRequirementSyncEvent implements Serializable {
private static final long serialVersionUID = 4530980811382387427L;
private Integer sourceId;
private Integer sourceType;
private Integer logisticsType;
private Integer storeHouseId;
private String storeHouseName;
private Long pickTime;
private List<PurchaseRequirementDetailSyncEvent> skuList;
@Data public static class PurchaseRequirementDetailSyncEvent implements Serializable {
private static final long serialVersionUID = 7392533409927455042L;
private String sourceSubId;
private Integer skuId;
private BigDecimal amount;
private List<PurchaseOrderSkuLoadUnload> loadUnloadList;
}
@Data public static class PurchaseOrderSkuLoadUnload implements Serializable {
private static final long serialVersionUID = -4785882465921942883L; private List<PurchaseOrderLoad> loadList;
private List<PurchaseOrderUnload> unloadList; }
@Data public static class PurchaseOrderLoad implements Serializable {
private static final long serialVersionUID = -6628860385227140111L; private String loadProvince;
private String loadCity;
private String loadArea;
private Integer loadNum;
private Long loadTime;
} @Data public static class PurchaseOrderUnload implements Serializable {
private static final long serialVersionUID = -503341045385472615L; private Integer unloadId;
private String unloadName;
private Integer unloadType;
private Integer unloadNum; } }
|
[采购交互点]-确认/取消采购单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class PurchaseRequirementValidDTO implements Serializable {
private static final long serialVersionUID = -7043483325389542517L;
private Integer sourceId;
private Integer sourceType;
}
|
[物流交互点]-生成调度单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
public class DeliveryCreateEvent implements Serializable {
private static final long serialVersionUID = -4096681865264014388L;
private Long deliveryId;
private Integer operatorId;
private List<RequirementDeliveryDetailInfo> detailInfoList;
@Data public static class RequirementDeliveryDetailInfo implements Serializable {
private static final long serialVersionUID = 5070931901568450400L;
private Integer detailStatus;
private Integer shipmentStatus;
private String sourceSubId;
private Integer sourceType;
private Integer skuId;
} }
|
[物流交互点]-取消调度单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
@Data public class DeliveryCancelEvent implements Serializable{
private static final long serialVersionUID = -860806214240471719L;
private List<RequirementCancelDeliveryDetailInfo> detailInfoList;
private Long deliveryId;
private Integer operatorId;
@Data public static class RequirementCancelDeliveryDetailInfo implements Serializable {
private static final long serialVersionUID = 2632503231194481964L;
private Integer detailStatus;
private String sourceSubId;
private Integer sourceType;
} }
|
[物流交互点]-生成承运单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| @Data public class SchedulingCreateEvent implements Serializable {
private static final long serialVersionUID = -26532044446909589L;
Long schedulingId;
private Integer operatorId;
private List<RequirementDetailInfo> orderBatchInfos;
@Data public static class RequirementDetailInfo implements Serializable {
private Integer detailId;
private Integer detailStatus;
private String sourceSubId;
private Integer sourceType;
private Integer skuId;
private String batchNo;
private BigDecimal thisTimeAmount;
private BigDecimal totalAmount;
} }
|
[物流交互点]-签收
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
@Data public class DeliverySignEvent implements Serializable { private static final long serialVersionUID = 5686211734579815422L;
private String key;
private List<SignEventInfo> eventInfoList;
public static class SignEventInfo implements Serializable {
private static final long serialVersionUID = -6646638350640082703L;
private Long schedulingId;
private Integer deliveryStatus;
private Integer requirementDetailId;
private Integer signAmount;
private String sourceSubId;
private Integer skuId;
private Integer deliverySourceId; } }
|
sql原表字段变更
1
| logistics_delivery_source#shipment_detail_id
|
5、开发说明
分支
里程碑
国内查看评论需要代理~