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 d679e466
authored
Oct 30, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop-16542' into 'develop'
小队容量 See merge request !348
2 parents
3e5f4cc8
0fe86cab
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
84 additions
and
10 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 @
d679e46
...
...
@@ -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 @
d679e46
...
...
@@ -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 @
d679e46
...
...
@@ -83,7 +83,6 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
@Override
public
Result
<
CapacityQueryDTO
.
Result
>
matchCapacityData
(
List
<
CapacityQueryDTO
.
Service
>
services
,
Location
location
,
LocalDate
beginDate
,
LocalDate
endDate
)
{
//转换品牌、产品类型、 技能代码为对应汉字
//1:根据经纬度分单获取面
FendanDTO
fendanDTO
=
new
FendanDTO
();
final
String
addressLongLat
=
location
.
getLongitude
()
+
","
+
location
.
getLatitude
();
...
...
@@ -106,10 +105,9 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
final
String
groupId
=
groupIdList
.
get
(
0
);
//3. 查询分站下拥有对应技能的工程师(排重) 技能码转换为对应的技能汉字
List
<
CapacityQueryDTO
.
Service
>
convertServices
=
services
;
List
<
SkillInfoEntity
>
querySkillGroup
=
new
ArrayList
<>();
Set
<
EngineerInfoEntity
>
allFulfillEngineer
=
Sets
.
newConcurrentHashSet
();
for
(
CapacityQueryDTO
.
Service
service
:
convertS
ervices
)
{
for
(
CapacityQueryDTO
.
Service
service
:
s
ervices
)
{
Set
<
EngineerInfoEntity
>
engineerInfoEntities
=
engineerInfoDao
.
listByBrandAndTypeAndSkillAndGroupId
(
service
.
getBrand
(),
service
.
getProductType
(),
service
.
getServiceType
(),
groupId
);
...
...
@@ -172,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
->
{
...
...
@@ -190,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
))
{
...
...
@@ -212,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