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
wwwanlingxiao
mall
Commits
c9831e02
Commit
c9831e02
authored
Aug 30, 2018
by
zhh
Browse files
添加部分下单接口
parent
b33f396d
Changes
8
Hide whitespace changes
Inline
Side-by-side
document/pdm/mall.pdb
View file @
c9831e02
<?xml version="1.0" encoding="UTF-8"?>
<?PowerDesigner AppLocale="UTF16" ID="{7BB41C87-EFE8-409A-A86E-B1C3FCE34F8C}" Label="" LastModificationDate="153561
2418
" Name="mall" Objects="1025" Symbols="127" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.5.0.3982"?>
<?PowerDesigner AppLocale="UTF16" ID="{7BB41C87-EFE8-409A-A86E-B1C3FCE34F8C}" Label="" LastModificationDate="153561
5091
" Name="mall" Objects="1025" Symbols="127" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.5.0.3982"?>
<!-- do not edit this file -->
<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
...
...
@@ -4937,8 +4937,8 @@ DESTINATION 0 新宋体,8,N</a:FontList>
<o:ReferenceSymbol Id="o116">
<a:CreationDate>1522226272</a:CreationDate>
<a:ModificationDate>1522399075</a:ModificationDate>
<a:Rect>((-3
1175
,47728), (83441,113756))</a:Rect>
<a:ListOfPoints>((83041,113356),(83041,
50658),(-30550,50658
),(-3
0550
,48128))</a:ListOfPoints>
<a:Rect>((-3
8306
,47728), (83441,113756))</a:Rect>
<a:ListOfPoints>((83041,113356),(83041,
94555),(-37681,94555
),(-3
7681
,48128))</a:ListOfPoints>
<a:CornerStyle>1</a:CornerStyle>
<a:ArrowStyle>1</a:ArrowStyle>
<a:LineColor>12615680</a:LineColor>
...
...
@@ -5113,8 +5113,8 @@ DESTINATION 0 新宋体,8,N</a:FontList>
<o:ReferenceSymbol Id="o139">
<a:CreationDate>1522389232</a:CreationDate>
<a:ModificationDate>1522398872</a:ModificationDate>
<a:Rect>((
28232
,58216), (43845,60017))</a:Rect>
<a:ListOfPoints>((
28632
,59617),(
28632
,58841),(43445,58841))</a:ListOfPoints>
<a:Rect>((
33605
,58216), (43845,60017))</a:Rect>
<a:ListOfPoints>((
34005
,59617),(
34005
,58841),(43445,58841))</a:ListOfPoints>
<a:CornerStyle>1</a:CornerStyle>
<a:ArrowStyle>1</a:ArrowStyle>
<a:LineColor>12615680</a:LineColor>
...
...
@@ -6918,7 +6918,7 @@ LABL 0 新宋体,8,N</a:FontList>
</o:TableSymbol>
<o:TableSymbol Id="o247">
<a:CreationDate>1522398032</a:CreationDate>
<a:ModificationDate>15
22398627
</a:ModificationDate>
<a:ModificationDate>15
35615091
</a:ModificationDate>
<a:IconMode>-1</a:IconMode>
<a:Rect>((22716,17129), (36336,22677))</a:Rect>
<a:LineColor>12615680</a:LineColor>
...
...
@@ -13949,11 +13949,11 @@ LABL 0 新宋体,8,N</a:FontList>
</o:Table>
<o:Table Id="o248">
<a:ObjectID>C1DCA2EA-AC28-420C-BFEF-FFE7F5644910</a:ObjectID>
<a:Name>ums_inte
r
gration_consume_setting</a:Name>
<a:Code>ums_inte
r
gration_consume_setting</a:Code>
<a:Name>ums_integration_consume_setting</a:Name>
<a:Code>ums_integration_consume_setting</a:Code>
<a:CreationDate>1522398032</a:CreationDate>
<a:Creator>zhenghong</a:Creator>
<a:ModificationDate>15
22398305
</a:ModificationDate>
<a:ModificationDate>15
35615091
</a:ModificationDate>
<a:Modifier>zhenghong</a:Modifier>
<a:Comment>积分消费设置</a:Comment>
<a:TotalSavingCurrency/>
...
...
document/pdm/mall.pdm
View file @
c9831e02
<?xml version="1.0" encoding="UTF-8"?>
<?PowerDesigner AppLocale="UTF16" ID="{7BB41C87-EFE8-409A-A86E-B1C3FCE34F8C}" Label="" LastModificationDate="153561
5091
" Name="mall" Objects="1025" Symbols="127" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.5.0.3982"?>
<?PowerDesigner AppLocale="UTF16" ID="{7BB41C87-EFE8-409A-A86E-B1C3FCE34F8C}" Label="" LastModificationDate="153561
9079
" Name="mall" Objects="1025" Symbols="127" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.5.0.3982"?>
<!-- do not edit this file -->
<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
...
...
@@ -7979,9 +7979,10 @@ LABL 0 新宋体,8,N</a:FontList>
<a:Code>stock</a:Code>
<a:CreationDate>1521709829</a:CreationDate>
<a:Creator>zhenghong</a:Creator>
<a:ModificationDate>15
21709932
</a:ModificationDate>
<a:ModificationDate>15
35619079
</a:ModificationDate>
<a:Modifier>zhenghong</a:Modifier>
<a:Comment>库存</a:Comment>
<a:DefaultValue>0</a:DefaultValue>
<a:DataType>int</a:DataType>
</o:Column>
<o:Column Id="o327">
...
...
@@ -8071,9 +8072,10 @@ LABL 0 新宋体,8,N</a:FontList>
<a:Code>lock_stock</a:Code>
<a:CreationDate>1534927865</a:CreationDate>
<a:Creator>zhenghong</a:Creator>
<a:ModificationDate>153
4927909
</a:ModificationDate>
<a:ModificationDate>153
5619073
</a:ModificationDate>
<a:Modifier>zhenghong</a:Modifier>
<a:Comment>锁定库存</a:Comment>
<a:DefaultValue>0</a:DefaultValue>
<a:DataType>int</a:DataType>
</o:Column>
</c:Columns>
...
...
mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java
View file @
c9831e02
...
...
@@ -2,11 +2,13 @@ package com.macro.mall.portal.controller;
import
com.macro.mall.portal.domain.CommonResult
;
import
com.macro.mall.portal.domain.ConfirmOrderResult
;
import
com.macro.mall.portal.domain.OrderParam
;
import
com.macro.mall.portal.service.OmsPortalOrderService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.ResponseBody
;
...
...
@@ -22,10 +24,17 @@ public class OmsPortalOrderController {
@Autowired
private
OmsPortalOrderService
portalOrderService
;
@ApiOperation
(
"根据购物车信息生成确认单信息"
)
@RequestMapping
(
value
=
"
c
onfirmOrder"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"
/generateC
onfirmOrder"
,
method
=
RequestMethod
.
POST
)
@ResponseBody
public
Object
c
onfirmOrder
(){
public
Object
generateC
onfirmOrder
(){
ConfirmOrderResult
confirmOrderResult
=
portalOrderService
.
generateConfirmOrder
();
return
new
CommonResult
().
success
(
confirmOrderResult
);
}
@ApiOperation
(
"根据购物车信息生成订单"
)
@RequestMapping
(
value
=
"/generateOrder"
,
method
=
RequestMethod
.
POST
)
@ResponseBody
public
Object
generateOrder
(
@RequestBody
OrderParam
orderParam
){
return
portalOrderService
.
generateOrder
(
orderParam
);
}
}
mall-portal/src/main/java/com/macro/mall/portal/domain/CartPromotionItem.java
View file @
c9831e02
...
...
@@ -13,7 +13,8 @@ public class CartPromotionItem extends OmsCartItem{
private
String
promotionMessage
;
//促销活动减去的金额,针对每个商品
private
BigDecimal
reduceAmount
;
//商品的真实库存(剩余库存-锁定库存)
private
Integer
realStock
;
public
String
getPromotionMessage
()
{
return
promotionMessage
;
}
...
...
@@ -29,4 +30,12 @@ public class CartPromotionItem extends OmsCartItem{
public
void
setReduceAmount
(
BigDecimal
reduceAmount
)
{
this
.
reduceAmount
=
reduceAmount
;
}
public
Integer
getRealStock
()
{
return
realStock
;
}
public
void
setRealStock
(
Integer
realStock
)
{
this
.
realStock
=
realStock
;
}
}
mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java
0 → 100644
View file @
c9831e02
package
com.macro.mall.portal.domain
;
/**
* 生成订单时传入的参数
* Created by macro on 2018/8/30.
*/
public
class
OrderParam
{
//收货地址id
private
Long
memberReceiveAddressId
;
//优惠券id
private
Long
couponId
;
//使用的积分数
private
Integer
useIngegration
;
//支付方式
private
Integer
payType
;
public
Long
getMemberReceiveAddressId
()
{
return
memberReceiveAddressId
;
}
public
void
setMemberReceiveAddressId
(
Long
memberReceiveAddressId
)
{
this
.
memberReceiveAddressId
=
memberReceiveAddressId
;
}
public
Long
getCouponId
()
{
return
couponId
;
}
public
void
setCouponId
(
Long
couponId
)
{
this
.
couponId
=
couponId
;
}
public
Integer
getUseIngegration
()
{
return
useIngegration
;
}
public
void
setUseIngegration
(
Integer
useIngegration
)
{
this
.
useIngegration
=
useIngegration
;
}
public
Integer
getPayType
()
{
return
payType
;
}
public
void
setPayType
(
Integer
payType
)
{
this
.
payType
=
payType
;
}
}
mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java
View file @
c9831e02
package
com.macro.mall.portal.service
;
import
com.macro.mall.portal.domain.CommonResult
;
import
com.macro.mall.portal.domain.ConfirmOrderResult
;
import
com.macro.mall.portal.domain.OrderParam
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* 前台订单管理Service
...
...
@@ -11,4 +14,10 @@ public interface OmsPortalOrderService {
* 根据用户购物车信息生成确认单信息
*/
ConfirmOrderResult
generateConfirmOrder
();
/**
* 根据提交信息生成订单
*/
@Transactional
CommonResult
generateOrder
(
OrderParam
orderParam
);
}
mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java
View file @
c9831e02
package
com.macro.mall.portal.service.impl
;
import
com.macro.mall.mapper.PmsSkuStockMapper
;
import
com.macro.mall.mapper.UmsIntegrationConsumeSettingMapper
;
import
com.macro.mall.model.UmsIntegrationConsumeSetting
;
import
com.macro.mall.model.UmsMember
;
import
com.macro.mall.model.UmsMemberReceiveAddress
;
import
com.macro.mall.portal.domain.CartPromotionItem
;
import
com.macro.mall.portal.domain.ConfirmOrderResult
;
import
com.macro.mall.portal.domain.SmsCouponHistoryDetail
;
import
com.macro.mall.model.*
;
import
com.macro.mall.portal.domain.*
;
import
com.macro.mall.portal.service.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -30,6 +27,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
private
UmsMemberCouponService
memberCouponService
;
@Autowired
private
UmsIntegrationConsumeSettingMapper
integrationConsumeSettingMapper
;
@Autowired
private
PmsSkuStockMapper
skuStockMapper
;
@Override
public
ConfirmOrderResult
generateConfirmOrder
()
{
ConfirmOrderResult
result
=
new
ConfirmOrderResult
();
...
...
@@ -54,6 +53,50 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
return
result
;
}
@Override
public
CommonResult
generateOrder
(
OrderParam
orderParam
)
{
//获取购物车及优惠信息
UmsMember
currentMember
=
memberService
.
getCurrentMember
();
List
<
CartPromotionItem
>
cartPromotionItemList
=
cartItemService
.
listPromotion
(
currentMember
.
getId
());
//判断购物车中商品是否都有库存
if
(!
hasStock
(
cartPromotionItemList
)){
return
new
CommonResult
().
failed
(
"库存不足,无法下单"
);
}
//判断优惠券是否可用
//可用情况下分摊到可用商品中
//判断积分是否可用
//可用情况下分摊到可用商品中
//进行库存锁定
lockStock
(
cartPromotionItemList
);
//计算运费
//根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
//转化为订单信息并插入数据库
return
null
;
}
/**
* 锁定下单商品的所有库存
*/
private
void
lockStock
(
List
<
CartPromotionItem
>
cartPromotionItemList
)
{
for
(
CartPromotionItem
cartPromotionItem
:
cartPromotionItemList
)
{
PmsSkuStock
skuStock
=
skuStockMapper
.
selectByPrimaryKey
(
cartPromotionItem
.
getProductSkuId
());
skuStock
.
setLockStock
(
skuStock
.
getStock
()+
cartPromotionItem
.
getQuantity
());
skuStockMapper
.
updateByPrimaryKeySelective
(
skuStock
);
}
}
/**
* 判断下单商品是否都有库存
*/
private
boolean
hasStock
(
List
<
CartPromotionItem
>
cartPromotionItemList
)
{
for
(
CartPromotionItem
cartPromotionItem
:
cartPromotionItemList
)
{
if
(
cartPromotionItem
.
getRealStock
()<=
0
){
return
false
;
}
}
return
true
;
}
/**
* 计算购物车中商品的价格
*/
...
...
mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPromotionServiceImpl.java
View file @
c9831e02
...
...
@@ -45,8 +45,10 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
BeanUtils
.
copyProperties
(
item
,
cartPromotionItem
);
cartPromotionItem
.
setPromotionMessage
(
"单品促销"
);
//商品原价-促销价
BigDecimal
originalPrice
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
cartPromotionItem
.
setReduceAmount
(
originalPrice
.
subtract
(
getSinglePromotionPrice
(
promotionProduct
,
item
.
getProductSkuId
())));
PmsSkuStock
skuStock
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
BigDecimal
originalPrice
=
skuStock
.
getPrice
();
cartPromotionItem
.
setReduceAmount
(
originalPrice
.
subtract
(
skuStock
.
getPromotionPrice
()));
cartPromotionItem
.
setRealStock
(
skuStock
.
getStock
()-
skuStock
.
getLockStock
());
cartPromotionItemList
.
add
(
cartPromotionItem
);
}
}
else
if
(
promotionType
==
3
)
{
...
...
@@ -60,13 +62,15 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
String
message
=
getLadderPromotionMessage
(
ladder
);
cartPromotionItem
.
setPromotionMessage
(
message
);
//商品原价-折扣金额*商品原价
BigDecimal
originalPrice
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
PmsSkuStock
skuStock
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
BigDecimal
originalPrice
=
skuStock
.
getPrice
();
BigDecimal
reduceAmount
=
originalPrice
.
subtract
(
ladder
.
getDiscount
().
multiply
(
originalPrice
));
cartPromotionItem
.
setReduceAmount
(
reduceAmount
);
cartPromotionItem
.
setRealStock
(
skuStock
.
getStock
()-
skuStock
.
getLockStock
());
cartPromotionItemList
.
add
(
cartPromotionItem
);
}
}
else
{
handleNoReduce
(
cartPromotionItemList
,
itemList
);
handleNoReduce
(
cartPromotionItemList
,
itemList
,
promotionProduct
);
}
}
else
if
(
promotionType
==
4
)
{
//满减
...
...
@@ -79,17 +83,19 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
String
message
=
getFullReductionPromotionMessage
(
fullReduction
);
cartPromotionItem
.
setPromotionMessage
(
message
);
//(商品原价/总价)*满减金额
BigDecimal
originalPrice
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
PmsSkuStock
skuStock
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
BigDecimal
originalPrice
=
skuStock
.
getPrice
();
BigDecimal
reduceAmount
=
originalPrice
.
divide
(
totalAmount
,
RoundingMode
.
HALF_EVEN
).
multiply
(
fullReduction
.
getReducePrice
());
cartPromotionItem
.
setReduceAmount
(
reduceAmount
);
cartPromotionItem
.
setRealStock
(
skuStock
.
getStock
()-
skuStock
.
getLockStock
());
cartPromotionItemList
.
add
(
cartPromotionItem
);
}
}
else
{
handleNoReduce
(
cartPromotionItemList
,
itemList
);
handleNoReduce
(
cartPromotionItemList
,
itemList
,
promotionProduct
);
}
}
else
{
//无优惠
handleNoReduce
(
cartPromotionItemList
,
itemList
);
handleNoReduce
(
cartPromotionItemList
,
itemList
,
promotionProduct
);
}
}
return
cartPromotionItemList
;
...
...
@@ -142,12 +148,14 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
/**
* 对没满足优惠条件的商品进行处理
*/
private
void
handleNoReduce
(
List
<
CartPromotionItem
>
cartPromotionItemList
,
List
<
OmsCartItem
>
itemList
)
{
private
void
handleNoReduce
(
List
<
CartPromotionItem
>
cartPromotionItemList
,
List
<
OmsCartItem
>
itemList
,
PromotionProduct
promotionProduct
)
{
for
(
OmsCartItem
item
:
itemList
)
{
CartPromotionItem
cartPromotionItem
=
new
CartPromotionItem
();
BeanUtils
.
copyProperties
(
item
,
cartPromotionItem
);
cartPromotionItem
.
setPromotionMessage
(
"无优惠"
);
cartPromotionItem
.
setReduceAmount
(
new
BigDecimal
(
0
));
PmsSkuStock
skuStock
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
cartPromotionItem
.
setRealStock
(
skuStock
.
getStock
()-
skuStock
.
getLockStock
());
cartPromotionItemList
.
add
(
cartPromotionItem
);
}
}
...
...
@@ -221,31 +229,19 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
for
(
OmsCartItem
item
:
itemList
)
{
//计算出商品原价
PromotionProduct
promotionProduct
=
getPromotionProductById
(
item
.
getProductId
(),
promotionProductList
);
BigDecimal
price
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
amount
=
amount
.
add
(
p
rice
.
multiply
(
new
BigDecimal
(
item
.
getQuantity
())));
PmsSkuStock
skuStock
=
getOriginalPrice
(
promotionProduct
,
item
.
getProductSkuId
());
amount
=
amount
.
add
(
skuStock
.
getP
rice
()
.
multiply
(
new
BigDecimal
(
item
.
getQuantity
())));
}
return
amount
;
}
/**
* 获取商品的单品促销价格
*/
private
BigDecimal
getSinglePromotionPrice
(
PromotionProduct
promotionProduct
,
Long
productSkuId
)
{
for
(
PmsSkuStock
skuStock
:
promotionProduct
.
getSkuStockList
())
{
if
(
productSkuId
.
equals
(
skuStock
.
getId
())
)
{
return
skuStock
.
getPromotionPrice
();
}
}
return
null
;
}
/**
* 获取商品的原价
*/
private
BigDecimal
getOriginalPrice
(
PromotionProduct
promotionProduct
,
Long
productSkuId
)
{
private
PmsSkuStock
getOriginalPrice
(
PromotionProduct
promotionProduct
,
Long
productSkuId
)
{
for
(
PmsSkuStock
skuStock
:
promotionProduct
.
getSkuStockList
())
{
if
(
productSkuId
.
equals
(
skuStock
.
getId
()))
{
return
skuStock
.
getPrice
()
;
return
skuStock
;
}
}
return
null
;
...
...
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