Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
order-group
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
order-group-application
order-group
Commits
1c2f8473
Commit
1c2f8473
authored
Aug 05, 2020
by
zhiheng.zhang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
7c48f3bb
ec846be5
Show whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
1471 additions
and
105 deletions
+1471
-105
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
+6
-3
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
+4
-0
assortment-shoppingcart-sdk/pom.xml
+1
-1
assortment-shoppingcart-sdk/readme.md
+2
-2
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
+3
-3
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/domain/CartGoods.java
+2
-2
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
+28
-21
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
+1
-40
order-application-service/src/main/java/cn/freemud/enums/OrderRefundEnum.java
+7
-1
order-application-service/src/main/java/cn/freemud/enums/ProductType.java
+2
-1
order-management/src/main/java/cn/freemud/management/enums/OrderRefundEnum.java
+6
-1
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
+18
-0
shopping-cart-application-service/pom.xml
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
+6
-4
shopping-cart-application-service/src/main/java/cn/freemud/controller/MCoffeeShoppingCartController.java
+76
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
+6
-2
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
+2
-2
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/MaterialRequestVo.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/UpdateShoppingCartGoodsQtyRequestVo.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
+70
-17
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
+2
-2
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
+470
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
+271
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
+102
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/FullPromotionCalculation.java
+247
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/TimeSaleCalculation.java
+126
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/ActivityClient.java
+10
-0
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
View file @
1c2f8473
...
...
@@ -2564,10 +2564,13 @@ public class OrderSdkAdapter {
for
(
CreateOrderProductRequest
productRequest
:
products
)
{
// 普通商品 订单转换
productRequest
.
setOpid
(
index
);
if
(
ProductTypeEnum
.
MATERIAL_PRODUCT
.
getCode
().
equals
(
productRequest
.
getProductType
()))
{
originalAmount
+=
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
productRequest
,
partnerId
,
productRequest
.
getParentProductId
());
}
else
{
originalAmount
+=
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
productRequest
,
partnerId
,
""
);
if
(
ProductTypeEnum
.
MATERIAL_PRODUCT
.
getCode
().
equals
(
productRequest
.
getProductType
()))
{
if
(
CollectionUtils
.
isNotEmpty
(
productRequest
.
getMaterialProduct
()))
{
productRequest
.
getMaterialProduct
().
stream
().
forEach
(
material
->
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
material
,
partnerId
,
productRequest
.
getProductId
())
);
}
}
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
if
(
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_PRODUCT
.
getCode
(),
productRequest
.
getProductType
())
||
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_UPPRICE_PRODUCT
.
getCode
(),
productRequest
.
getProductType
()))
{
...
...
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
View file @
1c2f8473
...
...
@@ -134,6 +134,10 @@ public class CreateOrderProductRequest extends BaseConfig {
*/
private
List
<
CreateOrderProductRequest
>
comboProduct
;
/**
*加料商品
*/
private
List
<
CreateOrderProductRequest
>
materialProduct
;
/**
* 优惠列表
*/
private
List
<
CreateOrderAccountRequest
>
accounts
;
...
...
assortment-shoppingcart-sdk/pom.xml
View file @
1c2f8473
...
...
@@ -10,7 +10,7 @@
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
assortment-shoppingcart-sdk
</artifactId>
<version>
1.1.
7
-SNAPSHOT
</version>
<version>
1.1.
8
-SNAPSHOT
</version>
<dependencies>
<dependency>
...
...
assortment-shoppingcart-sdk/readme.md
View file @
1c2f8473
...
...
@@ -6,4 +6,4 @@
| 1.1.2-SNAPSHOT| 券码接口新增参数:channelCodeList | 梁崇福 | 2020-05-13 |
| 1.1.4-SNAPSHOT| 券码接口修改为channel_codes | 梁崇福 | 2020-06-08 |
| 1.1.5-SNAPSHOT| 增加统计分类编号:classificationId,classificationName | | 2020-06-12 |
| 1.1.7-SNAPSHOT| 加料 | 李小二 | 2020-07-30 |
\ No newline at end of file
| 1.1.8-SNAPSHOT| 加料 | 李小二 | 2020-07-30 |
\ No newline at end of file
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
View file @
1c2f8473
...
...
@@ -352,11 +352,11 @@ public class ShoppingCartAdapter {
Long
originalMaterAmount
=
0L
;
String
materialSubName
=
cartGoods
.
getSubName
();
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
detail
=
materialHash
.
get
(
materialGoods
.
get
Material
Id
());
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
detail
=
materialHash
.
get
(
materialGoods
.
get
Spu
Id
());
if
(
detail
==
null
)
continue
;
CartGoods
.
MaterialGoods
material
=
new
CartGoods
.
MaterialGoods
();
material
.
set
Material
Name
(
detail
.
getProductName
());
material
.
set
Material
Id
(
detail
.
getProductId
());
material
.
set
Spu
Name
(
detail
.
getProductName
());
material
.
set
Spu
Id
(
detail
.
getProductId
());
//行单价 \ 行总价
material
.
setFinalPrice
(
detail
.
getProductFinalPrice
().
longValue
());
material
.
setAmount
(
detail
.
getProductFinalPrice
().
longValue
());
...
...
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/domain/CartGoods.java
View file @
1c2f8473
...
...
@@ -302,11 +302,11 @@ public class CartGoods {
/**
* 加料Id
*/
private
String
material
Id
;
private
String
spu
Id
;
/**
* 加料名称
*/
private
String
material
Name
;
private
String
spu
Name
;
/**
* 购物车一行商品的现单价
*/
...
...
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
View file @
1c2f8473
...
...
@@ -143,19 +143,12 @@ public class OrderAdapter {
// 根据购物车商品信息获取优惠信息
int
orderAccountIndex
=
0
;
// TODO 取出加料信息
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
cartGoodsDetailDto
:
cartGoodsDetailDtos
)
{
Integer
qty
=
cartGoodsDetailDto
.
getQty
();
if
(
qty
>
0
)
{
CreateOrderProductRequest
createOrderProductDto
=
convent2OrderProduct
(
cartGoodsDetailDto
);
createOrderProductDto
.
setIgnoreProductPrice
(
1
);
products
.
add
(
createOrderProductDto
);
if
(
CollectionUtils
.
isNotEmpty
(
cartGoodsDetailDto
.
getMaterialList
()))
{
cartGoodsDetailDto
.
getMaterialList
().
stream
().
forEach
(
p
->
{
CreateOrderProductRequest
orderProductDto
=
convent2OrderProductByMaterial
(
cartGoodsDetailDto
,
p
);
products
.
add
(
orderProductDto
);
});
}
if
(
CollectionUtils
.
isNotEmpty
(
cartGoodsDetailDto
.
getActivityDiscountsDtos
()))
{
createOrderProductDto
.
setAccounts
(
getAccounts
(
createOrderProductDto
,
cartGoodsDetailDto
.
getActivityDiscountsDtos
()));
}
...
...
@@ -258,18 +251,6 @@ public class OrderAdapter {
return
createOrderDto
;
}
private
CreateOrderProductRequest
convent2OrderProductByMaterial
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
goodsDetail
,
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
CartGoodsMaterial
material
)
{
CreateOrderProductRequest
createOrderProductRequest
=
new
CreateOrderProductRequest
();
createOrderProductRequest
.
setParentProductId
(
goodsDetail
.
getSpuId
());
createOrderProductRequest
.
setProductId
(
material
.
getMaterialId
());
createOrderProductRequest
.
setProductName
(
material
.
getMaterialName
());
createOrderProductRequest
.
setPrice
(
material
.
getOriginalPrice
());
createOrderProductRequest
.
setSalePrice
(
material
.
getSalePrice
());
createOrderProductRequest
.
setTotalDiscountAmount
(
material
.
getTotalDiscountAmount
());
createOrderProductRequest
.
setNumber
(
goodsDetail
.
getQty
());
return
createOrderProductRequest
;
}
public
CreateFatherSonOrderRequest
convertFatherSonOrderRequest
(
CreateOrderVo
createOrderVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
OrderExtendedReq
orderExtendedReq
,
StoreResponse
.
BizVO
storeResponseDto
,
String
appId
)
{
...
...
@@ -1561,29 +1542,40 @@ public class OrderAdapter {
switch
(
orderBean
.
getStatus
())
{
// 未接单
case
1
:
//区分外卖单和到店订单,判断是否可以退款
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
orderBean
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_TAKE_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
TAKEORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
==
null
||
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
())))
{
canRefund
=
true
;
}
break
;
//已接单
case
3
:
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
orderBean
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_RECEIPT_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
RECEIPTORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
==
null
||
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
())))
{
canRefund
=
true
;
}
break
;
//制作完成
case
31
:
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
orderBean
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_COMPLETE_MAKE_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
COMPLETEMAKEORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
()))
{
canRefund
=
true
;
}
break
;
// 订单完成
case
5
:
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
ORDER_REFUND
.
getKeyValue
());
long
currentTime
=
System
.
currentTimeMillis
();
long
gmtModified
=
orderBean
.
getGmtModified
();
...
...
@@ -1595,6 +1587,11 @@ public class OrderAdapter {
}
long
allowRefundTime
=
gmtModified
+
value
*
24
*
60
*
60
*
1000
;
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
orderBean
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
ORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
())
&&
(
allowRefundTime
-
currentTime
)
>=
0
)
{
canRefund
=
true
;
}
...
...
@@ -1920,6 +1917,16 @@ public class OrderAdapter {
});
createOrderProductDemoDto
.
setComboProduct
(
comboProducts
);
}
//加料商品
if
(
cartGoodsDetailDto
.
getProductType
()
!=
null
&&
(
cartGoodsDetailDto
.
getProductType
()
==
ProductType
.
MATERIALPRODUCT_UPPRICE
.
getCode
()))
{
List
<
CreateOrderProductRequest
>
materialProducts
=
new
ArrayList
<>();
cartGoodsDetailDto
.
getMaterialList
().
forEach
(
product
->
{
materialProducts
.
add
(
convent2OrderProductDemo
(
product
));
});
createOrderProductDemoDto
.
setMaterialProduct
(
materialProducts
);
}
createOrderProductDemoDto
.
setProductType
(
cartGoodsDetailDto
.
getProductType
());
return
createOrderProductDemoDto
;
}
...
...
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
View file @
1c2f8473
...
...
@@ -212,7 +212,7 @@ public class ShoppingCartGoodsDto {
*/
private
List
<
CartGoodsDetailDto
>
comboProducts
;
private
List
<
CartGoods
Material
>
materialList
;
private
List
<
CartGoods
DetailDto
>
materialList
;
@Data
public
final
static
class
CartGoodsExtra
{
...
...
@@ -227,45 +227,6 @@ public class ShoppingCartGoodsDto {
}
@Data
public
final
static
class
CartGoodsMaterial
{
/**
* 加料Id
*/
private
String
materialId
;
/**
* 加料名称
*/
private
String
materialName
;
/**
* 加料数量
*/
private
Integer
qty
;
/**
* 加料原始价格
*/
private
Long
originalPrice
;
/**
* 加料优惠价格
*/
private
Long
totalDiscountAmount
;
/**
* 销售价格
*/
private
Long
salePrice
;
/**
* 商品类型
*/
private
Integer
type
;
/**
* 商品优惠信息
*/
List
<
ActivityDiscountsDto
>
activityDiscountsDtos
;
}
/**
* 获取extras attributeNames
*/
...
...
order-application-service/src/main/java/cn/freemud/enums/OrderRefundEnum.java
View file @
1c2f8473
...
...
@@ -19,7 +19,13 @@ public enum OrderRefundEnum {
TAKEORDER_REFUND
(
"takeOrderRefund"
,
"未接单是否支持退款"
),
RECEIPTORDER_REFUND
(
"receiptOrderRefund"
,
"已接单是否支持退款"
),
COMPLETEMAKEORDER_REFUND
(
"completeMakeOrderRefund"
,
"制作完成是否支持退款"
),
REFUND_DELIVERY_FEE_ENABLE
(
"refundShippingFee"
,
"商家同意退款时是否退配送费"
);
REFUND_DELIVERY_FEE_ENABLE
(
"refundShippingFee"
,
"商家同意退款时是否退配送费"
),
DELIVERY_TAKE_ORDER_REFUND
(
"deliveryTakeOrderRefund"
,
"外卖单未接单是否支持退款"
),
DELIVERY_RECEIPT_ORDER_REFUND
(
"deliveryReceiptOrderRefund"
,
"外卖单已接单是否支持退款"
),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND
(
"deliveryCompleteMakeOrderRefund"
,
"外卖单制作完成是否支持退款"
),
DELIVERY_ORDER_REFUND
(
"deliveryOrderRefund"
,
"外卖单订单完成是否支持退款"
);
private
String
keyValue
;
...
...
order-application-service/src/main/java/cn/freemud/enums/ProductType.java
View file @
1c2f8473
...
...
@@ -16,7 +16,8 @@ public enum ProductType {
NOSPEC
(
1
,
"无规格"
),
HAVESPEC
(
10
,
"有规格"
),
SETMEALPRODUCT
(
6
,
"套餐商品"
),
SETMEALPRODUCT_UPPRICE
(
7
,
"加价套餐商品"
);
SETMEALPRODUCT_UPPRICE
(
7
,
"加价套餐商品"
),
MATERIALPRODUCT_UPPRICE
(
88
,
"加料商品"
);
private
int
code
;
...
...
order-management/src/main/java/cn/freemud/management/enums/OrderRefundEnum.java
View file @
1c2f8473
...
...
@@ -19,7 +19,12 @@ public enum OrderRefundEnum {
TAKEORDER_REFUND
(
"takeOrderRefund"
,
"未接单是否支持退款"
),
RECEIPTORDER_REFUND
(
"receiptOrderRefund"
,
"已接单是否支持退款"
),
COMPLETEMAKEORDER_REFUND
(
"completeMakeOrderRefund"
,
"制作完成是否支持退款"
),
REFUND_DELIVERY_FEE_ENABLE
(
"refundShippingFee"
,
"商家同意退款时是否退配送费"
);
REFUND_DELIVERY_FEE_ENABLE
(
"refundShippingFee"
,
"商家同意退款时是否退配送费"
),
DELIVERY_TAKE_ORDER_REFUND
(
"deliveryTakeOrderRefund"
,
"外卖单未接单是否支持退款"
),
DELIVERY_RECEIPT_ORDER_REFUND
(
"deliveryReceiptOrderRefund"
,
"外卖单已接单是否支持退款"
),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND
(
"deliveryCompleteMakeOrderRefund"
,
"外卖单制作完成是否支持退款"
),
DELIVERY_ORDER_REFUND
(
"deliveryOrderRefund"
,
"外卖单订单完成是否支持退款"
);
private
String
keyValue
;
...
...
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
View file @
1c2f8473
...
...
@@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSONObject;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig
;
import
com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager
;
import
com.freemud.application.sdk.api.ordercenter.enums.OperateClient
;
import
com.freemud.sdk.api.assortment.message.enums.OrderType
;
import
com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -321,28 +322,45 @@ public class OrderVerifyHandle {
switch
(
data
.
getStatus
())
{
// 未接单
case
1
:
//区分外卖单和到店订单,判断是否可以退款
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
data
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_TAKE_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
TAKEORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
==
null
||
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
())))
{
isFinishRefund
=
true
;
}
break
;
//已接单
case
3
:
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
data
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_RECEIPT_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
RECEIPTORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
==
null
||
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
())))
{
isFinishRefund
=
true
;
}
break
;
//制作完成
case
31
:
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
data
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_COMPLETE_MAKE_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
COMPLETEMAKEORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
()))
{
isFinishRefund
=
true
;
}
break
;
// 订单完成
case
5
:
if
(
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
data
.
getOrderType
()))
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
DELIVERY_ORDER_REFUND
.
getKeyValue
());
}
else
{
orderRefund
=
configMap
.
get
(
OrderRefundEnum
.
ORDER_REFUND
.
getKeyValue
());
}
if
(
orderRefund
!=
null
&&
ALLOW_REFUND
.
equals
(
orderRefund
.
getAppValue
()))
{
isFinishRefund
=
true
;
}
...
...
shopping-cart-application-service/pom.xml
View file @
1c2f8473
...
...
@@ -45,7 +45,7 @@
<dependency>
<groupId>
cn.freemud
</groupId>
<artifactId>
assortment-shoppingcart-sdk
</artifactId>
<version>
1.1.
7
-SNAPSHOT
</version>
<version>
1.1.
8
-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
...
...
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
View file @
1c2f8473
...
...
@@ -111,14 +111,16 @@ public class ShoppingCartConvertAdapter {
}
else
if
(
cartGoods
.
isWeightType
())
{
cartGoodsDetailDto
.
setProductType
(
ProductType
.
WEIGHT_PRODUCT
.
getCode
());
}
if
(
cartGoods
.
getProductMaterialList
().
size
()
>
0
)
{
//小料
if
(
CollectionUtils
.
isNotEmpty
(
cartGoods
.
getProductMaterialList
()))
{
List
<
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
>
materialList
=
new
ArrayList
<>(
0
);
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
goods
=
new
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
();
goods
.
set
MaterialId
(
materialGoods
.
getMaterial
Id
());
goods
.
set
MaterialName
(
materialGoods
.
getMaterial
Name
());
goods
.
set
SpuId
(
materialGoods
.
getSpu
Id
());
goods
.
set
SpuName
(
materialGoods
.
getSpu
Name
());
goods
.
setOriginalPrice
(
materialGoods
.
getOriginalPrice
());
goods
.
setSalePrice
(
materialGoods
.
getFinalPrice
());
goods
.
setQty
(
cartGoods
.
getQty
());
materialList
.
add
(
goods
);
}
cartGoodsDetailDto
.
setMaterialList
(
materialList
);
...
...
@@ -399,7 +401,7 @@ public class ShoppingCartConvertAdapter {
if
(
CollectionUtils
.
isNotEmpty
(
addShoppingCartGoodsRequestVo
.
getProductMaterialList
()))
{
for
(
MaterialRequestVo
materialRequestVo
:
addShoppingCartGoodsRequestVo
.
getProductMaterialList
())
{
CartGoods
.
MaterialGoods
materialGoods
=
new
CartGoods
.
MaterialGoods
();
materialGoods
.
set
MaterialId
(
materialRequestVo
.
getMaterial
Id
());
materialGoods
.
set
SpuId
(
materialRequestVo
.
getSpu
Id
());
materialGoodsList
.
add
(
materialGoods
);
}
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/controller/MCoffeeShoppingCartController.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
controller
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.service.impl.mcoffee.ShoppingCartMCoffeeServiceImpl
;
import
com.freemud.application.sdk.api.log.ApiAnnotation
;
import
com.freemud.application.sdk.api.log.LogParams
;
import
io.swagger.annotations.Api
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: MCoffeeShoppingCartController
* @Package cn.freemud.controller
* @Description:
* @author: ping1.wu
* @date: 2020/7/21 17:37
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RestController
@RequestMapping
(
value
=
"/shoppingCart/MCoffee"
,
consumes
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
@Api
(
value
=
"购物车 controller"
,
tags
=
{
"购物车管理接口"
})
@Slf4j
public
class
MCoffeeShoppingCartController
{
@Autowired
private
ShoppingCartMCoffeeServiceImpl
shoppingCartMCoffeeService
;
/**
* 向购物车中添加商品
*/
@ApiAnnotation
(
logMessage
=
"addGoods"
)
@PostMapping
(
value
=
"/addGoods"
)
public
BaseResponse
addGoods
(
@Validated
@LogParams
@RequestBody
AddShoppingCartGoodsRequestVo
request
)
{
return
shoppingCartMCoffeeService
.
addGoods
(
request
);
}
/**
* 修改购物车中商品数量
*/
@ApiAnnotation
(
logMessage
=
"updateGoodsQty"
)
@PostMapping
(
value
=
"/updateGoodsQty"
)
public
BaseResponse
updateGoodsQty
(
@Validated
@LogParams
@RequestBody
UpdateShoppingCartGoodsQtyRequestVo
request
)
{
return
shoppingCartMCoffeeService
.
updateGoodsQty
(
request
);
}
/**
* 查询购物车信息
*/
@ApiAnnotation
(
logMessage
=
"listCartGoods"
)
@PostMapping
(
value
=
"/listCartGoods"
)
public
BaseResponse
listCartGoods
(
@Validated
@LogParams
@RequestBody
ShoppingCartInfoRequestVo
request
)
{
return
shoppingCartMCoffeeService
.
getGoodsList
(
request
);
}
/**
* 清空购物车
*/
@ApiAnnotation
(
logMessage
=
"clearCartGoods"
)
@PostMapping
(
value
=
"/clearCartGoods"
)
public
BaseResponse
clearCartGoods
(
@Validated
@LogParams
@RequestBody
ShoppingCartClearRequestVo
request
)
{
return
shoppingCartMCoffeeService
.
clear
(
request
);
}
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
View file @
1c2f8473
...
...
@@ -262,8 +262,8 @@ public class ShoppingCartGoodsDto {
/**
* 加料商品ID
*/
private
String
material
Id
;
private
String
material
Name
;
private
String
spu
Id
;
private
String
spu
Name
;
/**
* 商品行记录:当前元售价
*/
...
...
@@ -273,6 +273,10 @@ public class ShoppingCartGoodsDto {
*/
private
Long
salePrice
;
/**
* 小料商品的数量
*/
private
Integer
qty
;
/**
* 商品行优惠总金额=数量*单个商品优惠金额
*/
private
Integer
totalDiscountAmount
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
View file @
1c2f8473
...
...
@@ -381,11 +381,11 @@ public class CartGoods {
/**
* 加料Id
*/
private
String
material
Id
;
private
String
spu
Id
;
/**
* 加料名称
*/
private
String
material
Name
;
private
String
spu
Name
;
/**
* 购物车一行商品的原单价
*/
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/MaterialRequestVo.java
View file @
1c2f8473
...
...
@@ -19,5 +19,5 @@ public class MaterialRequestVo {
/**
* 加料商品ID
*/
private
String
material
Id
;
private
String
spu
Id
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/UpdateShoppingCartGoodsQtyRequestVo.java
View file @
1c2f8473
...
...
@@ -32,7 +32,7 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
private
String
cartGoodsUid
;
/**
* 商品数量
*
更新后
商品数量
*/
@NotNull
(
message
=
"qty不能为空"
)
private
Integer
qty
;
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
View file @
1c2f8473
...
...
@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.GoodsTypeEnum
;
import
cn.freemud.service.IPromotionService
;
import
lombok.Data
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -42,28 +43,26 @@ public class MaterialPromotionService implements IPromotionService {
*/
@Override
public
void
updateShoppingCartGoodsDiscount
(
CouponPromotionVO
couponPromotionVO
,
ActivityQueryDto
activityQueryDto
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
UserLoginInfoDto
userLoginInfoDto
,
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
HashMap
<
String
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
HashMap
<
String
,
MaterialApportion
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
if
(
map
!=
null
&&
!
map
.
isEmpty
())
{
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
if
(
cartGoods
.
getProductMaterialList
().
size
()
==
0
)
continue
;
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
())
)
continue
;
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
material
=
map
.
get
(
materialGoods
.
getMaterial
Id
());
MaterialApportion
apportion
=
map
.
get
(
materialGoods
.
getSpu
Id
());
//设置小料行单价和行总价
if
(
material
.
getNowPrice
()
>
0
)
{
materialGoods
.
setFinalPrice
(
material
.
getNowPrice
());
materialGoods
.
setAmount
(
material
.
getNowPrice
()
*
cartGoods
.
getQty
());
}
materialGoods
.
setFinalPrice
(
apportion
.
getSalePrice
());
materialGoods
.
setAmount
(
apportion
.
getAmount
());
}
}
}
long
materialAmount
=
0L
,
materialOriginal
=
0L
;
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
if
(
cartGoods
.
getProductMaterialList
().
size
()
==
0
)
continue
;
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
())
)
continue
;
materialAmount
=
0L
;
materialOriginal
=
0L
;
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
materialAmount
+=
materialGoods
.
get
FinalPrice
()
*
cartGoods
.
getQty
();
materialAmount
+=
materialGoods
.
get
Amount
();
materialOriginal
+=
materialGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
();
}
//设置商品行现总价\行原价 商品总价+小料商品总价
...
...
@@ -83,22 +82,22 @@ public class MaterialPromotionService implements IPromotionService {
*/
@Override
public
void
updateShoppingCartGoodsApportion
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
CreateOrderVo
.
PremiumExchangeActivity
premiumExchangeActivity
,
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
HashMap
<
String
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
HashMap
<
String
,
MaterialApportion
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
if
(
map
==
null
&&
map
.
isEmpty
())
return
;
List
<
ShoppingCartGoodsDto
.
CartGoodsDetailDto
>
products
=
shoppingCartGoodsDto
.
getProducts
();
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
product
:
products
)
{
if
(
product
.
getMaterialList
().
size
()
==
0
)
return
;
if
(
CollectionUtils
.
isEmpty
(
product
.
getMaterialList
()))
continue
;
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
materialGoods
:
product
.
getMaterialList
())
{
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
material
=
map
.
get
(
materialGoods
.
getMaterial
Id
());
MaterialApportion
material
=
map
.
get
(
materialGoods
.
getSpu
Id
());
if
(
material
.
getApportionAmount
().
intValue
()
==
0
)
continue
;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto
activityDiscountsDto
=
new
ActivityDiscountsDto
();
List
<
ActivityDiscountsDto
>
activityDiscountsDtoList
=
new
ArrayList
<>();
activityDiscountsDto
.
setActivityCode
(
material
.
get
ApportionDetails
().
get
(
0
).
getActivityCode
()
);
activityDiscountsDto
.
setActivityName
(
material
.
get
ApportionDetails
().
get
(
0
).
getActivityName
()
);
activityDiscountsDto
.
setActivityType
(
material
.
get
ApportionDetails
().
get
(
0
).
getActivityType
()
);
activityDiscountsDto
.
setDiscountAmount
(
material
.
getApportion
Details
().
get
(
0
).
getActivityApportionAmount
().
intValue
());
activityDiscountsDto
.
setActivityCode
(
material
.
get
Details
().
activityCode
);
activityDiscountsDto
.
setActivityName
(
material
.
get
Details
().
activityName
);
activityDiscountsDto
.
setActivityType
(
material
.
get
Details
().
activityType
);
activityDiscountsDto
.
setDiscountAmount
(
material
.
getApportion
Amount
());
activityDiscountsDtoList
.
add
(
activityDiscountsDto
);
materialGoods
.
setActivityDiscountsDtos
(
activityDiscountsDtoList
);
...
...
@@ -106,6 +105,15 @@ public class MaterialPromotionService implements IPromotionService {
product
.
setProductType
(
GoodsTypeEnum
.
MATERIAL
.
getGoodsType
());
}
}
//将小料的价格累加到商品行上
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
product
:
products
)
{
if
(
CollectionUtils
.
isEmpty
(
product
.
getMaterialList
()))
continue
;
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
materialGoods
:
product
.
getMaterialList
())
{
product
.
setSalePrice
(
product
.
getSalePrice
()
+
materialGoods
.
getSalePrice
());
//现金
product
.
setOriginalPrice
(
product
.
getOriginalPrice
()
+
materialGoods
.
getOriginalPrice
());
product
.
setTotalDiscountAmount
(
product
.
getTotalDiscountAmount
()
+
materialGoods
.
getTotalDiscountAmount
());
}
}
}
/**
...
...
@@ -114,12 +122,13 @@ public class MaterialPromotionService implements IPromotionService {
* @param calculationDiscountResult
* @return
*/
private
HashMap
<
String
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
>
getApportionGoodsDetail
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
)
{
private
HashMap
<
String
,
MaterialApportion
>
getApportionGoodsDetail
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
)
{
// 遍历促销
if
(
calculationDiscountResult
==
null
||
CollectionUtils
.
isEmpty
(
calculationDiscountResult
.
getApportionGoods
()))
{
return
null
;
}
/*
HashMap<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material> hashMap = new HashMap<>();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGood : calculationDiscountResult.getApportionGoods()) {
if (CollectionUtils.isEmpty(apportionGood.getSmallMaterial())) continue;
...
...
@@ -128,6 +137,50 @@ public class MaterialPromotionService implements IPromotionService {
}
}
return hashMap;
*/
HashMap
<
String
,
MaterialApportion
>
mApportion
=
new
HashMap
<>();
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
apportionGood
:
calculationDiscountResult
.
getApportionGoods
())
{
if
(
CollectionUtils
.
isEmpty
(
apportionGood
.
getSmallMaterial
()))
continue
;
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
Material
material
:
apportionGood
.
getSmallMaterial
())
{
if
(
mApportion
.
get
(
material
.
getGoodsId
())
==
null
)
{
MaterialApportion
materialApportion
=
new
MaterialApportion
();
materialApportion
.
setSalePrice
(
material
.
getNowPrice
());
materialApportion
.
setAmount
(
material
.
getNowPrice
()
*
material
.
getGoodsQuantity
());
materialApportion
.
setApportionAmount
(
material
.
getApportionAmount
()
*
material
.
getGoodsQuantity
());
materialApportion
.
setGoodsId
(
material
.
getGoodsId
());
ApportionDetails
apportionDetails
=
new
ApportionDetails
();
apportionDetails
.
setActivityCode
(
material
.
getApportionDetails
().
get
(
0
).
getActivityCode
());
apportionDetails
.
setActivityName
(
material
.
getApportionDetails
().
get
(
0
).
getActivityName
());
apportionDetails
.
setActivityType
(
material
.
getApportionDetails
().
get
(
0
).
getActivityType
());
materialApportion
.
setDetails
(
apportionDetails
);
mApportion
.
put
(
material
.
getGoodsId
(),
materialApportion
);
continue
;
}
MaterialApportion
apportion
=
mApportion
.
get
(
material
.
getGoodsId
());
apportion
.
setSalePrice
(
apportion
.
getSalePrice
()
+
material
.
getNowPrice
());
apportion
.
setAmount
(
apportion
.
getAmount
()
+
material
.
getNowPrice
()
*
material
.
getGoodsQuantity
());
apportion
.
setApportionAmount
(
apportion
.
getApportionAmount
()
+
material
.
getApportionAmount
()
*
material
.
getGoodsQuantity
());
mApportion
.
put
(
material
.
getGoodsId
(),
apportion
);
}
}
return
mApportion
;
}
@Data
private
class
MaterialApportion
{
// 累计
private
String
goodsId
;
private
Long
salePrice
;
private
Long
amount
;
private
Integer
apportionAmount
;
private
ApportionDetails
details
;
}
@Data
public
class
ApportionDetails
{
private
String
activityCode
;
private
String
activityName
;
private
Integer
activityType
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
View file @
1c2f8473
...
...
@@ -851,13 +851,13 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
calculationDiscountGoods
.
setMemberDiscount
(
cartGoods
.
getMemberDiscount
());
//加料
if
(
cartGoods
.
getProductMaterialList
().
size
()
>
0
)
{
if
(
CollectionUtils
.
isNotEmpty
(
cartGoods
.
getProductMaterialList
())
)
{
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
.
Material
();
ArrayList
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
.
Material
>
materials
=
new
ArrayList
<>();
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
.
Material
material
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
.
Material
();
material
.
setType
(
1
);
material
.
setGoodsId
(
materialGoods
.
get
Material
Id
());
material
.
setGoodsId
(
materialGoods
.
get
Spu
Id
());
material
.
setGoodsQuantity
(
cartGoods
.
getQty
());
material
.
setOriginalPrice
(
materialGoods
.
getFinalPrice
());
materials
.
add
(
material
);
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
service
.
impl
.
mcoffee
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.ShoppingCartConstant
;
import
cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto
;
import
cn.freemud.entities.dto.ActivityResponseDto
;
import
cn.freemud.entities.dto.GoodsBeanDto
;
import
cn.freemud.entities.dto.PromotionMessageDto
;
import
cn.freemud.entities.dto.activity.ActivityQueryDto
;
import
cn.freemud.entities.dto.activity.ActivityQueryResponseDto
;
import
cn.freemud.entities.dto.user.GetSessionUserInfoDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ActivityTypeEnum
;
import
cn.freemud.enums.OperationTypeEnum
;
import
cn.freemud.enums.OrderType
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.ActivityService
;
import
cn.freemud.service.impl.AssortmentSdkService
;
import
cn.freemud.service.impl.FullSubtractionActivityServiceImpl
;
import
cn.freemud.service.impl.mcoffee.calculation.CalculationServiceImpl
;
import
cn.freemud.service.thirdparty.CustomerApplicationClient
;
import
cn.freemud.utils.ResponseUtil
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest
;
import
com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Objects
;
import
static
cn
.
freemud
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_EMPTY_GOODS_LIST
;
import
static
cn
.
freemud
.
constant
.
ShoppingCartConstant
.
SHOPPING_CART_INVALIAD_GOODS
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ShoppingCartMCoffeeServiceImpl
* @Package cn.freemud.service.impl
* @Description:
* @author: ping1.wu
* @date: 2020/7/21 17:40
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public
class
ShoppingCartMCoffeeServiceImpl
{
@Autowired
private
ActivityAdapter
activityAdapter
;
@Autowired
private
ShoppingCartBaseServiceImpl
shoppingCartBaseService
;
@Autowired
private
FullSubtractionActivityServiceImpl
fullSubtractionActivityService
;
@Autowired
private
AssortmentSdkService
assortmentSdkService
;
@Autowired
private
CustomerApplicationClient
customerApplicationClient
;
@Autowired
private
CalculationServiceImpl
calculationService
;
/**
* 添加商品
*
* @param addShoppingCartGoodsRequestVo
* @return
*/
public
BaseResponse
addGoods
(
AddShoppingCartGoodsRequestVo
addShoppingCartGoodsRequestVo
)
{
// TODO: 2020/7/21 参数校验
if
(
StringUtils
.
isEmpty
(
addShoppingCartGoodsRequestVo
.
getShopId
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
if
(
addShoppingCartGoodsRequestVo
.
getQty
()
!=
null
&&
addShoppingCartGoodsRequestVo
.
getQty
()
<
0
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_ADD_ERROR
);
}
String
sessionId
=
addShoppingCartGoodsRequestVo
.
getSessionId
();
// 获取用户信息
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
sessionId
);
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
String
userId
=
assortmentCustomerInfoVo
.
getMemberId
();
String
partnerId
=
addShoppingCartGoodsRequestVo
.
getPartnerId
();
String
storeId
=
addShoppingCartGoodsRequestVo
.
getShopId
();
String
appId
=
addShoppingCartGoodsRequestVo
.
getAppId
();
String
spuId
=
addShoppingCartGoodsRequestVo
.
getSpuId
();
String
skuId
=
StringUtils
.
isNotBlank
(
addShoppingCartGoodsRequestVo
.
getSkuId
())
?
addShoppingCartGoodsRequestVo
.
getSkuId
()
:
""
;
String
goodsId
=
StringUtils
.
isEmpty
(
skuId
)
?
spuId
:
skuId
;
String
tableNumber
=
addShoppingCartGoodsRequestVo
.
getTableNumber
();
String
menuType
=
addShoppingCartGoodsRequestVo
.
getMenuType
();
Integer
orderType
=
addShoppingCartGoodsRequestVo
.
getOrderType
();
String
receiveId
=
addShoppingCartGoodsRequestVo
.
getReceiveId
();
CartGoods
addCartGoods
=
ShoppingCartConvertAdapter
.
convent2CartGoods
(
addShoppingCartGoodsRequestVo
);
// TODO: 2020/7/21 查询购物车缓存
// 注意,围餐和点餐redis数据结构不一样
List
<
CartGoods
>
oldCartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
userId
,
null
,
null
,
shoppingCartBaseService
);
if
(
CollectionUtils
.
isEmpty
(
oldCartGoodsList
))
{
oldCartGoodsList
=
new
ArrayList
<>();
}
String
spuId2
=
spuId
;
List
<
Long
>
productIds
=
new
ArrayList
<>();
productIds
.
add
(
Long
.
parseLong
(
goodsId
));
// 获取商品详细信息
List
<
ProductBeanDTO
>
productBeanListSpuClass
=
assortmentSdkService
.
getProductsInfoSdk
(
partnerId
,
storeId
,
Collections
.
singletonList
(
spuId2
),
menuType
,
this
.
shoppingCartBaseService
);
setClassificationAndPrice
(
addCartGoods
,
productBeanListSpuClass
);
//查询多个商品库存信息
Integer
checkQty
=
this
.
checkSkuQty
(
oldCartGoodsList
,
addCartGoods
);
// queryManyGoodsStocks(partnerId, storeId, menuType, productIds, productBeanListSpuClass, skuId, checkQty);
// 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
boolean
haveCouponProduct
=
oldCartGoodsList
.
parallelStream
().
anyMatch
(
k
->
k
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
));
if
(
haveCouponProduct
&&
isSpecialGoods
(
partnerId
,
storeId
,
userId
,
appId
,
goodsId
,
orderType
))
{
// 如果购物车先加入商品券,再加入促销商品,toast提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
setToastMsgIfNotExist
(
shoppingCartGoodsResponseVo
,
ShoppingCartConstant
.
HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS
);
}
List
<
CartGoods
>
newCartGoods
=
new
ArrayList
<>();
newCartGoods
.
addAll
(
oldCartGoodsList
);
newCartGoods
=
checkNewCartGoods
(
newCartGoods
,
addCartGoods
);
// TODO: 2020/7/21 促销活动等价格计算
calculationService
.
updateShoppingCartGoodsDiscount
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
menuType
,
receiveId
,
newCartGoods
,
new
ArrayList
<>(),
new
ArrayList
<>(),
shoppingCartGoodsResponseVo
);
// TODO: 2020/7/21 购物车数据更新
newCartGoods
=
updateCartGoodsLegal
(
partnerId
,
storeId
,
orderType
,
tableNumber
,
menuType
,
userId
,
addCartGoods
,
shoppingCartGoodsResponseVo
,
newCartGoods
);
// TODO: 2020/7/21 返回购物车数据
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
newCartGoods
,
null
,
ShoppingCartConstant
.
ADD_AND_UPDATE
,
null
);
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
/**
* 更新商品数量
*
* @param updateShoppingCartGoodsQtyRequestVo
* @return
*/
public
BaseResponse
updateGoodsQty
(
UpdateShoppingCartGoodsQtyRequestVo
updateShoppingCartGoodsQtyRequestVo
)
{
if
(
StringUtils
.
isEmpty
(
updateShoppingCartGoodsQtyRequestVo
.
getShopId
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
if
(
updateShoppingCartGoodsQtyRequestVo
.
getQty
()
!=
null
&&
updateShoppingCartGoodsQtyRequestVo
.
getQty
()
<
0
)
{
return
ResponseUtil
.
error
(
ResponseResult
.
SHOPPING_CART_ADD_ERROR
);
}
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
updateShoppingCartGoodsQtyRequestVo
.
getSessionId
());
String
userId
=
assortmentCustomerInfoVo
.
getMemberId
();
String
partnerId
=
updateShoppingCartGoodsQtyRequestVo
.
getPartnerId
();
String
storeId
=
updateShoppingCartGoodsQtyRequestVo
.
getShopId
();
String
appId
=
updateShoppingCartGoodsQtyRequestVo
.
getAppId
();
String
cartGoodsUid
=
updateShoppingCartGoodsQtyRequestVo
.
getCartGoodsUid
();
Integer
qty
=
updateShoppingCartGoodsQtyRequestVo
.
getQty
();
String
menuType
=
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
();
Integer
orderType
=
updateShoppingCartGoodsQtyRequestVo
.
getOrderType
();
String
receiveId
=
updateShoppingCartGoodsQtyRequestVo
.
getReceiveId
();
// 先验证商品是否存在
List
<
CartGoods
>
cartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
userId
,
null
,
null
,
shoppingCartBaseService
);
CartGoods
cartGoods
=
null
;
for
(
CartGoods
cartGoods_
:
cartGoodsList
)
{
if
(
cartGoodsUid
.
equals
(
cartGoods_
.
getCartGoodsUid
()))
{
cartGoods
=
cartGoods_
;
cartGoods_
.
setQty
(
qty
);
break
;
}
}
if
(
cartGoods
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_UPDATE_ERROR
);
}
// 检查购物车商品库存数量
// checkUpdateStock(partnerId, storeId, menuType, qty, cartGoods);
// check购物车中所有商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
cartGoodsList
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
updateShoppingCartGoodsQtyRequestVo
.
getOrderType
(),
""
,
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新存储最新购物车
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
userId
,
cartGoodsList
,
updateShoppingCartGoodsQtyRequestVo
.
getSessionId
(),
""
,
shoppingCartBaseService
);
// 促销活动的优惠金额计算
calculationService
.
updateShoppingCartGoodsDiscount
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
menuType
,
receiveId
,
cartGoodsList
,
new
ArrayList
<>(),
new
ArrayList
<>(),
shoppingCartGoodsResponseVo
);
//设置更新响应信息
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
cartGoodsList
,
shoppingCartGoodsResponseVo
.
getToastMsg
(),
ShoppingCartConstant
.
ADD_AND_UPDATE
,
null
);
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
/**
* 购物车商品详情接口
*
* @param shoppingCartInfoRequestVo
* @return
*/
public
BaseResponse
getGoodsList
(
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
if
(
StringUtils
.
isEmpty
(
shoppingCartInfoRequestVo
.
getShopId
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_SHOP_ID_NOT_EMPTY
);
}
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
// 获取用户信息
CustomerInfoVo
assortmentCustomerInfoVo
=
getCustomerInfoVo
(
shoppingCartInfoRequestVo
.
getSessionId
());
String
userId
=
assortmentCustomerInfoVo
.
getMemberId
();
String
partnerId
=
shoppingCartInfoRequestVo
.
getPartnerId
();
String
storeId
=
shoppingCartInfoRequestVo
.
getShopId
();
String
appId
=
shoppingCartInfoRequestVo
.
getAppId
();
String
couponCode
=
shoppingCartInfoRequestVo
.
getCouponCode
();
String
activityCode
=
shoppingCartInfoRequestVo
.
getActivityCode
();
String
menuType
=
shoppingCartInfoRequestVo
.
getMenuType
();
Integer
orderType
=
shoppingCartInfoRequestVo
.
getOrderType
();
String
receiveId
=
shoppingCartInfoRequestVo
.
getReceiveId
();
// 获取购物车商品
List
<
CartGoods
>
cartGoodsList
=
assortmentSdkService
.
getShoppingCart
(
partnerId
,
storeId
,
userId
,
null
,
""
,
shoppingCartBaseService
);
// 如果购物车商品不为空, 则check购物车中所有商品
if
(
CollectionUtils
.
isNotEmpty
(
cartGoodsList
))
{
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
cartGoodsList
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
shoppingCartInfoRequestVo
.
getOrderType
(),
""
,
shoppingCartInfoRequestVo
.
getMenuType
(),
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
}
cartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新存储最新购物车
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
userId
,
cartGoodsList
,
assortmentCustomerInfoVo
.
getSessionId
(),
""
,
this
.
shoppingCartBaseService
);
}
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
>
coupons
=
new
ArrayList
<>();
// 当couponCode不为空时,需参与价格计算
if
(
StringUtils
.
isNotEmpty
(
couponCode
))
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
coupon
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
();
coupon
.
setCode
(
couponCode
);
coupon
.
setActivityCode
(
activityCode
);
coupons
.
add
(
coupon
);
}
// 促销活动的优惠金额计算
calculationService
.
updateShoppingCartGoodsDiscount
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
,
assortmentCustomerInfoVo
.
isMemberPaid
(),
menuType
,
receiveId
,
cartGoodsList
,
new
ArrayList
<>(),
new
ArrayList
<>(),
shoppingCartGoodsResponseVo
);
//设置更新响应信息
setAddAndUpdateResponse
(
shoppingCartGoodsResponseVo
,
cartGoodsList
,
shoppingCartGoodsResponseVo
.
getToastMsg
(),
ShoppingCartConstant
.
QUERY_INFO
,
shoppingCartInfoRequestVo
);
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
/**
* 清空购物车
*
* @param shoppingCartClearRequestVo
* @return
*/
public
BaseResponse
clear
(
ShoppingCartClearRequestVo
shoppingCartClearRequestVo
)
{
String
appId
=
shoppingCartClearRequestVo
.
getAppId
();
if
(
StringUtils
.
isBlank
(
appId
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
PARAMETER_MISSING
,
"appId不能为空"
);
}
String
userId
=
shoppingCartClearRequestVo
.
getUserId
();
if
(
StringUtils
.
isEmpty
(
userId
))
{
CustomerInfoVo
userLoginInfoDto
=
getCustomerInfoVo
(
shoppingCartClearRequestVo
.
getSessionId
());
userId
=
userLoginInfoDto
.
getMemberId
();
}
String
partnerId
=
shoppingCartClearRequestVo
.
getPartnerId
();
String
storeId
=
shoppingCartClearRequestVo
.
getShopId
();
com
.
freemud
.
sdk
.
api
.
assortment
.
shoppingcart
.
domain
.
CartParamDto
cartParamDto
=
assortmentSdkService
.
getCartParamDto
(
partnerId
,
storeId
,
userId
);
shoppingCartBaseService
.
clear
(
cartParamDto
,
LogThreadLocal
.
getTrackingNo
());
if
(
ObjectUtils
.
equals
(
shoppingCartClearRequestVo
.
getOperationType
(),
OperationTypeEnum
.
PAY_SUCCESS
.
getOperationType
()))
{
return
ResponseUtil
.
success
();
}
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
=
new
ShoppingCartGoodsResponseVo
();
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
userId
,
appId
,
shoppingCartClearRequestVo
.
getOrderType
());
ArrayList
<
ActivityList
>
activityList
=
new
ArrayList
<>();
PromotionMessageDto
promotionMessageDto
=
fullSubtractionActivityService
.
getFullPromotionActivityInfo
(
activityQueryDto
,
null
,
activityList
);
ActivityTip
activityTip
=
new
ActivityTip
();
if
(
promotionMessageDto
!=
null
)
{
activityTip
.
setActivityCode
(
promotionMessageDto
.
getActivityId
());
activityTip
.
setActivityType
(
promotionMessageDto
.
getActivityType
());
activityTip
.
setActivityName
(
promotionMessageDto
.
getPromotionMessage
());
activityTip
.
setActivityList
(
activityList
);
}
shoppingCartGoodsResponseVo
.
setActivityTip
(
activityTip
);
shoppingCartGoodsResponseVo
.
setProducts
(
new
ArrayList
<>());
shoppingCartGoodsResponseVo
.
setProductsCount
(
0
);
return
ResponseUtil
.
success
(
shoppingCartGoodsResponseVo
);
}
/**
* 获取购物车商品,添加商品,校验商品合法性,合并商品行,重新set购物车信息到缓存中
*
* @param addCartGoods
* @param userId
* @param shoppingCartGoodsResponseVo
*/
public
List
<
CartGoods
>
updateCartGoodsLegal
(
String
partnerId
,
String
storeId
,
Integer
orderType
,
String
tableNumber
,
String
menuType
,
String
userId
,
CartGoods
addCartGoods
,
ShoppingCartGoodsBaseResponseVo
shoppingCartGoodsResponseVo
,
List
<
CartGoods
>
newCartGoods
)
{
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest
checkCartRequest
=
assortmentSdkService
.
checkShoppingCartSdk
(
newCartGoods
,
partnerId
,
storeId
,
shoppingCartGoodsResponseVo
,
orderType
,
""
,
menuType
,
shoppingCartBaseService
);
if
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
()
!=
null
)
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getToastMsg
());
shoppingCartGoodsResponseVo
.
setChanged
(
checkCartRequest
.
getShoppingCartGoodsResponseVo
().
getChanged
());
}
List
<
CartGoods
>
allCartGoodsList
=
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
checkCartRequest
.
getCartGoodsList
()),
CartGoods
.
class
);
// 重新set购物车信息到缓存中
assortmentSdkService
.
setShoppingCart
(
partnerId
,
storeId
,
userId
,
allCartGoodsList
,
null
,
tableNumber
,
this
.
shoppingCartBaseService
);
return
allCartGoodsList
;
}
/**
* 组装添加商品和更新商品和查询的响应信息
* <p>
* 查询购物车计算包装费
*
* @param shoppingCartGoodsResponseVo
* @param cartGoodsList
* @param toastMsg
* @param opt
* @param shoppingCartInfoRequestVo
*/
private
void
setAddAndUpdateResponse
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
List
<
CartGoods
>
cartGoodsList
,
String
toastMsg
,
String
opt
,
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
shoppingCartGoodsResponseVo
.
setProducts
(
cartGoodsList
);
shoppingCartGoodsResponseVo
.
setProductsCount
(
cartGoodsList
.
size
());
if
(
StringUtils
.
isNotEmpty
(
toastMsg
))
{
toastMsg
=
shoppingCartInfoRequestVo
!=
null
&&
ObjectUtils
.
equals
(
1
,
shoppingCartInfoRequestVo
.
getFlag
())
?
SHOPPING_CART_EMPTY_GOODS_LIST
:
SHOPPING_CART_INVALIAD_GOODS
;
setToastMsgIfNotExist
(
shoppingCartGoodsResponseVo
,
toastMsg
);
//结算页,只有商品全部非法(即products为空)时,才提示changed为true toastMsg 不为空
if
(
shoppingCartInfoRequestVo
!=
null
&&
ObjectUtils
.
equals
(
1
,
shoppingCartInfoRequestVo
.
getFlag
()))
{
shoppingCartGoodsResponseVo
.
setChanged
(
CollectionUtils
.
isEmpty
(
cartGoodsList
));
shoppingCartGoodsResponseVo
.
setToastMsg
(
CollectionUtils
.
isEmpty
(
cartGoodsList
)
?
toastMsg
:
""
);
}
}
// 更新和添加商品时不需要包装费
if
(
ShoppingCartConstant
.
ADD_AND_UPDATE
.
equals
(
opt
))
{
shoppingCartGoodsResponseVo
.
setNewPackAmount
(
null
);
return
;
}
if
(
shoppingCartGoodsResponseVo
.
getNewPackAmount
()
==
null
||
shoppingCartGoodsResponseVo
.
getNewPackAmount
()
==
0L
)
{
return
;
}
if
(
shoppingCartInfoRequestVo
!=
null
&&
Objects
.
equals
(
shoppingCartInfoRequestVo
.
getReachStoreType
(),
OrderType
.
EAT_IN
.
getCode
()))
{
shoppingCartGoodsResponseVo
.
setNewPackAmount
(
null
);
}
else
{
Long
packAmount
=
shoppingCartGoodsResponseVo
.
getNewPackAmount
();
Long
originalTotalAmount
=
shoppingCartGoodsResponseVo
.
getOriginalTotalAmount
()
+
packAmount
;
Long
totalAmount
=
shoppingCartGoodsResponseVo
.
getTotalAmount
()
+
packAmount
;
shoppingCartGoodsResponseVo
.
setOriginalTotalAmount
(
originalTotalAmount
);
shoppingCartGoodsResponseVo
.
setTotalAmount
(
totalAmount
);
}
}
/**
* 检查sku数量
*
* @param oldCartGoodsList
* @param addCartGoods
* @return
*/
private
Integer
checkSkuQty
(
List
<
CartGoods
>
oldCartGoodsList
,
CartGoods
addCartGoods
)
{
Integer
qty
=
addCartGoods
.
getQty
()
==
null
?
0
:
addCartGoods
.
getQty
();
if
(
CollectionUtils
.
isNotEmpty
(
oldCartGoodsList
))
{
for
(
CartGoods
goods
:
oldCartGoodsList
)
{
if
(
goods
.
getSkuId
().
equals
(
addCartGoods
.
getSkuId
())
&&
goods
.
getSpuId
().
equals
(
addCartGoods
.
getSpuId
()))
{
qty
+=
goods
.
getQty
();
}
}
}
return
qty
;
}
private
List
<
CartGoods
>
checkNewCartGoods
(
List
<
CartGoods
>
newCartGoods
,
CartGoods
addCartGoods
)
{
Integer
qty
=
addCartGoods
.
getQty
()
==
null
?
0
:
addCartGoods
.
getQty
();
if
(
CollectionUtils
.
isNotEmpty
(
newCartGoods
))
{
for
(
CartGoods
goods
:
newCartGoods
)
{
if
(
goods
.
getSkuId
().
equals
(
addCartGoods
.
getSkuId
())
&&
goods
.
getSpuId
().
equals
(
addCartGoods
.
getSpuId
()))
{
qty
+=
goods
.
getQty
();
goods
.
setQty
(
qty
);
break
;
}
}
}
else
{
newCartGoods
.
add
(
addCartGoods
);
}
return
newCartGoods
;
}
private
void
setToastMsgIfNotExist
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
String
message
)
{
if
(
StringUtils
.
isEmpty
(
shoppingCartGoodsResponseVo
.
getToastMsg
()))
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
message
);
}
}
/**
* 查询用户信息
* @param sessionId
* @return
*/
private
CustomerInfoVo
getCustomerInfoVo
(
String
sessionId
)
{
GetSessionUserInfoDto
getSessionUserInfoDto
=
new
GetSessionUserInfoDto
();
getSessionUserInfoDto
.
setIsGetPaid
(
true
);
getSessionUserInfoDto
.
setSessionId
(
sessionId
);
BaseResponse
<
CustomerInfoVo
>
sessionUserInfo
=
customerApplicationClient
.
getSessionUserInfo
(
getSessionUserInfoDto
);
if
(
sessionUserInfo
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
sessionUserInfo
.
getCode
())
||
sessionUserInfo
.
getResult
()
==
null
||
sessionUserInfo
.
getResult
().
getMemberId
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
NOT_LOGIN
);
}
return
sessionUserInfo
.
getResult
();
}
private
boolean
isSpecialGoods
(
String
partnerId
,
String
storeId
,
String
userId
,
String
appId
,
String
goodsId
,
Integer
orderType
)
{
boolean
isSpecialGoods
=
false
;
ActivityAdapter
activityAdapter
=
SDKCommonBaseContextWare
.
getBean
(
ActivityAdapter
.
class
);
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
);
ActivityService
activityService
=
SDKCommonBaseContextWare
.
getBean
(
ActivityService
.
class
);
ActivityQueryResponseDto
activityQueryResponseDto
=
activityService
.
queryActivitys
(
activityQueryDto
,
ActivityTypeEnum
.
TYPE_2
,
null
);
if
(
activityQueryResponseDto
==
null
||
activityQueryResponseDto
.
getResult
()
==
null
)
{
return
isSpecialGoods
;
}
List
<
ActivityResponseDto
>
activityResponseDtoList
=
activityQueryResponseDto
.
getResult
();
for
(
int
i
=
0
,
len
=
activityResponseDtoList
.
size
();
i
<
len
;
i
++)
{
List
<
GoodsBeanDto
>
goodsBeanDtos
=
activityResponseDtoList
.
get
(
i
).
getGoods
();
if
(
CollectionUtils
.
isEmpty
(
goodsBeanDtos
))
{
continue
;
}
boolean
match
=
goodsBeanDtos
.
stream
().
anyMatch
(
k
->
k
.
getGoodsId
().
equals
(
goodsId
));
if
(
match
)
{
isSpecialGoods
=
true
;
break
;
}
}
return
isSpecialGoods
;
}
public
static
void
setClassificationAndPrice
(
CartGoods
cartGoods
,
List
<
ProductBeanDTO
>
productBeanListSpuClass
)
{
cartGoods
.
setClassificationId
(
productBeanListSpuClass
.
get
(
0
).
getCategory
());
cartGoods
.
setClassificationName
(
productBeanListSpuClass
.
get
(
0
).
getCategoryName
());
cartGoods
.
setOriginalPrice
(
productBeanListSpuClass
.
get
(
0
).
getOriginalPrice
());
cartGoods
.
setFinalPrice
(
productBeanListSpuClass
.
get
(
0
).
getFinalPrice
());
cartGoods
.
setPackPrice
(
productBeanListSpuClass
.
get
(
0
).
getPackPrice
());
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
calculation
;
import
cn.freemud.adapter.ActivityAdapter
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.activity.ActivityQueryDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.ActivityChannelEnum
;
import
cn.freemud.enums.CouponFlag
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.CommonService
;
import
cn.freemud.service.thirdparty.ActivityClient
;
import
cn.freemud.utils.PropertyConvertUtil
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest
;
import
com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse
;
import
com.freemud.application.sdk.api.membercenter.service.MemberCenterService
;
import
com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest
;
import
com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CalculationServiceImpl
* @Package cn.freemud.service.impl
* @Description:
* @author: shuhu.hou
* @date: 2020/6/11 17:06
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public
class
CalculationServiceImpl
{
@Autowired
private
MemberCenterService
memberCenterService
;
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
CommonService
commonService
;
@Autowired
private
ActivityClient
activityClient
;
@Autowired
private
ActivityAdapter
activityAdapter
;
@Autowired
private
TimeSaleCalculation
timeSaleCalculation
;
@Autowired
private
FullPromotionCalculation
fullPromotionCalculation
;
@Autowired
private
CouponDiscountCalculation
couponDiscountCalculation
;
/**
* 更新购物车行优惠信息
*/
public
void
updateShoppingCartGoodsDiscount
(
String
partnerId
,
String
storeId
,
String
userId
,
String
appId
,
Integer
orderType
,
boolean
isMember
,
String
menuType
,
String
receiveId
,
List
<
CartGoods
>
cartGoodsList
,
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
>
coupons
,
List
<
ShoppingCartInfoRequestVo
.
SendGoods
>
sendGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
Long
deliveryAmount
=
calculateDeliveryAmount
(
receiveId
,
partnerId
,
storeId
,
appId
,
shoppingCartGoodsResponseVo
);
ActivityQueryDto
activityQueryDto
=
activityAdapter
.
getActivityQueryDto
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
);
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscount
=
getCalculationDiscount
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
,
isMember
,
menuType
,
deliveryAmount
,
cartGoodsList
,
coupons
,
sendGoodsList
);
updateDiscount
(
calculationDiscount
,
cartGoodsList
,
shoppingCartGoodsResponseVo
);
//满减
fullPromotionCalculation
.
updateShoppingCartGoodsDiscount
(
activityQueryDto
,
calculationDiscount
,
cartGoodsList
,
shoppingCartGoodsResponseVo
);
//限时特价
timeSaleCalculation
.
TimeSaleUpdateShoppingCartGoodsDiscount
(
calculationDiscount
,
cartGoodsList
,
shoppingCartGoodsResponseVo
);
CouponPromotionVO
couponPromotionVO
=
new
CouponPromotionVO
();
couponPromotionVO
.
setPartnerId
(
partnerId
);
couponPromotionVO
.
setUserId
(
userId
);
couponPromotionVO
.
setStoreId
(
storeId
);
couponPromotionVO
.
setCouponCode
(
null
);
couponPromotionVO
.
setOrderType
(
orderType
);
couponPromotionVO
.
setFlg
(
CouponFlag
.
YES
.
getCode
());
//优惠券
couponDiscountCalculation
.
updateShoppingCartGoodsDiscountCoupon
(
couponPromotionVO
,
calculationDiscount
,
cartGoodsList
,
shoppingCartGoodsResponseVo
);
}
public
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
getCalculationDiscount
(
String
partnerId
,
String
storeId
,
String
userId
,
String
appId
,
Integer
orderType
,
boolean
isMember
,
String
menuType
,
Long
deliveryAmount
,
List
<
CartGoods
>
cartGoodsList
,
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
>
coupons
,
List
<
ShoppingCartInfoRequestVo
.
SendGoods
>
sendGoodsList
)
{
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
>
calculationDiscountGoodsList
=
new
ArrayList
<>();
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
addCalculationDiscountGoods
(
calculationDiscountGoodsList
,
cartGoods
.
getGoodsId
(),
cartGoods
.
getQty
(),
cartGoods
.
getFinalPrice
(),
cartGoods
.
getMemberDiscount
());
}
if
(
BusinessTypeEnum
.
SAAS_DELIVERY
.
getCode
().
equals
(
menuType
))
{
deliveryAmount
=
null
;
}
// 当加价购商品不为空时
if
(
CollectionUtils
.
isNotEmpty
(
sendGoodsList
))
{
for
(
ShoppingCartInfoRequestVo
.
SendGoods
sendGoods
:
sendGoodsList
)
{
this
.
addCalculationDiscountGoods
(
calculationDiscountGoodsList
,
sendGoods
.
getGoodsId
(),
sendGoods
.
getQty
(),
sendGoods
.
getOriginalPrice
(),
100
);
}
}
calculationDiscountGoodsList
.
removeIf
(
calculationDiscountGoods
->
(
calculationDiscountGoods
.
getGoodsQuantity
().
equals
(
0
)));
if
(
CollectionUtils
.
isEmpty
(
calculationDiscountGoodsList
))
{
return
null
;
}
ActivityCalculationDiscountRequestDto
discountRequest
=
getActivityCalculationDiscountRequestDto
(
partnerId
,
storeId
,
userId
,
appId
,
orderType
);
discountRequest
.
setGoods
(
calculationDiscountGoodsList
);
discountRequest
.
setCoupons
(
coupons
);
discountRequest
.
setOrgIds
(
commonService
.
getOrgIds
(
partnerId
,
storeId
));
discountRequest
.
setDistributionFee
(
deliveryAmount
);
discountRequest
.
setIsMember
(
isMember
);
ActivityCalculationDiscountResponseDto
activityCalculationDiscountResponseDto
;
try
{
activityCalculationDiscountResponseDto
=
activityClient
.
calculationDiscountSharing
(
discountRequest
);
}
catch
(
Exception
ex
)
{
ErrorLog
.
printErrorLog
(
"calculation_discount_error"
,
"/calculation/discount/sharding"
,
discountRequest
,
ex
);
throw
new
ServiceException
(
ResponseResult
.
OPERATE_TOO_OFTEN
);
}
// 返回成功
if
(
activityCalculationDiscountResponseDto
==
null
||
!
StringUtils
.
equals
(
activityCalculationDiscountResponseDto
.
getStatusCode
(),
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
))
{
throw
new
ServiceException
(
ResponseResult
.
OPERATE_TOO_OFTEN
);
}
return
activityCalculationDiscountResponseDto
.
getResult
();
}
/**
* 配送金额
*/
private
Long
calculateDeliveryAmount
(
String
receiveId
,
String
partnerId
,
String
storeId
,
String
wxappid
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
Long
deliveryAmount
=
0L
;
if
(
StringUtils
.
isBlank
(
receiveId
))
{
return
deliveryAmount
;
}
log
.
info
(
"获取配送配逻辑 tackingNo:{},receiveId:{},partnerId:{},storeId:{}"
,
LogThreadLocal
.
getTrackingNo
(),
receiveId
,
partnerId
,
storeId
);
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
QueryReceiveAddressRequest
queryReceive
=
new
QueryReceiveAddressRequest
(
receiveId
,
partnerId
);
//查询会员后货地址经纬度
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
QueryReceiveAddressResponse
>
queryReceiveAddressResponse
=
memberCenterService
.
queryReceiveAddressById
(
queryReceive
,
trackingNo
);
if
(!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
queryReceiveAddressResponse
.
getCode
())
||
queryReceiveAddressResponse
.
getData
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
USER_GETRECEIVEADDRESS_ERROR
);
}
QueryDeliveryRequest
queryDeliveryRequest
=
new
QueryDeliveryRequest
();
queryDeliveryRequest
.
setPartnerId
(
partnerId
);
queryDeliveryRequest
.
setStoreCode
(
storeId
);
queryDeliveryRequest
.
setUserLatitude
(
queryReceiveAddressResponse
.
getData
().
getLatitude
());
queryDeliveryRequest
.
setUserLongitude
(
queryReceiveAddressResponse
.
getData
().
getLongitude
());
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
QueryDeliverDetailResponse
>
queryDeliverDetailResponse
=
storeCenterService
.
queryDeliverDetail
(
queryDeliveryRequest
,
trackingNo
);
if
(
queryDeliverDetailResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
queryDeliverDetailResponse
.
getCode
())
||
queryDeliverDetailResponse
.
getData
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_ITEM_NOT_DELIVERY
);
}
if
(
queryDeliverDetailResponse
.
getData
().
getDeliveryAmount
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_DELIVERY_AMOUNT_ERROR
);
}
shoppingCartGoodsResponseVo
.
setDeliveryFeeZeroReason
(
queryDeliverDetailResponse
.
getData
().
getDeliveryFeeZeroReason
()
!=
null
?
queryDeliverDetailResponse
.
getData
().
getDeliveryFeeZeroReason
()
:
0
);
deliveryAmount
=
queryDeliverDetailResponse
.
getData
().
getDeliveryAmount
();
return
deliveryAmount
;
}
/**
* 构建 ActivityCalculationDiscountRequestDto
*
* @param partnerId
* @param storeId
* @param userId
* @param appId
* @param orderType
* @return
*/
private
ActivityCalculationDiscountRequestDto
getActivityCalculationDiscountRequestDto
(
String
partnerId
,
String
storeId
,
String
userId
,
String
appId
,
Integer
orderType
)
{
ActivityCalculationDiscountRequestDto
activityCalculationDiscountRequestDto
=
new
ActivityCalculationDiscountRequestDto
();
activityCalculationDiscountRequestDto
.
setPartnerCode
(
partnerId
);
activityCalculationDiscountRequestDto
.
setStoreId
(
storeId
);
activityCalculationDiscountRequestDto
.
setIsShowGoodsActivity
(
1
);
activityCalculationDiscountRequestDto
.
setUserId
(
userId
);
activityCalculationDiscountRequestDto
.
setVer
(
1
);
activityCalculationDiscountRequestDto
.
setAppId
(
appId
);
ActivityChannelEnum
activityChannelEnum
=
PropertyConvertUtil
.
orderTypeConvert2ActivityChannel
(
orderType
);
if
(!
Objects
.
isNull
(
activityChannelEnum
))
{
activityCalculationDiscountRequestDto
.
setChannel
(
activityChannelEnum
.
getCode
());
}
return
activityCalculationDiscountRequestDto
;
}
/**
* 将calculationDiscountGoods 封装后加入 calculationDiscountGoodsList
*
* @param calculationDiscountGoodsList
* @param goodsId
* @param goodsQuantity
* @param originalPrice
*/
private
void
addCalculationDiscountGoods
(
List
<
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
>
calculationDiscountGoodsList
,
String
goodsId
,
Integer
goodsQuantity
,
Long
originalPrice
,
Integer
memberDiscount
)
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
calculationDiscountGoods
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
();
calculationDiscountGoods
.
setGoodsId
(
goodsId
);
calculationDiscountGoods
.
setGoodsQuantity
(
goodsQuantity
);
calculationDiscountGoods
.
setOriginalPrice
(
originalPrice
);
calculationDiscountGoods
.
setMemberDiscount
(
memberDiscount
);
//累加需加入计算的商品
int
index
;
// 当商品已存在时,需累加数量
if
((
index
=
calculationDiscountGoodsList
.
indexOf
(
calculationDiscountGoods
))
>=
0
)
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountGoods
oldCalculationDiscountGoods
=
calculationDiscountGoodsList
.
get
(
index
);
oldCalculationDiscountGoods
.
setGoodsQuantity
(
oldCalculationDiscountGoods
.
getGoodsQuantity
()
+
calculationDiscountGoods
.
getGoodsQuantity
());
}
else
{
calculationDiscountGoodsList
.
add
(
calculationDiscountGoods
);
}
}
private
void
updateDiscount
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscount
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
long
totalOriginalAmount
=
0L
;
long
totalAmount
=
0L
;
long
totalPackgeAmount
=
0L
;
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
// 设置商品原价与商品现价的初始值
long
originalAmount
=
cartGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
();
long
amount
=
cartGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
();
long
packAmount
=
cartGoods
.
getPackPrice
()
*
cartGoods
.
getQty
();
totalOriginalAmount
+=
originalAmount
;
totalAmount
+=
amount
;
totalPackgeAmount
+=
packAmount
;
cartGoods
.
setOriginalAmount
(
originalAmount
);
cartGoods
.
setAmount
(
amount
);
cartGoods
.
setPackPrice
(
packAmount
);
}
shoppingCartGoodsResponseVo
.
setOriginalTotalAmount
(
calculationDiscount
==
null
?
totalOriginalAmount
:
calculationDiscount
.
getOriginalTotalAmount
());
shoppingCartGoodsResponseVo
.
setTotalAmount
(
calculationDiscount
==
null
?
totalAmount
:
calculationDiscount
.
getTotalAmount
());
shoppingCartGoodsResponseVo
.
setNewPackAmount
(
totalPackgeAmount
);
shoppingCartGoodsResponseVo
.
setTotalDiscountAmount
(
calculationDiscount
==
null
?
0L
:
calculationDiscount
.
getTotalDiscountAmount
());
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
calculation
;
import
cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto
;
import
cn.freemud.entities.dto.CheckSpqInfoResponseDto
;
import
cn.freemud.entities.vo.ActivityClassifyCouponBean
;
import
cn.freemud.entities.vo.CartGoods
;
import
cn.freemud.entities.vo.CouponPromotionVO
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.enums.CouponFlag
;
import
cn.freemud.service.CouponService
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponDiscountCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:02
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public
class
CouponDiscountCalculation
{
@Autowired
private
CouponService
couponService
;
public
void
updateShoppingCartGoodsDiscountCoupon
(
CouponPromotionVO
couponPromotionVO
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
// 用户选择了查询优惠券信息
if
(
couponPromotionVO
!=
null
&&
ObjectUtils
.
equals
(
CouponFlag
.
YES
.
getCode
(),
couponPromotionVO
.
getFlg
()))
{
List
<
CartGoods
>
tmpCartGoods
=
cartGoodsList
.
parallelStream
().
filter
(
k
->
k
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
)).
collect
(
Collectors
.
toList
());
// 是否存在商品券
boolean
hasGoodssCoupon
=
CollectionUtils
.
isNotEmpty
(
tmpCartGoods
);
// 构建可用不可用优惠券
ActivityClassifyCouponBean
activityClassifyCouponBean
=
couponService
.
availableCoupon
(
cartGoodsList
,
couponPromotionVO
.
getPartnerId
()
,
couponPromotionVO
.
getUserId
(),
couponPromotionVO
.
getStoreId
(),
couponPromotionVO
.
getCouponCode
(),
hasGoodssCoupon
,
couponPromotionVO
.
getOrderType
());
if
(
Objects
.
equals
(
activityClassifyCouponBean
,
null
))
{
// 构建一个空得订单券信息
activityClassifyCouponBean
=
new
ActivityClassifyCouponBean
();
activityClassifyCouponBean
.
setCouponNum
(
0
);
activityClassifyCouponBean
.
setDisableCouponNum
(
0
);
activityClassifyCouponBean
.
setUsableCouponNum
(
0
);
activityClassifyCouponBean
.
setDisableCoupons
(
Lists
.
newArrayList
());
activityClassifyCouponBean
.
setUsableCoupons
(
Lists
.
newArrayList
());
}
shoppingCartGoodsResponseVo
.
setAvailableCoupon
(
activityClassifyCouponBean
);
}
// 当couponCode不为空时,需计算优惠价格
long
couponDiscount
=
0
;
if
(
couponPromotionVO
!=
null
&&
StringUtils
.
isNotEmpty
(
couponPromotionVO
.
getCouponCode
())
&&
calculationDiscountResult
!=
null
)
{
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
CouponResults
>
couponResultsList
=
calculationDiscountResult
.
getCouponDiscounts
();
if
(
CollectionUtils
.
isNotEmpty
(
couponResultsList
))
{
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
CouponResults
couponResults
:
couponResultsList
)
{
couponDiscount
=
couponDiscount
+
(
couponResults
.
getDiscountAmount
()
==
null
?
0
:
couponResults
.
getDiscountAmount
());
}
}
}
shoppingCartGoodsResponseVo
.
setCouponDiscount
(
couponDiscount
);
//循环购物车商品券
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
if
(
cartGoods
.
getCartGoodsUid
().
startsWith
(
CommonsConstant
.
COUPON_PREFIX
))
{
String
spqId
=
cartGoods
.
getCartGoodsUid
().
substring
(
CommonsConstant
.
COUPON_PREFIX
.
length
());
// 计算优惠信息时,已将券校验过,放在map中
Map
<
String
,
CheckSpqInfoResponseDto
>
validCouponMap
=
calculationDiscountResult
==
null
?
new
HashMap
<>()
:
calculationDiscountResult
.
getValidCouponMap
();
if
(
MapUtils
.
isNotEmpty
(
validCouponMap
))
{
CheckSpqInfoResponseDto
checkSpqInfoResponseDto
=
validCouponMap
.
get
(
spqId
);
if
(
checkSpqInfoResponseDto
!=
null
)
{
cartGoods
.
setOriginalPrice
(
checkSpqInfoResponseDto
.
getPrice
());
cartGoods
.
setSpuId
(
checkSpqInfoResponseDto
.
getSpuId
());
cartGoods
.
setSkuId
(
StringUtils
.
isEmpty
(
checkSpqInfoResponseDto
.
getSkuId
())
?
checkSpqInfoResponseDto
.
getSpuId
()
:
checkSpqInfoResponseDto
.
getSkuId
());
cartGoods
.
setQty
(
1
);
cartGoods
.
setCouponCode
(
checkSpqInfoResponseDto
.
getCouponCode
());
cartGoods
.
setSpuName
(
checkSpqInfoResponseDto
.
getSpuName
());
}
}
}
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/FullPromotionCalculation.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
calculation
;
import
cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto
;
import
cn.freemud.entities.dto.ActivityResponseDto
;
import
cn.freemud.entities.dto.BenefitBeanDto
;
import
cn.freemud.entities.dto.PromotionMessageDto
;
import
cn.freemud.entities.dto.activity.ActivityQueryDto
;
import
cn.freemud.entities.dto.activity.ActivityQueryResponseDto
;
import
cn.freemud.entities.vo.ActivityList
;
import
cn.freemud.entities.vo.ActivityTip
;
import
cn.freemud.entities.vo.CartGoods
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.enums.ActivityTypeEnum
;
import
cn.freemud.service.ActivityService
;
import
cn.freemud.utils.WebUtil
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: FullPromotionCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public
class
FullPromotionCalculation
{
@Autowired
private
ActivityService
activityService
;
public
void
updateShoppingCartGoodsDiscount
(
ActivityQueryDto
activityQueryDto
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
allCartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
shoppingCartGoodsResponseVo
.
setActivityTip
(
new
ActivityTip
());
List
<
ActivityTypeEnum
>
activityTypeEnums
=
new
LinkedList
<>();
activityTypeEnums
.
add
(
ActivityTypeEnum
.
TYPE_11
);
activityTypeEnums
.
add
(
ActivityTypeEnum
.
TYPE_12
);
//调用促销统一活动查询
//过滤出参与的满减(目前只有每满减和阶梯满减)
ActivityQueryResponseDto
activityQueryResponseDto
=
activityService
.
queryActivityByType
(
activityQueryDto
,
activityTypeEnums
,
null
);
if
(
activityQueryResponseDto
==
null
)
{
return
;
}
List
<
ActivityResponseDto
>
activityQueryDtoList
=
activityQueryResponseDto
.
getResult
();
if
(
CollectionUtils
.
isEmpty
(
activityQueryDtoList
))
{
return
;
}
PromotionMessageDto
promotionMessageDto
=
new
PromotionMessageDto
();
ActivityResponseDto
activityResponseDto
=
activityQueryDtoList
.
get
(
0
);
promotionMessageDto
.
setActivityId
(
activityResponseDto
.
getActivityCode
());
promotionMessageDto
.
setActivityName
(
activityResponseDto
.
getActivityName
());
promotionMessageDto
.
setActivityType
(
activityResponseDto
.
getActivityType
());
promotionMessageDto
.
setPromotionAmount
(
0L
);
StringBuilder
messageBuilder
=
new
StringBuilder
();
ArrayList
<
ActivityList
>
activityList
=
new
ArrayList
<>();
//没有加入购物车
if
(
calculationDiscountResult
==
null
)
{
// 因为没有促销活动的计算信息,所以没有加入购物车内
List
<
BenefitBeanDto
>
benefitBeanDtos
=
activityResponseDto
.
getBenefits
();
BenefitBeanDto
benefitBeanDto
=
benefitBeanDtos
.
get
(
0
);
//调用没有加入购物车的提示语的方法
setMessageNotInShoppingCart
(
messageBuilder
,
activityResponseDto
,
benefitBeanDtos
,
benefitBeanDto
,
activityList
);
}
else
{
//促销返回满减提示语
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ActivityPrompt
>
activityPrompts
=
calculationDiscountResult
.
getActivityPrompts
();
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Discount
>
discountList1
=
calculationDiscountResult
.
getDiscounts
();
//构建提示语
if
(
CollectionUtils
.
isNotEmpty
(
activityPrompts
))
{
setMessageSatisfyCart
(
messageBuilder
,
activityPrompts
,
activityResponseDto
,
activityList
);
}
else
{
setMessageNoSatisfyCart
(
messageBuilder
,
discountList1
,
activityList
);
}
}
promotionMessageDto
.
setPromotionMessage
(
messageBuilder
.
toString
());
ActivityTip
activityTip
=
new
ActivityTip
();
activityTip
.
setActivityCode
(
promotionMessageDto
.
getActivityId
());
activityTip
.
setActivityType
(
promotionMessageDto
.
getActivityType
());
activityTip
.
setActivityName
(
promotionMessageDto
.
getPromotionMessage
());
activityTip
.
setActivityList
(
activityList
);
shoppingCartGoodsResponseVo
.
setActivityTip
(
activityTip
);
if
(
calculationDiscountResult
==
null
)
{
return
;
}
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Discount
>
discountList
=
calculationDiscountResult
.
getDiscounts
();
if
(
CollectionUtils
.
isEmpty
(
discountList
))
{
return
;
}
//过滤出参与的满减(目前只有每满减和阶梯满减)
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Discount
>
fullDiscountsList
=
discountList
.
stream
().
filter
(
discount
->
ActivityTypeEnum
.
TYPE_11
.
getCode
().
equals
(
discount
.
getType
())
||
ActivityTypeEnum
.
TYPE_12
.
getCode
().
equals
(
discount
.
getType
()))
.
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
fullDiscountsList
))
{
return
;
}
//总的满减优惠金额
long
fullDiscount
=
0L
;
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Discount
fullDiscounts
:
fullDiscountsList
)
{
fullDiscount
=
fullDiscount
+
(
fullDiscounts
.
getDiscount
()
==
null
?
0
:
fullDiscounts
.
getDiscount
());
}
//设置到响应中
shoppingCartGoodsResponseVo
.
setFullDiscount
(
fullDiscount
);
shoppingCartGoodsResponseVo
.
setProducts
(
allCartGoodsList
);
shoppingCartGoodsResponseVo
.
setProductsCount
(
allCartGoodsList
.
size
());
}
//设置没有加入购物车的提示语
private
void
setMessageNotInShoppingCart
(
StringBuilder
messageBuilder
,
ActivityResponseDto
activityResponseDto
,
List
<
BenefitBeanDto
>
benefitBeanDtos
,
BenefitBeanDto
benefitBeanDto
,
ArrayList
<
ActivityList
>
activityList
)
{
if
(
Objects
.
equals
(
ActivityTypeEnum
.
TYPE_11
.
getCode
(),
activityResponseDto
.
getActivityType
()))
{
messageBuilder
.
append
(
"每满 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getThresholdAmount
()
*
1.00
/
100
))
.
append
(
"</span> 减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getDiscountAmount
()
*
1.00
/
100
))
.
append
(
"</span> "
)
.
append
(
"最高减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
activityResponseDto
.
getMaxMoney
()
*
1.00
/
100
))
.
append
(
"</span> 元"
);
//满足 x 元 减 Y 元 ,最高 减 Z元
cn
.
freemud
.
entities
.
vo
.
ActivityList
notInShopping
=
new
ActivityList
();
notInShopping
.
setTipType
(
1
);
notInShopping
.
setSatisfy
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getThresholdAmount
()
*
1.00
/
100
).
toString
());
notInShopping
.
setDeduct
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getDiscountAmount
()
*
1.00
/
100
).
toString
());
notInShopping
.
setMaxDeduct
(
WebUtil
.
formatAmount
(
activityResponseDto
.
getMaxMoney
()
*
1.00
/
100
).
toString
());
activityList
.
add
(
notInShopping
);
}
if
(
Objects
.
equals
(
ActivityTypeEnum
.
TYPE_12
.
getCode
(),
activityResponseDto
.
getActivityType
()))
{
int
len
=
benefitBeanDtos
.
size
();
// // 购物车中无商品或者存在与满减互斥的活动
for
(
int
i
=
len
-
1
;
i
>=
0
;
i
--)
{
benefitBeanDto
=
benefitBeanDtos
.
get
(
i
);
messageBuilder
.
append
(
"满 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getThresholdAmount
()
*
1.00
/
100
))
.
append
(
"</span> 减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getDiscountAmount
()
*
1.00
/
100
))
.
append
(
"</span> 元"
);
if
(
i
>
0
)
messageBuilder
.
append
(
","
);
}
// 阶梯满减:满足 X 元 减 Y 元,
for
(
int
j
=
len
-
1
;
j
>=
0
;
j
--)
{
benefitBeanDto
=
benefitBeanDtos
.
get
(
j
);
cn
.
freemud
.
entities
.
vo
.
ActivityList
notInShopping
=
new
ActivityList
();
notInShopping
.
setTipType
(
2
);
notInShopping
.
setSatisfy
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getThresholdAmount
()
*
1.00
/
100
).
toString
());
notInShopping
.
setDeduct
(
WebUtil
.
formatAmount
(
benefitBeanDto
.
getDiscountAmount
()
*
1.00
/
100
).
toString
());
activityList
.
add
(
notInShopping
);
}
}
}
/**
* 设置加入商品满足购物车时的提示语
*
* @param messageBuilder
* @param activityPrompts
* @param activityResponseDto
*/
private
void
setMessageSatisfyCart
(
StringBuilder
messageBuilder
,
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ActivityPrompt
>
activityPrompts
,
ActivityResponseDto
activityResponseDto
,
ArrayList
<
ActivityList
>
activityList
)
{
ActivityList
satisfyList
=
new
ActivityList
();
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ActivityPrompt
activityPrompt
=
activityPrompts
.
get
(
0
);
if
(
activityPrompt
.
getAlreadyDiscountAmount
()
==
null
||
activityPrompt
.
getAlreadyDiscountAmount
()
==
0
)
{
messageBuilder
.
append
(
"满 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
activityPrompt
.
getThresholdAmount
()
*
1.00
/
100
))
.
append
(
"</span> 减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
activityPrompt
.
getDiscountAmout
()
*
1.00
/
100
))
.
append
(
"</span> "
)
.
append
(
"还差 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
((
activityPrompt
.
getThresholdAmount
()
-
activityPrompt
.
getTotalAmount
())
*
1.00
/
100
))
.
append
(
"</span> 元"
);
// 满足 X 元 减 Y 元 还差 Z元
satisfyList
.
setTipType
(
3
);
satisfyList
.
setSatisfy
(
WebUtil
.
formatAmount
(
activityPrompt
.
getThresholdAmount
()
*
1.00
/
100
).
toString
());
satisfyList
.
setDeduct
(
WebUtil
.
formatAmount
(
activityPrompt
.
getDiscountAmout
()
*
1.00
/
100
).
toString
());
satisfyList
.
setMissing
(
WebUtil
.
formatAmount
((
activityPrompt
.
getThresholdAmount
()
-
activityPrompt
.
getTotalAmount
())
*
1.00
/
100
).
toString
());
}
else
{
Long
toDiscountAmout
;
if
(
Objects
.
equals
(
ActivityTypeEnum
.
TYPE_11
.
getCode
(),
activityResponseDto
.
getActivityType
()))
{
toDiscountAmout
=
activityPrompt
.
getDiscountAmout
()
+
activityPrompt
.
getAlreadyDiscountAmount
();
}
else
{
toDiscountAmout
=
activityPrompt
.
getDiscountAmout
();
}
//已减 X 元 再买 Y 元 减 Z 元
messageBuilder
.
append
(
"已减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
activityPrompt
.
getAlreadyDiscountAmount
()
*
1.00
/
100
))
.
append
(
"</span> 元 再买 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
((
activityPrompt
.
getThresholdAmount
()
-
activityPrompt
.
getTotalAmount
())
*
1.00
/
100
))
.
append
(
"</span> 元减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
toDiscountAmout
*
1.00
/
100
))
.
append
(
"</span> 元"
);
satisfyList
.
setTipType
(
4
);
satisfyList
.
setDeduct
(
WebUtil
.
formatAmount
(
activityPrompt
.
getAlreadyDiscountAmount
()
*
1.00
/
100
).
toString
());
satisfyList
.
setAgainBuy
(
WebUtil
.
formatAmount
((
activityPrompt
.
getThresholdAmount
()
-
activityPrompt
.
getTotalAmount
())
*
1.00
/
100
).
toString
());
satisfyList
.
setAgianDeduct
(
WebUtil
.
formatAmount
(
toDiscountAmout
*
1.00
/
100
).
toString
());
}
activityList
.
add
(
satisfyList
);
}
/**
* 设置加入商品不满足购物车时的提示语
*
* @param messageBuilder
* @param discountList
*/
private
void
setMessageNoSatisfyCart
(
StringBuilder
messageBuilder
,
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Discount
>
discountList
,
ArrayList
<
ActivityList
>
activityList
)
{
discountList
=
discountList
.
parallelStream
().
filter
(
k
->
(
Objects
.
equals
(
ActivityTypeEnum
.
TYPE_11
.
getCode
(),
k
.
getType
())
||
Objects
.
equals
(
ActivityTypeEnum
.
TYPE_12
.
getCode
(),
k
.
getType
()))).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
discountList
))
{
return
;
}
//已减 X 元
messageBuilder
.
append
(
"已减 <span style=\"color:#fa5555\">"
)
.
append
(
WebUtil
.
formatAmount
(
discountList
.
get
(
0
).
getDiscount
()
*
1.00
/
100
))
.
append
(
"</span> 元"
);
ActivityList
noSatisfy
=
new
ActivityList
();
noSatisfy
.
setTipType
(
5
);
noSatisfy
.
setDeduct
(
WebUtil
.
formatAmount
(
discountList
.
get
(
0
).
getDiscount
()
*
1.00
/
100
).
toString
());
activityList
.
add
(
noSatisfy
);
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/TimeSaleCalculation.java
0 → 100644
View file @
1c2f8473
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
calculation
;
import
cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto
;
import
cn.freemud.entities.vo.CartGoods
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.enums.ActivityTypeEnum
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: TimeSaleCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:07
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public
class
TimeSaleCalculation
{
/**
* 限时特价
*
* @return
*/
public
void
TimeSaleUpdateShoppingCartGoodsDiscount
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
if
(
calculationDiscountResult
==
null
||
CollectionUtils
.
isEmpty
(
calculationDiscountResult
.
getDiscounts
())
||
!
calculationDiscountResult
.
getDiscounts
().
stream
().
anyMatch
(
discount
->
(
ActivityTypeEnum
.
TYPE_2
.
getCode
().
equals
(
discount
.
getType
())
||
(
ActivityTypeEnum
.
TYPE_21
.
getCode
().
equals
(
discount
.
getType
())))))
{
return
;
}
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
>
goodsList
=
calculationDiscountResult
.
getGoods
();
if
(
CollectionUtils
.
isEmpty
(
goodsList
))
{
return
;
}
String
toastMsg
=
null
;
Map
<
String
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
>
goodsMap
=
goodsList
.
parallelStream
()
.
collect
(
Collectors
.
toMap
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
::
getGoodsId
,
Function
.
identity
(),
(
k1
,
k2
)
->
k1
));
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map
<
String
,
Integer
>
numberMap
=
new
HashMap
<>();
List
<
Integer
>
discounts
=
Arrays
.
asList
(
ActivityTypeEnum
.
TYPE_2
.
getCode
(),
ActivityTypeEnum
.
TYPE_21
.
getCode
());
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
goods
;
if
((
goods
=
goodsMap
.
get
(
cartGoods
.
getGoodsId
()))
==
null
)
{
continue
;
}
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
.
GoodsDiscount
goodsDiscount
=
getGoodsDiscount
(
goods
.
getDiscounts
(),
discounts
);
if
(
goodsDiscount
==
null
)
{
continue
;
}
// 享受限时特价折扣的商品数量
Integer
specialActualGoodsNumber
=
null
;
// 商品现价
Long
goodsNowPrice
=
cartGoods
.
getOriginalPrice
()
-
goodsDiscount
.
getDiscount
()
/
goodsDiscount
.
getActualGoodsNumber
();
// numberMap用于暂存当前商品行可享受限时特价折扣的商品数量
if
((
specialActualGoodsNumber
=
numberMap
.
get
(
goods
.
getGoodsId
()))
==
null
)
{
numberMap
.
put
(
goods
.
getGoodsId
(),
specialActualGoodsNumber
=
goodsDiscount
.
getActualGoodsNumber
());
}
//若可享受数量>=当前商品行的商品数量
if
(
specialActualGoodsNumber
-
cartGoods
.
getQty
()
>=
0
)
{
cartGoods
.
setAmount
(
goodsNowPrice
*
cartGoods
.
getQty
());
}
else
{
//总价=可享受数量*优惠后单价+(当前商品行的商品数量-可享受数量)*商品原价
cartGoods
.
setAmount
(
specialActualGoodsNumber
>
0
?
specialActualGoodsNumber
*
goodsNowPrice
+
(
cartGoods
.
getQty
()
-
specialActualGoodsNumber
)
*
cartGoods
.
getOriginalPrice
()
:
goods
.
getOriginalPrice
()
*
cartGoods
.
getQty
());
if
(
StringUtils
.
isEmpty
(
toastMsg
))
{
toastMsg
=
"该商品限"
+
goodsDiscount
.
getActualGoodsNumber
()
+
"份优惠 超出按照原价计算哦"
;
}
}
numberMap
.
put
(
goods
.
getGoodsId
(),
specialActualGoodsNumber
-
cartGoods
.
getQty
());
}
if
(
StringUtils
.
isNotBlank
(
toastMsg
))
{
shoppingCartGoodsResponseVo
.
setToastMsg
(
toastMsg
);
}
}
/**
* 获取指定促销类型的GoodsDiscount
*
* @param goodsDiscountList
* @param discounts
* @return
*/
private
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
.
GoodsDiscount
getGoodsDiscount
(
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
.
GoodsDiscount
>
goodsDiscountList
,
List
<
Integer
>
discounts
)
{
if
(
CollectionUtils
.
isEmpty
(
goodsDiscountList
))
{
return
null
;
}
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
Goods
.
GoodsDiscount
goodsDiscount
:
goodsDiscountList
)
{
if
(
discounts
.
contains
(
goodsDiscount
.
getType
()))
{
return
goodsDiscount
;
}
}
return
null
;
}
/**
* 获取指定促销类型的ApportionDetails
*
* @param apportionDetailsList
* @param type
* @return
*/
private
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
ApportionDetails
getApportionDetails
(
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
ApportionDetails
>
apportionDetailsList
,
ActivityTypeEnum
type
)
{
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
.
ApportionDetails
apportionDetails
:
apportionDetailsList
)
{
if
(
Objects
.
equals
(
apportionDetails
.
getActivityType
(),
ActivityTypeEnum
.
TYPE_2
.
getCode
()))
{
return
apportionDetails
;
}
}
return
null
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/ActivityClient.java
View file @
1c2f8473
...
...
@@ -46,4 +46,14 @@ public interface ActivityClient {
*/
@PostMapping
(
"/activity/stock/cancelStock"
)
ActivityBaseResponseDto
cancelStock
(
ActivityCancelStockRequestDto
activityCancelStockRequestDto
);
/**
* 新版优惠均摊计算
* @param activityCalculationDiscountRequestDto
* @return
*/
@PostMapping
(
"/calculation/discount/sharing"
)
ActivityCalculationDiscountResponseDto
calculationDiscountSharing
(
ActivityCalculationDiscountRequestDto
activityCalculationDiscountRequestDto
);
}
Write
Preview
Markdown
is supported
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