mall + pay:

1. 将 amount 统一都修改成 price
2. 将 payed 统一改成 payStatus
This commit is contained in:
YunaiV
2023-07-10 17:35:26 +08:00
parent 5d2d52020e
commit 2485a5ebc9
38 changed files with 225 additions and 286 deletions

View File

@ -28,7 +28,7 @@ public class PayDemoOrderRespVO {
private Integer price;
@Schema(description = "是否已支付", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean payed;
private Boolean payStatus;
@Schema(description = "支付订单编号", example = "16863")
private Long payOrderId;

View File

@ -49,17 +49,13 @@ public class PayOrderBaseVO {
@Schema(description = "支付金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "支付金额,单位:分不能为空")
private Long amount;
@Schema(description = "支付金额,单位:分", required = true)
@NotNull(message = "支付金额,单位:分不能为空")
private Long price;
@Schema(description = "渠道手续费,单位:百分比")
private Double channelFeeRate;
@Schema(description = "渠道手续金额,单位:分")
private Long channelFeeAmount;
private Long channelFeePrice;
@Schema(description = "支付状态", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "支付状态不能为空")
@ -95,7 +91,7 @@ public class PayOrderBaseVO {
@Schema(description = "退款总金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "退款总金额,单位:分不能为空")
private Long refundAmount;
private Long refundPrice;
@Schema(description = "渠道用户编号")
private String channelUserId;

View File

@ -35,10 +35,10 @@ public class PayOrderExcelVO {
private String no;
@ExcelProperty("支付金额,单位:元")
private String amount;
private String price;
@ExcelProperty("渠道手续金额,单位:元")
private String channelFeeAmount;
private String channelFeePrice;
@ExcelProperty("渠道手续费,单位:百分比")
private String channelFeeRate;
@ -80,7 +80,7 @@ public class PayOrderExcelVO {
private Integer refundTimes;
@ExcelProperty("退款总金额,单位:元")
private String refundAmount;
private String refundPrice;
@ExcelProperty("商品描述")
private String body;

View File

@ -37,13 +37,13 @@ public class PayOrderExportReqVO {
private Integer notifyStatus;
@Schema(description = "支付金额,单位:分")
private Long amount;
private Long price;
@Schema(description = "渠道手续费,单位:百分比")
private Double channelFeeRate;
@Schema(description = "渠道手续金额,单位:分")
private Long channelFeeAmount;
private Long channelFeePrice;
@Schema(description = "支付状态")
private Integer status;
@ -73,7 +73,7 @@ public class PayOrderExportReqVO {
private Integer refundTimes;
@Schema(description = "退款总金额,单位:分")
private Long refundAmount;
private Long refundPrice;
@Schema(description = "渠道用户编号")
private String channelUserId;

View File

@ -42,13 +42,13 @@ public class PayOrderPageReqVO extends PageParam {
private Integer notifyStatus;
@Schema(description = "支付金额,单位:分")
private Long amount;
private Long price;
@Schema(description = "渠道手续费,单位:百分比")
private Double channelFeeRate;
@Schema(description = "渠道手续金额,单位:分")
private Long channelFeeAmount;
private Long channelFeePrice;
@Schema(description = "支付状态")
private Integer status;
@ -78,7 +78,7 @@ public class PayOrderPageReqVO extends PageParam {
private Integer refundTimes;
@Schema(description = "退款总金额,单位:分")
private Long refundAmount;
private Long refundPrice;
@Schema(description = "渠道用户编号")
private String channelUserId;

View File

@ -53,10 +53,10 @@ public class PayRefundExcelVO {
private Integer type;
@ExcelProperty("支付金额,单位:元")
private String payAmount;
private String payPrice;
@ExcelProperty("退款金额,单位:元")
private String refundAmount;
private String refundPrice;
@ExcelProperty("退款原因")
private String reason;

View File

@ -46,10 +46,10 @@ public class PayRefundExportReqVO {
private Integer type;
@Schema(description = "支付金额,单位分")
private Long payAmount;
private Long payPrice;
@Schema(description = "退款金额,单位分")
private Long refundAmount;
private Long refundPrice;
@Schema(description = "退款原因")
private String reason;

View File

@ -51,10 +51,10 @@ public class PayRefundPageReqVO extends PageParam {
private Integer type;
@Schema(description = "支付金额,单位分")
private Long payAmount;
private Long payPrice;
@Schema(description = "退款金额,单位分")
private Long refundAmount;
private Long refundPrice;
@Schema(description = "退款原因")
private String reason;

View File

@ -27,7 +27,6 @@ public interface PayOrderConvert {
PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class);
@Mapping(source = "amount", target = "price")
PayOrderRespVO convert(PayOrderDO bean);
PayOrderRespDTO convert2(PayOrderDO order);
@ -40,8 +39,6 @@ public interface PayOrderConvert {
PageResult<PayOrderRespVO> convertPage(PageResult<PayOrderDO> page);
List<PayOrderExcelVO> convertList02(List<PayOrderDO> list);
/**
* 订单 DO 转自定义分页对象
*
@ -76,14 +73,14 @@ public interface PayOrderConvert {
BigDecimal multiple = new BigDecimal(100);
payOrderExcelVO.setAmount(BigDecimal.valueOf(bean.getAmount())
payOrderExcelVO.setPrice(BigDecimal.valueOf(bean.getPrice())
.divide(multiple, 2, RoundingMode.HALF_UP).toString());
payOrderExcelVO.setChannelFeeAmount(BigDecimal.valueOf(bean.getChannelFeeAmount())
payOrderExcelVO.setChannelFeePrice(BigDecimal.valueOf(bean.getChannelFeePrice())
.divide(multiple, 2, RoundingMode.HALF_UP).toString());
payOrderExcelVO.setChannelFeeRate(java.math.BigDecimal.valueOf(bean.getChannelFeeRate())
.multiply(multiple).toString());
payOrderExcelVO.setRefundAmount(BigDecimal.valueOf(bean.getRefundAmount())
payOrderExcelVO.setRefundPrice(BigDecimal.valueOf(bean.getRefundPrice())
.divide(multiple, 2, RoundingMode.HALF_UP).toString());
return payOrderExcelVO;

View File

@ -77,9 +77,9 @@ public interface PayRefundConvert {
payRefundExcelVO.setCreateTime(bean.getCreateTime());
BigDecimal multiple = new BigDecimal(100);
payRefundExcelVO.setPayAmount(BigDecimal.valueOf(bean.getPayAmount())
payRefundExcelVO.setPayPrice(BigDecimal.valueOf(bean.getPayPrice())
.divide(multiple, 2, RoundingMode.HALF_UP).toString());
payRefundExcelVO.setRefundAmount(BigDecimal.valueOf(bean.getRefundAmount())
payRefundExcelVO.setRefundPrice(BigDecimal.valueOf(bean.getRefundPrice())
.divide(multiple, 2, RoundingMode.HALF_UP).toString());
return payRefundExcelVO;
@ -87,7 +87,7 @@ public interface PayRefundConvert {
//TODO 太多需要处理了, 暂时不用
@Mappings(value = {
@Mapping(source = "amount", target = "payAmount"),
@Mapping(source = "price", target = "payPrice"),
@Mapping(source = "id", target = "orderId"),
@Mapping(target = "status",ignore = true)
})

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 示例订单
@ -53,7 +52,7 @@ public class PayDemoOrderDO extends BaseDO {
/**
* 是否支付
*/
private Boolean payed;
private Boolean payStatus;
/**
* 支付订单编号
*

View File

@ -67,7 +67,7 @@ public class MemberWalletTransactionDO extends BaseDO {
/**
* 交易金额, 单位分
*/
private Integer amount;
private Integer price;
/**
* 余额, 单位分
@ -83,4 +83,4 @@ public class MemberWalletTransactionDO extends BaseDO {
* 交易时间
*/
private LocalDateTime transactionTime;
}
}

View File

@ -76,17 +76,13 @@ public class PayOrderDO extends BaseDO {
* 枚举 {@link PayOrderNotifyStatusEnum}
*/
private Integer notifyStatus;
// /**
// * 商户拓展参数
// */
// private Map<String, String> merchantExtras;
// ========== 订单相关字段 ==========
/**
* 支付金额,单位:分
*/
private Integer amount;
private Integer price;
/**
* 渠道手续费,单位:百分比
*
@ -96,7 +92,7 @@ public class PayOrderDO extends BaseDO {
/**
* 渠道手续金额,单位:分
*/
private Long channelFeeAmount;
private Long channelFeePrice;
/**
* 支付状态
*
@ -140,7 +136,7 @@ public class PayOrderDO extends BaseDO {
/**
* 退款总金额,单位:分
*/
private Long refundAmount;
private Long refundPrice;
// ========== 渠道相关字段 ==========
/**

View File

@ -124,11 +124,11 @@ public class PayRefundDO extends BaseDO {
/**
* 支付金额,单位:分
*/
private Integer payAmount;
private Integer payPrice;
/**
* 退款金额,单位:分
*/
private Integer refundAmount;
private Integer refundPrice;
/**
* 退款原因

View File

@ -22,7 +22,7 @@ public interface PayDemoOrderMapper extends BaseMapperX<PayDemoOrderDO> {
default int updateByIdAndPayed(Long id, boolean wherePayed, PayDemoOrderDO updateObj) {
return update(updateObj, new LambdaQueryWrapperX<PayDemoOrderDO>()
.eq(PayDemoOrderDO::getId, id).eq(PayDemoOrderDO::getPayed, wherePayed));
.eq(PayDemoOrderDO::getId, id).eq(PayDemoOrderDO::getPayStatus, wherePayed));
}
}

View File

@ -1,10 +1,8 @@
package cn.iocoder.yudao.module.pay.service.demo;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.pay.api.order.PayOrderApi;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
@ -85,14 +83,14 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
// 1.2 插入 demo 订单
PayDemoOrderDO demoOrder = new PayDemoOrderDO().setUserId(userId)
.setSpuId(createReqVO.getSpuId()).setSpuName(spuName)
.setPrice(price).setPayed(false).setRefundPrice(0);
.setPrice(price).setPayStatus(false).setRefundPrice(0);
payDemoOrderMapper.insert(demoOrder);
// 2.1 创建支付单
Long payOrderId = payOrderApi.createOrder(new PayOrderCreateReqDTO()
.setAppId(PAY_APP_ID).setUserIp(getClientIP()) // 支付应用
.setMerchantOrderId(demoOrder.getId().toString()) // 业务的订单编号
.setSubject(spuName).setBody("").setAmount(price) // 价格信息
.setSubject(spuName).setBody("").setPrice(price) // 价格信息
.setExpireTime(addTime(Duration.ofHours(2L)))); // 支付的过期时间
// 2.2 更新支付单到 demo 订单
payDemoOrderMapper.updateById(new PayDemoOrderDO().setId(demoOrder.getId())
@ -101,12 +99,6 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
return demoOrder.getId();
}
// private void validateDemoOrderExists(Long id) {
// if (demoOrderMapper.selectById(id) == null) {
// throw exception(DEMO_ORDER_NOT_EXISTS);
// }
// }
@Override
public PayDemoOrderDO getDemoOrder(Long id) {
return payDemoOrderMapper.selectById(id);
@ -124,7 +116,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
// 更新 PayDemoOrderDO 状态为已支付
int updateCount = payDemoOrderMapper.updateByIdAndPayed(id, false,
new PayDemoOrderDO().setPayed(true).setPayTime(LocalDateTime.now())
new PayDemoOrderDO().setPayStatus(true).setPayTime(LocalDateTime.now())
.setPayChannelCode(payOrder.getChannelCode()));
if (updateCount == 0) {
throw exception(PAY_DEMO_ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
@ -148,7 +140,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
throw exception(PAY_DEMO_ORDER_NOT_FOUND);
}
// 1.2 校验订单未支付
if (order.getPayed()) {
if (order.getPayStatus()) {
log.error("[validateDemoOrderCanPaid][order({}) 不处于待支付状态请进行处理order 数据是:{}]",
id, toJsonString(order));
throw exception(PAY_DEMO_ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
@ -173,7 +165,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
throw exception(PAY_DEMO_ORDER_UPDATE_PAID_FAIL_PAY_ORDER_STATUS_NOT_SUCCESS);
}
// 2.3 校验支付金额一致
if (notEqual(payOrder.getAmount(), order.getPrice())) {
if (notEqual(payOrder.getPrice(), order.getPrice())) {
log.error("[validateDemoOrderCanPaid][order({}) payOrder({}) 支付金额不匹配请进行处理order 数据是:{}payOrder 数据是:{}]",
id, payOrderId, toJsonString(order), toJsonString(payOrder));
throw exception(PAY_DEMO_ORDER_UPDATE_PAID_FAIL_PAY_PRICE_NOT_MATCH);
@ -196,7 +188,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
Long payRefundId = payRefundApi.createPayRefund(new PayRefundCreateReqDTO()
.setAppId(PAY_APP_ID).setUserIp(getClientIP()) // 支付应用
.setPayOrderId(order.getPayOrderId()) // 支付单号
.setReason("想退钱").setAmount(order.getPrice()));// 价格信息
.setReason("想退钱").setPrice(order.getPrice()));// 价格信息
// 2.2 更新退款单到 demo 订单
payDemoOrderMapper.updateById(new PayDemoOrderDO().setId(id)
.setPayRefundId(payRefundId).setRefundPrice(order.getPrice()));
@ -209,7 +201,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
throw exception(PAY_DEMO_ORDER_NOT_FOUND);
}
// 校验订单是否支付
if (!order.getPayed()) {
if (!order.getPayStatus()) {
throw exception(PAY_DEMO_ORDER_REFUND_FAIL_NOT_PAID);
}
// 校验订单是否已退款
@ -251,7 +243,7 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
throw exception(PAY_DEMO_ORDER_REFUND_FAIL_REFUND_NOT_SUCCESS);
}
// 2.3 校验退款金额一致
if (notEqual(payRefund.getRefundAmount(), order.getPrice())) {
if (notEqual(payRefund.getRefundPrice(), order.getPrice())) {
log.error("[validateDemoOrderCanRefunded][order({}) payRefund({}) 退款金额不匹配请进行处理order 数据是:{}payRefund 数据是:{}]",
id, payRefundId, toJsonString(order), toJsonString(payRefund));
throw exception(PAY_DEMO_ORDER_REFUND_FAIL_REFUND_PRICE_NOT_MATCH);

View File

@ -118,7 +118,7 @@ public class PayOrderServiceImpl implements PayOrderService {
// 退款相关字段
// todo @芋艿 创建支付的订单的退款状态枚举是不是有问题,应该是 PayRefundTypeEnum 吧 您这填写的是 PayOrderNotifyStatusEnum 回调状态枚举
order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus())
.setRefundTimes(0).setRefundAmount(0L);
.setRefundTimes(0).setRefundPrice(0L);
orderMapper.insert(order);
// 最终返回
return order.getId();
@ -147,7 +147,7 @@ public class PayOrderServiceImpl implements PayOrderService {
.setNotifyUrl(genChannelPayNotifyUrl(channel))
.setReturnUrl(reqVO.getReturnUrl())
// 订单相关字段
.setAmount(order.getAmount()).setExpireTime(order.getExpireTime());
.setAmount(order.getPrice()).setExpireTime(order.getExpireTime());
PayOrderUnifiedRespDTO unifiedOrderRespDTO = client.unifiedOrder(unifiedOrderReqDTO);
// TODO 轮询三方接口,是否已经支付的任务

View File

@ -117,7 +117,7 @@ public class PayRefundServiceImpl implements PayRefundService {
validatePayRefund(reqDTO, order);
// 退款类型
PayRefundTypeEnum refundType = PayRefundTypeEnum.SOME;
if (Objects.equals(reqDTO.getAmount(), order.getAmount())) {
if (Objects.equals(reqDTO.getPrice(), order.getPrice())) {
refundType = PayRefundTypeEnum.ALL;
}
PayOrderExtensionDO orderExtensionDO = orderExtensionService.getOrderExtension(order.getSuccessExtensionId());
@ -144,8 +144,8 @@ public class PayRefundServiceImpl implements PayRefundService {
.orderId(order.getId())
.merchantRefundNo(merchantRefundId) // TODO 芋艿:需要优化
.notifyUrl(app.getRefundNotifyUrl())
.payAmount(order.getAmount())
.refundAmount(reqDTO.getAmount())
.payPrice(order.getPrice())
.refundPrice(reqDTO.getPrice())
.userIp(reqDTO.getUserIp())
.merchantOrderId(order.getMerchantOrderId())
.tradeNo(orderExtensionDO.getNo())
@ -159,7 +159,7 @@ public class PayRefundServiceImpl implements PayRefundService {
// TODO @jason搞到 convert 里。一些额外的自动,手动 set 下;
PayRefundUnifiedReqDTO unifiedReqDTO = new PayRefundUnifiedReqDTO();
unifiedReqDTO.setUserIp(reqDTO.getUserIp())
.setAmount(reqDTO.getAmount())
.setAmount(reqDTO.getPrice())
.setChannelOrderNo(order.getChannelOrderNo())
.setPayTradeNo(orderExtensionDO.getNo())
.setMerchantRefundId(merchantRefundId) // TODO 芋艿:需要优化
@ -209,17 +209,17 @@ public class PayRefundServiceImpl implements PayRefundService {
// 得到已退金额
PayOrderDO payOrderDO = orderService.getOrder(refundDO.getOrderId());
Long refundedAmount = payOrderDO.getRefundAmount();
Long refundedAmount = payOrderDO.getRefundPrice();
PayOrderStatusEnum orderStatus = PayOrderStatusEnum.SUCCESS;
if(Objects.equals(payOrderDO.getAmount(), refundedAmount+ refundDO.getRefundAmount())){
if(Objects.equals(payOrderDO.getPrice(), refundedAmount+ refundDO.getRefundPrice())){
//支付金额 = 已退金额 + 本次退款金额。
orderStatus = PayOrderStatusEnum.CLOSED;
}
// 更新支付订单
PayOrderDO updateOrderDO = new PayOrderDO();
updateOrderDO.setId(refundDO.getOrderId())
.setRefundAmount(refundedAmount + refundDO.getRefundAmount())
.setRefundPrice(refundedAmount + refundDO.getRefundPrice())
.setStatus(orderStatus.getStatus())
.setRefundTimes(payOrderDO.getRefundTimes() + 1)
.setRefundStatus(refundDO.getType());
@ -257,8 +257,8 @@ public class PayRefundServiceImpl implements PayRefundService {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_ALL_REFUNDED);
}
// 校验金额 退款金额不能大于 原定的金额
if (reqDTO.getAmount() + order.getRefundAmount() > order.getAmount()){
throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_AMOUNT_EXCEED);
if (reqDTO.getPrice() + order.getRefundPrice() > order.getPrice()){
throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_PRICE_PRICE_EXCEED);
}
// 校验渠道订单号
if (StrUtil.isEmpty(order.getChannelOrderNo())) {

View File

@ -30,7 +30,7 @@ public class PayOrderServiceIntegrationTest extends BaseDbIntegrationTest {
reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
reqDTO.setSubject("标题");
reqDTO.setBody("内容");
reqDTO.setAmount(100);
reqDTO.setPrice(100);
reqDTO.setExpireTime(DateUtils.addTime(Duration.ofDays(1)));
// 发起请求
payOrderService.createPayOrder(reqDTO);

View File

@ -75,9 +75,9 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
o.setBody("斌斌子送给灿灿子的炸弹猫");
o.setNotifyUrl("https://hc.com/lbh");
o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
o.setAmount(10000);
o.setPrice(10000);
o.setChannelFeeRate(0.01);
o.setChannelFeeAmount(1L);
o.setChannelFeePrice(1L);
o.setStatus(PayOrderStatusEnum.SUCCESS.getStatus());
o.setUserIp("127.0.0.1");
o.setCreateTime(LocalDateTime.of(2018, 1, 1, 10, 1, 0));
@ -87,7 +87,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
o.setSuccessExtensionId(1L);
o.setRefundStatus(PayRefundTypeEnum.NO.getStatus());
o.setRefundTimes(0);
o.setRefundAmount(0L);
o.setRefundPrice(0L);
o.setChannelUserId("1008611");
o.setChannelOrderNo(channelOrderId);
o.setUpdateTime(LocalDateTime.of(2018, 1, 1, 10, 10, 15));
@ -143,9 +143,9 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
o.setBody("斌斌子送给灿灿子的炸弹猫");
o.setNotifyUrl("https://hc.com/lbh");
o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
o.setAmount(10000);
o.setPrice(10000);
o.setChannelFeeRate(0.01);
o.setChannelFeeAmount(1L);
o.setChannelFeePrice(1L);
o.setStatus(PayOrderStatusEnum.SUCCESS.getStatus());
o.setUserIp("127.0.0.1");
o.setCreateTime(LocalDateTime.of(2018, 1, 1, 10, 1, 0));
@ -155,7 +155,7 @@ public class PayOrderServiceTest extends BaseDbUnitTest {
o.setSuccessExtensionId(1L);
o.setRefundStatus(PayRefundTypeEnum.NO.getStatus());
o.setRefundTimes(0);
o.setRefundAmount(0L);
o.setRefundPrice(0L);
o.setChannelUserId("1008611");
o.setChannelOrderNo(channelOrderId);
o.setUpdateTime(LocalDateTime.of(2018, 1, 1, 10, 10, 15));

View File

@ -69,8 +69,8 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
o.setType(PayRefundTypeEnum.SOME.getStatus());
o.setPayAmount(100);
o.setRefundAmount(500);
o.setPayPrice(100);
o.setRefundPrice(500);
o.setReason("就是想退款了,你有意见吗");
o.setUserIp("127.0.0.1");
o.setChannelOrderNo("CH0000001");
@ -134,8 +134,8 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
o.setNotifyStatus(PayOrderNotifyStatusEnum.SUCCESS.getStatus());
o.setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
o.setType(PayRefundTypeEnum.SOME.getStatus());
o.setPayAmount(100);
o.setRefundAmount(500);
o.setPayPrice(100);
o.setRefundPrice(500);
o.setReason("就是想退款了,你有意见吗");
o.setUserIp("127.0.0.1");
o.setChannelOrderNo("CH0000001");