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