@Wahson
2018-06-18T14:53:28.000000Z
字数 3402
阅读 1196
工作
门店收货逻辑调整: 门店多次收货,原2个接口合并为一个接口,
CreateStoreInStockOrderNotTourAction、ResetStoreInStockOrderNotTourAction=> StoreReceiptAction // 门店收货前置检查:1. 配送单号校验2. (配送单状态 == 配送中) || (配送单状态 == 配送完成 && 入库单创建时间为当天)3. 配送单仓库实发 = 门店实收 + 拒收 + 缺货代码逻辑:1. 根据配送单id, 查询门店入库单2. 如果没有门店入库单(第一次收货),则新建入库单和入库子单,保存sku入库数3. 如果存在入库单(非第一次收货),更新入库单子单数量、金额,更新入库主单数量、金额,fire库存事件,更新门店实时库存4. 更新配送单实收数、拒收数、缺货数、拒收原因
接口定义:void wmsDeliveryRejectionOrAbsenceSync()定时配置: @ScheduledTaskCron(cron = "0 0 2 * * ?")逻辑:1. 查询 deliveryOrders =select d.* from delivery_order djoin stock_order so on d.id = so.delivery_order_idwhere d.from_type = 仓库 and d.to_type = 门店and so.created_at >= date_sub(current_date, interval 1 day) and so.created_at < current_date// 找出有拒收数量或缺货数量的配送单val list = deliveryOrders.map { delivery =>val deliveryOrderItems = queryDeliveryOrderItems(delivery.id)val doisWithRejection = deliveryOrderItems.filter(_.rejectionNum > 0)val doisWithAbsence = deliveryOrderItems.filter(_.absenceNum > 0)(delivery, doisWithRejection, doisWithAbsence)}// 生成缺货/拒收修正单// 构造拒收推送实体val rejections = list.map { item =>constructPostWmsRequest(item._1, item._2)}// 构造缺货推送实体val absences = list.map { item =>constructPostWmsRequest(item._1, item._3)}// 推送wms// PostWmsRequest 增加字段relatedDeliveryOrderId 关联的配送单idnew PostDeliveryOrderToWmsAction(rejections ++ absences).execute
接口定义:void autoConfirm()定时配置:@ScheduledTaskCron(cron = "0 30 0 * * ?")处理逻辑:// 1. 找待确认且离创建时间超过31天的修正单val correctOrders = select * from correct_order where status = 待确认 and delivery_from_type = 仓库 and delivery_to_type = 门店 and created_at < date_sub(current_date, interval 31 day)correctOrders.foreach { correctOrder =>//3. 更新子单 仓库确认拒收数&拒收金额 或 确认缺货数&确认缺货金额update correct_order_item setconfirm_reject_num = case when absence_num <> confirm_absence_num then reject_num else 0 end,confirm_reject_amount = case when absence_num <> confirm_absence_num then reject_amount else 0 end,confirm_absence_num = case when reject_num <> confirm_reject_num then absence_num else 0 end,confirm_absence_amount = case when reject_num <> confirm_reject_num then absence_amount else 0 endwhere correct_order_id = ${correctOrder.id};// 逻辑说明: 如门店拒收数量和仓库确认拒收数量不相等,31天内依然没有收到wms回抛缺货数,则默认仓库接受门店缺货数,更新confirm_absence_num = absence_num}// 3. 更新主单状态update correct_order set status = 待裁决 where id in (${ids}));
不变量规则:
1. 当且仅当门店拒收数量和仓库确认拒收数量 或 门店缺货数量和仓库确认缺货数量不相等,是存在修正单,且修正单状态为待确认。
接口定义:处理逻辑:val deliveryOrder = queryDeliveryOrderById(request.relatedDeliveryOrderId)val deliveryOrderItems = queryDeliveryOrderItems(deliveryOrder.id)val correctOrderOpt = queryCorrectOrderByDeliveryOrderId(deliveryOrder.id)request.修正类型 match {case 拒收 =>// 比对找出有拒收差异的skuif(correctOrderOpt.isDefined) {if(有差异的skus.size > 0) {更新子单确认拒收数量和金额()更新主单相应数量和金额()}更新主单状态 = 待裁决} else {if(有差异的skus.size > 0) {修正单状态 = if(deliveryOrderItems.exist(sku.absenceNum > 0)) 待确认 else 待裁决新建修正单(修正单状态)}}case 缺货 =>// 比对找出有缺货差异的skuif(correctOrderOpt.isDefined) {if(有差异的skus.size > 0) {更新子单确认缺货数量和金额()更新主单相应数量和金额()}更新主单状态 = 待裁决} else {if(有差异的skus.size > 0) {修正单状态 = if(deliveryOrderItems.exist(sku.rejectionNum > 0)) 待确认 else 待裁决新建修正单(修正单状态)}}}
接口定义: void makeLogisticsAdjudgement(request)处理逻辑:1. 更新修正子单裁决拒收数/金额和裁决缺货数/金额字段2. 更新修正主单相应数量/金额, 状态 = 已裁决3. 裁决拒收数和裁决缺货数推送wms, 接口待wms给出
接口定义:StoreRejectionReceiveAction接口逻辑:门店收货拒收,总部裁决后,对于仓库打回的拒收货物的收货操作根据修正单总部裁决拒收数,更新收货数量,门店入库(入库数量=门店拒收数-总部裁决拒收数)
参照原型
配送单日结前可以多次收货,日结后不能收货修正单裁决后,配送单可以收货,收货时只能修改拒收数量
