Commit d1a20bf2597c96583e86285509447c1f388e5cc0

Authored by chen quan
1 parent 98dfa48c

1、完成代付订单后台模块

2、将pay模块的 PayRefundMapper 更名为 PayRefundCoreMapper 避免冲突
3、将支付订单 UI 界面进行调整优化
Showing 48 changed files with 2052 additions and 95 deletions
.gitignore
@@ -42,3 +42,5 @@ nbdist/ @@ -42,3 +42,5 @@ nbdist/
42 !*/build/*.java 42 !*/build/*.java
43 !*/build/*.html 43 !*/build/*.html
44 !*/build/*.xml 44 !*/build/*.xml
  45 +
  46 +yudao-user-server/src/main/resources/application-local.yaml
45 \ No newline at end of file 47 \ No newline at end of file
sql/pay-dict.sql
@@ -171,4 +171,21 @@ VALUES (2, '部分退款', '10', 'pay_order_refund_status', 0, '部分退款', ' @@ -171,4 +171,21 @@ VALUES (2, '部分退款', '10', 'pay_order_refund_status', 0, '部分退款', '
171 INSERT INTO `sys_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, 171 INSERT INTO `sys_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`,
172 `updater`, `update_time`, `deleted`) 172 `updater`, `update_time`, `deleted`)
173 VALUES (3, '全部退款', '20', 'pay_order_refund_status', 0, '全部退款', '1', '2021-12-03 11:30:52', '1', '2021-12-03 11:34:14', 173 VALUES (3, '全部退款', '20', 'pay_order_refund_status', 0, '全部退款', '1', '2021-12-03 11:30:52', '1', '2021-12-03 11:34:14',
174 - b'0');  
175 \ No newline at end of file 174 \ No newline at end of file
  175 + b'0');
  176 +
  177 +-- 退款订单状态
  178 +INSERT INTO `sys_dict_type`(`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('退款订单状态', 'pay_refund_order_status', 0, '退款订单状态', '1', '2021-12-10 16:42:50', '1', '2021-12-10 16:42:50', b'0');
  179 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (117, 1, '退款订单生成', '0', 'pay_refund_order_status', 0, '退款订单生成', '1', '2021-12-10 16:44:44', '1', '2021-12-10 16:44:44', b'0');
  180 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (118, 2, '退款成功', '1', 'pay_refund_order_status', 0, '退款成功', '1', '2021-12-10 16:44:59', '1', '2021-12-10 16:44:59', b'0');
  181 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (119, 3, '退款失败', '2', 'pay_refund_order_status', 0, '退款失败', '1', '2021-12-10 16:45:10', '1', '2021-12-10 16:45:10', b'0');
  182 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (120, 4, '退款中, 渠道通知结果', '3', 'pay_refund_order_status', 0, '退款中, 渠道通知结果', '1', '2021-12-10 16:45:32', '1', '2021-12-10 16:45:32', b'0');
  183 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (121, 5, '退款中, 系统查询结果', '4', 'pay_refund_order_status', 0, '退款中, 系统查询结果', '1', '2021-12-10 16:45:48', '1', '2021-12-10 16:45:48', b'0');
  184 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (122, 6, '状态未知,需要重试', '5', 'pay_refund_order_status', 0, '状态未知,需要重试', '1', '2021-12-10 16:46:03', '1', '2021-12-10 16:46:03', b'0');
  185 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (123, 7, '状态未知,系统查询结果', '6', 'pay_refund_order_status', 0, '状态未知,系统查询结果', '1', '2021-12-10 16:46:13', '1', '2021-12-10 16:46:13', b'0');
  186 +INSERT INTO `sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (124, 8, '退款关闭', '99', 'pay_refund_order_status', 0, '退款关闭', '1', '2021-12-10 16:46:26', '1', '2021-12-10 16:46:26', b'0');
  187 +
  188 +-- 退款订单类别
  189 +INSERT INTO `sys_dict_type`(`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('退款订单类别', 'pay_refund_order_type', 0, '退款订单类别', '1', '2021-12-10 17:14:53', '1', '2021-12-10 17:14:53', b'0');
  190 +INSERT INTO `ruoyi-vue-pro`.`sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (125, 1, '未退款', '0', 'pay_refund_order_type', 0, '未退款', '1', '2021-12-10 17:15:11', '1', '2021-12-10 17:15:11', b'0');
  191 +INSERT INTO `ruoyi-vue-pro`.`sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (126, 2, '部分退款', '10', 'pay_refund_order_type', 0, '部分退款', '1', '2021-12-10 17:15:24', '1', '2021-12-10 17:15:24', b'0');
  192 +INSERT INTO `ruoyi-vue-pro`.`sys_dict_data`(`id`, `sort`, `label`, `value`, `dict_type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (127, 3, '全部退款', '20', 'pay_refund_order_type', 0, '全部退款', '1', '2021-12-10 17:15:34', '1', '2021-12-10 17:15:34', b'0');
176 \ No newline at end of file 193 \ No newline at end of file
sql/pay-refund-menu.sql 0 → 100644
  1 +-- 菜单 SQL
  2 +INSERT INTO `sys_menu`(
  3 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  4 + `path`, `icon`, `component`, `status`
  5 +)
  6 +VALUES (
  7 + '退款订单管理', '', 2, 0, 1117,
  8 + 'refund', '', 'pay/refund/index', 0
  9 + );
  10 +
  11 +-- 按钮父菜单ID
  12 +SELECT @parentId := LAST_INSERT_ID();
  13 +
  14 +-- 按钮 SQL
  15 +INSERT INTO `sys_menu`(
  16 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  17 + `path`, `icon`, `component`, `status`
  18 +)
  19 +VALUES (
  20 + '退款订单查询', 'pay:refund:query', 3, 1, @parentId,
  21 + '', '', '', 0
  22 + );
  23 +INSERT INTO `sys_menu`(
  24 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  25 + `path`, `icon`, `component`, `status`
  26 +)
  27 +VALUES (
  28 + '退款订单创建', 'pay:refund:create', 3, 2, @parentId,
  29 + '', '', '', 0
  30 + );
  31 +INSERT INTO `sys_menu`(
  32 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  33 + `path`, `icon`, `component`, `status`
  34 +)
  35 +VALUES (
  36 + '退款订单更新', 'pay:refund:update', 3, 3, @parentId,
  37 + '', '', '', 0
  38 + );
  39 +INSERT INTO `sys_menu`(
  40 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  41 + `path`, `icon`, `component`, `status`
  42 +)
  43 +VALUES (
  44 + '退款订单删除', 'pay:refund:delete', 3, 4, @parentId,
  45 + '', '', '', 0
  46 + );
  47 +INSERT INTO `sys_menu`(
  48 + `name`, `permission`, `menu_type`, `sort`, `parent_id`,
  49 + `path`, `icon`, `component`, `status`
  50 +)
  51 +VALUES (
  52 + '退款订单导出', 'pay:refund:export', 3, 5, @parentId,
  53 + '', '', '', 0
  54 + );
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayOrderController.java
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order; @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.*; 5 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.*;
6 import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert; 6 import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert;
7 import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; 7 import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
8 import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; 8 import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
@@ -33,7 +33,6 @@ import javax.servlet.http.HttpServletResponse; @@ -33,7 +33,6 @@ import javax.servlet.http.HttpServletResponse;
33 import javax.validation.Valid; 33 import javax.validation.Valid;
34 import java.io.IOException; 34 import java.io.IOException;
35 import java.util.ArrayList; 35 import java.util.ArrayList;
36 -import java.util.Collection;  
37 import java.util.List; 36 import java.util.List;
38 import java.util.Map; 37 import java.util.Map;
39 38
@@ -102,15 +101,6 @@ public class PayOrderController { @@ -102,15 +101,6 @@ public class PayOrderController {
102 return success(respVO); 101 return success(respVO);
103 } 102 }
104 103
105 - @GetMapping("/list")  
106 - @ApiOperation("获得支付订单列表")  
107 - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class)  
108 - @PreAuthorize("@ss.hasPermission('pay:order:query')")  
109 - public CommonResult<List<PayOrderRespVO>> getOrderList(@RequestParam("ids") Collection<Long> ids) {  
110 - List<PayOrderDO> list = orderService.getOrderList(ids);  
111 - return success(PayOrderConvert.INSTANCE.convertList(list));  
112 - }  
113 -  
114 @GetMapping("/page") 104 @GetMapping("/page")
115 @ApiOperation("获得支付订单分页") 105 @ApiOperation("获得支付订单分页")
116 @PreAuthorize("@ss.hasPermission('pay:order:query')") 106 @PreAuthorize("@ss.hasPermission('pay:order:query')")
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayRefundController.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order;
  2 +
  3 +import cn.hutool.core.collection.CollectionUtil;
  4 +import cn.hutool.core.util.ObjectUtil;
  5 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;
  6 +import cn.iocoder.yudao.adminserver.modules.pay.convert.refund.PayRefundConvert;
  7 +import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
  8 +import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
  9 +import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;
  10 +import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;
  11 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
  12 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
  13 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
  14 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  15 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  16 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  17 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  18 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  19 +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
  20 +import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  21 +import io.swagger.annotations.Api;
  22 +import io.swagger.annotations.ApiImplicitParam;
  23 +import io.swagger.annotations.ApiOperation;
  24 +import org.springframework.security.access.prepost.PreAuthorize;
  25 +import org.springframework.validation.annotation.Validated;
  26 +import org.springframework.web.bind.annotation.GetMapping;
  27 +import org.springframework.web.bind.annotation.RequestMapping;
  28 +import org.springframework.web.bind.annotation.RequestParam;
  29 +import org.springframework.web.bind.annotation.RestController;
  30 +
  31 +import javax.annotation.Resource;
  32 +import javax.servlet.http.HttpServletResponse;
  33 +import javax.validation.Valid;
  34 +import java.io.IOException;
  35 +import java.util.ArrayList;
  36 +import java.util.List;
  37 +import java.util.Map;
  38 +
  39 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  40 +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
  41 +
  42 +/**
  43 + * 退款订单 Controller 组件
  44 + *
  45 + * @author aquan
  46 + */
  47 +@Api(tags = "退款订单")
  48 +@RestController
  49 +@RequestMapping("/pay/refund")
  50 +@Validated
  51 +public class PayRefundController {
  52 +
  53 + @Resource
  54 + private PayRefundService refundService;
  55 +
  56 + /**
  57 + * 商户 service 组件
  58 + */
  59 + @Resource
  60 + private PayMerchantService merchantService;
  61 +
  62 + /**
  63 + * 应用 service 组件
  64 + */
  65 + @Resource
  66 + private PayAppService appService;
  67 +
  68 + /**
  69 + * 订单 service 组件
  70 + */
  71 + @Resource
  72 + private PayOrderService orderService;
  73 +
  74 +
  75 + @GetMapping("/get")
  76 + @ApiOperation("获得退款订单")
  77 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
  78 + @PreAuthorize("@ss.hasPermission('pay:refund:query')")
  79 + public CommonResult<PayRefundDetailsRespVO> getRefund(@RequestParam("id") Long id) {
  80 + PayRefundDO refund = refundService.getRefund(id);
  81 + if (ObjectUtil.isNull(refund)) {
  82 + return success(new PayRefundDetailsRespVO());
  83 + }
  84 +
  85 + PayMerchantDO merchantDO = merchantService.getMerchant(refund.getMerchantId());
  86 + PayAppDO appDO = appService.getApp(refund.getAppId());
  87 + PayChannelEnum channelEnum = PayChannelEnum.getByCode(refund.getChannelCode());
  88 + PayOrderDO orderDO = orderService.getOrder(refund.getOrderId());
  89 +
  90 + PayRefundDetailsRespVO refundDetail = PayRefundConvert.INSTANCE.refundDetailConvert(refund);
  91 + refundDetail.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
  92 + refundDetail.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");
  93 + refundDetail.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道");
  94 + refundDetail.setSubject(orderDO.getSubject());
  95 +
  96 + return success(refundDetail);
  97 + }
  98 +
  99 + @GetMapping("/page")
  100 + @ApiOperation("获得退款订单分页")
  101 + @PreAuthorize("@ss.hasPermission('pay:refund:query')")
  102 + public CommonResult<PageResult<PayRefundPageItemRespVO>> getRefundPage(@Valid PayRefundPageReqVO pageVO) {
  103 + PageResult<PayRefundDO> pageResult = refundService.getRefundPage(pageVO);
  104 + if (CollectionUtil.isEmpty(pageResult.getList())) {
  105 + return success(new PageResult<>(pageResult.getTotal()));
  106 + }
  107 +
  108 + // 处理商户ID数据
  109 + Map<Long, PayMerchantDO> merchantMap = merchantService.getMerchantMap(
  110 + CollectionUtils.convertList(pageResult.getList(), PayRefundDO::getMerchantId));
  111 + // 处理应用ID数据
  112 + Map<Long, PayAppDO> appMap = appService.getAppMap(
  113 + CollectionUtils.convertList(pageResult.getList(), PayRefundDO::getAppId));
  114 + List<PayRefundPageItemRespVO> list = new ArrayList<>(pageResult.getList().size());
  115 + pageResult.getList().forEach(c -> {
  116 + PayMerchantDO merchantDO = merchantMap.get(c.getMerchantId());
  117 + PayAppDO appDO = appMap.get(c.getAppId());
  118 + PayChannelEnum channelEnum = PayChannelEnum.getByCode(c.getChannelCode());
  119 +
  120 + PayRefundPageItemRespVO item = PayRefundConvert.INSTANCE.pageItemConvert(c);
  121 +
  122 + item.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
  123 + item.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");
  124 + item.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道");
  125 + list.add(item);
  126 + });
  127 +
  128 + return success(new PageResult<>(list, pageResult.getTotal()));
  129 + }
  130 +
  131 + @GetMapping("/export-excel")
  132 + @ApiOperation("导出退款订单 Excel")
  133 + @PreAuthorize("@ss.hasPermission('pay:refund:export')")
  134 + @OperateLog(type = EXPORT)
  135 + public void exportRefundExcel(@Valid PayRefundExportReqVO exportReqVO,
  136 + HttpServletResponse response) throws IOException {
  137 +
  138 + List<PayRefundDO> list = refundService.getRefundList(exportReqVO);
  139 + if (CollectionUtil.isEmpty(list)) {
  140 + ExcelUtils.write(response, "退款订单.xls", "数据",
  141 + PayRefundExcelVO.class, new ArrayList<>());
  142 + }
  143 +
  144 + // 处理商户ID数据
  145 + Map<Long, PayMerchantDO> merchantMap = merchantService.getMerchantMap(
  146 + CollectionUtils.convertList(list, PayRefundDO::getMerchantId));
  147 + // 处理应用ID数据
  148 + Map<Long, PayAppDO> appMap = appService.getAppMap(
  149 + CollectionUtils.convertList(list, PayRefundDO::getAppId));
  150 +
  151 + List<PayRefundExcelVO> excelDatum = new ArrayList<>(list.size());
  152 + // 处理商品名称数据
  153 + Map<Long, PayOrderDO> orderMap = orderService.getOrderSubjectMap(
  154 + CollectionUtils.convertList(list, PayRefundDO::getOrderId));
  155 +
  156 + list.forEach(c -> {
  157 + PayMerchantDO merchantDO = merchantMap.get(c.getMerchantId());
  158 + PayAppDO appDO = appMap.get(c.getAppId());
  159 + PayChannelEnum channelEnum = PayChannelEnum.getByCode(c.getChannelCode());
  160 +
  161 + PayRefundExcelVO excelItem = PayRefundConvert.INSTANCE.excelConvert(c);
  162 + excelItem.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
  163 + excelItem.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");
  164 + excelItem.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道");
  165 + excelItem.setSubject(orderMap.get(c.getOrderId()).getSubject());
  166 +
  167 + excelDatum.add(excelItem);
  168 + });
  169 +
  170 + // 导出 Excel
  171 + ExcelUtils.write(response, "退款订单.xls", "数据", PayRefundExcelVO.class, excelDatum);
  172 + }
  173 +
  174 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderBaseVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderDetailsRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderExcelVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; 3 import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants;
4 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; 4 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderExportReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderPageItemRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageItemRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderPageReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/PayOrderRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import org.springframework.format.annotation.DateTimeFormat;
  6 +
  7 +import javax.validation.constraints.NotNull;
  8 +import java.util.Date;
  9 +
  10 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  11 +
  12 +/**
  13 +* 退款订单 Base VO,提供给添加、修改、详细的子 VO 使用
  14 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  15 +*/
  16 +@Data
  17 +public class PayRefundBaseVO {
  18 +
  19 + @ApiModelProperty(value = "退款单请求号", required = true)
  20 + @NotNull(message = "退款单请求号不能为空")
  21 + private String reqNo;
  22 +
  23 + @ApiModelProperty(value = "商户编号", required = true)
  24 + @NotNull(message = "商户编号不能为空")
  25 + private Long merchantId;
  26 +
  27 + @ApiModelProperty(value = "应用编号", required = true)
  28 + @NotNull(message = "应用编号不能为空")
  29 + private Long appId;
  30 +
  31 + @ApiModelProperty(value = "渠道编号", required = true)
  32 + @NotNull(message = "渠道编号不能为空")
  33 + private Long channelId;
  34 +
  35 + @ApiModelProperty(value = "渠道编码", required = true)
  36 + @NotNull(message = "渠道编码不能为空")
  37 + private String channelCode;
  38 +
  39 + @ApiModelProperty(value = "支付订单编号 pay_order 表id", required = true)
  40 + @NotNull(message = "支付订单编号 pay_order 表id不能为空")
  41 + private Long orderId;
  42 +
  43 + @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段", required = true)
  44 + @NotNull(message = "交易订单号 pay_extension 表no 字段不能为空")
  45 + private String tradeNo;
  46 +
  47 + @ApiModelProperty(value = "商户订单编号(商户系统生成)", required = true)
  48 + @NotNull(message = "商户订单编号(商户系统生成)不能为空")
  49 + private String merchantOrderId;
  50 +
  51 + @ApiModelProperty(value = "商户退款订单号(商户系统生成)", required = true)
  52 + @NotNull(message = "商户退款订单号(商户系统生成)不能为空")
  53 + private String merchantRefundNo;
  54 +
  55 + @ApiModelProperty(value = "异步通知商户地址", required = true)
  56 + @NotNull(message = "异步通知商户地址不能为空")
  57 + private String notifyUrl;
  58 +
  59 + @ApiModelProperty(value = "通知商户退款结果的回调状态", required = true)
  60 + @NotNull(message = "通知商户退款结果的回调状态不能为空")
  61 + private Integer notifyStatus;
  62 +
  63 + @ApiModelProperty(value = "退款状态", required = true)
  64 + @NotNull(message = "退款状态不能为空")
  65 + private Integer status;
  66 +
  67 + @ApiModelProperty(value = "退款类型(部分退款,全部退款)", required = true)
  68 + @NotNull(message = "退款类型(部分退款,全部退款)不能为空")
  69 + private Integer type;
  70 +
  71 + @ApiModelProperty(value = "支付金额,单位分", required = true)
  72 + @NotNull(message = "支付金额,单位分不能为空")
  73 + private Long payAmount;
  74 +
  75 + @ApiModelProperty(value = "退款金额,单位分", required = true)
  76 + @NotNull(message = "退款金额,单位分不能为空")
  77 + private Long refundAmount;
  78 +
  79 + @ApiModelProperty(value = "退款原因", required = true)
  80 + @NotNull(message = "退款原因不能为空")
  81 + private String reason;
  82 +
  83 + @ApiModelProperty(value = "用户 IP")
  84 + private String userIp;
  85 +
  86 + @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应", required = true)
  87 + @NotNull(message = "渠道订单号,pay_order 中的channel_order_no 对应不能为空")
  88 + private String channelOrderNo;
  89 +
  90 + @ApiModelProperty(value = "渠道退款单号,渠道返回")
  91 + private String channelRefundNo;
  92 +
  93 + @ApiModelProperty(value = "渠道调用报错时,错误码")
  94 + private String channelErrorCode;
  95 +
  96 + @ApiModelProperty(value = "渠道调用报错时,错误信息")
  97 + private String channelErrorMsg;
  98 +
  99 + @ApiModelProperty(value = "支付渠道的额外参数")
  100 + private String channelExtras;
  101 +
  102 + @ApiModelProperty(value = "退款失效时间")
  103 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  104 + private Date expireTime;
  105 +
  106 + @ApiModelProperty(value = "退款成功时间")
  107 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  108 + private Date successTime;
  109 +
  110 + @ApiModelProperty(value = "退款通知时间")
  111 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  112 + private Date notifyTime;
  113 +
  114 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundCreateReqVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import lombok.*;
  4 +import io.swagger.annotations.*;
  5 +
  6 +@ApiModel("退款订单创建 Request VO")
  7 +@Data
  8 +@EqualsAndHashCode(callSuper = true)
  9 +@ToString(callSuper = true)
  10 +public class PayRefundCreateReqVO extends PayRefundBaseVO {
  11 +
  12 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundDetailsRespVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +import javax.validation.constraints.NotNull;
  10 +import java.util.Date;
  11 +
  12 +/**
  13 + * 退款订单详情 Response VO
  14 + *
  15 + * @author aquan
  16 + */
  17 +@ApiModel("退款订单详情 Response VO")
  18 +@Data
  19 +@EqualsAndHashCode(callSuper = true)
  20 +@ToString(callSuper = true)
  21 +public class PayRefundDetailsRespVO extends PayRefundBaseVO {
  22 +
  23 + @ApiModelProperty(value = "支付退款编号", required = true)
  24 + private Long id;
  25 +
  26 + @ApiModelProperty(value = "商户名称")
  27 + private String merchantName;
  28 +
  29 + @ApiModelProperty(value = "应用名称")
  30 + private String appName;
  31 +
  32 + @ApiModelProperty(value = "渠道编号名称")
  33 + private String channelCodeName;
  34 +
  35 + @NotNull(message = "商品标题不能为空")
  36 + private String subject;
  37 +
  38 + @ApiModelProperty(value = "创建时间")
  39 + private Date createTime;
  40 +
  41 + @ApiModelProperty(value = "更新时间")
  42 + private Date updateTime;
  43 +
  44 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants;
  4 +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
  5 +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  6 +import com.alibaba.excel.annotation.ExcelProperty;
  7 +import lombok.Data;
  8 +
  9 +import java.util.Date;
  10 +
  11 +/**
  12 + * 退款订单 Excel VO
  13 + *
  14 + * @author aquan
  15 + */
  16 +@Data
  17 +public class PayRefundExcelVO {
  18 +
  19 + @ExcelProperty("支付退款编号")
  20 + private Long id;
  21 +
  22 + @ExcelProperty("商品名称")
  23 + private String subject;
  24 +
  25 + @ExcelProperty("退款单请求号")
  26 + private String reqNo;
  27 +
  28 + @ExcelProperty(value = "商户名称")
  29 + private String merchantName;
  30 +
  31 + @ExcelProperty(value = "应用名称")
  32 + private String appName;
  33 +
  34 + @ExcelProperty(value = "渠道编号名称")
  35 + private String channelCodeName;
  36 +
  37 + @ExcelProperty("交易订单号")
  38 + private String tradeNo;
  39 +
  40 + @ExcelProperty("商户订单编号")
  41 + private String merchantOrderId;
  42 +
  43 + @ExcelProperty("商户退款订单号")
  44 + private String merchantRefundNo;
  45 +
  46 + @ExcelProperty("异步通知商户地址")
  47 + private String notifyUrl;
  48 +
  49 + @DictFormat(SysDictTypeConstants.PAY_ORDER_NOTIFY_STATUS)
  50 + @ExcelProperty(value = "商户退款结果回调状态", converter = DictConvert.class)
  51 + private Integer notifyStatus;
  52 +
  53 + @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_STATUS)
  54 + @ExcelProperty(value = "退款状态", converter = DictConvert.class)
  55 + private Integer status;
  56 +
  57 + @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_TYPE)
  58 + @ExcelProperty(value = "退款类型", converter = DictConvert.class)
  59 + private Integer type;
  60 +
  61 + @ExcelProperty("支付金额,单位:元")
  62 + private String payAmount;
  63 +
  64 + @ExcelProperty("退款金额,单位:元")
  65 + private String refundAmount;
  66 +
  67 + @ExcelProperty("退款原因")
  68 + private String reason;
  69 +
  70 + @ExcelProperty("用户付款 IP")
  71 + private String userIp;
  72 +
  73 + @ExcelProperty("渠道订单号")
  74 + private String channelOrderNo;
  75 +
  76 + @ExcelProperty("渠道退款单号")
  77 + private String channelRefundNo;
  78 +
  79 + @ExcelProperty("创建时间")
  80 + private Date createTime;
  81 +
  82 + @ExcelProperty("退款成功时间")
  83 + private Date successTime;
  84 +
  85 + @ExcelProperty("退款通知时间")
  86 + private Date notifyTime;
  87 +
  88 + @ExcelProperty("退款失效时间")
  89 + private Date expireTime;
  90 +
  91 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import org.springframework.format.annotation.DateTimeFormat;
  7 +
  8 +import java.util.Date;
  9 +
  10 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  11 +
  12 +@ApiModel(value = "退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的")
  13 +@Data
  14 +public class PayRefundExportReqVO {
  15 +
  16 + @ApiModelProperty(value = "退款单请求号")
  17 + private String reqNo;
  18 +
  19 + @ApiModelProperty(value = "商户编号")
  20 + private Long merchantId;
  21 +
  22 + @ApiModelProperty(value = "应用编号")
  23 + private Long appId;
  24 +
  25 + @ApiModelProperty(value = "渠道编号")
  26 + private Long channelId;
  27 +
  28 + @ApiModelProperty(value = "渠道编码")
  29 + private String channelCode;
  30 +
  31 + @ApiModelProperty(value = "支付订单编号 pay_order 表id")
  32 + private Long orderId;
  33 +
  34 + @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段")
  35 + private String tradeNo;
  36 +
  37 + @ApiModelProperty(value = "商户订单编号(商户系统生成)")
  38 + private String merchantOrderId;
  39 +
  40 + @ApiModelProperty(value = "商户退款订单号(商户系统生成)")
  41 + private String merchantRefundNo;
  42 +
  43 + @ApiModelProperty(value = "异步通知商户地址")
  44 + private String notifyUrl;
  45 +
  46 + @ApiModelProperty(value = "通知商户退款结果的回调状态")
  47 + private Integer notifyStatus;
  48 +
  49 + @ApiModelProperty(value = "退款状态")
  50 + private Integer status;
  51 +
  52 + @ApiModelProperty(value = "退款类型(部分退款,全部退款)")
  53 + private Integer type;
  54 +
  55 + @ApiModelProperty(value = "支付金额,单位分")
  56 + private Long payAmount;
  57 +
  58 + @ApiModelProperty(value = "退款金额,单位分")
  59 + private Long refundAmount;
  60 +
  61 + @ApiModelProperty(value = "退款原因")
  62 + private String reason;
  63 +
  64 + @ApiModelProperty(value = "用户 IP")
  65 + private String userIp;
  66 +
  67 + @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应")
  68 + private String channelOrderNo;
  69 +
  70 + @ApiModelProperty(value = "渠道退款单号,渠道返回")
  71 + private String channelRefundNo;
  72 +
  73 + @ApiModelProperty(value = "渠道调用报错时,错误码")
  74 + private String channelErrorCode;
  75 +
  76 + @ApiModelProperty(value = "渠道调用报错时,错误信息")
  77 + private String channelErrorMsg;
  78 +
  79 + @ApiModelProperty(value = "支付渠道的额外参数")
  80 + private String channelExtras;
  81 +
  82 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  83 + @ApiModelProperty(value = "开始退款失效时间")
  84 + private Date beginExpireTime;
  85 +
  86 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  87 + @ApiModelProperty(value = "结束退款失效时间")
  88 + private Date endExpireTime;
  89 +
  90 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  91 + @ApiModelProperty(value = "开始退款成功时间")
  92 + private Date beginSuccessTime;
  93 +
  94 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  95 + @ApiModelProperty(value = "结束退款成功时间")
  96 + private Date endSuccessTime;
  97 +
  98 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  99 + @ApiModelProperty(value = "开始退款通知时间")
  100 + private Date beginNotifyTime;
  101 +
  102 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  103 + @ApiModelProperty(value = "结束退款通知时间")
  104 + private Date endNotifyTime;
  105 +
  106 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  107 + @ApiModelProperty(value = "开始创建时间")
  108 + private Date beginCreateTime;
  109 +
  110 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  111 + @ApiModelProperty(value = "结束创建时间")
  112 + private Date endCreateTime;
  113 +
  114 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageItemRespVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +import java.util.Date;
  10 +
  11 +/**
  12 + * 退款订单分页查询 Response VO
  13 + * @author aquan
  14 + */
  15 +@ApiModel("退款订单分页查询 Response VO")
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = true)
  18 +@ToString(callSuper = true)
  19 +public class PayRefundPageItemRespVO extends PayRefundBaseVO {
  20 +
  21 + @ApiModelProperty(value = "支付订单编号", required = true)
  22 + private Long id;
  23 +
  24 + @ApiModelProperty(value = "商户名称")
  25 + private String merchantName;
  26 +
  27 + @ApiModelProperty(value = "应用名称")
  28 + private String appName;
  29 +
  30 + @ApiModelProperty(value = "渠道名称")
  31 + private String channelCodeName;
  32 +
  33 + @ApiModelProperty(value = "创建时间", required = true)
  34 + private Date createTime;
  35 +
  36 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.ToString;
  9 +import org.springframework.format.annotation.DateTimeFormat;
  10 +
  11 +import java.util.Date;
  12 +
  13 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  14 +
  15 +@ApiModel("退款订单分页 Request VO")
  16 +@Data
  17 +@EqualsAndHashCode(callSuper = true)
  18 +@ToString(callSuper = true)
  19 +public class PayRefundPageReqVO extends PageParam {
  20 +
  21 + @ApiModelProperty(value = "退款单请求号")
  22 + private String reqNo;
  23 +
  24 + @ApiModelProperty(value = "商户编号")
  25 + private Long merchantId;
  26 +
  27 + @ApiModelProperty(value = "应用编号")
  28 + private Long appId;
  29 +
  30 + @ApiModelProperty(value = "渠道编号")
  31 + private Long channelId;
  32 +
  33 + @ApiModelProperty(value = "渠道编码")
  34 + private String channelCode;
  35 +
  36 + @ApiModelProperty(value = "支付订单编号 pay_order 表id")
  37 + private Long orderId;
  38 +
  39 + @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段")
  40 + private String tradeNo;
  41 +
  42 + @ApiModelProperty(value = "商户订单编号(商户系统生成)")
  43 + private String merchantOrderId;
  44 +
  45 + @ApiModelProperty(value = "商户退款订单号(商户系统生成)")
  46 + private String merchantRefundNo;
  47 +
  48 + @ApiModelProperty(value = "异步通知商户地址")
  49 + private String notifyUrl;
  50 +
  51 + @ApiModelProperty(value = "通知商户退款结果的回调状态")
  52 + private Integer notifyStatus;
  53 +
  54 + @ApiModelProperty(value = "退款状态")
  55 + private Integer status;
  56 +
  57 + @ApiModelProperty(value = "退款类型(部分退款,全部退款)")
  58 + private Integer type;
  59 +
  60 + @ApiModelProperty(value = "支付金额,单位分")
  61 + private Long payAmount;
  62 +
  63 + @ApiModelProperty(value = "退款金额,单位分")
  64 + private Long refundAmount;
  65 +
  66 + @ApiModelProperty(value = "退款原因")
  67 + private String reason;
  68 +
  69 + @ApiModelProperty(value = "用户 IP")
  70 + private String userIp;
  71 +
  72 + @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应")
  73 + private String channelOrderNo;
  74 +
  75 + @ApiModelProperty(value = "渠道退款单号,渠道返回")
  76 + private String channelRefundNo;
  77 +
  78 + @ApiModelProperty(value = "渠道调用报错时,错误码")
  79 + private String channelErrorCode;
  80 +
  81 + @ApiModelProperty(value = "渠道调用报错时,错误信息")
  82 + private String channelErrorMsg;
  83 +
  84 + @ApiModelProperty(value = "支付渠道的额外参数")
  85 + private String channelExtras;
  86 +
  87 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  88 + @ApiModelProperty(value = "开始退款失效时间")
  89 + private Date beginExpireTime;
  90 +
  91 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  92 + @ApiModelProperty(value = "结束退款失效时间")
  93 + private Date endExpireTime;
  94 +
  95 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  96 + @ApiModelProperty(value = "开始退款成功时间")
  97 + private Date beginSuccessTime;
  98 +
  99 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  100 + @ApiModelProperty(value = "结束退款成功时间")
  101 + private Date endSuccessTime;
  102 +
  103 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  104 + @ApiModelProperty(value = "开始退款通知时间")
  105 + private Date beginNotifyTime;
  106 +
  107 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  108 + @ApiModelProperty(value = "结束退款通知时间")
  109 + private Date endNotifyTime;
  110 +
  111 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  112 + @ApiModelProperty(value = "开始创建时间")
  113 + private Date beginCreateTime;
  114 +
  115 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  116 + @ApiModelProperty(value = "结束创建时间")
  117 + private Date endCreateTime;
  118 +
  119 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundRespVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +import java.util.Date;
  10 +
  11 +@ApiModel("退款订单 Response VO")
  12 +@Data
  13 +@EqualsAndHashCode(callSuper = true)
  14 +@ToString(callSuper = true)
  15 +public class PayRefundRespVO extends PayRefundBaseVO {
  16 +
  17 + @ApiModelProperty(value = "支付退款编号", required = true)
  18 + private Long id;
  19 +
  20 + @ApiModelProperty(value = "创建时间", required = true)
  21 + private Date createTime;
  22 +
  23 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundUpdateReqVO.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
  2 +
  3 +import lombok.*;
  4 +import io.swagger.annotations.*;
  5 +import javax.validation.constraints.*;
  6 +
  7 +@ApiModel("退款订单更新 Request VO")
  8 +@Data
  9 +@EqualsAndHashCode(callSuper = true)
  10 +@ToString(callSuper = true)
  11 +public class PayRefundUpdateReqVO extends PayRefundBaseVO {
  12 +
  13 + @ApiModelProperty(value = "支付退款编号", required = true)
  14 + @NotNull(message = "支付退款编号不能为空")
  15 + private Long id;
  16 +
  17 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java
1 package cn.iocoder.yudao.adminserver.modules.pay.convert.order; 1 package cn.iocoder.yudao.adminserver.modules.pay.convert.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.*; 3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderDetailsRespVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExcelVO;
  5 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageItemRespVO;
  6 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderRespVO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 7 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; 8 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.convert.refund;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;
  4 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import org.mapstruct.Mapper;
  7 +import org.mapstruct.factory.Mappers;
  8 +
  9 +import java.math.BigDecimal;
  10 +import java.math.RoundingMode;
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * 退款订单 Convert
  15 + *
  16 + * @author aquan
  17 + */
  18 +@Mapper
  19 +public interface PayRefundConvert {
  20 +
  21 + PayRefundConvert INSTANCE = Mappers.getMapper(PayRefundConvert.class);
  22 +
  23 + PayRefundDO convert(PayRefundCreateReqVO bean);
  24 +
  25 + PayRefundDO convert(PayRefundUpdateReqVO bean);
  26 +
  27 + PayRefundRespVO convert(PayRefundDO bean);
  28 +
  29 + /**
  30 + * 退款订单 DO 转 退款详情订单 VO
  31 + *
  32 + * @param bean 退款订单 DO
  33 + * @return 退款详情订单 VO
  34 + */
  35 + PayRefundDetailsRespVO refundDetailConvert(PayRefundDO bean);
  36 +
  37 + /**
  38 + * 退款订单DO 转 分页退款条目VO
  39 + *
  40 + * @param bean 退款订单DO
  41 + * @return 分页退款条目VO
  42 + */
  43 + PayRefundPageItemRespVO pageItemConvert(PayRefundDO bean);
  44 +
  45 + List<PayRefundRespVO> convertList(List<PayRefundDO> list);
  46 +
  47 + PageResult<PayRefundRespVO> convertPage(PageResult<PayRefundDO> page);
  48 +
  49 + List<PayRefundExcelVO> convertList02(List<PayRefundDO> list);
  50 +
  51 + /**
  52 + * 退款订单DO 转 导出excel VO
  53 + *
  54 + * @param bean 退款订单DO
  55 + * @return 导出 excel VO
  56 + */
  57 + default PayRefundExcelVO excelConvert(PayRefundDO bean) {
  58 + if (bean == null) {
  59 + return null;
  60 + }
  61 +
  62 + PayRefundExcelVO payRefundExcelVO = new PayRefundExcelVO();
  63 +
  64 + payRefundExcelVO.setId(bean.getId());
  65 + payRefundExcelVO.setReqNo(bean.getReqNo());
  66 + payRefundExcelVO.setTradeNo(bean.getTradeNo());
  67 + payRefundExcelVO.setMerchantOrderId(bean.getMerchantOrderId());
  68 + payRefundExcelVO.setMerchantRefundNo(bean.getMerchantRefundNo());
  69 + payRefundExcelVO.setNotifyUrl(bean.getNotifyUrl());
  70 + payRefundExcelVO.setNotifyStatus(bean.getNotifyStatus());
  71 + payRefundExcelVO.setStatus(bean.getStatus());
  72 + payRefundExcelVO.setType(bean.getType());
  73 + payRefundExcelVO.setReason(bean.getReason());
  74 + payRefundExcelVO.setUserIp(bean.getUserIp());
  75 + payRefundExcelVO.setChannelOrderNo(bean.getChannelOrderNo());
  76 + payRefundExcelVO.setChannelRefundNo(bean.getChannelRefundNo());
  77 + payRefundExcelVO.setExpireTime(bean.getExpireTime());
  78 + payRefundExcelVO.setSuccessTime(bean.getSuccessTime());
  79 + payRefundExcelVO.setNotifyTime(bean.getNotifyTime());
  80 + payRefundExcelVO.setCreateTime(bean.getCreateTime());
  81 +
  82 + BigDecimal multiple = new BigDecimal(100);
  83 + payRefundExcelVO.setPayAmount(BigDecimal.valueOf(bean.getPayAmount())
  84 + .divide(multiple, 2, RoundingMode.HALF_UP).toString());
  85 + payRefundExcelVO.setRefundAmount(BigDecimal.valueOf(bean.getRefundAmount())
  86 + .divide(multiple, 2, RoundingMode.HALF_UP).toString());
  87 +
  88 + return payRefundExcelVO;
  89 + }
  90 +
  91 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java
1 package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; 1 package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; 3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  9 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
9 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
10 11
  12 +import java.util.Collection;
11 import java.util.List; 13 import java.util.List;
12 14
13 /** 15 /**
14 - * 支付订单  
15 - * Mapper 16 + * 支付订单 Mapper 组件
16 * 17 *
17 - * @author 芋艿 18 + * @author aquan
18 */ 19 */
19 @Mapper 20 @Mapper
20 public interface PayOrderMapper extends BaseMapperX<PayOrderDO> { 21 public interface PayOrderMapper extends BaseMapperX<PayOrderDO> {
@@ -49,4 +50,16 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; { @@ -49,4 +50,16 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; {
49 .orderByDesc("id")); 50 .orderByDesc("id"));
50 } 51 }
51 52
  53 + /**
  54 + * 根据订单 ID 集合查询订单商品名称
  55 + *
  56 + * @param idList 订单 ID 集合
  57 + * @return 只包含商品名称和标题的订单集合对象
  58 + */
  59 + default List<PayOrderDO> findByIdListQueryOrderSubject(Collection<Long> idList) {
  60 + return selectList(new LambdaQueryWrapper<PayOrderDO>()
  61 + .select(PayOrderDO::getId, PayOrderDO::getSubject)
  62 + .in(PayOrderDO::getId, idList));
  63 + }
  64 +
52 } 65 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
  5 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  8 +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  9 +import org.apache.ibatis.annotations.Mapper;
  10 +
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * 退款订单 Mapper
  15 + *
  16 + * @author aquan
  17 + */
  18 +@Mapper
  19 +public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
  20 +
  21 + default PageResult<PayRefundDO> selectPage(PayRefundPageReqVO reqVO) {
  22 + return selectPage(reqVO, new QueryWrapperX<PayRefundDO>()
  23 + .likeIfPresent("req_no", reqVO.getReqNo())
  24 + .eqIfPresent("merchant_id", reqVO.getMerchantId())
  25 + .eqIfPresent("app_id", reqVO.getAppId())
  26 + .eqIfPresent("channel_code", reqVO.getChannelCode())
  27 + .likeIfPresent("merchant_refund_no", reqVO.getMerchantRefundNo())
  28 + .eqIfPresent("type", reqVO.getType())
  29 + .eqIfPresent("status", reqVO.getStatus())
  30 + .eqIfPresent("notify_status", reqVO.getNotifyStatus())
  31 + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
  32 + .orderByDesc("id"));
  33 + }
  34 +
  35 + default List<PayRefundDO> selectList(PayRefundExportReqVO reqVO) {
  36 + return selectList(new QueryWrapperX<PayRefundDO>()
  37 + .eqIfPresent("merchant_id", reqVO.getMerchantId())
  38 + .eqIfPresent("app_id", reqVO.getAppId())
  39 + .eqIfPresent("channel_code", reqVO.getChannelCode())
  40 + .likeIfPresent("req_no", reqVO.getReqNo())
  41 + .likeIfPresent("merchant_refund_no", reqVO.getMerchantRefundNo())
  42 + .eqIfPresent("type", reqVO.getType())
  43 + .eqIfPresent("status", reqVO.getStatus())
  44 + .eqIfPresent("notify_status", reqVO.getNotifyStatus())
  45 + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
  46 + .orderByDesc("id"));
  47 + }
  48 +
  49 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderService.java
1 package cn.iocoder.yudao.adminserver.modules.pay.service.order; 1 package cn.iocoder.yudao.adminserver.modules.pay.service.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; 3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
7 8
8 import java.util.Collection; 9 import java.util.Collection;
9 import java.util.List; 10 import java.util.List;
  11 +import java.util.Map;
10 12
11 /** 13 /**
12 * 支付订单 14 * 支付订单
@@ -26,16 +28,6 @@ public interface PayOrderService { @@ -26,16 +28,6 @@ public interface PayOrderService {
26 28
27 /** 29 /**
28 * 获得支付订单 30 * 获得支付订单
29 - * 列表  
30 - *  
31 - * @param ids 编号  
32 - * @return 支付订单  
33 - * 列表  
34 - */  
35 - List<PayOrderDO> getOrderList(Collection<Long> ids);  
36 -  
37 - /**  
38 - * 获得支付订单  
39 * 分页 31 * 分页
40 * 32 *
41 * @param pageReqVO 分页查询 33 * @param pageReqVO 分页查询
@@ -54,4 +46,23 @@ public interface PayOrderService { @@ -54,4 +46,23 @@ public interface PayOrderService {
54 */ 46 */
55 List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO); 47 List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO);
56 48
  49 + /**
  50 + * 根据 ID 集合获取只包含商品名称的订单集合
  51 + *
  52 + * @param idList 订单 ID 集合
  53 + * @return 只包含商品名称的订单集合
  54 + */
  55 + List<PayOrderDO> getOrderSubjectList(Collection<Long> idList);
  56 +
  57 + /**
  58 + * 根据订单 ID 集合获取订单商品名称Map集合
  59 + *
  60 + * @param idList 订单 ID 集合
  61 + * @return 订单商品 map 集合
  62 + */
  63 + default Map<Long, PayOrderDO> getOrderSubjectMap(Collection<Long> idList) {
  64 + List<PayOrderDO> list = getOrderSubjectList(idList);
  65 + return CollectionUtils.convertMap(list, PayOrderDO::getId);
  66 + }
  67 +
57 } 68 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.service.order;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
  5 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * 退款订单 Service 接口
  12 + *
  13 + * @author aquan
  14 + */
  15 +public interface PayRefundService {
  16 +
  17 + /**
  18 + * 获得退款订单
  19 + *
  20 + * @param id 编号
  21 + * @return 退款订单
  22 + */
  23 + PayRefundDO getRefund(Long id);
  24 +
  25 + /**
  26 + * 获得退款订单分页
  27 + *
  28 + * @param pageReqVO 分页查询
  29 + * @return 退款订单分页
  30 + */
  31 + PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO);
  32 +
  33 + /**
  34 + * 获得退款订单列表, 用于 Excel 导出
  35 + *
  36 + * @param exportReqVO 查询条件
  37 + * @return 退款订单列表
  38 + */
  39 + List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO);
  40 +
  41 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java
1 package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; 1 package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; 3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;
5 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; 5 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;
6 import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; 6 import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;
7 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 7 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
@@ -31,11 +31,6 @@ public class PayOrderServiceImpl implements PayOrderService { @@ -31,11 +31,6 @@ public class PayOrderServiceImpl implements PayOrderService {
31 } 31 }
32 32
33 @Override 33 @Override
34 - public List<PayOrderDO> getOrderList(Collection<Long> ids) {  
35 - return orderMapper.selectBatchIds(ids);  
36 - }  
37 -  
38 - @Override  
39 public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) { 34 public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) {
40 return orderMapper.selectPage(pageReqVO); 35 return orderMapper.selectPage(pageReqVO);
41 } 36 }
@@ -45,4 +40,15 @@ public class PayOrderServiceImpl implements PayOrderService { @@ -45,4 +40,15 @@ public class PayOrderServiceImpl implements PayOrderService {
45 return orderMapper.selectList(exportReqVO); 40 return orderMapper.selectList(exportReqVO);
46 } 41 }
47 42
  43 + /**
  44 + * 根据 ID 集合获取只包含商品名称的订单集合
  45 + *
  46 + * @param idList 订单 ID 集合
  47 + * @return 只包含商品名称的订单集合
  48 + */
  49 + @Override
  50 + public List<PayOrderDO> getOrderSubjectList(Collection<Long> idList) {
  51 + return orderMapper.findByIdListQueryOrderSubject(idList);
  52 + }
  53 +
48 } 54 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;
  2 +
  3 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
  5 +import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;
  6 +import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;
  7 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import org.springframework.stereotype.Service;
  10 +import org.springframework.validation.annotation.Validated;
  11 +
  12 +import javax.annotation.Resource;
  13 +import java.util.List;
  14 +
  15 +/**
  16 + * 退款订单 Service 实现类
  17 + *
  18 + * @author aquan
  19 + */
  20 +@Service
  21 +@Validated
  22 +public class PayRefundServiceImpl implements PayRefundService {
  23 +
  24 + @Resource
  25 + private PayRefundMapper refundMapper;
  26 +
  27 + @Override
  28 + public PayRefundDO getRefund(Long id) {
  29 + return refundMapper.selectById(id);
  30 + }
  31 +
  32 + @Override
  33 + public PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO) {
  34 + return refundMapper.selectPage(pageReqVO);
  35 + }
  36 +
  37 + @Override
  38 + public List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO) {
  39 + return refundMapper.selectList(exportReqVO);
  40 + }
  41 +
  42 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysDictTypeConstants.java
@@ -37,4 +37,14 @@ public interface SysDictTypeConstants { @@ -37,4 +37,14 @@ public interface SysDictTypeConstants {
37 */ 37 */
38 String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status"; 38 String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status";
39 39
  40 + /**
  41 + * 支付-退款订单-退款状态
  42 + */
  43 + String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status";
  44 +
  45 + /**
  46 + * 支付-退款订单-退款类别
  47 + */
  48 + String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type";
  49 +
40 } 50 }
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderServiceTest.java
@@ -3,8 +3,8 @@ package cn.iocoder.yudao.adminserver.modules.pay.service.order; @@ -3,8 +3,8 @@ package cn.iocoder.yudao.adminserver.modules.pay.service.order;
3 import cn.hutool.core.date.DateUtil; 3 import cn.hutool.core.date.DateUtil;
4 import cn.hutool.core.util.RandomUtil; 4 import cn.hutool.core.util.RandomUtil;
5 import cn.iocoder.yudao.adminserver.BaseDbUnitTest; 5 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; 6 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;
  7 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;
8 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; 8 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;
9 import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayOrderServiceImpl; 9 import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayOrderServiceImpl;
10 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 10 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
@@ -44,7 +44,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest { @@ -44,7 +44,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
44 return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999); 44 return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999);
45 } 45 }
46 46
47 - @Test // TODO 请修改 null 为需要的值 47 + @Test
48 public void testGetOrderPage() { 48 public void testGetOrderPage() {
49 49
50 String merchantOrderId = generateNo(); 50 String merchantOrderId = generateNo();
@@ -120,7 +120,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest { @@ -120,7 +120,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
120 // assertEquals(0, dbOrder.getUpdateTime().compareTo(pageResult.getList().get(0).getUpdateTime())); 120 // assertEquals(0, dbOrder.getUpdateTime().compareTo(pageResult.getList().get(0).getUpdateTime()));
121 } 121 }
122 122
123 - @Test // TODO 请修改 null 为需要的值 123 + @Test
124 public void testGetOrderList() { 124 public void testGetOrderList() {
125 // mock 数据 125 // mock 数据
126 String merchantOrderId = generateNo(); 126 String merchantOrderId = generateNo();
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java 0 → 100755
  1 +package cn.iocoder.yudao.adminserver.modules.pay.service.refund;
  2 +
  3 +import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
  5 +import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
  6 +import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;
  7 +import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayRefundServiceImpl;
  8 +import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
  9 +import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;
  10 +import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
  11 +import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum;
  12 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  13 +import cn.iocoder.yudao.framework.common.util.date.DateUtils;
  14 +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  15 +import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  16 +import org.junit.jupiter.api.Test;
  17 +import org.springframework.context.annotation.Import;
  18 +
  19 +import javax.annotation.Resource;
  20 +import java.util.List;
  21 +
  22 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
  23 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  24 +import static org.junit.jupiter.api.Assertions.assertEquals;
  25 +
  26 +/**
  27 + * {@link PayRefundServiceImpl} 的单元测试类
  28 + *
  29 + * @author aquan
  30 + */
  31 +@Import(PayRefundServiceImpl.class)
  32 +public class PayRefundServiceTest extends BaseDbUnitTest {
  33 +
  34 + @Resource
  35 + private PayRefundServiceImpl refundService;
  36 +
  37 + @Resource
  38 + private PayRefundMapper refundMapper;
  39 +
  40 +
  41 + @Test
  42 + public void testGetRefundPage() {
  43 + // mock 数据
  44 + PayRefundDO dbRefund = randomPojo(PayRefundDO.class, o -> { // 等会查询到
  45 + o.setReqNo("RF0000001");
  46 + o.setMerchantId(1L);
  47 + o.setAppId(1L);
  48 + o.setChannelId(1L);
  49 + o.setChannelCode(PayChannelEnum.WX_PUB.getCode());
  50 + o.setOrderId(1L);
  51 + o.setTradeNo("OT0000001");
  52 + o.setMerchantOrderId("MOT0000001");
  53 + o.setMerchantRefundNo("MRF0000001");
  54 + o.setNotifyUrl("https://www.cancanzi.com");
  55 + o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
  56 + o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
  57 + o.setType(PayRefundTypeEnum.SOME.getStatus());
  58 + o.setPayAmount(100L);
  59 + o.setRefundAmount(500L);
  60 + o.setReason("就是想退款了,你有意见吗");
  61 + o.setUserIp("127.0.0.1");
  62 + o.setChannelOrderNo("CH0000001");
  63 + o.setChannelRefundNo("CHR0000001");
  64 + o.setChannelErrorCode("");
  65 + o.setChannelErrorMsg("");
  66 + o.setChannelExtras("");
  67 + o.setExpireTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 30));
  68 + o.setSuccessTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 15));
  69 + o.setNotifyTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 20));
  70 + o.setCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10));
  71 + o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35));
  72 + });
  73 + refundMapper.insert(dbRefund);
  74 + // 测试 reqNo 不匹配
  75 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setReqNo("RF1111112")));
  76 + // 测试 merchantId 不匹配
  77 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantId(2L)));
  78 + // 测试 appId 不匹配
  79 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setAppId(2L)));
  80 + // 测试 channelCode 不匹配
  81 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setChannelCode(PayChannelEnum.ALIPAY_APP.getCode())));
  82 + // 测试 merchantRefundNo 不匹配
  83 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantRefundNo("MRF1111112")));
  84 + // 测试 notifyStatus 不匹配
  85 + refundMapper.insert(
  86 + ObjectUtils.clone(dbRefund, o -> o.setNotifyStatus(PayOrderNotifyStatusEnum.FAILURE.getStatus())));
  87 + // 测试 status 不匹配
  88 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setStatus(PayRefundStatusEnum.CLOSE.getStatus())));
  89 + // 测试 type 不匹配
  90 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setType(PayRefundTypeEnum.ALL.getStatus())));
  91 + // 测试 createTime 不匹配
  92 + refundMapper.insert(ObjectUtils.clone(dbRefund, o ->
  93 + o.setCreateTime(DateUtils.buildTime(2022, 1, 1, 10, 10, 10))));
  94 + // 准备参数
  95 + PayRefundPageReqVO reqVO = new PayRefundPageReqVO();
  96 + reqVO.setReqNo("RF0000001");
  97 + reqVO.setMerchantId(1L);
  98 + reqVO.setAppId(1L);
  99 + reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode());
  100 + reqVO.setMerchantRefundNo("MRF0000001");
  101 + reqVO.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
  102 + reqVO.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
  103 + reqVO.setType(PayRefundTypeEnum.SOME.getStatus());
  104 + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10));
  105 + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 12));
  106 +
  107 +
  108 + // 调用
  109 + PageResult<PayRefundDO> pageResult = refundService.getRefundPage(reqVO);
  110 + // 断言
  111 + assertEquals(1, pageResult.getTotal());
  112 + assertEquals(1, pageResult.getList().size());
  113 + assertPojoEquals(dbRefund, pageResult.getList().get(0));
  114 + }
  115 +
  116 + @Test
  117 + public void testGetRefundList() {
  118 + // mock 数据
  119 + PayRefundDO dbRefund = randomPojo(PayRefundDO.class, o -> { // 等会查询到
  120 + o.setReqNo("RF0000001");
  121 + o.setMerchantId(1L);
  122 + o.setAppId(1L);
  123 + o.setChannelId(1L);
  124 + o.setChannelCode(PayChannelEnum.WX_PUB.getCode());
  125 + o.setOrderId(1L);
  126 + o.setTradeNo("OT0000001");
  127 + o.setMerchantOrderId("MOT0000001");
  128 + o.setMerchantRefundNo("MRF0000001");
  129 + o.setNotifyUrl("https://www.cancanzi.com");
  130 + o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
  131 + o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
  132 + o.setType(PayRefundTypeEnum.SOME.getStatus());
  133 + o.setPayAmount(100L);
  134 + o.setRefundAmount(500L);
  135 + o.setReason("就是想退款了,你有意见吗");
  136 + o.setUserIp("127.0.0.1");
  137 + o.setChannelOrderNo("CH0000001");
  138 + o.setChannelRefundNo("CHR0000001");
  139 + o.setChannelErrorCode("");
  140 + o.setChannelErrorMsg("");
  141 + o.setChannelExtras("");
  142 + o.setExpireTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 30));
  143 + o.setSuccessTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 15));
  144 + o.setNotifyTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 20));
  145 + o.setCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10));
  146 + o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35));
  147 + });
  148 + refundMapper.insert(dbRefund);
  149 + // 测试 reqNo 不匹配
  150 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setReqNo("RF1111112")));
  151 + // 测试 merchantId 不匹配
  152 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantId(2L)));
  153 + // 测试 appId 不匹配
  154 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setAppId(2L)));
  155 + // 测试 channelCode 不匹配
  156 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setChannelCode(PayChannelEnum.ALIPAY_APP.getCode())));
  157 + // 测试 merchantRefundNo 不匹配
  158 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantRefundNo("MRF1111112")));
  159 + // 测试 notifyStatus 不匹配
  160 + refundMapper.insert(
  161 + ObjectUtils.clone(dbRefund, o -> o.setNotifyStatus(PayOrderNotifyStatusEnum.FAILURE.getStatus())));
  162 + // 测试 status 不匹配
  163 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setStatus(PayRefundStatusEnum.CLOSE.getStatus())));
  164 + // 测试 type 不匹配
  165 + refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setType(PayRefundTypeEnum.ALL.getStatus())));
  166 + // 测试 createTime 不匹配
  167 + refundMapper.insert(ObjectUtils.clone(dbRefund, o ->
  168 + o.setCreateTime(DateUtils.buildTime(2022, 1, 1, 10, 10, 10))));
  169 +
  170 + // 准备参数
  171 + PayRefundExportReqVO reqVO = new PayRefundExportReqVO();
  172 + reqVO.setReqNo("RF0000001");
  173 + reqVO.setMerchantId(1L);
  174 + reqVO.setAppId(1L);
  175 + reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode());
  176 + reqVO.setMerchantRefundNo("MRF0000001");
  177 + reqVO.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
  178 + reqVO.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
  179 + reqVO.setType(PayRefundTypeEnum.SOME.getStatus());
  180 + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10));
  181 + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 12));
  182 +
  183 + // 调用
  184 + List<PayRefundDO> list = refundService.getRefundList(reqVO);
  185 + // 断言
  186 + assertEquals(1, list.size());
  187 + assertPojoEquals(dbRefund, list.get(0));
  188 + }
  189 +
  190 +}
yudao-admin-server/src/test/resources/sql/clean.sql
@@ -29,4 +29,5 @@ DELETE FROM &quot;sys_social_user&quot;; @@ -29,4 +29,5 @@ DELETE FROM &quot;sys_social_user&quot;;
29 DELETE FROM pay_merchant; 29 DELETE FROM pay_merchant;
30 DELETE FROM pay_app; 30 DELETE FROM pay_app;
31 DELETE FROM pay_channel; 31 DELETE FROM pay_channel;
32 -delete from pay_order; 32 +DELETE FROM pay_order;
  33 +DELETE FROM pay_refund;
33 \ No newline at end of file 34 \ No newline at end of file
yudao-admin-server/src/test/resources/sql/create_tables.sql
@@ -553,12 +553,47 @@ CREATE TABLE `pay_order` @@ -553,12 +553,47 @@ CREATE TABLE `pay_order`
553 `channel_order_no` varchar(64) DEFAULT NULL, 553 `channel_order_no` varchar(64) DEFAULT NULL,
554 `creator` varchar(64) DEFAULT '', 554 `creator` varchar(64) DEFAULT '',
555 `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, 555 `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
556 - `updater` varchar(64) DEFAULT '' , 556 + `updater` varchar(64) DEFAULT '',
557 `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 557 `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
558 - `deleted` bit(1) NOT NULL DEFAULT FALSE, 558 + `deleted` bit(1) NOT NULL DEFAULT FALSE,
559 PRIMARY KEY ("id") 559 PRIMARY KEY ("id")
560 ) COMMENT = '支付订单'; 560 ) COMMENT = '支付订单';
561 561
562 562
563 563
  564 +CREATE TABLE `pay_refund`
  565 +(
  566 + "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  567 + `req_no` varchar(64) NOT NULL,
  568 + `merchant_id` bigint(20) NOT NULL,
  569 + `app_id` bigint(20) NOT NULL,
  570 + `channel_id` bigint(20) NOT NULL,
  571 + `channel_code` varchar(32) NOT NULL,
  572 + `order_id` bigint(20) NOT NULL,
  573 + `trade_no` varchar(64) NOT NULL,
  574 + `merchant_order_id` varchar(64) NOT NULL,
  575 + `merchant_refund_no` varchar(64) NOT NULL,
  576 + `notify_url` varchar(1024) NOT NULL,
  577 + `notify_status` tinyint(4) NOT NULL,
  578 + `status` tinyint(4) NOT NULL,
  579 + `type` tinyint(4) NOT NULL,
  580 + `pay_amount` bigint(20) NOT NULL,
  581 + `refund_amount` bigint(20) NOT NULL,
  582 + `reason` varchar(256) NOT NULL,
  583 + `user_ip` varchar(50) NULL DEFAULT NULL,
  584 + `channel_order_no` varchar(64) NOT NULL,
  585 + `channel_refund_no` varchar(64) NULL DEFAULT NULL,
  586 + `channel_error_code` varchar(128) NULL DEFAULT NULL,
  587 + `channel_error_msg` varchar(256) NULL DEFAULT NULL,
  588 + `channel_extras` varchar(1024) NULL DEFAULT NULL,
  589 + `expire_time` datetime(0) NULL DEFAULT NULL,
  590 + `success_time` datetime(0) NULL DEFAULT NULL,
  591 + `notify_time` datetime(0) NULL DEFAULT NULL,
  592 + `creator` varchar(64) NULL DEFAULT '',
  593 + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  594 + `updater` varchar(64) NULL DEFAULT '',
  595 + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  596 + `deleted` bit(1) NOT NULL DEFAULT FALSE,
  597 + PRIMARY KEY ("id")
  598 +) COMMENT = '退款订单';
564 599
yudao-admin-ui/src/api/pay/refund.js 0 → 100755
  1 +import request from '@/utils/request'
  2 +
  3 +// 创建退款订单
  4 +export function createRefund(data) {
  5 + return request({
  6 + url: '/pay/refund/create',
  7 + method: 'post',
  8 + data: data
  9 + })
  10 +}
  11 +
  12 +// 更新退款订单
  13 +export function updateRefund(data) {
  14 + return request({
  15 + url: '/pay/refund/update',
  16 + method: 'put',
  17 + data: data
  18 + })
  19 +}
  20 +
  21 +// 删除退款订单
  22 +export function deleteRefund(id) {
  23 + return request({
  24 + url: '/pay/refund/delete?id=' + id,
  25 + method: 'delete'
  26 + })
  27 +}
  28 +
  29 +// 获得退款订单
  30 +export function getRefund(id) {
  31 + return request({
  32 + url: '/pay/refund/get?id=' + id,
  33 + method: 'get'
  34 + })
  35 +}
  36 +
  37 +// 获得退款订单分页
  38 +export function getRefundPage(query) {
  39 + return request({
  40 + url: '/pay/refund/page',
  41 + method: 'get',
  42 + params: query
  43 + })
  44 +}
  45 +
  46 +// 导出退款订单 Excel
  47 +export function exportRefundExcel(query) {
  48 + return request({
  49 + url: '/pay/refund/export-excel',
  50 + method: 'get',
  51 + params: query,
  52 + responseType: 'blob'
  53 + })
  54 +}
yudao-admin-ui/src/utils/constants.js
@@ -187,3 +187,41 @@ export const payOrderRefundStatusEnum = { @@ -187,3 +187,41 @@ export const payOrderRefundStatusEnum = {
187 } 187 }
188 } 188 }
189 189
  190 +/**
  191 + * 支付退款订单状态枚举
  192 + */
  193 +export const payRefundStatusEnum = {
  194 + CREATE:{
  195 + status:0,
  196 + name: '退款订单生成'
  197 + },
  198 + SUCCESS:{
  199 + status:1,
  200 + name: '退款成功'
  201 + },
  202 + FAILURE:{
  203 + status:2,
  204 + name: '退款失败'
  205 + },
  206 + PROCESSING_NOTIFY:{
  207 + status:3,
  208 + name: '退款中,渠道通知结果'
  209 + },
  210 + PROCESSING_QUERY:{
  211 + status:4,
  212 + name: '退款中,系统查询结果'
  213 + },
  214 + UNKNOWN_RETRY:{
  215 + status:5,
  216 + name: '状态未知,请重试'
  217 + },
  218 + UNKNOWN_QUERY:{
  219 + status:6,
  220 + name: '状态未知,系统查询结果'
  221 + },
  222 + CLOSE:{
  223 + status:99,
  224 + name: '退款关闭'
  225 + }
  226 +}
  227 +
yudao-admin-ui/src/utils/dict.js
@@ -53,6 +53,10 @@ export const DICT_TYPE = { @@ -53,6 +53,10 @@ export const DICT_TYPE = {
53 PAY_ORDER_STATUS: 'pay_order_status', 53 PAY_ORDER_STATUS: 'pay_order_status',
54 // 商户支付订单退款状态 54 // 商户支付订单退款状态
55 PAY_ORDER_REFUND_STATUS: 'pay_order_refund_status', 55 PAY_ORDER_REFUND_STATUS: 'pay_order_refund_status',
  56 + // 退款订单状态
  57 + PAY_REFUND_ORDER_STATUS: 'pay_refund_order_status',
  58 + // 退款订单类别
  59 + PAY_REFUND_ORDER_TYPE: 'pay_refund_order_type',
56 } 60 }
57 61
58 /** 62 /**
yudao-admin-ui/src/views/pay/order/index.vue
@@ -95,11 +95,28 @@ @@ -95,11 +95,28 @@
95 <!-- 列表 --> 95 <!-- 列表 -->
96 <el-table v-loading="loading" :data="list"> 96 <el-table v-loading="loading" :data="list">
97 <el-table-column label="订单编号" align="center" prop="id" width="80"/> 97 <el-table-column label="订单编号" align="center" prop="id" width="80"/>
98 - <el-table-column label="商户名称" align="center" prop="merchantName" width="120"/>  
99 - <el-table-column label="应用名称" align="center" prop="appName" width="120"/>  
100 - <el-table-column label="渠道名称" align="center" prop="channelCodeName" width="130"/>  
101 - <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>  
102 - <el-table-column label="渠道订单号" align="center" prop="channelOrderNo" width="140"/> 98 +<!-- <el-table-column label="商户名称" align="center" prop="merchantName" width="120"/>-->
  99 +<!-- <el-table-column label="应用名称" align="center" prop="appName" width="120"/>-->
  100 + <el-table-column label="支付渠道" align="center" width="130">
  101 + <template v-slot="scope">
  102 + <el-popover trigger="hover" placement="top">
  103 + <p>商户名称: {{ scope.row.merchantName }}</p>
  104 + <p>应用名称: {{ scope.row.appName }}</p>
  105 + <p>渠道名称: {{ scope.row.channelCodeName }}</p>
  106 + <div slot="reference" class="name-wrapper">
  107 + {{ scope.row.channelCodeName }}
  108 + </div>
  109 + </el-popover>
  110 + </template>
  111 + </el-table-column>
  112 + <el-table-column label="支付订单" align="left" width="250">
  113 + <template v-slot="scope">
  114 + <p class="order-font"><el-tag size="mini">商户</el-tag> {{scope.row.merchantOrderId}}</p>
  115 + <p class="order-font"><el-tag size="mini" type="warning">支付</el-tag> {{scope.row.channelOrderNo}}</p>
  116 + </template>
  117 + </el-table-column>
  118 +<!-- <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>-->
  119 +<!-- <el-table-column label="渠道订单号" align="center" prop="channelOrderNo" width="140"/>-->
103 <el-table-column label="商品标题" align="center" prop="subject" width="180" :show-overflow-tooltip="true"/> 120 <el-table-column label="商品标题" align="center" prop="subject" width="180" :show-overflow-tooltip="true"/>
104 <el-table-column label="支付金额" align="center" prop="amount" width="100"> 121 <el-table-column label="支付金额" align="center" prop="amount" width="100">
105 <template slot-scope="scope"> 122 <template slot-scope="scope">
@@ -121,11 +138,11 @@ @@ -121,11 +138,11 @@
121 <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_STATUS, scope.row.status) }}</span> 138 <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_STATUS, scope.row.status) }}</span>
122 </template> 139 </template>
123 </el-table-column> 140 </el-table-column>
124 - <el-table-column label="退款状态" align="center" prop="refundStatus">  
125 - <template slot-scope="scope">  
126 - <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, scope.row.refundStatus) }}</span>  
127 - </template>  
128 - </el-table-column> 141 +<!-- <el-table-column label="退款状态" align="center" prop="refundStatus">-->
  142 +<!-- <template slot-scope="scope">-->
  143 +<!-- <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, scope.row.refundStatus) }}</span>-->
  144 +<!-- </template>-->
  145 +<!-- </el-table-column>-->
129 <el-table-column label="回调状态" align="center" prop="notifyStatus" width="100"> 146 <el-table-column label="回调状态" align="center" prop="notifyStatus" width="100">
130 <template slot-scope="scope"> 147 <template slot-scope="scope">
131 <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, scope.row.notifyStatus) }}</span> 148 <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, scope.row.notifyStatus) }}</span>
@@ -141,18 +158,11 @@ @@ -141,18 +158,11 @@
141 <span>{{ parseTime(scope.row.successTime) }}</span> 158 <span>{{ parseTime(scope.row.successTime) }}</span>
142 </template> 159 </template>
143 </el-table-column> 160 </el-table-column>
144 -  
145 - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 161 + <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
146 <template slot-scope="scope"> 162 <template slot-scope="scope">
147 <el-button size="mini" type="text" icon="el-icon-search" @click="handleQueryDetails(scope.row)" 163 <el-button size="mini" type="text" icon="el-icon-search" @click="handleQueryDetails(scope.row)"
148 v-hasPermi="['pay:order:query']">查看详情 164 v-hasPermi="['pay:order:query']">查看详情
149 </el-button> 165 </el-button>
150 - <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"-->  
151 - <!-- v-hasPermi="['pay:order:update']">修改-->  
152 - <!-- </el-button>-->  
153 - <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"-->  
154 - <!-- v-hasPermi="['pay:order:delete']">删除-->  
155 - <!-- </el-button>-->  
156 </template> 166 </template>
157 </el-table-column> 167 </el-table-column>
158 </el-table> 168 </el-table>
@@ -385,7 +395,6 @@ export default { @@ -385,7 +395,6 @@ export default {
385 /** 取消按钮 */ 395 /** 取消按钮 */
386 cancel() { 396 cancel() {
387 this.open = false; 397 this.open = false;
388 - this.reset();  
389 }, 398 },
390 /** 搜索按钮操作 */ 399 /** 搜索按钮操作 */
391 handleQuery() { 400 handleQuery() {
@@ -458,7 +467,7 @@ export default { @@ -458,7 +467,7 @@ export default {
458 this.addBeginAndEndTime(params, this.dateRangeExpireTime, 'expireTime'); 467 this.addBeginAndEndTime(params, this.dateRangeExpireTime, 'expireTime');
459 this.addBeginAndEndTime(params, this.dateRangeSuccessTime, 'successTime'); 468 this.addBeginAndEndTime(params, this.dateRangeSuccessTime, 'successTime');
460 this.addBeginAndEndTime(params, this.dateRangeNotifyTime, 'notifyTime'); 469 this.addBeginAndEndTime(params, this.dateRangeNotifyTime, 'notifyTime');
461 - this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); 470 + this.addDateRange(params, this.dateRangeCreateTime, 'CreateTime');
462 // 执行导出 471 // 执行导出
463 this.$confirm('是否确认导出所有支付订单数据项?', "警告", { 472 this.$confirm('是否确认导出所有支付订单数据项?', "警告", {
464 confirmButtonText: "确定", 473 confirmButtonText: "确定",
@@ -515,4 +524,9 @@ export default { @@ -515,4 +524,9 @@ export default {
515 background: #fff0f6; 524 background: #fff0f6;
516 border-color: #ffadd2; 525 border-color: #ffadd2;
517 } 526 }
  527 +
  528 +.order-font{
  529 + font-size: 12px;
  530 + padding: 2px 0;
  531 +}
518 </style> 532 </style>
yudao-admin-ui/src/views/pay/refund/index.vue 0 → 100755
  1 +<template>
  2 + <div class="app-container">
  3 +
  4 + <!-- 搜索工作栏 -->
  5 + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="120px">
  6 + <el-form-item label="所属商户" prop="merchantId">
  7 + <el-select
  8 + v-model="queryParams.merchantId"
  9 + clearable
  10 + @clear="()=>{queryParams.merchantId = null}"
  11 + filterable
  12 + remote
  13 + reserve-keyword
  14 + placeholder="请选择所属商户"
  15 + @change="handleGetAppListByMerchantId"
  16 + :remote-method="handleGetMerchantListByName"
  17 + :loading="merchantLoading">
  18 + <el-option
  19 + v-for="item in merchantList"
  20 + :key="item.id"
  21 + :label="item.name"
  22 + :value="item.id">
  23 + </el-option>
  24 + </el-select>
  25 + </el-form-item>
  26 + <el-form-item label="应用编号" prop="appId">
  27 + <el-select
  28 + clearable
  29 + v-model="queryParams.appId"
  30 + filterable
  31 + placeholder="请选择应用信息">
  32 + <el-option
  33 + v-for="item in appList"
  34 + :key="item.id"
  35 + :label="item.name"
  36 + :value="item.id">
  37 + </el-option>
  38 + </el-select>
  39 + </el-form-item>
  40 + <el-form-item label="渠道编码" prop="channelCode">
  41 + <el-select v-model="queryParams.channelCode" placeholder="请输入渠道编码" clearable
  42 + size="small" @clear="()=>{queryParams.channelCode = null}">
  43 + <el-option v-for="dict in payChannelCodeDictDatum" :key="dict.value" :label="dict.label" :value="dict.value"/>
  44 + </el-select>
  45 + </el-form-item>
  46 + <el-form-item label="退款单号" prop="reqNo">
  47 + <el-input v-model="queryParams.reqNo" placeholder="请输入退款单请求号" clearable size="small"
  48 + @keyup.enter.native="handleQuery"/>
  49 + </el-form-item>
  50 + <el-form-item label="商户退款订单号" prop="merchantRefundNo">
  51 + <el-input v-model="queryParams.merchantRefundNo" placeholder="请输入商户退款订单号" clearable size="small"
  52 + @keyup.enter.native="handleQuery"/>
  53 + </el-form-item>
  54 + <el-form-item label="退款类型" prop="type">
  55 + <el-select v-model="queryParams.type" placeholder="请选择退款类型" clearable size="small">
  56 + <el-option v-for="dict in payRefundOrderTypeDictDatum" :key="parseInt(dict.value)"
  57 + :label="dict.label" :value="parseInt(dict.value)"/>
  58 + </el-select>
  59 + </el-form-item>
  60 + <el-form-item label="退款状态" prop="status">
  61 + <el-select v-model="queryParams.status" placeholder="请选择退款状态" clearable size="small">
  62 + <el-option v-for="dict in payRefundOrderDictDatum" :key="parseInt(dict.value)"
  63 + :label="dict.label" :value="parseInt(dict.value)"/>
  64 + </el-select>
  65 + </el-form-item>
  66 +
  67 + <el-form-item label="退款回调状态" prop="notifyStatus">
  68 + <el-select v-model="queryParams.notifyStatus" placeholder="请选择通知商户退款结果的回调状态" clearable size="small">
  69 + <el-option v-for="dict in payOrderNotifyDictDatum" :key="parseInt(dict.value)"
  70 + :label="dict.label" :value="parseInt(dict.value)"/>
  71 + </el-select>
  72 + </el-form-item>
  73 + <el-form-item label="创建时间">
  74 + <el-date-picker
  75 + v-model="dateRangeCreateTime" size="small" style="width: 350px"
  76 + value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="-"
  77 + :default-time="['00:00:00','23:59:59']" start-placeholder="开始日期" end-placeholder="结束日期">
  78 + </el-date-picker>
  79 + </el-form-item>
  80 + <el-form-item>
  81 + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  82 + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  83 + </el-form-item>
  84 + </el-form>
  85 +
  86 + <!-- 操作工具栏 -->
  87 + <el-row :gutter="10" class="mb8">
  88 + <el-col :span="1.5">
  89 + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
  90 + v-hasPermi="['pay:refund:export']">导出
  91 + </el-button>
  92 + </el-col>
  93 + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  94 + </el-row>
  95 +
  96 + <!-- 列表 -->
  97 + <el-table v-loading="loading" :data="list">
  98 + <el-table-column label="编号" align="center" prop="id"/>
  99 + <!-- <el-table-column label="商户名称" align="center" prop="merchantName" width="120"/>-->
  100 + <!-- <el-table-column label="应用名称" align="center" prop="appName" width="120"/>-->
  101 + <el-table-column label="支付渠道" align="center" width="130">
  102 + <template v-slot="scope">
  103 + <el-popover trigger="hover" placement="top">
  104 + <p>商户名称: {{ scope.row.merchantName }}</p>
  105 + <p>应用名称: {{ scope.row.appName }}</p>
  106 + <p>渠道名称: {{ scope.row.channelCodeName }}</p>
  107 + <div slot="reference" class="name-wrapper">
  108 + {{ scope.row.channelCodeName }}
  109 + </div>
  110 + </el-popover>
  111 + </template>
  112 + </el-table-column>
  113 + <!-- <el-table-column label="交易订单号" align="center" prop="tradeNo" width="140"/>-->
  114 + <!-- <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>-->
  115 + <el-table-column label="退款订单号" align="left" width="230">
  116 + <template v-slot="scope">
  117 + <p class="order-font">
  118 + <el-tag size="mini">退款</el-tag>
  119 + {{ scope.row.reqNo }}
  120 + </p>
  121 + <p class="order-font">
  122 + <el-tag size="mini" type="success">商户</el-tag>
  123 + {{ scope.row.merchantRefundNo }}
  124 + </p>
  125 + </template>
  126 + </el-table-column>
  127 + <el-table-column label="支付订单号" align="center" prop="merchantRefundNo" width="250">
  128 + <template v-slot="scope">
  129 + <p class="order-font">
  130 + <el-tag size="mini">交易</el-tag>
  131 + {{ scope.row.tradeNo }}
  132 + </p>
  133 + <p class="order-font">
  134 + <el-tag size="mini" type="warning">渠道</el-tag>
  135 + {{ scope.row.channelOrderNo }}
  136 + </p>
  137 + </template>
  138 + </el-table-column>
  139 + <el-table-column label="支付金额(元)" align="center" prop="payAmount" width="100">
  140 + <template v-slot="scope" class="">
  141 + ¥{{ parseFloat(scope.row.payAmount / 100).toFixed(2) }}
  142 + </template>
  143 + </el-table-column>
  144 + <el-table-column label="退款金额(元)" align="center" prop="refundAmount" width="100">
  145 + <template scope="scope">
  146 + ¥{{ parseFloat(scope.row.refundAmount / 100).toFixed(2) }}
  147 + </template>
  148 + </el-table-column>
  149 + <el-table-column label="退款类型" align="center" prop="type" width="80">
  150 + <template v-slot="scope">
  151 + <el-tag :type="findByRefundTypeGetStyle(scope.row.type)">
  152 + {{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, scope.row.type) }}
  153 + </el-tag>
  154 + </template>
  155 + </el-table-column>
  156 + <el-table-column label="退款状态" align="center" prop="status">
  157 + <template v-slot="scope">
  158 + <el-tag :type="findByRefundStatusGetStyle(scope.row.status)">
  159 + {{ getDictDataLabel(DICT_TYPE.PAY_REFUND_ORDER_STATUS, scope.row.status) }}
  160 + </el-tag>
  161 + </template>
  162 + </el-table-column>
  163 + <el-table-column label="回调状态" align="center" prop="notifyStatus">
  164 + <template v-slot="scope">
  165 + <el-tag :type="findByRefundStatusGetStyle(scope.row.notifyStatus)">
  166 + {{ getDictDataLabel(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, scope.row.notifyStatus) }}
  167 + </el-tag>
  168 + </template>
  169 + </el-table-column>
  170 + <el-table-column label="退款原因" align="center" prop="reason" width="140" :show-overflow-tooltip="true"/>
  171 + <el-table-column label="创建时间" align="center" prop="createTime" width="100">
  172 + <template slot-scope="scope">
  173 + <span>{{ parseTime(scope.row.createTime) }}</span>
  174 + </template>
  175 + </el-table-column>
  176 + <el-table-column label="退款成功时间" align="center" prop="successTime" width="100">
  177 + <template slot-scope="scope">
  178 + <span>{{ parseTime(scope.row.successTime) }}</span>
  179 + </template>
  180 + </el-table-column>
  181 + <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
  182 + <template slot-scope="scope">
  183 + <el-button size="mini" type="text" icon="el-icon-search" @click="handleQueryDetails(scope.row)"
  184 + v-hasPermi="['pay:order:query']">查看详情
  185 + </el-button>
  186 + </template>
  187 + </el-table-column>
  188 + </el-table>
  189 + <!-- 分页组件 -->
  190 + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  191 + @pagination="getList"/>
  192 +
  193 + <!-- 对话框(添加 / 修改) -->
  194 + <el-dialog title="退款订单详情" :visible.sync="open" width="700px" append-to-body>
  195 + <el-descriptions :column="2" label-class-name="desc-label">
  196 + <el-descriptions-item label="商户名称">{{ refundDetail.merchantName }}</el-descriptions-item>
  197 + <el-descriptions-item label="应用名称">{{ refundDetail.appName }}</el-descriptions-item>
  198 + <el-descriptions-item label="商品名称">{{ refundDetail.subject }}</el-descriptions-item>
  199 + </el-descriptions>
  200 + <el-divider></el-divider>
  201 + <el-descriptions :column="2" label-class-name="desc-label">
  202 + <el-descriptions-item label="商户退款单号">
  203 + <el-tag size="mini">{{ refundDetail.merchantRefundNo }}</el-tag>
  204 + </el-descriptions-item>
  205 + <el-descriptions-item label="商户退款请求单号" size="mini">
  206 + <el-tag type="success" size="mini">{{ refundDetail.reqNo }}</el-tag>
  207 + </el-descriptions-item>
  208 + <el-descriptions-item label="商户订单号">{{ refundDetail.merchantOrderId }}</el-descriptions-item>
  209 + <el-descriptions-item label="交易订单号">{{ refundDetail.tradeNo }}</el-descriptions-item>
  210 + </el-descriptions>
  211 + <el-divider></el-divider>
  212 + <el-descriptions :column="2" label-class-name="desc-label">
  213 + <el-descriptions-item label="支付金额">
  214 + {{ parseFloat(refundDetail.payAmount / 100).toFixed(2) }}
  215 + </el-descriptions-item>
  216 + <el-descriptions-item label="退款金额" size="mini">
  217 + <el-tag class="tag-purple" size="mini">{{ parseFloat(refundDetail.refundAmount / 100).toFixed(2) }}</el-tag>
  218 + </el-descriptions-item>
  219 + <el-descriptions-item label="退款类型">
  220 + <el-tag size="mini" :type="findByRefundTypeGetStyle(refundDetail.type)">
  221 + {{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, refundDetail.type) }}
  222 + </el-tag>
  223 + </el-descriptions-item>
  224 + <el-descriptions-item label="退款状态">
  225 + <el-tag size="mini" :type="findByRefundStatusGetStyle(refundDetail.status)">
  226 + {{ getDictDataLabel(DICT_TYPE.PAY_REFUND_ORDER_STATUS, refundDetail.status) }}
  227 + </el-tag>
  228 + </el-descriptions-item>
  229 + <el-descriptions-item label="创建时间">{{ parseTime(refundDetail.createTime) }}</el-descriptions-item>
  230 + <el-descriptions-item label="退款成功时间">{{ parseTime(refundDetail.successTime) }}</el-descriptions-item>
  231 + <el-descriptions-item label="退款失效时间">{{ parseTime(refundDetail.expireTime) }}</el-descriptions-item>
  232 + <el-descriptions-item label="更新时间">{{ parseTime(refundDetail.updateTime) }}</el-descriptions-item>
  233 + </el-descriptions>
  234 + <el-divider></el-divider>
  235 + <el-descriptions :column="2" label-class-name="desc-label">
  236 + <el-descriptions-item label="支付渠道">
  237 + {{ refundDetail.channelCodeName }}
  238 + </el-descriptions-item>
  239 + <el-descriptions-item label="支付IP" size="mini">
  240 + {{refundDetail.userIp}}
  241 + </el-descriptions-item>
  242 + <el-descriptions-item label="回调地址">{{ refundDetail.notifyUrl }}</el-descriptions-item>
  243 + <el-descriptions-item label="回调状态">
  244 + <el-tag size="mini" :type="findByRefundStatusGetStyle(refundDetail.notifyStatus)">
  245 + {{ getDictDataLabel(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, refundDetail.notifyStatus) }}
  246 + </el-tag>
  247 + </el-descriptions-item>
  248 + <el-descriptions-item label="回调时间">{{ parseTime(refundDetail.notifyTime) }}</el-descriptions-item>
  249 + </el-descriptions>
  250 + <el-divider></el-divider>
  251 + <el-descriptions :column="2" label-class-name="desc-label">
  252 + <el-descriptions-item label="渠道订单号">{{ refundDetail.channelOrderNo }}</el-descriptions-item>
  253 + <el-descriptions-item label="渠道退款单号">{{ refundDetail.channelRefundNo }}</el-descriptions-item>
  254 + <el-descriptions-item label="渠道错误码">{{refundDetail.channelErrorCode}}</el-descriptions-item>
  255 + <el-descriptions-item label="渠道错误码描述">{{refundDetail.channelErrorMsg}}</el-descriptions-item>
  256 + </el-descriptions>
  257 + <br>
  258 + <el-descriptions :column="1" label-class-name="desc-label" direction="vertical" border>
  259 + <el-descriptions-item label="渠道额外参数">{{ refundDetail.channelExtras }}</el-descriptions-item>
  260 + <el-descriptions-item label="退款原因">{{ refundDetail.reason }}</el-descriptions-item>
  261 + </el-descriptions>
  262 + </el-dialog>
  263 + </div>
  264 +</template>
  265 +
  266 +<script>
  267 +import {getRefundPage, exportRefundExcel, getRefund} from "@/api/pay/refund";
  268 +import {getMerchantListByName} from "@/api/pay/merchant";
  269 +import {getAppListByMerchantId} from "@/api/pay/app";
  270 +import {DICT_TYPE, getDictDatas} from "@/utils/dict";
  271 +import {
  272 + payOrderRefundStatusEnum,
  273 + payRefundStatusEnum
  274 +} from "@/utils/constants";
  275 +import {getNowDateTime} from "@/utils/ruoyi";
  276 +
  277 +const defaultRefundDetail = {
  278 + id: null,
  279 + appId: null,
  280 + appName: '',
  281 + channelCode: '',
  282 + channelCodeName: '',
  283 + channelErrorCode: '',
  284 + channelErrorMsg: '',
  285 + channelExtras: '',
  286 + channelId: null,
  287 + channelOrderNo: '',
  288 + channelRefundNo: '',
  289 + createTime: null,
  290 + expireTime: null,
  291 + merchantId: null,
  292 + merchantName: '',
  293 + merchantOrderId: '',
  294 + merchantRefundNo: '',
  295 + notifyStatus: null,
  296 + notifyTime: null,
  297 + notifyUrl: '',
  298 + orderId: null,
  299 + payAmount: null,
  300 + reason: '',
  301 + refundAmount: null,
  302 + reqNo: '',
  303 + status: null,
  304 + subject: '',
  305 + successTime: null,
  306 + tradeNo: '',
  307 + type: null,
  308 + userIp: ''
  309 +}
  310 +
  311 +export default {
  312 + name: "Refund",
  313 + components: {},
  314 + data() {
  315 + return {
  316 + // 遮罩层
  317 + loading: true,
  318 + // 显示搜索条件
  319 + showSearch: true,
  320 + // 总条数
  321 + total: 0,
  322 + // 退款订单列表
  323 + list: [],
  324 + // 弹出层标题
  325 + title: "",
  326 + // 是否显示弹出层
  327 + open: false,
  328 + dateRangeExpireTime: [],
  329 + dateRangeSuccessTime: [],
  330 + dateRangeNotifyTime: [],
  331 + dateRangeCreateTime: [],
  332 + // 查询参数
  333 + queryParams: {
  334 + pageNo: 1,
  335 + pageSize: 10,
  336 + reqNo: null,
  337 + merchantId: null,
  338 + appId: null,
  339 + channelId: null,
  340 + channelCode: null,
  341 + orderId: null,
  342 + tradeNo: null,
  343 + merchantOrderId: null,
  344 + merchantRefundNo: null,
  345 + notifyUrl: null,
  346 + notifyStatus: null,
  347 + status: null,
  348 + type: null,
  349 + payAmount: null,
  350 + refundAmount: null,
  351 + reason: null,
  352 + userIp: null,
  353 + channelOrderNo: null,
  354 + channelRefundNo: null,
  355 + channelErrorCode: null,
  356 + channelErrorMsg: null,
  357 + channelExtras: null,
  358 + },
  359 + // 商户加载遮罩层
  360 + merchantLoading: false,
  361 + // 商户列表集合
  362 + merchantList: null,
  363 + // 支付应用列表集合
  364 + appList: null,
  365 + // 支付渠道编码字典数据集合
  366 + payChannelCodeDictDatum: getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE_TYPE),
  367 + // 订单退款状态字典数据集合
  368 + payRefundOrderDictDatum: getDictDatas(DICT_TYPE.PAY_REFUND_ORDER_STATUS),
  369 + // 退款订单类别字典数据集合
  370 + payRefundOrderTypeDictDatum: getDictDatas(DICT_TYPE.PAY_REFUND_ORDER_TYPE),
  371 + // 订单回调商户状态字典数据集合
  372 + payOrderNotifyDictDatum: getDictDatas(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS),
  373 + // el-tag订单退款状态type值
  374 + refundStatusType: '',
  375 + // 退款订单详情
  376 + refundDetail: JSON.parse(JSON.stringify(defaultRefundDetail)),
  377 + };
  378 + },
  379 + created() {
  380 + this.initTime();
  381 + this.getList();
  382 + this.handleGetMerchantListByName(null);
  383 + },
  384 + methods: {
  385 + initTime(){
  386 + this.dateRangeCreateTime = [getNowDateTime("00:00:00"), getNowDateTime("23:59:59")];
  387 + },
  388 + /** 查询列表 */
  389 + getList() {
  390 + // 判断选择的日期是否超过了一个月
  391 + let oneMonthTime = 31 * 24 * 3600 * 1000;
  392 + if (this.dateRangeCreateTime == null){
  393 + this.initTime();
  394 + } else {
  395 + let minDateTime = new Date(this.dateRangeCreateTime[0]).getTime();
  396 + let maxDateTime = new Date(this.dateRangeCreateTime[1]).getTime()
  397 + if (maxDateTime - minDateTime > oneMonthTime) {
  398 + this.$message.error('时间范围最大为 31 天!');
  399 + return false;
  400 + }
  401 + }
  402 + this.loading = true;
  403 + // 处理查询参数
  404 + let params = {...this.queryParams};
  405 + this.addBeginAndEndTime(params, this.dateRangeExpireTime, 'expireTime');
  406 + this.addBeginAndEndTime(params, this.dateRangeSuccessTime, 'successTime');
  407 + this.addBeginAndEndTime(params, this.dateRangeNotifyTime, 'notifyTime');
  408 + this.addDateRange(params, this.dateRangeCreateTime, 'CreateTime');
  409 + // 执行查询
  410 + getRefundPage(params).then(response => {
  411 + this.list = response.data.list;
  412 + this.total = response.data.total;
  413 + this.loading = false;
  414 + });
  415 + },
  416 + /** 取消按钮 */
  417 + cancel() {
  418 + this.open = false;
  419 + },
  420 + /** 搜索按钮操作 */
  421 + handleQuery() {
  422 + this.queryParams.pageNo = 1;
  423 + this.getList();
  424 + },
  425 + /** 重置按钮操作 */
  426 + resetQuery() {
  427 + this.dateRangeExpireTime = [];
  428 + this.dateRangeSuccessTime = [];
  429 + this.dateRangeNotifyTime = [];
  430 + this.dateRangeCreateTime = [];
  431 + this.resetForm("queryForm");
  432 + this.handleQuery();
  433 + },
  434 + /** 导出按钮操作 */
  435 + handleExport() {
  436 + // 处理查询参数
  437 + let params = {...this.queryParams};
  438 + params.pageNo = undefined;
  439 + params.pageSize = undefined;
  440 + this.addBeginAndEndTime(params, this.dateRangeExpireTime, 'expireTime');
  441 + this.addBeginAndEndTime(params, this.dateRangeSuccessTime, 'successTime');
  442 + this.addBeginAndEndTime(params, this.dateRangeNotifyTime, 'notifyTime');
  443 + this.addDateRange(params, this.dateRangeCreateTime, 'CreateTime');
  444 + // 执行导出
  445 + this.$confirm('是否确认导出所有退款订单数据项?', "警告", {
  446 + confirmButtonText: "确定",
  447 + cancelButtonText: "取消",
  448 + type: "warning"
  449 + }).then(function () {
  450 + return exportRefundExcel(params);
  451 + }).then(response => {
  452 + this.downloadExcel(response, '退款订单.xls');
  453 + })
  454 + },
  455 + /**
  456 + * 根据商户名称模糊匹配商户信息
  457 + * @param name 商户名称
  458 + */
  459 + handleGetMerchantListByName(name) {
  460 + getMerchantListByName(name).then(response => {
  461 + this.merchantList = response.data;
  462 + this.merchantLoading = false;
  463 + });
  464 + },
  465 + /**
  466 + * 根据商户 ID 查询支付应用信息
  467 + */
  468 + handleGetAppListByMerchantId() {
  469 + this.queryParams.appId = null;
  470 + getAppListByMerchantId(this.queryParams.merchantId).then(response => {
  471 + this.appList = response.data;
  472 + });
  473 + },
  474 + /**
  475 + * 根据退款类别得到样式名称
  476 + * @param refundType 退款类别
  477 + */
  478 + findByRefundTypeGetStyle(refundType) {
  479 + switch (refundType) {
  480 + case payOrderRefundStatusEnum.NO.status:
  481 + return "success";
  482 + case payOrderRefundStatusEnum.SOME.status:
  483 + return "warning";
  484 + case payOrderRefundStatusEnum.ALL.status:
  485 + return "danger";
  486 + }
  487 + },
  488 + /**
  489 + * 根据退款状态得到样式名称
  490 + * @param refundStatus 退款状态
  491 + */
  492 + findByRefundStatusGetStyle(refundStatus) {
  493 + switch (refundStatus) {
  494 + case payRefundStatusEnum.CREATE.status:
  495 + return "info";
  496 + case payRefundStatusEnum.SUCCESS.status:
  497 + return "success";
  498 + case payRefundStatusEnum.FAILURE.status:
  499 + case payRefundStatusEnum.CLOSE.status:
  500 + return "danger";
  501 + case payRefundStatusEnum.PROCESSING_NOTIFY.status:
  502 + case payRefundStatusEnum.PROCESSING_QUERY.status:
  503 + case payRefundStatusEnum.UNKNOWN_RETRY.status:
  504 + case payRefundStatusEnum.UNKNOWN_QUERY.status:
  505 + return "warning";
  506 + }
  507 + },
  508 + /**
  509 + * 查看订单详情
  510 + */
  511 + handleQueryDetails(row) {
  512 + this.refundDetail = JSON.parse(JSON.stringify(defaultRefundDetail));
  513 + getRefund(row.id).then(response => {
  514 + this.refundDetail = response.data;
  515 + this.open = true;
  516 + });
  517 +
  518 + },
  519 + }
  520 +};
  521 +</script>
  522 +<style>
  523 +.desc-label {
  524 + font-weight: bold;
  525 +
  526 +}
  527 +
  528 +.tag-purple {
  529 + color: #722ed1;
  530 + background: #f9f0ff;
  531 + border-color: #d3adf7;
  532 +}
  533 +
  534 +.tag-cyan {
  535 + color: #13c2c2;
  536 + background: #e6fffb;
  537 + border-color: #87e8de;
  538 +}
  539 +
  540 +.tag-pink {
  541 + color: #eb2f96;
  542 + background: #fff0f6;
  543 + border-color: #ffadd2;
  544 +}
  545 +
  546 +.order-font {
  547 + font-size: 12px;
  548 + padding: 2px 0;
  549 +}
  550 +</style>
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundMapper.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java
@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper; @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
10 * 10 *
11 */ 11 */
12 @Mapper 12 @Mapper
13 -public interface PayRefundMapper extends BaseMapperX<PayRefundDO> { 13 +public interface PayRefundCoreMapper extends BaseMapperX<PayRefundDO> {
14 14
15 default PayRefundDO selectByReqNo(String reqNo) { 15 default PayRefundDO selectByReqNo(String reqNo) {
16 return selectOne("req_no", reqNo); 16 return selectOne("req_no", reqNo);
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; @@ -8,7 +8,7 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
8 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 8 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
9 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyLogCoreMapper; 9 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyLogCoreMapper;
10 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyTaskCoreMapper; 10 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyTaskCoreMapper;
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 11 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
12 import cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify.PayNotifyLockCoreRedisDAO; 12 import cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify.PayNotifyLockCoreRedisDAO;
13 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; 13 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
14 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; 14 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
@@ -75,7 +75,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -75,7 +75,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
75 private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO; 75 private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO;
76 76
77 @Resource 77 @Resource
78 - private PayRefundMapper payRefundMapper; 78 + private PayRefundCoreMapper payRefundCoreMapper;
79 79
80 @Resource 80 @Resource
81 @Lazy // 循环依赖(自己依赖自己),避免报错 81 @Lazy // 循环依赖(自己依赖自己),避免报错
@@ -94,7 +94,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -94,7 +94,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
94 setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl()); 94 setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl());
95 } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) { 95 } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) {
96 // TODO 芋艿,需要实现下哈 96 // TODO 芋艿,需要实现下哈
97 - PayRefundDO refundDO = payRefundMapper.selectById(task.getDataId()); 97 + PayRefundDO refundDO = payRefundCoreMapper.selectById(task.getDataId());
98 task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId()) 98 task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId())
99 .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl()); 99 .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl());
100 } 100 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundAbstractChannelPostHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 7
8 /** 8 /**
9 * 支付退款订单渠道返回后 , 后置处理抽象类, 处理公用的逻辑 9 * 支付退款订单渠道返回后 , 后置处理抽象类, 处理公用的逻辑
@@ -12,10 +12,10 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; @@ -12,10 +12,10 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper;
12 public abstract class PayRefundAbstractChannelPostHandler implements PayRefundChannelPostHandler { 12 public abstract class PayRefundAbstractChannelPostHandler implements PayRefundChannelPostHandler {
13 13
14 private final PayOrderCoreMapper payOrderCoreMapper; 14 private final PayOrderCoreMapper payOrderCoreMapper;
15 - private final PayRefundMapper payRefundMapper; 15 + private final PayRefundCoreMapper payRefundMapper;
16 16
17 public PayRefundAbstractChannelPostHandler(PayOrderCoreMapper payOrderCoreMapper, 17 public PayRefundAbstractChannelPostHandler(PayOrderCoreMapper payOrderCoreMapper,
18 - PayRefundMapper payRefundMapper){ 18 + PayRefundCoreMapper payRefundMapper){
19 this.payOrderCoreMapper = payOrderCoreMapper; 19 this.payOrderCoreMapper = payOrderCoreMapper;
20 this.payRefundMapper = payRefundMapper; 20 this.payRefundMapper = payRefundMapper;
21 } 21 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundChannelFailedHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; 7 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
8 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; 8 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
9 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; 9 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
@@ -27,7 +27,7 @@ public class PayRefundChannelFailedHandler extends PayRefundAbstractChannelPostH @@ -27,7 +27,7 @@ public class PayRefundChannelFailedHandler extends PayRefundAbstractChannelPostH
27 @Resource 27 @Resource
28 private PayNotifyCoreService payNotifyCoreService; 28 private PayNotifyCoreService payNotifyCoreService;
29 29
30 - public PayRefundChannelFailedHandler(PayOrderCoreMapper payOrderCoreMapper, PayRefundMapper payRefundMapper) { 30 + public PayRefundChannelFailedHandler(PayOrderCoreMapper payOrderCoreMapper, PayRefundCoreMapper payRefundMapper) {
31 super(payOrderCoreMapper, payRefundMapper); 31 super(payOrderCoreMapper, payRefundMapper);
32 } 32 }
33 33
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundChannelNotifyHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; 7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler; 8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler;
9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO; 9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO;
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service; @@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
18 public class PayRefundChannelNotifyHandler extends PayRefundAbstractChannelPostHandler { 18 public class PayRefundChannelNotifyHandler extends PayRefundAbstractChannelPostHandler {
19 19
20 public PayRefundChannelNotifyHandler(PayOrderCoreMapper payOrderCoreMapper, 20 public PayRefundChannelNotifyHandler(PayOrderCoreMapper payOrderCoreMapper,
21 - PayRefundMapper payRefundMapper) { 21 + PayRefundCoreMapper payRefundMapper) {
22 super(payOrderCoreMapper, payRefundMapper); 22 super(payOrderCoreMapper, payRefundMapper);
23 } 23 }
24 24
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundChannelQueryHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; 7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler; 8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler;
9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO; 9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO;
@@ -22,7 +22,7 @@ public class PayRefundChannelQueryHandler extends PayRefundAbstractChannelPostHa @@ -22,7 +22,7 @@ public class PayRefundChannelQueryHandler extends PayRefundAbstractChannelPostHa
22 22
23 23
24 public PayRefundChannelQueryHandler(PayOrderCoreMapper payOrderCoreMapper, 24 public PayRefundChannelQueryHandler(PayOrderCoreMapper payOrderCoreMapper,
25 - PayRefundMapper payRefundMapper) { 25 + PayRefundCoreMapper payRefundMapper) {
26 super(payOrderCoreMapper, payRefundMapper); 26 super(payOrderCoreMapper, payRefundMapper);
27 } 27 }
28 28
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundChannelRetryHandler.java
@@ -3,15 +3,13 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; @@ -3,15 +3,13 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; 7 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler; 8 import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundAbstractChannelPostHandler;
9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO; 9 import cn.iocoder.yudao.coreservice.modules.pay.service.order.bo.PayRefundPostReqBO;
10 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelRespEnum; 10 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelRespEnum;
11 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
12 12
13 -import java.util.Optional;  
14 -  
15 /** 13 /**
16 * 支付退款订单渠道返回重试的后置处理类 14 * 支付退款订单渠道返回重试的后置处理类
17 * {@link PayChannelRespEnum#RETRY_FAILURE} 15 * {@link PayChannelRespEnum#RETRY_FAILURE}
@@ -21,7 +19,7 @@ public class PayRefundChannelRetryHandler extends PayRefundAbstractChannelPostHa @@ -21,7 +19,7 @@ public class PayRefundChannelRetryHandler extends PayRefundAbstractChannelPostHa
21 19
22 20
23 public PayRefundChannelRetryHandler(PayOrderCoreMapper payOrderCoreMapper, 21 public PayRefundChannelRetryHandler(PayOrderCoreMapper payOrderCoreMapper,
24 - PayRefundMapper payRefundMapper) { 22 + PayRefundCoreMapper payRefundMapper) {
25 super(payOrderCoreMapper, payRefundMapper); 23 super(payOrderCoreMapper, payRefundMapper);
26 } 24 }
27 25
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundChannelSuccessHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 4 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 5 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 6 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
7 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; 7 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
8 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; 8 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
9 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; 9 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
@@ -28,7 +28,7 @@ public class PayRefundChannelSuccessHandler extends PayRefundAbstractChannelPost @@ -28,7 +28,7 @@ public class PayRefundChannelSuccessHandler extends PayRefundAbstractChannelPost
28 28
29 29
30 public PayRefundChannelSuccessHandler(PayOrderCoreMapper payOrderCoreMapper, 30 public PayRefundChannelSuccessHandler(PayOrderCoreMapper payOrderCoreMapper,
31 - PayRefundMapper payRefundMapper) { 31 + PayRefundCoreMapper payRefundMapper) {
32 super(payOrderCoreMapper, payRefundMapper); 32 super(payOrderCoreMapper, payRefundMapper);
33 } 33 }
34 34
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExt @@ -9,7 +9,7 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExt
9 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 9 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
10 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper; 10 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
11 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper; 11 import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper;
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundMapper; 12 +import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;
13 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; 13 import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
14 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; 14 import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;
15 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService; 15 import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
@@ -52,7 +52,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { @@ -52,7 +52,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService {
52 private PayOrderCoreMapper payOrderCoreMapper; 52 private PayOrderCoreMapper payOrderCoreMapper;
53 53
54 @Resource 54 @Resource
55 - private PayRefundMapper payRefundMapper; 55 + private PayRefundCoreMapper payRefundCoreMapper;
56 56
57 @Resource 57 @Resource
58 private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper; 58 private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper;
@@ -145,7 +145,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { @@ -145,7 +145,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService {
145 .type(refundType.getStatus()) 145 .type(refundType.getStatus())
146 .build(); 146 .build();
147 147
148 - payRefundMapper.insert(refundDO); 148 + payRefundCoreMapper.insert(refundDO);
149 149
150 PayRefundUnifiedReqDTO unifiedReqDTO = PayRefundUnifiedReqDTO.builder() 150 PayRefundUnifiedReqDTO unifiedReqDTO = PayRefundUnifiedReqDTO.builder()
151 .userIp(reqBO.getUserIp()) 151 .userIp(reqBO.getUserIp())
@@ -197,7 +197,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { @@ -197,7 +197,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService {
197 197
198 if(Objects.equals(PayNotifyRefundStatusEnum.SUCCESS,refundNotify.getStatus())){ 198 if(Objects.equals(PayNotifyRefundStatusEnum.SUCCESS,refundNotify.getStatus())){
199 //退款成功。 支付宝只有退款成功才会发通知 199 //退款成功。 支付宝只有退款成功才会发通知
200 - PayRefundDO refundDO = payRefundMapper.selectByReqNo(refundNotify.getReqNo()); 200 + PayRefundDO refundDO = payRefundCoreMapper.selectByReqNo(refundNotify.getReqNo());
201 if (refundDO == null) { 201 if (refundDO == null) {
202 log.error("不存在 seqNo 为{} 的支付退款单",refundNotify.getReqNo()); 202 log.error("不存在 seqNo 为{} 的支付退款单",refundNotify.getReqNo());
203 throw exception(PAY_REFUND_NOT_FOUND); 203 throw exception(PAY_REFUND_NOT_FOUND);
@@ -227,7 +227,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService { @@ -227,7 +227,7 @@ public class PayRefundCoreServiceImpl implements PayRefundCoreService {
227 .setTradeNo(refundNotify.getTradeNo()) 227 .setTradeNo(refundNotify.getTradeNo())
228 .setNotifyTime(new Date()) 228 .setNotifyTime(new Date())
229 .setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); 229 .setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
230 - payRefundMapper.updateById(updateRefundDO); 230 + payRefundCoreMapper.updateById(updateRefundDO);
231 231
232 //插入退款通知记录 232 //插入退款通知记录
233 // TODO 通知商户成功或者失败. 现在通知似乎没有实现, 只是回调 233 // TODO 通知商户成功或者失败. 现在通知似乎没有实现, 只是回调