Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
7fe2541e
提交
7fe2541e
authored
3月 31, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
6699bd34
5b51d529
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
28 个修改的文件
包含
1255 行增加
和
83 行删除
+1255
-83
config.js
admin-web/config/config.js
+1
-1
router.config.js
admin-web/config/router.config.js
+5
-0
index.js
admin-web/src/components/OrderTable/index.js
+8
-0
menu.js
admin-web/src/locales/zh-CN/menu.js
+2
-1
orderDelivery.js
admin-web/src/models/order/orderDelivery.js
+25
-0
orderList.js
admin-web/src/models/order/orderList.js
+65
-1
OrderCancel.js
admin-web/src/pages/Order/OrderCancel.js
+84
-0
OrderDelivery.js
admin-web/src/pages/Order/OrderDelivery.js
+5
-0
OrderDetails.js
admin-web/src/pages/Order/OrderDetails.js
+0
-0
OrderDetails.less
admin-web/src/pages/Order/OrderDetails.less
+49
-0
OrderList.js
admin-web/src/pages/Order/OrderList.js
+74
-35
OrderList.less
admin-web/src/pages/Order/OrderList.less
+25
-4
OrderRefunds.js
admin-web/src/pages/Order/OrderRefunds.js
+321
-0
OrderRemark.js
admin-web/src/pages/Order/OrderRemark.js
+56
-0
OrderUpdatePayAmount.js
admin-web/src/pages/Order/OrderUpdatePayAmount.js
+2
-2
order.js
admin-web/src/services/order.js
+21
-0
dictionary.js
admin-web/src/utils/dictionary.js
+1
-0
request.qs.js
admin-web/src/utils/request.qs.js
+3
-5
OrderService.java
...src/main/java/cn/iocoder/mall/order/api/OrderService.java
+8
-0
OrderBO.java
...i/src/main/java/cn/iocoder/mall/order/api/bo/OrderBO.java
+6
-6
OrderRecipientBO.java
...n/java/cn/iocoder/mall/order/api/bo/OrderRecipientBO.java
+103
-0
LogisticsEnum.java
...ava/cn/iocoder/mall/order/api/constant/LogisticsEnum.java
+41
-0
OrderDeliveryDTO.java
.../java/cn/iocoder/mall/order/api/dto/OrderDeliveryDTO.java
+122
-0
OrderRecipientConvert.java
...iocoder/mall/order/biz/convert/OrderRecipientConvert.java
+28
-0
OrderRecipientMapper.java
...a/cn/iocoder/mall/order/biz/dao/OrderRecipientMapper.java
+36
-0
OrderRecipientDO.java
...n/iocoder/mall/order/biz/dataobject/OrderRecipientDO.java
+103
-0
OrderServiceImpl.java
...a/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java
+26
-28
OrderRecipientMapper.xml
...e-impl/src/main/resources/mapper/OrderRecipientMapper.xml
+35
-0
没有找到文件。
admin-web/config/config.js
浏览文件 @
7fe2541e
...
...
@@ -65,7 +65,7 @@ if (APP_TYPE === 'site') {
export
default
{
// add for transfer to umi
base
:
basePath
,
publicPath
:
basePath
,
//
publicPath: basePath,
plugins
,
define
:
{
APP_TYPE
:
APP_TYPE
||
''
,
...
...
admin-web/config/router.config.js
浏览文件 @
7fe2541e
...
...
@@ -69,6 +69,11 @@ export default [
name
:
'order-list'
,
component
:
'./Order/OrderList'
,
},
{
path
:
'/order/order-refunds'
,
name
:
'order-refunds'
,
component
:
'./Order/OrderRefunds'
,
},
],
},
// product
...
...
admin-web/src/components/OrderTable/index.js
0 → 100644
浏览文件 @
7fe2541e
// import React, { PureComponent } from 'react';
// import {} from 'antd';
//
// export default class OrderTable extends PureComponent {
// render() {
// return <div>cc</div>;
// }
// }
admin-web/src/locales/zh-CN/menu.js
浏览文件 @
7fe2541e
...
...
@@ -52,6 +52,7 @@ export default {
// 订单
'menu.order'
:
'订单管理'
,
'menu.order.order-list'
:
'订单管理'
,
'menu.order.order-refunds'
:
'退货维权'
,
// 营销相关
'menu.promotion.promotion-banner-list'
:
'Banner 管理'
'menu.promotion.promotion-banner-list'
:
'Banner 管理'
,
};
admin-web/src/models/order/orderDelivery.js
0 → 100644
浏览文件 @
7fe2541e
// import { cancelOrder } from '../../services/order';
//
// export default {
// namespace: 'orderDelivery',
//
// state: {
// orderId: 0,
// visible: false,
// },
//
// effects: {
// *getLogistics({ payload }, { call, put }) {},
// },
//
// reducers: {
// changeVisible(state, { payload }) {
// const { orderId, visible } = payload;
// return {
// ...state,
// orderId,
// visible,
// };
// },
// },
// };
admin-web/src/models/order/orderList.js
浏览文件 @
7fe2541e
import
{
message
}
from
'antd'
;
import
{
orderPage
,
updateOrderItem
,
updateOrderItemPayAmount
}
from
'../../services/order'
;
import
{
orderPage
,
updateOrderItem
,
updateOrderItemPayAmount
,
updateRemark
,
cancelOrder
,
}
from
'../../services/order'
;
export
default
{
namespace
:
'orderList'
,
...
...
@@ -18,6 +24,12 @@ export default {
orderId
:
0
,
orderItemId
:
0
,
searchParams
:
{},
remarkVisible
:
false
,
remark
:
''
,
orderCancelVisible
:
false
,
orderCancelShowOther
:
false
,
},
effects
:
{
...
...
@@ -70,6 +82,40 @@ export default {
},
});
yield
put
({
type
:
'queryPage'
,
payload
:
{
...
searchParams
,
},
});
},
*
updateRemake
({
payload
},
{
call
,
put
})
{
const
{
searchParams
,
params
}
=
payload
;
yield
call
(
updateRemark
,
params
);
yield
put
({
type
:
'changeRemakeVisible'
,
payload
:
{
remarkVisible
:
false
,
},
});
yield
put
({
type
:
'queryPage'
,
payload
:
{
...
searchParams
,
},
});
},
*
cancelOrder
({
payload
},
{
call
,
put
})
{
const
{
searchParams
,
params
}
=
payload
;
yield
call
(
cancelOrder
,
params
);
yield
put
({
type
:
'changeOrderCancelVisible'
,
payload
:
{
orderCancelVisible
:
false
,
},
});
yield
put
({
type
:
'queryPage'
,
payload
:
{
...
...
@@ -99,5 +145,23 @@ export default {
...
payload
,
};
},
changeRemakeVisible
(
state
,
{
payload
})
{
return
{
...
state
,
...
payload
,
};
},
changeOrderCancelVisible
(
state
,
{
payload
})
{
return
{
...
state
,
...
payload
,
};
},
changeOrderCancelShowOther
(
state
,
{
payload
})
{
return
{
...
state
,
...
payload
,
};
},
},
};
admin-web/src/pages/Order/OrderCancel.js
0 → 100644
浏览文件 @
7fe2541e
import
React
from
'react'
;
import
{
Form
,
Input
,
Modal
}
from
'antd'
;
import
DictionarySelect
from
'@/components/Dictionary/DictionarySelect'
;
import
dictionary
from
'@/utils/dictionary'
;
const
FormItem
=
Form
.
Item
;
// 订单 - 更新支付金额
const
OrderCancel
=
Form
.
create
()(
props
=>
{
const
{
form
,
dispatch
,
loading
}
=
props
;
const
{
orderId
,
orderCancelVisible
,
orderCancelShowOther
,
searchParams
}
=
props
.
orderList
;
const
{
getFieldDecorator
}
=
props
.
form
;
const
handleOk
=
e
=>
{
e
.
preventDefault
();
form
.
validateFields
((
err
,
fields
)
=>
{
if
(
err
)
return
;
dispatch
({
type
:
'orderList/cancelOrder'
,
payload
:
{
params
:
{
orderId
,
reasons
:
fields
.
reasons
,
otherReasons
:
fields
.
otherReasons
,
},
searchParams
,
},
});
});
};
const
handleCancel
=
()
=>
{
dispatch
({
type
:
'orderList/changeRemakeVisible'
,
payload
:
{
remarkVisible
:
false
,
},
});
};
const
handleReasonsChange
=
key
=>
{
dispatch
({
type
:
'orderList/changeOrderCancelShowOther'
,
payload
:
{
orderCancelShowOther
:
key
===
'20'
,
},
});
};
return
(
<
Modal
destroyOnClose
title
=
"取消订单"
visible
=
{
orderCancelVisible
}
onOk
=
{
handleOk
}
okText
=
"保存"
onCancel
=
{
handleCancel
}
confirmLoading
=
{
loading
}
>
<
FormItem
labelCol
=
{{
span
:
5
}}
wrapperCol
=
{{
span
:
15
}}
label
=
"原因"
>
{
getFieldDecorator
(
'reasons'
,
{
rules
:
[{
required
:
true
,
message
:
'请选择取消原因!'
}],
})(
<
DictionarySelect
onChange
=
{
handleReasonsChange
}
style
=
{{
minWidth
:
'100%'
}}
dicKey
=
{
dictionary
.
ORDER_CANCEL_REASONS
}
/
>
)}
<
/FormItem
>
{
orderCancelShowOther
?
(
<
FormItem
labelCol
=
{{
span
:
5
}}
wrapperCol
=
{{
span
:
15
}}
label
=
"其他原因"
>
{
getFieldDecorator
(
'otherReasons'
,
{
rules
:
[{
required
:
true
,
message
:
'请输填写退款原因!'
}],
})(
<
Input
.
TextArea
autosize
=
{{
minRows
:
3
,
maxRows
:
6
}}
placeholder
=
"请输入退款原因"
/>
)}
<
/FormItem
>
)
:
(
''
)}
<
/Modal
>
);
});
export
default
OrderCancel
;
admin-web/src/pages/Order/OrderDelivery.js
0 → 100644
浏览文件 @
7fe2541e
// import React, { PureComponent } from 'react';
//
// class OrderDelivery extends PureComponent {}
//
// export default OrderDelivery;
admin-web/src/pages/Order/OrderDetails.js
0 → 100644
浏览文件 @
7fe2541e
差异被折叠。
点击展开。
admin-web/src/pages/Order/OrderDetails.less
0 → 100644
浏览文件 @
7fe2541e
@import '~antd/lib/style/themes/default.less';
@import '~@/utils/utils.less';
.tableList {
.tableListOperator {
margin-bottom: 16px;
button {
margin-right: 8px;
}
}
}
.tableListForm {
:global {
.ant-form-item {
display: flex;
margin-right: 0;
margin-bottom: 24px;
> .ant-form-item-label {
width: auto;
padding-right: 8px;
line-height: 32px;
}
.ant-form-item-control {
line-height: 32px;
}
}
.ant-form-item-control-wrapper {
flex: 1;
}
}
.submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
}
@media screen and (max-width: @screen-lg) {
.tableListForm :global(.ant-form-item) {
margin-right: 24px;
}
}
@media screen and (max-width: @screen-md) {
.tableListForm :global(.ant-form-item) {
margin-right: 8px;
}
}
admin-web/src/pages/Order/OrderList.js
浏览文件 @
7fe2541e
...
...
@@ -6,6 +6,8 @@ import { Button, Card, Col, Divider, Form, Input, Row, Tabs, DatePicker, List }
import
PageHeaderWrapper
from
'@/components/PageHeaderWrapper'
;
import
DictionaryText
from
'@/components/Dictionary/DictionaryText'
;
import
OrderUpdatePayAmount
from
'./OrderUpdatePayAmount'
;
import
OrderRemark
from
'./OrderRemark'
;
import
OrderCancel
from
'./OrderCancel'
;
import
dictionary
from
'@/utils/dictionary'
;
import
styles
from
'./OrderList.less'
;
...
...
@@ -14,8 +16,10 @@ const { RangePicker } = DatePicker;
const
FormItem
=
Form
.
Item
;
const
{
TabPane
}
=
Tabs
;
const
OrderContent
=
orderItem
=>
{
const
{
dispatch
,
skuName
,
skuImage
,
quantity
,
price
,
payAmount
,
createTime
,
status
}
=
orderItem
;
const
OrderContent
=
props
=>
{
const
{
dispatch
,
item
}
=
props
;
const
{
createTime
,
status
,
payAmount
}
=
item
;
const
{
name
,
mobile
}
=
item
.
orderRecipient
;
const
handleUpdatePayAmount
=
updateOrderItem
=>
{
dispatch
({
...
...
@@ -29,27 +33,58 @@ const OrderContent = orderItem => {
});
};
// const handleCancelOrder = ({ orderId }) => {
// dispatch({
// type: 'orderList/changeOrderCancelVisible',
// payload: {
// orderCancelVisible: true,
// orderId,
// },
// });
// };
//
// const handleRenderGoods = () => {};
const
renderStatusButtons
=
()
=>
{
let
res
=
''
;
if
(
status
===
1
)
{
res
=
<
Button
>
取消订单
<
/Button>
;
}
else
if
(
status
===
2
)
{
res
=
<
Button
>
发货
<
/Button>
;
}
return
res
;
};
const
renderGoods
=
orderItems
=>
{
return
orderItems
.
map
(({
skuName
,
skuImage
,
quantity
,
price
})
=>
{
return
(
<
div
className
=
{
styles
.
orderGoods
}
>
<
img
alt
=
{
skuName
}
className
=
{
`
${
styles
.
image
}
`
}
src
=
{
skuImage
}
/
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
<
a
>
{
skuName
}
<
/a
>
<
/div
>
<
div
>
秋季精选
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
{
quantity
}
件
<
/div
>
<
div
>
{
price
/
100
}
元
/
{
quantity
*
(
price
/
100
)}
元
<
/div
>
<
/div
>
<
/div
>
);
});
};
return
(
<
div
className
=
{
styles
.
order
}
>
<
img
alt
=
{
skuName
}
className
=
{
`
${
styles
.
image
}
`
}
src
=
{
skuImage
}
/
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
名称
)
<
/div
>
<
div
>
<
a
>
{
skuName
}
<
/a
>
<
/div
>
<
div
>
秋季精选
<
/div
>
<
div
className
=
{
`
${
styles
.
contentItem
}
${
styles
.
goodsContainer
}
`
}
>
{
renderGoods
(
item
.
orderItems
)}
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
金额
/
物件
)
<
/div
>
<
div
>
{
quantity
}
件
<
/div
>
<
div
>
{
price
/
100
}
元
/
{
quantity
*
(
price
/
100
)}
元
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
购买人
)
<
/div
>
<
div
>
范先生
<
/div
>
<
div
>
13302926050
<
/div
>
<
div
>
{
name
}
<
/div
>
<
div
>
{
mobile
}
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
下单时间
)
<
/div
>
...
...
@@ -57,17 +92,16 @@ const OrderContent = orderItem => {
<
div
>&
nbsp
;
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
订单状态
)
<
/div
>
<
div
>
<
DictionaryText
dicKey
=
{
dictionary
.
ORDER_STATUS
}
dicValue
=
{
status
}
/
>
<
/div
>
<
div
>
{
[
0
,
1
,
2
].
indexOf
(
status
)
?
<
Button
>
取消订单
<
/Button> : ''
}</
div
>
<
div
>
{
renderStatusButtons
()
}
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
实付金额
)
<
/div
>
<
div
>
{
payAmount
/
100
}
元
<
/div
>
<
div
>
<
a
onClick
=
{()
=>
handleUpdatePayAmount
(
orderItem
)}
>
修改价格
<
/a
>
<
a
onClick
=
{()
=>
handleUpdatePayAmount
(
props
)}
>
修改价格
<
/a
>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -82,6 +116,18 @@ const OrderList = props => {
...
pagination
,
};
const
handleRemakeClick
=
item
=>
{
const
{
id
,
remark
}
=
item
;
dispatch
({
type
:
'orderList/changeRemakeVisible'
,
payload
:
{
remarkVisible
:
true
,
orderId
:
id
,
remark
,
},
});
};
return
(
<
List
size
=
"large"
...
...
@@ -102,13 +148,11 @@ const OrderList = props => {
<
div
>
<
a
>
查看详情
<
/a
>
<
Divider
type
=
"vertical"
/>
<
a
>
备注
<
/a
>
<
a
onClick
=
{()
=>
handleRemakeClick
(
item
)}
>
备注
<
/a
>
<
/div
>
<
/div
>
{
item
.
orderItems
.
map
(
orderItem
=>
{
return
<
OrderContent
key
=
{
orderItem
.
id
}
dispatch
=
{
dispatch
}
{...
orderItem
}
/>
;
})}
<
OrderContent
item
=
{
item
}
dispatch
=
{
dispatch
}
/
>
<
/div
>
<
/List.Item
>
)}
...
...
@@ -131,11 +175,9 @@ const SearchForm = Form.create()(props => {
form
.
validateFields
((
err
,
fields
)
=>
{
const
buildTime
=
(
fieldValue
,
key
)
=>
{
const
res
=
{};
if
(
fieldValue
)
{
if
(
fieldValue
&&
fieldValue
.
length
>=
2
)
{
const
keySuffix
=
key
.
substring
(
0
,
1
).
toUpperCase
()
+
key
.
substring
(
1
);
// res[`start${keySuffix}`] = fieldValue[0].valueOf();
res
[
`start
${
keySuffix
}
`
]
=
fieldValue
[
0
].
format
(
'YYYY-MM-DD HH:mm:ss'
);
// res[`end${keySuffix}`] = fieldValue[1].valueOf();
res
[
`end
${
keySuffix
}
`
]
=
fieldValue
[
1
].
format
(
'YYYY-MM-DD HH:mm:ss'
);
}
return
res
;
...
...
@@ -186,9 +228,6 @@ const SearchForm = Form.create()(props => {
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
FormItem
label
=
"创建时间"
>
{
getFieldDecorator
(
'createTime'
)(
<
RangePicker
/>
)}
<
/FormItem
>
<
/Col
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
FormItem
label
=
"成交时间"
>
{
getFieldDecorator
(
'closingTime'
)(
<
RangePicker
/>
)}
<
/FormItem
>
<
/Col
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
span
className
=
{
styles
.
submitButtons
}
>
<
Button
type
=
"primary"
htmlType
=
"submit"
>
...
...
@@ -234,9 +273,7 @@ class BasicList extends PureComponent {
});
};
handleEditorClick
=
()
=>
{
console
.
info
(
'edit'
);
};
handleEditorClick
=
()
=>
{};
handleSearch
=
fields
=>
{
const
{
...
...
@@ -287,6 +324,8 @@ class BasicList extends PureComponent {
<
/div
>
<
OrderUpdatePayAmount
{...
this
.
props
}
/
>
<
OrderRemark
{...
this
.
props
}
/
>
<
OrderCancel
{...
this
.
props
}
/
>
<
/PageHeaderWrapper
>
);
}
...
...
admin-web/src/pages/Order/OrderList.less
浏览文件 @
7fe2541e
...
...
@@ -239,6 +239,8 @@
// 订单content
.orderGroup {
@padding-slid: 10px;
@solid-color: rgba(167, 157, 160, 0.92);
@header-background: rgba(210, 219, 238, 0.99);
display: flex;
flex: 1;
...
...
@@ -254,7 +256,26 @@
font-weight: bold;
font-size: 15px;
line-height: 35px;
background-color: #c0bfb9;
background-color: @header-background;
}
.goodsContainer {
:first-child {
border-top: none;
border-bottom: none;
}
:last-child {
border-bottom: none;
}
}
.orderGoods {
display: flex;
flex: 2;
flex-direction: row;
width: 500px;
border: 1px solid @solid-color;
}
.order {
...
...
@@ -264,7 +285,7 @@
padding-right: @padding-slid;
padding-left: @padding-slid;
line-height: 100px;
border: 1px solid
#c0bfb9
;
border: 1px solid
@solid-color
;
.contentItem {
display: flex;
...
...
@@ -285,8 +306,8 @@
}
.image {
width:
10
0px;
height:
10
0px;
width:
8
0px;
height:
8
0px;
}
}
}
admin-web/src/pages/Order/OrderRefunds.js
0 → 100644
浏览文件 @
7fe2541e
import
React
,
{
PureComponent
}
from
'react'
;
import
moment
from
'moment'
;
import
{
connect
}
from
'dva'
;
import
{
Button
,
Card
,
Col
,
Divider
,
Form
,
Input
,
Row
,
Tabs
,
DatePicker
,
List
}
from
'antd'
;
import
PageHeaderWrapper
from
'@/components/PageHeaderWrapper'
;
import
DictionaryText
from
'@/components/Dictionary/DictionaryText'
;
import
OrderUpdatePayAmount
from
'./OrderUpdatePayAmount'
;
import
OrderRemark
from
'./OrderRemark'
;
import
dictionary
from
'@/utils/dictionary'
;
import
styles
from
'./OrderList.less'
;
const
{
RangePicker
}
=
DatePicker
;
const
FormItem
=
Form
.
Item
;
const
{
TabPane
}
=
Tabs
;
const
OrderContent
=
props
=>
{
const
{
dispatch
,
skuName
,
skuImage
,
quantity
,
price
,
payAmount
,
createTime
,
status
,
item
,
}
=
props
;
const
{
name
,
mobile
}
=
item
.
orderLogistics
;
const
handleUpdatePayAmount
=
updateOrderItem
=>
{
dispatch
({
type
:
'orderList/changePayAmountVisible'
,
payload
:
{
payAmountVisible
:
true
,
payAmount
:
updateOrderItem
.
payAmount
,
orderId
:
updateOrderItem
.
orderId
,
orderItemId
:
updateOrderItem
.
id
,
},
});
};
const
renderStatusButtons
=
()
=>
{
let
res
=
''
;
if
(
status
===
1
)
{
res
=
<
Button
>
取消订单
<
/Button>
;
}
else
if
(
status
===
2
)
{
res
=
<
Button
>
发货
<
/Button>
;
}
return
res
;
};
return
(
<
div
className
=
{
styles
.
order
}
>
<
img
alt
=
{
skuName
}
className
=
{
`
${
styles
.
image
}
`
}
src
=
{
skuImage
}
/
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
<
a
>
{
skuName
}
<
/a
>
<
/div
>
<
div
>
秋季精选
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
{
quantity
}
件
<
/div
>
<
div
>
{
price
/
100
}
元
/
{
quantity
*
(
price
/
100
)}
元
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
{
name
}
<
/div
>
<
div
>
{
mobile
}
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
下单时间
)
<
/div
>
<
div
>
{
moment
(
createTime
).
format
(
'YYYY-MM-DD HH:mm'
)}
<
/div
>
<
div
>&
nbsp
;
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
>
<
DictionaryText
dicKey
=
{
dictionary
.
ORDER_STATUS
}
dicValue
=
{
status
}
/
>
<
/div
>
<
div
>
{
renderStatusButtons
()}
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
contentItem
}
>
<
div
className
=
{
styles
.
columnName
}
>
(
实付金额
)
<
/div
>
<
div
>
{
payAmount
/
100
}
元
<
/div
>
<
div
>
<
a
onClick
=
{()
=>
handleUpdatePayAmount
(
props
)}
>
修改价格
<
/a
>
<
/div
>
<
/div
>
<
/div
>
);
};
const
OrderList
=
props
=>
{
const
{
list
,
dispatch
,
loading
}
=
props
;
const
{
pagination
,
dataSource
}
=
list
;
const
paginationProps
=
{
...
pagination
,
};
const
handleRemakeClick
=
item
=>
{
const
{
id
,
remark
}
=
item
;
dispatch
({
type
:
'orderList/changeRemakeVisible'
,
payload
:
{
remarkVisible
:
true
,
orderId
:
id
,
remark
,
},
});
};
return
(
<
List
size
=
"large"
rowKey
=
"id"
loading
=
{
loading
}
pagination
=
{
paginationProps
}
dataSource
=
{
dataSource
}
renderItem
=
{
item
=>
(
<
List
.
Item
>
<
div
className
=
{
styles
.
orderGroup
}
>
<
div
className
=
{
styles
.
header
}
>
<
div
>
<
span
>
订单号
:
{
item
.
orderNo
}
<
/span
>
<
Divider
type
=
"vertical"
/>
<
span
>
支付金额
:
{
item
.
payAmount
/
100
}
元
<
/span
>
<
/div
>
<
div
>
<
a
>
查看详情
<
/a
>
<
Divider
type
=
"vertical"
/>
<
a
onClick
=
{()
=>
handleRemakeClick
(
item
)}
>
备注
<
/a
>
<
/div
>
<
/div
>
{
item
.
orderItems
.
map
(
orderItem
=>
{
return
(
<
OrderContent
key
=
{
orderItem
.
id
}
item
=
{
item
}
dispatch
=
{
dispatch
}
{...
orderItem
}
/
>
);
})}
<
/div
>
<
/List.Item
>
)}
/
>
);
};
// SearchForm
const
SearchForm
=
Form
.
create
()(
props
=>
{
const
{
form
:
{
getFieldDecorator
},
form
,
handleSearch
,
}
=
props
;
const
handleFormReset
=
()
=>
{};
const
onSubmit
=
e
=>
{
e
.
preventDefault
();
form
.
validateFields
((
err
,
fields
)
=>
{
const
buildTime
=
(
fieldValue
,
key
)
=>
{
const
res
=
{};
if
(
fieldValue
&&
fieldValue
.
length
>=
2
)
{
const
keySuffix
=
key
.
substring
(
0
,
1
).
toUpperCase
()
+
key
.
substring
(
1
);
res
[
`start
${
keySuffix
}
`
]
=
fieldValue
[
0
].
format
(
'YYYY-MM-DD HH:mm:ss'
);
res
[
`end
${
keySuffix
}
`
]
=
fieldValue
[
1
].
format
(
'YYYY-MM-DD HH:mm:ss'
);
}
return
res
;
};
const
timeFields
=
[
'createTime'
,
'closingTime'
];
const
buildSearchParams
=
fields2
=>
{
let
res
=
{};
Object
.
keys
(
fields
).
map
(
objectKey
=>
{
const
fieldValue
=
fields2
[
objectKey
];
if
(
timeFields
.
indexOf
(
objectKey
)
!==
-
1
)
{
// 处理时间
res
=
{
...
res
,
...
buildTime
(
fieldValue
,
objectKey
),
};
}
else
if
(
fieldValue
!==
undefined
)
{
res
[
objectKey
]
=
fieldValue
;
}
return
true
;
});
return
res
;
};
const
searchParams
=
buildSearchParams
(
fields
);
if
(
handleSearch
)
{
handleSearch
(
searchParams
);
}
});
};
return
(
<
Form
onSubmit
=
{
onSubmit
}
layout
=
"inline"
>
<
Row
gutter
=
{{
md
:
8
,
lg
:
24
,
xl
:
48
}}
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
FormItem
label
=
"订单id"
>
{
getFieldDecorator
(
'id'
)(
<
Input
placeholder
=
"请输入订单id"
/>
)}
<
/FormItem
>
<
/Col
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
FormItem
label
=
"订单号"
>
{
getFieldDecorator
(
'orderNo'
)(
<
Input
placeholder
=
"请输入订单号"
/>
)}
<
/FormItem
>
<
/Col
>
<
/Row
>
<
Row
gutter
=
{{
md
:
8
,
lg
:
24
,
xl
:
48
}}
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
FormItem
label
=
"创建时间"
>
{
getFieldDecorator
(
'createTime'
)(
<
RangePicker
/>
)}
<
/FormItem
>
<
/Col
>
<
Col
md
=
{
8
}
sm
=
{
24
}
>
<
span
className
=
{
styles
.
submitButtons
}
>
<
Button
type
=
"primary"
htmlType
=
"submit"
>
查询
<
/Button
>
<
Button
style
=
{{
marginLeft
:
8
}}
onClick
=
{
handleFormReset
}
>
重置
<
/Button
>
<
/span
>
<
/Col
>
<
/Row
>
<
/Form
>
);
});
@
connect
(({
orderList
,
loading
})
=>
({
orderList
,
list
:
orderList
.
list
,
loading
:
loading
.
models
.
orderList
,
}))
class
BasicList
extends
PureComponent
{
componentDidMount
()
{
const
{
list
:
{
pagination
},
}
=
this
.
props
;
this
.
queryList
({
pageNo
:
pagination
.
current
,
pageSize
:
pagination
.
pageSize
,
});
}
queryList
=
params
=>
{
const
{
dispatch
}
=
this
.
props
;
// 保存每次操作 searchParams
this
.
searchParams
=
params
;
// dispatch
dispatch
({
type
:
'orderList/queryPage'
,
payload
:
{
...
params
,
},
});
};
handleEditorClick
=
()
=>
{};
handleSearch
=
fields
=>
{
const
{
list
:
{
pagination
},
}
=
this
.
props
;
this
.
queryList
({
...
fields
,
pageNo
:
pagination
.
current
,
pageSize
:
pagination
.
pageSize
,
});
};
handleTabsChange
=
key
=>
{
const
params
=
{
...
this
.
searchParams
,
status
:
key
,
};
this
.
queryList
(
params
);
};
render
()
{
return
(
<
PageHeaderWrapper
>
<
div
className
=
{
styles
.
standardList
}
>
<
Card
className
=
{
styles
.
listCard
}
bordered
=
{
false
}
title
=
"订单列表"
style
=
{{
marginTop
:
24
}}
bodyStyle
=
{{
padding
:
'0 32px 40px 32px'
}}
>
<
div
className
=
{
styles
.
tableListForm
}
>
<
SearchForm
{...
this
.
props
}
handleSearch
=
{
this
.
handleSearch
}
/
>
<
/div
>
<
Tabs
defaultActiveKey
=
{
null
}
onChange
=
{
this
.
handleTabsChange
}
>
<
TabPane
tab
=
"全部"
key
=
{
null
}
/
>
<
TabPane
tab
=
"待付款"
key
=
{
0
}
/
>
<
TabPane
tab
=
"待发货"
key
=
{
1
}
/
>
<
TabPane
tab
=
"已发货"
key
=
{
2
}
/
>
<
TabPane
tab
=
"已完成"
key
=
{
3
}
/
>
<
TabPane
tab
=
"已关闭"
key
=
{
4
}
/
>
<
/Tabs
>
<
OrderList
{...
this
.
props
}
handleEditorClick
=
{
this
.
handleEditorClick
}
/
>
<
/Card
>
<
/div
>
<
OrderUpdatePayAmount
{...
this
.
props
}
/
>
<
OrderRemark
{...
this
.
props
}
/
>
<
/PageHeaderWrapper
>
);
}
}
export
default
BasicList
;
admin-web/src/pages/Order/OrderRemark.js
0 → 100644
浏览文件 @
7fe2541e
import
React
from
'react'
;
import
{
Form
,
Input
,
Modal
}
from
'antd'
;
const
FormItem
=
Form
.
Item
;
// 订单 - 更新支付金额
const
OrderRemark
=
Form
.
create
()(
props
=>
{
const
{
dispatch
,
loading
}
=
props
;
const
{
orderId
,
remark
,
remarkVisible
,
searchParams
}
=
props
.
orderList
;
const
{
getFieldDecorator
,
getFieldsValue
}
=
props
.
form
;
const
handleOk
=
e
=>
{
e
.
preventDefault
();
const
fieldsValue
=
getFieldsValue
();
dispatch
({
type
:
'orderList/updateRemake'
,
payload
:
{
params
:
{
remark
:
fieldsValue
.
remark
,
orderId
,
},
searchParams
,
},
});
};
const
handleCancel
=
()
=>
{
dispatch
({
type
:
'orderList/changeRemakeVisible'
,
payload
:
{
remarkVisible
:
false
,
},
});
};
return
(
<
Modal
destroyOnClose
title
=
"添加备注信息"
visible
=
{
remarkVisible
}
onOk
=
{
handleOk
}
okText
=
"保存"
onCancel
=
{
handleCancel
}
confirmLoading
=
{
loading
}
>
<
FormItem
labelCol
=
{{
span
:
5
}}
wrapperCol
=
{{
span
:
15
}}
label
=
"备注"
>
{
getFieldDecorator
(
'remark'
,
{
initialValue
:
remark
,
})(
<
Input
.
TextArea
autosize
=
{{
minRows
:
2
,
maxRows
:
6
}}
placeholder
=
"请输入备注信息"
/>
)}
<
/FormItem
>
<
/Modal
>
);
});
export
default
OrderRemark
;
admin-web/src/pages/Order/OrderUpdatePayAmount.js
浏览文件 @
7fe2541e
import
React
from
'react'
;
import
{
Form
,
Input
,
Modal
}
from
'antd'
;
import
{
Form
,
Input
Number
,
Modal
}
from
'antd'
;
const
FormItem
=
Form
.
Item
;
...
...
@@ -52,7 +52,7 @@ const OrderUpdatePayAmount = Form.create()(props => {
{
max
:
10000
,
min
:
0
,
message
:
'金额值 0 - 100000 元'
},
],
initialValue
:
payAmount
/
100
,
})(
<
Input
placeholder
=
"请输入修改的金额"
/>
)}
})(
<
Input
Number
min
=
{
0
}
max
=
{
100000
}
placeholder
=
"请输入修改的金额"
/>
)}
<
/FormItem
>
<
/Modal
>
);
...
...
admin-web/src/services/order.js
浏览文件 @
7fe2541e
...
...
@@ -14,6 +14,18 @@ export async function updateOrderItemPayAmount(params) {
});
}
export
async
function
updateRemark
(
params
)
{
return
request
(
`/order-api/admins/order/update_remark?
${
stringify
(
params
)}
`
,
{
method
:
'PUT'
,
});
}
export
async
function
cancelOrder
(
params
)
{
return
request
(
`/order-api/admins/order/cancel_order?
${
stringify
(
params
)}
`
,
{
method
:
'PUT'
,
});
}
export
async
function
updateOrderItem
(
params
)
{
return
request
(
`/order-api/admins/order_item/update?
${
stringify
(
params
)}
`
,
{
method
:
'PUT'
,
...
...
@@ -22,3 +34,12 @@ export async function updateOrderItem(params) {
},
});
}
export
async
function
getLogistics
(
params
)
{
return
request
(
`/order-api/admins/order_item/update?
${
stringify
(
params
)}
`
,
{
method
:
'PUT'
,
body
:
{
...
params
,
},
});
}
admin-web/src/utils/dictionary.js
浏览文件 @
7fe2541e
...
...
@@ -3,6 +3,7 @@
const
DictionaryConstants
=
{
GENDER
:
'gender'
,
ORDER_STATUS
:
'order_status'
,
ORDER_CANCEL_REASONS
:
'order_cancel_reasons'
,
};
export
default
DictionaryConstants
;
admin-web/src/utils/request.qs.js
浏览文件 @
7fe2541e
...
...
@@ -9,11 +9,9 @@ import qs from 'qs';
function
filterEmptyStr
(
params
)
{
function
filterObject
(
object
)
{
const
res
=
{};
for
(
const
key
in
params
)
{
const
val
=
params
[
key
];
if
(
typeof
val
===
'string'
&&
val
)
{
res
[
key
]
=
val
;
}
else
{
for
(
const
key
in
object
)
{
const
val
=
object
[
key
];
if
(
val
!==
undefined
&&
val
!==
'undefined'
&&
val
!==
null
&&
val
!==
'null'
)
{
res
[
key
]
=
val
;
}
}
...
...
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/OrderService.java
浏览文件 @
7fe2541e
...
...
@@ -56,6 +56,14 @@ public interface OrderService {
*/
CommonResult
cancelOrder
(
Integer
orderId
,
Integer
reasons
,
String
otherReasons
);
/**
* 订单发货
*
* @param orderDelivery
* @return
*/
CommonResult
orderDelivery
(
OrderDeliveryDTO
orderDelivery
);
/**
* 更新订单 - 备注
*
...
...
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/bo/OrderBO.java
浏览文件 @
7fe2541e
...
...
@@ -90,7 +90,7 @@ public class OrderBO implements Serializable {
/**
* 订单物流信息
*/
private
Order
LogisticsBO
orderLogistics
;
private
Order
RecipientBO
orderRecipient
;
@Override
public
String
toString
()
{
...
...
@@ -108,7 +108,7 @@ public class OrderBO implements Serializable {
", status="
+
status
+
", remark='"
+
remark
+
'\''
+
", orderItems="
+
orderItems
+
", order
Logistics="
+
orderLogistics
+
", order
Recipient="
+
orderRecipient
+
'}'
;
}
...
...
@@ -229,12 +229,12 @@ public class OrderBO implements Serializable {
return
this
;
}
public
Order
LogisticsBO
getOrderLogistics
()
{
return
order
Logistics
;
public
Order
RecipientBO
getOrderRecipient
()
{
return
order
Recipient
;
}
public
OrderBO
setOrder
Logistics
(
OrderLogisticsBO
orderLogistics
)
{
this
.
order
Logistics
=
orderLogistics
;
public
OrderBO
setOrder
Recipient
(
OrderRecipientBO
orderRecipient
)
{
this
.
order
Recipient
=
orderRecipient
;
return
this
;
}
}
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/bo/OrderRecipientBO.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
api
.
bo
;
import
cn.iocoder.common.framework.dataobject.BaseDO
;
/**
* 订单收件人信息 order_recipient
*
* @author Sin
* @time 2019-03-31 11:37
*/
public
class
OrderRecipientBO
extends
BaseDO
{
/**
* 编号
*/
private
Integer
id
;
/**
* 订单id
*/
private
Integer
orderId
;
/**
* 收件区域编号
*/
private
String
areaNo
;
/**
* 收件人名称
*/
private
String
name
;
/**
* 收件手机号
*/
private
String
mobile
;
/**
* 收件详细地址
*/
private
String
address
;
@Override
public
String
toString
()
{
return
"OrderRecipientBO{"
+
"id="
+
id
+
", orderId="
+
orderId
+
", areaNo='"
+
areaNo
+
'\''
+
", name='"
+
name
+
'\''
+
", mobile='"
+
mobile
+
'\''
+
", address='"
+
address
+
'\''
+
'}'
;
}
public
Integer
getId
()
{
return
id
;
}
public
OrderRecipientBO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
Integer
getOrderId
()
{
return
orderId
;
}
public
OrderRecipientBO
setOrderId
(
Integer
orderId
)
{
this
.
orderId
=
orderId
;
return
this
;
}
public
String
getAreaNo
()
{
return
areaNo
;
}
public
OrderRecipientBO
setAreaNo
(
String
areaNo
)
{
this
.
areaNo
=
areaNo
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
OrderRecipientBO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getMobile
()
{
return
mobile
;
}
public
OrderRecipientBO
setMobile
(
String
mobile
)
{
this
.
mobile
=
mobile
;
return
this
;
}
public
String
getAddress
()
{
return
address
;
}
public
OrderRecipientBO
setAddress
(
String
address
)
{
this
.
address
=
address
;
return
this
;
}
}
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constant/LogisticsEnum.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
api
.
constant
;
/**
* 物流信息
*
* @author Sin
* @time 2019-03-30 22:33
*/
public
enum
LogisticsEnum
{
LOGISTICS_1
(
1
,
"顺丰快递"
),
LOGISTICS_2
(
2
,
"圆通快递"
),
LOGISTICS_3
(
3
,
"申通快递"
),
LOGISTICS_4
(
4
,
"韵答快递"
),
LOGISTICS_5
(
5
,
"天天快递"
),
LOGISTICS_6
(
6
,
"EMS中国邮政"
),
;
/**
* 状态值
*/
private
Integer
value
;
/**
* 状态名
*/
private
String
name
;
LogisticsEnum
(
int
value
,
String
name
)
{
this
.
value
=
value
;
this
.
name
=
name
;
}
public
int
getValue
()
{
return
value
;
}
public
String
getName
()
{
return
name
;
}
}
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderDeliveryDTO.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
api
.
dto
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 订单发货
*
* @author Sin
* @time 2019-03-30 22:31
*/
public
class
OrderDeliveryDTO
implements
Serializable
{
/**
* 收件区域编号
*/
private
String
areaNo
;
/**
* 收件人名称
*/
private
String
name
;
/**
* 收件手机号
*/
private
String
mobile
;
/**
* 收件详细地址
*/
private
String
address
;
/**
* 物流 (字典)
*/
private
Integer
logistics
;
/**
* 物流编号
*/
private
String
logisticsNo
;
///
/// 物理信息是跟 orderItem 走
/**
* 订单 orderItemId
*/
private
List
<
Integer
>
orderItemIds
;
@Override
public
String
toString
()
{
return
"OrderDeliverGoodsDTO{"
+
"areaNo='"
+
areaNo
+
'\''
+
", name='"
+
name
+
'\''
+
", mobile='"
+
mobile
+
'\''
+
", address='"
+
address
+
'\''
+
", logistics="
+
logistics
+
", logisticsNo='"
+
logisticsNo
+
'\''
+
", orderItemIds="
+
orderItemIds
+
'}'
;
}
public
String
getAreaNo
()
{
return
areaNo
;
}
public
OrderDeliveryDTO
setAreaNo
(
String
areaNo
)
{
this
.
areaNo
=
areaNo
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
OrderDeliveryDTO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getMobile
()
{
return
mobile
;
}
public
OrderDeliveryDTO
setMobile
(
String
mobile
)
{
this
.
mobile
=
mobile
;
return
this
;
}
public
String
getAddress
()
{
return
address
;
}
public
OrderDeliveryDTO
setAddress
(
String
address
)
{
this
.
address
=
address
;
return
this
;
}
public
Integer
getLogistics
()
{
return
logistics
;
}
public
OrderDeliveryDTO
setLogistics
(
Integer
logistics
)
{
this
.
logistics
=
logistics
;
return
this
;
}
public
String
getLogisticsNo
()
{
return
logisticsNo
;
}
public
OrderDeliveryDTO
setLogisticsNo
(
String
logisticsNo
)
{
this
.
logisticsNo
=
logisticsNo
;
return
this
;
}
public
List
<
Integer
>
getOrderItemIds
()
{
return
orderItemIds
;
}
public
OrderDeliveryDTO
setOrderItemIds
(
List
<
Integer
>
orderItemIds
)
{
this
.
orderItemIds
=
orderItemIds
;
return
this
;
}
}
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/convert/OrderRecipientConvert.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
biz
.
convert
;
import
cn.iocoder.mall.order.api.bo.OrderRecipientBO
;
import
cn.iocoder.mall.order.api.dto.OrderCreateDTO
;
import
cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mappings
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
/**
* 订单收件人信息
*
* @author Sin
* @time 2019-03-31 12:50
*/
@Mapper
public
interface
OrderRecipientConvert
{
OrderRecipientConvert
INSTANCE
=
Mappers
.
getMapper
(
OrderRecipientConvert
.
class
);
@Mappings
({})
OrderRecipientDO
convert
(
OrderCreateDTO
orderCreateDTO
);
@Mappings
({})
List
<
OrderRecipientBO
>
convert
(
List
<
OrderRecipientDO
>
orderRecipientDOList
);
}
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/dao/OrderRecipientMapper.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
biz
.
dao
;
import
cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.util.Collection
;
import
java.util.List
;
/**
* 订单收件人 信息
*
* @author Sin
* @time 2019-03-31 12:16
*/
@Repository
public
interface
OrderRecipientMapper
{
/**
* 插入 - 订单收件人
*
* @param orderRecipient
* @return
*/
int
insert
(
OrderRecipientDO
orderRecipient
);
/**
* 查询 - 根据 orderIds
*
* @param orderIds
* @return
*/
List
<
OrderRecipientDO
>
selectByOrderIds
(
@Param
(
"orderIds"
)
Collection
<
Integer
>
orderIds
);
}
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/dataobject/OrderRecipientDO.java
0 → 100644
浏览文件 @
7fe2541e
package
cn
.
iocoder
.
mall
.
order
.
biz
.
dataobject
;
import
cn.iocoder.common.framework.dataobject.BaseDO
;
/**
* 订单收件人信息 order_recipient
*
* @author Sin
* @time 2019-03-31 11:37
*/
public
class
OrderRecipientDO
extends
BaseDO
{
/**
* 编号
*/
private
Integer
id
;
/**
* 订单id
*/
private
Integer
orderId
;
/**
* 收件区域编号
*/
private
String
areaNo
;
/**
* 收件人名称
*/
private
String
name
;
/**
* 收件手机号
*/
private
String
mobile
;
/**
* 收件详细地址
*/
private
String
address
;
@Override
public
String
toString
()
{
return
"OrderRecipientDO{"
+
"id="
+
id
+
", orderId="
+
orderId
+
", areaNo='"
+
areaNo
+
'\''
+
", name='"
+
name
+
'\''
+
", mobile='"
+
mobile
+
'\''
+
", address='"
+
address
+
'\''
+
'}'
;
}
public
Integer
getId
()
{
return
id
;
}
public
OrderRecipientDO
setId
(
Integer
id
)
{
this
.
id
=
id
;
return
this
;
}
public
Integer
getOrderId
()
{
return
orderId
;
}
public
OrderRecipientDO
setOrderId
(
Integer
orderId
)
{
this
.
orderId
=
orderId
;
return
this
;
}
public
String
getAreaNo
()
{
return
areaNo
;
}
public
OrderRecipientDO
setAreaNo
(
String
areaNo
)
{
this
.
areaNo
=
areaNo
;
return
this
;
}
public
String
getName
()
{
return
name
;
}
public
OrderRecipientDO
setName
(
String
name
)
{
this
.
name
=
name
;
return
this
;
}
public
String
getMobile
()
{
return
mobile
;
}
public
OrderRecipientDO
setMobile
(
String
mobile
)
{
this
.
mobile
=
mobile
;
return
this
;
}
public
String
getAddress
()
{
return
address
;
}
public
OrderRecipientDO
setAddress
(
String
address
)
{
this
.
address
=
address
;
return
this
;
}
}
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java
浏览文件 @
7fe2541e
...
...
@@ -13,14 +13,9 @@ import cn.iocoder.mall.order.biz.OrderCommon;
import
cn.iocoder.mall.order.biz.convert.OrderConvert
;
import
cn.iocoder.mall.order.biz.convert.OrderItemConvert
;
import
cn.iocoder.mall.order.biz.convert.OrderLogisticsConvert
;
import
cn.iocoder.mall.order.biz.dao.OrderCancelMapper
;
import
cn.iocoder.mall.order.biz.dao.OrderItemMapper
;
import
cn.iocoder.mall.order.biz.dao.OrderLogisticsMapper
;
import
cn.iocoder.mall.order.biz.dao.OrderMapper
;
import
cn.iocoder.mall.order.biz.dataobject.OrderCancelDO
;
import
cn.iocoder.mall.order.biz.dataobject.OrderDO
;
import
cn.iocoder.mall.order.biz.dataobject.OrderItemDO
;
import
cn.iocoder.mall.order.biz.dataobject.OrderLogisticsDO
;
import
cn.iocoder.mall.order.biz.convert.OrderRecipientConvert
;
import
cn.iocoder.mall.order.biz.dao.*
;
import
cn.iocoder.mall.order.biz.dataobject.*
;
import
com.google.common.collect.Lists
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -47,6 +42,8 @@ public class OrderServiceImpl implements OrderService {
@Autowired
private
OrderLogisticsMapper
orderLogisticsMapper
;
@Autowired
private
OrderRecipientMapper
orderRecipientMapper
;
@Autowired
private
OrderCancelMapper
orderCancelMapper
;
@Autowired
private
OrderCommon
orderCommon
;
...
...
@@ -67,16 +64,11 @@ public class OrderServiceImpl implements OrderService {
.
map
(
orderDO
->
orderDO
.
getId
())
.
collect
(
Collectors
.
toSet
());
Set
<
Integer
>
orderLogisticsIds
=
orderDOList
.
stream
()
.
map
(
orderDO
->
orderDO
.
getOrderLogisticsId
())
.
collect
(
Collectors
.
toSet
());
// 获取物流信息
List
<
OrderLogisticsDO
>
orderLogisticsDOList
=
orderLogisticsMapper
.
selectByIds
(
orderLogisticsIds
);
List
<
OrderLogisticsBO
>
orderLogisticsBOList
=
OrderLogisticsConvert
.
INSTANCE
.
convertOrderLogisticsBO
(
orderLogisticsDOList
);
Map
<
Integer
,
OrderLogisticsBO
>
orderLogisticsDOMap
=
orderLogisticsBOList
.
stream
().
collect
(
Collectors
.
toMap
(
OrderLogisticsBO:
:
getId
,
obj
->
obj
));
List
<
OrderRecipientDO
>
orderRecipientDOList
=
orderRecipientMapper
.
selectByOrderIds
(
orderIds
);
List
<
OrderRecipientBO
>
orderRecipientBOList
=
OrderRecipientConvert
.
INSTANCE
.
convert
(
orderRecipientDOList
);
Map
<
Integer
,
OrderRecipientBO
>
orderRecipientBOMap
=
orderRecipientBOList
.
stream
().
collect
(
Collectors
.
toMap
(
OrderRecipientBO:
:
getOrderId
,
obj
->
obj
));
// 获取 订单的 items
List
<
OrderItemDO
>
orderItemDOList
=
orderItemMapper
...
...
@@ -100,8 +92,8 @@ public class OrderServiceImpl implements OrderService {
if
(
orderItemBOMultimap
.
containsKey
(
orderBO
.
getId
()))
{
orderBO
.
setOrderItems
(
orderItemBOMultimap
.
get
(
orderBO
.
getId
()));
}
if
(
order
LogisticsDOMap
.
containsKey
(
orderBO
.
getOrderLogistics
Id
()))
{
orderBO
.
setOrder
Logistics
(
orderLogisticsDOMap
.
get
(
orderBO
.
getOrderLogistics
Id
()));
if
(
order
RecipientBOMap
.
containsKey
(
orderBO
.
get
Id
()))
{
orderBO
.
setOrder
Recipient
(
orderRecipientBOMap
.
get
(
orderBO
.
get
Id
()));
}
return
orderBO
;
}).
collect
(
Collectors
.
toList
());
...
...
@@ -117,7 +109,7 @@ public class OrderServiceImpl implements OrderService {
@Transactional
public
CommonResult
<
OrderCreateBO
>
createOrder
(
Integer
userId
,
OrderCreateDTO
orderCreateDTO
)
{
List
<
OrderCreateItemDTO
>
orderItemDTOList
=
orderCreateDTO
.
getOrderItems
();
Order
LogisticsDO
orderLogisticsDO
=
OrderLogistics
Convert
.
INSTANCE
.
convert
(
orderCreateDTO
);
Order
RecipientDO
orderRecipientDO
=
OrderRecipient
Convert
.
INSTANCE
.
convert
(
orderCreateDTO
);
List
<
OrderItemDO
>
orderItemDOList
=
OrderItemConvert
.
INSTANCE
.
convert
(
orderItemDTOList
);
// TODO: 2019-03-24 sin 校验商品是否存在
...
...
@@ -137,17 +129,10 @@ public class OrderServiceImpl implements OrderService {
// orderItemDO.setPrice(1000);
// }
// 物流信息
orderLogisticsDO
.
setLogisticsNo
(
""
)
.
setCreateTime
(
new
Date
())
.
setUpdateTime
(
null
);
orderLogisticsMapper
.
insert
(
orderLogisticsDO
);
// order
OrderDO
orderDO
=
new
OrderDO
()
.
setUserId
(
userId
)
.
setOrderLogisticsId
(
orderLogisticsDO
.
getId
()
)
.
setOrderLogisticsId
(
null
)
.
setOrderNo
(
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
))
.
setPayAmount
(-
1
)
// 先设置一个默认值,金额在下面计算
.
setClosingTime
(
null
)
...
...
@@ -162,6 +147,14 @@ public class OrderServiceImpl implements OrderService {
orderDO
.
setUpdateTime
(
null
);
orderMapper
.
insert
(
orderDO
);
// 收件人信息
orderRecipientDO
.
setOrderId
(
orderDO
.
getId
())
.
setCreateTime
(
new
Date
())
.
setUpdateTime
(
null
);
orderRecipientMapper
.
insert
(
orderRecipientDO
);
// order item
orderItemDOList
.
forEach
(
orderItemDO
->
{
int
goodsPrice
=
1000
;
// 商品单价
...
...
@@ -271,6 +264,11 @@ public class OrderServiceImpl implements OrderService {
return
CommonResult
.
success
(
null
);
}
@Override
public
CommonResult
orderDelivery
(
OrderDeliveryDTO
orderDelivery
)
{
return
null
;
}
@Override
public
CommonResult
updateOrderRemake
(
Integer
orderId
,
String
remake
)
{
// 此处不做订单校验,直接设置备注即可
...
...
order/order-service-impl/src/main/resources/mapper/OrderRecipientMapper.xml
0 → 100644
浏览文件 @
7fe2541e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"cn.iocoder.mall.order.biz.dao.OrderRecipientMapper"
>
<sql
id=
"FIELDS"
>
id, order_id, `area_no`, `name`, mobile, address,
create_time, update_time
</sql>
<!--
插入数据
-->
<insert
id=
"insert"
parameterType=
"OrderRecipientDO"
useGeneratedKeys=
"true"
keyColumn=
"id"
keyProperty=
"id"
>
INSERT INTO `order_recipient` (
order_id, `area_no`, `name`, mobile, address,
create_time, update_time
) VALUES (
#{orderId}, #{areaNo}, #{name}, #{mobile}, #{address},
#{createTime}, #{updateTime}
)
</insert>
<!--
查询 - 根据 orderIds
-->
<select
id=
"selectByOrderIds"
resultType=
"cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO"
>
SELECT
<include
refid=
"FIELDS"
/>
FROM `order_recipient`
WHERE order_id IN
<foreach
collection=
"orderIds"
item=
"orderId"
separator=
","
open=
"("
close=
")"
>
#{orderId}
</foreach>
</select>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论