119 lines
5.8 KiB
Java
119 lines
5.8 KiB
Java
/**
|
||
* 确认收货处理
|
||
* @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;
|
||
} |