/** * 确认收货处理 * @param order_ids 订单ID列表 * @param order_rows 订单数据列表 * @return 是否处理成功 */ public boolean receive(List order_ids, List order_rows) { // 检测数据是否合法,过滤允许修改的数据 if (CollUtil.isEmpty(order_ids)) { throw new ApiException(I18nUtil._("请选择需要确认收货的订单!")); } if (CollUtil.isEmpty(order_rows)) { order_rows = gets(order_ids); } List 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 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 itemQueryWrapper = new QueryWrapper<>(); itemQueryWrapper.in("order_id", receive_id_row); List order_item_rows = shopOrderItemService.find(itemQueryWrapper); List item_src_ids = order_item_rows.stream().map(ShopOrderItem::getItem_id).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(item_src_ids)) { QueryWrapper productItemQueryWrapper = new QueryWrapper<>(); productItemQueryWrapper.in("item_src_id", item_src_ids).eq("store_id", store_id); List 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 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; }