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
11887bfc
Commit
11887bfc
authored
Dec 24, 2021
by
周晓航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
半自动配置逻辑:
1.优先匹配是否活动日 2.工作日/双休日二选一,不会出现没有的情况(产品明确) Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent
d011e052
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
218 additions
and
4 deletions
+218
-4
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/DispatchConfig.java
+61
-0
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/ExpandFieldsDTO.java
+7
-0
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/PeakTimeConfig.java
+25
-0
order-management/src/main/java/cn/freemud/management/entities/dto/request/order/OrderManagerRequest.java
+5
-0
order-management/src/main/java/cn/freemud/management/service/handle/DeliveryHandle.java
+118
-4
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
+2
-0
No files found.
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/DispatchConfig.java
0 → 100644
View file @
11887bfc
package
cn
.
freemud
.
management
.
entities
.
dto
.
request
.
console
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/24 上午9:47
* @description : 派单配置
*/
@Data
public
class
DispatchConfig
{
/**
* 0工作日
*/
public
static
int
DATETYPE_ZERO
=
0
;
/**
* 1双休日
*/
public
static
int
DATETYPE_ONE
=
1
;
/**
* 2活动日
*/
public
static
int
DATETYPE_TWO
=
2
;
/**
* 日期类型(0工作日,1双休日,2活动日)
*/
private
int
dateType
;
/**
* 派单时间(分钟)
*/
private
Integer
dispatchTime
;
/**
* 2活动日 才有值
* 活动开始时间(yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
/**
* 2活动日 才有值
* 活动结束时间(yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
endTime
;
/**
* 高峰期派单配置(json)
*/
private
List
<
PeakTimeConfig
>
peakTimeConfigList
;
}
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/ExpandFieldsDTO.java
View file @
11887bfc
...
@@ -2,6 +2,8 @@ package cn.freemud.management.entities.dto.request.console;
...
@@ -2,6 +2,8 @@ package cn.freemud.management.entities.dto.request.console;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.List
;
/**
/**
* @author : xh.Z
* @author : xh.Z
* @email : fisherman0510@163.com
* @email : fisherman0510@163.com
...
@@ -68,4 +70,9 @@ public class ExpandFieldsDTO {
...
@@ -68,4 +70,9 @@ public class ExpandFieldsDTO {
*/
*/
private
String
dispatchType
;
private
String
dispatchType
;
/**
* 手动派单的半自动配置
*/
private
List
<
DispatchConfig
>
dispatchConfig
;
}
}
order-management/src/main/java/cn/freemud/management/entities/dto/request/console/PeakTimeConfig.java
0 → 100644
View file @
11887bfc
package
cn
.
freemud
.
management
.
entities
.
dto
.
request
.
console
;
import
lombok.Data
;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/24 上午9:48
* @description : 高峰期派单配置
*/
@Data
public
class
PeakTimeConfig
{
/**
* 时间格式 HH:mm:ss
*/
private
String
startTime
;
/**
* 时间格式 HH:mm:ss
*/
private
String
endTime
;
/**
* 派单时间
*/
private
Integer
dispatchTime
;
}
order-management/src/main/java/cn/freemud/management/entities/dto/request/order/OrderManagerRequest.java
View file @
11887bfc
...
@@ -68,4 +68,9 @@ public class OrderManagerRequest {
...
@@ -68,4 +68,9 @@ public class OrderManagerRequest {
* 内置传参使用
* 内置传参使用
*/
*/
private
String
dispatchType
;
private
String
dispatchType
;
/**
* 半自动派单时间 (分钟)
*/
private
Integer
semiAutoDispathTime
;
}
}
order-management/src/main/java/cn/freemud/management/service/handle/DeliveryHandle.java
View file @
11887bfc
package
cn
.
freemud
.
management
.
service
.
handle
;
package
cn
.
freemud
.
management
.
service
.
handle
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.management.adapter.DeliverySdkAdapter
;
import
cn.freemud.management.adapter.DeliverySdkAdapter
;
import
cn.freemud.management.entities.dto.request.console.BizDTO
;
import
cn.freemud.management.entities.dto.request.console.*
;
import
cn.freemud.management.entities.dto.request.console.BusinessInfoDTO
;
import
cn.freemud.management.entities.dto.request.console.ConsoleResponseDTO
;
import
cn.freemud.management.entities.dto.request.console.ExpandFieldsDTO
;
import
cn.freemud.management.entities.dto.request.delivery.DeliveryOrderHaltedRequest
;
import
cn.freemud.management.entities.dto.request.delivery.DeliveryOrderHaltedRequest
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.enums.DeliveryStatus
;
import
cn.freemud.management.enums.DeliveryStatus
;
...
@@ -24,13 +22,18 @@ import com.freemud.application.sdk.api.log.ApiLog;
...
@@ -24,13 +22,18 @@ import com.freemud.application.sdk.api.log.ApiLog;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
com.freemud.application.sdk.api.service.EmailAlertService
;
import
com.freemud.application.sdk.api.service.EmailAlertService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -201,6 +204,117 @@ public class DeliveryHandle {
...
@@ -201,6 +204,117 @@ public class DeliveryHandle {
return
true
;
return
true
;
}
}
/**
* 半自动派单 获取时间区间范围
* 对外暴露的方法
* @param dispatchConfig
* @return
*/
public
Integer
getSemiAutoDispathTime
(
List
<
DispatchConfig
>
dispatchConfig
)
{
Integer
rest
=
-
1
;
if
(
CollectionUtils
.
isNotEmpty
(
dispatchConfig
))
{
Date
currentDate
=
new
Date
();
Integer
semiAutoDispathTime
=
this
.
getSemiAutoDispathTimeHandle
(
currentDate
,
dispatchConfig
,
DispatchConfig
.
DATETYPE_TWO
);
if
(
semiAutoDispathTime
!=
null
)
{
return
semiAutoDispathTime
;
}
int
weekDay
=
DateUtil
.
getWeekDay
(
currentDate
);
// 是否命中 工作日
boolean
isWorkDay
=
weekDay
!=
6
&&
weekDay
!=
0
;
semiAutoDispathTime
=
this
.
getSemiAutoDispathTimeHandle
(
currentDate
,
dispatchConfig
,
(
isWorkDay
?
DispatchConfig
.
DATETYPE_ZERO
:
DispatchConfig
.
DATETYPE_ONE
));
if
(
semiAutoDispathTime
!=
null
)
{
return
semiAutoDispathTime
;
}
}
return
rest
;
}
/**
* 校验时间 是否命中范围
*
* @param currentDate
* @param startTimeStr 时间格式 HH:mm:ss
* @param endTimeStr 时间格式 HH:mm:ss
* @return
*/
private
Boolean
timeScoreVerify
(
Date
currentDate
,
String
startTimeStr
,
String
endTimeStr
)
{
if
(
StringUtils
.
isEmpty
(
startTimeStr
)
||
StringUtils
.
isEmpty
(
endTimeStr
))
{
return
Boolean
.
FALSE
;
}
String
formatTime
=
DateUtil
.
FORMAT_time
;
Date
nowTime
=
DateUtil
.
convert2Date
(
currentDate
,
formatTime
);
Date
startTime
=
DateUtil
.
convert2Date
(
startTimeStr
,
formatTime
);
Date
endTime
=
DateUtil
.
convert2Date
(
endTimeStr
,
formatTime
);
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
Boolean
.
TRUE
;
}
else
{
return
Boolean
.
FALSE
;
}
}
/**
* 获取配置
*
* @param currentDate
* @param dispatchConfig
* @param dateType
* @return null 表示没有配置
*/
private
Integer
getSemiAutoDispathTimeHandle
(
Date
currentDate
,
List
<
DispatchConfig
>
dispatchConfig
,
int
dateType
)
{
List
<
DispatchConfig
>
activityDayConfig
=
dispatchConfig
.
stream
().
filter
(
d
->
d
.
getDateType
()
==
dateType
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isNotEmpty
(
activityDayConfig
))
{
for
(
DispatchConfig
d
:
activityDayConfig
)
{
if
(
dateType
==
DispatchConfig
.
DATETYPE_TWO
)
{
// 并且不在 活动日内
boolean
isActivityDay
=
currentDate
.
after
(
d
.
getStartTime
())
&&
currentDate
.
before
(
d
.
getEndTime
());
if
(!
isActivityDay
)
{
return
null
;
}
}
Integer
peakTime
=
this
.
getPeakTime
(
currentDate
,
d
.
getPeakTimeConfigList
());
if
(
Objects
.
nonNull
(
peakTime
))
{
return
peakTime
;
}
// 在活动范围内, 没有命中高峰期
return
d
.
getDispatchTime
();
}
}
return
null
;
}
/**
* 返回是否有高峰配置 , 没有就返回 null
*
* @param currentDate
* @param peakTimeConfigList
* @return
*/
private
Integer
getPeakTime
(
Date
currentDate
,
List
<
PeakTimeConfig
>
peakTimeConfigList
)
{
if
(
CollectionUtils
.
isNotEmpty
(
peakTimeConfigList
))
{
for
(
PeakTimeConfig
peakTimeConfig
:
peakTimeConfigList
)
{
boolean
isHit
=
this
.
timeScoreVerify
(
currentDate
,
peakTimeConfig
.
getStartTime
(),
peakTimeConfig
.
getEndTime
());
if
(
isHit
)
{
return
peakTimeConfig
.
getDispatchTime
();
}
}
}
return
null
;
}
}
}
order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
View file @
11887bfc
...
@@ -108,6 +108,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
...
@@ -108,6 +108,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if
(
bizVO
!=
null
&&
bizVO
.
getBusinessInfo
()
!=
null
)
{
if
(
bizVO
!=
null
&&
bizVO
.
getBusinessInfo
()
!=
null
)
{
ExpandFieldsDTO
expandFields
=
bizVO
.
getBusinessInfo
().
getExpandFields
();
ExpandFieldsDTO
expandFields
=
bizVO
.
getBusinessInfo
().
getExpandFields
();
request
.
setDispatchType
(
expandFields
.
getDispatchType
());
request
.
setDispatchType
(
expandFields
.
getDispatchType
());
// fisherman 半自动派单时间获取
request
.
setSemiAutoDispathTime
(
deliveryHandle
.
getSemiAutoDispathTime
(
expandFields
.
getDispatchConfig
()));
}
}
}
}
// 订单接单
// 订单接单
...
...
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