Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
yangxiujun
/
paidan_demo
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 0fe86cab
authored
Oct 30, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(容量): 小队容量查询具体实现
1 parent
2f5eaebd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
7 deletions
project-order/src/main/java/com/dituhui/pea/order/dao/EngineerInfoDao.java
project-order/src/main/java/com/dituhui/pea/order/dto/param/CapacityQueryDTO.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/CapacityQueryServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/dao/EngineerInfoDao.java
View file @
0fe86ca
...
...
@@ -55,6 +55,24 @@ public interface EngineerInfoDao extends JpaRepository<EngineerInfoEntity, Integ
Set
<
EngineerInfoEntity
>
listByBrandAndTypeAndSkillAndGroupId
(
@Param
(
"brand"
)
String
brand
,
@Param
(
"productType"
)
String
productType
,
@Param
(
"skill"
)
String
skill
,
@Param
(
"groupId"
)
String
groupId
);
/**
* 根据技能、产品、产品类型 工作队获取分站下用户对应技能的技术员
*
* @param brand 产品
* @param productType 产品类型
* @param skill 技能
* @param teamId 工作队ID
* @return 工程师信息
*/
@Query
(
value
=
"SELECT ei.* FROM skill_info si LEFT JOIN skill_group sg ON sg.skill_group_code =si.skill_group_code \n"
+
" LEFT JOIN engineer_skill_group esg ON sg.skill_group_code = esg.skill_group_code \n"
+
" LEFT JOIN engineer_info ei ON esg.engineer_code = ei.engineer_code\n"
+
" LEFT JOIN org_team_engineer ote ON ote.engineer_code = ei.engineer_code \n"
+
" WHERE si.brand = :brand AND si.type= :productType AND si.skill = :skill \n"
+
" AND ote.team_id = :teamId "
,
nativeQuery
=
true
)
Set
<
EngineerInfoEntity
>
listByBrandAndTypeAndSkillAndTeamId
(
@Param
(
"brand"
)
String
brand
,
@Param
(
"productType"
)
String
productType
,
@Param
(
"skill"
)
String
skill
,
@Param
(
"teamId"
)
String
teamId
);
@Query
(
value
=
"SELECT ei.* from engineer_info ei left join engineer_skill_group esg on ei.engineer_code = esg.engineer_code "
+
"left join skill_info si on si.skill_group_code = esg.skill_group_code left join map_layer_customize mlc on mlc.layer_id = si.layer_id "
+
...
...
project-order/src/main/java/com/dituhui/pea/order/dto/param/CapacityQueryDTO.java
View file @
0fe86ca
...
...
@@ -9,7 +9,6 @@ import org.springframework.validation.annotation.Validated;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
import
java.util.List
;
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/CapacityQueryServiceImpl.java
View file @
0fe86ca
...
...
@@ -170,13 +170,14 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
for
(
TimeSliceEntity
targetTimeSlice
:
typeTimeSlice
)
{
final
LocalTime
targetStartTime
=
LocalTime
.
parse
(
targetTimeSlice
.
getStart
(),
DateUtil
.
TIME_FORMATTER
);
final
LocalTime
targetEndTime
=
LocalTime
.
parse
(
targetTimeSlice
.
getEnd
(),
DateUtil
.
TIME_FORMATTER
);
CapacityQueryDTO
.
Segment
segment
=
caculateTargetTimeSlice
(
totalTakeTime
,
targetTimeSlice
,
engineerTimeSlice
,
targetStartTime
,
targetEndTime
,
date
);
CapacityQueryDTO
.
Segment
segment
=
caculateTargetTimeSlice
(
totalTakeTime
,
targetTimeSlice
.
getName
(),
engineerTimeSlice
,
targetStartTime
,
targetEndTime
,
date
);
segments
.
add
(
segment
);
}
return
segments
;
}
private
static
CapacityQueryDTO
.
Segment
caculateTargetTimeSlice
(
int
totalTakeTime
,
TimeSliceEntity
targetTimeSlic
e
,
private
static
CapacityQueryDTO
.
Segment
caculateTargetTimeSlice
(
int
totalTakeTime
,
String
timeSliceNam
e
,
List
<
CapacityEngineerSliceUsedEntity
>
engineerTimeSlice
,
LocalTime
targetStartTime
,
LocalTime
targetEndTime
,
LocalDate
targetDate
)
{
List
<
CapacityEngineerSliceUsedEntity
>
collect
=
engineerTimeSlice
.
stream
().
filter
(
t
->
{
...
...
@@ -188,7 +189,7 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
}).
collect
(
Collectors
.
toList
());
CapacityQueryDTO
.
Segment
segment
=
new
CapacityQueryDTO
.
Segment
();
segment
.
setName
(
t
argetTimeSlice
.
getName
()
);
segment
.
setName
(
t
imeSliceName
);
segment
.
setEndTime
(
DateUtil
.
toDate
(
LocalDateTime
.
of
(
targetDate
,
targetEndTime
)));
segment
.
setBeginTime
(
DateUtil
.
toDate
(
LocalDateTime
.
of
(
targetDate
,
targetStartTime
)));
if
(!
CollectionUtils
.
isEmpty
(
collect
))
{
...
...
@@ -210,13 +211,71 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
}
@Override
public
CapacityQueryDTO
.
Segment
queryCapacityByTeam
(
String
teamId
,
List
<
CapacityQueryDTO
.
Service
>
services
,
LocalDate
targetDate
,
LocalTime
startTime
,
LocalTime
endTime
)
{
return
null
;
public
CapacityQueryDTO
.
Segment
queryCapacityByTeam
(
String
teamId
,
List
<
CapacityQueryDTO
.
Service
>
services
,
LocalDate
targetDate
,
LocalTime
startTime
,
LocalTime
endTime
)
{
List
<
SkillInfoEntity
>
querySkillGroup
=
new
ArrayList
<>();
Set
<
EngineerInfoEntity
>
allFulfillEngineer
=
Sets
.
newConcurrentHashSet
();
for
(
CapacityQueryDTO
.
Service
service
:
services
)
{
Set
<
EngineerInfoEntity
>
engineerInfoEntities
=
engineerInfoDao
.
listByBrandAndTypeAndSkillAndTeamId
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
(),
teamId
);
//查询对应的技能信息
SkillInfoEntity
skillInfo
=
skillInfoDao
.
getByBrandAndTypeAndSkill
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
());
querySkillGroup
.
add
(
skillInfo
);
allFulfillEngineer
.
addAll
(
engineerInfoEntities
);
}
List
<
CapacityEngineerSliceUsedEntity
>
allEngineerTimeSlice
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
engineerInfo
:
allFulfillEngineer
)
{
List
<
CapacityEngineerSliceUsedEntity
>
engineerTimeSlice
=
engineerSliceUsedCapacityDao
.
findByWorkdayAndEngineerCode
(
DateTimeUtil
.
formatDate
(
targetDate
),
engineerInfo
.
getEngineerCode
());
allEngineerTimeSlice
.
addAll
(
engineerTimeSlice
);
}
log
.
info
(
"[matchCapacityData]【符合技能要求的工程师总数为:{} 个】"
,
allFulfillEngineer
.
size
());
//计算所有查询技能的所需耗时 (querySkillGroup)
final
int
totalTakeTime
=
querySkillGroup
.
stream
()
.
mapToInt
(
SkillInfoEntity:
:
getTakeTime
)
.
sum
();
return
caculateTargetTimeSlice
(
totalTakeTime
,
"时间段"
,
allEngineerTimeSlice
,
startTime
,
endTime
,
targetDate
);
}
@Override
public
CapacityQueryDTO
.
Segment
queryCapacityByTeam
(
String
teamId
,
List
<
CapacityQueryDTO
.
Service
>
services
,
LocalDate
targetDate
)
{
return
null
;
List
<
SkillInfoEntity
>
querySkillGroup
=
new
ArrayList
<>();
Set
<
EngineerInfoEntity
>
allFulfillEngineer
=
Sets
.
newConcurrentHashSet
();
for
(
CapacityQueryDTO
.
Service
service
:
services
)
{
Set
<
EngineerInfoEntity
>
engineerInfoEntities
=
engineerInfoDao
.
listByBrandAndTypeAndSkillAndTeamId
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
(),
teamId
);
//查询对应的技能信息
SkillInfoEntity
skillInfo
=
skillInfoDao
.
getByBrandAndTypeAndSkill
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
());
querySkillGroup
.
add
(
skillInfo
);
allFulfillEngineer
.
addAll
(
engineerInfoEntities
);
}
List
<
CapacityEngineerSliceUsedEntity
>
allEngineerTimeSlice
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
engineerInfo
:
allFulfillEngineer
)
{
List
<
CapacityEngineerSliceUsedEntity
>
engineerTimeSlice
=
engineerSliceUsedCapacityDao
.
findByWorkdayAndEngineerCode
(
DateTimeUtil
.
formatDate
(
targetDate
),
engineerInfo
.
getEngineerCode
());
allEngineerTimeSlice
.
addAll
(
engineerTimeSlice
);
}
log
.
info
(
"[matchCapacityData]【符合技能要求的工程师总数为:{} 个】"
,
allFulfillEngineer
.
size
());
//计算所有查询技能的所需耗时 (querySkillGroup)
final
int
totalTakeTime
=
querySkillGroup
.
stream
()
.
mapToInt
(
SkillInfoEntity:
:
getTakeTime
)
.
sum
();
//获取工作队信息
OrgTeamEntity
team
=
orgTeamDao
.
getByTeamId
(
teamId
);
String
workOn
=
String
.
format
(
"%s:00"
,
team
.
getWorkOn
());
String
workOff
=
String
.
format
(
"%s:00"
,
team
.
getWorkOff
());
LocalTime
startTime
=
LocalTime
.
parse
(
workOn
,
DateUtil
.
TIME_FORMATTER
);
LocalTime
endTime
=
LocalTime
.
parse
(
workOff
,
DateUtil
.
TIME_FORMATTER
);
return
caculateTargetTimeSlice
(
totalTakeTime
,
"时间段"
,
allEngineerTimeSlice
,
startTime
,
endTime
,
targetDate
);
}
@Override
...
...
Write
Preview
Markdown
is supported
Attach a file
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 post a comment