xiaohanzi 6 лет назад
Родитель
Сommit
8294aca922
5 измененных файлов: 57 добавлений и 78 удалений
  1. +1
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java
  2. +33
    -33
      mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java
  3. +1
    -1
      mallinkCApi/src/main/resources/application-dev.yml
  4. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java
  5. +21
    -42
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java

+ 1
- 1
mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java Просмотреть файл

@@ -153,7 +153,7 @@ public class WxPayOrderController extends BaseController {
WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId());
order = wxOrderService.getById(orderId);
try {
WxPayOrder wo = wxPayOrderService.handleWxOrderQuery(payOrder, order, appInfo, payAccount, IdWorker.get());
WxPayOrder wo = wxPayOrderService.handleWxOrderQuery(payOrder, order, appInfo, payAccount, IdWorker.get(),false);
if (null != wo) {
return new ResultData(Result.SUCCESS, "支付状态更新成功", order);
}


+ 33
- 33
mallinkCApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java Просмотреть файл

@@ -32,39 +32,39 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
System.out.println(" requesturi......"+request.getRequestURL());
AuthIgnore annotation;
if(handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthIgnore.class);
}else{
return true;
}
//如果有@IgnoreAuth注解,则不验证token
if(annotation != null){
return true;
}
//从header中获取token
String token = request.getHeader("token");
//如果header中不存在token,则从参数中获取token
if(StringUtils.isBlank(token)){
token = request.getParameter("token");
}
//token为空
if(StringUtils.isBlank(token)){
throw new MallinkException(ErrorCode.NET_TOKEN_EMPTY);
}
// 查询token信息
WxCUser wxCUser = userTokenService.getByToken(token);
if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){
throw new MallinkException(ErrorCode.NET_TOKEN_INVALID.getCode(), "URL:" + request.getRequestURL() + " token失效,请重新登录");
}
//设置userId到request里,后续根据userId,获取用户信息
request.setAttribute(Constant.LOGIN_USER_KEY, wxCUser.getId());
request.setAttribute(Constant.TENANT_ID, wxCUser.getTenantId());
// AuthIgnore annotation;
// if(handler instanceof HandlerMethod) {
// annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthIgnore.class);
// }else{
// return true;
// }
//
// //如果有@IgnoreAuth注解,则不验证token
// if(annotation != null){
// return true;
// }
//
// //从header中获取token
// String token = request.getHeader("token");
// //如果header中不存在token,则从参数中获取token
// if(StringUtils.isBlank(token)){
// token = request.getParameter("token");
// }
//
// //token为空
// if(StringUtils.isBlank(token)){
// throw new MallinkException(ErrorCode.NET_TOKEN_EMPTY);
// }
//
// // 查询token信息
// WxCUser wxCUser = userTokenService.getByToken(token);
// if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){
// throw new MallinkException(ErrorCode.NET_TOKEN_INVALID.getCode(), "URL:" + request.getRequestURL() + " token失效,请重新登录");
// }
//
// //设置userId到request里,后续根据userId,获取用户信息
// request.setAttribute(Constant.LOGIN_USER_KEY, wxCUser.getId());
// request.setAttribute(Constant.TENANT_ID, wxCUser.getTenantId());

return true;
}


+ 1
- 1
mallinkCApi/src/main/resources/application-dev.yml Просмотреть файл

@@ -4,7 +4,7 @@ spring:
#include: rabbitMQ
# JDBC
datasource:
url: jdbc:mysql://zc349w82qvn56ftl5e64-rw4rm.rwlb.rds.aliyuncs.com:3306/mallink?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true
url: jdbc:mysql://rm-2zel9i9t555zy7lftmo.mysql.rds.aliyuncs.com:3306/mallink?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true
username: ENC(dZ8fmrtuBMQYaRytKQgTqg==)
password: ENC(IKH7HxMZwIqMttMc9+QsqWa1KMsJvTs4)
type: com.alibaba.druid.pool.DruidDataSource


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

@@ -15,7 +15,7 @@ import com.iformall.enums.EnumPayWay;

public interface WxPayOrderService {

public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker);
public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay);
/**
* 创建支付订单


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

@@ -115,6 +115,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
"\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," +
"\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}");

@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
private void handleSuccessOrder(WxPayOrder oldRecord,WxOrder order,Map<String, String> retMap) {
Date curDate = new Date();
if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) {
@@ -172,59 +173,39 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
}
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker) {
public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay) {
//int wxpaystatus = WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, order, appInfo, payAccount);
Map<String, String> retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, order, appInfo, payAccount);
int wxpaystatus = WxPayOrderServiceHelper.getPayStatusFromMap(retMap, oldRecord.getPayOrderNo());
if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode()==wxpaystatus) {
handleSuccessOrder(oldRecord,order,retMap);
//直接调用不会触发事务,spring事务基于AOP代理
WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy();
proxy.handleSuccessOrder(oldRecord,order,retMap);
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"该订单已经支付,请勿重复支付!");
}else if (EnumPayStatus.PAY_STATUS_REFUND.getCode()==wxpaystatus) {
if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_REFUND.getCode()) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REFUND.getCode());
wxPayOrderMapper.updateById(oldRecord);
}
if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()) {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode());
wxOrderMapper.updateById(order);
}
throw new MallinkException(ErrorCode.PAY_ORDER_REFUND.getCode(),"该订单已经退款,无法支付!");
}else if (EnumPayStatus.PAY_STATUS_CLOSE.getCode()==wxpaystatus) {
if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_CLOSE.getCode()) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_CLOSE.getCode());
wxPayOrderMapper.updateById(oldRecord);
}
if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()) {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
wxOrderMapper.updateById(order);
}
throw new MallinkException(ErrorCode.PAY_ORDER_CLOSED.getCode(),"该订单已经关闭,无法支付!");
}else if (EnumPayStatus.PAY_STATUS_REVERSE.getCode()==wxpaystatus) {
if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_REVERSE.getCode()) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_REVERSE.getCode());
wxPayOrderMapper.updateById(oldRecord);
}
if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()) {
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
wxOrderMapper.updateById(order);
}
throw new MallinkException(ErrorCode.PAY_ORDER_REVERSE.getCode(),"该订单已撤销,无法支付!");
}else if (EnumPayStatus.PAY_STATUS_WAIT.getCode()==wxpaystatus) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"该订单支付中,请勿重复支付!");
}else if (EnumPayStatus.PAY_STATUS_NOTPAY.getCode()==wxpaystatus || EnumPayStatus.PAY_STATUS_FAIL.getCode()==wxpaystatus) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
Long payno = idworker.nextId();
if (null == payno || payno.longValue() <=0) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付流水号生成失败!handleWxOrderQuery:oldRecord:"+oldRecord+":wxstatus:"+wxpaystatus);
}
oldRecord.setPayOrderNo(String.valueOf(payno));
int sqlRow0 =wxPayOrderMapper.updateById(oldRecord);
if (sqlRow0 != 1) {
logger.error("pay order update error: " + oldRecord.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
//支付调用,支付遇到问题,可以重复支付
if (repeatPay) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
Long payno = idworker.nextId();
if (null == payno || payno.longValue() <=0) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付流水号生成失败!handleWxOrderQuery:oldRecord:"+oldRecord+":wxstatus:"+wxpaystatus);
}
oldRecord.setPayOrderNo(String.valueOf(payno));
int sqlRow0 =wxPayOrderMapper.updateById(oldRecord);
if (sqlRow0 != 1) {
logger.error("pay order update error: " + oldRecord.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
}
return oldRecord;
}
return null;
@@ -354,9 +335,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
throw new MallinkException(ErrorCode.PAY_ORDER_EXIST);
//如果是支付中的,则调用微信接口查询支付状态
}else if (oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_WAIT.getCode()) {
//TODO 直接调用不会触发事务,spring事务基于AOP代理
WxPayOrderServiceImpl proxy = (WxPayOrderServiceImpl) AopContext.currentProxy();
record = proxy.handleWxOrderQuery(oldRecord,order,appInfo,payAccount,idworker);
record = handleWxOrderQuery(oldRecord,order,appInfo,payAccount,idworker,true);
if (null == record) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单微信查询支付状态失败!");
}


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