Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
online-edu-backend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
online-edu
online-edu-backend
Commits
adb18f33
Commit
adb18f33
authored
Jun 18, 2021
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成定时检查订单
parent
59ae5ada
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
190 additions
and
63 deletions
+190
-63
AlipayNotifyController.java
.../com/qkdata/alipay/controller/AlipayNotifyController.java
+3
-6
AlipayService.java
src/main/java/com/qkdata/alipay/service/AlipayService.java
+13
-7
ProductOrderStatusEnum.java
...ain/java/com/qkdata/biz/enums/ProductOrderStatusEnum.java
+10
-1
ProductOrderPO.java
...java/com/qkdata/biz/management/entity/ProductOrderPO.java
+5
-0
ProductOrderService.java
...om/qkdata/biz/management/service/ProductOrderService.java
+131
-38
TimeTaskService.java
...va/com/qkdata/biz/management/service/TimeTaskService.java
+14
-2
WxPayNotifyController.java
...a/com/qkdata/wx/pay/controller/WxPayNotifyController.java
+0
-3
application-dev.yml
src/main/resources/application-dev.yml
+9
-4
V1.0.14__update.sql
src/main/resources/db/migration/V1.0.14__update.sql
+3
-0
course_consume_recordMapper.xml
...ources/mappers/management/course_consume_recordMapper.xml
+2
-2
No files found.
src/main/java/com/qkdata/alipay/controller/AlipayNotifyController.java
View file @
adb18f33
...
@@ -48,12 +48,10 @@ public class AlipayNotifyController {
...
@@ -48,12 +48,10 @@ public class AlipayNotifyController {
boolean
verify_result
=
AlipaySignature
.
rsaCheckV1
(
params
,
alipayProperties
.
getAlipayPublicKey
(),
"UTF-8"
,
"RSA2"
);
boolean
verify_result
=
AlipaySignature
.
rsaCheckV1
(
params
,
alipayProperties
.
getAlipayPublicKey
(),
"UTF-8"
,
"RSA2"
);
if
(
verify_result
){
if
(
verify_result
){
//验证成功
//验证成功
if
(
trade_status
.
equals
(
"TRADE_SUCCESS"
)){
if
(
trade_status
.
equals
(
"TRADE_SUCCESS"
)
||
trade_status
.
equals
(
"TRADE_FINISHED"
)
){
orderService
.
orderComplete
(
out_trade_no
);
orderService
.
orderComplete
(
out_trade_no
);
}
else
if
(
trade_status
.
equals
(
"TRADE_FINISHED"
)){
}
else
if
(
trade_status
.
equals
(
"TRADE_CLOSED"
)){
orderService
.
updateStatus
(
out_trade_no
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
}
else
if
(
trade_status
.
equals
(
"WAIT_BUYER_PAY"
)){
orderService
.
updateStatus
(
out_trade_no
,
ProductOrderStatusEnum
.
WAIT_PAY
);
}
}
}
else
{
}
else
{
//验证失败
//验证失败
...
@@ -61,7 +59,6 @@ public class AlipayNotifyController {
...
@@ -61,7 +59,6 @@ public class AlipayNotifyController {
}
}
}
catch
(
AlipayApiException
e
)
{
}
catch
(
AlipayApiException
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
log
.
error
(
e
.
getMessage
(),
e
);
orderService
.
updateStatus
(
out_trade_no
,
ProductOrderStatusEnum
.
PAY_FAILD
);
return
"fail"
;
return
"fail"
;
}
}
return
"success"
;
return
"success"
;
...
...
src/main/java/com/qkdata/alipay/service/AlipayService.java
View file @
adb18f33
...
@@ -2,10 +2,13 @@ package com.qkdata.alipay.service;
...
@@ -2,10 +2,13 @@ package com.qkdata.alipay.service;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alipay.api.*
;
import
com.alipay.api.*
;
import
com.alipay.api.domain.AlipayTradeCloseModel
;
import
com.alipay.api.domain.AlipayTradeQueryModel
;
import
com.alipay.api.domain.AlipayTradeQueryModel
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.request.AlipayTradeCloseRequest
;
import
com.alipay.api.request.AlipayTradeQueryRequest
;
import
com.alipay.api.request.AlipayTradeQueryRequest
;
import
com.alipay.api.request.AlipayTradeWapPayRequest
;
import
com.alipay.api.request.AlipayTradeWapPayRequest
;
import
com.alipay.api.response.AlipayTradeCloseResponse
;
import
com.alipay.api.response.AlipayTradeQueryResponse
;
import
com.alipay.api.response.AlipayTradeQueryResponse
;
import
com.alipay.api.response.AlipayTradeWapPayResponse
;
import
com.alipay.api.response.AlipayTradeWapPayResponse
;
import
com.qkdata.alipay.config.AlipayProperties
;
import
com.qkdata.alipay.config.AlipayProperties
;
...
@@ -58,12 +61,15 @@ public class AlipayService {
...
@@ -58,12 +61,15 @@ public class AlipayService {
model
.
setOutTradeNo
(
orderNo
);
model
.
setOutTradeNo
(
orderNo
);
request
.
setBizModel
(
model
);
request
.
setBizModel
(
model
);
AlipayTradeQueryResponse
response
=
alipayClient
.
execute
(
request
);
AlipayTradeQueryResponse
response
=
alipayClient
.
execute
(
request
);
String
result
=
""
;
return
response
.
getTradeStatus
();
if
(
response
.
isSuccess
()){
}
result
=
response
.
getTradeStatus
();
}
else
{
public
AlipayTradeCloseResponse
closeOrder
(
String
orderNo
)
throws
AlipayApiException
{
log
.
info
(
"Alipay trade query faild:"
+
JSONObject
.
toJSONString
(
response
));
AlipayTradeCloseRequest
request
=
new
AlipayTradeCloseRequest
();
}
AlipayTradeCloseModel
model
=
new
AlipayTradeCloseModel
();
return
result
;
model
.
setOutTradeNo
(
orderNo
);
request
.
setBizModel
(
model
);
AlipayTradeCloseResponse
response
=
alipayClient
.
execute
(
request
);
return
response
;
}
}
}
}
src/main/java/com/qkdata/biz/enums/ProductOrderStatusEnum.java
View file @
adb18f33
...
@@ -4,7 +4,16 @@ package com.qkdata.biz.enums;
...
@@ -4,7 +4,16 @@ package com.qkdata.biz.enums;
* 订单状态
* 订单状态
*/
*/
public
enum
ProductOrderStatusEnum
{
public
enum
ProductOrderStatusEnum
{
/**
* 待支付
*/
WAIT_PAY
,
WAIT_PAY
,
/**
* 已支付
*/
PAY_COMPLETE
,
PAY_COMPLETE
,
PAY_FAILD
;
/**
* 支付关闭
*/
PAY_CLOSE
;
}
}
src/main/java/com/qkdata/biz/management/entity/ProductOrderPO.java
View file @
adb18f33
...
@@ -3,6 +3,7 @@ package com.qkdata.biz.management.entity;
...
@@ -3,6 +3,7 @@ package com.qkdata.biz.management.entity;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.qkdata.biz.enums.PayMethodEnum
;
import
com.qkdata.biz.enums.PayMethodEnum
;
import
com.qkdata.biz.enums.PaySourceEnum
;
import
com.qkdata.biz.enums.ProductOrderStatusEnum
;
import
com.qkdata.biz.enums.ProductOrderStatusEnum
;
import
com.qkdata.biz.enums.ProductTypeEnum
;
import
com.qkdata.biz.enums.ProductTypeEnum
;
import
com.qkdata.common.base.entity.BasePO
;
import
com.qkdata.common.base.entity.BasePO
;
...
@@ -82,6 +83,10 @@ public class ProductOrderPO extends BasePO {
...
@@ -82,6 +83,10 @@ public class ProductOrderPO extends BasePO {
* 订单状态
* 订单状态
*/
*/
private
ProductOrderStatusEnum
status
;
private
ProductOrderStatusEnum
status
;
/**
* 支付来源
*/
private
PaySourceEnum
source
;
}
}
src/main/java/com/qkdata/biz/management/service/ProductOrderService.java
View file @
adb18f33
...
@@ -5,11 +5,14 @@ import cn.hutool.core.date.DateTime;
...
@@ -5,11 +5,14 @@ import cn.hutool.core.date.DateTime;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.response.AlipayTradeCloseResponse
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest
;
import
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest
;
import
com.github.binarywang.wxpay.bean.result.WxPayOrderCloseResult
;
import
com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult
;
import
com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.github.binarywang.wxpay.service.WxPayService
;
import
com.github.binarywang.wxpay.service.WxPayService
;
...
@@ -27,6 +30,7 @@ import com.qkdata.biz.sys.service.SysRoleService;
...
@@ -27,6 +30,7 @@ import com.qkdata.biz.sys.service.SysRoleService;
import
com.qkdata.biz.sys.service.SysUserService
;
import
com.qkdata.biz.sys.service.SysUserService
;
import
com.qkdata.biz.sys.vo.SysRoleModel
;
import
com.qkdata.biz.sys.vo.SysRoleModel
;
import
com.qkdata.biz.web.vo.*
;
import
com.qkdata.biz.web.vo.*
;
import
com.qkdata.common.base.entity.BasePO
;
import
com.qkdata.common.base.enums.CodeEnum
;
import
com.qkdata.common.base.enums.CodeEnum
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.model.PageResult
;
import
com.qkdata.common.base.model.PageResult
;
...
@@ -35,7 +39,9 @@ import com.qkdata.common.util.HttpContextUtils;
...
@@ -35,7 +39,9 @@ import com.qkdata.common.util.HttpContextUtils;
import
com.qkdata.common.util.IPUtils
;
import
com.qkdata.common.util.IPUtils
;
import
com.qkdata.common.util.UserContext
;
import
com.qkdata.common.util.UserContext
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -72,6 +78,9 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
...
@@ -72,6 +78,9 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
private
OrgSurplusService
orgSurplusService
;
private
OrgSurplusService
orgSurplusService
;
@Autowired
@Autowired
private
AlipayService
alipayService
;
private
AlipayService
alipayService
;
@Autowired
@Qualifier
(
"stringRedisTemplate"
)
private
RedisTemplate
redisTemplate
;
private
String
generateOrderNo
()
{
private
String
generateOrderNo
()
{
DateTime
nowDateTime
=
DateUtil
.
date
();
DateTime
nowDateTime
=
DateUtil
.
date
();
...
@@ -189,6 +198,7 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
...
@@ -189,6 +198,7 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
po
.
setPayMethod
(
model
.
getPayMethod
());
po
.
setPayMethod
(
model
.
getPayMethod
());
po
.
setStatus
(
ProductOrderStatusEnum
.
WAIT_PAY
);
po
.
setStatus
(
ProductOrderStatusEnum
.
WAIT_PAY
);
po
.
setUserId
(
UserContext
.
getUserId
());
po
.
setUserId
(
UserContext
.
getUserId
());
po
.
setSource
(
model
.
getSource
());
return
po
;
return
po
;
}
}
...
@@ -199,46 +209,56 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
...
@@ -199,46 +209,56 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
update
(
po
,
Wrappers
.<
ProductOrderPO
>
lambdaUpdate
().
eq
(
ProductOrderPO:
:
getOrderNo
,
outTradeNo
));
update
(
po
,
Wrappers
.<
ProductOrderPO
>
lambdaUpdate
().
eq
(
ProductOrderPO:
:
getOrderNo
,
outTradeNo
));
}
}
public
ProductOrderStatusEnum
queryStatus
(
String
orderNo
)
{
public
ProductOrderStatusEnum
queryFromThirdPlatform
(
String
orderNo
,
PayMethodEnum
payMethod
){
ProductOrderPO
orderPO
=
getByOrderNo
(
orderNo
);
try
{
if
(
orderPO
==
null
){
if
(
payMethod
==
PayMethodEnum
.
WeiXin
)
{
throw
new
BusinessException
(
"订单号不存在"
);
if
(
wxService
.
getConfig
().
isUseSandboxEnv
()){
}
String
key
=
wxService
.
getSandboxSignKey
();
if
(
orderPO
.
getStatus
()
==
ProductOrderStatusEnum
.
PAY_COMPLETE
){
wxService
.
getConfig
().
setMchKey
(
key
);
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
}
}
else
{
WxPayOrderQueryResult
queryResult
=
wxService
.
queryOrder
(
null
,
orderNo
);
try
{
if
(
"SUCCESS"
.
equals
(
queryResult
.
getTradeState
())){
if
(
orderPO
.
getPayMethod
()
==
PayMethodEnum
.
WeiXin
)
{
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
if
(
wxService
.
getConfig
().
isUseSandboxEnv
()){
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
String
key
=
wxService
.
getSandboxSignKey
();
}
else
if
(
"CLOSED"
.
equals
(
queryResult
.
getTradeState
())){
wxService
.
getConfig
().
setMchKey
(
key
);
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
}
return
ProductOrderStatusEnum
.
PAY_CLOSE
;
WxPayOrderQueryResult
queryResult
=
wxService
.
queryOrder
(
null
,
orderNo
);
}
else
{
if
(
"SUCCESS"
.
equals
(
queryResult
.
getTradeState
())){
return
ProductOrderStatusEnum
.
WAIT_PAY
;
}
}
else
if
(
payMethod
==
PayMethodEnum
.
AliPay
){
try
{
String
queryResult
=
alipayService
.
queryOrder
(
orderNo
);
if
(
queryResult
.
equals
(
"TRADE_SUCCESS"
)
||
queryResult
.
equals
(
"TRADE_FINISHED"
)){
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
}
else
if
(
queryResult
.
equals
(
"TRADE_CLOSED"
)){
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
return
ProductOrderStatusEnum
.
PAY_CLOSE
;
}
else
{
}
else
{
return
ProductOrderStatusEnum
.
PAY_FAILD
;
return
ProductOrderStatusEnum
.
WAIT_PAY
;
}
}
else
if
(
orderPO
.
getPayMethod
()
==
PayMethodEnum
.
AliPay
){
try
{
String
queryResult
=
alipayService
.
queryOrder
(
orderNo
);
if
(
queryResult
.
equals
(
"TRADE_SUCCESS"
)
||
queryResult
.
equals
(
"TRADE_FINISHED"
)){
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
}
else
{
return
ProductOrderStatusEnum
.
PAY_FAILD
;
}
}
catch
(
AlipayApiException
e
)
{
throw
new
BusinessException
(
"查询支付宝订单请求异常"
);
}
}
}
else
{
}
catch
(
AlipayApiException
e
)
{
throw
new
BusinessException
(
"
暂不支持的支付类型
"
);
throw
new
BusinessException
(
"
查询支付宝订单请求异常
"
);
}
}
}
catch
(
WxPayException
e
)
{
}
else
{
log
.
error
(
e
.
getMessage
(),
e
);
throw
new
BusinessException
(
"暂不支持的支付类型"
);
return
ProductOrderStatusEnum
.
PAY_FAILD
;
}
}
}
catch
(
WxPayException
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
return
ProductOrderStatusEnum
.
WAIT_PAY
;
}
}
public
ProductOrderStatusEnum
queryStatus
(
String
orderNo
)
{
ProductOrderPO
orderPO
=
getByOrderNo
(
orderNo
);
if
(
orderPO
==
null
){
throw
new
BusinessException
(
"订单号不存在"
);
}
if
(
orderPO
.
getStatus
()
==
ProductOrderStatusEnum
.
WAIT_PAY
){
return
queryFromThirdPlatform
(
orderNo
,
orderPO
.
getPayMethod
());
}
else
{
return
orderPO
.
getStatus
();
}
}
}
}
...
@@ -287,6 +307,8 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
...
@@ -287,6 +307,8 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
public
CreateOrderResult
payAgain
(
CreateOrderModel
model
)
{
public
CreateOrderResult
payAgain
(
CreateOrderModel
model
)
{
CreateOrderResult
result
=
new
CreateOrderResult
();
result
.
setOrderNo
(
model
.
getOrderNo
());
ProductOrderPO
orderPO
=
getByOrderNo
(
model
.
getOrderNo
());
ProductOrderPO
orderPO
=
getByOrderNo
(
model
.
getOrderNo
());
if
(
orderPO
==
null
){
if
(
orderPO
==
null
){
throw
new
BusinessException
(
"请求错误,订单不存在"
);
throw
new
BusinessException
(
"请求错误,订单不存在"
);
...
@@ -294,10 +316,80 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
...
@@ -294,10 +316,80 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
if
(
orderPO
.
getStatus
()
==
ProductOrderStatusEnum
.
PAY_COMPLETE
){
if
(
orderPO
.
getStatus
()
==
ProductOrderStatusEnum
.
PAY_COMPLETE
){
throw
new
BusinessException
(
"订单已完成,请不要重覆支付"
);
throw
new
BusinessException
(
"订单已完成,请不要重覆支付"
);
}
}
CreateOrderResult
result
=
new
CreateOrderResult
();
//下单来源不一致
result
.
setOrderNo
(
model
.
getOrderNo
());
if
(
orderPO
.
getPayMethod
()
==
PayMethodEnum
.
WeiXin
&&
orderPO
.
getSource
()
!=
model
.
getSource
()){
Object
rtObj
=
prePay
(
orderPO
,
model
.
getSource
(),
model
.
getOpenId
(),
model
.
getReturnUrl
());
if
(
orderPO
.
getSource
()
==
PaySourceEnum
.
MWEB
){
result
.
setResult
(
rtObj
);
throw
new
BusinessException
(
"请从浏览器中支付"
);
}
else
if
(
orderPO
.
getSource
()
==
PaySourceEnum
.
JSAPI
){
throw
new
BusinessException
(
"请从微信浏览器中支付"
);
}
}
ProductOrderStatusEnum
status
=
queryFromThirdPlatform
(
orderPO
.
getOrderNo
(),
orderPO
.
getPayMethod
());
if
(
status
==
ProductOrderStatusEnum
.
WAIT_PAY
){
Object
rtObj
=
prePay
(
orderPO
,
model
.
getSource
(),
model
.
getOpenId
(),
model
.
getReturnUrl
());
result
.
setResult
(
rtObj
);
return
result
;
}
else
if
(
status
==
ProductOrderStatusEnum
.
PAY_COMPLETE
){
throw
new
BusinessException
(
"订单已支付完成,请不要重覆下单"
);
}
else
if
(
status
==
ProductOrderStatusEnum
.
PAY_CLOSE
){
throw
new
BusinessException
(
"订单已关闭,请重新下单"
);
}
return
result
;
return
result
;
}
}
/**
* 定时检查未支付订单的状态(取30分钟前的订单)
*/
public
void
checkProductOrder
()
{
LocalDateTime
now
=
LocalDateTime
.
now
();
LocalDateTime
endTime
=
now
.
minusMinutes
(
30
);
List
<
ProductOrderPO
>
orderList
=
list
(
Wrappers
.<
ProductOrderPO
>
lambdaQuery
()
.
eq
(
ProductOrderPO:
:
getStatus
,
ProductOrderStatusEnum
.
WAIT_PAY
)
.
le
(
BasePO:
:
getCreateTime
,
endTime
));
for
(
ProductOrderPO
order
:
orderList
){
ProductOrderStatusEnum
status
=
queryFromThirdPlatform
(
order
.
getOrderNo
(),
order
.
getPayMethod
());
if
(
status
==
ProductOrderStatusEnum
.
WAIT_PAY
){
closeOrder
(
order
.
getOrderNo
(),
order
.
getPayMethod
());
}
}
}
private
void
closeOrder
(
String
orderNo
,
PayMethodEnum
payMethod
)
{
if
(
payMethod
==
PayMethodEnum
.
WeiXin
){
try
{
WxPayOrderCloseResult
result
=
wxService
.
closeOrder
(
orderNo
);
if
(
result
.
getResultCode
().
equals
(
"SUCCESS"
)){
if
(
result
.
getResultCode
().
equals
(
"SUCCESS"
)){
//关单成功
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
}
else
if
(
result
.
getErrCode
().
equals
(
"ORDERPAID"
)){
//订单已支付
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
}
else
if
(
result
.
getErrCode
().
equals
(
"ORDERCLOSED"
)){
//订单已关闭
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
}
}
else
{
log
.
error
(
JSONObject
.
toJSONString
(
result
));
}
}
catch
(
WxPayException
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
else
if
(
payMethod
==
PayMethodEnum
.
AliPay
){
try
{
AlipayTradeCloseResponse
response
=
alipayService
.
closeOrder
(
orderNo
);
if
(
response
.
isSuccess
()){
//关单成功
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_CLOSE
);
}
else
{
//关单失败
log
.
error
(
JSONObject
.
toJSONString
(
response
));
}
}
catch
(
AlipayApiException
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
}
}
}
\ No newline at end of file
src/main/java/com/qkdata/biz/management/service/TimeTaskService.java
View file @
adb18f33
...
@@ -25,12 +25,14 @@ public class TimeTaskService {
...
@@ -25,12 +25,14 @@ public class TimeTaskService {
private
RedisTemplate
redisTemplate
;
private
RedisTemplate
redisTemplate
;
@Autowired
@Autowired
private
CourseConsumeRecordService
recordService
;
private
CourseConsumeRecordService
recordService
;
@Autowired
private
ProductOrderService
productOrderService
;
/**
/**
* 每
30
分钟执行一次
* 每
5
分钟执行一次
*/
*/
@Scheduled
(
cron
=
"0
*
/5 * * * ?"
)
@Scheduled
(
cron
=
"0
0
/5 * * * ?"
)
public
void
saveConsumeRecord
(){
public
void
saveConsumeRecord
(){
log
.
debug
(
"TimeTaskService saveConsumeRecord excute start================="
);
log
.
debug
(
"TimeTaskService saveConsumeRecord excute start================="
);
Set
<
String
>
keys
=
redisTemplate
.
opsForHash
().
keys
(
BizConstants
.
CACHE_KE_CONSUME_RECORD
);
Set
<
String
>
keys
=
redisTemplate
.
opsForHash
().
keys
(
BizConstants
.
CACHE_KE_CONSUME_RECORD
);
...
@@ -45,4 +47,14 @@ public class TimeTaskService {
...
@@ -45,4 +47,14 @@ public class TimeTaskService {
}
}
log
.
debug
(
"TimeTaskService saveConsumeRecord excute end================="
);
log
.
debug
(
"TimeTaskService saveConsumeRecord excute end================="
);
}
}
/**
* 每隔1分名检查未支付订单状态
*/
@Scheduled
(
cron
=
"0 0/1 * * * ?"
)
public
void
checkProductOrder
(){
log
.
debug
(
"TimeTaskService checkProductOrder excute start================="
);
productOrderService
.
checkProductOrder
();
log
.
debug
(
"TimeTaskService checkProductOrder excute end================="
);
}
}
}
src/main/java/com/qkdata/wx/pay/controller/WxPayNotifyController.java
View file @
adb18f33
...
@@ -43,9 +43,6 @@ public class WxPayNotifyController {
...
@@ -43,9 +43,6 @@ public class WxPayNotifyController {
}
catch
(
WxPayException
e
){
}
catch
(
WxPayException
e
){
log
.
error
(
e
.
getMessage
(),
e
);
log
.
error
(
e
.
getMessage
(),
e
);
if
(
null
!=
outTradeNo
){
orderService
.
updateStatus
(
outTradeNo
,
ProductOrderStatusEnum
.
PAY_FAILD
);
}
}
}
return
WxPayNotifyResponse
.
success
(
"OK"
);
return
WxPayNotifyResponse
.
success
(
"OK"
);
}
}
...
...
src/main/resources/application-dev.yml
View file @
adb18f33
...
@@ -24,9 +24,14 @@ sms:
...
@@ -24,9 +24,14 @@ sms:
api
:
api
:
v3
:
http://localhost:9004/sms/api/v3
v3
:
http://localhost:9004/sms/api/v3
## 支付宝沙箱环境
## 支付宝沙箱环境
#alipay:
# appId: 2021000117670831
# url: https://openapi.alipaydev.com/gateway.do
# appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJOkoU54PfkfL6LktJzYRvWGQjXptV0Y2w3h35Zf4yjfIKjAXLumiNE00XCWcsR2HWbx23SpcHLlk9peUd1+OKGkk1D4Ts99r/5OimRmVjnF+/pRPtooCMEa1ub6NO2IPTnyz/jxn4gXsGlKRVIMP7Sa9xVodZib4IXWemf7+jysQuG1R5kN9ClkQi+WIv4MExueUJiu2tyhDnuvk/vIDGP3tTbY1myedqx/StZIu2zQRul/KIDKkNUmXVds0F9QbnwK7AdcQwyCyy86XQzytq0GNPqL83YZGEvmH0mJ4nfkWKpyHzOLmkhvkKzOD3rRi8HtV7YUMTWN3v3vHrRE/pAgMBAAECggEAJK/puFcA4ZeSXyJbTHreaio2c2JKoxHoEJ4BY3jKEdfzGrC+p+3JH9ZGKN+BrsvSs1J3nlYZtHjGsP2WGHlsQrKuWboxbm0BJqKbNEDjwFLBImpOvpxQQ6JCPKEqBt1JuRz4Gca3ScHME0FQAdZFrvvPJLzeaKiznmbiXBgRMweRW704Nk2HfM3Uo7x2PS3BiCDdaQ0CXnj63EWHCteyLf4TlgV7qlk0OG9uh9RWm5xRC5/ucscc8oa8BdC/fLdAh7T2XIHFtVhEe+KPYvobJ3lFZlRb/jhKlu79wWXC08zoQrunCesvsB/RrLDTHk0FV29h1qv3BneOLFVDiwj6BQKBgQC9dXcDmRx7kZcA/dDz13RljWo0kmuYQt1h1dI1a7GgqcIdI5jdwOf3vVN7Ctge6YLaG+ptiaXU+SAMN1HQnqzN5DlKn2Q7hN66I+KQjfOYggnDEscOIPEaY/avAsSVZObZu+bK/XDIbypDDl4dELvVQy8ckd4CCCKC8QduqObu8wKBgQC5bKQzIrvtmaEhqbjvP83CZyiGG/GB3zzogJUKA6nm0oKiURHldoA5UozYyvbu3sBBuw81NQYuMMBVBZgO3XIFc7hHVqyn93dHgzOxUFYk2bhliVg9siFg6n3YQWvxIDkP6NGVhCXPLL+0H33rcBCjgQyxJyUa35rAzovFWu7UswKBgQClvrvNxAcs+2N1lJdWm6jSpvLA50+Ftwlh6+OopHyTJ7AQOfIkHf1RuKntvMDx2iuFkGJ4TbFsLj4hMcw7jHV08jJE3Eid4VHQ2k/9UpJHW4wawrSt4ZfMFKPc27kLUWi8FyyDbVFbqBT68PjYyKjqm4n9nobwlBlNIHv2DYFqjQKBgDWUH+oqujTQtI+elDKFtDXdSwddYa6OS/I+3VH0dw6ce2Tdmhc845YstUgbdbjWIqWboKxWMv/71Ed9A1AgSscqhfAPKnqqdgvy7Gfq98lUJAUq55WEOELh3xUy6jbVgceIFa9nbOltW8N3ahIy4ovsSTeTQRR/0h6uUBLp0KMjAoGAHJBJOAnS8csXYIIMArXcxCUgnC90sMQ9DySaTxmtfTVAy7Gs1TnBLRpwWOg55u1KebVTgx5T6vU+KupNi5KAbuK/1so27XXCo7DAY83leJTn9UC4iyOSOhTyNBwvd8uDyT2XrxbesSTBLe1dT3QtXJwT4iBttKky9lsAQDHB13o=
# alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhBcqLFQhDttWG9Ffqzf8SNjYP/IzBHxUh9XxHVbUXFtDyCY4L0mZKfOCKKq9q7gC0D3wWEmP+OS4b/5oB7n0DgWExTb2lcStzwzISEyoRagGH38EWH77PgN97tsJw6p06nVTWr+0W60tb1FZeFmCNbqzEpuF22srRztKzfHfoyn8KyL5LcZ15JBPC8uuRT0fSh2txYrjvVuToh8tdMcLEL/LGj1h/E8ol7qSUfHkyQNyeWgP2YrzzmW9QvLuRYUS2ZjhMbbBbGpkq9Bf35kwNG3gvcb0y0cYXV9zR/OLgz0aRF7scDIICUYG9/9o0ezGaH4veaKCUC+8Zx9CqUUdZwIDAQAB
## 支付宝正式环境
alipay
:
alipay
:
appId
:
202100
0117670831
appId
:
202100
2147662648
url
:
https://openapi.alipay
dev
.com/gateway.do
url
:
https://openapi.alipay.com/gateway.do
appPrivateKey
:
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJOkoU54PfkfL6LktJzYRvWGQjXptV0Y2w3h35Zf4yjfIKjAXLumiNE00XCWcsR2HWbx23SpcHLlk9peUd1+OKGkk1D4Ts99r/5OimRmVjnF+/pRPtooCMEa1ub6NO2IPTnyz/jxn4gXsGlKRVIMP7Sa9xVodZib4IXWemf7+jysQuG1R5kN9ClkQi+WIv4MExueUJiu2tyhDnuvk/vIDGP3tTbY1myedqx/StZIu2zQRul/KIDKkNUmXVds0F9QbnwK7AdcQwyCyy86XQzytq0GNPqL83YZGEvmH0mJ4nfkWKpyHzOLmkhvkKzOD3rRi8HtV7YUMTWN3v3vHrRE/pAgMBAAECggEAJK/puFcA4ZeSXyJbTHreaio2c2JKoxHoEJ4BY3jKEdfzGrC+p+3JH9ZGKN+BrsvSs1J3nlYZtHjGsP2WGHlsQrKuWboxbm0BJqKbNEDjwFLBImpOvpxQQ6JCPKEqBt1JuRz4Gca3ScHME0FQAdZFrvvPJLzeaKiznmbiXBgRMweRW704Nk2HfM3Uo7x2PS3BiCDdaQ0CXnj63EWHCteyLf4TlgV7qlk0OG9uh9RWm5xRC5/ucscc8oa8BdC/fLdAh7T2XIHFtVhEe+KPYvobJ3lFZlRb/jhKlu79wWXC08zoQrunCesvsB/RrLDTHk0FV29h1qv3BneOLFVDiwj6BQKBgQC9dXcDmRx7kZcA/dDz13RljWo0kmuYQt1h1dI1a7GgqcIdI5jdwOf3vVN7Ctge6YLaG+ptiaXU+SAMN1HQnqzN5DlKn2Q7hN66I+KQjfOYggnDEscOIPEaY/avAsSVZObZu+bK/XDIbypDDl4dELvVQy8ckd4CCCKC8QduqObu8wKBgQC5bKQzIrvtmaEhqbjvP83CZyiGG/GB3zzogJUKA6nm0oKiURHldoA5UozYyvbu3sBBuw81NQYuMMBVBZgO3XIFc7hHVqyn93dHgzOxUFYk2bhliVg9siFg6n3YQWvxIDkP6NGVhCXPLL+0H33rcBCjgQyxJyUa35rAzovFWu7UswKBgQClvrvNxAcs+2N1lJdWm6jSpvLA50+Ftwlh6+OopHyTJ7AQOfIkHf1RuKntvMDx2iuFkGJ4TbFsLj4hMcw7jHV08jJE3Eid4VHQ2k/9UpJHW4wawrSt4ZfMFKPc27kLUWi8FyyDbVFbqBT68PjYyKjqm4n9nobwlBlNIHv2DYFqjQKBgDWUH+oqujTQtI+elDKFtDXdSwddYa6OS/I+3VH0dw6ce2Tdmhc845YstUgbdbjWIqWboKxWMv/71Ed9A1AgSscqhfAPKnqqdgvy7Gfq98lUJAUq55WEOELh3xUy6jbVgceIFa9nbOltW8N3ahIy4ovsSTeTQRR/0h6uUBLp0KMjAoGAHJBJOAnS8csXYIIMArXcxCUgnC90sMQ9DySaTxmtfTVAy7Gs1TnBLRpwWOg55u1KebVTgx5T6vU+KupNi5KAbuK/1so27XXCo7DAY83leJTn9UC4iyOSOhTyNBwvd8uDyT2XrxbesSTBLe1dT3QtXJwT4iBttKky9lsAQDHB13o=
appPrivateKey
:
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJOkoU54PfkfL6LktJzYRvWGQjXptV0Y2w3h35Zf4yjfIKjAXLumiNE00XCWcsR2HWbx23SpcHLlk9peUd1+OKGkk1D4Ts99r/5OimRmVjnF+/pRPtooCMEa1ub6NO2IPTnyz/jxn4gXsGlKRVIMP7Sa9xVodZib4IXWemf7+jysQuG1R5kN9ClkQi+WIv4MExueUJiu2tyhDnuvk/vIDGP3tTbY1myedqx/StZIu2zQRul/KIDKkNUmXVds0F9QbnwK7AdcQwyCyy86XQzytq0GNPqL83YZGEvmH0mJ4nfkWKpyHzOLmkhvkKzOD3rRi8HtV7YUMTWN3v3vHrRE/pAgMBAAECggEAJK/puFcA4ZeSXyJbTHreaio2c2JKoxHoEJ4BY3jKEdfzGrC+p+3JH9ZGKN+BrsvSs1J3nlYZtHjGsP2WGHlsQrKuWboxbm0BJqKbNEDjwFLBImpOvpxQQ6JCPKEqBt1JuRz4Gca3ScHME0FQAdZFrvvPJLzeaKiznmbiXBgRMweRW704Nk2HfM3Uo7x2PS3BiCDdaQ0CXnj63EWHCteyLf4TlgV7qlk0OG9uh9RWm5xRC5/ucscc8oa8BdC/fLdAh7T2XIHFtVhEe+KPYvobJ3lFZlRb/jhKlu79wWXC08zoQrunCesvsB/RrLDTHk0FV29h1qv3BneOLFVDiwj6BQKBgQC9dXcDmRx7kZcA/dDz13RljWo0kmuYQt1h1dI1a7GgqcIdI5jdwOf3vVN7Ctge6YLaG+ptiaXU+SAMN1HQnqzN5DlKn2Q7hN66I+KQjfOYggnDEscOIPEaY/avAsSVZObZu+bK/XDIbypDDl4dELvVQy8ckd4CCCKC8QduqObu8wKBgQC5bKQzIrvtmaEhqbjvP83CZyiGG/GB3zzogJUKA6nm0oKiURHldoA5UozYyvbu3sBBuw81NQYuMMBVBZgO3XIFc7hHVqyn93dHgzOxUFYk2bhliVg9siFg6n3YQWvxIDkP6NGVhCXPLL+0H33rcBCjgQyxJyUa35rAzovFWu7UswKBgQClvrvNxAcs+2N1lJdWm6jSpvLA50+Ftwlh6+OopHyTJ7AQOfIkHf1RuKntvMDx2iuFkGJ4TbFsLj4hMcw7jHV08jJE3Eid4VHQ2k/9UpJHW4wawrSt4ZfMFKPc27kLUWi8FyyDbVFbqBT68PjYyKjqm4n9nobwlBlNIHv2DYFqjQKBgDWUH+oqujTQtI+elDKFtDXdSwddYa6OS/I+3VH0dw6ce2Tdmhc845YstUgbdbjWIqWboKxWMv/71Ed9A1AgSscqhfAPKnqqdgvy7Gfq98lUJAUq55WEOELh3xUy6jbVgceIFa9nbOltW8N3ahIy4ovsSTeTQRR/0h6uUBLp0KMjAoGAHJBJOAnS8csXYIIMArXcxCUgnC90sMQ9DySaTxmtfTVAy7Gs1TnBLRpwWOg55u1KebVTgx5T6vU+KupNi5KAbuK/1so27XXCo7DAY83leJTn9UC4iyOSOhTyNBwvd8uDyT2XrxbesSTBLe1dT3QtXJwT4iBttKky9lsAQDHB13o=
alipayPublicKey
:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhBcqLFQhDttWG9Ffqzf8SNjYP/IzBHxUh9XxHVbUXFtDyCY4L0mZKfOCKKq9q7gC0D3wWEmP+OS4b/5oB7n0DgWExTb2lcStzwzISEyoRagGH38EWH77PgN97tsJw6p06nVTWr+0W60tb1FZeFmCNbqzEpuF22srRztKzfHfoyn8KyL5LcZ15JBPC8uuRT0fSh2txYrjvVuToh8tdMcLEL/LGj1h/E8ol7qSUfHkyQNyeWgP2YrzzmW9QvLuRYUS2ZjhMbbBbGpkq9Bf35kwNG3gvcb0y0cYXV9zR/OLgz0aRF7scDIICUYG9/9o0ezGaH4veaKCUC+8Zx9CqUUdZwIDAQAB
alipayPublicKey
:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAigumfaT5OI9WRVkZKC6lU95MaxCwNvcyRo+oQlItuhQLJexyIcLk87i4WWEmkkZOu8SLsPazkn18QeMnMwy98Pm1iGZCBmwFnj3UNq0qm5lfmpao945QKskArKVr/kkRMBNNm6INGpsppZAvBaBsiiSw4jrrgTE9AP3SvPQ2rykiZaU5Kcn7nMUueZt2aYIbJrpQ70mcl18sZILDPL0vNQJ1pIFMJN6B/BxSJDfi5Bbh2fiwOu+qVivBfYbCJuHpx2RWGA7jknGsnXHUHfAekAlFhtwGpa+fvpQPoB1jRPmvi8VQGJA+zU6lunxcRxpTEVGr1ryeeTUFIixQY9XNuQIDAQAB
src/main/resources/db/migration/V1.0.14__update.sql
0 → 100644
View file @
adb18f33
ALTER
TABLE
`product_order`
ADD
COLUMN
`source`
varchar
(
20
)
NULL
COMMENT
'支付来源'
AFTER
`pay_method`
;
\ No newline at end of file
src/main/resources/mappers/management/course_consume_recordMapper.xml
View file @
adb18f33
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
(
(
SELECT *
SELECT *
from course_consume_record
from course_consume_record
WHERE user_id = #{userId}
WHERE user_id = #{
p.
userId}
and is_del = 0
and is_del = 0
ORDER BY update_time desc,course_id ASC LIMIT 100000
ORDER BY update_time desc,course_id ASC LIMIT 100000
) t
) t
...
@@ -52,6 +52,6 @@
...
@@ -52,6 +52,6 @@
INNER JOIN course c on r.course_id = c.id
INNER JOIN course c on r.course_id = c.id
INNER JOIN course_chapter chapter on chapter.id = r.chapter_id
INNER JOIN course_chapter chapter on chapter.id = r.chapter_id
INNER JOIN resource res ON res.id = chapter.resource_id
INNER JOIN resource res ON res.id = chapter.resource_id
ORDER BY r.update_time DESC
;
ORDER BY r.update_time DESC
</select>
</select>
</mapper>
</mapper>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment