商家退款 fix bug
This commit is contained in:
parent
3145635130
commit
4a95eb6460
@ -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("退款处理失败");
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user