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
e97e32fc
Unverified
Commit
e97e32fc
authored
Jul 16, 2018
by
Menethil
Committed by
GitHub
Jul 16, 2018
Browse files
Merge pull request #3 from linlinjava/master
更新Fork
parents
f24cd534
ac54c1f4
Changes
7
Hide whitespace changes
Inline
Side-by-side
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java
View file @
e97e32fc
...
...
@@ -4,12 +4,11 @@ import org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.core.util.JacksonUtil
;
import
org.linlinjava.litemall.db.domain.LitemallOrder
;
import
org.linlinjava.litemall.db.domain.LitemallOrderGoods
;
import
org.linlinjava.litemall.db.domain.LitemallProduct
;
import
org.linlinjava.litemall.db.domain.*
;
import
org.linlinjava.litemall.db.service.LitemallOrderGoodsService
;
import
org.linlinjava.litemall.db.service.LitemallOrderService
;
import
org.linlinjava.litemall.db.service.LitemallProductService
;
import
org.linlinjava.litemall.db.service.LitemallUserService
;
import
org.linlinjava.litemall.db.util.OrderHandleOption
;
import
org.linlinjava.litemall.db.util.OrderUtil
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
...
...
@@ -41,18 +40,20 @@ public class AdminOrderController {
private
LitemallOrderService
orderService
;
@Autowired
private
LitemallProductService
productService
;
@Autowired
private
LitemallUserService
userService
;
@GetMapping
(
"/list"
)
public
Object
list
(
@LoginAdmin
Integer
adminId
,
Integer
userId
,
String
orderSn
,
Integer
userId
,
String
orderSn
,
@RequestParam
(
required
=
false
,
value
=
"orderStatusArray[]"
)
List
<
Short
>
orderStatusArray
,
@RequestParam
(
value
=
"page"
,
defaultValue
=
"1"
)
Integer
page
,
@RequestParam
(
value
=
"limit"
,
defaultValue
=
"10"
)
Integer
limit
,
String
sort
,
String
order
){
if
(
adminId
==
null
){
return
ResponseUtil
.
unlogin
();
}
List
<
LitemallOrder
>
orderList
=
orderService
.
querySelective
(
userId
,
orderSn
,
page
,
limit
,
sort
,
order
);
int
total
=
orderService
.
countSelective
(
userId
,
orderSn
,
page
,
limit
,
sort
,
order
);
List
<
LitemallOrder
>
orderList
=
orderService
.
querySelective
(
userId
,
orderSn
,
orderStatusArray
,
page
,
limit
,
sort
,
order
);
int
total
=
orderService
.
countSelective
(
userId
,
orderSn
,
orderStatusArray
,
page
,
limit
,
sort
,
order
);
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
data
.
put
(
"total"
,
total
);
...
...
@@ -61,6 +62,23 @@ public class AdminOrderController {
return
ResponseUtil
.
ok
(
data
);
}
@GetMapping
(
"/detail"
)
public
Object
detail
(
@LoginAdmin
Integer
adminId
,
Integer
id
)
{
if
(
adminId
==
null
){
return
ResponseUtil
.
unlogin
();
}
LitemallOrder
order
=
orderService
.
findById
(
id
);
List
<
LitemallOrderGoods
>
orderGoods
=
orderGoodsService
.
queryByOid
(
id
);
UserVo
user
=
userService
.
findUserVoById
(
order
.
getUserId
());
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
data
.
put
(
"order"
,
order
);
data
.
put
(
"orderGoods"
,
orderGoods
);
data
.
put
(
"user"
,
user
);
return
ResponseUtil
.
ok
(
data
);
}
/**
* 订单退款确认
* 1. 检测当前订单是否能够退款确认
...
...
litemall-admin/src/api/order.js
View file @
e97e32fc
...
...
@@ -8,6 +8,14 @@ export function listOrder(query) {
})
}
export
function
detailOrder
(
id
)
{
return
request
({
url
:
'
/order/detail
'
,
method
:
'
get
'
,
params
:
{
id
}
})
}
export
function
shipOrder
(
data
)
{
return
request
({
url
:
'
/order/ship
'
,
...
...
litemall-admin/src/views/mall/order.vue
View file @
e97e32fc
...
...
@@ -7,6 +7,10 @@
</el-input>
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入订单编号"
v-model=
"listQuery.orderSn"
>
</el-input>
<el-select
multiple
style=
"width: 200px"
class=
"filter-item"
placeholder=
"请选择订单状态"
v-model=
"listQuery.orderStatusArray"
>
<el-option
v-for=
"(key, value) in statusMap"
:key=
"key"
:label=
"key"
:value=
"value"
>
</el-option>
</el-select>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleDownload"
:loading=
"downloadLoading"
>
导出
</el-button>
</div>
...
...
@@ -14,34 +18,36 @@
<!-- 查询结果 -->
<el-table
size=
"small"
:data=
"list"
v-loading=
"listLoading"
element-loading-text=
"正在查询中。。。"
border
fit
highlight-current-row
>
<el-table-column
type=
"expand"
>
<template
slot-scope=
"props"
>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
width=
"100px"
label=
"订单ID"
prop=
"id"
sortable
>
<el-table-column
align=
"center"
min-width=
"100"
label=
"订单编号"
prop=
"orderSn"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"用户ID"
prop=
"userId"
>
<el-table-column
align=
"center"
label=
"用户ID"
prop=
"userId"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"200px"
label=
"订单编号"
prop=
"orderSn"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"订单状态"
prop=
"orderStatus"
>
<el-table-column
align=
"center"
label=
"订单状态"
prop=
"orderStatus"
>
<template
slot-scope=
"scope"
>
<el-tag>
{{
scope
.
row
.
orderStatus
|
orderStatusFilter
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"订单费用"
prop=
"orderPrice"
>
<el-table-column
align=
"center"
label=
"订单金额"
prop=
"orderPrice"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"支付金额"
prop=
"actualPrice"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"实际费用"
prop=
"actualPrice"
>
<el-table-column
align=
"center"
label=
"支付时间"
prop=
"payTime"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"物流单号"
prop=
"shipSn"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"物流渠道"
prop=
"shipChannel"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"操作"
width=
"200"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleDetail(scope.row)"
>
详情
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleShip(scope.row)"
v-if=
"scope.row.orderStatus==201"
>
发货
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleRefund(scope.row)"
v-if=
"scope.row.orderStatus==202"
>
退款
</el-button>
</
template
>
...
...
@@ -55,6 +61,65 @@
</el-pagination>
</div>
<!-- 订单详情对话框 -->
<el-dialog
title=
"订单详情"
width=
"800"
:visible.sync=
"orderDialogVisible"
>
<el-form
:data=
"orderDetail"
label-position=
"left"
>
<el-form-item
label=
"订单编号"
>
<span>
{{ orderDetail.order.orderSn }}
</span>
</el-form-item>
<el-form-item
label=
"订单状态"
>
<
template
slot-scope=
"scope"
>
<el-tag>
{{
orderDetail
.
order
.
orderStatus
|
orderStatusFilter
}}
</el-tag>
</
template
>
</el-form-item>
<el-form-item
label=
"订单用户"
>
<span>
{{ orderDetail.user.nickname }}
</span>
</el-form-item>
<el-form-item
label=
"收货信息"
>
<span>
(收货人){{ orderDetail.order.consignee }}
</span>
<span>
(手机号){{ orderDetail.order.mobile }}
</span>
<span>
(地址){{ orderDetail.order.address }}
</span>
</el-form-item>
<el-form-item
label=
"商品信息"
>
<el-table
size=
"small"
:data=
"orderDetail.orderGoods"
border
fit
highlight-current-row
>
<el-table-column
align=
"center"
label=
"商品名称"
prop=
"goodsName"
/>
<el-table-column
align=
"center"
label=
"商品编号"
prop=
"goodsSn"
/>
<el-table-column
align=
"center"
label=
"货品规格"
prop=
"specifications"
/>
<el-table-column
align=
"center"
label=
"货品价格"
prop=
"price"
/>
<el-table-column
align=
"center"
label=
"货品数量"
prop=
"number"
/>
<el-table-column
align=
"center"
label=
"货品图片"
prop=
"picUrl"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.picUrl"
width=
"40"
/>
</
template
>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item
label=
"费用信息"
>
<span>
(实际费用){{ orderDetail.order.actualPrice }}元 =
(商品总价){{ orderDetail.order.goodsPrice }}元 +
(快递费用){{ orderDetail.order.freightPrice }}元 -
(优惠减免){{ orderDetail.order.couponPrice }}元 -
(积分减免){{ orderDetail.order.integralPrice }}元
</span>
</el-form-item>
<el-form-item
label=
"支付信息"
>
<span>
(支付渠道)微信支付
</span>
<span>
(支付时间){{ orderDetail.order.payTime }}
</span>
</el-form-item>
<el-form-item
label=
"快递信息"
>
<span>
(快递公司){{ orderDetail.order.shipChannel }}
</span>
<span>
(快递单号){{ orderDetail.order.shipSn }}
</span>
<span>
(发货时间){{ orderDetail.order.shipTime }}
</span>
</el-form-item>
<el-form-item
label=
"收货信息"
>
<span>
(确认收货时间){{ orderDetail.order.confirmTime }}
</span>
</el-form-item>
</el-form>
</el-dialog>
<!-- 发货对话框 -->
<el-dialog
title=
"发货"
:visible.sync=
"shipDialogVisible"
>
<el-form
ref=
"shipForm"
:model=
"shipForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
...
...
@@ -88,21 +153,23 @@
</template>
<
style
>
.demo-table-expand
{
font-size
:
0
;
}
.demo-table-expand
label
{
width
:
200px
;
color
:
#99a9bf
;
}
.demo-table-expand
.el-form-item
{
margin-right
:
0
;
margin-bottom
:
0
;
}
</
style
>
<
script
>
import
{
listOrder
,
shipOrder
,
refundOrder
}
from
'
@/api/order
'
import
{
listOrder
,
shipOrder
,
refundOrder
,
detailOrder
}
from
'
@/api/order
'
const
statusMap
=
{
101
:
'
未付款
'
,
102
:
'
用户取消
'
,
103
:
'
系统取消
'
,
201
:
'
已付款
'
,
202
:
'
申请退款
'
,
203
:
'
已退款
'
,
301
:
'
已发货
'
,
401
:
'
用户收货
'
,
402
:
'
系统收货
'
}
export
default
{
name
:
'
Order
'
,
...
...
@@ -116,9 +183,17 @@ export default {
limit
:
20
,
id
:
undefined
,
name
:
undefined
,
orderStatusArray
:
[],
sort
:
'
add_time
'
,
order
:
'
desc
'
},
statusMap
,
orderDialogVisible
:
false
,
orderDetail
:
{
order
:
{},
user
:
{},
orderGoods
:
[]
},
shipForm
:
{
orderId
:
undefined
,
shipChannel
:
undefined
,
...
...
@@ -135,17 +210,6 @@ export default {
},
filters
:
{
orderStatusFilter
(
status
)
{
const
statusMap
=
{
'
101
'
:
'
未付款
'
,
'
102
'
:
'
已取消
'
,
'
103
'
:
'
已取消
'
,
'
201
'
:
'
已付款
'
,
'
202
'
:
'
申请退款
'
,
'
203
'
:
'
已退款
'
,
'
301
'
:
'
已发货
'
,
'
401
'
:
'
确认收货
'
,
'
402
'
:
'
确认收货
'
}
return
statusMap
[
status
]
}
},
...
...
@@ -177,6 +241,12 @@ export default {
this
.
listQuery
.
page
=
val
this
.
getList
()
},
handleDetail
(
row
)
{
detailOrder
(
row
.
id
).
then
(
response
=>
{
this
.
orderDetail
=
response
.
data
.
data
})
this
.
orderDialogVisible
=
true
},
handleShip
(
row
)
{
this
.
shipForm
.
orderId
=
row
.
id
this
.
shipForm
.
shipChannel
=
row
.
shipChannel
...
...
@@ -232,7 +302,7 @@ export default {
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
tHeader
=
[
'
订单ID
'
,
'
订单编号
'
,
'
用户ID
'
,
'
订单状态
'
,
'
是否删除
'
,
'
收货人
'
,
'
收货联系电话
'
,
'
收货地址
'
]
const
filterVal
=
[
'
id
'
,
'
orderSn
'
,
'
userId
'
,
'
orderStat
i
s
'
,
'
isDelete
'
,
'
consignee
'
,
'
mobile
'
,
'
address
'
]
const
filterVal
=
[
'
id
'
,
'
orderSn
'
,
'
userId
'
,
'
orderStat
u
s
'
,
'
isDelete
'
,
'
consignee
'
,
'
mobile
'
,
'
address
'
]
excel
.
export_json_to_excel2
(
tHeader
,
this
.
list
,
filterVal
,
'
订单信息
'
)
this
.
downloadLoading
=
false
})
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/domain/UserVo.java
0 → 100644
View file @
e97e32fc
package
org.linlinjava.litemall.db.domain
;
public
class
UserVo
{
private
String
nickname
;
private
String
avatar
;
public
String
getNickname
()
{
return
nickname
;
}
public
void
setNickname
(
String
nickname
)
{
this
.
nickname
=
nickname
;
}
public
String
getAvatar
()
{
return
avatar
;
}
public
void
setAvatar
(
String
avatar
)
{
this
.
avatar
=
avatar
;
}
}
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java
View file @
e97e32fc
...
...
@@ -100,7 +100,7 @@ public class LitemallOrderService {
return
orderMapper
.
updateByPrimaryKeySelective
(
order
);
}
public
List
<
LitemallOrder
>
querySelective
(
Integer
userId
,
String
orderSn
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
public
List
<
LitemallOrder
>
querySelective
(
Integer
userId
,
String
orderSn
,
List
<
Short
>
orderStatusArray
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
LitemallOrderExample
example
=
new
LitemallOrderExample
();
LitemallOrderExample
.
Criteria
criteria
=
example
.
createCriteria
();
...
...
@@ -110,6 +110,9 @@ public class LitemallOrderService {
if
(!
StringUtils
.
isEmpty
(
orderSn
)){
criteria
.
andOrderSnEqualTo
(
orderSn
);
}
if
(
orderStatusArray
!=
null
&&
orderStatusArray
.
size
()
!=
0
){
criteria
.
andOrderStatusIn
(
orderStatusArray
);
}
criteria
.
andDeletedEqualTo
(
false
);
if
(!
StringUtils
.
isEmpty
(
sort
)
&&
!
StringUtils
.
isEmpty
(
order
))
{
...
...
@@ -120,7 +123,7 @@ public class LitemallOrderService {
return
orderMapper
.
selectByExample
(
example
);
}
public
int
countSelective
(
Integer
userId
,
String
orderSn
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
public
int
countSelective
(
Integer
userId
,
String
orderSn
,
List
<
Short
>
orderStatusArray
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
LitemallOrderExample
example
=
new
LitemallOrderExample
();
LitemallOrderExample
.
Criteria
criteria
=
example
.
createCriteria
();
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallUserService.java
View file @
e97e32fc
...
...
@@ -4,10 +4,13 @@ import com.github.pagehelper.PageHelper;
import
org.linlinjava.litemall.db.dao.LitemallUserMapper
;
import
org.linlinjava.litemall.db.domain.LitemallUser
;
import
org.linlinjava.litemall.db.domain.LitemallUserExample
;
import
org.linlinjava.litemall.db.domain.UserVo
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
LitemallUserService
{
...
...
@@ -18,6 +21,14 @@ public class LitemallUserService {
return
userMapper
.
selectByPrimaryKey
(
userId
);
}
public
UserVo
findUserVoById
(
Integer
userId
)
{
LitemallUser
user
=
findById
(
userId
);
UserVo
userVo
=
new
UserVo
();
userVo
.
setNickname
(
user
.
getNickname
());
userVo
.
setAvatar
(
user
.
getAvatar
());
return
userVo
;
}
public
LitemallUser
queryByOid
(
String
openId
)
{
LitemallUserExample
example
=
new
LitemallUserExample
();
example
.
or
().
andWeixinOpenidEqualTo
(
openId
).
andDeletedEqualTo
(
false
);
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java
View file @
e97e32fc
...
...
@@ -11,6 +11,7 @@ import org.linlinjava.litemall.wx.annotation.LoginUser;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -154,6 +155,7 @@ public class WxAddressController {
if
(
address
.
getId
()
==
null
||
address
.
getId
().
equals
(
0
))
{
address
.
setId
(
null
);
address
.
setAddTime
(
LocalDateTime
.
now
());
address
.
setUserId
(
userId
);
addressService
.
add
(
address
);
}
else
{
...
...
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