Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gogirl-miniapp-backend
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
huluobin
gogirl-miniapp-backend
Commits
09a61ee5
Commit
09a61ee5
authored
Jun 30, 2020
by
huluobin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into 3.8
parents
36eab8ec
9928b9b3
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
159 additions
and
162 deletions
+159
-162
ScheduleManageService.java
...gogirl/application/order/serve/ScheduleManageService.java
+1
-1
ScheduleManageServiceImpl.java
...plication/order/serve/impl/ScheduleManageServiceImpl.java
+126
-151
CustomerServiceImpl.java
...l/application/user/customer/impl/CustomerServiceImpl.java
+7
-4
StoreTechnicianPeriod.java
...n/java/com/gogirl/shared/order/StoreTechnicianPeriod.java
+25
-6
No files found.
src/main/java/com/gogirl/application/order/serve/ScheduleManageService.java
View file @
09a61ee5
...
...
@@ -142,7 +142,7 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
IPage
<
LeisureScheduleServeResp
>
queryPageLeisureScheduleServe
(
LeisureScheduleServeQuery
query
);
/**
* 查询美甲师不可用时间段
* 查询美甲师
信息和美甲师
不可用时间段
*
* @param scheduledId 是否必传 否
* @param departmentId 店铺id
...
...
src/main/java/com/gogirl/application/order/serve/impl/ScheduleManageServiceImpl.java
View file @
09a61ee5
...
...
@@ -62,7 +62,6 @@ import java.time.ZoneOffset;
import
java.util.*
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.ForkJoinPool
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.stream.Collectors
;
import
static
com
.
gogirl
.
domain
.
order
.
serve
.
OrderServe
.
COMMENT_STATUS_NO
;
...
...
@@ -108,74 +107,65 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
String
scheduleDate
,
List
<
Integer
>
serveIdList
)
throws
ParseException
{
/
/1.查询美甲师排班表
/
*1.查询美甲师排班*/
List
<
StoreClassesTechnician
>
storeClassesTechnicianList
=
storeClassesTechnicianService
.
listClassesTechnician
(
scheduledId
,
departmentId
,
scheduleDate
);
//过滤不能做服务的美甲师
if
(
ListUtil
.
isNotEmpty
(
serveIdList
))
{
//美甲师能做哪些服务config查询
List
<
TechnicianServe
>
technicianServeList
=
technicianServeMapper
.
selectList
(
new
LambdaQueryWrapper
<
TechnicianServe
>().
in
(
TechnicianServe:
:
getServeId
,
serveIdList
));
//过滤不能做服务的美甲师
storeClassesTechnicianList
=
storeClassesTechnicianList
.
stream
()
.
filter
(
storeClassesTechnician
->
technicianServeList
.
stream
().
map
(
TechnicianServe:
:
getTechnicianId
).
collect
(
Collectors
.
toList
())
.
contains
(
storeClassesTechnician
.
getTechnicianManage
().
getId
()))
.
collect
(
Collectors
.
toList
());
storeClassesTechnicianList
=
storeClassesTechnicianList
.
stream
().
filter
(
storeClassesTechnician
->
technicianServeList
.
stream
().
map
(
TechnicianServe:
:
getTechnicianId
).
collect
(
Collectors
.
toList
()).
contains
(
storeClassesTechnician
.
getTechnicianManage
().
getId
())).
collect
(
Collectors
.
toList
());
}
List
<
StoreTechnicianPeriod
>
storeTechnicianPeriodList
=
new
ArrayList
<>();
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
//一天开始的时间
long
dayStartTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 00:00:00"
).
getTime
();
//一天结束的时间
long
dayEndTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 23:59:59"
).
getTime
();
//遍历美甲师排班 获取每个美甲师的不可用时间段
for
(
StoreClassesTechnician
storeClassesTechnician
:
storeClassesTechnicianList
)
{
//一天开始的时间
long
dayStartTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 00:00:00"
).
getTime
();
//一天结束的时间
long
dayEndTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 23:59:59"
).
getTime
();
/*2、获取各个边界时间*/
//上班开始时间str
String
startTime
=
storeClassesTechnician
.
getClassesManage
().
getStartTime
().
toString
();
//上班结束时间str
String
endTime
=
storeClassesTechnician
.
getClassesManage
().
getEndTime
().
toString
();
//上班开始时间
long
workStartTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
startTime
).
getTime
();
//上班结束时间
long
workEndTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
endTime
).
getTime
();
//最晚可预约时间
String
latestScheduledTime
=
storeClassesTechnician
.
getClassesManage
().
getLatestScheduledTime
().
toString
();
/
/美甲师正在服务的时间为不可用时间
/
*3、已预约的时间不可用*/
List
<
ScheduleServe
>
scheduleServeList
=
storeClassesTechnician
.
getListScheduleServe
();
List
<
Period
>
periodList
=
scheduleServeList
.
stream
().
map
(
scheduleServe
->
new
Period
(
scheduleServe
.
getStartTime
().
getTime
(),
scheduleServe
.
getEndTime
().
getTime
())).
collect
(
Collectors
.
toList
());
//正在服务时间不可用
List
<
Period
>
periodList
=
scheduleServeList
.
stream
()
.
map
(
scheduleServe
->
new
Period
(
scheduleServe
.
getStartTime
().
getTime
(),
scheduleServe
.
getEndTime
().
getTime
()))
.
collect
(
Collectors
.
toList
());
//当前时间之前不可用
/*4、当前时间之前的时间不可用*/
Period
period2
=
new
Period
(
dayStartTime
,
System
.
currentTimeMillis
());
periodList
.
add
(
period2
);
//最晚可预约时间
if
(
StringUtils
.
isNotEmpty
(
latestScheduledTime
)
&&
storeClassesTechnician
.
getClassesManage
().
getLatestScheduledTimeEnable
()
==
1
)
{
/*5、如果开启了门店最晚预约时间,最晚可预约时间之后的时间不可用*/
if
(
StringUtils
.
isNotEmpty
(
latestScheduledTime
)
&&
storeClassesTechnician
.
getClassesManage
().
getLatestScheduledTimeEnable
()
==
1
)
{
long
latestScheduledTimeMills
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
latestScheduledTime
).
getTime
();
Period
latestScheduledTimeMillsPeriod
=
new
Period
(
latestScheduledTimeMills
,
dayEndTime
);
periodList
.
add
(
latestScheduledTimeMillsPeriod
);
}
/
/上班开始时间之前的时间不可用
/
*6、上班开始时间之前的时间不可用*/
Period
period3
=
new
Period
(
dayStartTime
,
workStartTime
);
periodList
.
add
(
period3
);
/
/请假时间不可用
/
*7、请假时间不可用*/
List
<
Period
>
takeLeavePeriodList
=
takeLeaveEventMapper
.
selectList
(
new
LambdaQueryWrapper
<
TakeLeaveEvent
>()
.
eq
(
TakeLeaveEvent:
:
getApplyTechnicianId
,
storeClassesTechnician
.
getTechnicianManage
().
getId
())
.
eq
(
TakeLeaveEvent:
:
getStatus
,
TakeLeaveEvent
.
STATUS_APPROVAL_PASS
)
...
...
@@ -186,22 +176,14 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
periodList
.
addAll
(
takeLeavePeriodList
);
/
/10点上班的
/
*8、10点上班(早班)下班后时间不可用*/
if
(
startTime
.
equals
(
"10:00:00"
))
{
//下班后多久的时间是可用的
Period
period4
=
new
Period
(
workEndTime
,
dayEndTime
);
periodList
.
add
(
period4
);
}
StoreTechnician
storeTechnician
=
storeClassesTechnician
.
getTechnicianManage
();
StoreTechnicianPeriod
storeTechnicianDTO
=
new
StoreTechnicianPeriod
(
periodList
,
storeTechnician
.
getId
(),
storeTechnician
.
getName
(),
storeTechnician
.
getPicturePath
(),
storeTechnician
.
getGrade
()
);
/*9、构造返回值*/
StoreTechnicianPeriod
storeTechnicianDTO
=
new
StoreTechnicianPeriod
(
periodList
,
storeClassesTechnician
.
getTechnicianManage
());
storeTechnicianPeriodList
.
add
(
storeTechnicianDTO
);
}
...
...
@@ -214,8 +196,8 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
LocalDateTime
serveStartTime
,
LocalDateTime
serveEndTime
)
throws
ParseException
{
List
<
StoreTechnicianPeriod
>
storeTechnicianPeriodList
=
this
.
queryStoreTechnicianPeriod
(
null
,
departmentId
,
serveStartTime
.
toLocalDate
().
toString
(),
Lists
.
newArrayList
(
serveId
));
Period
servePeriod
=
new
Period
(
serveStartTime
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
(),
serveEndTime
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
());
Period
servePeriod
=
new
Period
(
serveStartTime
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
(),
serveEndTime
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
());
List
<
Integer
>
technicianIds
=
storeTechnicianPeriodList
.
stream
().
filter
(
storeTechnicianPeriod
->
!
storeTechnicianPeriod
.
getPeriodList
().
stream
().
map
(
period
->
period
.
conflict
(
servePeriod
))
.
collect
(
Collectors
.
toList
()).
contains
(
true
))
...
...
@@ -233,13 +215,10 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
//美甲师不可用日期列表
List
<
StoreTechnicianPeriod
>
storeTechnicianDTOList
=
this
.
queryStoreTechnicianPeriod
(
qry
.
getId
(),
qry
.
getDepartmentId
(),
qry
.
getScheduleDate
(),
qry
.
getListScheduleServer
().
stream
().
map
(
ScheduleServeQuery:
:
getServeId
).
collect
(
Collectors
.
toList
()));
/*1、获取美甲师和美甲师不可用时间段*/
List
<
StoreTechnicianPeriod
>
storeTechnicianDTOList
=
this
.
queryStoreTechnicianPeriod
(
qry
.
getId
(),
qry
.
getDepartmentId
(),
qry
.
getScheduleDate
(),
qry
.
getListScheduleServer
().
stream
().
map
(
ScheduleServeQuery:
:
getServeId
).
collect
(
Collectors
.
toList
()));
/
/查询时段
/
*2、迭代出所有需要返回的时间节点*/
if
(
ListUtil
.
isEmpty
(
qry
.
getDateTimeList
()))
{
long
workStartTime
=
simpleDateFormat
.
parse
(
qry
.
getScheduleDate
()
+
" 10:00:00"
).
getTime
();
long
workEndTime
=
simpleDateFormat
.
parse
(
qry
.
getScheduleDate
()
+
" 22:00:00"
).
getTime
();
...
...
@@ -251,6 +230,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
qry
.
setDateTimeList
(
dateTimeList
);
}
//预约服务时长和图片
qry
.
getListScheduleServer
().
forEach
(
scheduleServeQuery
->
{
if
(
scheduleServeQuery
.
getProduceId
()
==
null
)
{
...
...
@@ -286,55 +266,46 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
});
});
//线程池加速
ForkJoinPool
myPool
=
new
ForkJoinPool
(
qry
.
getDateTimeList
().
size
());
List
<
IdleTimeDTO
>
idleTimeDTOList
=
new
ArrayList
<>(
qry
.
getDateTimeList
().
size
());
myPool
.
submit
(()
->
{
qry
.
getDateTimeList
()
.
forEach
(
dateTime
->
{
myPool
.
submit
(()
->
qry
.
getDateTimeList
()
AtomicLong
time
=
new
AtomicLong
(
System
.
currentTimeMillis
());
.
forEach
(
dateTime
->
{
//每个主服务由不同的美甲师做,setter主服务的时间period
mainScheduleServeQueryLinkedList
.
forEach
(
mainServeDTO
->
{
Period
period
=
new
Period
();
period
.
setStartTime
(
dateTime
);
period
.
setLength
(
mainServeDTO
.
getLengthTimeForEndTime
().
longValue
()
*
60000
);
period
.
setEndTime
(
dateTime
+
period
.
getLength
());
mainServeDTO
.
setPeriod
(
period
);
});
//主服务深度克隆
List
<
ScheduleServeQuery
>
cloneMainServeDTOList
=
mainScheduleServeQueryLinkedList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toList
());
//美甲师深度克隆
List
<
StoreTechnicianPeriod
>
cloneStoreTechnicianDTOList
=
storeTechnicianDTOList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toList
());
//每个主服务由不同的美甲师做,setter主服务的时间period
mainScheduleServeQueryLinkedList
.
forEach
(
mainScheduleServeQuery
->
{
Period
period
=
new
Period
(
dateTime
,
dateTime
+
mainScheduleServeQuery
.
getLengthTimeForEndTime
().
longValue
()
*
60000
);
mainScheduleServeQuery
.
setPeriod
(
period
);
});
//构造预约方案树🌲
TreeProgram
treeProgram
=
this
.
rec
(
new
LinkedList
<>(
cloneMainServeDTOList
),
cloneStoreTechnicianDTOList
,
TreeProgram
.
root
(
));
//主服务深度克隆
Queue
<
ScheduleServeQuery
>
cloneMainServeDTOList
=
mainScheduleServeQueryLinkedList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toCollection
(
LinkedList:
:
new
));
time
.
set
(
System
.
currentTimeMillis
());
//美甲师深度克隆
List
<
StoreTechnicianPeriod
>
cloneStoreTechnicianDTOList
=
storeTechnicianDTOList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toList
());
List
<
TreeProgram
>
defaultNodes
=
new
ArrayList
<>();
//根据需要预约的服务和美甲师构造预约方案树🌲
TreeProgram
treeProgram
=
this
.
buildTreeProgram
(
cloneMainServeDTOList
,
cloneStoreTechnicianDTOList
,
TreeProgram
.
root
());
//构造默认美甲师
this
.
recDefault
(
defaultNodes
,
treeProgram
);
time
.
set
(
System
.
currentTimeMillis
()
);
//构造默认美甲师
List
<
TreeProgram
>
defaultNodeList
=
new
ArrayList
<>(
);
this
.
buildDefaultNodeList
(
defaultNodeList
,
treeProgram
);
IdleTimeDTO
idleTimeDTO
=
new
IdleTimeDTO
();
idleTimeDTO
.
setDateTime
(
dateTime
);
idleTimeDTO
.
setTime
(
new
SimpleDateFormat
(
"HH:mm"
).
format
(
new
Date
(
dateTime
)));
IdleTimeDTO
idleTimeDTO
=
new
IdleTimeDTO
();
idleTimeDTO
.
setDateTime
(
dateTime
);
idleTimeDTO
.
setTime
(
new
SimpleDateFormat
(
"HH:mm"
).
format
(
new
Date
(
dateTime
)));
/*关键信息 节点是否可用*/
idleTimeDTO
.
setStatus
(!
treeProgram
.
childNull
());
idleTimeDTO
.
setTreeProgram
(
treeProgram
);
idleTimeDTO
.
setDefaultNodeList
(
defaultNodes
);
/*关键信息 节点是否可用*/
idleTimeDTO
.
setStatus
(!
treeProgram
.
childNull
());
idleTimeDTO
.
setTreeProgram
(
treeProgram
);
idleTimeDTO
.
setDefaultNodeList
(
defaultNodeList
);
idleTimeDTOList
.
add
(
idleTimeDTO
);
idleTimeDTOList
.
add
(
idleTimeDTO
);
});
}).
get
();
})).
get
();
myPool
.
shutdown
();
...
...
@@ -344,11 +315,12 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
idleTimeDTO
.
setTreeProgram
(
null
);
});
}
/*排序返回*/
return
idleTimeDTOList
.
stream
().
sorted
(
Comparator
.
comparing
(
IdleTimeDTO:
:
getTime
)).
collect
(
Collectors
.
toList
());
}
private
void
recDefaul
t
(
List
<
TreeProgram
>
list
,
TreeProgram
parent
)
{
private
void
buildDefaultNodeLis
t
(
List
<
TreeProgram
>
list
,
TreeProgram
parent
)
{
if
(!
CollectionUtils
.
isEmpty
(
parent
.
getChildList
()))
{
TreeProgram
treeProgram
=
new
TreeProgram
();
TreeProgram
defaultNode
=
parent
.
getChildList
()
...
...
@@ -366,87 +338,90 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
treeProgram
.
setStoreTechnicianDTO
(
defaultNode
.
getStoreTechnicianDTO
());
list
.
add
(
treeProgram
);
this
.
recDefaul
t
(
list
,
defaultNode
);
this
.
buildDefaultNodeLis
t
(
list
,
defaultNode
);
}
}
private
TreeProgram
rec
(
Queue
<
ScheduleServeQuery
>
scheduleServeQueryList
,
List
<
StoreTechnicianPeriod
>
storeTechnicians
,
TreeProgram
parent
)
{
private
TreeProgram
buildTreeProgram
(
Queue
<
ScheduleServeQuery
>
scheduleServeQueryList
,
List
<
StoreTechnicianPeriod
>
storeTechnicians
,
TreeProgram
parent
)
{
long
time
=
System
.
currentTimeMillis
();
final
ScheduleServeQuery
scheduleServeQuery
=
scheduleServeQueryList
.
poll
();
List
<
TreeProgram
>
childList
=
Lists
.
newArrayList
();
//遍历每一个美甲师
storeTechnicians
.
forEach
(
storeTechnician
->
{
//美甲师深度克隆
List
<
TreeProgram
>
pathClone
=
parent
.
getPath
().
stream
().
map
(
CloneUtil:
:
deepClone
).
filter
(
Objects:
:
nonNull
)
.
collect
(
Collectors
.
toList
());
//包含当前美甲师的父节点list
List
<
ScheduleServeQuery
>
severedList
=
pathClone
.
stream
()
//根节点到当前节点和
.
filter
(
node
->
node
.
getStoreTechnicianDTO
().
getTechnicianId
().
equals
(
storeTechnician
.
getTechnicianId
()))
.
map
(
TreeProgram:
:
getScheduleServeQuery
)
.
collect
(
Collectors
.
toList
());
storeTechnicians
.
stream
()
.
filter
(
storeTechnicianPeriod
->
{
List
<
TechnicianServe
>
technicianServeList
=
technicianServeMapper
.
selectList
(
new
LambdaQueryWrapper
<
TechnicianServe
>().
eq
(
TechnicianServe:
:
getServeId
,
scheduleServeQuery
.
getServeId
()));
return
technicianServeList
.
stream
().
map
(
TechnicianServe:
:
getTechnicianId
).
collect
(
Collectors
.
toList
()).
contains
(
storeTechnicianPeriod
.
getTechnicianId
());
})
.
forEach
(
storeTechnician
->
{
//美甲师深度克隆
List
<
TreeProgram
>
pathClone
=
parent
.
getPath
().
stream
().
map
(
CloneUtil:
:
deepClone
).
filter
(
Objects:
:
nonNull
).
collect
(
Collectors
.
toList
());
TreeProgram
t
=
CloneUtil
.
deepClone
(
parent
);
List
<
StoreTechnicianPeriod
>
treeProgramList
=
Lists
.
newArrayList
();
//包含当前美甲师的父节点list
List
<
ScheduleServeQuery
>
severedList
=
pathClone
.
stream
()
//根节点到当前节点和
.
filter
(
node
->
node
.
getStoreTechnicianDTO
().
getTechnicianId
().
equals
(
storeTechnician
.
getTechnicianId
()))
.
map
(
TreeProgram:
:
getScheduleServeQuery
)
.
collect
(
Collectors
.
toList
());
while
(
t
!=
null
&&
t
.
getParent
()
!=
null
)
{
if
(
t
.
getStoreTechnicianDTO
()
!=
null
)
{
treeProgramList
.
add
(
t
.
getStoreTechnicianDTO
());
}
t
=
t
.
getParent
();
}
List
<
Integer
>
technicianIds
=
treeProgramList
.
stream
().
map
(
StoreTechnicianPeriod:
:
getTechnicianId
).
collect
(
Collectors
.
toList
());
Integer
technicianId
=
storeTechnician
.
getTechnicianId
();
boolean
b
=
technicianIds
.
contains
(
technicianId
);
//如果已经设置该美甲师的节点不为空 需要把当前节点的服务时间加上
TreeProgram
node
;
if
(
b
)
{
Long
totalServeTime
=
severedList
.
stream
()
.
map
(
ScheduleServeQuery:
:
getPeriod
)
.
map
(
Period:
:
getLength
)
.
mapToLong
(
Long:
:
longValue
)
.
sum
();
ScheduleServeQuery
scheduleServeQueryClone
=
CloneUtil
.
deepClone
(
scheduleServeQuery
);
Period
period
=
scheduleServeQueryClone
.
getPeriod
();
period
.
setStartTime
(
period
.
getStartTime
()
+
totalServeTime
);
period
.
setEndTime
(
period
.
getEndTime
()
+
totalServeTime
);
node
=
new
TreeProgram
(
storeTechnician
,
scheduleServeQueryClone
,
parent
);
}
else
{
ScheduleServeQuery
scheduleServeQueryClone
=
CloneUtil
.
deepClone
(
scheduleServeQuery
);
node
=
new
TreeProgram
(
storeTechnician
,
scheduleServeQueryClone
,
parent
);
}
//判断该节点的路径是否满足要求
if
(
this
.
test
(
node
.
getPath
()))
{
//如果还有服务 继续构造子树
if
(!
CollectionUtils
.
isEmpty
(
scheduleServeQueryList
))
{
Queue
<
ScheduleServeQuery
>
cloneScheduleServeQueryList
=
scheduleServeQueryList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toCollection
(
LinkedList:
:
new
));
this
.
rec
(
cloneScheduleServeQueryList
,
storeTechnicians
,
node
);
TreeProgram
t
=
CloneUtil
.
deepClone
(
parent
);
List
<
StoreTechnicianPeriod
>
treeProgramList
=
Lists
.
newArrayList
();
//如果构造的子树为空
if
(!
node
.
childNull
())
{
childList
.
add
(
node
);
while
(
t
!=
null
&&
t
.
getParent
()
!=
null
)
{
if
(
t
.
getStoreTechnicianDTO
()
!=
null
)
{
treeProgramList
.
add
(
t
.
getStoreTechnicianDTO
());
}
t
=
t
.
getParent
();
}
}
//如果没有服务了 说明是叶子节点,直接添加
else
{
childList
.
add
(
node
);
}
}
});
List
<
Integer
>
technicianIds
=
treeProgramList
.
stream
().
map
(
StoreTechnicianPeriod:
:
getTechnicianId
).
collect
(
Collectors
.
toList
());
Integer
technicianId
=
storeTechnician
.
getTechnicianId
();
boolean
b
=
technicianIds
.
contains
(
technicianId
);
//如果已经设置该美甲师的节点不为空 需要把当前节点的服务时间加上
TreeProgram
node
;
if
(
b
)
{
Long
totalServeTime
=
severedList
.
stream
()
.
map
(
ScheduleServeQuery:
:
getPeriod
)
.
map
(
Period:
:
getLength
)
.
mapToLong
(
Long:
:
longValue
)
.
sum
();
ScheduleServeQuery
scheduleServeQueryClone
=
CloneUtil
.
deepClone
(
scheduleServeQuery
);
Period
period
=
scheduleServeQueryClone
.
getPeriod
();
period
.
setStartTime
(
period
.
getStartTime
()
+
totalServeTime
);
period
.
setEndTime
(
period
.
getEndTime
()
+
totalServeTime
);
node
=
new
TreeProgram
(
storeTechnician
,
scheduleServeQueryClone
,
parent
);
}
else
{
ScheduleServeQuery
scheduleServeQueryClone
=
CloneUtil
.
deepClone
(
scheduleServeQuery
);
node
=
new
TreeProgram
(
storeTechnician
,
scheduleServeQueryClone
,
parent
);
}
//判断该节点的路径是否满足要求
if
(
this
.
test
(
node
.
getPath
()))
{
//如果还有服务 继续构造子树
if
(!
CollectionUtils
.
isEmpty
(
scheduleServeQueryList
))
{
Queue
<
ScheduleServeQuery
>
cloneScheduleServeQueryList
=
scheduleServeQueryList
.
stream
().
map
(
CloneUtil:
:
deepClone
).
collect
(
Collectors
.
toCollection
(
LinkedList:
:
new
));
this
.
buildTreeProgram
(
cloneScheduleServeQueryList
,
storeTechnicians
,
node
);
//如果构造的子树为空
if
(!
node
.
childNull
())
{
childList
.
add
(
node
);
}
}
//如果没有服务了 说明是叶子节点,直接添加
else
{
childList
.
add
(
node
);
}
}
});
parent
.
setChildList
(
childList
);
return
parent
;
...
...
@@ -454,8 +429,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
private
boolean
test
(
List
<
TreeProgram
>
path
)
{
Map
<
StoreTechnicianPeriod
,
List
<
TreeProgram
>>
map
=
path
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
TreeProgram:
:
getStoreTechnicianDTO
));
Map
<
StoreTechnicianPeriod
,
List
<
TreeProgram
>>
map
=
path
.
stream
().
collect
(
Collectors
.
groupingBy
(
TreeProgram:
:
getStoreTechnicianDTO
));
List
<
TreeProgram
>
treePrograms
=
map
.
values
().
stream
()
...
...
@@ -1546,6 +1520,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
.
scheduledTime
(
scheduleManage
.
getScheduledTime
())
//自带款式
.
ownProduceId
(
scheduleServeVar
.
getOwnProduceId
())
.
isOwnProduce
(
scheduleServeVar
.
getIsOwnProduce
())
.
build
();
...
...
src/main/java/com/gogirl/application/user/customer/impl/CustomerServiceImpl.java
View file @
09a61ee5
...
...
@@ -24,7 +24,6 @@ import com.gogirl.infrastructure.common.util.StringUtils;
import
com.gogirl.infrastructure.mapper.order.serve.OrderManageMapper
;
import
com.gogirl.infrastructure.mapper.order.serve.OrderRecordMapper
;
import
com.gogirl.infrastructure.mapper.order.serve.OrderServeMapper
;
import
com.gogirl.infrastructure.mapper.order.serve.ScheduleManageMapper
;
import
com.gogirl.infrastructure.mapper.product.serve.BaseServeMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreManageMapper
;
import
com.gogirl.infrastructure.mapper.user.customer.CustomerBalanceMapper
;
...
...
@@ -52,36 +51,40 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
@Resource
private
CustomerMapper
customerMapper
;
@Resource
private
WechatService
wechatService
;
@Resource
private
GogirlTokenService
gogirlTokenService
;
@Resource
private
ScheduleManageMapper
scheduleManageMapper
;
@Resource
private
CustomerDetailMapper
customerDetailMapper
;
@Resource
private
CustomerBalanceMapper
customerBalanceMapper
;
@Resource
private
QRCodeService
qrCodeService
;
@Resource
private
StoreManageMapper
storeManageMapper
;
@Resource
private
OrderManageMapper
orderManageMapper
;
@Resource
private
OrderServeMapper
orderServeMapper
;
@Resource
private
BaseServeMapper
baseServeMapper
;
@Resource
private
OrderRecordMapper
orderRecordMapper
;
@Resource
private
CustomerDetailService
customerDetailService
;
@Resource
private
OrderManageService
orderManageService
;
...
...
src/main/java/com/gogirl/shared/order/StoreTechnicianPeriod.java
View file @
09a61ee5
package
com
.
gogirl
.
shared
.
order
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.AllArgsConstructor
;
import
com.gogirl.domain.store.store.StoreTechnician
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
StoreTechnicianPeriod
implements
Serializable
{
/**
...
...
@@ -23,11 +21,32 @@ public class StoreTechnicianPeriod implements Serializable {
*/
private
Integer
technicianId
;
//美甲师姓名
/**
* 美甲师姓名
*/
private
String
name
;
/**
* 美甲师头像
*/
private
String
picturePath
;
/**
* 美甲师级别
*/
private
String
grade
;
public
StoreTechnicianPeriod
()
{
}
public
StoreTechnicianPeriod
(
List
<
Period
>
periodList
,
StoreTechnician
storeTechnician
)
{
this
.
periodList
=
periodList
;
this
.
technicianId
=
storeTechnician
.
getId
();
this
.
name
=
storeTechnician
.
getName
();
this
.
picturePath
=
storeTechnician
.
getPicturePath
();
this
.
grade
=
storeTechnician
.
getGrade
();
}
}
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