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
78d8b38c
Commit
78d8b38c
authored
Jul 06, 2020
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
e276a7ac
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
233 additions
and
258 deletions
+233
-258
ScheduleManageService.java
...gogirl/application/order/serve/ScheduleManageService.java
+22
-10
ScheduleManageServiceImpl.java
...plication/order/serve/impl/ScheduleManageServiceImpl.java
+197
-216
StoreClassesTechnicianService.java
...pplication/store/store/StoreClassesTechnicianService.java
+0
-9
StoreTechnicianService.java
...ogirl/application/store/store/StoreTechnicianService.java
+0
-1
StoreClassesTechnicianServiceImpl.java
...n/store/store/impl/StoreClassesTechnicianServiceImpl.java
+0
-8
StoreTechnicianServiceImpl.java
...lication/store/store/impl/StoreTechnicianServiceImpl.java
+0
-2
StoreClassesTechnician.java
...com/gogirl/domain/store/store/StoreClassesTechnician.java
+6
-5
ScheduleManageController.java
...girl/interfaces/order/serve/ScheduleManageController.java
+4
-7
StoreTechnicianPeriod.java
...n/java/com/gogirl/shared/order/StoreTechnicianPeriod.java
+4
-0
No files found.
src/main/java/com/gogirl/application/order/serve/ScheduleManageService.java
View file @
78d8b38c
...
...
@@ -10,6 +10,8 @@ import com.gogirl.shared.order.*;
import
com.gogirl.shared.product.LeisureScheduleServeQuery
;
import
com.gogirl.shared.product.LeisureScheduleServeResp
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Null
;
import
java.text.ParseException
;
import
java.time.LocalDateTime
;
import
java.util.List
;
...
...
@@ -142,19 +144,29 @@ public interface ScheduleManageService extends IService<ScheduleManage> {
IPage
<
LeisureScheduleServeResp
>
queryPageLeisureScheduleServe
(
LeisureScheduleServeQuery
query
);
/**
* 查询
美甲师信息
和美甲师不可用时间段
* 查询
店铺下的美甲师
和美甲师不可用时间段
*
* @param scheduledId 是否必传
否
* @param scheduledId 是否必传
:否。为过滤条件,如果是修改的话传预约id在查询不可用时间段的时候会过滤被修改的预约。
* @param departmentId 店铺id
* @param
scheduleDate localData
* @param serveIdList 预约的服务id
* @return
* @param
day 日期 形如yyyy-MM-dd
* @param serveIdList 预约的服务id
。为过滤条件:过滤不能做服务的美甲师id
* @return
departmentId下的美甲师和美甲师不可用时间段
* @throws ParseException
*/
List
<
StoreTechnicianPeriod
>
queryStoreTechnicianPeriod
(
Integer
scheduledId
,
Integer
departmentId
,
String
scheduleDate
,
List
<
Integer
>
serveIdList
)
throws
ParseException
;
List
<
StoreTechnicianPeriod
>
queryStoreTechnicianPeriod
(
@Null
Integer
scheduledId
,
@NotNull
Integer
departmentId
,
@NotNull
String
day
,
@Null
List
<
Integer
>
serveIdList
)
throws
ParseException
;
List
<
StoreTechnician
>
queryLeisureTechnician
(
Integer
departmentId
,
Integer
serveId
,
LocalDateTime
serveStartTime
,
LocalDateTime
serveEndTime
)
throws
ParseException
;
/**
* 查询店铺下能做服务的美甲师
*
* @param departmentId 店铺id
* @param serveId 服务id
* @param serveStartTime 服务开始时间
* @param serveEndTime 服务结束时间
* @return
* @throws ParseException
*/
List
<
StoreTechnician
>
queryAvailableTechnician
(
Integer
departmentId
,
Integer
serveId
,
LocalDateTime
serveStartTime
,
LocalDateTime
serveEndTime
)
throws
ParseException
;
}
src/main/java/com/gogirl/application/order/serve/impl/ScheduleManageServiceImpl.java
View file @
78d8b38c
...
...
@@ -22,6 +22,7 @@ import com.gogirl.domain.store.store.StoreTechnician;
import
com.gogirl.domain.user.customer.Customer
;
import
com.gogirl.infrastructure.common.exception.RRException
;
import
com.gogirl.infrastructure.common.util.CloneUtil
;
import
com.gogirl.infrastructure.common.util.DateUtils
;
import
com.gogirl.infrastructure.common.util.ListUtil
;
import
com.gogirl.infrastructure.common.util.StringUtils
;
import
com.gogirl.infrastructure.config.property.GogirlProperties
;
...
...
@@ -33,6 +34,7 @@ import com.gogirl.infrastructure.mapper.order.serve.ScheduleServeMapper;
import
com.gogirl.infrastructure.mapper.product.purchase.PurchaseSkuMapper
;
import
com.gogirl.infrastructure.mapper.product.serve.*
;
import
com.gogirl.infrastructure.mapper.store.oa.TakeLeaveEventMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreClassesTechnicianMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreManageMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreTechnicianMapper
;
import
com.gogirl.infrastructure.service.push.TechnicianPushService
;
...
...
@@ -77,6 +79,8 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
private
final
StoreManageMapper
storeManageMapper
;
private
final
OwnProduceMapper
ownProduceMapper
;
private
final
BaseScheduledTypeMapper
baseScheduledTypeMapper
;
private
final
ProducePromotionTimeMapper
producePromotionTimeMapper
;
private
final
StoreClassesTechnicianMapper
storeClassesTechnicianMapper
;
private
final
StoreClassesTechnicianService
storeClassesTechnicianService
;
...
...
@@ -99,11 +103,11 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
@Override
public
List
<
StoreTechnicianPeriod
>
queryStoreTechnicianPeriod
(
Integer
scheduledId
,
Integer
departmentId
,
String
scheduleDate
,
String
day
,
List
<
Integer
>
serveIdList
)
throws
ParseException
{
/*1.查询美甲师排班*/
List
<
StoreClassesTechnician
>
storeClassesTechnicianList
=
storeClassesTechnician
Service
.
listClassesTechnician
(
scheduledId
,
departmentId
,
scheduleDate
);
List
<
StoreClassesTechnician
>
storeClassesTechnicianList
=
storeClassesTechnician
Mapper
.
listClassesTechnician
(
scheduledId
,
departmentId
,
day
);
//过滤不能做服务的美甲师
if
(
ListUtil
.
isNotEmpty
(
serveIdList
))
{
...
...
@@ -118,9 +122,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
//一天开始的时间
long
dayStartTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 00:00:00"
).
getTime
();
long
dayStartTime
=
simpleDateFormat
.
parse
(
day
+
" 00:00:00"
).
getTime
();
//一天结束的时间
long
dayEndTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" 23:59:59"
).
getTime
();
long
dayEndTime
=
simpleDateFormat
.
parse
(
day
+
" 23:59:59"
).
getTime
();
//遍历美甲师排班 获取每个美甲师的不可用时间段
...
...
@@ -133,9 +137,9 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
//上班结束时间str
String
endTime
=
storeClassesTechnician
.
getClassesManage
().
getEndTime
().
toString
();
//上班开始时间
long
workStartTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
startTime
).
getTime
();
long
workStartTime
=
simpleDateFormat
.
parse
(
day
+
" "
+
startTime
).
getTime
();
//上班结束时间
long
workEndTime
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
endTime
).
getTime
();
long
workEndTime
=
simpleDateFormat
.
parse
(
day
+
" "
+
endTime
).
getTime
();
//最晚可预约时间
String
latestScheduledTime
=
storeClassesTechnician
.
getClassesManage
().
getLatestScheduledTime
().
toString
();
...
...
@@ -151,7 +155,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
/*5、如果开启了门店最晚预约时间,最晚可预约时间之后的时间不可用*/
if
(
StringUtils
.
isNotEmpty
(
latestScheduledTime
)
&&
storeClassesTechnician
.
getClassesManage
().
getLatestScheduledTimeEnable
()
==
1
)
{
long
latestScheduledTimeMills
=
simpleDateFormat
.
parse
(
scheduleDate
+
" "
+
latestScheduledTime
).
getTime
();
long
latestScheduledTimeMills
=
simpleDateFormat
.
parse
(
day
+
" "
+
latestScheduledTime
).
getTime
();
Period
latestScheduledTimeMillsPeriod
=
new
Period
(
latestScheduledTimeMills
,
dayEndTime
);
periodList
.
add
(
latestScheduledTimeMillsPeriod
);
}
...
...
@@ -186,15 +190,21 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
@Override
public
List
<
StoreTechnician
>
queryLeisureTechnician
(
Integer
departmentId
,
Integer
serveId
,
LocalDateTime
serveStartTime
,
LocalDateTime
serveEndTime
)
throws
ParseException
{
public
List
<
StoreTechnician
>
queryAvailableTechnician
(
Integer
departmentId
,
Integer
serveId
,
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
());
List
<
Integer
>
technicianIds
=
storeTechnicianPeriodList
.
stream
().
filter
(
storeTechnicianPeriod
->
!
storeTechnicianPeriod
.
getPeriodList
().
stream
().
map
(
period
->
period
.
conflict
(
servePeriod
))
//过滤返回可用美甲师
List
<
Integer
>
technicianIds
=
storeTechnicianPeriodList
.
stream
()
.
filter
(
storeTechnicianPeriod
->
!
storeTechnicianPeriod
.
getPeriodList
()
.
stream
()
.
map
(
period
->
period
.
conflict
(
servePeriod
))
.
collect
(
Collectors
.
toList
()).
contains
(
true
))
.
map
(
StoreTechnicianPeriod:
:
getTechnicianId
)
.
collect
(
Collectors
.
toList
());
...
...
@@ -204,7 +214,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return
Lists
.
newArrayList
();
}
@Override
public
List
<
IdleTimeDTO
>
queryIdleTime
(
IdleTimeQuery
qry
)
throws
ParseException
,
ExecutionException
,
InterruptedException
{
...
...
@@ -463,22 +472,15 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
@Override
public
List
<
IdleTimeDTO
>
queryLeisureTime
(
Integer
departmentId
,
String
scheduleDate
)
throws
ParseException
{
//当前周几
int
weekday
=
DateUtils
.
getWeek
(
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
parse
(
scheduleDate
);
Date
today
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
parse
(
scheduleDate
);
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
today
);
int
weekday
=
c
.
get
(
Calendar
.
DAY_OF_WEEK
);
if
(
weekday
==
1
)
{
weekday
=
7
;
}
else
{
weekday
=
weekday
-
1
;
}
//根据店铺id和周几查询闲时间折扣配置
List
<
LeisureDiscountConfig
>
leisureDiscountConfigList
=
leisureDiscountConfigMapper
.
selectByDepartmentIdAndWeekIgnoreLimit
(
departmentId
,
weekday
);
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
//闲时预约时间节点
Set
<
Long
>
dateTimeListSet
=
new
HashSet
<>();
for
(
LeisureDiscountConfig
leisureDiscountConfig
:
leisureDiscountConfigList
)
{
...
...
@@ -492,7 +494,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
}
List
<
Long
>
dateTimeList
=
new
ArrayList
<>(
dateTimeListSet
);
dateTimeList
.
sort
(
Comparator
.
comparing
(
Long:
:
longValue
));
...
...
@@ -502,17 +503,17 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return
Lists
.
newArrayList
();
}
//查询店铺美甲师和美甲师不可用时间列表
List
<
StoreTechnicianPeriod
>
storeTechnicianPeriodList
=
this
.
queryStoreTechnicianPeriod
(
null
,
departmentId
,
scheduleDate
,
null
);
int
finalWeekday
=
weekday
;
List
<
IdleTimeDTO
>
result
=
dateTimeList
.
stream
()
return
dateTimeList
.
stream
()
.
map
(
dateTime
->
{
IdleTimeDTO
idleTimeDTO
=
new
IdleTimeDTO
();
idleTimeDTO
.
setDateTime
(
dateTime
);
idleTimeDTO
.
setTime
(
new
SimpleDateFormat
(
"HH:mm"
).
format
(
new
Date
(
dateTime
)));
List
<
LeisureTechServe
>
leisureTechServeList
=
new
ArrayList
<>();
List
<
BaseServe
>
list
=
leisureDiscountConfigMapper
.
selectByDepartmentIdAndWeekAndDateTime
(
departmentId
,
finalW
eekday
,
idleTimeDTO
.
getTime
());
List
<
BaseServe
>
list
=
leisureDiscountConfigMapper
.
selectByDepartmentIdAndWeekAndDateTime
(
departmentId
,
w
eekday
,
idleTimeDTO
.
getTime
());
storeTechnicianPeriodList
.
forEach
(
storeTechnicianPeriod
->
{
List
<
BaseServe
>
canScheduledServeList
=
list
.
stream
()
.
filter
(
baseServe
->
{
...
...
@@ -532,7 +533,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return
idleTimeDTO
;
})
.
collect
(
Collectors
.
toList
());
return
result
;
}
@Override
...
...
@@ -679,180 +679,6 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
});
}
private
void
addLeisureTechServe
(
List
<
LeisureTechServe
>
leisureTechServeList
,
Integer
technicianId
,
Integer
serveId
)
{
leisureTechServeList
.
stream
()
.
filter
(
leisureTechServe
->
leisureTechServe
.
getServeId
().
equals
(
serveId
))
.
findAny
()
.
map
(
leisureTechServe
->
leisureTechServe
.
getTechnicianIdList
().
add
(
technicianId
))
.
orElseGet
(()
->
{
LeisureTechServe
leisureTechServe
=
new
LeisureTechServe
();
leisureTechServe
.
setServeId
(
serveId
);
Set
<
Integer
>
set
=
new
HashSet
<>();
set
.
add
(
technicianId
);
leisureTechServe
.
setTechnicianIdList
(
set
);
leisureTechServeList
.
add
(
leisureTechServe
);
return
null
;
});
}
/**
* 店铺短码-服务短码(s)-美甲师短码-时间-4位最大单号
*
* @param departmentId
* @param scheduleId
* @return
*/
private
String
getOrderNo
(
Integer
departmentId
,
Integer
scheduleId
)
{
StoreManage
storeManage
=
storeManageMapper
.
selectById
(
departmentId
);
List
<
ScheduleServe
>
scheduleServeList
=
scheduleServeMapper
.
selectList
(
new
LambdaQueryWrapper
<
ScheduleServe
>().
eq
(
ScheduleServe:
:
getSchId
,
scheduleId
));
BaseServe
baseServe
=
baseServeMapper
.
selectById
(
scheduleServeList
.
get
(
0
).
getServeId
());
BaseType
baseType
=
baseTypeService
.
getById
(
baseServe
.
getTypeId
());
StoreTechnician
storeTechnician
=
storeTechnicianMapper
.
selectById
(
scheduleServeList
.
get
(
0
).
getTechnicianId
());
OrderManage
latestOfDay
=
orderManageMapper
.
latestOfDay
();
String
latestOfDayString
;
//
if
(
latestOfDay
==
null
)
{
latestOfDayString
=
"0001"
;
}
//
else
{
latestOfDayString
=
String
.
format
(
"%04d"
,
Integer
.
parseInt
(
latestOfDay
.
getOrderNo
().
substring
(
latestOfDay
.
getOrderNo
().
length
()
-
4
))
+
1
);
}
//
return
(
storeManage
.
getShortCode
()
==
null
?
"NNN"
:
storeManage
.
getShortCode
())
+
"-"
+
(
StringUtils
.
isEmpty
(
baseType
.
getShortCode
())
?
"NNN"
:
baseType
.
getShortCode
())
+
"-"
+
(
StringUtils
.
isEmpty
(
storeTechnician
.
getShortCode
())
?
"NNN"
:
storeTechnician
.
getShortCode
())
+
"-"
+
new
SimpleDateFormat
(
"yyMMdd"
).
format
(
new
Date
())
+
"-"
+
latestOfDayString
;
}
private
void
validSubmit
(
ScheduleManage
scheduleManage
)
{
/*用户提交 更新预约校验*/
if
(
SessionUtils
.
isSourceFromCustomer
())
{
if
(
ListUtil
.
isEmpty
(
scheduleManage
.
getListScheduleServer
()))
{
throw
new
RRException
(
"校验失败,请重试"
);
}
/*1、校验同类型服务一天只能预约一次*/
scheduleManage
.
getListScheduleServer
().
forEach
(
scheduleServe
->
{
if
(
scheduleServe
.
getMainServeId
()
==
null
)
{
BaseServe
baseServe
=
baseServeMapper
.
selectById
(
scheduleServe
.
getServeId
());
List
<
ScheduleServe
>
typeConflictScheduleServe
=
scheduleServeMapper
.
selectConflictType
(
scheduleManage
.
getScheduledUser
(),
scheduleManage
.
getArriveTime
(),
baseServe
.
getSchTypeId
(),
scheduleManage
.
getId
());
if
(
ListUtil
.
isNotEmpty
(
typeConflictScheduleServe
))
{
throw
new
RRException
(
"同类型服务一天只能预约一次"
);
}
}
});
try
{
/*2、校验提交的预约时间是否可约*/
IdleTimeQuery
query
=
new
IdleTimeQuery
();
//店铺id
query
.
setDepartmentId
(
scheduleManage
.
getDepartmentId
());
//预约日期
query
.
setScheduleDate
(
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
(
scheduleManage
.
getArriveTime
()));
query
.
setListScheduleServer
(
scheduleManage
.
getListScheduleServer
()
.
stream
()
.
map
(
scheduleServeCommand
->
{
ScheduleServeQuery
scheduleServe
=
new
ScheduleServeQuery
();
//时长
scheduleServe
.
setLengthTimeForEndTime
(
scheduleServeCommand
.
getLengthTime
());
//款式id
scheduleServe
.
setProduceId
(
scheduleServeCommand
.
getProduceId
());
//服务id
scheduleServe
.
setServeId
(
scheduleServeCommand
.
getServeId
());
return
scheduleServe
;
})
.
collect
(
Collectors
.
toList
()));
//是否显示详情
query
.
setShowNodeDetail
(
true
);
//查询时间节点
query
.
setDateTimeList
(
Lists
.
newArrayList
(
scheduleManage
.
getArriveTime
().
getTime
()));
//
query
.
setId
(
scheduleManage
.
getId
());
//查询方案树
List
<
IdleTimeDTO
>
idleTimeDTOList
=
this
.
queryIdleTime
(
query
);
//如果时间节点不可用返回false
IdleTimeDTO
idleTimeDTO
=
idleTimeDTOList
.
stream
().
findAny
().
orElseThrow
(
NullPointerException:
:
new
);
if
(!
idleTimeDTO
.
isStatus
())
{
throw
new
RRException
(
"预约时间已过期"
);
}
}
catch
(
RRException
e
)
{
throw
e
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
//新增预约 修改预约时 校验自带款式是否设置
if
(
SessionUtils
.
isSourceFromTechnician
())
{
scheduleManage
.
getListScheduleServer
().
forEach
(
scheduleServe
->
{
if
(
scheduleServe
.
getIsOwnProduce
()
==
1
&&
scheduleServe
.
getOwnProduceId
()
==
null
)
{
throw
new
RRException
(
"请补全自带款式"
);
}
}
);
}
}
/**
* ScheduleManageServiceImpl
* 通过ScheduleServe构建TreeProgram
*
* @param scheduleServe
* @return
*/
private
final
TreeProgram
getNode
(
ScheduleServe
scheduleServe
)
{
TreeProgram
node
=
new
TreeProgram
();
StoreTechnicianPeriod
storeTechnicianPeriod
=
new
StoreTechnicianPeriod
();
storeTechnicianPeriod
.
setTechnicianId
(
scheduleServe
.
getTechnicianId
());
node
.
setStoreTechnicianDTO
(
storeTechnicianPeriod
);
ScheduleServeQuery
scheduleServeQuery
=
new
ScheduleServeQuery
();
scheduleServeQuery
.
setServeId
(
scheduleServe
.
getServeId
());
scheduleServeQuery
.
setProduceId
(
scheduleServe
.
getProduceId
());
scheduleServeQuery
.
setLengthTimeForEndTime
(
scheduleServe
.
getLengthTimeForEndTime
());
Period
period
=
new
Period
(
scheduleServe
.
getStartTime
(),
scheduleServe
.
getEndTime
());
scheduleServeQuery
.
setPeriod
(
period
);
node
.
setScheduleServeQuery
(
scheduleServeQuery
);
return
node
;
}
private
String
getScheduleNo
(
Integer
debarmentId
)
{
//调用店铺服务根据id查询店铺
StoreManage
storeManage
=
storeManageMapper
.
selectById
(
debarmentId
);
//生成预约单号
String
shortCode
=
storeManage
.
getShortCode
();
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyMMdd"
);
String
day
=
simpleDateFormat
.
format
(
new
Date
());
String
lastOfDayString
;
ScheduleManage
lastOfDay
=
scheduleManageMapper
.
lastOfDay
();
//第一单
if
(
lastOfDay
==
null
)
{
lastOfDayString
=
"0001"
;
}
//累加
else
{
lastOfDayString
=
String
.
format
(
"%04d"
,
(
Integer
.
parseInt
(
lastOfDay
.
getScheduledNo
().
substring
(
lastOfDay
.
getScheduledNo
().
length
()
-
4
))
+
1
));
}
return
shortCode
+
day
+
lastOfDayString
;
}
@Override
public
void
submitSchedule
(
SubmitScheduleCommand
cmd
)
{
...
...
@@ -916,14 +742,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
insertScheduleServeList
.
forEach
(
scheduleServeMapper:
:
insert
);
updateScheduleServeList
.
forEach
(
scheduleServeMapper:
:
updateById
);
// //数据库死锁
// scheduleServeList.forEach(scheduleServe -> {
// if (scheduleServe.getId() != null) {
// scheduleServeMapper.updateById(scheduleServe);
// } else {
// scheduleServeMapper.insert(scheduleServe);
// }
// });
List
<
Integer
>
removeIds
=
oldScheduleServeIds
.
stream
().
filter
(
id
->
!
scheduleServeList
.
stream
().
map
(
ScheduleServe:
:
getId
).
collect
(
Collectors
.
toList
()).
contains
(
id
)).
collect
(
Collectors
.
toList
());
if
(
ListUtil
.
isNotEmpty
(
removeIds
))
{
scheduleServeMapper
.
deleteBatchIds
(
removeIds
);
...
...
@@ -1128,9 +947,12 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
query
.
setLatitude
(
23.14084243774414
);
}
/*1、查询闲时折扣*/
IPage
<
LeisureScheduleServeResp
>
page
=
new
Page
<>(
query
.
getPageNum
(),
query
.
getPageSize
());
page
=
scheduleManageMapper
.
queryPageLeisureScheduleServe
(
page
,
query
.
getLatitude
(),
query
.
getLongitude
());
/*算距离*/
page
.
getRecords
().
forEach
(
leisureScheduleServeResp
->
{
leisureScheduleServeResp
.
setDistance
(
MapDistanceUtils
.
getDistance
(
query
.
getLatitude
().
toString
(),
query
.
getLongitude
().
toString
(),
...
...
@@ -1153,15 +975,23 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
return
page
;
}
/**
* 查询闲时可以做服务的美甲师
*
* @param leisureScheduleServeResp
* @return
* @throws ParseException
*/
private
List
<
StoreTechnician
>
queryLeisureTechnician
(
LeisureScheduleServeResp
leisureScheduleServeResp
)
throws
ParseException
{
//闲时服务
BaseServe
baseServe
=
baseServeMapper
.
selectById
(
leisureScheduleServeResp
.
getServeId
());
//服务开始时间
LocalDateTime
startTime
=
leisureScheduleServeResp
.
getDateTime
();
//服务结束时间
LocalDateTime
endTime
=
startTime
.
plusMinutes
(
baseServe
.
getServiceDuration
()).
plusMinutes
(
60
);
return
this
.
query
Leisur
eTechnician
(
leisureScheduleServeResp
.
getDepartmentId
(),
baseServe
.
getId
(),
startTime
,
endTime
);
return
this
.
query
Availabl
eTechnician
(
leisureScheduleServeResp
.
getDepartmentId
(),
baseServe
.
getId
(),
startTime
,
endTime
);
}
private
final
ProducePromotionTimeMapper
producePromotionTimeMapper
;
/**
* 参数补全
*
...
...
@@ -1641,4 +1471,155 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
}
return
3
;
}
private
void
addLeisureTechServe
(
List
<
LeisureTechServe
>
leisureTechServeList
,
Integer
technicianId
,
Integer
serveId
)
{
leisureTechServeList
.
stream
()
.
filter
(
leisureTechServe
->
leisureTechServe
.
getServeId
().
equals
(
serveId
))
.
findAny
()
.
map
(
leisureTechServe
->
leisureTechServe
.
getTechnicianIdList
().
add
(
technicianId
))
.
orElseGet
(()
->
{
LeisureTechServe
leisureTechServe
=
new
LeisureTechServe
();
leisureTechServe
.
setServeId
(
serveId
);
Set
<
Integer
>
set
=
new
HashSet
<>();
set
.
add
(
technicianId
);
leisureTechServe
.
setTechnicianIdList
(
set
);
leisureTechServeList
.
add
(
leisureTechServe
);
return
null
;
});
}
/**
* 店铺短码-服务短码(s)-美甲师短码-时间-4位最大单号
*
* @param departmentId
* @param scheduleId
* @return
*/
private
String
getOrderNo
(
Integer
departmentId
,
Integer
scheduleId
)
{
StoreManage
storeManage
=
storeManageMapper
.
selectById
(
departmentId
);
List
<
ScheduleServe
>
scheduleServeList
=
scheduleServeMapper
.
selectList
(
new
LambdaQueryWrapper
<
ScheduleServe
>().
eq
(
ScheduleServe:
:
getSchId
,
scheduleId
));
BaseServe
baseServe
=
baseServeMapper
.
selectById
(
scheduleServeList
.
get
(
0
).
getServeId
());
BaseType
baseType
=
baseTypeService
.
getById
(
baseServe
.
getTypeId
());
StoreTechnician
storeTechnician
=
storeTechnicianMapper
.
selectById
(
scheduleServeList
.
get
(
0
).
getTechnicianId
());
OrderManage
latestOfDay
=
orderManageMapper
.
latestOfDay
();
String
latestOfDayString
;
//
if
(
latestOfDay
==
null
)
{
latestOfDayString
=
"0001"
;
}
//
else
{
latestOfDayString
=
String
.
format
(
"%04d"
,
Integer
.
parseInt
(
latestOfDay
.
getOrderNo
().
substring
(
latestOfDay
.
getOrderNo
().
length
()
-
4
))
+
1
);
}
//
return
(
storeManage
.
getShortCode
()
==
null
?
"NNN"
:
storeManage
.
getShortCode
())
+
"-"
+
(
StringUtils
.
isEmpty
(
baseType
.
getShortCode
())
?
"NNN"
:
baseType
.
getShortCode
())
+
"-"
+
(
StringUtils
.
isEmpty
(
storeTechnician
.
getShortCode
())
?
"NNN"
:
storeTechnician
.
getShortCode
())
+
"-"
+
new
SimpleDateFormat
(
"yyMMdd"
).
format
(
new
Date
())
+
"-"
+
latestOfDayString
;
}
private
void
validSubmit
(
ScheduleManage
scheduleManage
)
{
/*用户提交 更新预约校验*/
if
(
SessionUtils
.
isSourceFromCustomer
())
{
if
(
ListUtil
.
isEmpty
(
scheduleManage
.
getListScheduleServer
()))
{
throw
new
RRException
(
"校验失败,请重试"
);
}
/*1、校验同类型服务一天只能预约一次*/
scheduleManage
.
getListScheduleServer
().
forEach
(
scheduleServe
->
{
if
(
scheduleServe
.
getMainServeId
()
==
null
)
{
BaseServe
baseServe
=
baseServeMapper
.
selectById
(
scheduleServe
.
getServeId
());
List
<
ScheduleServe
>
typeConflictScheduleServe
=
scheduleServeMapper
.
selectConflictType
(
scheduleManage
.
getScheduledUser
(),
scheduleManage
.
getArriveTime
(),
baseServe
.
getSchTypeId
(),
scheduleManage
.
getId
());
if
(
ListUtil
.
isNotEmpty
(
typeConflictScheduleServe
))
{
throw
new
RRException
(
"同类型服务一天只能预约一次"
);
}
}
});
try
{
/*2、校验提交的预约时间是否可约*/
IdleTimeQuery
query
=
new
IdleTimeQuery
();
//店铺id
query
.
setDepartmentId
(
scheduleManage
.
getDepartmentId
());
//预约日期
query
.
setScheduleDate
(
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
(
scheduleManage
.
getArriveTime
()));
query
.
setListScheduleServer
(
scheduleManage
.
getListScheduleServer
()
.
stream
()
.
map
(
scheduleServeCommand
->
{
ScheduleServeQuery
scheduleServe
=
new
ScheduleServeQuery
();
//时长
scheduleServe
.
setLengthTimeForEndTime
(
scheduleServeCommand
.
getLengthTime
());
//款式id
scheduleServe
.
setProduceId
(
scheduleServeCommand
.
getProduceId
());
//服务id
scheduleServe
.
setServeId
(
scheduleServeCommand
.
getServeId
());
return
scheduleServe
;
})
.
collect
(
Collectors
.
toList
()));
//是否显示详情
query
.
setShowNodeDetail
(
true
);
//查询时间节点
query
.
setDateTimeList
(
Lists
.
newArrayList
(
scheduleManage
.
getArriveTime
().
getTime
()));
//
query
.
setId
(
scheduleManage
.
getId
());
//查询方案树
List
<
IdleTimeDTO
>
idleTimeDTOList
=
this
.
queryIdleTime
(
query
);
//如果时间节点不可用返回false
IdleTimeDTO
idleTimeDTO
=
idleTimeDTOList
.
stream
().
findAny
().
orElseThrow
(
NullPointerException:
:
new
);
if
(!
idleTimeDTO
.
isStatus
())
{
throw
new
RRException
(
"预约时间已过期"
);
}
}
catch
(
RRException
e
)
{
throw
e
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
//新增预约 修改预约时 校验自带款式是否设置
if
(
SessionUtils
.
isSourceFromTechnician
())
{
scheduleManage
.
getListScheduleServer
().
forEach
(
scheduleServe
->
{
if
(
scheduleServe
.
getIsOwnProduce
()
==
1
&&
scheduleServe
.
getOwnProduceId
()
==
null
)
{
throw
new
RRException
(
"请补全自带款式"
);
}
}
);
}
}
private
String
getScheduleNo
(
Integer
debarmentId
)
{
//调用店铺服务根据id查询店铺
StoreManage
storeManage
=
storeManageMapper
.
selectById
(
debarmentId
);
//生成预约单号
String
shortCode
=
storeManage
.
getShortCode
();
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyMMdd"
);
String
day
=
simpleDateFormat
.
format
(
new
Date
());
String
lastOfDayString
;
ScheduleManage
lastOfDay
=
scheduleManageMapper
.
lastOfDay
();
//第一单
if
(
lastOfDay
==
null
)
{
lastOfDayString
=
"0001"
;
}
//累加
else
{
lastOfDayString
=
String
.
format
(
"%04d"
,
(
Integer
.
parseInt
(
lastOfDay
.
getScheduledNo
().
substring
(
lastOfDay
.
getScheduledNo
().
length
()
-
4
))
+
1
));
}
return
shortCode
+
day
+
lastOfDayString
;
}
}
src/main/java/com/gogirl/application/store/store/StoreClassesTechnicianService.java
View file @
78d8b38c
...
...
@@ -13,15 +13,6 @@ import java.util.List;
public
interface
StoreClassesTechnicianService
extends
IService
<
StoreClassesTechnician
>
{
/**
* 查询美甲师排班表
*
* @param scheduledId 预约id
* @param departmentId 店铺id
* @param days day like '2020-02-02'
* @return
*/
List
<
StoreClassesTechnician
>
listClassesTechnician
(
Integer
scheduledId
,
Integer
departmentId
,
String
days
);
/**
...
...
src/main/java/com/gogirl/application/store/store/StoreTechnicianService.java
View file @
78d8b38c
...
...
@@ -10,7 +10,6 @@ public interface StoreTechnicianService extends IService<StoreTechnician> {
List
<
StoreTechnician
>
listTechnicianForPage
(
StoreTechnician
technicianManage
);
/**
* 美甲师登陆
*
...
...
src/main/java/com/gogirl/application/store/store/impl/StoreClassesTechnicianServiceImpl.java
View file @
78d8b38c
...
...
@@ -44,10 +44,6 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT
private
final
GogirlTokenService
gogirlTokenService
;
@Override
public
List
<
StoreClassesTechnician
>
listClassesTechnician
(
Integer
scheduledId
,
Integer
departmentId
,
String
days
)
{
return
storeClassesTechnicianMapper
.
listClassesTechnician
(
scheduledId
,
departmentId
,
days
);
}
@Override
public
List
<
StoreClassesTechnician
>
listClassesTechnicianDetail
(
Integer
userId
,
String
days
)
{
...
...
@@ -165,9 +161,5 @@ public class StoreClassesTechnicianServiceImpl extends ServiceImpl<StoreClassesT
private
final
StoreTechnicianMapper
storeTechnicianMapper
;
// @Override
// public List<StoreTechnician> queryDayTechnicianClassesList(Integer departmentId, Date day) {
// return ;
// }
}
src/main/java/com/gogirl/application/store/store/impl/StoreTechnicianServiceImpl.java
View file @
78d8b38c
...
...
@@ -3,7 +3,6 @@ package com.gogirl.application.store.store.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.gogirl.application.order.serve.OrderManageService
;
import
com.gogirl.application.store.store.StoreTechnicianService
;
import
com.gogirl.application.xcx.GogirlTokenService
;
import
com.gogirl.application.xcx.WechatService
;
...
...
@@ -37,7 +36,6 @@ public class StoreTechnicianServiceImpl extends ServiceImpl<StoreTechnicianMappe
private
final
GogirlTokenService
gogirlTokenService
;
private
final
StoreManageMapper
storeManageMapper
;
private
final
OrderManageService
orderManageService
;
@Override
public
List
<
StoreTechnician
>
listTechnicianForPage
(
StoreTechnician
technicianManage
)
{
...
...
src/main/java/com/gogirl/domain/store/store/StoreClassesTechnician.java
View file @
78d8b38c
...
...
@@ -14,9 +14,6 @@ import lombok.Data;
import
java.util.Date
;
import
java.util.List
;
/**
* Created by yinyong on 2018/9/20.
*/
@ApiModel
(
"每天排班记录"
)
@TableName
(
"store_classes_technician"
)
@Builder
...
...
@@ -36,18 +33,22 @@ public class StoreClassesTechnician {
@ApiModelProperty
(
"班次id"
)
private
Integer
classes
;
@ApiModelProperty
(
""
)
private
Integer
status
;
/**
* 非数据库
id
* 非数据库
字段
*/
@ApiModelProperty
(
"班次"
)
@TableField
(
exist
=
false
)
private
StoreClasses
classesManage
;
@ApiModelProperty
(
"美甲师"
)
@TableField
(
exist
=
false
)
private
StoreTechnician
technicianManage
;
@ApiModelProperty
(
"美甲师正在做的服务"
)
@TableField
(
exist
=
false
)
private
List
<
ScheduleServe
>
listScheduleServe
;
}
src/main/java/com/gogirl/interfaces/order/serve/ScheduleManageController.java
View file @
78d8b38c
...
...
@@ -70,8 +70,7 @@ public class ScheduleManageController {
@ApiOperation
(
value
=
"查询显示预约时间列表"
)
@GetMapping
(
"/customer/schedule/queryLeisureTime"
)
public
JsonResult
<
List
<
IdleTimeDTO
>>
queryLeisureTime
(
@RequestHeader
String
token
,
@RequestParam
Integer
departmentId
,
public
JsonResult
<
List
<
IdleTimeDTO
>>
queryLeisureTime
(
@RequestParam
Integer
departmentId
,
@RequestParam
String
scheduleDate
)
throws
ParseException
{
List
<
IdleTimeDTO
>
idleTimeDTOList
=
scheduleManageService
.
queryLeisureTime
(
departmentId
,
scheduleDate
);
return
JsonResult
.
success
(
idleTimeDTOList
);
...
...
@@ -244,8 +243,7 @@ public class ScheduleManageController {
@ApiOperation
(
"更新预约服务状态"
)
@GetMapping
(
"/technician/schedule/updateScheduledServeStatus"
)
public
JsonResult
<
Void
>
updateScheduledServeStatus
(
@RequestHeader
String
token
,
@RequestParam
Integer
scheduleServeId
,
public
JsonResult
<
Void
>
updateScheduledServeStatus
(
@RequestParam
Integer
scheduleServeId
,
@RequestParam
Integer
status
,
@RequestParam
Integer
forceLeisureConfig
)
{
ScheduleServe
scheduleServe
=
scheduleServeService
.
getById
(
scheduleServeId
);
...
...
@@ -266,8 +264,7 @@ public class ScheduleManageController {
@ApiOperation
(
"当前服务是否在闲时间范围内 1-是 2-否"
)
@GetMapping
(
"/technician/schedule/getScheduledServeLeisure"
)
public
JsonResult
<
Integer
>
getScheduledServeLeisure
(
@RequestHeader
String
token
,
@RequestParam
Integer
scheduleServeId
)
{
public
JsonResult
<
Integer
>
getScheduledServeLeisure
(
@RequestParam
Integer
scheduleServeId
)
{
Integer
result
=
scheduleManageService
.
getScheduledServeLeisure
(
scheduleServeId
);
return
JsonResult
.
success
(
result
);
}
...
...
@@ -284,7 +281,7 @@ public class ScheduleManageController {
@ApiOperation
(
"查询闲时美甲师"
)
@PostMapping
(
"/customer/queryLeisureTechnician"
)
public
JsonResult
<
StoreTechnician
>
queryLeisureTechnician
(
@RequestBody
QueryLeisureTechnicianReq
req
)
throws
ParseException
{
scheduleManageService
.
query
Leisur
eTechnician
(
req
.
getDepartmentId
(),
req
.
getServeId
(),
req
.
getStartTime
(),
req
.
getEndTime
());
scheduleManageService
.
query
Availabl
eTechnician
(
req
.
getDepartmentId
(),
req
.
getServeId
(),
req
.
getStartTime
(),
req
.
getEndTime
());
return
JsonResult
.
success
();
}
}
src/main/java/com/gogirl/shared/order/StoreTechnicianPeriod.java
View file @
78d8b38c
...
...
@@ -36,6 +36,9 @@ public class StoreTechnicianPeriod implements Serializable {
*/
private
String
grade
;
@JsonIgnore
private
StoreTechnician
storeTechnician
;
public
StoreTechnicianPeriod
()
{
}
...
...
@@ -47,6 +50,7 @@ public class StoreTechnicianPeriod implements Serializable {
this
.
name
=
storeTechnician
.
getName
();
this
.
picturePath
=
storeTechnician
.
getPicturePath
();
this
.
grade
=
storeTechnician
.
getGrade
();
this
.
storeTechnician
=
storeTechnician
}
}
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