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
69f9daef
Commit
69f9daef
authored
Oct 12, 2019
by
beaver383
Browse files
团购拼团和超期取消
parent
6cb8bc4d
Changes
4
Hide whitespace changes
Inline
Side-by-side
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java
View file @
69f9daef
...
...
@@ -3,11 +3,8 @@ package org.linlinjava.litemall.admin.job;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.core.system.SystemConfig
;
import
org.linlinjava.litemall.db.domain.LitemallOrder
;
import
org.linlinjava.litemall.db.domain.LitemallOrderGoods
;
import
org.linlinjava.litemall.db.service.LitemallGoodsProductService
;
import
org.linlinjava.litemall.db.service.LitemallOrderGoodsService
;
import
org.linlinjava.litemall.db.service.LitemallOrderService
;
import
org.linlinjava.litemall.db.domain.*
;
import
org.linlinjava.litemall.db.service.*
;
import
org.linlinjava.litemall.db.util.OrderUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
...
...
@@ -30,6 +27,10 @@ public class OrderJob {
private
LitemallOrderService
orderService
;
@Autowired
private
LitemallGoodsProductService
productService
;
@Autowired
private
LitemallGrouponService
grouponService
;
@Autowired
private
LitemallGrouponRulesService
rulesService
;
/**
* 自动取消订单
...
...
@@ -50,20 +51,9 @@ public class OrderJob {
// 设置订单已取消状态
order
.
setOrderStatus
(
OrderUtil
.
STATUS_AUTO_CANCEL
);
order
.
setEndTime
(
LocalDateTime
.
now
());
if
(
orderService
.
updateWithOptimisticLocker
(
order
)
==
0
)
{
throw
new
RuntimeException
(
"更新数据已失效"
);
}
// 商品货品数量增加
Integer
orderId
=
order
.
getId
();
List
<
LitemallOrderGoods
>
orderGoodsList
=
orderGoodsService
.
queryByOid
(
orderId
);
for
(
LitemallOrderGoods
orderGoods
:
orderGoodsList
)
{
Integer
productId
=
orderGoods
.
getProductId
();
Short
number
=
orderGoods
.
getNumber
();
if
(
productService
.
addStock
(
productId
,
number
)
==
0
)
{
throw
new
RuntimeException
(
"商品货品库存增加失败"
);
}
}
cancelOrderScope
(
order
);
logger
.
info
(
"订单 ID"
+
order
.
getId
()
+
" 已经超期自动取消订单"
);
}
}
...
...
@@ -120,4 +110,55 @@ public class OrderJob {
}
}
}
/**
* 团购订单拼团超期自动取消
*/
@Scheduled
(
initialDelay
=
5000
,
fixedDelay
=
10
*
60
*
1000
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
checkGrouponOrderTimeout
()
{
logger
.
info
(
"系统开启任务检查团购订单是否已经拼团超期自动取消订单"
);
List
<
LitemallGroupon
>
grouponList
=
grouponService
.
queryJoinRecord
(
0
);
for
(
LitemallGroupon
groupon
:
grouponList
)
{
LitemallGrouponRules
rules
=
rulesService
.
queryById
(
groupon
.
getRulesId
());
if
(
rulesService
.
isExpired
(
rules
))
{
List
<
LitemallGroupon
>
subGrouponList
=
grouponService
.
queryJoinRecord
(
groupon
.
getId
());
for
(
LitemallGroupon
subGroupon
:
subGrouponList
)
{
cancelGrouponScope
(
subGroupon
);
}
cancelGrouponScope
(
groupon
);
}
}
}
private
void
cancelGrouponScope
(
LitemallGroupon
groupon
)
{
LitemallOrder
order
=
orderService
.
findById
(
groupon
.
getOrderId
());
if
(
order
.
getOrderStatus
().
equals
(
OrderUtil
.
STATUS_PAY_GROUPON
))
{
order
.
setOrderStatus
(
OrderUtil
.
STATUS_TIMEOUT_GROUPON
);
order
.
setEndTime
(
LocalDateTime
.
now
());
cancelOrderScope
(
order
);
logger
.
info
(
"团购订单 ID"
+
order
.
getId
()
+
" 已经拼团超期自动取消订单"
);
}
}
private
void
cancelOrderScope
(
LitemallOrder
order
)
{
if
(
orderService
.
updateWithOptimisticLocker
(
order
)
==
0
)
{
throw
new
RuntimeException
(
"更新数据已失效"
);
}
// 商品货品数量增加
Integer
orderId
=
order
.
getId
();
List
<
LitemallOrderGoods
>
orderGoodsList
=
orderGoodsService
.
queryByOid
(
orderId
);
for
(
LitemallOrderGoods
orderGoods
:
orderGoodsList
)
{
Integer
productId
=
orderGoods
.
getProductId
();
Short
number
=
orderGoods
.
getNumber
();
if
(
productService
.
addStock
(
productId
,
number
)
==
0
)
{
throw
new
RuntimeException
(
"商品货品库存增加失败"
);
}
}
}
}
litemall-admin/src/views/mall/order.vue
View file @
69f9daef
...
...
@@ -39,7 +39,7 @@
<
template
slot-scope=
"scope"
>
<el-button
v-permission=
"['GET /admin/order/detail']"
type=
"primary"
size=
"mini"
@
click=
"handleDetail(scope.row)"
>
详情
</el-button>
<el-button
v-permission=
"['POST /admin/order/ship']"
v-if=
"scope.row.orderStatus==201"
type=
"primary"
size=
"mini"
@
click=
"handleShip(scope.row)"
>
发货
</el-button>
<el-button
v-permission=
"['POST /admin/order/refund']"
v-if=
"scope.row.orderStatus==202"
type=
"primary"
size=
"mini"
@
click=
"handleRefund(scope.row)"
>
退款
</el-button>
<el-button
v-permission=
"['POST /admin/order/refund']"
v-if=
"scope.row.orderStatus==202
||scope.row.orderStatus==204
"
type=
"primary"
size=
"mini"
@
click=
"handleRefund(scope.row)"
>
退款
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -151,9 +151,11 @@ const statusMap = {
101
:
'
未付款
'
,
102
:
'
用户取消
'
,
103
:
'
系统取消
'
,
200
:
'
已付款团购
'
,
201
:
'
已付款
'
,
202
:
'
申请退款
'
,
203
:
'
已退款
'
,
204
:
'
已超时团购
'
,
301
:
'
已发货
'
,
401
:
'
用户收货
'
,
402
:
'
系统收货
'
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/util/OrderUtil.java
View file @
69f9daef
...
...
@@ -30,6 +30,8 @@ public class OrderUtil {
public
static
final
Short
STATUS_REFUND
=
202
;
public
static
final
Short
STATUS_REFUND_CONFIRM
=
203
;
public
static
final
Short
STATUS_AUTO_CONFIRM
=
402
;
public
static
final
Short
STATUS_PAY_GROUPON
=
200
;
public
static
final
Short
STATUS_TIMEOUT_GROUPON
=
204
;
public
static
String
orderStatusText
(
LitemallOrder
order
)
{
...
...
@@ -47,6 +49,10 @@ public class OrderUtil {
return
"已取消(系统)"
;
}
if
(
status
==
200
)
{
return
"已付款团购"
;
}
if
(
status
==
201
)
{
return
"已付款"
;
}
...
...
@@ -59,6 +65,10 @@ public class OrderUtil {
return
"已退款"
;
}
if
(
status
==
204
)
{
return
"已超时团购"
;
}
if
(
status
==
301
)
{
return
"已发货"
;
}
...
...
@@ -86,10 +96,10 @@ public class OrderUtil {
}
else
if
(
status
==
102
||
status
==
103
)
{
// 如果订单已经取消或是已完成,则可删除
handleOption
.
setDelete
(
true
);
}
else
if
(
status
==
201
)
{
}
else
if
(
status
==
200
||
status
==
201
)
{
// 如果订单已付款,没有发货,则可退款
handleOption
.
setRefund
(
true
);
}
else
if
(
status
==
202
)
{
}
else
if
(
status
==
202
||
status
==
204
)
{
// 如果订单申请退款中,没有相关操作
}
else
if
(
status
==
203
)
{
// 如果订单已经退款,则可删除
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java
View file @
69f9daef
...
...
@@ -660,6 +660,37 @@ public class WxOrderService {
if
(
grouponService
.
updateById
(
groupon
)
==
0
)
{
return
WxPayNotifyResponse
.
fail
(
"更新数据已失效"
);
}
// 团购已达成,更新关联订单支付状态
if
(
groupon
.
getGrouponId
()
>
0
)
{
List
<
LitemallGroupon
>
grouponList
=
grouponService
.
queryJoinRecord
(
groupon
.
getGrouponId
());
if
(
grouponList
.
size
()
>=
grouponRules
.
getDiscountMember
()
-
1
)
{
for
(
LitemallGroupon
grouponActivity
:
grouponList
)
{
if
(
grouponActivity
.
getOrderId
().
equals
(
order
.
getId
()))
{
//当前订单
continue
;
}
LitemallOrder
grouponOrder
=
orderService
.
findById
(
grouponActivity
.
getOrderId
());
if
(
grouponOrder
.
getOrderStatus
().
equals
(
OrderUtil
.
STATUS_PAY_GROUPON
))
{
grouponOrder
.
setOrderStatus
(
OrderUtil
.
STATUS_PAY
);
orderService
.
updateWithOptimisticLocker
(
grouponOrder
);
}
}
LitemallGroupon
grouponSource
=
grouponService
.
queryById
(
groupon
.
getGrouponId
());
LitemallOrder
grouponOrder
=
orderService
.
findById
(
grouponSource
.
getOrderId
());
if
(
grouponOrder
.
getOrderStatus
().
equals
(
OrderUtil
.
STATUS_PAY_GROUPON
))
{
grouponOrder
.
setOrderStatus
(
OrderUtil
.
STATUS_PAY
);
orderService
.
updateWithOptimisticLocker
(
grouponOrder
);
}
}
}
else
{
order
=
orderService
.
findBySn
(
orderSn
);
order
.
setOrderStatus
(
OrderUtil
.
STATUS_PAY_GROUPON
);
orderService
.
updateWithOptimisticLocker
(
order
);
}
}
//TODO 发送邮件和短信通知,这里采用异步发送
...
...
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