mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	1、完成代付订单后台模块
2、将pay模块的 PayRefundMapper 更名为 PayRefundCoreMapper 避免冲突 3、将支付订单 UI 界面进行调整优化
This commit is contained in:
		| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.order; | ||||
|  | ||||
| import cn.hutool.core.collection.CollectionUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.*; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.*; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; | ||||
| @@ -33,7 +33,6 @@ import javax.servlet.http.HttpServletResponse; | ||||
| import javax.validation.Valid; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| @@ -102,15 +101,6 @@ public class PayOrderController { | ||||
|         return success(respVO); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/list") | ||||
|     @ApiOperation("获得支付订单列表") | ||||
|     @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | ||||
|     @PreAuthorize("@ss.hasPermission('pay:order:query')") | ||||
|     public CommonResult<List<PayOrderRespVO>> getOrderList(@RequestParam("ids") Collection<Long> ids) { | ||||
|         List<PayOrderDO> list = orderService.getOrderList(ids); | ||||
|         return success(PayOrderConvert.INSTANCE.convertList(list)); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/page") | ||||
|     @ApiOperation("获得支付订单分页") | ||||
|     @PreAuthorize("@ss.hasPermission('pay:order:query')") | ||||
|   | ||||
| @@ -0,0 +1,174 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order; | ||||
|  | ||||
| import cn.hutool.core.collection.CollectionUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.convert.refund.PayRefundConvert; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||||
| import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||||
| import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||||
| import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RequestParam; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import javax.validation.Valid; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||
| import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Controller 组件 | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Api(tags = "退款订单") | ||||
| @RestController | ||||
| @RequestMapping("/pay/refund") | ||||
| @Validated | ||||
| public class PayRefundController { | ||||
|  | ||||
|     @Resource | ||||
|     private PayRefundService refundService; | ||||
|  | ||||
|     /** | ||||
|      * 商户 service 组件 | ||||
|      */ | ||||
|     @Resource | ||||
|     private PayMerchantService merchantService; | ||||
|  | ||||
|     /** | ||||
|      * 应用 service 组件 | ||||
|      */ | ||||
|     @Resource | ||||
|     private PayAppService appService; | ||||
|  | ||||
|     /** | ||||
|      * 订单 service 组件 | ||||
|      */ | ||||
|     @Resource | ||||
|     private PayOrderService orderService; | ||||
|  | ||||
|  | ||||
|     @GetMapping("/get") | ||||
|     @ApiOperation("获得退款订单") | ||||
|     @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | ||||
|     @PreAuthorize("@ss.hasPermission('pay:refund:query')") | ||||
|     public CommonResult<PayRefundDetailsRespVO> getRefund(@RequestParam("id") Long id) { | ||||
|         PayRefundDO refund = refundService.getRefund(id); | ||||
|         if (ObjectUtil.isNull(refund)) { | ||||
|             return success(new PayRefundDetailsRespVO()); | ||||
|         } | ||||
|  | ||||
|         PayMerchantDO merchantDO = merchantService.getMerchant(refund.getMerchantId()); | ||||
|         PayAppDO appDO = appService.getApp(refund.getAppId()); | ||||
|         PayChannelEnum channelEnum = PayChannelEnum.getByCode(refund.getChannelCode()); | ||||
|         PayOrderDO orderDO = orderService.getOrder(refund.getOrderId()); | ||||
|  | ||||
|         PayRefundDetailsRespVO refundDetail = PayRefundConvert.INSTANCE.refundDetailConvert(refund); | ||||
|         refundDetail.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户"); | ||||
|         refundDetail.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用"); | ||||
|         refundDetail.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道"); | ||||
|         refundDetail.setSubject(orderDO.getSubject()); | ||||
|  | ||||
|         return success(refundDetail); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/page") | ||||
|     @ApiOperation("获得退款订单分页") | ||||
|     @PreAuthorize("@ss.hasPermission('pay:refund:query')") | ||||
|     public CommonResult<PageResult<PayRefundPageItemRespVO>> getRefundPage(@Valid PayRefundPageReqVO pageVO) { | ||||
|         PageResult<PayRefundDO> pageResult = refundService.getRefundPage(pageVO); | ||||
|         if (CollectionUtil.isEmpty(pageResult.getList())) { | ||||
|             return success(new PageResult<>(pageResult.getTotal())); | ||||
|         } | ||||
|  | ||||
|         // 处理商户ID数据 | ||||
|         Map<Long, PayMerchantDO> merchantMap = merchantService.getMerchantMap( | ||||
|                 CollectionUtils.convertList(pageResult.getList(), PayRefundDO::getMerchantId)); | ||||
|         // 处理应用ID数据 | ||||
|         Map<Long, PayAppDO> appMap = appService.getAppMap( | ||||
|                 CollectionUtils.convertList(pageResult.getList(), PayRefundDO::getAppId)); | ||||
|         List<PayRefundPageItemRespVO> list = new ArrayList<>(pageResult.getList().size()); | ||||
|         pageResult.getList().forEach(c -> { | ||||
|             PayMerchantDO merchantDO = merchantMap.get(c.getMerchantId()); | ||||
|             PayAppDO appDO = appMap.get(c.getAppId()); | ||||
|             PayChannelEnum channelEnum = PayChannelEnum.getByCode(c.getChannelCode()); | ||||
|  | ||||
|             PayRefundPageItemRespVO item = PayRefundConvert.INSTANCE.pageItemConvert(c); | ||||
|  | ||||
|             item.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户"); | ||||
|             item.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用"); | ||||
|             item.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道"); | ||||
|             list.add(item); | ||||
|         }); | ||||
|  | ||||
|         return success(new PageResult<>(list, pageResult.getTotal())); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/export-excel") | ||||
|     @ApiOperation("导出退款订单 Excel") | ||||
|     @PreAuthorize("@ss.hasPermission('pay:refund:export')") | ||||
|     @OperateLog(type = EXPORT) | ||||
|     public void exportRefundExcel(@Valid PayRefundExportReqVO exportReqVO, | ||||
|             HttpServletResponse response) throws IOException { | ||||
|  | ||||
|         List<PayRefundDO> list = refundService.getRefundList(exportReqVO); | ||||
|         if (CollectionUtil.isEmpty(list)) { | ||||
|             ExcelUtils.write(response, "退款订单.xls", "数据", | ||||
|                     PayRefundExcelVO.class, new ArrayList<>()); | ||||
|         } | ||||
|  | ||||
|         // 处理商户ID数据 | ||||
|         Map<Long, PayMerchantDO> merchantMap = merchantService.getMerchantMap( | ||||
|                 CollectionUtils.convertList(list, PayRefundDO::getMerchantId)); | ||||
|         // 处理应用ID数据 | ||||
|         Map<Long, PayAppDO> appMap = appService.getAppMap( | ||||
|                 CollectionUtils.convertList(list, PayRefundDO::getAppId)); | ||||
|  | ||||
|         List<PayRefundExcelVO> excelDatum = new ArrayList<>(list.size()); | ||||
|         // 处理商品名称数据 | ||||
|         Map<Long, PayOrderDO> orderMap = orderService.getOrderSubjectMap( | ||||
|                 CollectionUtils.convertList(list, PayRefundDO::getOrderId)); | ||||
|  | ||||
|         list.forEach(c -> { | ||||
|             PayMerchantDO merchantDO = merchantMap.get(c.getMerchantId()); | ||||
|             PayAppDO appDO = appMap.get(c.getAppId()); | ||||
|             PayChannelEnum channelEnum = PayChannelEnum.getByCode(c.getChannelCode()); | ||||
|  | ||||
|             PayRefundExcelVO excelItem = PayRefundConvert.INSTANCE.excelConvert(c); | ||||
|             excelItem.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户"); | ||||
|             excelItem.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用"); | ||||
|             excelItem.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道"); | ||||
|             excelItem.setSubject(orderMap.get(c.getOrderId()).getSubject()); | ||||
|  | ||||
|             excelDatum.add(excelItem); | ||||
|         }); | ||||
|  | ||||
|         // 导出 Excel | ||||
|         ExcelUtils.write(response, "退款订单.xls", "数据", PayRefundExcelVO.class, excelDatum); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; | ||||
| import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo; | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| @@ -0,0 +1,114 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import javax.validation.constraints.NotNull; | ||||
| import java.util.Date; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
|  | ||||
| /** | ||||
| * 退款订单 Base VO,提供给添加、修改、详细的子 VO 使用 | ||||
| * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||
| */ | ||||
| @Data | ||||
| public class PayRefundBaseVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "退款单请求号", required = true) | ||||
|     @NotNull(message = "退款单请求号不能为空") | ||||
|     private String reqNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户编号", required = true) | ||||
|     @NotNull(message = "商户编号不能为空") | ||||
|     private Long merchantId; | ||||
|  | ||||
|     @ApiModelProperty(value = "应用编号", required = true) | ||||
|     @NotNull(message = "应用编号不能为空") | ||||
|     private Long appId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编号", required = true) | ||||
|     @NotNull(message = "渠道编号不能为空") | ||||
|     private Long channelId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编码", required = true) | ||||
|     @NotNull(message = "渠道编码不能为空") | ||||
|     private String channelCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付订单编号 pay_order 表id", required = true) | ||||
|     @NotNull(message = "支付订单编号 pay_order 表id不能为空") | ||||
|     private Long orderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段", required = true) | ||||
|     @NotNull(message = "交易订单号 pay_extension 表no 字段不能为空") | ||||
|     private String tradeNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户订单编号(商户系统生成)", required = true) | ||||
|     @NotNull(message = "商户订单编号(商户系统生成)不能为空") | ||||
|     private String merchantOrderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户退款订单号(商户系统生成)", required = true) | ||||
|     @NotNull(message = "商户退款订单号(商户系统生成)不能为空") | ||||
|     private String merchantRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "异步通知商户地址", required = true) | ||||
|     @NotNull(message = "异步通知商户地址不能为空") | ||||
|     private String notifyUrl; | ||||
|  | ||||
|     @ApiModelProperty(value = "通知商户退款结果的回调状态", required = true) | ||||
|     @NotNull(message = "通知商户退款结果的回调状态不能为空") | ||||
|     private Integer notifyStatus; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款状态", required = true) | ||||
|     @NotNull(message = "退款状态不能为空") | ||||
|     private Integer status; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款类型(部分退款,全部退款)", required = true) | ||||
|     @NotNull(message = "退款类型(部分退款,全部退款)不能为空") | ||||
|     private Integer type; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付金额,单位分", required = true) | ||||
|     @NotNull(message = "支付金额,单位分不能为空") | ||||
|     private Long payAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款金额,单位分", required = true) | ||||
|     @NotNull(message = "退款金额,单位分不能为空") | ||||
|     private Long refundAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款原因", required = true) | ||||
|     @NotNull(message = "退款原因不能为空") | ||||
|     private String reason; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户 IP") | ||||
|     private String userIp; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应", required = true) | ||||
|     @NotNull(message = "渠道订单号,pay_order 中的channel_order_no 对应不能为空") | ||||
|     private String channelOrderNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道退款单号,渠道返回") | ||||
|     private String channelRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误码") | ||||
|     private String channelErrorCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误信息") | ||||
|     private String channelErrorMsg; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付渠道的额外参数") | ||||
|     private String channelExtras; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款失效时间") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private Date expireTime; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款成功时间") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private Date successTime; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款通知时间") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private Date notifyTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,12 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import lombok.*; | ||||
| import io.swagger.annotations.*; | ||||
|  | ||||
| @ApiModel("退款订单创建 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundCreateReqVO extends PayRefundBaseVO { | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
|  | ||||
| import javax.validation.constraints.NotNull; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 退款订单详情 Response VO | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @ApiModel("退款订单详情 Response VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundDetailsRespVO extends PayRefundBaseVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "支付退款编号", required = true) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户名称") | ||||
|     private String merchantName; | ||||
|  | ||||
|     @ApiModelProperty(value = "应用名称") | ||||
|     private String appName; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编号名称") | ||||
|     private String channelCodeName; | ||||
|  | ||||
|     @NotNull(message = "商品标题不能为空") | ||||
|     private String subject; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     private Date createTime; | ||||
|  | ||||
|     @ApiModelProperty(value = "更新时间") | ||||
|     private Date updateTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,91 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.system.enums.SysDictTypeConstants; | ||||
| import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||||
| import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Excel VO | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Data | ||||
| public class PayRefundExcelVO { | ||||
|  | ||||
|     @ExcelProperty("支付退款编号") | ||||
|     private Long id; | ||||
|  | ||||
|     @ExcelProperty("商品名称") | ||||
|     private String subject; | ||||
|  | ||||
|     @ExcelProperty("退款单请求号") | ||||
|     private String reqNo; | ||||
|  | ||||
|     @ExcelProperty(value = "商户名称") | ||||
|     private String merchantName; | ||||
|  | ||||
|     @ExcelProperty(value = "应用名称") | ||||
|     private String appName; | ||||
|  | ||||
|     @ExcelProperty(value = "渠道编号名称") | ||||
|     private String channelCodeName; | ||||
|  | ||||
|     @ExcelProperty("交易订单号") | ||||
|     private String tradeNo; | ||||
|  | ||||
|     @ExcelProperty("商户订单编号") | ||||
|     private String merchantOrderId; | ||||
|  | ||||
|     @ExcelProperty("商户退款订单号") | ||||
|     private String merchantRefundNo; | ||||
|  | ||||
|     @ExcelProperty("异步通知商户地址") | ||||
|     private String notifyUrl; | ||||
|  | ||||
|     @DictFormat(SysDictTypeConstants.PAY_ORDER_NOTIFY_STATUS) | ||||
|     @ExcelProperty(value = "商户退款结果回调状态", converter = DictConvert.class) | ||||
|     private Integer notifyStatus; | ||||
|  | ||||
|     @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_STATUS) | ||||
|     @ExcelProperty(value = "退款状态", converter = DictConvert.class) | ||||
|     private Integer status; | ||||
|  | ||||
|     @DictFormat(SysDictTypeConstants.PAY_REFUND_ORDER_TYPE) | ||||
|     @ExcelProperty(value = "退款类型", converter = DictConvert.class) | ||||
|     private Integer type; | ||||
|  | ||||
|     @ExcelProperty("支付金额,单位:元") | ||||
|     private String payAmount; | ||||
|  | ||||
|     @ExcelProperty("退款金额,单位:元") | ||||
|     private String refundAmount; | ||||
|  | ||||
|     @ExcelProperty("退款原因") | ||||
|     private String reason; | ||||
|  | ||||
|     @ExcelProperty("用户付款 IP") | ||||
|     private String userIp; | ||||
|  | ||||
|     @ExcelProperty("渠道订单号") | ||||
|     private String channelOrderNo; | ||||
|  | ||||
|     @ExcelProperty("渠道退款单号") | ||||
|     private String channelRefundNo; | ||||
|  | ||||
|     @ExcelProperty("创建时间") | ||||
|     private Date createTime; | ||||
|  | ||||
|     @ExcelProperty("退款成功时间") | ||||
|     private Date successTime; | ||||
|  | ||||
|     @ExcelProperty("退款通知时间") | ||||
|     private Date notifyTime; | ||||
|  | ||||
|     @ExcelProperty("退款失效时间") | ||||
|     private Date expireTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,114 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
|  | ||||
| @ApiModel(value = "退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的") | ||||
| @Data | ||||
| public class PayRefundExportReqVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "退款单请求号") | ||||
|     private String reqNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户编号") | ||||
|     private Long merchantId; | ||||
|  | ||||
|     @ApiModelProperty(value = "应用编号") | ||||
|     private Long appId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编号") | ||||
|     private Long channelId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编码") | ||||
|     private String channelCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付订单编号 pay_order 表id") | ||||
|     private Long orderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段") | ||||
|     private String tradeNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户订单编号(商户系统生成)") | ||||
|     private String merchantOrderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户退款订单号(商户系统生成)") | ||||
|     private String merchantRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "异步通知商户地址") | ||||
|     private String notifyUrl; | ||||
|  | ||||
|     @ApiModelProperty(value = "通知商户退款结果的回调状态") | ||||
|     private Integer notifyStatus; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款状态") | ||||
|     private Integer status; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款类型(部分退款,全部退款)") | ||||
|     private Integer type; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付金额,单位分") | ||||
|     private Long payAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款金额,单位分") | ||||
|     private Long refundAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款原因") | ||||
|     private String reason; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户 IP") | ||||
|     private String userIp; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应") | ||||
|     private String channelOrderNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道退款单号,渠道返回") | ||||
|     private String channelRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误码") | ||||
|     private String channelErrorCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误信息") | ||||
|     private String channelErrorMsg; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付渠道的额外参数") | ||||
|     private String channelExtras; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款失效时间") | ||||
|     private Date beginExpireTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款失效时间") | ||||
|     private Date endExpireTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款成功时间") | ||||
|     private Date beginSuccessTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款成功时间") | ||||
|     private Date endSuccessTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款通知时间") | ||||
|     private Date beginNotifyTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款通知时间") | ||||
|     private Date endNotifyTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始创建时间") | ||||
|     private Date beginCreateTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束创建时间") | ||||
|     private Date endCreateTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,36 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 退款订单分页查询 Response VO | ||||
|  * @author aquan | ||||
|  */ | ||||
| @ApiModel("退款订单分页查询 Response VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundPageItemRespVO extends PayRefundBaseVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "支付订单编号", required = true) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户名称") | ||||
|     private String merchantName; | ||||
|  | ||||
|     @ApiModelProperty(value = "应用名称") | ||||
|     private String  appName; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道名称") | ||||
|     private String channelCodeName; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间", required = true) | ||||
|     private Date createTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,119 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
|  | ||||
| @ApiModel("退款订单分页 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundPageReqVO extends PageParam { | ||||
|  | ||||
|     @ApiModelProperty(value = "退款单请求号") | ||||
|     private String reqNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户编号") | ||||
|     private Long merchantId; | ||||
|  | ||||
|     @ApiModelProperty(value = "应用编号") | ||||
|     private Long appId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编号") | ||||
|     private Long channelId; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道编码") | ||||
|     private String channelCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付订单编号 pay_order 表id") | ||||
|     private Long orderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "交易订单号 pay_extension 表no 字段") | ||||
|     private String tradeNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户订单编号(商户系统生成)") | ||||
|     private String merchantOrderId; | ||||
|  | ||||
|     @ApiModelProperty(value = "商户退款订单号(商户系统生成)") | ||||
|     private String merchantRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "异步通知商户地址") | ||||
|     private String notifyUrl; | ||||
|  | ||||
|     @ApiModelProperty(value = "通知商户退款结果的回调状态") | ||||
|     private Integer notifyStatus; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款状态") | ||||
|     private Integer status; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款类型(部分退款,全部退款)") | ||||
|     private Integer type; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付金额,单位分") | ||||
|     private Long payAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款金额,单位分") | ||||
|     private Long refundAmount; | ||||
|  | ||||
|     @ApiModelProperty(value = "退款原因") | ||||
|     private String reason; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户 IP") | ||||
|     private String userIp; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道订单号,pay_order 中的channel_order_no 对应") | ||||
|     private String channelOrderNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道退款单号,渠道返回") | ||||
|     private String channelRefundNo; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误码") | ||||
|     private String channelErrorCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "渠道调用报错时,错误信息") | ||||
|     private String channelErrorMsg; | ||||
|  | ||||
|     @ApiModelProperty(value = "支付渠道的额外参数") | ||||
|     private String channelExtras; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款失效时间") | ||||
|     private Date beginExpireTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款失效时间") | ||||
|     private Date endExpireTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款成功时间") | ||||
|     private Date beginSuccessTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款成功时间") | ||||
|     private Date endSuccessTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始退款通知时间") | ||||
|     private Date beginNotifyTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束退款通知时间") | ||||
|     private Date endNotifyTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "开始创建时间") | ||||
|     private Date beginCreateTime; | ||||
|  | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     @ApiModelProperty(value = "结束创建时间") | ||||
|     private Date endCreateTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| @ApiModel("退款订单 Response VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundRespVO extends PayRefundBaseVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "支付退款编号", required = true) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间", required = true) | ||||
|     private Date createTime; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; | ||||
|  | ||||
| import lombok.*; | ||||
| import io.swagger.annotations.*; | ||||
| import javax.validation.constraints.*; | ||||
|  | ||||
| @ApiModel("退款订单更新 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class PayRefundUpdateReqVO extends PayRefundBaseVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "支付退款编号", required = true) | ||||
|     @NotNull(message = "支付退款编号不能为空") | ||||
|     private Long id; | ||||
|  | ||||
| } | ||||
| @@ -1,6 +1,9 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.convert.order; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.*; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderDetailsRespVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExcelVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageItemRespVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderRespVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|   | ||||
| @@ -0,0 +1,91 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.convert.refund; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
| import java.math.RoundingMode; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Convert | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Mapper | ||||
| public interface PayRefundConvert { | ||||
|  | ||||
|     PayRefundConvert INSTANCE = Mappers.getMapper(PayRefundConvert.class); | ||||
|  | ||||
|     PayRefundDO convert(PayRefundCreateReqVO bean); | ||||
|  | ||||
|     PayRefundDO convert(PayRefundUpdateReqVO bean); | ||||
|  | ||||
|     PayRefundRespVO convert(PayRefundDO bean); | ||||
|  | ||||
|     /** | ||||
|      * 退款订单 DO 转 退款详情订单 VO | ||||
|      * | ||||
|      * @param bean 退款订单 DO | ||||
|      * @return 退款详情订单 VO | ||||
|      */ | ||||
|     PayRefundDetailsRespVO refundDetailConvert(PayRefundDO bean); | ||||
|  | ||||
|     /** | ||||
|      * 退款订单DO 转 分页退款条目VO | ||||
|      * | ||||
|      * @param bean 退款订单DO | ||||
|      * @return 分页退款条目VO | ||||
|      */ | ||||
|     PayRefundPageItemRespVO pageItemConvert(PayRefundDO bean); | ||||
|  | ||||
|     List<PayRefundRespVO> convertList(List<PayRefundDO> list); | ||||
|  | ||||
|     PageResult<PayRefundRespVO> convertPage(PageResult<PayRefundDO> page); | ||||
|  | ||||
|     List<PayRefundExcelVO> convertList02(List<PayRefundDO> list); | ||||
|  | ||||
|     /** | ||||
|      * 退款订单DO 转 导出excel VO | ||||
|      * | ||||
|      * @param bean 退款订单DO | ||||
|      * @return 导出 excel VO | ||||
|      */ | ||||
|     default PayRefundExcelVO excelConvert(PayRefundDO bean) { | ||||
|         if (bean == null) { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         PayRefundExcelVO payRefundExcelVO = new PayRefundExcelVO(); | ||||
|  | ||||
|         payRefundExcelVO.setId(bean.getId()); | ||||
|         payRefundExcelVO.setReqNo(bean.getReqNo()); | ||||
|         payRefundExcelVO.setTradeNo(bean.getTradeNo()); | ||||
|         payRefundExcelVO.setMerchantOrderId(bean.getMerchantOrderId()); | ||||
|         payRefundExcelVO.setMerchantRefundNo(bean.getMerchantRefundNo()); | ||||
|         payRefundExcelVO.setNotifyUrl(bean.getNotifyUrl()); | ||||
|         payRefundExcelVO.setNotifyStatus(bean.getNotifyStatus()); | ||||
|         payRefundExcelVO.setStatus(bean.getStatus()); | ||||
|         payRefundExcelVO.setType(bean.getType()); | ||||
|         payRefundExcelVO.setReason(bean.getReason()); | ||||
|         payRefundExcelVO.setUserIp(bean.getUserIp()); | ||||
|         payRefundExcelVO.setChannelOrderNo(bean.getChannelOrderNo()); | ||||
|         payRefundExcelVO.setChannelRefundNo(bean.getChannelRefundNo()); | ||||
|         payRefundExcelVO.setExpireTime(bean.getExpireTime()); | ||||
|         payRefundExcelVO.setSuccessTime(bean.getSuccessTime()); | ||||
|         payRefundExcelVO.setNotifyTime(bean.getNotifyTime()); | ||||
|         payRefundExcelVO.setCreateTime(bean.getCreateTime()); | ||||
|  | ||||
|         BigDecimal multiple = new BigDecimal(100); | ||||
|         payRefundExcelVO.setPayAmount(BigDecimal.valueOf(bean.getPayAmount()) | ||||
|                 .divide(multiple, 2, RoundingMode.HALF_UP).toString()); | ||||
|         payRefundExcelVO.setRefundAmount(BigDecimal.valueOf(bean.getRefundAmount()) | ||||
|                 .divide(multiple, 2, RoundingMode.HALF_UP).toString()); | ||||
|  | ||||
|         return payRefundExcelVO; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,20 +1,21 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 支付订单 | ||||
|  * Mapper | ||||
|  * 支付订单 Mapper 组件 | ||||
|  * | ||||
|  * @author 芋艿 | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Mapper | ||||
| public interface PayOrderMapper extends BaseMapperX<PayOrderDO> { | ||||
| @@ -49,4 +50,16 @@ public interface PayOrderMapper extends BaseMapperX<PayOrderDO> { | ||||
|                 .orderByDesc("id")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据订单 ID 集合查询订单商品名称 | ||||
|      * | ||||
|      * @param idList 订单 ID 集合 | ||||
|      * @return 只包含商品名称和标题的订单集合对象 | ||||
|      */ | ||||
|     default List<PayOrderDO> findByIdListQueryOrderSubject(Collection<Long> idList) { | ||||
|         return selectList(new LambdaQueryWrapper<PayOrderDO>() | ||||
|                 .select(PayOrderDO::getId, PayOrderDO::getSubject) | ||||
|                 .in(PayOrderDO::getId, idList)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,49 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Mapper | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Mapper | ||||
| public interface PayRefundMapper extends BaseMapperX<PayRefundDO> { | ||||
|  | ||||
|     default PageResult<PayRefundDO> selectPage(PayRefundPageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new QueryWrapperX<PayRefundDO>() | ||||
|                 .likeIfPresent("req_no", reqVO.getReqNo()) | ||||
|                 .eqIfPresent("merchant_id", reqVO.getMerchantId()) | ||||
|                 .eqIfPresent("app_id", reqVO.getAppId()) | ||||
|                 .eqIfPresent("channel_code", reqVO.getChannelCode()) | ||||
|                 .likeIfPresent("merchant_refund_no", reqVO.getMerchantRefundNo()) | ||||
|                 .eqIfPresent("type", reqVO.getType()) | ||||
|                 .eqIfPresent("status", reqVO.getStatus()) | ||||
|                 .eqIfPresent("notify_status", reqVO.getNotifyStatus()) | ||||
|                 .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||||
|                 .orderByDesc("id")); | ||||
|     } | ||||
|  | ||||
|     default List<PayRefundDO> selectList(PayRefundExportReqVO reqVO) { | ||||
|         return selectList(new QueryWrapperX<PayRefundDO>() | ||||
|                 .eqIfPresent("merchant_id", reqVO.getMerchantId()) | ||||
|                 .eqIfPresent("app_id", reqVO.getAppId()) | ||||
|                 .eqIfPresent("channel_code", reqVO.getChannelCode()) | ||||
|                 .likeIfPresent("req_no", reqVO.getReqNo()) | ||||
|                 .likeIfPresent("merchant_refund_no", reqVO.getMerchantRefundNo()) | ||||
|                 .eqIfPresent("type", reqVO.getType()) | ||||
|                 .eqIfPresent("status", reqVO.getStatus()) | ||||
|                 .eqIfPresent("notify_status", reqVO.getNotifyStatus()) | ||||
|                 .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||||
|                 .orderByDesc("id")); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,12 +1,14 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.service.order; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * 支付订单 | ||||
| @@ -24,16 +26,6 @@ public interface PayOrderService { | ||||
|      */ | ||||
|     PayOrderDO getOrder(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 获得支付订单 | ||||
|      * 列表 | ||||
|      * | ||||
|      * @param ids 编号 | ||||
|      * @return 支付订单 | ||||
|      * 列表 | ||||
|      */ | ||||
|     List<PayOrderDO> getOrderList(Collection<Long> ids); | ||||
|  | ||||
|     /** | ||||
|      * 获得支付订单 | ||||
|      * 分页 | ||||
| @@ -54,4 +46,23 @@ public interface PayOrderService { | ||||
|      */ | ||||
|     List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO); | ||||
|  | ||||
|     /** | ||||
|      * 根据 ID 集合获取只包含商品名称的订单集合 | ||||
|      * | ||||
|      * @param idList 订单 ID 集合 | ||||
|      * @return 只包含商品名称的订单集合 | ||||
|      */ | ||||
|     List<PayOrderDO> getOrderSubjectList(Collection<Long> idList); | ||||
|  | ||||
|     /** | ||||
|      * 根据订单 ID 集合获取订单商品名称Map集合 | ||||
|      * | ||||
|      * @param idList 订单 ID 集合 | ||||
|      * @return 订单商品 map 集合 | ||||
|      */ | ||||
|     default Map<Long, PayOrderDO> getOrderSubjectMap(Collection<Long> idList) { | ||||
|         List<PayOrderDO> list = getOrderSubjectList(idList); | ||||
|         return CollectionUtils.convertMap(list, PayOrderDO::getId); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,41 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.service.order; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Service 接口 | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| public interface PayRefundService { | ||||
|  | ||||
|     /** | ||||
|      * 获得退款订单 | ||||
|      * | ||||
|      * @param id 编号 | ||||
|      * @return 退款订单 | ||||
|      */ | ||||
|     PayRefundDO getRefund(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 获得退款订单分页 | ||||
|      * | ||||
|      * @param pageReqVO 分页查询 | ||||
|      * @return 退款订单分页 | ||||
|      */ | ||||
|     PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO); | ||||
|  | ||||
|     /** | ||||
|      * 获得退款订单列表, 用于 Excel 导出 | ||||
|      * | ||||
|      * @param exportReqVO 查询条件 | ||||
|      * @return 退款订单列表 | ||||
|      */ | ||||
|     List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO); | ||||
|  | ||||
| } | ||||
| @@ -1,7 +1,7 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| @@ -30,11 +30,6 @@ public class PayOrderServiceImpl implements PayOrderService { | ||||
|         return orderMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<PayOrderDO> getOrderList(Collection<Long> ids) { | ||||
|         return orderMapper.selectBatchIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) { | ||||
|         return orderMapper.selectPage(pageReqVO); | ||||
| @@ -45,4 +40,15 @@ public class PayOrderServiceImpl implements PayOrderService { | ||||
|         return orderMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据 ID 集合获取只包含商品名称的订单集合 | ||||
|      * | ||||
|      * @param idList 订单 ID 集合 | ||||
|      * @return 只包含商品名称的订单集合 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<PayOrderDO> getOrderSubjectList(Collection<Long> idList) { | ||||
|         return orderMapper.findByIdListQueryOrderSubject(idList); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,42 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 退款订单 Service 实现类 | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Service | ||||
| @Validated | ||||
| public class PayRefundServiceImpl implements PayRefundService { | ||||
|  | ||||
|     @Resource | ||||
|     private PayRefundMapper refundMapper; | ||||
|  | ||||
|     @Override | ||||
|     public PayRefundDO getRefund(Long id) { | ||||
|         return refundMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO) { | ||||
|         return refundMapper.selectPage(pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO) { | ||||
|         return refundMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -37,4 +37,14 @@ public interface SysDictTypeConstants { | ||||
|      */ | ||||
|     String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status"; | ||||
|  | ||||
|     /** | ||||
|      * 支付-退款订单-退款状态 | ||||
|      */ | ||||
|     String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status"; | ||||
|  | ||||
|     /** | ||||
|      * 支付-退款订单-退款类别 | ||||
|      */ | ||||
|     String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type"; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.adminserver.modules.pay.service.order; | ||||
| import cn.hutool.core.date.DateUtil; | ||||
| import cn.hutool.core.util.RandomUtil; | ||||
| import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayOrderServiceImpl; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; | ||||
| @@ -44,7 +44,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest { | ||||
|         return DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomInt(100000, 999999); | ||||
|     } | ||||
|  | ||||
|     @Test // TODO 请修改 null 为需要的值 | ||||
|     @Test | ||||
|     public void testGetOrderPage() { | ||||
|  | ||||
|         String merchantOrderId = generateNo(); | ||||
| @@ -120,7 +120,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest { | ||||
|         // assertEquals(0, dbOrder.getUpdateTime().compareTo(pageResult.getList().get(0).getUpdateTime())); | ||||
|     } | ||||
|  | ||||
|     @Test // TODO 请修改 null 为需要的值 | ||||
|     @Test | ||||
|     public void testGetOrderList() { | ||||
|         // mock 数据 | ||||
|         String merchantOrderId = generateNo(); | ||||
|   | ||||
| @@ -0,0 +1,190 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.pay.service.refund; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayRefundServiceImpl; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum; | ||||
| import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.date.DateUtils; | ||||
| import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | ||||
| import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
|  | ||||
| /** | ||||
|  * {@link PayRefundServiceImpl} 的单元测试类 | ||||
|  * | ||||
|  * @author aquan | ||||
|  */ | ||||
| @Import(PayRefundServiceImpl.class) | ||||
| public class PayRefundServiceTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private PayRefundServiceImpl refundService; | ||||
|  | ||||
|     @Resource | ||||
|     private PayRefundMapper refundMapper; | ||||
|  | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRefundPage() { | ||||
|         // mock 数据 | ||||
|         PayRefundDO dbRefund = randomPojo(PayRefundDO.class, o -> { // 等会查询到 | ||||
|             o.setReqNo("RF0000001"); | ||||
|             o.setMerchantId(1L); | ||||
|             o.setAppId(1L); | ||||
|             o.setChannelId(1L); | ||||
|             o.setChannelCode(PayChannelEnum.WX_PUB.getCode()); | ||||
|             o.setOrderId(1L); | ||||
|             o.setTradeNo("OT0000001"); | ||||
|             o.setMerchantOrderId("MOT0000001"); | ||||
|             o.setMerchantRefundNo("MRF0000001"); | ||||
|             o.setNotifyUrl("https://www.cancanzi.com"); | ||||
|             o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus()); | ||||
|             o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); | ||||
|             o.setType(PayRefundTypeEnum.SOME.getStatus()); | ||||
|             o.setPayAmount(100L); | ||||
|             o.setRefundAmount(500L); | ||||
|             o.setReason("就是想退款了,你有意见吗"); | ||||
|             o.setUserIp("127.0.0.1"); | ||||
|             o.setChannelOrderNo("CH0000001"); | ||||
|             o.setChannelRefundNo("CHR0000001"); | ||||
|             o.setChannelErrorCode(""); | ||||
|             o.setChannelErrorMsg(""); | ||||
|             o.setChannelExtras(""); | ||||
|             o.setExpireTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 30)); | ||||
|             o.setSuccessTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 15)); | ||||
|             o.setNotifyTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 20)); | ||||
|             o.setCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10)); | ||||
|             o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35)); | ||||
|         }); | ||||
|         refundMapper.insert(dbRefund); | ||||
|         // 测试 reqNo 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setReqNo("RF1111112"))); | ||||
|         // 测试 merchantId 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantId(2L))); | ||||
|         // 测试 appId 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setAppId(2L))); | ||||
|         // 测试 channelCode 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setChannelCode(PayChannelEnum.ALIPAY_APP.getCode()))); | ||||
|         // 测试 merchantRefundNo 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantRefundNo("MRF1111112"))); | ||||
|         // 测试 notifyStatus 不匹配 | ||||
|         refundMapper.insert( | ||||
|                 ObjectUtils.clone(dbRefund, o -> o.setNotifyStatus(PayOrderNotifyStatusEnum.FAILURE.getStatus()))); | ||||
|         // 测试 status 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setStatus(PayRefundStatusEnum.CLOSE.getStatus()))); | ||||
|         // 测试 type 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setType(PayRefundTypeEnum.ALL.getStatus()))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> | ||||
|                 o.setCreateTime(DateUtils.buildTime(2022, 1, 1, 10, 10, 10)))); | ||||
|         // 准备参数 | ||||
|         PayRefundPageReqVO reqVO = new PayRefundPageReqVO(); | ||||
|         reqVO.setReqNo("RF0000001"); | ||||
|         reqVO.setMerchantId(1L); | ||||
|         reqVO.setAppId(1L); | ||||
|         reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode()); | ||||
|         reqVO.setMerchantRefundNo("MRF0000001"); | ||||
|         reqVO.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus()); | ||||
|         reqVO.setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); | ||||
|         reqVO.setType(PayRefundTypeEnum.SOME.getStatus()); | ||||
|         reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10)); | ||||
|         reqVO.setEndCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 12)); | ||||
|  | ||||
|  | ||||
|         // 调用 | ||||
|         PageResult<PayRefundDO> pageResult = refundService.getRefundPage(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, pageResult.getTotal()); | ||||
|         assertEquals(1, pageResult.getList().size()); | ||||
|         assertPojoEquals(dbRefund, pageResult.getList().get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRefundList() { | ||||
|         // mock 数据 | ||||
|         PayRefundDO dbRefund = randomPojo(PayRefundDO.class, o -> { // 等会查询到 | ||||
|             o.setReqNo("RF0000001"); | ||||
|             o.setMerchantId(1L); | ||||
|             o.setAppId(1L); | ||||
|             o.setChannelId(1L); | ||||
|             o.setChannelCode(PayChannelEnum.WX_PUB.getCode()); | ||||
|             o.setOrderId(1L); | ||||
|             o.setTradeNo("OT0000001"); | ||||
|             o.setMerchantOrderId("MOT0000001"); | ||||
|             o.setMerchantRefundNo("MRF0000001"); | ||||
|             o.setNotifyUrl("https://www.cancanzi.com"); | ||||
|             o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus()); | ||||
|             o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); | ||||
|             o.setType(PayRefundTypeEnum.SOME.getStatus()); | ||||
|             o.setPayAmount(100L); | ||||
|             o.setRefundAmount(500L); | ||||
|             o.setReason("就是想退款了,你有意见吗"); | ||||
|             o.setUserIp("127.0.0.1"); | ||||
|             o.setChannelOrderNo("CH0000001"); | ||||
|             o.setChannelRefundNo("CHR0000001"); | ||||
|             o.setChannelErrorCode(""); | ||||
|             o.setChannelErrorMsg(""); | ||||
|             o.setChannelExtras(""); | ||||
|             o.setExpireTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 30)); | ||||
|             o.setSuccessTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 15)); | ||||
|             o.setNotifyTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 20)); | ||||
|             o.setCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10)); | ||||
|             o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35)); | ||||
|         }); | ||||
|         refundMapper.insert(dbRefund); | ||||
|         // 测试 reqNo 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setReqNo("RF1111112"))); | ||||
|         // 测试 merchantId 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantId(2L))); | ||||
|         // 测试 appId 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setAppId(2L))); | ||||
|         // 测试 channelCode 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setChannelCode(PayChannelEnum.ALIPAY_APP.getCode()))); | ||||
|         // 测试 merchantRefundNo 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setMerchantRefundNo("MRF1111112"))); | ||||
|         // 测试 notifyStatus 不匹配 | ||||
|         refundMapper.insert( | ||||
|                 ObjectUtils.clone(dbRefund, o -> o.setNotifyStatus(PayOrderNotifyStatusEnum.FAILURE.getStatus()))); | ||||
|         // 测试 status 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setStatus(PayRefundStatusEnum.CLOSE.getStatus()))); | ||||
|         // 测试 type 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> o.setType(PayRefundTypeEnum.ALL.getStatus()))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         refundMapper.insert(ObjectUtils.clone(dbRefund, o -> | ||||
|                 o.setCreateTime(DateUtils.buildTime(2022, 1, 1, 10, 10, 10)))); | ||||
|  | ||||
|         // 准备参数 | ||||
|         PayRefundExportReqVO reqVO = new PayRefundExportReqVO(); | ||||
|         reqVO.setReqNo("RF0000001"); | ||||
|         reqVO.setMerchantId(1L); | ||||
|         reqVO.setAppId(1L); | ||||
|         reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode()); | ||||
|         reqVO.setMerchantRefundNo("MRF0000001"); | ||||
|         reqVO.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus()); | ||||
|         reqVO.setStatus(PayRefundStatusEnum.SUCCESS.getStatus()); | ||||
|         reqVO.setType(PayRefundTypeEnum.SOME.getStatus()); | ||||
|         reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 10)); | ||||
|         reqVO.setEndCreateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 12)); | ||||
|  | ||||
|         // 调用 | ||||
|         List<PayRefundDO> list = refundService.getRefundList(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, list.size()); | ||||
|         assertPojoEquals(dbRefund, list.get(0)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -29,4 +29,5 @@ DELETE FROM "sys_social_user"; | ||||
| DELETE FROM pay_merchant; | ||||
| DELETE FROM pay_app; | ||||
| DELETE FROM pay_channel; | ||||
| delete from pay_order; | ||||
| DELETE FROM pay_order; | ||||
| DELETE FROM pay_refund; | ||||
| @@ -553,12 +553,47 @@ CREATE TABLE `pay_order` | ||||
|     `channel_order_no`     varchar(64)            DEFAULT NULL, | ||||
|     `creator`              varchar(64)            DEFAULT '', | ||||
|     `create_time`          datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||||
|     `updater`              varchar(64)        DEFAULT '' , | ||||
|     `updater`              varchar(64)            DEFAULT '', | ||||
|     `update_time`          datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||||
|     `deleted`              bit(1)         NOT NULL DEFAULT FALSE, | ||||
|     `deleted`              bit(1)        NOT NULL DEFAULT FALSE, | ||||
|     PRIMARY KEY ("id") | ||||
| ) COMMENT = '支付订单'; | ||||
|  | ||||
|  | ||||
|  | ||||
| CREATE TABLE `pay_refund` | ||||
| ( | ||||
|     "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||||
|     `req_no`             varchar(64)   NOT NULL, | ||||
|     `merchant_id`        bigint(20)    NOT NULL, | ||||
|     `app_id`             bigint(20)    NOT NULL, | ||||
|     `channel_id`         bigint(20)    NOT NULL, | ||||
|     `channel_code`       varchar(32)   NOT NULL, | ||||
|     `order_id`           bigint(20)    NOT NULL, | ||||
|     `trade_no`           varchar(64)   NOT NULL, | ||||
|     `merchant_order_id`  varchar(64)   NOT NULL, | ||||
|     `merchant_refund_no` varchar(64)   NOT NULL, | ||||
|     `notify_url`         varchar(1024) NOT NULL, | ||||
|     `notify_status`      tinyint(4)    NOT NULL, | ||||
|     `status`             tinyint(4)    NOT NULL, | ||||
|     `type`               tinyint(4)    NOT NULL, | ||||
|     `pay_amount`         bigint(20)    NOT NULL, | ||||
|     `refund_amount`      bigint(20)    NOT NULL, | ||||
|     `reason`             varchar(256)  NOT NULL, | ||||
|     `user_ip`            varchar(50)   NULL     DEFAULT NULL, | ||||
|     `channel_order_no`   varchar(64)   NOT NULL, | ||||
|     `channel_refund_no`  varchar(64)   NULL     DEFAULT NULL, | ||||
|     `channel_error_code` varchar(128)  NULL     DEFAULT NULL, | ||||
|     `channel_error_msg`  varchar(256)  NULL     DEFAULT NULL, | ||||
|     `channel_extras`     varchar(1024) NULL     DEFAULT NULL, | ||||
|     `expire_time`        datetime(0)   NULL     DEFAULT NULL, | ||||
|     `success_time`       datetime(0)   NULL     DEFAULT NULL, | ||||
|     `notify_time`        datetime(0)   NULL     DEFAULT NULL, | ||||
|     `creator`            varchar(64)   NULL     DEFAULT '', | ||||
|     `create_time`        datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||||
|     `updater`            varchar(64)   NULL     DEFAULT '', | ||||
|     `update_time`        datetime(0)   NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||||
|     `deleted`            bit(1)        NOT NULL DEFAULT FALSE, | ||||
|     PRIMARY KEY ("id") | ||||
| ) COMMENT = '退款订单'; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 chen quan
					chen quan