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 3bf5db3f
authored
Nov 15, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(改派推荐工程师): 新增推荐工程师标签支持
1 parent
40064b6c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
112 additions
and
46 deletions
project-order/src/main/java/com/dituhui/pea/order/dao/OrgTeamEngineerDao.java
project-order/src/main/java/com/dituhui/pea/order/dto/OrderAssignRecommendResp.java
project-order/src/main/java/com/dituhui/pea/order/entity/OrgTeamEngineerEntity.java
project-order/src/main/java/com/dituhui/pea/order/enums/TestimonialsEngineerTag.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderAssignImpl.java
project-order/src/main/java/com/dituhui/pea/order/dao/OrgTeamEngineerDao.java
View file @
3bf5db3
...
@@ -11,7 +11,6 @@ import java.util.List;
...
@@ -11,7 +11,6 @@ import java.util.List;
@Repository
@Repository
@Where
(
clause
=
"status = 1"
)
public
interface
OrgTeamEngineerDao
extends
JpaRepository
<
OrgTeamEngineerEntity
,
Integer
>
{
public
interface
OrgTeamEngineerDao
extends
JpaRepository
<
OrgTeamEngineerEntity
,
Integer
>
{
@Query
(
"select t from OrgTeamEngineerEntity t where t.teamId = :teamId and t.status=1"
)
@Query
(
"select t from OrgTeamEngineerEntity t where t.teamId = :teamId and t.status=1"
)
...
...
project-order/src/main/java/com/dituhui/pea/order/dto/OrderAssignRecommendResp.java
View file @
3bf5db3
package
com
.
dituhui
.
pea
.
order
.
dto
;
package
com
.
dituhui
.
pea
.
order
.
dto
;
import
com.dituhui.pea.order.enums.TestimonialsEngineerTag
;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.List
;
...
@@ -7,32 +8,35 @@ import java.util.List;
...
@@ -7,32 +8,35 @@ import java.util.List;
@Data
@Data
public
class
OrderAssignRecommendResp
{
public
class
OrderAssignRecommendResp
{
List
<
Engineer
>
engineers
;
List
<
Engineer
>
engineers
;
@Data
@Data
public
static
class
Engineer
{
public
static
class
Engineer
{
private
String
engineerCode
;
private
String
engineerCode
;
private
String
engineerName
;
private
String
engineerName
;
private
String
location
;
private
String
location
;
private
String
distanceDesc
;
/**
private
String
timeDesc
;
* 工程师标签
private
String
desc
;
*/
private
String
startTime
;
private
TestimonialsEngineerTag
distanceDesc
;
private
String
endTime
;
private
String
timeDesc
;
private
InsertInfo
insertInfo
;
private
String
desc
;
private
List
<
TimeLineDTO
>
orders
;
private
String
startTime
;
}
private
String
endTime
;
private
InsertInfo
insertInfo
;
private
List
<
TimeLineDTO
>
orders
;
}
@Data
@Data
public
static
class
InsertInfo
{
public
static
class
InsertInfo
{
private
String
number
;
private
String
number
;
private
String
distanceDesc
;
private
String
distanceDesc
;
private
String
TimeDesc
;
private
String
TimeDesc
;
}
}
@Data
@Data
public
static
class
Tag
{
public
static
class
Tag
{
private
String
title
;
private
String
title
;
private
String
color
;
private
String
color
;
}
}
}
}
project-order/src/main/java/com/dituhui/pea/order/entity/OrgTeamEngineerEntity.java
View file @
3bf5db3
...
@@ -2,6 +2,7 @@ package com.dituhui.pea.order.entity;
...
@@ -2,6 +2,7 @@ package com.dituhui.pea.order.entity;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
org.hibernate.annotations.Where
;
import
javax.persistence.*
;
import
javax.persistence.*
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
...
@@ -10,6 +11,7 @@ import java.util.Date;
...
@@ -10,6 +11,7 @@ import java.util.Date;
@Entity
@Entity
@Data
@Data
@Accessors
(
chain
=
true
)
@Accessors
(
chain
=
true
)
@Where
(
clause
=
"status = 1"
)
@Table
(
name
=
"org_team_engineer"
)
@Table
(
name
=
"org_team_engineer"
)
public
class
OrgTeamEngineerEntity
{
public
class
OrgTeamEngineerEntity
{
...
...
project-order/src/main/java/com/dituhui/pea/order/enums/TestimonialsEngineerTag.java
0 → 100644
View file @
3bf5db3
package
com
.
dituhui
.
pea
.
order
.
enums
;
import
lombok.Getter
;
/**
* 推荐工程师标签
*/
@Getter
public
enum
TestimonialsEngineerTag
{
/**
* 队内 ,和工单现有人员同属一个小队
*/
TEAM
,
/**
* 周边, 不同队 但在10KM内
*/
PERIPHERAL
,
/**
* 搜索, 通过搜索出来的人
*/
SEARCH
;
}
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderAssignImpl.java
View file @
3bf5db3
...
@@ -38,6 +38,7 @@ import com.dituhui.pea.order.enums.OrderEventEnum;
...
@@ -38,6 +38,7 @@ import com.dituhui.pea.order.enums.OrderEventEnum;
import
com.dituhui.pea.order.enums.OrderFlowEnum
;
import
com.dituhui.pea.order.enums.OrderFlowEnum
;
import
com.dituhui.pea.order.enums.OrderStatusEnum
;
import
com.dituhui.pea.order.enums.OrderStatusEnum
;
import
com.dituhui.pea.order.enums.ServiceStatusEnum
;
import
com.dituhui.pea.order.enums.ServiceStatusEnum
;
import
com.dituhui.pea.order.enums.TestimonialsEngineerTag
;
import
com.dituhui.pea.order.service.CapacityQueryService
;
import
com.dituhui.pea.order.service.CapacityQueryService
;
import
com.dituhui.pea.order.service.CommonService
;
import
com.dituhui.pea.order.service.CommonService
;
import
com.dituhui.pea.order.service.FendanService
;
import
com.dituhui.pea.order.service.FendanService
;
...
@@ -48,6 +49,9 @@ import com.dituhui.pea.order.utils.CommonUtil;
...
@@ -48,6 +49,9 @@ import com.dituhui.pea.order.utils.CommonUtil;
import
com.dituhui.pea.order.utils.OrderUtil
;
import
com.dituhui.pea.order.utils.OrderUtil
;
import
com.dituhui.pea.pojo.user.OrgInfo
;
import
com.dituhui.pea.pojo.user.OrgInfo
;
import
com.dituhui.pea.user.IUser
;
import
com.dituhui.pea.user.IUser
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.Setter
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
@@ -69,6 +73,7 @@ import java.util.Comparator;
...
@@ -69,6 +73,7 @@ import java.util.Comparator;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.Set
;
...
@@ -140,14 +145,21 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -140,14 +145,21 @@ public class OrderAssignImpl implements OrderAssign {
String
date
=
TimeUtils
.
IsoLocalDate2String
(
order
.
getDt
());
String
date
=
TimeUtils
.
IsoLocalDate2String
(
order
.
getDt
());
// 获取符合筛选条件的技术员
// 获取符合筛选条件的技术员
//FIXME 改造本方法 让其支持标签返回
// 改造本方法 让其支持标签返回
List
<
String
>
engineerCodes
=
this
.
searchEngineerCodes
(
order
,
req
.
getDistance
(),
req
.
getKey
(),
req
.
getRecommend
(),
req
.
getUserId
());
List
<
TempEngineer
>
engineerLocationList
=
this
.
searchEngineerCodes
(
order
,
req
.
getDistance
(),
req
.
getKey
(),
req
.
getRecommend
(),
req
.
getUserId
());
List
<
String
>
engineerCodes
=
engineerLocationList
.
stream
().
map
(
TempEngineer:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
Map
<
String
,
TempEngineer
>
engineerDistanceMap
=
engineerLocationList
.
stream
().
collect
(
Collectors
.
toMap
(
TempEngineer:
:
getEngineerCode
,
a
->
a
,
(
k1
,
k2
)
->
k1
));
List
<
EngineerInfoEntity
>
engineers
=
engineerInfoDao
.
findByEngineerCodeIn
(
engineerCodes
);
List
<
EngineerInfoEntity
>
engineers
=
engineerInfoDao
.
findByEngineerCodeIn
(
engineerCodes
);
List
<
OrderAssignRecommendResp
.
Engineer
>
items
=
new
ArrayList
<>();
List
<
OrderAssignRecommendResp
.
Engineer
>
items
=
new
ArrayList
<>();
final
String
orgTeamId
=
order
.
getOrgTeamId
();
final
BigDecimal
judgeDistance
=
new
BigDecimal
(
"10"
);
for
(
EngineerInfoEntity
engineer
:
engineers
)
{
for
(
EngineerInfoEntity
engineer
:
engineers
)
{
OrderAssignCheck
.
Result
result
=
orderAssignCheck
.
orderAssignCheck
(
req
.
getOrderId
(),
order
.
getDt
(),
engineer
.
getEngineerCode
());
final
String
engineerCode
=
engineer
.
getEngineerCode
();
OrderAssignCheck
.
Result
result
=
orderAssignCheck
.
orderAssignCheck
(
req
.
getOrderId
(),
order
.
getDt
(),
engineerCode
);
log
.
info
(
"指派检查结果:{}"
,
result
);
log
.
info
(
"指派检查结果:{}"
,
result
);
if
(
result
.
getIndex
()
<
0
)
{
if
(
result
.
getIndex
()
<
0
)
{
continue
;
continue
;
...
@@ -155,7 +167,7 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -155,7 +167,7 @@ public class OrderAssignImpl implements OrderAssign {
// 获取已技术员已指派订单列表
// 获取已技术员已指派订单列表
List
<
OrderInfoEntity
>
orderAppointments
=
orderInfoDao
.
findByEngineerCodeAndDtAndAppointmentStatusIn
(
List
<
OrderInfoEntity
>
orderAppointments
=
orderInfoDao
.
findByEngineerCodeAndDtAndAppointmentStatusIn
(
engineer
.
getEngineerCode
()
,
order
.
getDt
(),
List
.
of
(
OrderFlowEnum
.
CONFIRM
.
name
()),
null
);
engineer
Code
,
order
.
getDt
(),
List
.
of
(
OrderFlowEnum
.
CONFIRM
.
name
()),
null
);
// 获取订单tips
// 获取订单tips
HashMap
<
String
,
List
<
LabelValueDTO
>>
orderTips
=
new
HashMap
<>();
HashMap
<
String
,
List
<
LabelValueDTO
>>
orderTips
=
new
HashMap
<>();
...
@@ -164,8 +176,6 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -164,8 +176,6 @@ public class OrderAssignImpl implements OrderAssign {
List
<
OrderInfoEntity
>
orders
=
orderInfoDao
.
findAllByDtAndOrderIdIn
(
order
.
getDt
(),
orderIds
);
List
<
OrderInfoEntity
>
orders
=
orderInfoDao
.
findAllByDtAndOrderIdIn
(
order
.
getDt
(),
orderIds
);
orderTips
=
this
.
packOrderTips
(
orders
);
orderTips
=
this
.
packOrderTips
(
orders
);
}
}
//todo 获取工程师不同位置
OrderAssignRecommendResp
.
Engineer
item
=
new
OrderAssignRecommendResp
.
Engineer
();
OrderAssignRecommendResp
.
Engineer
item
=
new
OrderAssignRecommendResp
.
Engineer
();
OrderAssignRecommendResp
.
InsertInfo
insertInfo
=
new
OrderAssignRecommendResp
.
InsertInfo
();
OrderAssignRecommendResp
.
InsertInfo
insertInfo
=
new
OrderAssignRecommendResp
.
InsertInfo
();
...
@@ -173,11 +183,23 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -173,11 +183,23 @@ public class OrderAssignImpl implements OrderAssign {
insertInfo
.
setTimeDesc
(
String
.
format
(
"+%d分钟"
,
result
.
getAdditionElapsed
()));
insertInfo
.
setTimeDesc
(
String
.
format
(
"+%d分钟"
,
result
.
getAdditionElapsed
()));
insertInfo
.
setDistanceDesc
(
String
.
format
(
"+%d公里"
,
result
.
getAdditionDistance
()
/
1000
));
insertInfo
.
setDistanceDesc
(
String
.
format
(
"+%d公里"
,
result
.
getAdditionDistance
()
/
1000
));
item
.
setEngineerCode
(
engineer
.
getEngineerCode
());
TestimonialsEngineerTag
engineerTag
;
//标签判定
//判定当前工程师是否在队内, 否则判定是否在10KM内, 否则
TempEngineer
tempEngineer
=
engineerDistanceMap
.
get
(
engineerCode
);
if
(
Objects
.
nonNull
(
orgTeamEngineerDao
.
findByTeamIdAndEngineerCode
(
orgTeamId
,
engineerCode
)))
{
engineerTag
=
TestimonialsEngineerTag
.
TEAM
;
}
else
if
(
tempEngineer
.
getDistance
().
compareTo
(
judgeDistance
)
<=
0
)
{
engineerTag
=
TestimonialsEngineerTag
.
PERIPHERAL
;
}
else
{
engineerTag
=
TestimonialsEngineerTag
.
SEARCH
;
}
item
.
setEngineerCode
(
engineerCode
);
item
.
setEngineerName
(
engineer
.
getName
());
item
.
setEngineerName
(
engineer
.
getName
());
item
.
setLocation
(
String
.
format
(
"%s,%s"
,
order
.
getX
(),
order
.
getY
()));
item
.
setLocation
(
String
.
format
(
"%s,%s"
,
order
.
getX
(),
order
.
getY
()));
item
.
setInsertInfo
(
insertInfo
);
item
.
setInsertInfo
(
insertInfo
);
item
.
setDistanceDesc
(
""
);
item
.
setDistanceDesc
(
engineerTag
);
item
.
setTimeDesc
(
""
);
item
.
setTimeDesc
(
""
);
int
index
=
result
.
getIndex
()
+
1
;
int
index
=
result
.
getIndex
()
+
1
;
...
@@ -299,7 +321,7 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -299,7 +321,7 @@ public class OrderAssignImpl implements OrderAssign {
return
order
;
return
order
;
}
}
private
List
<
String
>
searchEngineerCodes
(
OrderInfoEntity
order
,
Double
distance
,
String
key
,
String
recommend
,
String
userId
)
{
private
List
<
TempEngineer
>
searchEngineerCodes
(
OrderInfoEntity
order
,
Double
distance
,
String
key
,
String
recommend
,
String
userId
)
{
Set
<
String
>
engineerCodes1
=
this
.
searchEngineerByRecommend
(
order
,
recommend
,
userId
);
Set
<
String
>
engineerCodes1
=
this
.
searchEngineerByRecommend
(
order
,
recommend
,
userId
);
if
(
engineerCodes1
.
isEmpty
())
{
if
(
engineerCodes1
.
isEmpty
())
{
log
.
info
(
"recommend:{}筛选条件未找到技术员"
,
recommend
);
log
.
info
(
"recommend:{}筛选条件未找到技术员"
,
recommend
);
...
@@ -339,20 +361,37 @@ public class OrderAssignImpl implements OrderAssign {
...
@@ -339,20 +361,37 @@ public class OrderAssignImpl implements OrderAssign {
// 获取工程师位置(准实时位置)并进行距离判定, distance如果为空值 默认10KM
// 获取工程师位置(准实时位置)并进行距离判定, distance如果为空值 默认10KM
double
orderLongitude
=
Double
.
parseDouble
(
order
.
getX
());
double
orderLongitude
=
Double
.
parseDouble
(
order
.
getX
());
double
orderLatitude
=
Double
.
parseDouble
(
order
.
getY
());
double
orderLatitude
=
Double
.
parseDouble
(
order
.
getY
());
//均计算距离
List
<
TempEngineer
>
result
=
engineerCodes1
.
stream
()
.
map
(
engineerCode
->
{
Location
location
=
engineerDateLocation
(
engineerCode
);
BigDecimal
orderAndEngineerDistance
=
BigDecimal
.
valueOf
(
Stapial4jUtil
.
getDistance
(
location
.
getLongitude
(),
location
.
getLatitude
(),
orderLongitude
,
orderLatitude
));
return
new
TempEngineer
(
engineerCode
,
orderAndEngineerDistance
);
}).
collect
(
Collectors
.
toList
());
// 距离过滤
if
(
Objects
.
nonNull
(
distance
))
{
if
(
Objects
.
nonNull
(
distance
))
{
final
BigDecimal
finalDistance
=
BigDecimal
.
valueOf
(
distance
);
final
BigDecimal
finalDistance
=
BigDecimal
.
valueOf
(
distance
);
return
engineerCodes1
.
stream
()
// return ;
.
filter
(
engineerCode
->
{
result
=
result
.
stream
().
filter
(
t
->
t
.
getDistance
().
compareTo
(
finalDistance
)
<=
0
).
collect
(
Collectors
.
toList
());
Location
location
=
engineerDateLocation
(
engineerCode
);
BigDecimal
orderAndEngineerDistance
=
BigDecimal
.
valueOf
(
Stapial4jUtil
.
getDistance
(
location
.
getLongitude
(),
location
.
getLatitude
(),
orderLongitude
,
orderLatitude
));
return
orderAndEngineerDistance
.
compareTo
(
finalDistance
)
<=
0
;
}).
collect
(
Collectors
.
toList
());
}
}
return
result
;
}
@Setter
return
new
ArrayList
<>(
engineerCodes1
);
@Getter
@AllArgsConstructor
class
TempEngineer
{
/**
* 工程师编号
*/
private
String
engineerCode
;
/**
* 距离 (KM)
*/
private
BigDecimal
distance
;
}
}
private
Location
engineerDateLocation
(
String
engineerCode
)
{
private
Location
engineerDateLocation
(
String
engineerCode
)
{
...
...
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