use of com.whoiszxl.entity.schedule.SaleDeliveryScheduleResult in project shopzz by whoiszxl.
the class WmsFeignClientImpl method notifyPayOrderSuccess.
@Override
public ResponseResult<Boolean> notifyPayOrderSuccess(OrderInfoDTO orderInfo) {
// 更新WMS中心库存
for (OrderItemDTO orderItemDTO : orderInfo.getOrderItemDTOList()) {
SaleDeliveryScheduleResult scheduleResult = saleDeliveryScheduler.getScheduleResult(orderItemDTO);
WmsStockUpdater stockUpdater = wmsStockUpdaterFactory.create(WmsStockUpdateEventConstants.PAY_ORDER, scheduleResult);
stockUpdater.update();
}
return ResponseResult.buildSuccess();
}
use of com.whoiszxl.entity.schedule.SaleDeliveryScheduleResult in project shopzz by whoiszxl.
the class SubmitOrderConsumer method submitOrderSub.
@KafkaListener(topics = MQConstants.SUBMIT_ORDER_QUEUE, groupId = "default-group")
public void submitOrderSub(ConsumerRecord<String, String> record, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, Consumer consumer) {
log.info("订阅到新的提交订单,开始处理, 主题为:{}, 消息值为:{}", topic, record.value());
OrderCreateInfoDTO orderCreateInfoDTO = JsonUtil.fromJson(record.value(), OrderCreateInfoDTO.class);
List<OrderItemDTO> orderItemList = orderCreateInfoDTO.getOrderItemList();
for (OrderItemDTO orderItem : orderItemList) {
// 7.1 通过商品的SKU ID查询到货位库存的明细条目,并进行遍历,一个SKU可能在多个货位上
SaleDeliveryScheduleResult scheduleResult = saleDeliveryScheduler.schedule(orderItem);
List<SaleDeliveryOrderPickingItem> pickingItems = scheduleResult.getPickingItems();
// 7.2 创建出需要拣货的条目和发货的条目并进行批量入库
saleDeliveryPickingItemService.saveBatch(pickingItems);
// 7.3 更新wms中心的库存
WmsStockUpdater stockUpdater = wmsStockUpdaterFactory.create(WmsStockUpdateEventConstants.SUBMIT_ORDER, scheduleResult);
stockUpdater.update();
}
}
use of com.whoiszxl.entity.schedule.SaleDeliveryScheduleResult in project shopzz by whoiszxl.
the class SaleDeliverySchedulerImpl method schedule.
@Override
public SaleDeliveryScheduleResult schedule(OrderItemDTO orderItem) {
SaleDeliveryScheduleResult scheduleResult = new SaleDeliveryScheduleResult();
scheduleResult.setOrderItem(orderItem);
// 查询货位库存明细
LambdaQueryWrapper<ProductAllocationStock> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProductAllocationStock::getProductSkuId, orderItem.getSkuId());
List<ProductAllocationStock> stockList = productAllocationStockService.list(queryWrapper);
Integer remainingSendOutQuantity = orderItem.getQuantity();
Map<Long, SaleDeliveryOrderPickingItem> pickingItems = new HashMap<>(100);
for (ProductAllocationStock stock : stockList) {
// 如果这个货位上的库存刚好可以满足发货就直接更新
if (stock.getAvailableStockQuantity() >= remainingSendOutQuantity) {
updatePickingItem(stock, orderItem.getSkuId(), remainingSendOutQuantity, pickingItems);
break;
}
// 如果不满足,则需要分批处理
// 将当前的wms库存货位上的sku数量全部上到拣货里
updatePickingItem(stock, orderItem.getSkuId(), stock.getAvailableStockQuantity(), pickingItems);
// 剩余发货数量进行扣减
remainingSendOutQuantity = remainingSendOutQuantity - stock.getAvailableStockQuantity();
}
scheduleResult.setPickingItems(new ArrayList<>(pickingItems.values()));
return scheduleResult;
}
Aggregations