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
8112b0f1
Commit
8112b0f1
authored
Dec 10, 2021
by
周晓航
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature_夜间配送ID1040499_zxh20211208' into qa
parents
0746b403
9bbd1877
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
294 additions
and
37 deletions
+294
-37
shopping-cart-application-service/src/main/java/cn/freemud/entities/ExtraDeliveryDto.java
+44
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/DeliveryInfoDTO.java
+13
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/DeliveryInfoExpandFieldDTO.java
+20
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/NightDeliveryuInfo.java
+42
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/DeliveryDto.java
+43
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartGoodsResponseVo.java
+6
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/DeliveryService.java
+57
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/impl/FixDeliveryServiceImpl.java
+22
-17
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/impl/GradDeliveryServiceImpl.java
+18
-20
shopping-cart-application-service/src/main/java/cn/freemud/utils/DateTimeUtil.java
+29
-0
No files found.
shopping-cart-application-service/src/main/java/cn/freemud/entities/ExtraDeliveryDto.java
0 → 100644
View file @
8112b0f1
package
cn
.
freemud
.
entities
;
import
lombok.Data
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/8 下午5:08
* @description :
*/
@Data
public
class
ExtraDeliveryDto
{
/**
* 原有配送费类型
*/
public
static
int
TYPE_DEFAULT
=
-
1
;
/**
* 晚间时段 附加配送费类型
*/
public
static
int
TYPE_EXTRA_NIGHT
=
1
;
/**
* 早间时段 附加配送费类型
*/
public
static
int
TYPE_EXTRA_MORNING
=
0
;
/**
* 费用类型
*/
private
int
type
;
/**
* 费用
*/
private
Long
deliveryAmount
;
private
ExtraDeliveryDto
()
{
}
public
ExtraDeliveryDto
(
int
type
,
Long
deliveryAmount
)
{
this
.
type
=
type
;
this
.
deliveryAmount
=
deliveryAmount
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/DeliveryInfoDTO.java
View file @
8112b0f1
...
...
@@ -71,4 +71,17 @@ public class DeliveryInfoDTO {
*/
private
Integer
scopeConfig
;
/**
* 门店计算好的 最终配送费价格, 包含阶梯算价之后 (单位分)
*/
private
Integer
finalDeliveryAmount
;
/**
* 额外拓展属性 json
* @see cn.freemud.entities.dto.console.DeliveryInfoExpandFieldDTO
*/
private
String
expandFields
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/DeliveryInfoExpandFieldDTO.java
0 → 100644
View file @
8112b0f1
package
cn
.
freemud
.
entities
.
dto
.
console
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/10 上午11:04
* @description :
*/
@Data
public
class
DeliveryInfoExpandFieldDTO
{
/**
* 夜间 早间 额外配送费配置
*/
private
List
<
NightDeliveryuInfo
>
nightDeliveryInfo
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/console/NightDeliveryuInfo.java
0 → 100644
View file @
8112b0f1
package
cn
.
freemud
.
entities
.
dto
.
console
;
import
lombok.Data
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/10 上午11:05
* @description :
*/
@Data
public
class
NightDeliveryuInfo
{
public
static
int
COMMON_STATUS_CLOSE
=
0
;
public
static
int
COMMON_STATUS_OPEN
=
1
;
/**
* 类型 0早间 1晚间
*/
private
int
type
;
/**
* 开始时间
*/
private
String
startTime
;
/**
* 结束时间
*/
private
String
endTime
;
/**
* 是否开启 1开启 0关闭
*/
private
int
status
;
/**
* 加的价格
*/
private
Long
price
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/DeliveryDto.java
0 → 100644
View file @
8112b0f1
package
cn
.
freemud
.
entities
.
vo
;
import
cn.freemud.entities.ExtraDeliveryDto
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/8 下午5:03
* @description :
*/
@Data
public
class
DeliveryDto
{
/**
* 总配送费
*/
public
Long
deliveryAmount
;
/**
* 配送费为零的原因:0:正常,1:超出配送范围
*/
public
Integer
deliveryFeeZeroReason
;
/**
* 附加配送费详细数据 上面的金额 已经加上 这里的金额了
*/
public
List
<
ExtraDeliveryDto
>
deliveryAmountList
;
private
DeliveryDto
()
{
}
public
DeliveryDto
(
Long
deliveryAmount
,
Integer
deliveryFeeZeroReason
,
List
<
ExtraDeliveryDto
>
deliveryAmountList
)
{
this
.
deliveryAmount
=
deliveryAmount
;
this
.
deliveryFeeZeroReason
=
deliveryFeeZeroReason
;
Objects
.
requireNonNull
(
deliveryAmountList
);
this
.
deliveryAmountList
=
deliveryAmountList
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartGoodsResponseVo.java
View file @
8112b0f1
...
...
@@ -12,16 +12,22 @@
*/
package
cn
.
freemud
.
entities
.
vo
;
import
cn.freemud.entities.ExtraDeliveryDto
;
import
cn.freemud.entities.dto.calculate.Discount
;
import
cn.freemud.entities.dto.calculate.Goods
;
import
com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates
;
import
lombok.Builder
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
public
class
ShoppingCartGoodsResponseVo
extends
ShoppingCartGoodsBaseResponseVo
{
/**
* 配送费的清单 包含 普通配送费 额外夜间配送费 额外白天配送费 下面的 deliveryAmount 是总的配送费
*/
List
<
ExtraDeliveryDto
>
deliveryAmountList
=
new
ArrayList
<>();
/**
* 商品额外的属性
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/DeliveryService.java
View file @
8112b0f1
...
...
@@ -13,12 +13,28 @@
package
cn
.
freemud
.
service
.
delivery
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.entities.ExtraDeliveryDto
;
import
cn.freemud.entities.dto.console.DeliveryInfoExpandFieldDTO
;
import
cn.freemud.entities.dto.console.NightDeliveryuInfo
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.utils.DateTimeUtil
;
import
com.alibaba.fastjson.JSON
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
public
interface
DeliveryService
{
/**
* 计算运费
*
* @param receiveId
* @param partnerId
* @param storeId
...
...
@@ -28,4 +44,45 @@ public interface DeliveryService {
Long
calculateDeliveryAmount
(
String
receiveId
,
String
partnerId
,
String
storeId
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
);
Long
calculateDeliveryAmount
(
String
receiveId
,
String
partnerId
,
String
storeId
);
/**
* 处理 额外配送费逻辑
*
* @param amount 原始配送费价格
* @param expandFields 门店反馈的额外配送费配置
*/
default
List
<
ExtraDeliveryDto
>
nightDeliveryAmountHandle
(
long
amount
,
String
expandFields
)
{
List
<
ExtraDeliveryDto
>
list
=
new
ArrayList
<>();
if
(
amount
>
0
)
{
ExtraDeliveryDto
defaultAmount
=
new
ExtraDeliveryDto
(
ExtraDeliveryDto
.
TYPE_DEFAULT
,
amount
);
list
.
add
(
defaultAmount
);
}
if
(
StringUtils
.
isNotBlank
(
expandFields
))
{
DeliveryInfoExpandFieldDTO
expandField
=
JSON
.
parseObject
(
expandFields
,
DeliveryInfoExpandFieldDTO
.
class
);
if
(
Objects
.
nonNull
(
expandField
)
&&
CollectionUtils
.
isNotEmpty
(
expandField
.
getNightDeliveryInfo
()))
{
for
(
NightDeliveryuInfo
info
:
expandField
.
getNightDeliveryInfo
())
{
if
(
info
.
getStatus
()
==
NightDeliveryuInfo
.
COMMON_STATUS_OPEN
)
{
// 当前时间在区间内
try
{
Date
nowTime
=
new
SimpleDateFormat
(
DateUtil
.
FORMAT_time
).
parse
(
DateTimeUtil
.
getCurrentTimeStr
());
Date
startTime
=
new
SimpleDateFormat
(
DateUtil
.
FORMAT_time
).
parse
(
info
.
getStartTime
());
Date
endTime
=
new
SimpleDateFormat
(
DateUtil
.
FORMAT_time
).
parse
(
info
.
getEndTime
());
if
(
DateTimeUtil
.
isEffectiveDate
(
nowTime
,
startTime
,
endTime
))
{
ExtraDeliveryDto
extraDeliveryDto
=
new
ExtraDeliveryDto
(
info
.
getType
(),
amount
);
list
.
add
(
extraDeliveryDto
);
// 金额 增加
amount
+=
info
.
getPrice
();
}
}
catch
(
ParseException
e
)
{
// 报错表示 时间格式设置错误, 默认当做不计算
e
.
printStackTrace
();
}
}
}
}
}
return
list
;
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/impl/FixDeliveryServiceImpl.java
View file @
8112b0f1
...
...
@@ -13,24 +13,21 @@
package
cn
.
freemud
.
service
.
delivery
.
impl
;
import
cn.freemud.entities.ExtraDeliveryDto
;
import
cn.freemud.entities.dto.console.*
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
import
cn.freemud.enums.CreateOrderType
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.delivery.DeliveryService
;
import
cn.freemud.
utils.ResponseUtil
;
import
cn.freemud.
service.thirdparty.ConsoleApiClient
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest
;
import
com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse
;
import
com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Objects
;
@Service
(
"fixDeliveryService"
)
...
...
@@ -39,20 +36,28 @@ public class FixDeliveryServiceImpl extends AbstractDeliveryServiceImpl implemen
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
ConsoleApiClient
consoleApiClient
;
@Override
public
Long
calculateDeliveryAmount
(
String
receiveId
,
String
partnerId
,
String
storeId
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
)
{
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
// 获取门店信息,查询基础配送费用
StoreInfoRequest
storeInfoRequest
=
new
StoreInfoRequest
(
partnerId
,
storeId
,
null
);
StoreResponse
storeResponse
=
storeCenterService
.
getStoreInfo
(
storeInfoRequest
,
trackingNo
);
if
(
storeResponse
==
null
||
storeResponse
.
getBizVO
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_NOT_FOUND
);
// 获取门店信息,查询基础配送费用 移除sdk使用, 使用feign
GetStoreMixRequest
query
=
GetStoreMixRequest
.
builder
()
.
partnerId
(
partnerId
)
.
storeCode
(
storeId
)
.
query
(
QueryFlag
.
builder
().
queryDeliveryInfo
(
true
).
build
())
.
build
();
ConsoleResponseDTO
<
BizDTO
>
responseDto
=
consoleApiClient
.
getStoreMix
(
query
);
DeliveryInfoDTO
deliveryInfo
=
responseDto
.
getBizVO
().
getDeliveryInfo
();
// fisherman 处理 额外配送费
long
amount
=
Objects
.
isNull
(
deliveryInfo
.
getFinalDeliveryAmount
())
?
0L
:
deliveryInfo
.
getFinalDeliveryAmount
();
List
<
ExtraDeliveryDto
>
deliveryAmountList
=
super
.
nightDeliveryAmountHandle
(
amount
,
deliveryInfo
.
getExpandFields
());
if
(
Objects
.
nonNull
(
shoppingCartGoodsResponseVo
))
{
shoppingCartGoodsResponseVo
.
setDeliveryFeeZeroReason
(
0
);
shoppingCartGoodsResponseVo
.
setDeliveryAmountList
(
deliveryAmountList
);
}
shoppingCartGoodsResponseVo
.
setDeliveryFeeZeroReason
(
0
);
return
new
Double
(
storeResponse
.
getBizVO
().
getDeliveryPrice
()
*
100
).
longValue
();
return
amount
;
}
@Override
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/delivery/impl/GradDeliveryServiceImpl.java
View file @
8112b0f1
...
...
@@ -13,7 +13,9 @@
package
cn
.
freemud
.
service
.
delivery
.
impl
;
import
cn.freemud.entities.ExtraDeliveryDto
;
import
cn.freemud.entities.dto.console.*
;
import
cn.freemud.entities.vo.DeliveryDto
;
import
cn.freemud.entities.vo.QueryDeliveryDistanceRequest
;
import
cn.freemud.entities.vo.QueryDeliveryDistanceResponseVo
;
import
cn.freemud.entities.vo.ShoppingCartGoodsResponseVo
;
...
...
@@ -32,6 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
@Service
(
"gradDeliveryService"
)
public
class
GradDeliveryServiceImpl
extends
AbstractDeliveryServiceImpl
implements
DeliveryService
{
...
...
@@ -57,8 +62,13 @@ public class GradDeliveryServiceImpl extends AbstractDeliveryServiceImpl impleme
queryReceiveAddressResponse
.
getData
().
getLongitude
(),
partnerId
,
storeId
);
if
(
null
!=
shoppingCartGoodsResponseVo
)
shoppingCartGoodsResponseVo
.
setDeliveryFeeZeroReason
(
deliveryDataMsg
.
deliveryFeeZeroReason
);
return
deliveryDataMsg
.
deliveryAmount
;
if
(
Objects
.
nonNull
(
shoppingCartGoodsResponseVo
))
{
shoppingCartGoodsResponseVo
.
setDeliveryFeeZeroReason
(
deliveryDataMsg
.
getDeliveryFeeZeroReason
());
List
<
ExtraDeliveryDto
>
deliveryAmountList
=
deliveryDataMsg
.
getDeliveryAmountList
();
shoppingCartGoodsResponseVo
.
setDeliveryAmountList
(
deliveryAmountList
);
}
return
deliveryDataMsg
.
getDeliveryAmount
();
}
@Override
...
...
@@ -67,21 +77,6 @@ public class GradDeliveryServiceImpl extends AbstractDeliveryServiceImpl impleme
}
class
DeliveryDto
{
/**
* 配送费
*/
Long
deliveryAmount
;
/**
* 配送费为零的原因:0:正常,1:超出配送范围
*/
Integer
deliveryFeeZeroReason
;
DeliveryDto
(
Long
amount
,
Integer
reason
)
{
deliveryAmount
=
amount
;
deliveryFeeZeroReason
=
reason
;
}
}
/**
* 获取 配送费 及预计送达时间接口
* @param userLat 用户纬度
...
...
@@ -121,9 +116,12 @@ public class GradDeliveryServiceImpl extends AbstractDeliveryServiceImpl impleme
}
Long
amount
=
calcDeliveryAmount
(
storeInfo
,
deliveryInfo
,
userLong
,
userLat
);
if
(
amount
<
0
)
{
return
new
DeliveryDto
(
0L
,
1
);
return
new
DeliveryDto
(
0L
,
1
,
new
ArrayList
<>()
);
}
else
{
return
new
DeliveryDto
(
amount
,
0
);
// 标准配送费
// fisherman 处理 额外配送费
List
<
ExtraDeliveryDto
>
list
=
super
.
nightDeliveryAmountHandle
(
amount
,
deliveryInfo
.
getExpandFields
());
return
new
DeliveryDto
(
amount
,
0
,
list
);
}
}
...
...
@@ -205,7 +203,7 @@ public class GradDeliveryServiceImpl extends AbstractDeliveryServiceImpl impleme
if
(
new
BigDecimal
(
riderDistance
).
compareTo
(
new
BigDecimal
(
defaultDeliveryRange
))
<=
0
)
{
return
deliveryAmount
;
}
else
{
//计算实际配送费
//计算实际配送费
(总距离-基础配送距离)/每公里增加基数*每公里配送加钱 + 基础配送费
BigDecimal
extraAmount
=
(
new
BigDecimal
(
riderDistance
).
subtract
(
new
BigDecimal
(
defaultDeliveryRange
)))
.
divide
(
new
BigDecimal
(
addRangeCount
),
0
,
BigDecimal
.
ROUND_UP
)
.
multiply
(
new
BigDecimal
(
addRangeAmount
));
...
...
shopping-cart-application-service/src/main/java/cn/freemud/utils/DateTimeUtil.java
View file @
8112b0f1
...
...
@@ -6,6 +6,7 @@ import java.time.format.DateTimeParseException;
import
java.time.temporal.ChronoUnit
;
import
java.time.temporal.Temporal
;
import
java.time.temporal.TemporalAdjusters
;
import
java.util.Calendar
;
import
java.util.Date
;
/**
...
...
@@ -281,4 +282,32 @@ public class DateTimeUtil {
return
getCurrentLocalDate
().
plus
(
2
,
ChronoUnit
.
DECADES
).
format
(
DATE_FORMATTER
);
}
/**
* 是否在这个时间范围内
* @param nowTime
* @param startTime
* @param endTime
* @return
*/
public
static
boolean
isEffectiveDate
(
Date
nowTime
,
Date
startTime
,
Date
endTime
)
{
if
(
nowTime
.
getTime
()
==
startTime
.
getTime
()
||
nowTime
.
getTime
()
==
endTime
.
getTime
())
{
return
true
;
}
Calendar
date
=
Calendar
.
getInstance
();
date
.
setTime
(
nowTime
);
Calendar
begin
=
Calendar
.
getInstance
();
begin
.
setTime
(
startTime
);
Calendar
end
=
Calendar
.
getInstance
();
end
.
setTime
(
endTime
);
if
(
date
.
after
(
begin
)
&&
date
.
before
(
end
))
{
return
true
;
}
else
{
return
false
;
}
}
}
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