Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
285d1643
Commit
285d1643
authored
Nov 13, 2019
by
Junling Bu
Browse files
feat[litemall-wx-api]: 系统启动时,查询数据库,创建订单超时未支付任务
parent
31eb1481
Changes
6
Hide whitespace changes
Inline
Side-by-side
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java
View file @
285d1643
...
...
@@ -32,32 +32,6 @@ public class OrderJob {
@Autowired
private
LitemallGrouponRulesService
rulesService
;
/**
* 自动取消订单
* <p>
* 定时检查订单未付款情况,如果超时 LITEMALL_ORDER_UNPAID 分钟则自动取消订单
* 定时时间是每次相隔半个小时。
* <p>
* TODO
* 注意,因为是相隔半小时检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_UNPAID, 30 + LITEMALL_ORDER_UNPAID]
*/
@Scheduled
(
fixedDelay
=
30
*
60
*
1000
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
checkOrderUnpaid
()
{
logger
.
info
(
"系统开启任务检查订单是否已经超期自动取消订单"
);
List
<
LitemallOrder
>
orderList
=
orderService
.
queryUnpaid
(
SystemConfig
.
getOrderUnpaid
());
for
(
LitemallOrder
order
:
orderList
)
{
// 设置订单已取消状态
order
.
setOrderStatus
(
OrderUtil
.
STATUS_AUTO_CANCEL
);
order
.
setEndTime
(
LocalDateTime
.
now
());
cancelOrderScope
(
order
);
logger
.
info
(
"订单 ID"
+
order
.
getId
()
+
" 已经超期自动取消订单"
);
}
}
/**
* 自动确认订单
* <p>
...
...
@@ -69,7 +43,7 @@ public class OrderJob {
*/
@Scheduled
(
cron
=
"0 0 3 * * ?"
)
public
void
checkOrderUnconfirm
()
{
logger
.
info
(
"系统开启任务检查订单是否已经超期自动确认收货"
);
logger
.
info
(
"系统开启
定时
任务检查订单是否已经超期自动确认收货"
);
List
<
LitemallOrder
>
orderList
=
orderService
.
queryUnconfirm
(
SystemConfig
.
getOrderUnconfirm
());
for
(
LitemallOrder
order
:
orderList
)
{
...
...
@@ -117,7 +91,7 @@ public class OrderJob {
@Scheduled
(
initialDelay
=
5000
,
fixedDelay
=
10
*
60
*
1000
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
checkGrouponOrderTimeout
()
{
logger
.
info
(
"系统开启任务检查团购订单是否已经拼团超期自动取消订单"
);
logger
.
info
(
"系统开启
定时
任务检查团购订单是否已经拼团超期自动取消订单"
);
List
<
LitemallGroupon
>
grouponList
=
grouponService
.
queryJoinRecord
(
0
);
for
(
LitemallGroupon
groupon
:
grouponList
)
{
...
...
litemall-core/src/main/java/org/linlinjava/litemall/core/task/TaskService.java
View file @
285d1643
package
org.linlinjava.litemall.core.task
;
import
com.sun.org.apache.bcel.internal.generic.ARETURN
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
java.util.Iterator
;
import
java.util.concurrent.DelayQueue
;
import
java.util.concurrent.Executors
;
@Component
public
class
TaskService
{
private
TaskService
taskService
;
...
...
litemall-core/src/test/java/org/linlinjava/litemall/core/TaskTest.java
View file @
285d1643
...
...
@@ -68,4 +68,24 @@ public class TaskTest {
}
}
@Test
public
void
test1
()
{
DateTimeFormatter
df
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
String
now
=
df
.
format
(
LocalDateTime
.
now
());
System
.
out
.
println
(
"start at time="
+
now
);
taskService
.
addTask
(
new
DemoTask
(
"3"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"2"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"1"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"4"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"5"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"6"
,
0
));
try
{
Thread
.
sleep
(
10
*
1000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java
View file @
285d1643
...
...
@@ -126,10 +126,8 @@ public class LitemallOrderService {
}
public
List
<
LitemallOrder
>
queryUnpaid
(
int
minutes
)
{
LocalDateTime
now
=
LocalDateTime
.
now
();
LocalDateTime
expired
=
now
.
minusMinutes
(
minutes
);
LitemallOrderExample
example
=
new
LitemallOrderExample
();
example
.
or
().
andOrderStatusEqualTo
(
OrderUtil
.
STATUS_CREATE
).
andAddTimeLessThan
(
expired
).
andDeletedEqualTo
(
false
);
example
.
or
().
andOrderStatusEqualTo
(
OrderUtil
.
STATUS_CREATE
).
andDeletedEqualTo
(
false
);
return
litemallOrderMapper
.
selectByExample
(
example
);
}
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/task/OrderUnpaidTask.java
View file @
285d1643
...
...
@@ -19,6 +19,11 @@ public class OrderUnpaidTask extends Task {
private
final
Log
logger
=
LogFactory
.
getLog
(
OrderUnpaidTask
.
class
);
private
int
orderId
=
-
1
;
public
OrderUnpaidTask
(
Integer
orderId
,
long
delayInMilliseconds
){
super
(
"OrderUnpaidTask-"
+
orderId
,
delayInMilliseconds
);
this
.
orderId
=
orderId
;
}
public
OrderUnpaidTask
(
Integer
orderId
){
super
(
"OrderUnpaidTask-"
+
orderId
,
SystemConfig
.
getOrderUnpaid
()
*
60
*
1000
);
this
.
orderId
=
orderId
;
...
...
@@ -26,7 +31,7 @@ public class OrderUnpaidTask extends Task {
@Override
public
void
run
()
{
logger
.
info
(
"系统开始处理订单超时未付款
订单
"
+
this
.
orderId
);
logger
.
info
(
"系统开始处理
延时任务---
订单超时未付款
---
"
+
this
.
orderId
);
LitemallOrderService
orderService
=
BeanUtil
.
getBean
(
LitemallOrderService
.
class
);
LitemallOrderGoodsService
orderGoodsService
=
BeanUtil
.
getBean
(
LitemallOrderGoodsService
.
class
);
...
...
@@ -57,6 +62,6 @@ public class OrderUnpaidTask extends Task {
throw
new
RuntimeException
(
"商品货品库存增加失败"
);
}
}
logger
.
info
(
"系统
成功处理
订单超时未付款
订单
"
+
this
.
orderId
);
logger
.
info
(
"系统
结束处理延时任务---
订单超时未付款
---
"
+
this
.
orderId
);
}
}
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/task/TaskStartupRunner.java
0 → 100644
View file @
285d1643
package
org.linlinjava.litemall.wx.task
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.core.system.SystemConfig
;
import
org.linlinjava.litemall.core.task.TaskService
;
import
org.linlinjava.litemall.db.domain.LitemallOrder
;
import
org.linlinjava.litemall.db.service.LitemallOrderService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.ApplicationArguments
;
import
org.springframework.boot.ApplicationRunner
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.time.temporal.ChronoUnit
;
import
java.util.List
;
@Component
public
class
TaskStartupRunner
implements
ApplicationRunner
{
@Autowired
private
LitemallOrderService
orderService
;
@Autowired
private
TaskService
taskService
;
@Override
public
void
run
(
ApplicationArguments
args
)
throws
Exception
{
List
<
LitemallOrder
>
orderList
=
orderService
.
queryUnpaid
(
SystemConfig
.
getOrderUnpaid
());
for
(
LitemallOrder
order
:
orderList
){
LocalDateTime
add
=
order
.
getAddTime
();
LocalDateTime
now
=
LocalDateTime
.
now
();
LocalDateTime
expire
=
add
.
plusMinutes
(
SystemConfig
.
getOrderUnpaid
());
if
(
expire
.
isBefore
(
now
))
{
// 已经过期,则加入延迟队列
taskService
.
addTask
(
new
OrderUnpaidTask
(
order
.
getId
(),
0
));
}
else
{
// 还没过期,则加入延迟队列
long
delay
=
ChronoUnit
.
MILLIS
.
between
(
now
,
expire
);
taskService
.
addTask
(
new
OrderUnpaidTask
(
order
.
getId
(),
delay
));
}
}
}
}
\ No newline at end of file
Write
Preview
Supports
Markdown
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