Просмотр исходного кода

[支付/退款][新增]:退款接口完善

release_toaliyun_real
Stormeye.Wu 7 лет назад
Родитель
Сommit
4807ca1b07
6 измененных файлов: 83 добавлений и 78 удалений
  1. +49
    -24
      mallinkBApi/src/main/java/com/simple/controller/WxRefundOrderController.java
  2. +1
    -0
      mallinkService/src/main/java/com/simple/common/ErrorCode.java
  3. +8
    -0
      mallinkService/src/main/java/com/simple/service/WxPayOrderService.java
  4. +3
    -1
      mallinkService/src/main/java/com/simple/service/WxRefundOrderService.java
  5. +9
    -0
      mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
  6. +13
    -53
      mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java

+ 49
- 24
mallinkBApi/src/main/java/com/simple/controller/WxRefundOrderController.java Просмотреть файл

@@ -4,14 +4,12 @@ import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode; import com.simple.common.ErrorCode;
import com.simple.common.Result; import com.simple.common.Result;
import com.simple.common.ResultData; import com.simple.common.ResultData;
import com.simple.domain.po.WxAppinfo;
import com.simple.domain.po.WxCouponVerify;
import com.simple.domain.po.WxMerchantBUser;
import com.simple.domain.po.WxRefundOrder;
import com.simple.domain.po.*;
import com.simple.enums.EnumCouponOrderStatus;
import com.simple.enums.EnumPayStatus;
import com.simple.enums.EnumPayWay; import com.simple.enums.EnumPayWay;
import com.simple.exception.MallinkException; import com.simple.exception.MallinkException;
import com.simple.service.WxCouponVerifyService;
import com.simple.service.WxRefundOrderService;
import com.simple.service.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
@@ -30,52 +28,79 @@ public class WxRefundOrderController extends BaseController {
private Logger logger = Logger.getLogger(WxRefundOrderController.class); private Logger logger = Logger.getLogger(WxRefundOrderController.class);


@Autowired @Autowired
private WxCouponVerifyService wxCouponVerifyService;
private WxCouponOrderService wxCouponOrderService;

@Autowired
private WxOrderService wxOrderService;

@Autowired
private WxPayOrderService wxPayOrderService;


@Autowired @Autowired
private WxRefundOrderService wxRefundOrderService; private WxRefundOrderService wxRefundOrderService;


@ApiOperation(value = "发起退款", notes = "{\"couponOrderId\":,\"string\", \"orderId\":,\"string\"}")
@ApiOperation(value = "发起退款", notes = "{\"orderId\":\"string\"}")
@PostMapping("/create") @PostMapping("/create")
public ResultData create(@RequestBody Map<String, String> paramMap) { public ResultData create(@RequestBody Map<String, String> paramMap) {
// couponOrder发起退款 // couponOrder发起退款
logger.info("/api/refund/create" + paramMap.toString()); logger.info("/api/refund/create" + paramMap.toString());
//Assert.notNull(wxRefundOrder.getName(), "角色名不能为空"); //Assert.notNull(wxRefundOrder.getName(), "角色名不能为空");
//Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
String couponOrderIdStr = paramMap.get("couponOrderId");
String orderIdStr = paramMap.get("orderId"); String orderIdStr = paramMap.get("orderId");
if (StringUtils.isBlank(couponOrderIdStr)) {
logger.error("couponOrderId不能为空: " + paramMap.toString());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
if (StringUtils.isBlank(orderIdStr)) { if (StringUtils.isBlank(orderIdStr)) {
logger.error("orderId不能为空: " + paramMap.toString()); logger.error("orderId不能为空: " + paramMap.toString());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
} }
Long couponOrderId = 0L;
Long orderId = 0L;
try { try {
couponOrderId = Long.valueOf(couponOrderIdStr);
orderId = Long.valueOf(orderIdStr);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
logger.error("orderId参数不正确: " + paramMap.toString()); logger.error("orderId参数不正确: " + paramMap.toString());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
} }


Long orderId = 0L;
WxOrder order = null;
try { try {
orderId = Long.valueOf(orderIdStr);
} catch (NumberFormatException e) {
logger.error("orderId参数不正确: " + paramMap.toString());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
order = wxOrderService.getById(orderId);
} catch (Exception e) {
logger.error("订单不存在: " + orderIdStr);
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单不存在: " + orderIdStr);
}
if (order == null) {
logger.error("订单不存在: " + orderIdStr);
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单不存在: " + orderIdStr);
}
if (order.getPayment() <= 0) {
logger.error("订单支付金额小于等于0: " + order.toString());
throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO);
}

WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setCUserId(order.getCUserId());
payOrderQ.setOrderId(orderId);
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());

WxPayOrder payOrder = null;

try {
payOrder = wxPayOrderService.getByObj(payOrderQ);
} catch (Exception e) {
logger.error("payOrder不存在");
return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND.getCode(), "支付订单不存在,无法退款");
}
if (payOrder == null) {
logger.error("payOrder不存在");
return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND.getCode(), "支付订单不存在,无法退款");
} }


WxRefundOrder refundOrder = new WxRefundOrder();
//refundOrder.setPayOrderNo(payOrderIdStr);
refundOrder.setOrderId(orderId);
WxRefundOrder refundOrderQ = new WxRefundOrder();
refundOrderQ.setPayOrderNo(String.valueOf(payOrder.getId()));
refundOrderQ.setOrderId(orderId);


WxMerchantBUser bUser = getUser(); WxMerchantBUser bUser = getUser();
WxAppinfo appinfo = getAppInfo(bUser.getAppId()); WxAppinfo appinfo = getAppInfo(bUser.getAppId());
try { try {
wxRefundOrderService.createRefundOrder(appinfo, refundOrder, EnumPayWay.PAY_WAY_WEAPP);
wxRefundOrderService.createRefundOrder(appinfo, refundOrderQ, payOrder, EnumPayWay.PAY_WAY_WEAPP);
return new ResultData(); return new ResultData();
} catch (MallinkException e) { } catch (MallinkException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());


+ 1
- 0
mallinkService/src/main/java/com/simple/common/ErrorCode.java Просмотреть файл

@@ -121,6 +121,7 @@ public enum ErrorCode{
/** /**
* 支付 * 支付
*/ */
PAY_ORDER_NOT_FOUND(12000, "支付订单不存在"),
PAY_ORDER_EXIST(12001, "支付订单已存在"), PAY_ORDER_EXIST(12001, "支付订单已存在"),
PAY_ORDER_ERROR(12002, "支付订单异常"), PAY_ORDER_ERROR(12002, "支付订单异常"),
PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12003 , "支付验签失败"), PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12003 , "支付验签失败"),


+ 8
- 0
mallinkService/src/main/java/com/simple/service/WxPayOrderService.java Просмотреть файл

@@ -78,6 +78,14 @@ public interface WxPayOrderService {
*/ */
WxPayOrder getById(Long id); WxPayOrder getById(Long id);


/**
* 根据obj获得实体
*
* @param payOrder
* @return
*/
WxPayOrder getByObj(WxPayOrder payOrder);





/** /**


+ 3
- 1
mallinkService/src/main/java/com/simple/service/WxRefundOrderService.java Просмотреть файл

@@ -4,6 +4,7 @@ import java.util.*;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.simple.common.ResultData; import com.simple.common.ResultData;
import com.simple.domain.po.WxAppinfo; import com.simple.domain.po.WxAppinfo;
import com.simple.domain.po.WxPayOrder;
import com.simple.domain.po.WxRefundOrder; import com.simple.domain.po.WxRefundOrder;
import com.simple.enums.EnumPayWay; import com.simple.enums.EnumPayWay;


@@ -13,10 +14,11 @@ public interface WxRefundOrderService {
* 创建退款订单 * 创建退款订单
* @param appInfo * @param appInfo
* @param record 退款订单请求 * @param record 退款订单请求
* @param payOrder 支付订单
* @param payWay * @param payWay
* @return * @return
*/ */
ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, EnumPayWay payWay);
ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, WxPayOrder payOrder, EnumPayWay payWay);


/** /**
* 退款订单查询 * 退款订单查询


+ 9
- 0
mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java Просмотреть файл

@@ -463,6 +463,15 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
return wxPayOrderMapper.selectByPrimaryKey(id); return wxPayOrderMapper.selectByPrimaryKey(id);
} }


@Override
public WxPayOrder getByObj(WxPayOrder payOrderQ) {
List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ);
if (list.size() > 0) {
return list.get(0);
}
return null;
}

@Override @Override
public void saveOrUpdate(WxPayOrder record) { public void saveOrUpdate(WxPayOrder record) {
if (record.getId() == null) { if (record.getId() == null) {


+ 13
- 53
mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java Просмотреть файл

@@ -219,7 +219,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
"}"); "}");


@Override @Override
public ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, EnumPayWay payWay) {
public ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, WxPayOrder payOrder, EnumPayWay payWay) {
WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId()); WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId());
if (StringUtils.isBlank(payAccount.getApiKey())) { if (StringUtils.isBlank(payAccount.getApiKey())) {
logger.error("支付密钥为空"); logger.error("支付密钥为空");
@@ -235,65 +235,25 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
logger.error("退款订单已存在, 无法再提交退款申请"); logger.error("退款订单已存在, 无法再提交退款申请");
throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请");
} }
// check 支付 订单
WxPayOrder payOrder = null;
Long payOrderId = 0L;
try {
payOrderId = Long.valueOf(record.getPayOrderNo());
} catch (NumberFormatException e) {
logger.error("参数转换异常: payOrderId-" + record.getPayOrderNo());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "参数转换异常: payOrderId-" + record.getPayOrderNo());
}
try {
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setOrderId(record.getOrderId());
payOrderQ.setId(payOrderId);
payOrderQ.setPayOrderNo(record.getPayOrderNo());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
List<WxPayOrder> payOrderList = wxPayOrderMapper.findList(payOrderQ);
if (payOrderList.size() > 0) {
payOrder = payOrderList.get(0);
}
} catch (Exception e) {
logger.error("数据库获取异常: " + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL);
}

if (payOrder == null) {
logger.error("支付订单不存在: " + record.toString());
throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_NOT_EXIST);
}
if (payOrder.getPayAmount() <= 0) {
logger.error("支付订单金额小于等于0: " + record.toString());
throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO);
}

// 检查 是否已核销, 已核销不能退款
/*
WxOrder order = wxOrderMapper.selectByPrimaryKey(payOrder.getOrderId());

WxCouponVerify couponVerifyQ = new WxCouponVerify();
couponVerifyQ.setCouponId(payOrder.getOrderId());
WxCouponVerify couponVerify = wxCouponVerifyMapper.select()
*/



// 创建退款订单 // 创建退款订单
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
Long id = idWorker.nextId(); Long id = idWorker.nextId();
Date currentDate = new Date(); Date currentDate = new Date();


record.setId(id);
record.setTenantId(appInfo.getTenantId());
record.setCreateTime(currentDate);
record.setUpdateTime(currentDate);
record.setTransactionId(payOrder.getTransactionId());
record.setCUserId(payOrder.getCUserId());
record.setTotalFee(payOrder.getPayAmount());
record.setRefundFee(payOrder.getPayAmount());
record.setRefundTimeStart(currentDate);
record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode());

// 退款订单
try { try {
record.setId(id);
record.setTenantId(appInfo.getTenantId());
record.setCreateTime(currentDate);
record.setUpdateTime(currentDate);
record.setTransactionId(payOrder.getTransactionId());
record.setCUserId(payOrder.getCUserId());
record.setTotalFee(payOrder.getPayAmount());
record.setRefundFee(payOrder.getPayAmount());
record.setRefundTimeStart(currentDate);
record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode());
int sqlRow = wxRefundOrderMapper.insertSelective(record); int sqlRow = wxRefundOrderMapper.insertSelective(record);
if(sqlRow != 1) { if(sqlRow != 1) {
logger.error("退款订单数据库插入出错: " + record.toString()); logger.error("退款订单数据库插入出错: " + record.toString());


Загрузка…
Отмена
Сохранить