use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.
the class OrderFeignClientImpl method notifyDcPaySuccess.
@Override
public ResponseResult<Boolean> notifyDcPaySuccess(List<Long> orderIds) {
// 1. 更新订单到发货状态
List<Order> orderList = orderIds.stream().map(orderId -> {
Order order = new Order();
order.setId(orderId);
order.setOrderStatus(OrderStatusConstants.WAIT_FOR_DELIVERY);
order.setUpdatedBy("admin");
return order;
}).collect(Collectors.toList());
boolean updateFlag = orderService.updateBatchById(orderList);
for (Long orderId : orderIds) {
OrderInfoDTO orderInfo = orderService.getOrderInfo(orderId);
// 2. 清空购物车
ResponseResult<Boolean> clearCartResult = cartFeignClient.clearCheckedCartByMemberId(orderInfo.getMemberId());
if (!clearCartResult.getData()) {
log.error("下单成功,但是清空购物车失败了");
}
// 3. 通知库存中心更新库存
inventoryFeignClient.notifyPayOrderEvent(orderInfo);
// 4. 通知WMS订单支付成功,更新WMS中心库存,WMS新增出库单
wmsFeignClient.notifyPayOrderSuccess(orderInfo);
// 5. 更新会员中心等级与积分
memberFeignClient.notifyPayOrderSuccess(orderInfo.getMemberId(), orderInfo.getTotalAmount());
}
return ResponseResult.buildByFlag(updateFlag);
}
use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.
the class OrderServiceImpl method buildOrder.
/**
* 构建订单
* @param member
* @param orderId
* @return
*/
private Order buildOrder(MemberDTO member, long orderId, OrderSubmitRequest orderSubmitRequest) {
Order order = new Order();
order.setId(orderId);
order.setOrderSn(orderId + "");
// 1. 设置用户信息与订单状态
order.setMemberId(member.getId());
order.setUsername(member.getUsername());
order.setOrderStatus(OrderStatusConstants.UNKNOWN);
// 2. 配置收货信息
MemberAddressDTO memberAddress = memberFeignClient.getMemberAddress(orderSubmitRequest.getAddressId().toString());
order.setReceiverName(memberAddress.getReciverName());
order.setReceiverPhone(memberAddress.getReciverPhone());
order.setReceiverPostCode("todo");
order.setPayType(0);
order.setReceiverProvince(memberAddress.getProvince());
order.setReceiverCity(memberAddress.getCity());
order.setReceiverRegion(memberAddress.getDistrict());
order.setReceiverDetailAddress(memberAddress.getDetailAddress());
order.setCreatedBy(member.getUsername());
order.setUpdatedBy(member.getUsername());
order.setOrderComment(orderSubmitRequest.getOrderComment());
return order;
}
use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.
the class OrderServiceImpl method orderSubmit.
@Override
@Transactional
public String orderSubmit(OrderSubmitRequest orderSubmitRequest) {
// TODO 防重校验
// 0. 获取当前登录用户的信息
ResponseResult<MemberDetailDTO> memberInfoResult = memberFeignClient.getMemberInfo();
if (!memberInfoResult.isOk()) {
ExceptionCatcher.catchValidateEx(ResponseResult.buildError("用户异常"));
}
MemberDetailDTO memberDetailDTO = memberInfoResult.getData();
// 1. 创建订单和订单详细条目
OrderCreateInfo orderCreateInfo = createOrderInfo(memberDetailDTO, orderSubmitRequest);
// 2. 订单与订单详细条目入库
Order order = orderCreateInfo.getOrder();
this.save(order);
orderItemService.saveBatch(orderCreateInfo.getOrderItemList());
// 4. 创建一个操作日志订单状态管理器,在订单状态流转到待付款状态时记录操作记录
orderStateManager.create(order);
// 5. TODO 校验库存,锁定库存
List<Long> skuIds = orderCreateInfo.getOrderItemList().stream().map(OrderItem::getSkuId).collect(Collectors.toList());
ResponseResult<Boolean> responseResult = productFeignClient.checkStock(skuIds);
if (!responseResult.getData()) {
ExceptionCatcher.catchValidateEx(ResponseResult.buildError("库存不足"));
}
// 6. 使用优惠券
if (StringUtils.isNotBlank(orderSubmitRequest.getCouponId())) {
ResponseResult<Boolean> useCouponResult = promotionFeignClient.useCoupon(orderSubmitRequest.getCouponId());
if (!useCouponResult.isOk()) {
String message = useCouponResult.getMessage();
log.error("优惠券使用失败:{}", message);
ExceptionCatcher.catchValidateEx(ResponseResult.buildError("优惠券使用失败"));
}
}
// 7. 清空购物车中选中的item
cartService.clearCheckedCart();
// 7. 发送Kafka消息到WMS中心进行处理
// 7.1 通过商品的SKU ID查询到货位库存的明细条目,并进行遍历,一个SKU可能在多个货位上
// 7.2 创建出需要拣货的条目和发货的条目并进行批量入库
// 7.4 更新wms中心的库存
OrderCreateInfoDTO orderCreateInfoDTO = dozerUtils.map(orderCreateInfo, OrderCreateInfoDTO.class);
MQSender kafkaSender = mqSenderFactory.get(MQEnum.ROCKETMQ);
kafkaSender.send(MQConstants.SUBMIT_ORDER_QUEUE, JsonUtil.toJson(orderCreateInfoDTO));
return order.getOrderSn();
}
use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.
the class OrderServiceImpl method createOrderInfo.
/**
* 创建订单和订单条目信息
* @param memberDetailDTO 用户信息
* @param orderSubmitVo 提交的订单信息
* @return
*/
private OrderCreateInfo createOrderInfo(MemberDetailDTO memberDetailDTO, OrderSubmitRequest orderSubmitVo) {
MemberDTO member = memberDetailDTO.getMember();
// 1. 生成订单号
long orderId = idWorker.nextId();
// 2. 创建订单和订单条目的基本信息
Order order = buildOrder(member, orderId, orderSubmitVo);
List<OrderItem> orderItems = buildOrderItems(orderId);
// 3. 价格计算,计算订单总额
computePrice(order, orderItems);
OrderCreateInfo orderCreateInfo = new OrderCreateInfo();
orderCreateInfo.setOrder(order);
orderCreateInfo.setOrderItemList(orderItems);
orderCreateInfo.setFare(BigDecimal.ZERO);
orderCreateInfo.setPayPrice(order.getTotalAmount());
return orderCreateInfo;
}
use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.
the class OrderServiceImpl method updateStatus.
@Override
public Boolean updateStatus(Long id, Integer orderStatus) {
Order order = new Order();
order.setId(id);
order.setOrderStatus(orderStatus);
return this.updateById(order);
}
Aggregations