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
4b9c562d
Commit
4b9c562d
authored
Apr 29, 2021
by
zhiheng.zhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
购物车加车算价
parent
9ef80bef
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
132 additions
and
31 deletions
+132
-31
order-application-service/src/main/java/cn/freemud/constant/ResponseCodeConstant.java
+1
-0
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+1
-0
order-application-service/src/main/java/cn/freemud/service/impl/CheckMallOrder.java
+130
-31
No files found.
order-application-service/src/main/java/cn/freemud/constant/ResponseCodeConstant.java
View file @
4b9c562d
...
...
@@ -10,6 +10,7 @@ public class ResponseCodeConstant {
public
final
static
String
RESPONSE_SUCCESS_STR
=
"100"
;
public
final
static
String
COCO_RESPONSE_COUPON_ERR_STR
=
"49000"
;
public
final
static
String
USER_HAVE_NO_COUPON
=
"44039"
;
public
final
static
String
RESPONSE_SUCCESS_OK
=
"ok"
;
public
final
static
Integer
RESPONSE_SUCCESS_1
=
1
;
...
...
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
4b9c562d
...
...
@@ -234,6 +234,7 @@ public enum ResponseResult {
* coco券验证失败
*/
COCO_COUPON_VALIDATOR_FAIL
(
"70000"
,
"优惠券验证错误"
),
SHOPPING_CART_USER_HAVE_NO_COUPON
(
"46019"
,
"使用的商品券已失效,请重新下单"
),
;
...
...
order-application-service/src/main/java/cn/freemud/service/impl/CheckMallOrder.java
View file @
4b9c562d
...
...
@@ -13,14 +13,17 @@
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.base.util.JsonUtil
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.StoreConstant
;
import
cn.freemud.entities.dto.GetCouponDetailResponseDto
;
import
cn.freemud.entities.dto.StoreDeliveryInfoDto
;
import
cn.freemud.entities.dto.UserDeliveryInfoDto
;
import
cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto
;
import
cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.entities.vo.GetMemberCouponRequestVo
;
import
cn.freemud.entities.vo.ShoppingCartInfoRequestVo
;
import
cn.freemud.entities.vo.delivery.DeliveryAmountVo
;
import
cn.freemud.enums.BusinessTypeEnum
;
...
...
@@ -28,13 +31,17 @@ import cn.freemud.enums.CouponFlag;
import
cn.freemud.enums.OrderChannelType
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.delivery.ThirdDeliveryServiceImpl
;
import
cn.freemud.service.thirdparty.ShoppingCartClient
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -43,9 +50,16 @@ import org.springframework.stereotype.Component;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDate
;
import
java.time.LocalTime
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
@Component
@Slf4j
public
class
CheckMallOrder
{
@Autowired
...
...
@@ -56,6 +70,8 @@ public class CheckMallOrder {
private
AssortmentCustomerInfoManager
customerInfoManager
;
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
CouponService
couponService
;
/**
* 下单会员相关校验
...
...
@@ -130,7 +146,7 @@ public class CheckMallOrder {
* 下单配送相关校验
*/
public
void
checkOrderByDelivery
(
CreateOrderVo
createOrderVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
Long
totalAmount
,
String
trackingNo
)
{
StoreResponse
.
BizVO
storeResponseDto
,
Long
totalAmount
,
String
trackingNo
)
{
// StoreDeliveryInfoDto storeDeliveryInfoDto = this.getStoreDeliveryInfo(storeResponseDto, userLoginInfoDto.getWxAppId());
// //订单金额小于起送费提示
// if (storeDeliveryInfoDto.getDeliveryLimitAmount() > totalAmount) {
...
...
@@ -155,14 +171,83 @@ public class CheckMallOrder {
.
buyType
(
createOrderVo
.
getBuyType
())
.
province
(
createOrderVo
.
getProvince
())
.
build
();
// 如果使用优惠券或者商品券,校验 couponCode
if
(
StringUtils
.
isNotBlank
(
createOrderVo
.
getCouponCode
()))
{
// 校验couponCode
GetCouponDetailResponseDto
getCouponDetailResponseDto
=
couponService
.
getMemberCoupon
(
GetMemberCouponRequestVo
.
builder
()
.
partnerId
(
createOrderVo
.
getPartnerId
())
.
couponCode
(
createOrderVo
.
getCouponCode
()).
build
());
if
(
Objects
.
equals
(
getCouponDetailResponseDto
,
null
)
||
CollectionUtils
.
isEmpty
(
getCouponDetailResponseDto
.
getDetails
())
||
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
()
==
null
||
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
().
getActiveCode
()
==
null
)
{
if
((
CollectionUtils
.
isNotEmpty
(
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActiveRestrictionVOS
())
&&
CollectionUtils
.
isEmpty
(
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActiveRestrictionVOS
().
stream
()
.
filter
(
a
->
Objects
.
equals
(
a
.
getStoreIdPartner
(),
createOrderVo
.
getShopId
())).
collect
(
Collectors
.
toList
()))
))
{
throw
new
ServiceException
(
ResponseResult
.
COUPON_SHOP_NOTSUPPORT
);
}
else
{
throw
new
ServiceException
(
ResponseResult
.
COUPON_GETINFO_INVAILD
);
}
}
List
<
GetCouponDetailResponseDto
.
ActiveRedeemTimeInterval
>
activeRedeemTimeIntervalList
=
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActiveRedeemTimeIntervalList
();
checkCouonRedeemTime
(
activeRedeemTimeIntervalList
);
String
activeCode
=
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
().
getActiveCode
();
// 校验点餐方式,查询购物车接口内部已校验
shoppingCartInfoRequestVo
.
setCouponCode
(
createOrderVo
.
getCouponCode
());
// 活动code
shoppingCartInfoRequestVo
.
setActivityCode
(
activeCode
);
shoppingCartInfoRequestVo
.
setCardCode
(
createOrderVo
.
getCardCode
());
}
// 如果批量使用优惠券或者商品券,校验 couponCode
List
<
ShoppingCartInfoRequestVo
.
couponCode
>
couponCodes
=
new
ArrayList
();
if
(
createOrderVo
.
getCouponCodes
()
!=
null
&&
!
createOrderVo
.
getCouponCodes
().
isEmpty
())
{
createOrderVo
.
getCouponCodes
().
forEach
(
couponCode
->{
// 校验couponCode
GetCouponDetailResponseDto
getCouponDetailResponseDto
=
couponService
.
getMemberCoupon
(
GetMemberCouponRequestVo
.
builder
()
.
partnerId
(
createOrderVo
.
getPartnerId
())
.
couponCode
(
couponCode
.
getCouponCode
()).
build
());
if
(
Objects
.
equals
(
getCouponDetailResponseDto
,
null
)
||
CollectionUtils
.
isEmpty
(
getCouponDetailResponseDto
.
getDetails
())
||
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
()
==
null
||
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
().
getActiveCode
()
==
null
)
{
if
((
CollectionUtils
.
isNotEmpty
(
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActiveRestrictionVOS
())
&&
CollectionUtils
.
isEmpty
(
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActiveRestrictionVOS
().
stream
()
.
filter
(
a
->
Objects
.
equals
(
a
.
getStoreIdPartner
(),
createOrderVo
.
getShopId
())).
collect
(
Collectors
.
toList
()))
))
{
throw
new
ServiceException
(
ResponseResult
.
COUPON_SHOP_NOTSUPPORT
);
}
else
{
throw
new
ServiceException
(
ResponseResult
.
COUPON_GETINFO_INVAILD
);
}
}
String
activeCode
=
getCouponDetailResponseDto
.
getDetails
().
get
(
0
).
getActive
().
getActiveCode
();
ShoppingCartInfoRequestVo
.
couponCode
coupon
=
new
ShoppingCartInfoRequestVo
.
couponCode
();
coupon
.
setCouponCode
(
couponCode
.
getCouponCode
());
coupon
.
setActivityCode
(
activeCode
);
coupon
.
setIndex
(
couponCode
.
getIndex
());
couponCodes
.
add
(
coupon
);
});
if
(
StringUtils
.
isEmpty
(
shoppingCartInfoRequestVo
.
getCardCode
())){
shoppingCartInfoRequestVo
.
setCardCode
(
createOrderVo
.
getCardCode
());
}
}
shoppingCartInfoRequestVo
.
setCouponCodes
(
couponCodes
);
// 通过购物车获取优惠信息
GetShoppingCartGoodsApportionDto
requestDto
=
new
GetShoppingCartGoodsApportionDto
();
// 设置用户选择的买一赠一商品信息
shoppingCartInfoRequestVo
.
setChooseGoods
(
JSONArray
.
parseArray
(
JSONObject
.
toJSONString
(
createOrderVo
.
getChooseGoods
()),
ShoppingCartInfoRequestVo
.
ChooseGood
.
class
));
requestDto
.
setShoppingCartInfoRequestVo
(
shoppingCartInfoRequestVo
);
//加价购商品 校验放购物车校验
requestDto
.
setPremiumExchangeActivity
(
createOrderVo
.
getPremiumExchangeActivity
());
cn
.
freemud
.
base
.
entity
.
BaseResponse
<
ShoppingCartGoodsDto
>
apportionResponse
=
shoppingCartClient
.
getShoppingCartGoodsApportionNew
(
requestDto
);
if
(
ObjectUtils
.
equals
(
ResponseCodeConstant
.
USER_HAVE_NO_COUPON
,
apportionResponse
.
getCode
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_USER_HAVE_NO_COUPON
,
apportionResponse
.
getMessage
());
}
if
(!
ObjectUtils
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
apportionResponse
.
getCode
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_GETINFO_ERROR
);
ResponseResult
responseResult
=
ResponseResult
.
getResponseResult
(
apportionResponse
.
getCode
());
throw
new
ServiceException
(
responseResult
!=
null
?
responseResult
:
ResponseResult
.
SHOPPING_CART_GETINFO_ERROR
);
}
if
(
apportionResponse
.
getResult
()
==
null
||
CollectionUtils
.
isEmpty
(
apportionResponse
.
getResult
().
getProducts
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_GETINFO_INVAILD
);
...
...
@@ -174,35 +259,6 @@ public class CheckMallOrder {
return
shoppingCartGoodsDto
;
}
/**
* 获取门店配送信息
*/
public
StoreDeliveryInfoDto
getStoreDeliveryInfo
(
StoreResponse
.
BizVO
storeResponseDto
,
String
wxAppid
)
{
StoreDeliveryInfoDto
storeDeliveryInfoDto
=
new
StoreDeliveryInfoDto
();
storeDeliveryInfoDto
.
setPartnerId
(
storeResponseDto
.
getPartnerId
());
storeDeliveryInfoDto
.
setStoreId
(
storeResponseDto
.
getStoreCode
());
storeDeliveryInfoDto
.
setStoreName
(
storeResponseDto
.
getStoreName
());
storeDeliveryInfoDto
.
setDeliveryLimitAmount
(
0L
);
storeDeliveryInfoDto
.
setDeliveryAmount
(
0L
);
storeDeliveryInfoDto
.
setDefaultDeliveryRange
(
0L
);
storeDeliveryInfoDto
.
setAddRangeAmount
(
0L
);
storeDeliveryInfoDto
.
setAddRangeCount
(
0L
);
storeDeliveryInfoDto
.
setDeliveryHoursDay
(
storeResponseDto
.
getDeliveryHoursDay
());
storeDeliveryInfoDto
.
setLongitude
(
storeResponseDto
.
getLongitude
());
storeDeliveryInfoDto
.
setLatitude
(
storeResponseDto
.
getLatitude
());
storeDeliveryInfoDto
.
setScopeConfig
(
storeResponseDto
.
getScopeConfig
());
if
(
StringUtils
.
isNotEmpty
(
storeResponseDto
.
getDeliveryRadius
()))
{
storeDeliveryInfoDto
.
setDeliveryRadius
(
Integer
.
valueOf
(
storeResponseDto
.
getDeliveryRadius
()));
}
else
{
storeDeliveryInfoDto
.
setDeliveryRadius
(
0
);
}
storeDeliveryInfoDto
.
setDeliveryType
(
"third"
);
storeDeliveryInfoDto
.
setPushOrderTime
(
0
);
return
storeDeliveryInfoDto
;
}
/**
* 校验收货地址是否可配送
*/
...
...
@@ -232,4 +288,47 @@ public class CheckMallOrder {
createOrderVo
.
setUserDeliveryInfoDto
(
userDeliveryInfoDto
);
}
private
void
checkCouonRedeemTime
(
List
<
GetCouponDetailResponseDto
.
ActiveRedeemTimeInterval
>
activeRedeemTimeIntervalList
)
{
boolean
verificationPassed
=
false
;
if
(
CollectionUtils
.
isNotEmpty
(
activeRedeemTimeIntervalList
)){
for
(
GetCouponDetailResponseDto
.
ActiveRedeemTimeInterval
dateLimit
:
activeRedeemTimeIntervalList
){
boolean
dayCheck
=
true
;
String
weekday
=
dateLimit
.
getWeekday
();
// 日期限制 0011100 周日开始,0表示不可用
if
(
StringUtils
.
isNotBlank
(
weekday
)){
// 存在校验周几
char
[]
chars
=
weekday
.
toCharArray
();
int
dayOfWeek
=
LocalDate
.
now
().
getDayOfWeek
().
getValue
();
// 从周一开始
if
(
dayOfWeek
==
7
){
dayOfWeek
=
0
;
}
if
(
Integer
.
parseInt
(
String
.
valueOf
(
chars
[
dayOfWeek
]))
==
0
){
//限制
dayCheck
=
false
;
}
}
boolean
timeCheck
=
true
;
String
begintime
=
dateLimit
.
getBegintime
();
// 开始时间 00:00:00
String
endtime
=
dateLimit
.
getEndtime
();
// 结束时间 12:59:59
if
(
StringUtils
.
isNotBlank
(
begintime
)
&&
StringUtils
.
isNotBlank
(
endtime
)){
// 存在校验时段
String
[]
beginTimeArr
=
begintime
.
split
(
":"
);
String
[]
endTimeArr
=
endtime
.
split
(
":"
);
LocalTime
beginLocalTime
=
LocalTime
.
of
(
Integer
.
valueOf
(
beginTimeArr
[
0
]),
Integer
.
valueOf
(
beginTimeArr
[
1
]),
Integer
.
valueOf
(
beginTimeArr
[
2
]));
LocalTime
endLocalTime
=
LocalTime
.
of
(
Integer
.
valueOf
(
endTimeArr
[
0
]),
Integer
.
valueOf
(
endTimeArr
[
1
]),
Integer
.
valueOf
(
endTimeArr
[
2
]));
LocalTime
now
=
LocalTime
.
now
();
if
(
now
.
isBefore
(
beginLocalTime
)
||
now
.
isAfter
(
endLocalTime
)){
timeCheck
=
false
;
}
}
if
(
dayCheck
&&
timeCheck
){
verificationPassed
=
true
;
break
;
}
}
}
else
{
verificationPassed
=
true
;
}
if
(!
verificationPassed
){
throw
new
ServiceException
(
ResponseResult
.
COUPON_DATETIME_INVAILD
);
}
}
}
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