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