java-mall/ShopOrderBaseServiceImpl.java

119 lines
5.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 确认收货处理
* @param order_ids 订单ID列表
* @param order_rows 订单数据列表
* @return 是否处理成功
*/
public boolean receive(List<String> order_ids, List<ShopOrderBase> order_rows) {
// 检测数据是否合法,过滤允许修改的数据
if (CollUtil.isEmpty(order_ids)) {
throw new ApiException(I18nUtil._("请选择需要确认收货的订单!"));
}
if (CollUtil.isEmpty(order_rows)) {
order_rows = gets(order_ids);
}
List<String> receive_id_row = new ArrayList<>();
for (ShopOrderBase order_row : order_rows) {
// 判断订单是否可以确认收货
if (ifReceive(order_row.getOrder_state_id())) {
receive_id_row.add(order_row.getOrder_id());
// 增加积分和经验
// todo 目前付款支付积分,此处为收货后发放
Integer user_id = order_row.getBuyer_user_id();
String order_id = order_row.getOrder_id();
Integer store_id = order_row.getStore_id();
ShopOrderData order_data_row = shopOrderDataService.get(order_id);
BigDecimal order_points_add = order_data_row.getOrder_points_add();
BigDecimal order_points_add_all = order_points_add.add(order_data_row.getOrder_double_points_add());
// 发放购物积分
if (CheckUtil.isNotEmpty(order_points_add_all)) {
String desc = String.format(I18nUtil._("购物获取积分 %s订单号 %s"), order_points_add_all, order_id);
if (!payService.points(user_id, order_points_add_all, PointsType.POINTS_TYPE_CONSUME, desc, store_id, null, order_id)) {
throw new ApiException(I18nUtil._("积分操作失败!"));
}
}
// todo 根据送花郎插件是否开启显示是否需要分钱给不同商户
/*
boolean hall_enable = accountBaseConfigService.getConfig("hall_enable", false);
if (hall_enable) {
BigDecimal order_commission_fee = order_data_row.getOrder_commission_fee();
sendMoneyForTransfer(order_row, order_commission_fee);
}
*/
// 分销功能处理
String fx_settle_type = accountBaseConfigService.getConfig("fx_settle_type", "receive");
if (StrUtil.equals(fx_settle_type, "receive")) {
// todo settleDistributionUserOrder
shopDistributionUserOrderService.settleDistributionUserOrder(order_id);
}
// 重要:拉卡拉给平台和代理商分账
Pair<Boolean, String> retOrderSeparateRet = lakalaApiService.innerDoOrderSeparate(order_row.getOrder_id(), Convert.toStr(order_row.getStore_id()));
if (!retOrderSeparateRet.getFirst()) {
throw new ApiException(I18nUtil._("平台或代理商分账失败: " + retOrderSeparateRet.getSecond()));
}
// 统计总营业额
ShopStoreAnalytics analytics_row = shopStoreAnalyticsService.get(store_id);
BigDecimal order_payment_amount = order_row.getOrder_payment_amount();
analytics_row.setStore_trade_amount(NumberUtil.add(analytics_row.getStore_trade_amount(), order_payment_amount));
if (!shopStoreAnalyticsService.edit(analytics_row)) {
throw new ApiException(ResultCode.FAILED);
}
}
}
// 检查是否有符合条件的订单
if (CollUtil.isEmpty(receive_id_row)) {
throw new ApiException(I18nUtil._("无符合确认收货条件的订单!"));
}
// 修改订单状态, 随机去一个订单获取店铺编号
ShopOrderBase shopOrderBase = order_rows.get(0);
Integer store_id = shopOrderBase.getStore_id();
editNextState(receive_id_row, store_id, StateCode.ORDER_STATE_SHIPPED, order_rows, 0);
// 如果是商家,且启用供应商,则商家看到供应商店铺商品 store_type = 2
boolean ifSupplierMarket = accountBaseConfigService.ifSupplierMarket();
UserDto user = getCurrentUser();
store_id = user != null ? Convert.toInt(user.getStore_id(), 0) : 0;
// 处理供应商市场的库存增加逻辑
if (ifSupplierMarket && CheckUtil.isNotEmpty(store_id)) {
// 供应商商品,增加商家库存
QueryWrapper<ShopOrderItem> itemQueryWrapper = new QueryWrapper<>();
itemQueryWrapper.in("order_id", receive_id_row);
List<ShopOrderItem> order_item_rows = shopOrderItemService.find(itemQueryWrapper);
List<Long> item_src_ids = order_item_rows.stream().map(ShopOrderItem::getItem_id).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(item_src_ids)) {
QueryWrapper<ShopProductItem> productItemQueryWrapper = new QueryWrapper<>();
productItemQueryWrapper.in("item_src_id", item_src_ids).eq("store_id", store_id);
List<ShopProductItem> product_item_rows = shopProductItemService.find(productItemQueryWrapper);
// 更新供应商商品库存
for (ShopProductItem product_item_row : product_item_rows) {
String item_src_id = product_item_row.getItem_src_id();
Optional<ShopOrderItem> orderItemOpl = order_item_rows.stream().filter(s -> ObjectUtil.equal(s.getItem_id(), item_src_id)).findFirst();
if (orderItemOpl.isPresent()) {
ShopOrderItem shopOrderItem = orderItemOpl.get();
Integer order_item_quantity = shopOrderItem.getOrder_item_quantity();
product_item_row.setItem_quantity(product_item_row.getItem_quantity() + order_item_quantity);
if (!shopProductItemService.edit(product_item_row)) {
throw new ApiException(ResultCode.FAILED);
}
}
}
}
}
return true;
}