From 095210f9149c73e6e00d997b39fd6c44a65e4d38 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 28 四月 2026 22:04:17 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 157 insertions(+), 0 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
index f05f6b0..0c6b615 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
@@ -3,15 +3,31 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.config.wx.WxPayProperties;
+import com.doumee.config.wx.WxPayV3Service;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.OrdersMapper;
import com.doumee.dao.business.OrdersRefundMapper;
+import com.doumee.dao.business.model.Orders;
import com.doumee.dao.business.model.OrdersRefund;
+import com.doumee.dao.dto.OrdersRefundPageDTO;
+import com.doumee.dao.vo.OrdersRefundPageVO;
import com.doumee.service.business.OrdersRefundService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
/**
@@ -19,11 +35,21 @@
* @author rk
* @date 2026/04/13
*/
+@Slf4j
@Service
public class OrdersRefundServiceImpl implements OrdersRefundService {
@Autowired
private OrdersRefundMapper ordersRefundMapper;
+
+ @Autowired
+ private OrdersMapper ordersMapper;
+
+ @Autowired
+ private WxPayV3Service wxPayV3Service;
+
+ @Autowired
+ private WxPayProperties wxPayProperties;
@Override
public Integer create(OrdersRefund ordersRefund) {
@@ -110,4 +136,135 @@
QueryWrapper<OrdersRefund> wrapper = new QueryWrapper<>(ordersRefund);
return ordersRefundMapper.selectCount(wrapper);
}
+
+ @Override
+ public PageData<OrdersRefundPageVO> refundPage(PageWrap<OrdersRefundPageDTO> pageWrap) {
+ OrdersRefundPageDTO model = pageWrap.getModel();
+ IPage<OrdersRefund> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+
+ MPJLambdaWrapper<OrdersRefund> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(OrdersRefund.class)
+ .select("o.code as orderCode")
+ .select("o.goods_info as goodsInfo")
+ .select("o.type as orderType")
+ .select("o.good_level as goodLevel")
+ .select("o.total_amount as totalAmount")
+ .select("o.pay_amount as payAmount")
+ .select("c2.name as goodLevelName")
+ .leftJoin("orders o on o.id = t.ORDER_ID and o.DELETED = 0")
+ .leftJoin("category c1 on c1.id = o.GOOD_TYPE and c1.DELETED = 0")
+ .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3")
+ .eq(OrdersRefund::getDeleted, 0);
+
+ if (model != null) {
+ if (StringUtils.isNotBlank(model.getOrderCode())) {
+ wrapper.like("o.code", model.getOrderCode());
+ }
+ if (StringUtils.isNotBlank(model.getGoodsInfo())) {
+ wrapper.like("o.goods_info", model.getGoodsInfo());
+ }
+ if (model.getOrderType() != null) {
+ wrapper.eq("o.type", model.getOrderType());
+ }
+ if (model.getRefundStatus() != null) {
+ wrapper.eq(OrdersRefund::getStatus, model.getRefundStatus());
+ }
+ if (model.getCreateStartTime() != null) {
+ wrapper.ge(OrdersRefund::getCreateTime, model.getCreateStartTime());
+ }
+ if (model.getCreateEndTime() != null) {
+ wrapper.le(OrdersRefund::getCreateTime, model.getCreateEndTime());
+ }
+ }
+
+ wrapper.orderByDesc(OrdersRefund::getCreateTime);
+
+ IPage<OrdersRefund> refundPage = ordersRefundMapper.selectJoinPage(page, OrdersRefund.class, wrapper);
+
+ // 杞崲涓� VO
+ List<OrdersRefundPageVO> voList = new ArrayList<>();
+ if (refundPage != null && refundPage.getRecords() != null) {
+ for (OrdersRefund r : refundPage.getRecords()) {
+ OrdersRefundPageVO vo = new OrdersRefundPageVO();
+ vo.setId(r.getId());
+ vo.setOrderId(r.getOrderId());
+ vo.setOrderCode(r.getOrderCode());
+ vo.setGoodsInfo(r.getGoodsInfo());
+ vo.setOrderType(r.getOrderType());
+ vo.setGoodLevelName(r.getGoodLevelName());
+ vo.setTotalAmount(r.getTotalAmount());
+ vo.setPayAmount(r.getPayAmount());
+ vo.setRefundAmount(r.getRefundAmount());
+ vo.setCreateTime(r.getCreateTime());
+ vo.setRefundStatus(r.getStatus());
+ voList.add(vo);
+ }
+ }
+
+ PageData<OrdersRefundPageVO> result = new PageData<>(
+ refundPage != null ? refundPage.getCurrent() : pageWrap.getPage(),
+ refundPage != null ? refundPage.getSize() : pageWrap.getCapacity());
+ result.setRecords(voList);
+ if (refundPage != null) {
+ result.setTotal(refundPage.getTotal());
+ }
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void retryRefund(Integer id) {
+ // 1. 鏌ヨ閫�娆捐褰�
+ OrdersRefund refundRecord = ordersRefundMapper.selectById(id);
+ if (refundRecord == null || Constants.ONE.equals(refundRecord.getDeleted())) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "閫�娆捐褰曚笉瀛樺湪");
+ }
+ if (!Constants.TWO.equals(refundRecord.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呴��娆惧け璐ョ殑璁板綍鍙噸鏂伴��娆�");
+ }
+
+ // 2. 鏌ヨ鍏宠仈璁㈠崟
+ Orders order = ordersMapper.selectById(refundRecord.getOrderId());
+ if (order == null || Constants.ONE.equals(order.getDeleted())) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍏宠仈璁㈠崟涓嶅瓨鍦�");
+ }
+ if (StringUtils.isBlank(order.getOutTradeNo())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟缂哄皯寰俊鏀粯鍗曞彿");
+ }
+
+ // 3. 鍙戣捣寰俊閫�娆�
+ String outRefundNo = com.doumee.core.utils.ID.nextGUID();
+ com.wechat.pay.java.service.refund.model.Refund refundResult;
+ try {
+ refundResult = wxPayV3Service.refund(
+ outRefundNo,
+ order.getOutTradeNo(),
+ order.getPayAmount(),
+ refundRecord.getRefundAmount(),
+ "閲嶆柊閫�娆�",
+ wxPayProperties.getV3RefundNotifyUrl());
+ } catch (Exception e) {
+ log.error("閲嶆柊閫�娆捐皟鐢ㄥ紓甯�, refundRecordId={}", id, e);
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "閫�娆惧け璐ワ紝璇风◢鍚庨噸璇�");
+ }
+
+ // 4. 鏇存柊閫�娆捐褰�
+ Date now = new Date();
+ com.wechat.pay.java.service.refund.model.Status wxStatus = refundResult.getStatus();
+ OrdersRefund update = new OrdersRefund();
+ update.setId(id);
+ update.setRefundCode(outRefundNo);
+ update.setUpdateTime(now);
+
+ if (com.wechat.pay.java.service.refund.model.Status.SUCCESS.equals(wxStatus)) {
+ update.setStatus(Constants.ONE);
+ update.setRefundTime(now);
+ } else if (com.wechat.pay.java.service.refund.model.Status.PROCESSING.equals(wxStatus)) {
+ update.setStatus(Constants.ZERO);
+ } else {
+ update.setStatus(Constants.TWO);
+ update.setRefundRemark("閲嶆柊閫�娆句粛鐒跺け璐�");
+ }
+ ordersRefundMapper.updateById(update);
+ }
}
--
Gitblit v1.9.3