From 3e64a254550804933633fd88182f20d43dd2e718 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Thu, 25 Sep 2025 21:51:55 +0800
Subject: [PATCH] 订单-汇旺财多账户支付配置
---
oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 202 insertions(+), 21 deletions(-)
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java
index b362171..a4d2a31 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java
@@ -1,50 +1,185 @@
package com.oying.modules.sh.service.impl;
+import com.oying.exception.BadRequestException;
+import com.oying.modules.hwc.service.SwiftPassService;
+import com.oying.modules.pc.product.service.ProductInventoryService;
+import com.oying.modules.sh.domain.Order;
+import com.oying.modules.sh.domain.OrderProductSnapshot;
import com.oying.modules.sh.domain.OrderReturn;
-import com.oying.utils.FileUtil;
+import com.oying.modules.sh.domain.OrderReturnProductSnapshot;
+import com.oying.modules.sh.domain.request.AuditOrderReturn;
+import com.oying.modules.sh.domain.request.ProductOrder;
+import com.oying.modules.sh.domain.request.ReturnOrder;
+import com.oying.modules.sh.domain.vo.OrderResponse;
+import com.oying.modules.sh.domain.vo.OrderReturnResponse;
+import com.oying.modules.sh.service.*;
+import com.oying.utils.*;
+import com.oying.utils.enums.GenerateEnum;
+import com.oying.utils.enums.OrderStatusEnum;
+import com.oying.utils.enums.PayTypeEnum;
import com.oying.utils.enums.ReturnAuditEnum;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.oying.modules.sh.service.OrderReturnService;
import com.oying.modules.sh.domain.dto.OrderReturnQueryCriteria;
import com.oying.modules.sh.mapper.OrderReturnMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import com.oying.utils.PageUtil;
-import java.util.List;
-import java.util.Map;
+
+import java.sql.Timestamp;
+import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import com.oying.utils.PageResult;
/**
-* @description 服务实现
-* @author lixin
-* @date 2025-06-11
-**/
+ * @author lixin
+ * @description 服务实现
+ * @date 2025-06-11
+ **/
@Service
@RequiredArgsConstructor
public class OrderReturnServiceImpl extends ServiceImpl<OrderReturnMapper, OrderReturn> implements OrderReturnService {
private final OrderReturnMapper orderReturnMapper;
+ private final OrderOperationLogService operationLogService;
+ private final OrderService orderService;
+ private final OrderReturnProductSnapshotService productSnapshotService;
+ private final RedisUtils redisUtils;
+ private final SwiftPassService swiftPassService;
+ private final OrderAddressSnapshotService addressSnapshotService;
+ private final ProductInventoryService productInventoryService;
+ private static final String ORDER_RETURN_KEY = "oying:order:refund";
+ private static final String ORDER_CODE = "REFUND";
+ public static final Integer DAY = 30;
@Override
- public PageResult<OrderReturn> queryAll(OrderReturnQueryCriteria criteria, Page<Object> page){
- return PageUtil.toPage(orderReturnMapper.findAll(criteria, page));
+ public PageResult<OrderReturn> queryAll(OrderReturnQueryCriteria criteria, Page<Object> page) {
+ criteria.setOffset(page.offset());
+ List<OrderReturn> list = orderReturnMapper.findAll(criteria, criteria.getBlurry());
+ Long total = orderReturnMapper.countAll(criteria, criteria.getBlurry());
+ return PageUtil.toPage(list, total);
}
@Override
- public List<OrderReturn> queryAll(OrderReturnQueryCriteria criteria){
- return orderReturnMapper.findAll(criteria);
+ public List<OrderReturn> queryAll(OrderReturnQueryCriteria criteria) {
+ return orderReturnMapper.findAll(criteria, criteria.getBlurry());
+ }
+
+ @Override
+ public OrderReturnResponse getByReturnNum(String returnNum) {
+ OrderReturn orderReturn = orderReturnMapper.getByReturnNum(returnNum);
+ return new OrderReturnResponse(orderReturn,
+ addressSnapshotService.queryByOrderNum(orderReturn.getOrderNum()),
+ operationLogService.getByOrderNum(orderReturn.getOrderNum(), ORDER_CODE));
+ }
+
+ @Override
+ public void updatePayStatus(String returnNum, String refundStatus, String successTime) {
+ orderReturnMapper.updatePayStatus(returnNum, refundStatus, successTime);
}
@Override
@Transactional(rollbackFor = Exception.class)
- public void create(OrderReturn resources) {
- orderReturnMapper.insert(resources);
+ public synchronized void create(ReturnOrder resources) {
+ OrderResponse response = orderService.getByOrderNum(resources.getOrderNum());
+ Order order = response.getOrder();
+ if (order == null) {
+ throw new BadRequestException("订单不存在!");
+ }
+ if (Objects.equals(order.getOrderStatus(), OrderStatusEnum.ZERO.getKey())) {
+ throw new BadRequestException("订单未支付");
+ }
+ OrderReturn returnOrder1 = orderReturnMapper.getByOrderNum(resources.getOrderNum(), ReturnAuditEnum.ZERO.getKey());
+ if (returnOrder1 != null) {
+ throw new BadRequestException("申请已提交");
+ }
+ OrderReturn returnOrder2 = orderReturnMapper.getByOrderNum(resources.getOrderNum(), ReturnAuditEnum.TWO.getKey());
+ if (returnOrder2 != null) {
+ throw new BadRequestException("退款订单已处理");
+ }
+ if (!DateUtil.isBefore(order.getPayTime(), DAY)) {
+ throw new BadRequestException("订单已超过售后有效期");
+ }
+ // 退款订单
+ OrderReturn returnOrder = new OrderReturn();
+ // 退款订单号
+ String returnNum = redisUtils.generateSn(ORDER_RETURN_KEY, GenerateEnum.ORDER_RETURN.getKey());
+ returnOrder.setReturnNum(returnNum);
+ returnOrder.setReturnStatus(OrderStatusEnum.TEN.getKey());
+ returnOrder.setReturnStatusDescribe(OrderStatusEnum.TEN.getValue());
+ returnOrder.setOrderNum(resources.getOrderNum());
+ returnOrder.setOrderTime(order.getOrderTime());
+ returnOrder.setOrderStoreNum(order.getOrderStoreNum());
+ returnOrder.setPackagingPrice(order.getPackagingPrice());
+ returnOrder.setSendPrice(order.getSendPrice());
+ returnOrder.setSendType(order.getSendType() != null ? order.getSendType() : null);
+ returnOrder.setRiderId(order.getRiderId() != null ? order.getRiderId() : null);
+ returnOrder.setRiderPhone(order.getRiderPhone() != null ? order.getRiderPhone() : null);
+ returnOrder.setRiderName(order.getRiderName() != null ? order.getRiderName() : null);
+ returnOrder.setPayType(order.getPayType());
+ returnOrder.setUserId(order.getUserId());
+ returnOrder.setUsername(order.getUsername());
+ returnOrder.setStoreId(order.getStoreId());
+ returnOrder.setStoreName(order.getStoreName());
+ returnOrder.setStoreLogo(order.getStoreLogo());
+ returnOrder.setOriginalPrice(order.getOriginalPrice());
+ returnOrder.setPaidPrice(order.getPaidPrice());
+ returnOrder.setActuallyPayPrice(order.getActuallyPayPrice());
+ returnOrder.setReason(resources.getReason());
+ returnOrder.setRemark(resources.getRemark());
+ returnOrder.setPhotos(resources.getPhotos());
+ returnOrder.setAuditStatus(ReturnAuditEnum.ZERO.getKey());
+ orderReturnMapper.insert(returnOrder);
+ List<OrderReturnProductSnapshot> productSnapshots = new ArrayList<>();
+ for (ProductOrder productOrder : resources.getProductOrders()) {
+ for (OrderProductSnapshot snapshot : order.getProductSnapshots()) {
+ if (productOrder.getProductId().equals(snapshot.getProductId())) {
+ OrderReturnProductSnapshot productSnapshot = getSnapshot(snapshot, returnNum);
+ productSnapshots.add(productSnapshot);
+ }
+ }
+ }
+ productSnapshotService.saveBatch(productSnapshots);
+ operationLogService.create(response, OrderStatusEnum.TEN, null);
+ }
+
+ private static OrderReturnProductSnapshot getSnapshot(OrderProductSnapshot snapshot, String returnNum) {
+ OrderReturnProductSnapshot productSnapshot = new OrderReturnProductSnapshot();
+ productSnapshot.setReturnNum(returnNum);
+ productSnapshot.setStoreId(snapshot.getStoreId());
+ productSnapshot.setProductId(snapshot.getProductId());
+ productSnapshot.setProductCode(snapshot.getProductCode() != null ? snapshot.getProductCode() : null);
+ productSnapshot.setProductBarcode(snapshot.getProductBarcode());
+ productSnapshot.setProductName(snapshot.getProductName());
+ productSnapshot.setProductTitle(snapshot.getProductTitle());
+ productSnapshot.setProductMainImage(snapshot.getProductMainImage());
+ productSnapshot.setProductDescription(snapshot.getProductDescription());
+ productSnapshot.setParamData(snapshot.getParamData() != null ? snapshot.getParamData() : null);
+ productSnapshot.setUnitPrice(snapshot.getUnitPrice());
+ productSnapshot.setDetailCount(snapshot.getDetailCount());
+ productSnapshot.setOriginalPrice(snapshot.getOriginalPrice());
+ productSnapshot.setPaidPrice(snapshot.getPaidPrice());
+ productSnapshot.setActuallyPayPrice(snapshot.getActuallyPayPrice());
+ return productSnapshot;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void cancel(String returnNum) {
+ OrderReturn orderReturn = orderReturnMapper.getByReturnNum(returnNum);
+ if (orderReturn == null) {
+ throw new BadRequestException("申请不存在!");
+ }
+ if (!orderReturn.getUserId().equals(SecurityUtils.getCurrentUserId())) {
+ throw new BadRequestException("不能修改他人申请");
+ }
+ if (orderReturn.getAuditStatus().equals(ReturnAuditEnum.ONE.getKey())) {
+ throw new BadRequestException("申请已拒绝");
+ }
+ orderReturnMapper.updateStatus(returnNum, OrderStatusEnum.FIFTEEN.getKey(), OrderStatusEnum.FIFTEEN.getValue(),
+ ReturnAuditEnum.THREE.getKey());
+ OrderResponse response = orderService.getByOrderNum(orderReturn.getOrderNum());
+ operationLogService.create(response, OrderStatusEnum.FIFTEEN, null);
}
@Override
@@ -57,8 +192,54 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void deleteAll(List<Long> ids) {
- orderReturnMapper.deleteBatchIds(ids);
+ public synchronized void audit(AuditOrderReturn resources) {
+ OrderReturn orderReturn = orderReturnMapper.getByReturnNum(resources.getReturnNum());
+ if (orderReturn == null) {
+ throw new BadRequestException("申请不存在!");
+ }
+ if (!Objects.equals(orderReturn.getReturnStatus(), ReturnAuditEnum.ZERO.getKey())) {
+ throw new BadRequestException("申请已处理或取消");
+ }
+ if (resources.getAmount().compareTo(orderReturn.getActuallyPayPrice()) > 0) {
+ throw new BadRequestException("退款金额超过订单金额");
+ }
+ switch (resources.getAuditStatus()) {
+ case ONE:
+ break;
+ case TWO:
+ long total = BigDecimalUtils.yuanToCents(orderReturn.getActuallyPayPrice());
+ long refund = BigDecimalUtils.yuanToCents(resources.getAmount());
+ orderReturn.setRefundPrice(resources.getAmount());
+ PayTypeEnum status = PayTypeEnum.find(orderReturn.getPayType());
+ switch (status) {
+ case HWC:
+ case HWC2:
+ case HWC3:
+ if (refund > 0) {
+ Map<String, String> re = swiftPassService.refund(orderReturn.getReturnNum(), orderReturn.getOrderNum(),
+ resources.getMessage(), refund, total, status);
+ orderReturn.setChannel(re.get("refund_channel"));
+ }
+ break;
+ default:
+ throw new BadRequestException("暂未开通其余支付模式");
+ }
+ for (OrderReturnProductSnapshot snapshot : orderReturn.getProductSnapshots()) {
+ productInventoryService.increaseStock(snapshot.getProductId(), snapshot.getDetailCount());
+ }
+ break;
+ default:
+ throw new BadRequestException("审核状态错误");
+ }
+ // 审核状态
+ orderReturn.setAuditStatus(resources.getAuditStatus().getKey());
+ // 审核人
+ orderReturn.setAuditUser(SecurityUtils.getCurrentUsername());
+ // 审核时间
+ orderReturn.setAuditTime(new Timestamp(System.currentTimeMillis()));
+ // 审核信息
+ orderReturn.setAuditMessage(resources.getMessage());
+ orderReturnMapper.updateById(orderReturn);
}
@Override
@@ -77,7 +258,7 @@
map.put("退款状态", orderReturn.getRefundStatus());
map.put("退款成功时间", orderReturn.getSuccessTime());
map.put("退款渠道", orderReturn.getChannel());
- map.put("退款原因", orderReturn.getReason());
+ map.put("退货类型", orderReturn.getReason());
map.put("备注", orderReturn.getRemark());
map.put("图片", orderReturn.getPhotos());
map.put("审核状态", ReturnAuditEnum.getValue(orderReturn.getAuditStatus()));
--
Gitblit v1.9.3