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
030dfc62
Commit
030dfc62
authored
Aug 12, 2020
by
zhiheng.zhang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/qa' into qa
parents
f9dffb1f
b1f43654
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
339 additions
and
180 deletions
+339
-180
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
+16
-13
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
+4
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/QueryOrdersResponse.java
+1
-1
assortment-shoppingcart-sdk/pom.xml
+1
-1
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
+6
-3
order-application-service/pom.xml
+2
-2
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
+15
-22
order-application-service/src/main/java/cn/freemud/entities/dto/PurchasePaidRequestDto.java
+8
-0
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
+1
-35
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
+1
-1
order-application-service/src/main/java/cn/freemud/entities/vo/ProductVo.java
+2
-0
order-application-service/src/main/java/cn/freemud/enums/ProductType.java
+2
-1
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+2
-0
order-application-service/src/main/java/cn/freemud/service/adapter/AbstractOrderCheck.java
+23
-0
order-application-service/src/main/java/cn/freemud/service/adapter/OrderCheck.java
+26
-0
order-application-service/src/main/java/cn/freemud/service/adapter/OrderCheckAdapter.java
+43
-0
order-application-service/src/main/java/cn/freemud/service/adapter/TakeOutOrderCheck.java
+30
-0
order-application-service/src/main/java/cn/freemud/service/adapter/ToStoreCheck.java
+28
-0
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
+5
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+7
-5
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/enums/ProductTypeEnum.java
+3
-2
pom.xml
+1
-1
shopping-cart-application-service/pom.xml
+2
-2
shopping-cart-application-service/src/main/java/cn/freemud/adapter/ShoppingCartConvertAdapter.java
+16
-7
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/ActivityCalculationDiscountRequestDto.java
+1
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
+7
-2
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/BuySendPromotionService.java
+27
-23
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/DefaultPromotionService.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
+55
-58
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
+3
-0
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
View file @
030dfc62
...
...
@@ -742,10 +742,6 @@ public class OrderSdkAdapter {
List
<
OrderItemResp
>
parentOrderItemList
=
orderItemList
==
null
?
new
ArrayList
<>()
:
orderItemList
.
stream
()
.
filter
(
item
->
StringUtils
.
isEmpty
(
item
.
getParentProductId
())
||
ObjectUtils
.
equals
(
"0"
,
item
.
getParentProductId
()))
.
collect
(
Collectors
.
toList
());
List
<
OrderItemResp
>
materailProductItemList
=
orderItemList
==
null
?
new
ArrayList
<>()
:
orderItemList
.
stream
()
.
filter
(
item
->
StringUtils
.
isNotBlank
(
item
.
getParentProductId
())
&&
ObjectUtils
.
equals
(
ProductTypeEnum
.
MATERAIL_PRODUCT
.
getCode
(),
item
.
getProductType
()))
.
collect
(
Collectors
.
toList
());
for
(
OrderItemResp
orderItem
:
parentOrderItemList
)
{
QueryOrdersResponse
.
DataBean
.
OrderBean
.
ProductBean
productBean
=
getOldOrderProduct
(
orderSettlementResps
,
orderItem
);
if
(
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_PRODUCT
.
getCode
(),
orderItem
.
getProductType
())
||
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_UPPRICE_PRODUCT
.
getCode
(),
orderItem
.
getProductType
()))
{
...
...
@@ -755,16 +751,14 @@ public class OrderSdkAdapter {
List
<
OrderItemResp
>
comboProducts
=
orderItemList
.
stream
().
filter
(
item
->
ObjectUtils
.
equals
(
partnerProductId
,
item
.
getParentProductId
())).
collect
(
Collectors
.
toList
());
comboProducts
.
forEach
(
combo
->
productBean
.
getComboProduct
().
add
(
getOldOrderProduct
(
orderSettlementResps
,
combo
)));
}
productList
.
add
(
productBean
);
}
for
(
OrderItemResp
metarail
:
materailProductItemList
){
// 获取加料商品列表
QueryOrdersResponse
.
DataBean
.
OrderBean
.
ProductBean
productBean
=
productList
.
stream
().
filter
(
item
->
item
.
getProductId
().
equals
(
metarail
.
getParentProductId
())).
findFirst
().
get
();
List
<
QueryOrdersResponse
.
DataBean
.
OrderBean
.
ProductBean
>
meterailProduct
=
productBean
.
getMeterailProduct
();
if
(
CollectionUtils
.
isEmpty
(
meterailProduct
)){
productBean
.
setMeterailProduct
(
new
ArrayList
<>());
if
(
ObjectUtils
.
equals
(
ProductTypeEnum
.
MATERIAL_PRODUCT
.
getCode
(),
orderItem
.
getProductType
()))
{
// 获取加料子商品列表
productBean
.
setMaterialProduct
(
new
ArrayList
<>());
String
partnerProductId
=
orderItem
.
getProductId
()
+
"_"
+
orderItem
.
getProductSeq
();
List
<
OrderItemResp
>
materialProducts
=
orderItemList
.
stream
().
filter
(
item
->
ObjectUtils
.
equals
(
partnerProductId
,
item
.
getParentProductId
())).
collect
(
Collectors
.
toList
());
materialProducts
.
forEach
(
material
->
productBean
.
getMaterialProduct
().
add
(
getOldOrderProduct
(
orderSettlementResps
,
material
)));
}
product
Bean
.
getMeterailProduct
().
add
(
getOldOrderProduct
(
orderSettlementResps
,
metarail
)
);
product
List
.
add
(
productBean
);
}
return
productList
;
}
...
...
@@ -2571,6 +2565,15 @@ public class OrderSdkAdapter {
// 普通商品 订单转换
productRequest
.
setOpid
(
index
);
originalAmount
+=
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
productRequest
,
partnerId
,
""
);
if
(
ProductTypeEnum
.
MATERIAL_PRODUCT
.
getCode
().
equals
(
productRequest
.
getProductType
()))
{
if
(
CollectionUtils
.
isNotEmpty
(
productRequest
.
getMaterialProduct
()))
{
// 父类商品productId=productId+seq
String
partnerProductId
=
productRequest
.
getProductId
()
+
"_"
+
index
;
productRequest
.
getMaterialProduct
().
stream
().
forEach
(
material
->
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
material
,
partnerId
,
partnerProductId
)
);
}
}
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
if
(
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_PRODUCT
.
getCode
(),
productRequest
.
getProductType
())
||
ObjectUtils
.
equals
(
ProductTypeEnum
.
SETMEAL_UPPRICE_PRODUCT
.
getCode
(),
productRequest
.
getProductType
()))
{
// 父类商品productId=productId+seq
...
...
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
View file @
030dfc62
...
...
@@ -134,6 +134,10 @@ public class CreateOrderProductRequest extends BaseConfig {
*/
private
List
<
CreateOrderProductRequest
>
comboProduct
;
/**
*加料商品
*/
private
List
<
CreateOrderProductRequest
>
materialProduct
;
/**
* 优惠列表
*/
private
List
<
CreateOrderAccountRequest
>
accounts
;
...
...
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/QueryOrdersResponse.java
View file @
030dfc62
...
...
@@ -554,7 +554,7 @@ public class QueryOrdersResponse {
/**
* 套餐子商品
*/
public
List
<
ProductBean
>
m
eterai
lProduct
;
public
List
<
ProductBean
>
m
ateria
lProduct
;
@NoArgsConstructor
@Data
...
...
assortment-shoppingcart-sdk/pom.xml
View file @
030dfc62
...
...
@@ -10,7 +10,7 @@
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
assortment-shoppingcart-sdk
</artifactId>
<version>
orderClients
</version>
<version>
1.1.9-SNAPSHOT
</version>
<dependencies>
<dependency>
...
...
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
View file @
030dfc62
...
...
@@ -321,6 +321,8 @@ public class ShoppingCartAdapter {
cartGoods
.
setWeight
(
isSkuProduct
?
skuProduct
.
getWeight
()
:
spuProduct
.
getWeight
());
cartGoods
.
setUnit
(
isSkuProduct
?
skuProduct
.
getUnit
()
:
spuProduct
.
getUnit
());
cartGoods
.
setWeightType
(
CommonsConstant
.
WEIGHT_PRODUCT
.
equals
(
spuProduct
.
getWeightType
()));
cartGoods
.
setMaterialAmount
(
0L
);
cartGoods
.
setOriginalMaterialAmount
(
0L
);
// todo 设置加料
this
.
checkMaterialProduct
(
cartGoods
,
spuProduct
);
...
...
@@ -337,6 +339,7 @@ public class ShoppingCartAdapter {
* @param spuProduct
*/
private
void
checkMaterialProduct
(
CartGoods
cartGoods
,
ProductBeanDTO
spuProduct
)
{
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
return
;
//加料信息为空
if
(
CollectionUtils
.
isEmpty
(
spuProduct
.
getAdditionalGroupList
()))
return
;
...
...
@@ -359,7 +362,7 @@ public class ShoppingCartAdapter {
material
.
setSpuId
(
detail
.
getProductId
());
//行单价 \ 行总价
material
.
setFinalPrice
(
detail
.
getProductFinalPrice
().
longValue
());
material
.
setAmount
(
detail
.
getProductFinalPrice
().
longValue
());
material
.
setAmount
(
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
()
);
//原行单价*数量
material
.
setOriginalAmount
(
detail
.
getProductFinalPrice
().
longValue
()
*
cartGoods
.
getQty
());
material
.
setOriginalPrice
(
detail
.
getProductFinalPrice
().
longValue
());
...
...
@@ -375,8 +378,8 @@ public class ShoppingCartAdapter {
cartGoods
.
setMaterialAmount
(
materialAmount
);
//加料行记录原价总价
cartGoods
.
setOriginalMaterialAmount
(
originalMaterAmount
);
cartGoods
.
setOriginalAmount
(
cartGoods
.
getOriginalAmount
()
+
originalMaterAmount
);
cartGoods
.
setSubName
(
materialSubName
);
//
cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + originalMaterAmount);
//cartGoods.setSubName(StringUtils.strip(materialSubName, "/")
);
}
private
boolean
updateComboxGoodsInfo
(
CartGoods
cartGoods
,
CartGoods
.
ComboxGoods
comboxGoods
,
ProductBeanDTO
parentProductBean
,
List
<
ProductBeanDTO
>
productBeans
,
CartGoodsStates
cartGoodsStates
,
List
<
String
>
invalidGoodsIdList
)
{
...
...
order-application-service/pom.xml
View file @
030dfc62
...
...
@@ -20,7 +20,7 @@
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
<artifactId>
sdk-common-base
</artifactId>
<version>
1.
3.9-SNAPSHOT
</version>
<version>
1.
5.2.RELEASE
</version>
</dependency>
<dependency>
<groupId>
com.freemud.sdk.api.assortment
</groupId>
...
...
@@ -89,7 +89,7 @@
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
<artifactId>
storecenter-sdk
</artifactId>
<version>
3.
1.1.RELEASE
</version>
<version>
3.
2.1-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
cn.freemud
</groupId>
...
...
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
View file @
030dfc62
...
...
@@ -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
.
getMaterailList
()))
{
cartGoodsDetailDto
.
getMaterailList
().
stream
().
forEach
(
p
->
{
CreateOrderProductRequest
orderProductDto
=
convent2OrderProductByMaterail
(
cartGoodsDetailDto
,
p
);
products
.
add
(
orderProductDto
);
});
}
if
(
CollectionUtils
.
isNotEmpty
(
cartGoodsDetailDto
.
getActivityDiscountsDtos
()))
{
createOrderProductDto
.
setAccounts
(
getAccounts
(
createOrderProductDto
,
cartGoodsDetailDto
.
getActivityDiscountsDtos
()));
}
...
...
@@ -258,21 +251,6 @@ public class OrderAdapter {
return
createOrderDto
;
}
private
CreateOrderProductRequest
convent2OrderProductByMaterail
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
goodsDetail
,
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
CartGoodsMaterail
materail
)
{
CreateOrderProductRequest
createOrderProductRequest
=
new
CreateOrderProductRequest
();
createOrderProductRequest
.
setParentProductId
(
goodsDetail
.
getSpuId
());
createOrderProductRequest
.
setProductId
(
materail
.
getMaterailId
());
createOrderProductRequest
.
setProductName
(
materail
.
getMaterailName
());
createOrderProductRequest
.
setPrice
(
materail
.
getOriginalPrice
());
createOrderProductRequest
.
setSalePrice
(
materail
.
getOriginalPrice
());
// TODO 优惠数量问题
createOrderProductRequest
.
setTotalDiscountAmount
(
materail
.
getDiscountAmount
());
createOrderProductRequest
.
setNumber
(
materail
.
getQty
());
// TODO 加料商品类型问题, 默认为2
createOrderProductRequest
.
setProductType
(
materail
.
getType
());
return
createOrderProductRequest
;
}
public
CreateFatherSonOrderRequest
convertFatherSonOrderRequest
(
CreateOrderVo
createOrderVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
OrderExtendedReq
orderExtendedReq
,
StoreResponse
.
BizVO
storeResponseDto
,
String
appId
)
{
...
...
@@ -1673,6 +1651,11 @@ public class OrderAdapter {
productBean
.
getComboProduct
().
forEach
(
product
->
setMealProducts
.
add
(
convent2ProductVo
(
product
)));
productVo
.
setSetMealProducts
(
setMealProducts
);
}
if
(
ObjectUtils
.
equals
(
ProductTypeEnum
.
MATERIAL_PRODUCT
.
getCode
(),
productBean
.
getProductType
()))
{
List
<
ProductVo
>
setMaterialProducts
=
new
ArrayList
<>();
productBean
.
getMaterialProduct
().
forEach
(
product
->
setMaterialProducts
.
add
(
convent2ProductVo
(
product
)));
productVo
.
setSetMaterialProducts
(
setMaterialProducts
);
}
productVos
.
add
(
productVo
);
}
productVos
.
sort
(
Comparator
.
comparing
(
ProductVo:
:
getSequence
));
...
...
@@ -1939,6 +1922,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/PurchasePaidRequestDto.java
View file @
030dfc62
...
...
@@ -36,5 +36,13 @@ public class PurchasePaidRequestDto {
* 用户ID
*/
private
String
memberId
;
/**
* 推广门店Id
*/
private
String
promoteStoreId
;
/**
* 推广门店名称
*/
private
String
promoteStoreName
;
}
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/ShoppingCartGoodsDto.java
View file @
030dfc62
...
...
@@ -212,7 +212,7 @@ public class ShoppingCartGoodsDto {
*/
private
List
<
CartGoodsDetailDto
>
comboProducts
;
private
List
<
CartGoods
Materail
>
materai
lList
;
private
List
<
CartGoods
DetailDto
>
materia
lList
;
@Data
public
final
static
class
CartGoodsExtra
{
...
...
@@ -227,40 +227,6 @@ public class ShoppingCartGoodsDto {
}
@Data
public
final
static
class
CartGoodsMaterail
{
/**
* 加料Id
*/
private
String
materailId
;
/**
* 加料名称
*/
private
String
materailName
;
/**
* 加料数量
*/
private
Integer
qty
;
/**
* 加料原始价格
*/
private
Long
originalPrice
;
/**
* 加料优惠价格
*/
private
Long
discountAmount
;
/**
* 加料实际价格
*/
private
Long
actualPrice
;
/**
* 商品类型
*/
private
Integer
type
;
}
/**
* 获取extras attributeNames
*/
...
...
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
View file @
030dfc62
...
...
@@ -102,7 +102,7 @@ public class CreateOrderVo {
private
String
expectTime
;
/**
* 取餐标识 0=我已到店、尽快送出
* 取餐标识 0=我已到店、尽快送出
1预约单
*/
private
String
takeMealFlag
;
/**
...
...
order-application-service/src/main/java/cn/freemud/entities/vo/ProductVo.java
View file @
030dfc62
...
...
@@ -152,4 +152,6 @@ public class ProductVo {
private
List
<
InventedParentActivityVo
>
InventedParentActivitiesVo
;
private
List
<
ProductVo
>
setMaterialProducts
;
}
order-application-service/src/main/java/cn/freemud/enums/ProductType.java
View file @
030dfc62
...
...
@@ -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-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
030dfc62
...
...
@@ -61,6 +61,8 @@ public enum ResponseResult {
STORE_BIND_MALL_NOT_FOUND
(
"43014"
,
"商城门店存在"
),
STORE_DISCONTENT_DELIVERY_CONDITION
(
"43015"
,
"门店起送条件设置错误"
),
STORE_DISCONTENT_DELIVERY_CUP
(
"43016"
,
"不满足起送杯数"
),
STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS
(
"43017"
,
"预约失败,请重新下单"
),
STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS
(
"43018"
,
"门店不支持预约,请重新选择"
),
/**
* 购物车状态码
...
...
order-application-service/src/main/java/cn/freemud/service/adapter/AbstractOrderCheck.java
0 → 100644
View file @
030dfc62
package
cn
.
freemud
.
service
.
adapter
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
java.util.Objects
;
public
abstract
class
AbstractOrderCheck
implements
OrderCheck
{
/**
* 校验门店状态
* @param bizVO
*/
void
doStoreStateCheck
(
StoreResponse
.
BizVO
bizVO
)
{
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if
(!
Objects
.
equals
(
bizVO
.
getState
(),
"1"
))
{
throw
new
ServiceException
(
ResponseResult
.
STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS
);
// 营业
}
else
{
throw
new
ServiceException
(
ResponseResult
.
STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS
);
}
}
}
order-application-service/src/main/java/cn/freemud/service/adapter/OrderCheck.java
0 → 100644
View file @
030dfc62
package
cn
.
freemud
.
service
.
adapter
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.enums.CreateOrderType
;
import
cn.freemud.interceptor.ServiceException
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
/**
* 订单检查
*/
public
interface
OrderCheck
{
/***
* 是否匹配
* @param orderType {@link CreateOrderType}
* @return
*/
boolean
support
(
int
orderType
);
/**
* 检查
* @param vo
* @param storeResponse
*/
void
check
(
CreateOrderVo
vo
,
StoreResponse
storeResponse
)
throws
ServiceException
;
}
order-application-service/src/main/java/cn/freemud/service/adapter/OrderCheckAdapter.java
0 → 100644
View file @
030dfc62
package
cn
.
freemud
.
service
.
adapter
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Objects
;
/**
* 订单校验
*/
@Slf4j
public
class
OrderCheckAdapter
{
static
ArrayList
<
OrderCheck
>
orderCheckList
=
Lists
.
newArrayList
(
new
ToStoreCheck
(),
new
TakeOutOrderCheck
());
/***
* 校验预约单门店数据
* @param vo
* @param storeResponse
* @throws ServiceException 抛出异常校验异常数据
*/
public
static
void
check
(
CreateOrderVo
vo
,
StoreResponse
storeResponse
)
throws
ServiceException
{
//非预约单的过滤
if
(
Objects
.
isNull
(
vo
.
getOrderType
())
||
(!
Objects
.
equals
(
vo
.
getTakeMealFlag
(),
"1"
)))
{
return
;
}
StoreResponse
.
Configuration
configuration
=
storeResponse
.
getBizVO
().
getStoreConfig
();
log
.
info
(
"门店:{},外卖预约单状态:{},自提预约单状态:{}"
,
vo
.
getShopId
(),
configuration
.
getDeliveryAppoint
(),
configuration
.
getSelfMentionSwitch
());
for
(
OrderCheck
orderCheck
:
orderCheckList
)
{
if
(
orderCheck
.
support
(
vo
.
getOrderType
()))
{
orderCheck
.
check
(
vo
,
storeResponse
);
return
;
}
}
}
}
order-application-service/src/main/java/cn/freemud/service/adapter/TakeOutOrderCheck.java
0 → 100644
View file @
030dfc62
package
cn
.
freemud
.
service
.
adapter
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.enums.CreateOrderType
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
java.util.Objects
;
/**
* 外卖订单检查
*/
public
class
TakeOutOrderCheck
extends
AbstractOrderCheck
{
@Override
public
boolean
support
(
int
orderType
)
{
return
CreateOrderType
.
TAKE_OUT
.
getCode
()
==
orderType
;
}
@Override
public
void
check
(
CreateOrderVo
vo
,
StoreResponse
storeResponse
)
{
StoreResponse
.
BizVO
bizVO
=
storeResponse
.
getBizVO
();
StoreResponse
.
Configuration
storeConfig
=
bizVO
.
getStoreConfig
();
// 关闭预约单
if
(
Objects
.
equals
(
storeConfig
.
getDeliveryAppoint
(),
0
))
{
super
.
doStoreStateCheck
(
bizVO
);
}
}
}
order-application-service/src/main/java/cn/freemud/service/adapter/ToStoreCheck.java
0 → 100644
View file @
030dfc62
package
cn
.
freemud
.
service
.
adapter
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.enums.CreateOrderType
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
java.util.Objects
;
/**
* 到店订单检查
*/
public
class
ToStoreCheck
extends
AbstractOrderCheck
{
@Override
public
boolean
support
(
int
orderType
)
{
return
CreateOrderType
.
COLLECT_GOODS
.
getCode
()
==
orderType
;
}
@Override
public
void
check
(
CreateOrderVo
vo
,
StoreResponse
storeResponse
)
{
StoreResponse
.
BizVO
bizVO
=
storeResponse
.
getBizVO
();
StoreResponse
.
Configuration
storeConfig
=
bizVO
.
getStoreConfig
();
// 关闭预约单
if
(
Objects
.
equals
(
storeConfig
.
getSelfMentionSwitch
(),
0
))
{
super
.
doStoreStateCheck
(
bizVO
);
}
}
}
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
View file @
030dfc62
...
...
@@ -31,6 +31,7 @@ import cn.freemud.manager.OpenPlatformIappWxappConfigManager;
import
cn.freemud.manager.OpenPlatformPartnerStoreDeliveryConfigManager
;
import
cn.freemud.manager.StoreTableNumberManager
;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.adapter.OrderCheckAdapter
;
import
cn.freemud.service.thirdparty.ShoppingCartClient
;
import
cn.freemud.service.thirdparty.StockClient
;
import
cn.freemud.utils.LogUtil
;
...
...
@@ -109,6 +110,7 @@ public class CheckOrder {
@Autowired
private
CouponService
couponService
;
private
static
Gson
gson
=
new
Gson
();
/**
* 下单会员相关校验
*/
...
...
@@ -159,6 +161,9 @@ public class CheckOrder {
if
(
storeResponse
==
null
||
storeResponse
.
getBizVO
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_NOT_FOUND
);
}
//订单预约单检查
OrderCheckAdapter
.
check
(
createOrderVo
,
storeResponse
);
StoreResponse
.
BizVO
storeResponseDto
=
storeResponse
.
getBizVO
();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if
(
storeResponseDto
.
getActiveFlag
()
==
null
||
storeResponseDto
.
getActiveFlag
()
!=
1
)
{
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
030dfc62
...
...
@@ -486,7 +486,7 @@ public class OrderServiceImpl implements Orderservice {
// 开通会员卡
if
(
StringUtils
.
isNotBlank
(
ruleId
))
{
this
.
activateMemberCard
(
partnerId
,
ruleId
,
oid
,
userId
);
this
.
activateMemberCard
(
partnerId
,
ruleId
,
oid
,
userId
,
storeId
,
orderBean
.
getShopName
()
);
}
//支付回掉成功标记
redisCache
.
save
(
RedisKeyConstant
.
KGD_PAYMENT_CALLBACK_FMID
+
message
.
getOut_trade_no
(),
message
.
getOut_trade_no
(),
10L
,
TimeUnit
.
MINUTES
);
...
...
@@ -515,19 +515,22 @@ public class OrderServiceImpl implements Orderservice {
/**
* 开通会员卡
*
* @param partnerId 商户号
* @param ruleId 会员规则ID
* @param oid 订单号
* @param userId 用户ID
* @param storeId 门店id
* @param shopName 门店名称
*/
private
void
activateMemberCard
(
String
partnerId
,
String
ruleId
,
String
oid
,
String
userId
)
{
private
void
activateMemberCard
(
String
partnerId
,
String
ruleId
,
String
oid
,
String
userId
,
String
storeId
,
String
shopName
)
{
PurchasePaidRequestDto
purchasePaidRequestDto
=
new
PurchasePaidRequestDto
();
purchasePaidRequestDto
.
setPartnerId
(
partnerId
);
purchasePaidRequestDto
.
setOperatorType
(
0
);
purchasePaidRequestDto
.
setRuleId
(
ruleId
);
purchasePaidRequestDto
.
setOrderId
(
oid
);
purchasePaidRequestDto
.
setMemberId
(
userId
);
purchasePaidRequestDto
.
setPromoteStoreId
(
storeId
);
purchasePaidRequestDto
.
setPromoteStoreName
(
shopName
);
// 尝试三次开通会员卡,中途成功则跳出
int
count
=
3
;
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
...
...
@@ -1210,7 +1213,6 @@ public class OrderServiceImpl implements Orderservice {
if
(
OldOrderStatus
.
COMPLETE
.
getCode
().
equals
(
orderBean
.
getStatus
()))
{
cancelOrderRequest
.
setAfterSalesType
(
AfterSalesType
.
USER_SALE_RETURN
);
}
cancelOrderRequest
.
setReason
(
orderRefundVo
.
getReason
());
cancelOrderRequest
.
setReqRemark
(
orderRefundVo
.
getRemarks
());
cancelOrderRequest
.
setOperator
(
orderBean
.
getUserName
());
...
...
@@ -1225,7 +1227,7 @@ public class OrderServiceImpl implements Orderservice {
sendPosMessage
(
partnerId
,
orderBean
.
getShopId
());
}
//通知小助手发送申请退款公众号订阅消息
sendApplyRefundSubscriptionNotice
(
orderBean
,
orderRefundVo
);
sendApplyRefundSubscriptionNotice
(
orderBean
,
orderRefundVo
);
//已接单可发起退款申请,查询门店有无云打印机,有则打印退款申请小票
printApplyRefundSmallTicket
(
orderBean
,
orderRefundVo
);
}
...
...
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/enums/ProductTypeEnum.java
View file @
030dfc62
...
...
@@ -15,14 +15,15 @@ public enum ProductTypeEnum {
GENERAL_PRODUCT
(
1
,
"普通商品"
),
MATERAIL_PRODUCT
(
2
,
"加料商品"
),
GROUP_PRODUCT
(
3
,
"组合商品"
),
SETMEAL_PRODUCT
(
6
,
"套餐商品"
),
SETMEAL_UPPRICE_PRODUCT
(
7
,
"加价套餐商品"
),
VIRTUAL_PRODUCT
(
9
,
"虚拟商品"
),
MORD_SPECIFICATION_PRODUCT
(
10
,
"多规格商品"
),
WEIGHT_PRODUCT
(
11
,
"称重商品"
),
TABLEWARE_PRODUCT
(
12
,
"餐具商品"
);
TABLEWARE_PRODUCT
(
12
,
"餐具商品"
),
MATERIAL_PRODUCT
(
88
,
"加料商品"
);
...
...
pom.xml
View file @
030dfc62
...
...
@@ -144,7 +144,7 @@
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
<artifactId>
sdk-common-base
</artifactId>
<version>
1.
3.9-SNAPSHOT
</version>
<version>
1.
5.2.RELEASE
</version>
</dependency>
<!-- mybatis -->
...
...
shopping-cart-application-service/pom.xml
View file @
030dfc62
...
...
@@ -35,7 +35,7 @@
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
<artifactId>
productcenter-sdk
</artifactId>
<version>
3.
2.RELEASE
</version>
<version>
3.
5.4-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
...
...
@@ -45,7 +45,7 @@
<dependency>
<groupId>
cn.freemud
</groupId>
<artifactId>
assortment-shoppingcart-sdk
</artifactId>
<version>
1.
1.8
-SNAPSHOT
</version>
<version>
1.
2.0
-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 @
030dfc62
...
...
@@ -121,6 +121,7 @@ public class ShoppingCartConvertAdapter {
goods
.
setOriginalPrice
(
materialGoods
.
getOriginalPrice
());
goods
.
setSalePrice
(
materialGoods
.
getFinalPrice
());
goods
.
setQty
(
cartGoods
.
getQty
());
goods
.
setTotalDiscountAmount
(
0
);
materialList
.
add
(
goods
);
}
cartGoodsDetailDto
.
setMaterialList
(
materialList
);
...
...
@@ -133,7 +134,8 @@ public class ShoppingCartConvertAdapter {
||
ObjectUtils
.
equals
(
ActivityTypeEnum
.
TYPE_62
.
getCode
(),
cartGoods
.
getActivityType
()))
{
cartGoodsDetailDto
.
setTotalDiscountAmount
(
cartGoods
.
getOriginalAmount
().
intValue
()
-
cartGoods
.
getAmount
().
intValue
());
}
else
{
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
>
collect
=
apportionGoodsList
.
stream
().
filter
(
a
->
ObjectUtils
.
equals
(
cartGoods
.
getSkuId
(),
a
.
getGoodsId
())
||
ObjectUtils
.
equals
(
cartGoods
.
getSpuId
(),
a
.
getGoodsId
())).
collect
(
Collectors
.
toList
());
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
>
collect
=
apportionGoodsList
.
stream
().
filter
(
a
->
ObjectUtils
.
equals
(
cartGoods
.
getCartGoodsUid
(),
a
.
getCartGoodsUid
())).
collect
(
Collectors
.
toList
());
//List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> collect = apportionGoodsList.stream().filter(a -> ObjectUtils.equals(cartGoods.getSkuId(), a.getGoodsId()) || ObjectUtils.equals(cartGoods.getSpuId(), a.getGoodsId())).collect(Collectors.toList());
if
(
CollectionUtils
.
isNotEmpty
(
collect
))
{
setTotalDiscountAndSalePrice
(
collect
,
cartGoodsDetailDto
,
duplicateGoodsMap
);
// 设置商品行,优惠活动均摊
...
...
@@ -171,6 +173,7 @@ public class ShoppingCartConvertAdapter {
}
/**
* 活动级别的促销均摊
* 获取当前商品的售后价格
*
* @param apportionGoodsList 促销均摊列表
...
...
@@ -186,19 +189,19 @@ public class ShoppingCartConvertAdapter {
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
ApportionGoods
apportionGoods
:
apportionGoodsList
)
{
//折扣=所有折扣和*百分比(当前行商品数量/购物车总商品数量)
discountPrice
+=
apportionGoods
.
getApportionDetails
().
stream
().
filter
(
d
->
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_32
.
getCode
(),
d
.
getActivityType
())
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_104
.
getCode
(),
d
.
getActivityType
())
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_2
.
getCode
(),
d
.
getActivityType
())
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_21
.
getCode
(),
d
.
getActivityType
())
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_104
.
getCode
(),
d
.
getActivityType
())
//X件Y折
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_2
.
getCode
(),
d
.
getActivityType
())
//单品特价
&&
ObjectUtils
.
notEqual
(
ActivityTypeEnum
.
TYPE_21
.
getCode
(),
d
.
getActivityType
())
//单品折扣
).
mapToLong
(
t
->
t
.
getActivityApportionAmount
()
*
apportionGoods
.
getGoodsQuantity
()).
sum
()
*
cartGoodsDetailDto
.
getQty
()
/
goodsTotalQty
;
}
String
currentGoodsIdMap
=
duplicateGoodsMap
.
get
(
cartGoodsDetailDto
.
get
SkuI
d
());
String
currentGoodsIdMap
=
duplicateGoodsMap
.
get
(
cartGoodsDetailDto
.
get
CartGoodsUi
d
());
if
(
currentGoodsIdMap
!=
null
)
{
String
[]
value
=
currentGoodsIdMap
.
split
(
","
);
//不是最后一行商品,折扣为discountPrice
if
(
Integer
.
parseInt
(
value
[
0
])
>
1
)
{
int
totalDiscountPrice
=
Integer
.
parseInt
(
value
[
1
])
+
discountPrice
.
intValue
();
int
index
=
Integer
.
parseInt
(
value
[
0
])
-
1
;
duplicateGoodsMap
.
put
(
cartGoodsDetailDto
.
get
SkuI
d
(),
String
.
format
(
"%s,%s"
,
index
,
totalDiscountPrice
));
duplicateGoodsMap
.
put
(
cartGoodsDetailDto
.
get
CartGoodsUi
d
(),
String
.
format
(
"%s,%s"
,
index
,
totalDiscountPrice
));
}
else
{
//最后一行
Long
totalDiscountAmount
=
0L
;
...
...
@@ -442,4 +445,9 @@ public class ShoppingCartConvertAdapter {
String
skuId
=
StringUtils
.
isNotBlank
(
addShoppingCartGoodsRequestVo
.
getSkuId
())
?
addShoppingCartGoodsRequestVo
.
getSkuId
()
:
""
;
addShoppingCartGoodsRequestVo
.
setSkuId
(
skuId
);
}
}
public
String
jointPk
(
String
a
,
String
b
)
{
StringBuffer
stringBuffer
=
new
StringBuffer
();
return
stringBuffer
.
append
(
a
).
append
(
b
).
toString
();
}
}
\ No newline at end of file
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/ActivityCalculationDiscountRequestDto.java
View file @
030dfc62
...
...
@@ -122,6 +122,7 @@ public class ActivityCalculationDiscountRequestDto {
CalculationDiscountGoods
that
=
(
CalculationDiscountGoods
)
o
;
return
Objects
.
equals
(
goodsId
,
that
.
goodsId
)
&&
Objects
.
equals
(
category
,
that
.
category
)
&&
Objects
.
equals
(
cartGoodsUid
,
that
.
cartGoodsUid
)
&&
Objects
.
equals
(
originalPrice
,
that
.
originalPrice
);
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/CartGoods.java
View file @
030dfc62
...
...
@@ -173,7 +173,7 @@ public class CartGoods {
private
List
<
ComboxGoods
>
productGroupList
;
/**
* 商品
加料
* 商品
原始加料数据
*/
private
List
<
MaterialGoods
>
productMaterialList
;
...
...
@@ -314,7 +314,9 @@ public class CartGoods {
originalString
.
append
(
goods
.
toString
());
}
}
if
(
CollectionUtils
.
isNotEmpty
(
productMaterialList
))
{
productMaterialList
.
stream
().
sorted
(
Comparator
.
comparing
(
MaterialGoods:
:
getSpuId
)).
forEach
(
e
->
originalString
.
append
(
e
.
getSpuId
()));
}
//当前字符串
CartGoods
cartGoods
=
(
CartGoods
)
o
;
...
...
@@ -333,6 +335,9 @@ public class CartGoods {
currentString
.
append
(
goods
.
toString
());
}
}
if
(
CollectionUtils
.
isNotEmpty
(
cartGoods
.
getProductMaterialList
()))
{
cartGoods
.
getProductMaterialList
().
stream
().
sorted
(
Comparator
.
comparing
(
MaterialGoods:
:
getSpuId
)).
forEach
(
e
->
currentString
.
append
(
e
.
getSpuId
()));
}
return
StringUtils
.
equals
(
originalString
.
toString
(),
currentString
.
toString
());
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/BuySendPromotionService.java
View file @
030dfc62
...
...
@@ -59,10 +59,6 @@ public class BuySendPromotionService implements IPromotionService {
if
(
CollectionUtils
.
isEmpty
(
sendActivityList
))
{
return
;
}
//ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity = getSendActivity(sendActivityList, ActivityTypeEnum.TYPE_61);
//if (sendActivity == null) {
// return;
//}
//Todo 获取多个赠品list
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
SendActivity
>
sendActivityLists
=
getSendActivityList
(
ActivityTypeEnum
.
TYPE_61
,
sendActivityList
);
...
...
@@ -70,14 +66,6 @@ public class BuySendPromotionService implements IPromotionService {
if
(
sendActivityLists
.
size
()
==
0
)
{
return
;
}
//List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsList = sendActivity.getSendGoods();
//if (CollectionUtils.isEmpty(sendGoodsList)) {
// return;
//}
//Integer maxNum = sendActivity.getMaxNum();
//List<String> activitySpuIds = sendGoodsList.stream().map(each -> each.getCategory()).collect(Collectors.toList());
//Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsMap = getSendGoodsMap(sendGoodsList);
//Todo
List
<
String
>
activitySpuIds
=
new
ArrayList
<>();
Map
<
String
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
SendActivity
.
SendGoods
>
sendGoodsMap
=
new
HashMap
<>();
...
...
@@ -130,11 +118,6 @@ public class BuySendPromotionService implements IPromotionService {
}
*/
for
(
CartGoods
cartGoods
:
newCartGoodsList
)
{
//Integer max = maxNums.get(cartGoods.getGoodsId());
////if (max <= 0) continue;
//if (max < cartGoods.getQty()) {
// cartGoods.setQty(max);
//}
givePackAmount
=
givePackAmount
+
cartGoods
.
getPackPrice
()
*
cartGoods
.
getQty
();
giveTotalAmount
=
giveTotalAmount
+
cartGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
();
cartGoods
.
setOriginalAmount
(
cartGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
());
...
...
@@ -265,11 +248,15 @@ public class BuySendPromotionService implements IPromotionService {
}
}
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
SendActivity
.
SendGoods
sendGoods
=
sendGoodsMap
.
get
(
cartGood
.
getGoodsId
());
CartGoods
cartGoods
=
shoppingCartConvertAdapter
.
convent2CartGoods
(
cartGood
,
sendGoods
.
getNowPrice
());
cartGoods
.
setClassificationId
(
cartGood
.
getClassificationId
());
cartGoods
.
setClassificationName
(
cartGood
.
getClassificationName
());
cartGoods
.
setQty
(
sendGoods
.
getSendNumber
()
>
0
?
sendGoods
.
getSendNumber
()
:
SEND_NUMBER
);
newCartGoodsList
.
add
(
cartGoods
);
String
s
=
currentSubName
(
cartGood
);
CartGoods
newCartGoods
=
shoppingCartConvertAdapter
.
convent2CartGoods
(
cartGood
,
sendGoods
.
getNowPrice
());
newCartGoods
.
setClassificationId
(
cartGood
.
getClassificationId
());
newCartGoods
.
setClassificationName
(
cartGood
.
getClassificationName
());
newCartGoods
.
setQty
(
sendGoods
.
getSendNumber
()
>
0
?
sendGoods
.
getSendNumber
()
:
SEND_NUMBER
);
//赠品不允许有加料
newCartGoods
.
setProductMaterialList
(
new
ArrayList
());
newCartGoods
.
setSubName
(
s
);
newCartGoodsList
.
add
(
newCartGoods
);
}
...
...
@@ -287,7 +274,7 @@ public class BuySendPromotionService implements IPromotionService {
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_GIFTS_PRODUCT_NOT_EXIST
);
}
for
(
CartGoods
cartGoods
:
newCartGoodsList
)
{
for
(
CartGoods
cartGoods
:
newCartGoodsList
)
{
Optional
<
ProductBeanDTO
>
productBeanDTO
=
productBeanList
.
stream
().
filter
(
productBean
->
ObjectUtils
.
equals
(
productBean
.
getPid
(),
cartGoods
.
getGoodsId
())).
findFirst
();
if
(!
productBeanDTO
.
isPresent
())
{
continue
;
...
...
@@ -296,4 +283,21 @@ public class BuySendPromotionService implements IPromotionService {
cartGoods
.
setWeight
(
productBeanDTO
.
get
().
getWeight
());
}
}
/**
* 提取当前属性名
*
* @param cartGoods
* @return
*/
private
String
currentSubName
(
CartGoods
cartGoods
)
{
String
subName
=
cartGoods
.
getSubName
();
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
{
return
subName
;
}
StringBuilder
currentString
=
new
StringBuilder
();
cartGoods
.
getProductMaterialList
().
stream
().
forEach
(
e
->
currentString
.
append
(
"/"
+
e
.
getSpuName
()));
String
replace
=
StringUtils
.
replace
(
subName
,
currentString
.
toString
(),
""
);
return
replace
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/DefaultPromotionService.java
View file @
030dfc62
...
...
@@ -86,7 +86,7 @@ public class DefaultPromotionService implements IPromotionService {
calculationDiscountResult
==
null
?
new
ArrayList
<>()
:
calculationDiscountResult
.
getApportionGoods
();
Map
<
String
,
String
>
duplicateGoodsMap
=
new
HashMap
<>();
cartGoodsList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CartGoods:
:
get
GoodsI
d
,
Collectors
.
counting
())).
forEach
((
goodsId
,
count
)
->
{
cartGoodsList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CartGoods:
:
get
CartGoodsUi
d
,
Collectors
.
counting
())).
forEach
((
goodsId
,
count
)
->
{
duplicateGoodsMap
.
put
(
goodsId
,
String
.
format
(
"%s,0"
,
count
));
});
for
(
int
i
=
0
,
len
=
cartGoodsList
.
size
();
i
<
len
;
i
++)
{
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
View file @
030dfc62
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.adapter.ShoppingCartConvertAdapter
;
import
cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto
;
import
cn.freemud.entities.dto.UserLoginInfoDto
;
import
cn.freemud.entities.dto.activity.ActivityDiscountsDto
;
...
...
@@ -10,6 +11,7 @@ import cn.freemud.enums.GoodsTypeEnum;
import
cn.freemud.service.IPromotionService
;
import
lombok.Data
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
...
...
@@ -28,7 +30,8 @@ import java.util.List;
*/
@Service
(
"MaterialPromotionService"
)
public
class
MaterialPromotionService
implements
IPromotionService
{
@Autowired
private
ShoppingCartConvertAdapter
shoppingCartConvertAdapter
;
/**
* 总优惠和总原价促进已经计算过了,这里只需要累积行记录
* 加料优惠金额
...
...
@@ -43,31 +46,22 @@ 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
,
MaterialApportion
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
if
(
map
!=
null
&&
!
map
.
isEmpty
())
{
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
continue
;
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
MaterialApportion
apportion
=
map
.
get
(
materialGoods
.
getSpuId
());
//设置小料行单价和行总价
materialGoods
.
setFinalPrice
(
apportion
.
getSalePrice
());
materialGoods
.
setAmount
(
apportion
.
getAmount
());
}
}
}
long
materialAmount
=
0L
,
materialOriginal
=
0L
;
long
materialAmount
=
0L
,
materialOriginal
=
0L
;
//todo : 加料和商品成交价不需要累计 分开显示
for
(
CartGoods
cartGoods
:
cartGoodsList
)
{
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
continue
;
materialAmount
=
0L
;
materialOriginal
=
0L
;
for
(
CartGoods
.
MaterialGoods
materialGoods
:
cartGoods
.
getProductMaterialList
())
{
materialAmount
+=
materialGoods
.
getAmount
();
materialOriginal
+=
materialGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
();
//materialAmount += materialGoods.getFinalPrice()*cartGoods.getQty();
//materialOriginal += materialGoods.getOriginalPrice() * cartGoods.getQty();
materialGoods
.
setAmount
(
materialGoods
.
getFinalPrice
()
*
cartGoods
.
getQty
());
materialGoods
.
setOriginalAmount
(
materialGoods
.
getOriginalPrice
()
*
cartGoods
.
getQty
());
}
//设置商品行现总价\行原价 商品总价+小料商品总价
cartGoods
.
setAmount
(
cartGoods
.
getAmount
()
+
materialAmount
);
cartGoods
.
setOriginalAmount
(
cartGoods
.
getOriginalAmount
()
+
materialOriginal
);
//
cartGoods.setAmount(cartGoods.getAmount() + materialAmount);
//
cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + materialOriginal);
}
}
...
...
@@ -83,26 +77,29 @@ public class MaterialPromotionService implements IPromotionService {
@Override
public
void
updateShoppingCartGoodsApportion
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
CreateOrderVo
.
PremiumExchangeActivity
premiumExchangeActivity
,
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
)
{
HashMap
<
String
,
MaterialApportion
>
map
=
getApportionGoodsDetail
(
calculationDiscountResult
);
if
(
map
==
null
&&
map
.
isEmpty
())
return
;
List
<
ShoppingCartGoodsDto
.
CartGoodsDetailDto
>
products
=
shoppingCartGoodsDto
.
getProducts
();
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
product
:
products
)
{
if
(
CollectionUtils
.
isEmpty
(
product
.
getMaterialList
()))
continue
;
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
materialGoods
:
product
.
getMaterialList
())
{
MaterialApportion
material
=
map
.
get
(
materialGoods
.
getSpuId
());
if
(
material
.
getApportionAmount
().
intValue
()
==
0
)
continue
;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto
activityDiscountsDto
=
new
ActivityDiscountsDto
();
List
<
ActivityDiscountsDto
>
activityDiscountsDtoList
=
new
ArrayList
<>();
activityDiscountsDto
.
setActivityCode
(
material
.
getDetails
().
activityCode
);
activityDiscountsDto
.
setActivityName
(
material
.
getDetails
().
activityName
);
activityDiscountsDto
.
setActivityType
(
material
.
getDetails
().
activityType
);
activityDiscountsDto
.
setDiscountAmount
(
material
.
getApportionAmount
());
activityDiscountsDtoList
.
add
(
activityDiscountsDto
);
if
(
map
.
size
()
>
0
)
{
String
pk
=
""
;
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
product
:
products
)
{
if
(
CollectionUtils
.
isEmpty
(
product
.
getMaterialList
()))
continue
;
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
.
MaterialGoods
materialGoods
:
product
.
getMaterialList
())
{
pk
=
shoppingCartConvertAdapter
.
jointPk
(
product
.
getCartGoodsUid
(),
materialGoods
.
getSpuId
());
MaterialApportion
material
=
map
.
get
(
pk
);
if
(
material
!=
null
&&
material
.
getApportionAmount
().
intValue
()
==
0
)
continue
;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto
activityDiscountsDto
=
new
ActivityDiscountsDto
();
List
<
ActivityDiscountsDto
>
activityDiscountsDtoList
=
new
ArrayList
<>();
activityDiscountsDto
.
setActivityCode
(
material
.
getDetails
().
activityCode
);
activityDiscountsDto
.
setActivityName
(
material
.
getDetails
().
activityName
);
activityDiscountsDto
.
setActivityType
(
material
.
getDetails
().
activityType
);
activityDiscountsDto
.
setDiscountAmount
(
material
.
getApportionAmount
());
activityDiscountsDtoList
.
add
(
activityDiscountsDto
);
materialGoods
.
setActivityDiscountsDtos
(
activityDiscountsDtoList
);
materialGoods
.
setTotalDiscountAmount
((
materialGoods
.
getOriginalPrice
().
intValue
()
-
materialGoods
.
getSalePrice
().
intValue
())
*
product
.
getQty
());
product
.
setProductType
(
GoodsTypeEnum
.
MATERIAL
.
getGoodsType
());
materialGoods
.
setActivityDiscountsDtos
(
activityDiscountsDtoList
);
//materialGoods.setTotalDiscountAmount((materialGoods.getOriginalPrice().intValue() - materialGoods.getSalePrice().intValue()) * product.getQty());
materialGoods
.
setTotalDiscountAmount
(
material
.
getTotalDiscountAmount
());
product
.
setProductType
(
GoodsTypeEnum
.
MATERIAL
.
getGoodsType
());
}
}
}
//将小料的价格累加到商品行上
...
...
@@ -112,6 +109,7 @@ public class MaterialPromotionService implements IPromotionService {
product
.
setSalePrice
(
product
.
getSalePrice
()
+
materialGoods
.
getSalePrice
());
//现金
product
.
setOriginalPrice
(
product
.
getOriginalPrice
()
+
materialGoods
.
getOriginalPrice
());
product
.
setTotalDiscountAmount
(
product
.
getTotalDiscountAmount
()
+
materialGoods
.
getTotalDiscountAmount
());
product
.
setProductType
(
GoodsTypeEnum
.
MATERIAL
.
getGoodsType
());
}
}
}
...
...
@@ -123,45 +121,42 @@ public class MaterialPromotionService implements IPromotionService {
* @return
*/
private
HashMap
<
String
,
MaterialApportion
>
getApportionGoodsDetail
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
)
{
HashMap
<
String
,
MaterialApportion
>
mApportion
=
new
HashMap
<>();
// 遍历促销
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;
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material material : apportionGood.getSmallMaterial()) {
hashMap.put(material.getGoodsId(), material);
}
return
mApportion
;
}
return hashMap;
*/
HashMap
<
String
,
MaterialApportion
>
mApportion
=
new
HashMap
<>();
String
pk
=
""
;
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
)
{
if
(
material
.
getApportionAmount
()
==
0
)
continue
;
pk
=
shoppingCartConvertAdapter
.
jointPk
(
material
.
getCartGoodsUid
(),
material
.
getGoodsId
());
if
(
mApportion
.
get
(
pk
)
==
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
());
materialApportion
.
setTotalDiscountAmount
(
material
.
getApportionAmount
()*
material
.
getGoodsQuantity
());
materialApportion
.
setPk
(
pk
);
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
);
if
(
CollectionUtils
.
isNotEmpty
(
material
.
getApportionDetails
()))
{
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
(
pk
,
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
);
apportion
.
setTotalDiscountAmount
(
apportion
.
getTotalDiscountAmount
()+
material
.
getApportionAmount
()*
material
.
getGoodsQuantity
()
);
mApportion
.
put
(
pk
,
apportion
);
}
}
return
mApportion
;
...
...
@@ -169,12 +164,14 @@ public class MaterialPromotionService implements IPromotionService {
@Data
private
class
MaterialApportion
{
// 累计
private
String
goodsId
;
private
Long
salePrice
;
private
Long
amount
;
private
Integer
apportionAmount
;
//优惠金额
private
Integer
totalDiscountAmount
;
private
ApportionDetails
details
;
private
String
pk
;
}
@Data
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
View file @
030dfc62
...
...
@@ -35,6 +35,7 @@ import cn.freemud.service.thirdparty.*;
import
cn.freemud.utils.PromotionFactory
;
import
cn.freemud.utils.PropertyConvertUtil
;
import
cn.freemud.utils.ResponseUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig
;
...
...
@@ -789,6 +790,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
activityCalculationDiscountRequestDto
.
setIsMember
(
isMember
);
ActivityCalculationDiscountResponseDto
activityCalculationDiscountResponseDto
;
try
{
System
.
out
.
println
(
"start discount"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
activityCalculationDiscountRequestDto
));
activityCalculationDiscountResponseDto
=
activityClient
.
calculationDiscount
(
activityCalculationDiscountRequestDto
);
}
catch
(
Exception
ex
)
{
ErrorLog
.
printErrorLog
(
"calculation_discount_error"
,
"/calculation/discount"
,
activityCalculationDiscountRequestDto
,
ex
);
...
...
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