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 6e04d794
authored
Oct 26, 2023
by
huangjinxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:格式化代码
1 parent
b9ee0b92
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
593 additions
and
593 deletions
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
View file @
6e04d79
...
@@ -28,9 +28,9 @@ import java.util.*;
...
@@ -28,9 +28,9 @@ import java.util.*;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
interface
GroupTag
{
interface
GroupTag
{
// 订单分类tag
// 订单分类tag
String
getGroupTag
(
OrderInfoEntity
order
);
String
getGroupTag
(
OrderInfoEntity
order
);
}
}
...
@@ -38,625 +38,625 @@ interface GroupTag {
...
@@ -38,625 +38,625 @@ interface GroupTag {
@Service
@Service
public
class
DispatchServiceImpl
implements
DispatchService
{
public
class
DispatchServiceImpl
implements
DispatchService
{
@Autowired
@Autowired
private
OrderInfoDao
orderInfoDao
;
private
OrderInfoDao
orderInfoDao
;
@Autowired
@Autowired
private
OrgTeamDao
orgTeamDao
;
private
OrgTeamDao
orgTeamDao
;
@Autowired
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
@Autowired
private
SkillInfoDao
skillInfoDao
;
private
SkillInfoDao
skillInfoDao
;
@Autowired
@Autowired
private
CapacityEngineerStatDao
capacityEngineerStatDao
;
private
CapacityEngineerStatDao
capacityEngineerStatDao
;
@Autowired
@Autowired
private
EntityManager
entityManager
;
private
EntityManager
entityManager
;
@Transactional
@Transactional
@Override
@Override
public
Result
<?>
getDispatchOrderList
(
DispatchOrderListReq
reqDTO
)
{
public
Result
<?>
getDispatchOrderList
(
DispatchOrderListReq
reqDTO
)
{
// 获取派工台订单列表
// 获取派工台订单列表
// 获取技能信息
// 获取技能信息
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
=
this
.
querySkillInfo
();
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
=
this
.
querySkillInfo
();
// 获取工单列表
// 获取工单列表
List
<
OrderInfoEntity
>
orders
=
this
.
queryOrders
(
reqDTO
);
List
<
OrderInfoEntity
>
orders
=
this
.
queryOrders
(
reqDTO
);
// 获取分组标签
// 获取分组标签
GroupTag
gt
=
new
GroupTagFactory
().
getGroupTag
(
reqDTO
.
getGroupTagId
());
GroupTag
gt
=
new
GroupTagFactory
().
getGroupTag
(
reqDTO
.
getGroupTagId
());
List
<
DispatchOrderListResp
.
Order
>
items
=
new
ArrayList
<>();
List
<
DispatchOrderListResp
.
Order
>
items
=
new
ArrayList
<>();
for
(
OrderInfoEntity
o
:
orders
)
{
for
(
OrderInfoEntity
o
:
orders
)
{
DispatchOrderListResp
.
Order
item
=
new
DispatchOrderListResp
.
Order
();
DispatchOrderListResp
.
Order
item
=
new
DispatchOrderListResp
.
Order
();
item
.
setOrderId
(
o
.
getOrderId
());
item
.
setOrderId
(
o
.
getOrderId
());
item
.
setDescription
(
String
.
format
(
"%s:%s-%s-%s\n%s:%s-%s-%s"
,
o
.
getOrderId
(),
o
.
getBrand
(),
o
.
getType
(),
item
.
setDescription
(
String
.
format
(
"%s:%s-%s-%s\n%s:%s-%s-%s"
,
o
.
getOrderId
(),
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
(),
o
.
getName
(),
o
.
getCity
(),
o
.
getCounty
(),
o
.
getAddress
()));
o
.
getSkill
(),
o
.
getName
(),
o
.
getCity
(),
o
.
getCounty
(),
o
.
getAddress
()));
item
.
setBrand
(
o
.
getBrand
());
item
.
setBrand
(
o
.
getBrand
());
item
.
setType
(
o
.
getType
());
item
.
setType
(
o
.
getType
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setApplyNote
(
o
.
getApplyNote
());
item
.
setApplyNote
(
o
.
getApplyNote
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
if
(
skill
!=
null
)
{
if
(
skill
!=
null
)
{
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
}
}
item
.
setName
(
o
.
getName
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setCity
(
o
.
getCity
());
item
.
setCity
(
o
.
getCity
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setCity
(
o
.
getCity
());
item
.
setCity
(
o
.
getCity
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setName
(
o
.
getName
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setExpectTimeDesc
(
o
.
getExpectTimeDesc
());
item
.
setExpectTimeDesc
(
o
.
getExpectTimeDesc
());
item
.
setSource
(
o
.
getSource
());
item
.
setSource
(
o
.
getSource
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
String
[]
tags
=
gt
.
getGroupTag
(
o
).
split
(
"#"
);
String
[]
tags
=
gt
.
getGroupTag
(
o
).
split
(
"#"
);
item
.
setGroupTag
(
tags
[
0
]);
// 设置tag名称
item
.
setGroupTag
(
tags
[
0
]);
// 设置tag名称
item
.
setGroupWeight
(
Integer
.
parseInt
(
tags
[
1
]));
// 设置tag权重
item
.
setGroupWeight
(
Integer
.
parseInt
(
tags
[
1
]));
// 设置tag权重
items
.
add
(
item
);
items
.
add
(
item
);
}
}
DispatchOrderListResp
res
=
new
DispatchOrderListResp
();
DispatchOrderListResp
res
=
new
DispatchOrderListResp
();
res
.
setOrders
(
items
);
res
.
setOrders
(
items
);
return
Result
.
success
(
res
);
return
Result
.
success
(
res
);
}
}
@Transactional
@Transactional
@Override
@Override
public
Result
<?>
getDispatchEngineerOrderList
(
DispatchEngineerOrderListReq
reqDTO
)
throws
BusinessException
{
public
Result
<?>
getDispatchEngineerOrderList
(
DispatchEngineerOrderListReq
reqDTO
)
throws
BusinessException
{
// 派工台技术员预约单列表
// 派工台技术员预约单列表
LocalDate
date
=
TimeUtils
.
IsoDate2LocalDate
(
reqDTO
.
getDate
());
LocalDate
date
=
TimeUtils
.
IsoDate2LocalDate
(
reqDTO
.
getDate
());
// 获取技能信息
// 获取技能信息
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
=
this
.
querySkillInfo
();
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
=
this
.
querySkillInfo
();
// 获取teamIds
// 获取teamIds
List
<
String
>
teamIds
=
this
.
queryOrgTeamIds
(
reqDTO
.
getLevelType
(),
reqDTO
.
getLevelValue
(),
reqDTO
.
getBranchIds
(),
List
<
String
>
teamIds
=
this
.
queryOrgTeamIds
(
reqDTO
.
getLevelType
(),
reqDTO
.
getLevelValue
(),
reqDTO
.
getBranchIds
(),
reqDTO
.
getGroupIds
(),
reqDTO
.
getTeamIds
());
reqDTO
.
getGroupIds
(),
reqDTO
.
getTeamIds
());
if
(
teamIds
.
isEmpty
())
{
if
(
teamIds
.
isEmpty
())
{
throw
new
BusinessException
(
"大区/分部/小组组织结构配置可能错误或缺失,请联系管理员/研发"
);
throw
new
BusinessException
(
"大区/分部/小组组织结构配置可能错误或缺失,请联系管理员/研发"
);
}
}
// 获取engineer列表
// 获取engineer列表
List
<
EngineerInfoEntity
>
engineers
=
this
.
queryEngineers
(
teamIds
,
reqDTO
.
getEngineerCodes
(),
reqDTO
.
getKey
());
List
<
EngineerInfoEntity
>
engineers
=
this
.
queryEngineers
(
teamIds
,
reqDTO
.
getEngineerCodes
(),
reqDTO
.
getKey
());
if
(
engineers
.
isEmpty
())
{
if
(
engineers
.
isEmpty
())
{
// 该group下没有技术员,返回空
// 该group下没有技术员,返回空
log
.
warn
(
"没有找到技术员"
);
log
.
warn
(
"没有找到技术员"
);
DispatchEngineerOrderListResp
res
=
new
DispatchEngineerOrderListResp
();
DispatchEngineerOrderListResp
res
=
new
DispatchEngineerOrderListResp
();
List
<
DispatchEngineerOrderListResp
.
EngineerInfo
>
egs
=
new
ArrayList
<>();
List
<
DispatchEngineerOrderListResp
.
EngineerInfo
>
egs
=
new
ArrayList
<>();
res
.
setEngineers
(
egs
);
res
.
setEngineers
(
egs
);
return
Result
.
success
(
res
);
return
Result
.
success
(
res
);
}
}
// 获取engineerCodes
// 获取engineerCodes
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
List
<
String
>
engineerCodes
=
engineers
.
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
// 获取技术员已指派单列表
// 获取技术员已指派单列表
Map
<
String
,
List
<
OrderInfoEntity
>>
engineerOrders
=
this
.
queryEngineerOrders
(
engineerCodes
,
date
);
Map
<
String
,
List
<
OrderInfoEntity
>>
engineerOrders
=
this
.
queryEngineerOrders
(
engineerCodes
,
date
);
// 获取技术员的容量
// 获取技术员的容量
HashMap
<
String
,
CapacityEngineerStatEntity
>
engineerCap
=
this
.
queryCapacityEngineerStat
(
engineerCodes
,
reqDTO
.
getDate
());
HashMap
<
String
,
CapacityEngineerStatEntity
>
engineerCap
=
this
.
queryCapacityEngineerStat
(
engineerCodes
,
reqDTO
.
getDate
());
// 获取技术员已指派单列表
// 获取技术员已指派单列表
List
<
DispatchEngineerOrderListResp
.
EngineerInfo
>
egs
=
new
ArrayList
<>();
List
<
DispatchEngineerOrderListResp
.
EngineerInfo
>
egs
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
for
(
EngineerInfoEntity
e
:
engineers
)
{
List
<
DispatchEngineerOrderListResp
.
OrderInfo
>
items
=
new
ArrayList
<>();
List
<
DispatchEngineerOrderListResp
.
OrderInfo
>
items
=
new
ArrayList
<>();
// 技术员已指派的订单列表
// 技术员已指派的订单列表
List
<
OrderInfoEntity
>
records
=
engineerOrders
.
getOrDefault
(
e
.
getEngineerCode
(),
new
ArrayList
<>());
List
<
OrderInfoEntity
>
records
=
engineerOrders
.
getOrDefault
(
e
.
getEngineerCode
(),
new
ArrayList
<>());
for
(
OrderInfoEntity
o
:
records
)
{
for
(
OrderInfoEntity
o
:
records
)
{
DispatchEngineerOrderListResp
.
OrderInfo
item
=
new
DispatchEngineerOrderListResp
.
OrderInfo
();
DispatchEngineerOrderListResp
.
OrderInfo
item
=
new
DispatchEngineerOrderListResp
.
OrderInfo
();
item
.
setOrderId
(
o
.
getOrderId
());
item
.
setOrderId
(
o
.
getOrderId
());
item
.
setDescription
(
String
.
format
(
"%s:%s-%s-%s\n%s:%s-%s-%s"
,
o
.
getOrderId
(),
o
.
getBrand
(),
o
.
getType
(),
item
.
setDescription
(
String
.
format
(
"%s:%s-%s-%s\n%s:%s-%s-%s"
,
o
.
getOrderId
(),
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
(),
o
.
getName
(),
o
.
getCity
(),
o
.
getCounty
(),
o
.
getAddress
()));
o
.
getSkill
(),
o
.
getName
(),
o
.
getCity
(),
o
.
getCounty
(),
o
.
getAddress
()));
item
.
setBrand
(
o
.
getBrand
());
item
.
setBrand
(
o
.
getBrand
());
item
.
setType
(
o
.
getType
());
item
.
setType
(
o
.
getType
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setApplyNote
(
o
.
getApplyNote
());
item
.
setApplyNote
(
o
.
getApplyNote
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
if
(
skill
!=
null
)
{
if
(
skill
!=
null
)
{
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
}
}
item
.
setName
(
o
.
getName
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setCity
(
o
.
getCity
());
item
.
setCity
(
o
.
getCity
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setCity
(
o
.
getCity
());
item
.
setCity
(
o
.
getCity
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setName
(
o
.
getName
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setPhone
(
o
.
getPhone
());
String
time
=
TimeUtils
.
localDateTime2String
(
o
.
getPlanStartTime
(),
"HH:mm"
);
String
time
=
TimeUtils
.
localDateTime2String
(
o
.
getPlanStartTime
(),
"HH:mm"
);
String
timeSlot
=
this
.
parseTimeSlot
(
o
.
getPlanStartTime
());
String
timeSlot
=
this
.
parseTimeSlot
(
o
.
getPlanStartTime
());
item
.
setExpectTimeDesc
(
String
.
format
(
"%s/%s"
,
time
,
timeSlot
));
item
.
setExpectTimeDesc
(
String
.
format
(
"%s/%s"
,
time
,
timeSlot
));
item
.
setSource
(
o
.
getSource
());
item
.
setSource
(
o
.
getSource
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
// 订单状态
item
.
setOrderStatus
(
o
.
getOrderStatus
());
// 订单状态
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setOrderStatusDesc
(
OrderStatus
.
valueOf
(
o
.
getOrderStatus
()).
getDescription
());
item
.
setOrderStatusDesc
(
OrderStatus
.
valueOf
(
o
.
getOrderStatus
()).
getDescription
());
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
items
.
add
(
item
);
items
.
add
(
item
);
}
}
// 获取容量
// 获取容量
int
capUsed
=
0
;
int
capUsed
=
0
;
int
capTotal
=
0
;
int
capTotal
=
0
;
String
capacityStatus
=
"less"
;
String
capacityStatus
=
"less"
;
CapacityEngineerStatEntity
cap
=
engineerCap
.
get
(
e
.
getEngineerCode
());
CapacityEngineerStatEntity
cap
=
engineerCap
.
get
(
e
.
getEngineerCode
());
if
(
cap
!=
null
)
{
if
(
cap
!=
null
)
{
capUsed
=
cap
.
getCapUsed
();
capUsed
=
cap
.
getCapUsed
();
capTotal
=
cap
.
getCapTotal
();
capTotal
=
cap
.
getCapTotal
();
if
(
capTotal
>
0
&&
(
float
)
capUsed
/
capTotal
<
0.8
)
{
if
(
capTotal
>
0
&&
(
float
)
capUsed
/
capTotal
<
0.8
)
{
capacityStatus
=
"normal"
;
capacityStatus
=
"normal"
;
}
}
}
}
DispatchEngineerOrderListResp
.
EngineerInfo
eg
=
new
DispatchEngineerOrderListResp
.
EngineerInfo
();
DispatchEngineerOrderListResp
.
EngineerInfo
eg
=
new
DispatchEngineerOrderListResp
.
EngineerInfo
();
eg
.
setOrders
(
items
);
eg
.
setOrders
(
items
);
eg
.
setEngineerCode
(
e
.
getEngineerCode
());
eg
.
setEngineerCode
(
e
.
getEngineerCode
());
eg
.
setEngineerName
(
e
.
getName
());
eg
.
setEngineerName
(
e
.
getName
());
eg
.
setGrade
(
e
.
getGrade
());
eg
.
setGrade
(
e
.
getGrade
());
eg
.
setCapacity
(
String
.
format
(
"%d/%d"
,
capUsed
,
capTotal
));
eg
.
setCapacity
(
String
.
format
(
"%d/%d"
,
capUsed
,
capTotal
));
eg
.
setCapacityStatus
(
capacityStatus
);
eg
.
setCapacityStatus
(
capacityStatus
);
egs
.
add
(
eg
);
egs
.
add
(
eg
);
}
}
DispatchEngineerOrderListResp
res
=
new
DispatchEngineerOrderListResp
();
DispatchEngineerOrderListResp
res
=
new
DispatchEngineerOrderListResp
();
res
.
setEngineers
(
egs
);
res
.
setEngineers
(
egs
);
return
Result
.
success
(
res
);
return
Result
.
success
(
res
);
}
}
@Transactional
@Transactional
@Override
@Override
public
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
String
date
,
List
<
String
>
orderIds
)
throws
BusinessException
{
public
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
String
date
,
List
<
String
>
orderIds
)
throws
BusinessException
{
// 派工台确认派单
// 派工台确认派单
LocalDate
localDate
=
TimeUtils
.
IsoDate2LocalDate
(
date
);
LocalDate
localDate
=
TimeUtils
.
IsoDate2LocalDate
(
date
);
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
EngineerInfoEntity
engineer
=
engineerInfoDao
.
getByEngineerCode
(
engineerCode
);
if
(
engineer
==
null
)
{
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
throw
new
BusinessException
(
"技术员不存在"
);
}
}
List
<
OrderInfoEntity
>
orders
=
orderInfoDao
.
findAllByDtAndOrderIdIn
(
localDate
,
orderIds
);
List
<
OrderInfoEntity
>
orders
=
orderInfoDao
.
findAllByDtAndOrderIdIn
(
localDate
,
orderIds
);
if
(
ListUtils
.
isEmpty
(
orders
))
{
if
(
ListUtils
.
isEmpty
(
orders
))
{
throw
new
BusinessException
(
"订单不存在"
);
throw
new
BusinessException
(
"订单不存在"
);
}
}
// 已经指派的订单
// 已经指派的订单
List
<
OrderInfoEntity
>
engineerOrders
=
orderInfoDao
.
findByDtAndEngineerCode
(
localDate
,
engineerCode
);
List
<
OrderInfoEntity
>
engineerOrders
=
orderInfoDao
.
findByDtAndEngineerCode
(
localDate
,
engineerCode
);
engineerOrders
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getPlanStartTime
));
// 按照planStartTime排序
engineerOrders
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getPlanStartTime
));
// 按照planStartTime排序
List
<
OrderInfoEntity
>
orderAppointments
=
engineerOrders
.
stream
()
List
<
OrderInfoEntity
>
orderAppointments
=
engineerOrders
.
stream
()
.
filter
(
o
->
o
.
getOrderStatus
().
equals
(
"NORMAL"
))
.
filter
(
o
->
o
.
getOrderStatus
().
equals
(
"NORMAL"
))
.
collect
(
Collectors
.
toList
());
// 过滤,只有NORMAL订单才需要处理,取消订单不需要处理
.
collect
(
Collectors
.
toList
());
// 过滤,只有NORMAL订单才需要处理,取消订单不需要处理
// TODO,临时处理方案,后续调用派单引擎处理
// TODO,临时处理方案,后续调用派单引擎处理
OrderRequestScheduler
scheduler
=
new
OrderRequestScheduler
();
OrderRequestScheduler
scheduler
=
new
OrderRequestScheduler
();
List
<
LineSegment
>
results
=
scheduler
.
scheduler
(
orders
,
orderAppointments
);
List
<
LineSegment
>
results
=
scheduler
.
scheduler
(
orders
,
orderAppointments
);
for
(
LineSegment
r
:
results
)
{
for
(
LineSegment
r
:
results
)
{
String
orderId
=
r
.
id
;
String
orderId
=
r
.
id
;
LocalDateTime
planStartTime
=
scheduler
.
linePoint2DateTime
(
r
.
start
,
date
);
LocalDateTime
planStartTime
=
scheduler
.
linePoint2DateTime
(
r
.
start
,
date
);
LocalDateTime
planEndTime
=
scheduler
.
linePoint2DateTime
(
r
.
end
,
date
);
LocalDateTime
planEndTime
=
scheduler
.
linePoint2DateTime
(
r
.
end
,
date
);
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaUpdate
<
OrderInfoEntity
>
update
=
criteriaBuilder
.
createCriteriaUpdate
(
OrderInfoEntity
.
class
);
CriteriaUpdate
<
OrderInfoEntity
>
update
=
criteriaBuilder
.
createCriteriaUpdate
(
OrderInfoEntity
.
class
);
Root
<
OrderInfoEntity
>
root
=
update
.
from
(
OrderInfoEntity
.
class
);
Root
<
OrderInfoEntity
>
root
=
update
.
from
(
OrderInfoEntity
.
class
);
update
.
set
(
root
.
get
(
"planStartTime"
),
planStartTime
);
update
.
set
(
root
.
get
(
"planStartTime"
),
planStartTime
);
update
.
set
(
root
.
get
(
"planEndTime"
),
planEndTime
);
update
.
set
(
root
.
get
(
"planEndTime"
),
planEndTime
);
update
.
set
(
root
.
get
(
"appointmentStatus"
),
"CONFIRM"
);
update
.
set
(
root
.
get
(
"appointmentStatus"
),
"CONFIRM"
);
update
.
set
(
root
.
get
(
"appointmentMethod"
),
"MANUAL"
);
update
.
set
(
root
.
get
(
"appointmentMethod"
),
"MANUAL"
);
update
.
set
(
root
.
get
(
"engineerCode"
),
engineerCode
);
update
.
set
(
root
.
get
(
"engineerCode"
),
engineerCode
);
update
.
where
(
update
.
where
(
criteriaBuilder
.
equal
(
root
.
get
(
"orderId"
),
orderId
),
criteriaBuilder
.
equal
(
root
.
get
(
"orderId"
),
orderId
),
criteriaBuilder
.
equal
(
root
.
get
(
"dt"
),
localDate
)
criteriaBuilder
.
equal
(
root
.
get
(
"dt"
),
localDate
)
);
);
entityManager
.
createQuery
(
update
).
executeUpdate
();
entityManager
.
createQuery
(
update
).
executeUpdate
();
}
}
return
Result
.
success
(
null
);
return
Result
.
success
(
null
);
}
}
private
List
<
OrderInfoEntity
>
queryOrders
(
DispatchOrderListReq
reqDTO
)
{
private
List
<
OrderInfoEntity
>
queryOrders
(
DispatchOrderListReq
reqDTO
)
{
// 获取服务单列表
// 获取服务单列表
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaQuery
<
OrderInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
OrderInfoEntity
.
class
);
CriteriaQuery
<
OrderInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
OrderInfoEntity
.
class
);
Root
<
OrderInfoEntity
>
root
=
criteriaQuery
.
from
(
OrderInfoEntity
.
class
);
Root
<
OrderInfoEntity
>
root
=
criteriaQuery
.
from
(
OrderInfoEntity
.
class
);
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"dt"
),
TimeUtils
.
IsoDate2LocalDate
(
reqDTO
.
getDate
())));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"dt"
),
TimeUtils
.
IsoDate2LocalDate
(
reqDTO
.
getDate
())));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"appointmentStatus"
),
"INIT"
));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"appointmentStatus"
),
"INIT"
));
String
levelType
=
reqDTO
.
getLevelType
();
String
levelType
=
reqDTO
.
getLevelType
();
String
levelValue
=
reqDTO
.
getLevelValue
();
String
levelValue
=
reqDTO
.
getLevelValue
();
if
(
"cluster"
.
equals
(
levelType
))
{
if
(
"cluster"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgClusterId"
),
levelValue
));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgClusterId"
),
levelValue
));
}
else
if
(
"branch"
.
equals
(
levelType
))
{
}
else
if
(
"branch"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgBranchId"
),
levelValue
));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgBranchId"
),
levelValue
));
}
else
if
(
"group"
.
equals
(
levelType
))
{
}
else
if
(
"group"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgGroupId"
),
levelValue
));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orgGroupId"
),
levelValue
));
}
}
// 筛选项
// 筛选项
if
(
StringUtils
.
isNotEmpty
(
reqDTO
.
getPhone
()))
{
if
(
StringUtils
.
isNotEmpty
(
reqDTO
.
getPhone
()))
{
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"phone"
),
reqDTO
.
getPhone
()));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"phone"
),
reqDTO
.
getPhone
()));
}
}
if
(
StringUtils
.
isNotEmpty
(
reqDTO
.
getOrderId
()))
{
if
(
StringUtils
.
isNotEmpty
(
reqDTO
.
getOrderId
()))
{
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orderId"
),
reqDTO
.
getOrderId
()));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"orderId"
),
reqDTO
.
getOrderId
()));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getBranchIds
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getBranchIds
()))
{
predicates
.
add
(
root
.
get
(
"orgBranchId"
).
in
(
reqDTO
.
getBranchIds
()));
predicates
.
add
(
root
.
get
(
"orgBranchId"
).
in
(
reqDTO
.
getBranchIds
()));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getGroupIds
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getGroupIds
()))
{
predicates
.
add
(
root
.
get
(
"orgGroupId"
).
in
(
reqDTO
.
getGroupIds
()));
predicates
.
add
(
root
.
get
(
"orgGroupId"
).
in
(
reqDTO
.
getGroupIds
()));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getTeamIds
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getTeamIds
()))
{
predicates
.
add
(
root
.
get
(
"orgTeamId"
).
in
(
reqDTO
.
getTeamIds
()));
predicates
.
add
(
root
.
get
(
"orgTeamId"
).
in
(
reqDTO
.
getTeamIds
()));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getAppointmentType
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getAppointmentType
()))
{
predicates
.
add
(
root
.
get
(
"appointmentMethod"
).
in
(
reqDTO
.
getAppointmentType
()));
predicates
.
add
(
root
.
get
(
"appointmentMethod"
).
in
(
reqDTO
.
getAppointmentType
()));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getPriorities
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getPriorities
()))
{
List
<
Integer
>
p
=
reqDTO
.
getPriorities
();
List
<
Integer
>
p
=
reqDTO
.
getPriorities
();
if
(
p
.
contains
(
0
)
&&
p
.
contains
(
1
))
{
if
(
p
.
contains
(
0
)
&&
p
.
contains
(
1
))
{
predicates
.
add
(
criteriaBuilder
.
ge
(
root
.
get
(
"priority"
),
1
));
predicates
.
add
(
criteriaBuilder
.
ge
(
root
.
get
(
"priority"
),
1
));
}
else
if
(
p
.
contains
(
0
)
&&
!
p
.
contains
(
1
))
{
}
else
if
(
p
.
contains
(
0
)
&&
!
p
.
contains
(
1
))
{
predicates
.
add
(
criteriaBuilder
.
le
(
root
.
get
(
"priority"
),
1
));
predicates
.
add
(
criteriaBuilder
.
le
(
root
.
get
(
"priority"
),
1
));
}
else
if
(
p
.
contains
(
1
)
&&
!
p
.
contains
(
0
))
{
}
else
if
(
p
.
contains
(
1
)
&&
!
p
.
contains
(
0
))
{
predicates
.
add
(
criteriaBuilder
.
ge
(
root
.
get
(
"priority"
),
5
));
predicates
.
add
(
criteriaBuilder
.
ge
(
root
.
get
(
"priority"
),
5
));
}
}
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getEngineerCodes
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getEngineerCodes
()))
{
Predicate
engineerCodePredicate
=
root
.
get
(
"engineerCode"
).
in
(
reqDTO
.
getEngineerCodes
());
Predicate
engineerCodePredicate
=
root
.
get
(
"engineerCode"
).
in
(
reqDTO
.
getEngineerCodes
());
Predicate
engineerCodeSubPredicate
=
root
.
get
(
"engineerCodeSub"
).
in
(
reqDTO
.
getEngineerCodes
());
Predicate
engineerCodeSubPredicate
=
root
.
get
(
"engineerCodeSub"
).
in
(
reqDTO
.
getEngineerCodes
());
predicates
.
add
(
criteriaBuilder
.
or
(
engineerCodePredicate
,
engineerCodeSubPredicate
));
predicates
.
add
(
criteriaBuilder
.
or
(
engineerCodePredicate
,
engineerCodeSubPredicate
));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getTypeCategory
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getTypeCategory
()))
{
Subquery
<
OrderInfoEntity
>
typeCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Subquery
<
OrderInfoEntity
>
typeCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
typeCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
typeCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
typeCategorySubquery
.
select
(
root
)
typeCategorySubquery
.
select
(
root
)
.
where
(
.
where
(
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
skillInfoRoot
.
get
(
"typeCategory"
).
in
(
reqDTO
.
getTypeCategory
())
skillInfoRoot
.
get
(
"typeCategory"
).
in
(
reqDTO
.
getTypeCategory
())
);
);
predicates
.
add
(
criteriaBuilder
.
exists
(
typeCategorySubquery
));
predicates
.
add
(
criteriaBuilder
.
exists
(
typeCategorySubquery
));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getSkillCategory
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getSkillCategory
()))
{
Subquery
<
OrderInfoEntity
>
skillCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Subquery
<
OrderInfoEntity
>
skillCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
skillCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
skillCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
skillCategorySubquery
.
select
(
root
)
// 注意这里的 select 使用主查询的 root
skillCategorySubquery
.
select
(
root
)
// 注意这里的 select 使用主查询的 root
.
where
(
.
where
(
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
skillInfoRoot
.
get
(
"skillCategory"
).
in
(
reqDTO
.
getSkillCategory
())
skillInfoRoot
.
get
(
"skillCategory"
).
in
(
reqDTO
.
getSkillCategory
())
);
);
predicates
.
add
(
criteriaBuilder
.
exists
(
skillCategorySubquery
));
predicates
.
add
(
criteriaBuilder
.
exists
(
skillCategorySubquery
));
}
}
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getGroupCategory
()))
{
if
(
ListUtils
.
isNotEmpty
(
reqDTO
.
getGroupCategory
()))
{
Subquery
<
OrderInfoEntity
>
skillGroupCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Subquery
<
OrderInfoEntity
>
skillGroupCategorySubquery
=
criteriaQuery
.
subquery
(
OrderInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
skillGroupCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
Root
<
SkillInfoEntity
>
skillInfoRoot
=
skillGroupCategorySubquery
.
from
(
SkillInfoEntity
.
class
);
skillGroupCategorySubquery
.
select
(
root
)
// 注意这里的 select 使用主查询的 root
skillGroupCategorySubquery
.
select
(
root
)
// 注意这里的 select 使用主查询的 root
.
where
(
.
where
(
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"brand"
),
root
.
get
(
"brand"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"type"
),
root
.
get
(
"type"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
criteriaBuilder
.
equal
(
skillInfoRoot
.
get
(
"skill"
),
root
.
get
(
"skill"
)),
skillInfoRoot
.
get
(
"groupCategory"
).
in
(
reqDTO
.
getGroupCategory
())
skillInfoRoot
.
get
(
"groupCategory"
).
in
(
reqDTO
.
getGroupCategory
())
);
);
predicates
.
add
(
criteriaBuilder
.
exists
(
skillGroupCategorySubquery
));
predicates
.
add
(
criteriaBuilder
.
exists
(
skillGroupCategorySubquery
));
}
}
criteriaQuery
.
where
(
predicates
.
toArray
(
new
Predicate
[
0
]));
criteriaQuery
.
where
(
predicates
.
toArray
(
new
Predicate
[
0
]));
return
entityManager
.
createQuery
(
criteriaQuery
).
getResultList
();
return
entityManager
.
createQuery
(
criteriaQuery
).
getResultList
();
}
}
private
Map
<
String
,
List
<
OrderInfoEntity
>>
queryEngineerOrders
(
List
<
String
>
engineerCodes
,
LocalDate
date
)
{
private
Map
<
String
,
List
<
OrderInfoEntity
>>
queryEngineerOrders
(
List
<
String
>
engineerCodes
,
LocalDate
date
)
{
// 获取工程师服务单列表
// 获取工程师服务单列表
List
<
OrderInfoEntity
>
records
=
orderInfoDao
.
findByDtAndEngineerCodeIn
(
date
,
engineerCodes
);
List
<
OrderInfoEntity
>
records
=
orderInfoDao
.
findByDtAndEngineerCodeIn
(
date
,
engineerCodes
);
// 排序
// 排序
records
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getEngineerCode
));
records
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getEngineerCode
));
records
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getPlanStartTime
));
records
.
sort
(
Comparator
.
comparing
(
OrderInfoEntity:
:
getPlanStartTime
));
//过滤
//过滤
List
<
OrderInfoEntity
>
orders
=
records
.
stream
()
List
<
OrderInfoEntity
>
orders
=
records
.
stream
()
.
filter
(
r
->
r
.
getOrderStatus
().
equals
(
"NORMAL"
))
.
filter
(
r
->
r
.
getOrderStatus
().
equals
(
"NORMAL"
))
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
return
orders
.
stream
().
collect
(
Collectors
.
groupingBy
(
OrderInfoEntity:
:
getEngineerCode
));
return
orders
.
stream
().
collect
(
Collectors
.
groupingBy
(
OrderInfoEntity:
:
getEngineerCode
));
}
}
public
List
<
EngineerInfoEntity
>
queryEngineers
(
List
<
String
>
teamIds
,
List
<
String
>
engineerCodes
,
String
key
)
{
public
List
<
EngineerInfoEntity
>
queryEngineers
(
List
<
String
>
teamIds
,
List
<
String
>
engineerCodes
,
String
key
)
{
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaQuery
<
EngineerInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
EngineerInfoEntity
.
class
);
CriteriaQuery
<
EngineerInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
EngineerInfoEntity
.
class
);
Root
<
EngineerInfoEntity
>
root
=
criteriaQuery
.
from
(
EngineerInfoEntity
.
class
);
Root
<
EngineerInfoEntity
>
root
=
criteriaQuery
.
from
(
EngineerInfoEntity
.
class
);
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"beanStatus"
),
1
));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"beanStatus"
),
1
));
if
(
ListUtils
.
isNotEmpty
(
engineerCodes
))
{
if
(
ListUtils
.
isNotEmpty
(
engineerCodes
))
{
predicates
.
add
(
root
.
get
(
"engineerCode"
).
in
(
engineerCodes
));
predicates
.
add
(
root
.
get
(
"engineerCode"
).
in
(
engineerCodes
));
}
}
Subquery
<
Integer
>
teamSubquery
=
criteriaQuery
.
subquery
(
Integer
.
class
);
Subquery
<
Integer
>
teamSubquery
=
criteriaQuery
.
subquery
(
Integer
.
class
);
Root
<
OrgTeamEngineerEntity
>
teamRoot
=
teamSubquery
.
from
(
OrgTeamEngineerEntity
.
class
);
Root
<
OrgTeamEngineerEntity
>
teamRoot
=
teamSubquery
.
from
(
OrgTeamEngineerEntity
.
class
);
teamSubquery
.
select
(
criteriaBuilder
.
literal
(
1
))
teamSubquery
.
select
(
criteriaBuilder
.
literal
(
1
))
.
where
(
.
where
(
criteriaBuilder
.
equal
(
teamRoot
.
get
(
"engineerCode"
),
root
.
get
(
"engineerCode"
)),
criteriaBuilder
.
equal
(
teamRoot
.
get
(
"engineerCode"
),
root
.
get
(
"engineerCode"
)),
teamRoot
.
get
(
"teamId"
).
in
(
teamIds
)
teamRoot
.
get
(
"teamId"
).
in
(
teamIds
)
);
);
predicates
.
add
(
criteriaBuilder
.
exists
(
teamSubquery
));
predicates
.
add
(
criteriaBuilder
.
exists
(
teamSubquery
));
if
(
StringUtils
.
isNotEmpty
(
key
))
{
if
(
StringUtils
.
isNotEmpty
(
key
))
{
predicates
.
add
(
criteriaBuilder
.
or
(
predicates
.
add
(
criteriaBuilder
.
or
(
criteriaBuilder
.
like
(
root
.
get
(
"phone"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"phone"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"name"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"name"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"engineerCode"
),
"%"
+
key
+
"%"
)
criteriaBuilder
.
like
(
root
.
get
(
"engineerCode"
),
"%"
+
key
+
"%"
)
));
));
}
}
criteriaQuery
.
where
(
predicates
.
toArray
(
new
Predicate
[
0
]));
criteriaQuery
.
where
(
predicates
.
toArray
(
new
Predicate
[
0
]));
criteriaQuery
.
orderBy
(
criteriaBuilder
.
asc
(
root
.
get
(
"name"
)));
criteriaQuery
.
orderBy
(
criteriaBuilder
.
asc
(
root
.
get
(
"name"
)));
return
entityManager
.
createQuery
(
criteriaQuery
).
getResultList
();
return
entityManager
.
createQuery
(
criteriaQuery
).
getResultList
();
}
}
private
List
<
String
>
queryOrgTeamIds
(
String
levelType
,
String
levelIds
,
List
<
String
>
branchIds
,
List
<
String
>
groupIds
,
List
<
String
>
teamIds
)
{
private
List
<
String
>
queryOrgTeamIds
(
String
levelType
,
String
levelIds
,
List
<
String
>
branchIds
,
List
<
String
>
groupIds
,
List
<
String
>
teamIds
)
{
Specification
<
OrgTeamEntity
>
specification
=
(
root
,
query
,
criteriaBuilder
)
->
{
Specification
<
OrgTeamEntity
>
specification
=
(
root
,
query
,
criteriaBuilder
)
->
{
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
List
<
Predicate
>
predicates
=
new
ArrayList
<>();
if
(
"cluster"
.
equals
(
levelType
))
{
if
(
"cluster"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"clusterId"
)).
value
(
levelIds
));
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"clusterId"
)).
value
(
levelIds
));
}
else
if
(
"branch"
.
equals
(
levelType
))
{
}
else
if
(
"branch"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"branchId"
)).
value
(
levelIds
));
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"branchId"
)).
value
(
levelIds
));
}
else
if
(
"group"
.
equals
(
levelType
))
{
}
else
if
(
"group"
.
equals
(
levelType
))
{
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"groupId"
)).
value
(
levelIds
));
predicates
.
add
(
criteriaBuilder
.
in
(
root
.
get
(
"groupId"
)).
value
(
levelIds
));
}
}
if
(
ListUtils
.
isNotEmpty
(
branchIds
))
{
if
(
ListUtils
.
isNotEmpty
(
branchIds
))
{
predicates
.
add
(
root
.
get
(
"branchId"
).
in
(
branchIds
));
predicates
.
add
(
root
.
get
(
"branchId"
).
in
(
branchIds
));
}
}
if
(
ListUtils
.
isNotEmpty
(
groupIds
))
{
if
(
ListUtils
.
isNotEmpty
(
groupIds
))
{
predicates
.
add
(
root
.
get
(
"groupId"
).
in
(
groupIds
));
predicates
.
add
(
root
.
get
(
"groupId"
).
in
(
groupIds
));
}
}
if
(
ListUtils
.
isNotEmpty
(
teamIds
))
{
if
(
ListUtils
.
isNotEmpty
(
teamIds
))
{
predicates
.
add
(
root
.
get
(
"teamId"
).
in
(
teamIds
));
predicates
.
add
(
root
.
get
(
"teamId"
).
in
(
teamIds
));
}
}
return
criteriaBuilder
.
and
(
predicates
.
toArray
(
new
Predicate
[
0
]));
return
criteriaBuilder
.
and
(
predicates
.
toArray
(
new
Predicate
[
0
]));
};
};
List
<
OrgTeamEntity
>
teams
=
orgTeamDao
.
findAll
(
specification
);
List
<
OrgTeamEntity
>
teams
=
orgTeamDao
.
findAll
(
specification
);
return
teams
.
stream
().
map
(
OrgTeamEntity:
:
getTeamId
).
collect
(
Collectors
.
toList
());
return
teams
.
stream
().
map
(
OrgTeamEntity:
:
getTeamId
).
collect
(
Collectors
.
toList
());
}
}
private
HashMap
<
String
,
Integer
>
querySkillTakeTime
()
{
private
HashMap
<
String
,
Integer
>
querySkillTakeTime
()
{
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
HashMap
<
String
,
Integer
>
map
=
new
HashMap
<>();
List
<
SkillInfoEntity
>
records
=
skillInfoDao
.
findAll
();
List
<
SkillInfoEntity
>
records
=
skillInfoDao
.
findAll
();
for
(
SkillInfoEntity
r
:
records
)
{
for
(
SkillInfoEntity
r
:
records
)
{
String
key
=
String
.
format
(
"%s%s%s"
,
r
.
getBrand
(),
r
.
getType
(),
r
.
getSkill
());
String
key
=
String
.
format
(
"%s%s%s"
,
r
.
getBrand
(),
r
.
getType
(),
r
.
getSkill
());
map
.
put
(
key
,
r
.
getTakeTime
());
map
.
put
(
key
,
r
.
getTakeTime
());
}
}
return
map
;
return
map
;
}
}
private
HashMap
<
String
,
SkillInfoEntity
>
querySkillInfo
()
{
private
HashMap
<
String
,
SkillInfoEntity
>
querySkillInfo
()
{
HashMap
<
String
,
SkillInfoEntity
>
map
=
new
HashMap
<>();
HashMap
<
String
,
SkillInfoEntity
>
map
=
new
HashMap
<>();
List
<
SkillInfoEntity
>
records
=
skillInfoDao
.
findAll
();
List
<
SkillInfoEntity
>
records
=
skillInfoDao
.
findAll
();
for
(
SkillInfoEntity
r
:
records
)
{
for
(
SkillInfoEntity
r
:
records
)
{
String
key
=
String
.
format
(
"%s%s%s"
,
r
.
getBrand
(),
r
.
getType
(),
r
.
getSkill
());
String
key
=
String
.
format
(
"%s%s%s"
,
r
.
getBrand
(),
r
.
getType
(),
r
.
getSkill
());
map
.
put
(
key
,
r
);
map
.
put
(
key
,
r
);
}
}
return
map
;
return
map
;
}
}
private
HashMap
<
String
,
CapacityEngineerStatEntity
>
queryCapacityEngineerStat
(
List
<
String
>
engineerCodes
,
String
date
)
{
private
HashMap
<
String
,
CapacityEngineerStatEntity
>
queryCapacityEngineerStat
(
List
<
String
>
engineerCodes
,
String
date
)
{
List
<
CapacityEngineerStatEntity
>
records
=
capacityEngineerStatDao
.
getByWorkdayAndEngineerCodeIn
(
date
,
engineerCodes
);
List
<
CapacityEngineerStatEntity
>
records
=
capacityEngineerStatDao
.
getByWorkdayAndEngineerCodeIn
(
date
,
engineerCodes
);
HashMap
<
String
,
CapacityEngineerStatEntity
>
map
=
new
HashMap
<>();
HashMap
<
String
,
CapacityEngineerStatEntity
>
map
=
new
HashMap
<>();
for
(
CapacityEngineerStatEntity
r
:
records
)
{
for
(
CapacityEngineerStatEntity
r
:
records
)
{
map
.
put
(
r
.
getEngineerCode
(),
r
);
map
.
put
(
r
.
getEngineerCode
(),
r
);
}
}
return
map
;
return
map
;
}
}
private
String
parseTimeSlot
(
LocalDateTime
t
)
{
private
String
parseTimeSlot
(
LocalDateTime
t
)
{
String
h
=
TimeUtils
.
localDateTime2String
(
t
,
"HH"
);
String
h
=
TimeUtils
.
localDateTime2String
(
t
,
"HH"
);
Integer
hour
=
Integer
.
parseInt
(
h
);
Integer
hour
=
Integer
.
parseInt
(
h
);
if
(
hour
<=
12
)
{
if
(
hour
<=
12
)
{
return
"上午"
;
return
"上午"
;
}
else
if
(
hour
<=
18
)
{
}
else
if
(
hour
<=
18
)
{
return
"下午"
;
return
"下午"
;
}
else
{
}
else
{
return
"晚上"
;
return
"晚上"
;
}
}
}
}
}
}
class
GroupTagFactory
{
class
GroupTagFactory
{
public
GroupTag
getGroupTag
(
String
groupTagId
)
{
public
GroupTag
getGroupTag
(
String
groupTagId
)
{
if
(
groupTagId
.
equals
(
"0"
))
{
if
(
groupTagId
.
equals
(
"0"
))
{
return
new
GroupTagUrgency
();
return
new
GroupTagUrgency
();
}
else
{
}
else
{
return
new
GroupTagOmit
();
return
new
GroupTagOmit
();
}
}
}
}
}
}
class
GroupTagUrgency
implements
GroupTag
{
class
GroupTagUrgency
implements
GroupTag
{
// 根据紧急程度来分组
// 根据紧急程度来分组
public
String
getGroupTag
(
OrderInfoEntity
order
)
{
public
String
getGroupTag
(
OrderInfoEntity
order
)
{
String
s
=
order
.
getTags
();
String
s
=
order
.
getTags
();
if
(
s
==
null
)
{
if
(
s
==
null
)
{
return
"正常#1"
;
return
"正常#1"
;
}
}
if
(
s
.
contains
(
"VIP"
)
||
s
.
contains
(
"财产损失"
))
{
if
(
s
.
contains
(
"VIP"
)
||
s
.
contains
(
"财产损失"
))
{
return
"超急#10"
;
return
"超急#10"
;
}
else
if
(
s
.
contains
(
"自保点"
)
||
s
.
contains
(
"紧急"
))
{
}
else
if
(
s
.
contains
(
"自保点"
)
||
s
.
contains
(
"紧急"
))
{
return
"紧急#8"
;
return
"紧急#8"
;
}
else
if
(
s
.
contains
(
"3天前单"
)
||
s
.
contains
(
"同地址多单"
)
||
s
.
contains
(
"超重需多人"
))
{
}
else
if
(
s
.
contains
(
"3天前单"
)
||
s
.
contains
(
"同地址多单"
)
||
s
.
contains
(
"超重需多人"
))
{
return
"一般#5"
;
return
"一般#5"
;
}
else
{
}
else
{
return
"正常#1"
;
return
"正常#1"
;
}
}
}
}
}
}
class
GroupTagOmit
implements
GroupTag
{
class
GroupTagOmit
implements
GroupTag
{
public
String
getGroupTag
(
OrderInfoEntity
order
)
{
public
String
getGroupTag
(
OrderInfoEntity
order
)
{
return
"默认分类#5"
;
return
"默认分类#5"
;
}
}
}
}
class
LineSegment
{
class
LineSegment
{
public
String
id
;
public
String
id
;
public
int
start
;
public
int
start
;
public
int
end
;
public
int
end
;
public
LineSegment
(
String
id
,
int
start
,
int
end
)
{
public
LineSegment
(
String
id
,
int
start
,
int
end
)
{
this
.
id
=
id
;
this
.
id
=
id
;
this
.
start
=
start
;
this
.
start
=
start
;
this
.
end
=
end
;
this
.
end
=
end
;
}
}
}
}
class
Line
{
class
Line
{
public
String
id
;
public
String
id
;
public
int
length
;
public
int
length
;
public
Line
(
String
id
,
int
length
)
{
public
Line
(
String
id
,
int
length
)
{
this
.
id
=
id
;
this
.
id
=
id
;
this
.
length
=
length
;
this
.
length
=
length
;
}
}
}
}
class
LineSegmentScheduler
{
class
LineSegmentScheduler
{
public
List
<
LineSegment
>
scheduleLineSegments
(
List
<
LineSegment
>
used
,
List
<
Line
>
newTasks
)
{
public
List
<
LineSegment
>
scheduleLineSegments
(
List
<
LineSegment
>
used
,
List
<
Line
>
newTasks
)
{
used
.
sort
(
Comparator
.
comparingInt
(
a
->
a
.
start
));
used
.
sort
(
Comparator
.
comparingInt
(
a
->
a
.
start
));
List
<
LineSegment
>
result
=
new
ArrayList
<>();
List
<
LineSegment
>
result
=
new
ArrayList
<>();
for
(
Line
task
:
newTasks
)
{
for
(
Line
task
:
newTasks
)
{
String
taskId
=
task
.
id
;
String
taskId
=
task
.
id
;
int
taskLength
=
task
.
length
;
int
taskLength
=
task
.
length
;
boolean
scheduled
=
false
;
boolean
scheduled
=
false
;
int
startRange
=
480
;
int
startRange
=
480
;
int
endRange
=
1440
;
int
endRange
=
1440
;
if
(!
scheduled
)
{
if
(!
scheduled
)
{
for
(
int
i
=
0
;
i
<=
used
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<=
used
.
size
();
i
++)
{
int
start
;
int
start
;
if
(
i
==
0
)
{
if
(
i
==
0
)
{
start
=
startRange
;
start
=
startRange
;
}
else
{
}
else
{
start
=
used
.
get
(
i
-
1
).
end
;
start
=
used
.
get
(
i
-
1
).
end
;
}
}
int
end
;
int
end
;
if
(
i
==
used
.
size
()
||
used
.
get
(
i
).
start
>
endRange
)
{
if
(
i
==
used
.
size
()
||
used
.
get
(
i
).
start
>
endRange
)
{
end
=
endRange
;
end
=
endRange
;
}
else
{
}
else
{
end
=
used
.
get
(
i
).
start
;
end
=
used
.
get
(
i
).
start
;
}
}
if
(
end
-
start
>=
taskLength
)
{
if
(
end
-
start
>=
taskLength
)
{
int
taskStart
=
start
;
int
taskStart
=
start
;
int
taskEnd
=
start
+
taskLength
;
int
taskEnd
=
start
+
taskLength
;
LineSegment
s
=
new
LineSegment
(
taskId
,
taskStart
,
taskEnd
);
LineSegment
s
=
new
LineSegment
(
taskId
,
taskStart
,
taskEnd
);
result
.
add
(
s
);
result
.
add
(
s
);
used
.
add
(
i
,
s
);
used
.
add
(
i
,
s
);
break
;
break
;
}
}
}
}
}
}
}
}
return
result
;
return
result
;
}
}
}
}
class
OrderRequestScheduler
{
class
OrderRequestScheduler
{
public
List
<
LineSegment
>
scheduler
(
List
<
OrderInfoEntity
>
orderRequests
,
List
<
OrderInfoEntity
>
orderAppointments
)
{
public
List
<
LineSegment
>
scheduler
(
List
<
OrderInfoEntity
>
orderRequests
,
List
<
OrderInfoEntity
>
orderAppointments
)
{
List
<
LineSegment
>
used
=
new
ArrayList
<>();
List
<
LineSegment
>
used
=
new
ArrayList
<>();
for
(
OrderInfoEntity
o
:
orderAppointments
)
{
for
(
OrderInfoEntity
o
:
orderAppointments
)
{
LineSegment
s
=
new
LineSegment
(
o
.
getOrderId
(),
LineSegment
s
=
new
LineSegment
(
o
.
getOrderId
(),
this
.
localTime2LinePoint
(
o
.
getPlanStartTime
()),
this
.
localTime2LinePoint
(
o
.
getPlanStartTime
()),
this
.
localTime2LinePoint
(
o
.
getPlanEndTime
()));
this
.
localTime2LinePoint
(
o
.
getPlanEndTime
()));
used
.
add
(
s
);
used
.
add
(
s
);
}
}
List
<
Line
>
newTasks
=
new
ArrayList
<>();
List
<
Line
>
newTasks
=
new
ArrayList
<>();
for
(
OrderInfoEntity
o
:
orderRequests
)
{
for
(
OrderInfoEntity
o
:
orderRequests
)
{
if
(!
o
.
getAppointmentStatus
().
equals
(
"INIT"
))
{
if
(!
o
.
getAppointmentStatus
().
equals
(
"INIT"
))
{
continue
;
continue
;
}
}
Line
t
=
new
Line
(
o
.
getOrderId
(),
30
);
Line
t
=
new
Line
(
o
.
getOrderId
(),
30
);
newTasks
.
add
(
t
);
newTasks
.
add
(
t
);
}
}
if
(
newTasks
.
isEmpty
())
{
if
(
newTasks
.
isEmpty
())
{
List
<
LineSegment
>
empty
=
new
ArrayList
<>();
List
<
LineSegment
>
empty
=
new
ArrayList
<>();
return
empty
;
return
empty
;
}
}
LineSegmentScheduler
scheduler
=
new
LineSegmentScheduler
();
LineSegmentScheduler
scheduler
=
new
LineSegmentScheduler
();
return
scheduler
.
scheduleLineSegments
(
used
,
newTasks
);
return
scheduler
.
scheduleLineSegments
(
used
,
newTasks
);
}
}
public
int
localTime2LinePoint
(
LocalDateTime
datetime
)
{
public
int
localTime2LinePoint
(
LocalDateTime
datetime
)
{
return
datetime
.
getHour
()
*
60
+
datetime
.
getMinute
();
return
datetime
.
getHour
()
*
60
+
datetime
.
getMinute
();
}
}
public
LocalDateTime
linePoint2DateTime
(
int
x
,
String
date
)
{
public
LocalDateTime
linePoint2DateTime
(
int
x
,
String
date
)
{
int
base
=
60
;
int
base
=
60
;
int
hour
=
x
/
base
;
int
hour
=
x
/
base
;
int
minute
=
x
%
base
;
int
minute
=
x
%
base
;
String
datetime
=
String
.
format
(
"%s %02d:%02d:00"
,
date
,
hour
,
minute
);
String
datetime
=
String
.
format
(
"%s %02d:%02d:00"
,
date
,
hour
,
minute
);
return
TimeUtils
.
IsoDateTime2LocalDateTime
(
datetime
);
return
TimeUtils
.
IsoDateTime2LocalDateTime
(
datetime
);
}
}
}
}
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