Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
6a728ff4
提交
6a728ff4
authored
4月 11, 2019
作者:
sin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
- 修复发货 bug,多发货
上级
1509bd26
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
46 行增加
和
47 行删除
+46
-47
OrderErrorCodeEnum.java
...n/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java
+3
-3
OrderServiceImpl.java
...a/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java
+43
-44
没有找到文件。
order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java
浏览文件 @
6a728ff4
...
...
@@ -21,11 +21,11 @@ public enum OrderErrorCodeEnum {
ORDER_GOODS_AMOUNT_INCORRECT
(
1008000007
,
"商品金额非法!"
),
ORDER_GET_GOODS_INFO_INCORRECT
(
1008000008
,
"获取额商品信息不正确!"
),
ORDER_GET_USER_ADDRESS_FAIL
(
1008000009
,
"获取用户地址失败!"
),
ORDER_GET_PAY_FAIL
(
10080000
09
,
"调用pay失败!"
),
ORDER_GET_PAY_FAIL
(
10080000
10
,
"调用pay失败!"
),
// order item
ORDER_ITEM_ONLY_ONE
(
1008000
004
,
"订单Item只有一个!"
),
ORDER_ITEM_SOME_NOT_EXISTS
(
-
1
,
"有不存在的商品"
),
// TODO 芋艿 后面改下错误码
ORDER_ITEM_ONLY_ONE
(
1008000
200
,
"订单Item只有一个!"
),
ORDER_ITEM_SOME_NOT_EXISTS
(
1008000201
,
"有不存在的商品!"
),
// ========== 购物车 ==========
...
...
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java
浏览文件 @
6a728ff4
package
cn
.
iocoder
.
mall
.
order
.
biz
.
service
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.util.DateUtil
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.order.api.OrderService
;
...
...
@@ -9,7 +8,6 @@ import cn.iocoder.mall.order.api.bo.*;
import
cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum
;
import
cn.iocoder.mall.order.api.constant.OrderHasReturnExchangeEnum
;
import
cn.iocoder.mall.order.api.constant.OrderStatusEnum
;
import
cn.iocoder.mall.order.api.constant.PayAppId
;
import
cn.iocoder.mall.order.api.dto.*
;
import
cn.iocoder.mall.order.biz.OrderCommon
;
import
cn.iocoder.mall.order.biz.constants.OrderDeliveryTypeEnum
;
...
...
@@ -21,9 +19,8 @@ import cn.iocoder.mall.order.biz.convert.OrderRecipientConvert;
import
cn.iocoder.mall.order.biz.dao.*
;
import
cn.iocoder.mall.order.biz.dataobject.*
;
import
cn.iocoder.mall.pay.api.PayTransactionService
;
import
cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO
;
import
cn.iocoder.mall.product.api.ProductSpuService
;
import
cn.iocoder.mall.product.api.bo.ProductS
pu
BO
;
import
cn.iocoder.mall.product.api.bo.ProductS
kuDetail
BO
;
import
cn.iocoder.mall.user.api.UserAddressService
;
import
cn.iocoder.mall.user.api.bo.UserAddressBO
;
import
com.alibaba.dubbo.config.annotation.Reference
;
...
...
@@ -31,7 +28,6 @@ import com.google.common.collect.Lists;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
org.springframework.util.CollectionUtils
;
import
java.util.*
;
...
...
@@ -92,7 +88,7 @@ public class OrderServiceImpl implements OrderService {
.
map
(
orderDO
->
orderDO
.
getId
())
.
collect
(
Collectors
.
toSet
());
// 获取
物流
信息
// 获取
配送
信息
List
<
OrderRecipientDO
>
orderRecipientDOList
=
orderRecipientMapper
.
selectByOrderIds
(
orderIds
);
List
<
OrderRecipientBO
>
orderRecipientBOList
=
OrderRecipientConvert
.
INSTANCE
.
convert
(
orderRecipientDOList
);
Map
<
Integer
,
OrderRecipientBO
>
orderRecipientBOMap
...
...
@@ -125,8 +121,7 @@ public class OrderServiceImpl implements OrderService {
}
return
orderBO
;
}).
collect
(
Collectors
.
toList
());
return
CommonResult
.
success
(
return
CommonResult
.
success
(
new
OrderPageBO
()
.
setTotal
(
totalCount
)
.
setOrders
(
result
)
...
...
@@ -168,54 +163,57 @@ public class OrderServiceImpl implements OrderService {
Set
<
Integer
>
skuIds
=
orderItemDOList
.
stream
()
.
map
(
orderItemDO
->
orderItemDO
.
getSkuId
()).
collect
(
Collectors
.
toSet
());
CommonResult
<
List
<
ProductS
puBO
>>
result
=
productSpuService
.
getProductSpu
List
(
skuIds
);
CommonResult
<
List
<
ProductS
kuDetailBO
>>
productResult
=
productSpuService
.
getProductSkuDetail
List
(
skuIds
);
// 校验商品信息
if
(
r
esult
.
isError
())
{
if
(
productR
esult
.
isError
())
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_GET_SKU_FAIL
.
getCode
());
}
if
(
r
esult
.
getData
()
==
null
)
{
if
(
productR
esult
.
getData
()
==
null
)
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_GET_SKU_NOT_EXISTENT
.
getCode
());
}
if
(
orderItemDTOList
.
size
()
!=
r
esult
.
getData
().
size
())
{
if
(
orderItemDTOList
.
size
()
!=
productR
esult
.
getData
().
size
())
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_GET_GOODS_INFO_INCORRECT
.
getCode
());
}
// 设置 orderItem
Map
<
Integer
,
ProductS
puBO
>
productSpuBOMap
=
r
esult
.
getData
()
Map
<
Integer
,
ProductS
kuDetailBO
>
productSpuBOMap
=
productR
esult
.
getData
()
.
stream
().
collect
(
Collectors
.
toMap
(
o
->
o
.
getId
(),
o
->
o
));
for
(
OrderItemDO
orderItemDO
:
orderItemDOList
)
{
ProductS
puBO
productSpu
BO
=
productSpuBOMap
.
get
(
orderItemDO
.
getSkuId
());
if
(
productS
pu
BO
.
getQuantity
()
<=
0
)
{
ProductS
kuDetailBO
productSkuDetail
BO
=
productSpuBOMap
.
get
(
orderItemDO
.
getSkuId
());
if
(
productS
kuDetail
BO
.
getQuantity
()
<=
0
)
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_INSUFFICIENT_INVENTORY
.
getCode
());
}
if
(
productS
pu
BO
.
getPrice
()
<=
0
)
{
if
(
productS
kuDetail
BO
.
getPrice
()
<=
0
)
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_GOODS_AMOUNT_INCORRECT
.
getCode
());
}
orderItemDO
.
setSkuImage
(
Optional
.
ofNullable
(
productS
puBO
.
getPicUrls
().
get
(
0
)).
get
());
orderItemDO
.
setSkuName
(
productS
puBO
.
getName
());
orderItemDO
.
setPrice
(
productS
pu
BO
.
getPrice
());
orderItemDO
.
setSkuImage
(
Optional
.
ofNullable
(
productS
kuDetailBO
.
getSpu
()
.
getPicUrls
().
get
(
0
)).
get
());
orderItemDO
.
setSkuName
(
productS
kuDetailBO
.
getSpu
()
.
getName
());
orderItemDO
.
setPrice
(
productS
kuDetail
BO
.
getPrice
());
int
payAmount
=
orderItemDO
.
getQuantity
()
*
orderItemDO
.
getPrice
();
orderItemDO
.
setPayAmount
(
payAmount
);
}
// order
// TODO: 2019-04-11 Sin 订单号需要生成规则
String
orderNo
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
substring
(
0
,
16
);
Integer
totalAmount
=
orderCommon
.
calculatedAmount
(
orderItemDOList
);
OrderDO
orderDO
=
new
OrderDO
()
.
setUserId
(
userId
)
.
setOrderNo
(
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
)
)
.
setOrderNo
(
orderNo
)
.
setPayAmount
(
totalAmount
)
.
setClosingTime
(
null
)
.
setDeliveryTime
(
null
)
.
setPaymentTime
(
null
)
.
setStatus
(
OrderStatusEnum
.
WAIT
_SHIP
MENT
.
getValue
())
.
setStatus
(
OrderStatusEnum
.
WAIT
ING_PAY
MENT
.
getValue
())
.
setHasReturnExchange
(
OrderHasReturnExchangeEnum
.
NO
.
getValue
())
.
setRemark
(
Optional
.
ofNullable
(
orderCreateDTO
.
getRemark
()).
orElse
(
""
));
...
...
@@ -259,24 +257,24 @@ public class OrderServiceImpl implements OrderService {
// 创建预订单
// TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息
String
orderSubject
=
orderItemDOList
.
get
(
0
).
getSkuName
();
Date
expireTime
=
DateUtil
.
addDate
(
Calendar
.
MINUTE
,
PAY_EXPIRE_TIME
);
CommonResult
commonResult
=
payTransactionService
.
createTransaction
(
new
PayTransactionCreateDTO
()
.
setCreateIp
(
orderCreateDTO
.
getIp
())
.
setAppId
(
PayAppId
.
APP_ID_1024
)
.
setExpireTime
(
expireTime
)
.
setPrice
(
orderDO
.
getPayAmount
())
.
setOrderSubject
(
orderSubject
)
.
setOrderMemo
(
orderDO
.
getRemark
())
.
setOrderDescription
(
""
)
);
if
(
commonResult
.
isError
())
{
//手动开启事务回滚
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_GET_PAY_FAIL
.
getCode
());
}
//
String orderSubject = orderItemDOList.get(0).getSkuName();
//
Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME);
//
CommonResult commonResult = payTransactionService.createTransaction(
//
new PayTransactionCreateDTO()
//
.setCreateIp(orderCreateDTO.getIp())
//
.setAppId(PayAppId.APP_ID_1024)
//
.setExpireTime(expireTime)
//
.setPrice(orderDO.getPayAmount())
//
.setOrderSubject(orderSubject)
//
.setOrderMemo(orderDO.getRemark())
//
.setOrderDescription("")
//
);
//
if (commonResult.isError()) {
//
//手动开启事务回滚
//
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_PAY_FAIL.getCode());
//
}
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息,业务扩展和统计
return
CommonResult
.
success
(
...
...
@@ -370,10 +368,6 @@ public class OrderServiceImpl implements OrderService {
&&
OrderStatusEnum
.
WAIT_SHIPMENT
.
getValue
()
==
orderItemDO
.
getStatus
())
.
collect
(
Collectors
.
toList
());
List
<
OrderItemDO
>
deliveredOrderItems
=
allOrderItems
.
stream
()
.
filter
(
orderItemDO
->
OrderStatusEnum
.
WAIT_SHIPMENT
.
getValue
()
==
orderItemDO
.
getStatus
())
.
collect
(
Collectors
.
toList
());
// 发货订单,检查
if
(
needDeliveryOrderItems
.
size
()
!=
orderItemIds
.
size
())
{
return
ServiceExceptionUtil
.
error
(
OrderErrorCodeEnum
.
ORDER_DELIVERY_INCORRECT_DATA
.
getCode
());
...
...
@@ -400,7 +394,12 @@ public class OrderServiceImpl implements OrderService {
);
// 子订单是否全部发货,如果发完,就更新 order
if
(
deliveredOrderItems
.
size
()
<=
0
)
{
List
<
OrderItemDO
>
unShippedOrderItems
=
allOrderItems
.
stream
()
.
filter
(
orderItemDO
->
OrderStatusEnum
.
WAIT_SHIPMENT
.
getValue
()
==
orderItemDO
.
getStatus
()
&&
!
orderItemIds
.
contains
(
orderItemDO
.
getId
()))
.
collect
(
Collectors
.
toList
());
if
(
unShippedOrderItems
.
size
()
<=
0
)
{
orderMapper
.
updateById
(
new
OrderDO
()
.
setId
(
orderDelivery
.
getOrderId
())
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论