商家退款 fix bug

This commit is contained in:
Jack 2025-07-15 17:10:59 +08:00
parent 3145635130
commit 4a95eb6460

View File

@ -2195,92 +2195,68 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
* @return CommonResult 统一返回结果
* @throws ApiException 仅当用户未登录时抛出
*/
// @Transactional
@Override
public CommonResult doRefundForMch(JSONObject requestParams) {
try {
// === 1. 参数基础校验 ===
// === 1. 参数校验 ===
if (requestParams == null || StrUtil.isBlank(requestParams.getStr("order_id"))) {
return CommonResult.failed("退货请求参数不完整");
}
// 获取当前登录用户
final UserDto currentUser = getCurrentUser();
if (currentUser == null) {
throw new ApiException(ResultCode.NEED_LOGIN);
}
if (currentUser == null) throw new ApiException(ResultCode.NEED_LOGIN);
// === 2. 验证订单有效性 ===
// === 2. 订单验证 ===
final String orderId = requestParams.getStr("order_id");
ShopOrderInfo orderInfo = shopOrderInfoService.get(orderId);
if (orderInfo == null) {
return CommonResult.failed("订单不存在");
}
if (orderInfo == null) return CommonResult.failed("订单不存在");
if (StateCode.ORDER_PAID_STATE_NO == orderInfo.getOrder_is_paid()) {
return CommonResult.failed("订单未付款,无法退款");
}
// 发货之后不能退款了
if (orderInfo.getOrder_state_id() != null && orderInfo.getOrder_state_id() >= StateCode.ORDER_STATE_SHIPPED) {
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("无权处理其他店铺订单");
}
// === 3. 检查是否存在处理中的退货单 ===
// === 3. 检查退货单 ===
ShopOrderReturn refundOrder = findOne(new QueryWrapper<ShopOrderReturn>()
.eq("order_id", orderId)
.eq("return_state_id", StateCode.RETURN_PROCESS_CHECK).orderByDesc("return_id"));
Boolean hasRefundRecord = refundOrder != null;
.eq("return_state_id", StateCode.RETURN_PROCESS_CHECK)
.orderByDesc("return_id"));
// === 4. 处理退货商品信息 ===
// === 4. 处理退款商品 ===
OrderReturnInputVo partialRefund = null;
// 部分退款
Boolean isPartialRefund = false;
boolean isPartialRefund = false;
int partialRefundItemCnt = 0;
if (StrUtil.isNotBlank(requestParams.getStr("order_return_vo"))) {
try {
partialRefund = JSONUtil.toBean(requestParams.getStr("order_return_vo"), OrderReturnInputVo.class);
isPartialRefund = partialRefund != null && CollectionUtil.isNotEmpty(partialRefund.getReturn_items());
partialRefundItemCnt = partialRefund.getReturn_items().size();
} catch (Exception e) {
return CommonResult.failed("退货商品参数格式错误");
}
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;
}
// 获取订单商品项
List<ShopOrderItem> orderItems = shopOrderItemService.find(
new QueryWrapper<ShopOrderItem>().eq("order_id", orderId));
if (CollectionUtil.isEmpty(orderItems)) {
return CommonResult.failed("订单没有可退货的商品");
}
if (isPartialRefund && orderItems.size() == partialRefundItemCnt) {
isPartialRefund = false;
}
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");
// === 5. 创建退货单如不存在 ===
// ShopOrderReturn refundOrder = null;
if (!hasRefundRecord) {
// 5.2 准备退货请求数据
// === 5. 创建新退货单如不存在 ===
if (refundOrder == null) {
OrderReturnInputVo refundRequest = new OrderReturnInputVo();
refundRequest.setOrder_id(orderId);
refundRequest.setReturn_buyer_message(reason);
refundRequest.setUser_id(orderInfo.getBuyer_user_id());
// 5.3 处理退货商品项
if (isPartialRefund) {
// 校验部分退货商品有效性
// 单个订单退款
List<Long> validItemIds = orderItems.stream().map(ShopOrderItem::getOrder_item_id).collect(Collectors.toList());
if (!partialRefund.getReturn_items().stream()
.allMatch(item -> validItemIds.contains(item.getOrder_item_id())
@ -2290,7 +2266,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
}
refundRequest.setReturn_items(partialRefund.getReturn_items());
} else {
// 默认整单退货
// 整单退款
orderItems.forEach(item -> {
OrderReturnItemInputVo itemVo = new OrderReturnItemInputVo();
itemVo.setOrder_item_id(item.getOrder_item_id());
@ -2300,32 +2276,26 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
});
}
// 5.4 创建退货单
CommonResult createResult = addItem(refundRequest);
if (createResult.getStatus() != 200) {
log.error("退货单创建失败,addItem(params), params:{}", refundRequest);
if (createResult == null || createResult.getStatus() != 200) {
log.error("退货单创建失败,params:{}", refundRequest);
return createResult;
}
// refundOrder = findOne(new QueryWrapper<ShopOrderReturn>().eq("order_id", orderId).ne("return_state_id", StateCode.RETURN_PROCESS_CANCEL).orderByDesc("order_id"));
// if (refundOrder == null) {
// return CommonResult.failed("退款单创建失败");
// }
}
// === 6.1. 获取退货订单 ===
refundOrder = findOne(new QueryWrapper<ShopOrderReturn>().eq("order_id", orderId).eq("return_state_id", StateCode.RETURN_PROCESS_CHECK).orderByDesc("return_id"));
if (refundOrder == null) {
return CommonResult.failed("退款单创建失败");
refundOrder = findOne(new QueryWrapper<ShopOrderReturn>()
.eq("order_id", orderId)
.eq("return_state_id", StateCode.RETURN_PROCESS_CHECK)
.orderByDesc("return_id"));
if (refundOrder == null) return CommonResult.failed("退款单创建失败");
}
// === 6. 处理退款 ===
refundOrder.setReturn_flag(0);
refundOrder.setReturn_store_message(reason);
refundOrder.setReturn_buyer_message(reason);
logger.info("商家退款订单:{}", JSONUtil.toJsonStr(refundOrder));
// === 6.2 处理退货 ===
if (!processReviewList(refundOrder, 0)) {
return CommonResult.failed("退款处理失败");
}