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