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
9810b8b1
Commit
9810b8b1
authored
Aug 05, 2020
by
ping.wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接会员优惠券与券码可用优惠券
parent
2b27a2f3
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
482 additions
and
18 deletions
+482
-18
shopping-cart-application-service/src/main/java/cn/freemud/aop/WebAspect.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
+1
-3
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
+372
-14
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponAvailableReq.java
+45
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponAvailableResp.java
+28
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponProductVo.java
+27
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponClient.java
+8
-0
No files found.
shopping-cart-application-service/src/main/java/cn/freemud/aop/WebAspect.java
View file @
9810b8b1
...
...
@@ -98,7 +98,7 @@ public class WebAspect {
throw
new
CommonServiceException
(
CommonResponseResult
.
USER_UNAUTHORIZED
);
}
List
<
String
>
unauthorizedUrls
=
Arrays
.
asList
(
getNotFilterUrl
(
CommonRedisKeyConstant
.
SAAS_NOT_AUTHORIZED_URL
,
NOT_AUTHORIZED_KEY
).
split
(
","
));
if
(!
unauthorizedUrls
.
contains
(
requestUrl
)
&&
StringUtils
.
isEmpty
(
userInfo
.
getUnionId
()))
{
if
(!
unauthorizedUrls
.
contains
(
requestUrl
)
&&
StringUtils
.
isEmpty
(
userInfo
.
getUnionId
())
&&
!
requestUrl
.
contains
(
"MCoffee"
)
)
{
throw
new
CommonServiceException
(
CommonResponseResult
.
USER_UNAUTHORIZED
);
}
}
else
{
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
View file @
9810b8b1
...
...
@@ -11,6 +11,7 @@ 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.LogUtil
;
import
cn.freemud.utils.PropertyConvertUtil
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
...
...
@@ -42,7 +43,6 @@ import java.util.*;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public
class
CalculationServiceImpl
{
...
...
@@ -162,8 +162,6 @@ public class CalculationServiceImpl {
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
);
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
View file @
9810b8b1
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
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.*
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.service.CommonService
;
import
cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq
;
import
cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp
;
import
cn.freemud.service.impl.mcoffee.entity.CouponProductVo
;
import
cn.freemud.service.thirdparty.CardBinClient
;
import
cn.freemud.service.thirdparty.CouponClient
;
import
cn.freemud.service.thirdparty.CustomerExtendClient
;
import
cn.freemud.utils.BarcodeUtil
;
import
cn.freemud.utils.LogUtil
;
import
cn.freemud.utils.RedisUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.freemud.card.sdk.vo.coupon.CouponStateVo
;
import
com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
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.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -35,13 +44,28 @@ import java.util.stream.Collectors;
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public
class
CouponDiscountCalculation
{
@Autowired
private
C
ouponService
couponService
;
private
C
ustomerExtendClient
customerExtendClient
;
@Autowired
private
CommonService
commonService
;
@Autowired
// private CouponAvailableService couponAvailableService;
private
CouponClient
mCoffeeCouponClient
;
@Autowired
private
CouponAdapter
couponAdapter
;
@Autowired
private
RedisCache
redisCache
;
@Autowired
private
CardBinClient
cardBinClient
;
@Value
(
"${coupon.app.id}"
)
private
String
appid
;
public
void
updateShoppingCartGoodsDiscountCoupon
(
CouponPromotionVO
couponPromotionVO
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
// 用户选择了查询优惠券信息
...
...
@@ -50,7 +74,7 @@ public class CouponDiscountCalculation {
// 是否存在商品券
boolean
hasGoodssCoupon
=
CollectionUtils
.
isNotEmpty
(
tmpCartGoods
);
// 构建可用不可用优惠券
ActivityClassifyCouponBean
activityClassifyCouponBean
=
couponService
.
availableCoupon
(
cartGoodsList
,
couponPromotionVO
.
getPartnerId
()
ActivityClassifyCouponBean
activityClassifyCouponBean
=
availableCoupon
(
cartGoodsList
,
couponPromotionVO
.
getPartnerId
()
,
couponPromotionVO
.
getUserId
(),
couponPromotionVO
.
getStoreId
(),
couponPromotionVO
.
getCouponCode
(),
hasGoodssCoupon
,
couponPromotionVO
.
getOrderType
());
if
(
Objects
.
equals
(
activityClassifyCouponBean
,
null
))
{
// 构建一个空得订单券信息
...
...
@@ -99,4 +123,338 @@ public class CouponDiscountCalculation {
}
public
ActivityClassifyCouponBean
availableCoupon
(
List
<
CartGoods
>
cartGoods
,
String
partnerId
,
String
userId
,
String
storeId
,
String
couponCode
,
boolean
hasGoodsCoupon
,
Integer
orderType
)
{
GetMemberCouponListRequestDto
getMemberCouponListRequestDto
=
new
GetMemberCouponListRequestDto
(
partnerId
,
userId
);
getMemberCouponListRequestDto
.
setStatusFlags
(
Arrays
.
asList
(
CouponStatus
.
STATUS_0
.
getCode
()));
getMemberCouponListRequestDto
.
setPageNum
(
1
);
getMemberCouponListRequestDto
.
setPageSize
(
Integer
.
MAX_VALUE
);
GetMemberCouponListResponseDto
.
Result
result
=
getMemberCouponList
(
getMemberCouponListRequestDto
);
LogUtil
.
debug
(
"CouponServiceImpl_getMemberCouponList"
,
JSON
.
toJSONString
(
getMemberCouponListRequestDto
),
JSON
.
toJSONString
(
result
));
ActivityClassifyCouponBean
availableCouponResponseVo
=
new
ActivityClassifyCouponBean
();
// 可用优惠券信息
List
<
ActivityCouponBean
>
usableCoupons
=
Lists
.
newArrayList
();
// 不可用优惠券信息
List
<
ActivityCouponBean
>
disableCoupons
=
Lists
.
newArrayList
();
if
(
result
==
null
||
CollectionUtils
.
isEmpty
(
result
.
getMemberCoupons
()))
{
return
returnEmptyAvailableCoupon
(
availableCouponResponseVo
,
usableCoupons
,
disableCoupons
);
}
List
<
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
>
memberCoupons
=
result
.
getMemberCoupons
();
// 对象转map
Map
<
String
,
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
>
memberCouponMap
=
memberCoupons
.
stream
().
collect
(
Collectors
.
toMap
(
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
::
getCouponCode
,
a
->
a
,
(
k1
,
k2
)
->
k1
));
List
<
String
>
couponCodes
=
Lists
.
newArrayList
();
memberCoupons
.
forEach
(
memberCoupon
->
{
// 只筛选小于结束时间得券
if
(
System
.
currentTimeMillis
()
<
DateUtil
.
convert2Date
(
memberCoupon
.
getEndTime
(),
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
).
getTime
())
{
couponCodes
.
add
(
memberCoupon
.
getCouponCode
());
}
});
List
<
CouponStateVo
>
couponStateList
=
buildAvailiableCoupons
(
cartGoods
,
partnerId
,
storeId
,
couponCodes
);
if
(
CollectionUtils
.
isNotEmpty
(
couponStateList
))
{
return
returnSuccessAvailiableCoupons
(
couponCode
,
hasGoodsCoupon
,
availableCouponResponseVo
,
usableCoupons
,
disableCoupons
,
memberCouponMap
,
couponStateList
);
}
//临时代码
return
returnAvailableCoupons
(
couponCode
,
availableCouponResponseVo
,
memberCouponMap
,
memberCoupons
);
// return null;
}
/**
* 获取会员服务的优惠券列表
*
* @param getMemberCouponListRequestDto
* @return
*/
public
GetMemberCouponListResponseDto
.
Result
getMemberCouponList
(
GetMemberCouponListRequestDto
getMemberCouponListRequestDto
)
{
GetMemberCouponListResponseDto
getMemberCouponListResponseDto
=
null
;
try
{
getMemberCouponListResponseDto
=
customerExtendClient
.
getMemberCouponListRequestDto
(
getMemberCouponListRequestDto
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"会员服务优惠券接口调用失败"
,
ex
);
}
if
(
getMemberCouponListResponseDto
!=
null
&&
Objects
.
equals
(
getMemberCouponListResponseDto
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
()))
{
return
getMemberCouponListResponseDto
.
getData
();
}
return
null
;
}
private
List
<
CouponStateVo
>
buildAvailiableCoupons
(
List
<
CartGoods
>
cartGoods
,
String
partnerId
,
String
storeId
,
List
<
String
>
couponCodes
)
{
String
appSecret
=
getAppSecret
(
partnerId
);
// 最大15一提交
int
maxNum
=
15
;
int
count
=
couponCodes
.
size
()
/
maxNum
;
// 计算可用不可用券
CouponAvailableReq
couponAvailableReqVo
=
new
CouponAvailableReq
();
couponAvailableReqVo
.
setProviderId
(
partnerId
);
couponAvailableReqVo
.
setMerchantId
(
partnerId
);
couponAvailableReqVo
.
setStoreId
(
storeId
);
List
<
CouponProductVo
>
productList
=
Lists
.
newArrayList
();
// 优惠券优先级最高,根据商品原价做计算
// 订单金额
Long
totalAmount
=
createProductRequest
(
cartGoods
,
productList
);
couponAvailableReqVo
.
setTotalAmount
(
Integer
.
valueOf
(
totalAmount
+
""
));
couponAvailableReqVo
.
setProductList
(
productList
);
couponAvailableReqVo
.
setChannelCodeList
(
commonService
.
getOrgCodes
(
partnerId
,
storeId
));
// 构建计算SDK
List
<
CouponStateVo
>
couponStateList
=
Lists
.
newArrayList
();
for
(
int
j
=
0
;
j
<=
count
;
j
++)
{
List
calCouponCodes
=
null
;
if
(
j
==
count
)
{
calCouponCodes
=
couponCodes
.
subList
(
maxNum
*
j
,
couponCodes
.
size
());
}
else
{
calCouponCodes
=
couponCodes
.
subList
(
maxNum
*
j
,
maxNum
*
j
+
maxNum
);
}
// 书写逻辑
couponAvailableReqVo
.
setCouponCodes
(
calCouponCodes
);
CouponAvailableResp
couponsAvailable
=
null
;
try
{
couponsAvailable
=
mCoffeeCouponClient
.
getCouponsAvailable
(
couponAvailableReqVo
);
}
catch
(
Exception
e
){
LogUtil
.
error
(
"getCouponsAvailable_error"
,
JSON
.
toJSONString
(
couponAvailableReqVo
),
null
,
e
);
// throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR);
}
LogUtil
.
info
(
"getCouponsAvailable"
,
JSON
.
toJSONString
(
couponAvailableReqVo
),
JSON
.
toJSONString
(
couponsAvailable
));
if
(
couponsAvailable
!=
null
&&
Objects
.
equals
(
String
.
valueOf
(
couponsAvailable
.
getResult
()),
ResponseResult
.
SUCCESS
.
getCode
())
&&
CollectionUtils
.
isNotEmpty
(
couponsAvailable
.
getCouponStateList
()))
{
couponStateList
.
addAll
(
couponsAvailable
.
getCouponStateList
());
}
}
return
couponStateList
;
}
public
String
getAppSecret
(
String
partnerId
)
{
// 获取券服务的密钥
String
couponAppSecret
=
RedisUtil
.
getCouponAppSecret
(
partnerId
);
String
appSecret
=
redisCache
.
getValue
(
couponAppSecret
);
if
(
StringUtils
.
isBlank
(
appSecret
))
{
GetAppKeyResponseDto
getAppKeyResponseDto
=
cardBinClient
.
getAppKey
(
GetAppKeyRequestDto
.
builder
().
partnerId
(
partnerId
).
appId
(
appid
).
build
());
if
(
Objects
.
equals
(
String
.
valueOf
(
getAppKeyResponseDto
.
getStatusCode
()),
ResponseResult
.
SUCCESS
.
getCode
())
&&
getAppKeyResponseDto
.
getData
()
!=
null
)
{
redisCache
.
save
(
couponAppSecret
,
getAppKeyResponseDto
.
getData
().
getAppKey
());
appSecret
=
getAppKeyResponseDto
.
getData
().
getAppKey
();
}
}
return
appSecret
;
}
private
ActivityClassifyCouponBean
returnEmptyAvailableCoupon
(
ActivityClassifyCouponBean
availableCouponResponseVo
,
List
<
ActivityCouponBean
>
usableCoupons
,
List
<
ActivityCouponBean
>
disableCoupons
)
{
availableCouponResponseVo
.
setCouponNum
(
0
);
availableCouponResponseVo
.
setDisableCouponNum
(
0
);
availableCouponResponseVo
.
setUsableCouponNum
(
0
);
availableCouponResponseVo
.
setDisableCoupons
(
disableCoupons
);
availableCouponResponseVo
.
setUsableCoupons
(
usableCoupons
);
return
availableCouponResponseVo
;
}
private
Long
createProductRequest
(
List
<
CartGoods
>
cartGoods
,
List
<
CouponProductVo
>
productList
)
{
Long
totalAmount
=
0L
;
for
(
CartGoods
cartGood
:
cartGoods
)
{
// 剔除商品券得商品
if
(
StringUtils
.
isEmpty
(
cartGood
.
getSkuId
())
&&
StringUtils
.
isEmpty
(
cartGood
.
getSpuId
()))
{
continue
;
}
CouponProductVo
product
=
new
CouponProductVo
();
product
.
setKeyProductCode
(
cartGood
.
getCustomerCode
());
product
.
setProductId
(
StringUtils
.
isEmpty
(
cartGood
.
getSkuId
())
?
cartGood
.
getSpuId
()
:
cartGood
.
getSkuId
());
// 普通商品价格
product
.
setAmount
(
Integer
.
valueOf
(
cartGood
.
getOriginalPrice
()
+
""
));
// 套餐价格为: 套餐价+可选商品总价格
if
(
ObjectUtils
.
equals
(
GoodsTypeEnum
.
SET_MEAL_GOODS
.
getGoodsType
(),
cartGood
.
getGoodsType
()))
{
Long
finalPrice
=
cartGood
.
getFinalPrice
();
if
(
CollectionUtils
.
isNotEmpty
(
cartGood
.
getProductGroupList
())){
finalPrice
+=
cartGood
.
getProductGroupList
().
stream
().
mapToLong
(
group
->
group
.
getFinalPrice
()*
group
.
getQty
()).
sum
();
}
product
.
setAmount
(
finalPrice
.
intValue
());
}
// 数量
product
.
setQuantity
(
cartGood
.
getQty
());
productList
.
add
(
product
);
totalAmount
=
totalAmount
+
product
.
getAmount
()
*
cartGood
.
getQty
();
}
return
totalAmount
;
}
private
ActivityClassifyCouponBean
returnSuccessAvailiableCoupons
(
String
couponCode
,
boolean
hasGoodsCoupon
,
ActivityClassifyCouponBean
availableCouponResponseVo
,
List
<
ActivityCouponBean
>
usableCoupons
,
List
<
ActivityCouponBean
>
disableCoupons
,
Map
<
String
,
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
>
memberCouponMap
,
List
<
CouponStateVo
>
couponStateList
)
{
int
disableCouponNum
=
0
;
int
usableCouponNum
=
0
;
for
(
CouponStateVo
couponStateVo
:
couponStateList
)
{
// 过滤0得代金券
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_1
.
getCode
())
&&
(
couponStateVo
.
getOriginalPrice
()
==
null
||
couponStateVo
.
getOriginalPrice
()
==
0
))
{
continue
;
}
// 过滤折扣券为0折得
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_3
.
getCode
())
&&
(
couponStateVo
.
getDiscount
()
==
null
||
couponStateVo
.
getDiscount
()
==
0
))
{
continue
;
}
ActivityCouponBean
activityCouponBean
=
new
ActivityCouponBean
();
activityCouponBean
.
setCouponCode
(
couponStateVo
.
getCouponCode
());
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
memberCoupon
=
memberCouponMap
.
get
(
couponStateVo
.
getCouponCode
());
if
(
memberCoupon
!=
null
)
{
activityCouponBean
.
setCouponName
(
memberCoupon
.
getCouponName
());
activityCouponBean
.
setEndTime
(
memberCoupon
.
getEndTime
());
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_1
.
getCode
()))
{
activityCouponBean
.
setDiscountAmount
(
couponStateVo
.
getOriginalPrice
()
+
""
);
}
else
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_3
.
getCode
()))
{
// TODO 折扣券 百分值10 乘以10 前端统一除以100作为操作依据
activityCouponBean
.
setDiscountAmount
(
couponStateVo
.
getDiscount
()
!=
null
?
couponStateVo
.
getDiscount
()
*
10
+
""
:
"0"
);
}
activityCouponBean
.
setThresholdDesc
(
"满"
+
formatAmount
((
couponStateVo
.
getMinAmount
()
==
null
?
0
:
couponStateVo
.
getMinAmount
())
*
1.00
/
100
)
+
"元可用"
);
activityCouponBean
.
setActivityDesc
(
"不与其他活动优惠同时享受。"
);
activityCouponBean
.
setUnusedReason
(
couponStateVo
.
getMessage
());
// 详情
GetMemberCouponListResponseVo
.
MemberCouponDetail
detail
=
new
GetMemberCouponListResponseVo
.
MemberCouponDetail
();
detail
.
setActivityName
(
memberCoupon
.
getCouponName
());
String
startDate
=
DateUtil
.
convert2String
(
DateUtil
.
convert2Date
(
memberCoupon
.
getStartTime
(),
DateUtil
.
FORMAT_yyyyMMdd_date
),
DateUtil
.
FORMAT_yyyyMMdd_date
).
replace
(
"-"
,
"."
);
String
endDate
=
DateUtil
.
convert2String
(
DateUtil
.
convert2Date
(
memberCoupon
.
getEndTime
(),
DateUtil
.
FORMAT_yyyyMMdd_date
),
DateUtil
.
FORMAT_yyyyMMdd_date
).
replace
(
"-"
,
"."
);
detail
.
setEndTime
(
endDate
);
detail
.
setStartTime
(
startDate
);
String
remark
=
memberCoupon
.
getActiveDesc
();
detail
.
setRemark
(
couponAdapter
.
getDescribeText
(
remark
));
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_1
.
getCode
()))
{
detail
.
setAmountDesc
(
"满"
+
formatAmount
((
couponStateVo
.
getMinAmount
()
==
null
?
0
:
couponStateVo
.
getMinAmount
())
*
1.00
/
100
)
+
"元减"
+
formatAmount
((
couponStateVo
.
getOriginalPrice
()
==
null
?
0
:
couponStateVo
.
getOriginalPrice
())
*
1.00
/
100
)
+
"元"
);
}
else
if
(
Objects
.
equals
(
couponStateVo
.
getType
(),
CouponTypeEnum
.
TYPE_3
.
getCode
()))
{
detail
.
setAmountDesc
(
"满"
+
formatAmount
((
couponStateVo
.
getMinAmount
()
==
null
?
0
:
couponStateVo
.
getMinAmount
())
*
1.00
/
100
)
+
"元"
+
formatAmount
((
couponStateVo
.
getDiscount
()
==
null
?
0
:
couponStateVo
.
getDiscount
())
*
1.00
/
10
)
+
"折"
);
}
// 设置条形码
GetCouponBarCodeResponseVo
responseVo
=
this
.
getCouponBarCode
(
couponStateVo
.
getCouponCode
());
detail
.
setCouponBarCode
(
responseVo
.
getBase64Image
());
activityCouponBean
.
setDetail
(
detail
);
activityCouponBean
.
setActivityCode
(
memberCoupon
.
getActivityCode
());
activityCouponBean
.
setCouponType
(
couponStateVo
.
getType
());
activityCouponBean
.
setDateDescribe
(
couponAdapter
.
getDateDescribe
(
memberCoupon
.
getStatus
(),
memberCoupon
.
getStartTime
(),
memberCoupon
.
getEndTime
()));
// 券状态 0 可用 1 不可用 2 限制可用
if
(
Objects
.
equals
(
activityCouponBean
.
getCouponCode
(),
couponCode
))
{
activityCouponBean
.
setSelected
(
YesOrNoEnum
.
YES
.
getCode
());
}
else
{
activityCouponBean
.
setSelected
(
YesOrNoEnum
.
NO
.
getCode
());
}
if
(
hasGoodsCoupon
)
{
disableCoupons
.
add
(
activityCouponBean
);
disableCouponNum
=
disableCouponNum
+
1
;
}
else
{
if
(
Objects
.
equals
(
couponStateVo
.
getState
(),
CouponStateEnum
.
STATE_1
.
getCode
()))
{
disableCoupons
.
add
(
activityCouponBean
);
disableCouponNum
=
disableCouponNum
+
1
;
}
else
{
usableCoupons
.
add
(
activityCouponBean
);
usableCouponNum
=
usableCouponNum
+
1
;
}
}
}
}
availableCouponResponseVo
.
setCouponNum
(
disableCouponNum
+
usableCouponNum
);
availableCouponResponseVo
.
setDisableCouponNum
(
disableCouponNum
);
availableCouponResponseVo
.
setUsableCouponNum
(
usableCouponNum
);
availableCouponResponseVo
.
setDisableCoupons
(
disableCoupons
);
availableCouponResponseVo
.
setUsableCoupons
(
usableCoupons
);
return
availableCouponResponseVo
;
}
private
ActivityClassifyCouponBean
returnAvailableCoupons
(
String
couponCode
,
ActivityClassifyCouponBean
availableCouponResponseVo
,
Map
<
String
,
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
>
memberCouponMap
,
// List<CouponStateVo> couponStateList,
List
<
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
>
memberCoupons
)
{
int
disableCouponNum
=
0
;
int
usableCouponNum
=
0
;
// 可用优惠券信息
List
<
ActivityCouponBean
>
usableCoupons
=
Lists
.
newArrayList
();
for
(
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
couponStateVo
:
memberCoupons
)
{
// // 过滤0得代金券
// if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_1.getCode())
// && (couponStateVo.getOriginalPrice() == null
// || couponStateVo.getOriginalPrice() == 0)) {
// continue;
// }
//
// // 过滤折扣券为0折得
// if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_3.getCode())
// && (couponStateVo.getDiscount() == null
// || couponStateVo.getDiscount() == 0)) {
// continue;
// }
ActivityCouponBean
activityCouponBean
=
new
ActivityCouponBean
();
activityCouponBean
.
setCouponCode
(
couponStateVo
.
getCouponCode
());
GetMemberCouponListResponseDto
.
Result
.
MemberCoupon
memberCoupon
=
memberCouponMap
.
get
(
couponStateVo
.
getCouponCode
());
if
(
memberCoupon
!=
null
)
{
activityCouponBean
.
setCouponName
(
memberCoupon
.
getCouponName
());
activityCouponBean
.
setEndTime
(
memberCoupon
.
getEndTime
());
if
(
Objects
.
equals
(
couponStateVo
.
getCouponType
(),
CouponTypeEnum
.
TYPE_1
.
getCode
()))
{
activityCouponBean
.
setDiscountAmount
(
couponStateVo
.
getOriginalPrice
()
+
""
);
}
activityCouponBean
.
setThresholdDesc
(
"满"
+
formatAmount
((
couponStateVo
.
getMinAmount
()
==
null
?
0
:
couponStateVo
.
getMinAmount
())
*
1.00
/
100
)
+
"元可用"
);
activityCouponBean
.
setActivityDesc
(
"不与其他活动优惠同时享受。"
);
activityCouponBean
.
setUnusedReason
(
couponStateVo
.
getRemark
());
// 详情
GetMemberCouponListResponseVo
.
MemberCouponDetail
detail
=
new
GetMemberCouponListResponseVo
.
MemberCouponDetail
();
detail
.
setActivityName
(
memberCoupon
.
getCouponName
());
String
startDate
=
DateUtil
.
convert2String
(
DateUtil
.
convert2Date
(
memberCoupon
.
getStartTime
(),
DateUtil
.
FORMAT_yyyyMMdd_date
),
DateUtil
.
FORMAT_yyyyMMdd_date
).
replace
(
"-"
,
"."
);
String
endDate
=
DateUtil
.
convert2String
(
DateUtil
.
convert2Date
(
memberCoupon
.
getEndTime
(),
DateUtil
.
FORMAT_yyyyMMdd_date
),
DateUtil
.
FORMAT_yyyyMMdd_date
).
replace
(
"-"
,
"."
);
detail
.
setEndTime
(
endDate
);
detail
.
setStartTime
(
startDate
);
String
remark
=
memberCoupon
.
getActiveDesc
();
detail
.
setRemark
(
couponAdapter
.
getDescribeText
(
remark
));
if
(
Objects
.
equals
(
couponStateVo
.
getCouponType
(),
CouponTypeEnum
.
TYPE_1
.
getCode
()))
{
detail
.
setAmountDesc
(
"满"
+
formatAmount
((
couponStateVo
.
getMinAmount
()
==
null
?
0
:
couponStateVo
.
getMinAmount
())
*
1.00
/
100
)
+
"元减"
+
formatAmount
((
couponStateVo
.
getOriginalPrice
()
==
null
?
0
:
couponStateVo
.
getOriginalPrice
())
*
1.00
/
100
)
+
"元"
);
}
// 设置条形码
GetCouponBarCodeResponseVo
responseVo
=
this
.
getCouponBarCode
(
couponStateVo
.
getCouponCode
());
detail
.
setCouponBarCode
(
responseVo
.
getBase64Image
());
activityCouponBean
.
setDetail
(
detail
);
activityCouponBean
.
setActivityCode
(
memberCoupon
.
getActivityCode
());
activityCouponBean
.
setCouponType
(
couponStateVo
.
getCouponType
());
activityCouponBean
.
setDateDescribe
(
couponAdapter
.
getDateDescribe
(
memberCoupon
.
getStatus
(),
memberCoupon
.
getStartTime
(),
memberCoupon
.
getEndTime
()));
// 券状态 0 可用 1 不可用 2 限制可用
if
(
Objects
.
equals
(
activityCouponBean
.
getCouponCode
(),
couponCode
))
{
activityCouponBean
.
setSelected
(
YesOrNoEnum
.
YES
.
getCode
());
}
else
{
activityCouponBean
.
setSelected
(
YesOrNoEnum
.
NO
.
getCode
());
}
usableCoupons
.
add
(
activityCouponBean
);
usableCouponNum
=
usableCouponNum
+
1
;
}
}
availableCouponResponseVo
.
setCouponNum
(
disableCouponNum
+
usableCouponNum
);
availableCouponResponseVo
.
setDisableCouponNum
(
disableCouponNum
);
availableCouponResponseVo
.
setUsableCouponNum
(
usableCouponNum
);
availableCouponResponseVo
.
setDisableCoupons
(
null
);
availableCouponResponseVo
.
setUsableCoupons
(
usableCoupons
);
return
availableCouponResponseVo
;
}
public
GetCouponBarCodeResponseVo
getCouponBarCode
(
String
couponCode
)
{
byte
[]
bytes
=
BarcodeUtil
.
generateBarCode128
(
couponCode
,
6
D
,
null
,
true
,
false
);
String
base64Image
=
Base64
.
getEncoder
().
encodeToString
(
bytes
);
String
base64Prefix
=
"data:image/png;base64,"
;
GetCouponBarCodeResponseVo
getCouponBarCodeResponseVo
=
new
GetCouponBarCodeResponseVo
();
getCouponBarCodeResponseVo
.
setBase64Image
(
base64Prefix
+
base64Image
);
return
getCouponBarCodeResponseVo
;
}
private
static
Object
formatAmount
(
Double
amount
)
{
if
(
amount
%
(
amount
.
intValue
())
==
0.0
)
{
return
amount
.
intValue
();
}
else
{
return
amount
;
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponAvailableReq.java
0 → 100644
View file @
9810b8b1
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
entity
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableReq
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
CouponAvailableReq
{
//渠道id
private
String
providerId
;
//商户号
private
String
merchantId
;
private
String
city
;
private
String
storeId
;
//组织机构id列表(校验渠道限制)
private
List
<
String
>
channelIdList
;
//组织机构code列表(校验渠道限制)
private
List
<
String
>
channelCodeList
;
//券码列表
private
List
<
String
>
couponCodes
;
private
Integer
totalAmount
;
//核销渠道 枚举: mocoffee_wx : 麦咖啡微信小程序 mocoffee_zfb : 麦咖啡支付宝小程序
private
String
redeemChannel
;
//购物车商品列表
private
List
<
CouponProductVo
>
productList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponAvailableResp.java
0 → 100644
View file @
9810b8b1
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
entity
;
import
com.freemud.card.sdk.vo.coupon.CouponStateVo
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableResp
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
CouponAvailableResp
{
private
Integer
result
;
private
String
msg
;
private
List
<
CouponStateVo
>
couponStateList
;
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/CouponProductVo.java
0 → 100644
View file @
9810b8b1
package
cn
.
freemud
.
service
.
impl
.
mcoffee
.
entity
;
import
lombok.Data
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponProductVo
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:14
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
CouponProductVo
{
private
String
keyProductCode
;
private
String
productId
;
private
Integer
amount
;
private
Integer
quantity
;
private
String
categoryCode
;
}
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponClient.java
View file @
9810b8b1
...
...
@@ -13,6 +13,8 @@
package
cn
.
freemud
.
service
.
thirdparty
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq
;
import
cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -53,5 +55,11 @@ public interface CouponClient {
@PostMapping
(
"/coupon/verification/notice"
)
CouponBaseResponseDto
verifyNotice
(
VerifyNoticeRequestDto
verifyNoticeRequestDto
);
/**
* 麦咖啡校验券是否可用
*/
@PostMapping
(
"/mccafe/getCouponsAvailable"
)
CouponAvailableResp
getCouponsAvailable
(
CouponAvailableReq
req
);
}
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