商家主动退货 fix bug
This commit is contained in:
parent
a6c9fc0dba
commit
f8e923606a
@ -285,8 +285,8 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
|
||||
// }
|
||||
|
||||
if (StrUtil.isBlank(trade_row.getTrade_title())) {
|
||||
trade_row.setTrade_title("小发同城线上超市商品");
|
||||
trade_row.setTrade_desc("小发同城线上超市商品");
|
||||
trade_row.setTrade_title("小发同城线上订单商品");
|
||||
trade_row.setTrade_desc("小发同城线上订单商品");
|
||||
}
|
||||
|
||||
// 设置店铺ID
|
||||
|
||||
@ -2259,6 +2259,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
*/
|
||||
@Override
|
||||
public CommonResult doRefundForMch(JSONObject requestParams) {
|
||||
log.debug("##########商家主动退款##########");
|
||||
try {
|
||||
// === 1. 参数校验 ===
|
||||
if (requestParams == null || StrUtil.isBlank(requestParams.getStr("order_id"))) {
|
||||
@ -2278,13 +2279,17 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
}
|
||||
|
||||
if (orderInfo.getOrder_state_id() != null && orderInfo.getOrder_state_id() >= StateCode.ORDER_STATE_SHIPPED) {
|
||||
return CommonResult.failed("订单状态,无法退款");
|
||||
return CommonResult.failed("该订单(状态)无法退款");
|
||||
}
|
||||
|
||||
if (orderInfo.getStore_id() != null && !orderInfo.getStore_id().equals(Convert.toInt(currentUser.getStore_id()))) {
|
||||
return CommonResult.failed("无权处理其他店铺订单");
|
||||
}
|
||||
|
||||
List<ShopOrderItem> orderItems = shopOrderItemService.find(new QueryWrapper<ShopOrderItem>().eq("order_id", orderId));
|
||||
if (CollectionUtil.isEmpty(orderItems)) return CommonResult.failed("订单没有可退货的商品");
|
||||
|
||||
|
||||
// === 3. 检查退货单 ===
|
||||
ShopOrderReturn refundOrder = findOne(new QueryWrapper<ShopOrderReturn>()
|
||||
.eq("order_id", orderId)
|
||||
@ -2292,48 +2297,60 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
.orderByDesc("return_id"));
|
||||
|
||||
// === 4. 处理退款商品 ===
|
||||
OrderReturnInputVo partialRefund = null;
|
||||
OrderReturnInputVo orderReturnInputVo = null;
|
||||
// 是否部分退款
|
||||
boolean isPartialRefund = false;
|
||||
int partialRefundItemCnt = 0;
|
||||
|
||||
// 退款商品种类的数量
|
||||
// int partialRefundItemCnt = 0;
|
||||
// 退款商品数量
|
||||
BigDecimal refundGoodsAmount = BigDecimal.ZERO;
|
||||
// 订单商品总金额
|
||||
BigDecimal orderGoodsAmount = orderItems.stream().map(ShopOrderItem::getOrder_item_amount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
|
||||
if (StrUtil.isNotBlank(requestParams.getStr("order_return_vo"))) {
|
||||
partialRefund = JSONUtil.toBean(requestParams.getStr("order_return_vo"), OrderReturnInputVo.class);
|
||||
isPartialRefund = partialRefund != null && CollectionUtil.isNotEmpty(partialRefund.getReturn_items());
|
||||
partialRefundItemCnt = isPartialRefund ? partialRefund.getReturn_items().size() : 0;
|
||||
orderReturnInputVo = JSONUtil.toBean(requestParams.getStr("order_return_vo"), OrderReturnInputVo.class);
|
||||
// 传入参数商品种类数量>0的
|
||||
isPartialRefund = orderReturnInputVo != null && CollectionUtil.isNotEmpty(orderReturnInputVo.getReturn_items());
|
||||
}
|
||||
|
||||
List<ShopOrderItem> orderItems = shopOrderItemService.find(new QueryWrapper<ShopOrderItem>().eq("order_id", orderId));
|
||||
if (CollectionUtil.isEmpty(orderItems)) return CommonResult.failed("订单没有可退货的商品");
|
||||
|
||||
isPartialRefund = isPartialRefund && orderItems.size() != partialRefundItemCnt;
|
||||
String reason = StrUtil.isBlank(requestParams.getStr("reason")) ?
|
||||
(isPartialRefund ? "商家部分商品退款" : "商家整单退款") :
|
||||
requestParams.getStr("reason");
|
||||
String reason = requestParams.getStr("reason");
|
||||
|
||||
// === 5. 创建新退货单(如不存在) ===
|
||||
if (refundOrder == null) {
|
||||
OrderReturnInputVo refundRequest = new OrderReturnInputVo();
|
||||
refundRequest.setOrder_id(orderId);
|
||||
refundRequest.setReturn_buyer_message(reason);
|
||||
refundRequest.setUser_id(orderInfo.getBuyer_user_id());
|
||||
|
||||
if (isPartialRefund) {
|
||||
// 单个订单退款
|
||||
List<Long> validItemIds = orderItems.stream().map(ShopOrderItem::getOrder_item_id).collect(Collectors.toList());
|
||||
if (!partialRefund.getReturn_items().stream()
|
||||
orderReturnInputVo.getReturn_items().stream()
|
||||
.allMatch(item -> validItemIds.contains(item.getOrder_item_id())
|
||||
&& item.getReturn_refund_amount().compareTo(BigDecimal.ZERO) > 0
|
||||
&& item.getReturn_item_num() > 0)) {
|
||||
return CommonResult.failed("退货商品或金额无效");
|
||||
&& item.getReturn_item_num() > 0);
|
||||
|
||||
|
||||
List<OrderReturnItemInputVo> orderReturnItems = orderReturnInputVo.getReturn_items();
|
||||
refundGoodsAmount = orderReturnItems.stream().map(OrderReturnItemInputVo::getReturn_refund_amount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
if (refundGoodsAmount.compareTo(orderGoodsAmount) > 0) {
|
||||
return CommonResult.failed("退款金额有误!");
|
||||
}
|
||||
refundRequest.setReturn_items(partialRefund.getReturn_items());
|
||||
|
||||
refundRequest.setReturn_buyer_message(StrUtil.isBlank(reason) ? "订单部分商品退款" : reason);
|
||||
|
||||
refundRequest.setReturn_items(orderReturnInputVo.getReturn_items());
|
||||
} else {
|
||||
// 整单退款
|
||||
String finalReason = reason;
|
||||
orderItems.forEach(item -> {
|
||||
OrderReturnItemInputVo itemVo = new OrderReturnItemInputVo();
|
||||
itemVo.setOrder_item_id(item.getOrder_item_id());
|
||||
itemVo.setReturn_item_num(item.getOrder_item_quantity());
|
||||
itemVo.setReturn_refund_amount(item.getOrder_item_payment_amount());
|
||||
|
||||
refundRequest.setReturn_buyer_message(StrUtil.isBlank(finalReason) ? "订单部分商品退款" : finalReason);
|
||||
refundRequest.getReturn_items().add(itemVo);
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user