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 a81fd694
authored
Aug 03, 2023
by
wangli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改
1 parent
0bc1fed1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
85 deletions
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderAssignImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderAssignImpl.java
View file @
a81fd69
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.dituhui.pea.common.BusinessException
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.order.common.OrderAssignCheck
;
...
...
@@ -19,6 +18,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.persistence.EntityManager
;
import
javax.persistence.Query
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
import
java.sql.Timestamp
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
...
...
@@ -30,50 +35,49 @@ import java.util.stream.Collectors;
public
class
OrderAssignImpl
implements
OrderAssign
{
@Autowired
private
OrderInfo
MPDao
orderInfoMP
Dao
;
private
OrderInfo
Dao
orderInfo
Dao
;
@Autowired
private
EngineerInfo
MPDao
engineerInfoMP
Dao
;
private
EngineerInfo
Dao
engineerInfo
Dao
;
@Autowired
private
CommonService
commonService
;
@Autowired
private
OrderEventMPDao
orderEventMPDao
;
@Autowired
private
OrderAssignCheck
orderAssignCheck
;
@Autowired
private
OrgTeamMPDao
orgTeamMPDao
;
@Autowired
private
OrgTeamEngineer
MPDao
orgTeamEngineerMP
Dao
;
private
OrgTeamEngineer
Dao
orgTeamEngineer
Dao
;
@Autowired
private
SkillInfo
MPDao
skillInfoMP
Dao
;
private
SkillInfo
Dao
skillInfo
Dao
;
@Autowired
private
EngineerSkillGroupMPDao
engineerSkillGroupMPDao
;
private
EngineerSkillGroupDao
engineerSkillGroupDao
;
@Autowired
private
EntityManager
entityManager
;
@Transactional
@Override
public
Result
<?>
getOrderAssignRecommendEngineers
(
String
orderId
,
String
key
,
String
distance
,
String
recommend
)
{
// 服务单指派-推荐技术员列表
OrderInfo
order
=
orderInfoMP
Dao
.
getByOrderId
(
orderId
);
OrderInfo
Entity
order
=
orderInfo
Dao
.
getByOrderId
(
orderId
);
if
(
order
==
null
)
{
throw
new
BusinessException
(
"订单不存在"
);
}
String
date
=
TimeUtils
.
timestamp2DateTime
(
order
.
getExpectTimeBegin
(),
TimeUtils
.
DATE_GAP_FORMAT
);
String
date
=
TimeUtils
.
IsoLocalDate2String
(
order
.
getDt
());
// 获取符合筛选条件的技术员
List
<
String
>
engineerCodes
=
this
.
searchEngineerCodes
(
order
,
distance
,
key
,
recommend
);
List
<
EngineerInfo
>
engineers
=
engineerInfoMPDao
.
selectByEngineerCodes
(
engineerCodes
);
List
<
EngineerInfo
Entity
>
engineers
=
engineerInfoDao
.
findByEngineerCodeIn
(
engineerCodes
);
List
<
OrderAssignRecommendResp
.
Engineer
>
items
=
new
ArrayList
<>();
for
(
EngineerInfo
engineer
:
engineers
)
{
for
(
EngineerInfo
Entity
engineer
:
engineers
)
{
OrderAssignCheck
.
Result
result
=
orderAssignCheck
.
orderAssignCheck
(
orderId
,
order
.
getDt
(),
engineer
.
getEngineerCode
());
log
.
info
(
"指派检查结果:{}"
,
result
);
if
(
result
.
getIndex
()
<
0
)
{
...
...
@@ -81,13 +85,13 @@ public class OrderAssignImpl implements OrderAssign {
}
// 获取已技术员已指派订单列表
List
<
OrderInfo
>
orderAppointments
=
orderInfoMPDao
.
select
ByEngineerCodeAndDtAndAppointmentStatus
(
engineer
.
getEngineerCode
(),
order
.
getDt
(),
"CONFIRM"
);
List
<
OrderInfo
Entity
>
orderAppointments
=
orderInfoDao
.
find
ByEngineerCodeAndDtAndAppointmentStatus
(
engineer
.
getEngineerCode
(),
order
.
getDt
(),
"CONFIRM"
);
// 获取订单tips
HashMap
<
String
,
List
<
LabelValueDTO
>>
orderTips
=
new
HashMap
<>();
List
<
String
>
orderIds
=
orderAppointments
.
stream
().
map
(
OrderInfo:
:
getOrderId
).
collect
(
Collectors
.
toList
());
List
<
String
>
orderIds
=
orderAppointments
.
stream
().
map
(
OrderInfo
Entity
:
:
getOrderId
).
collect
(
Collectors
.
toList
());
if
(!
orderIds
.
isEmpty
())
{
List
<
OrderInfo
>
orders
=
orderInfoMPDao
.
selectByDtAndOrderIds
(
order
.
getDt
(),
orderIds
);
List
<
OrderInfo
Entity
>
orders
=
orderInfoDao
.
findAllByDtAndOrderIdIn
(
order
.
getDt
(),
orderIds
);
orderTips
=
this
.
packOrderTips
(
orders
);
}
...
...
@@ -124,15 +128,15 @@ public class OrderAssignImpl implements OrderAssign {
public
Result
<?>
orderAssign
(
String
orderId
,
String
engineerCode
)
throws
BusinessException
{
// 服务单指派-指派提交
OrderInfo
order
=
orderInfoMP
Dao
.
getByOrderId
(
orderId
);
OrderInfo
Entity
order
=
orderInfo
Dao
.
getByOrderId
(
orderId
);
if
(
order
==
null
)
{
throw
new
BusinessException
(
"订单不存在"
);
}
EngineerInfo
engineer
=
engineerInfoMP
Dao
.
getByEngineerCode
(
engineerCode
);
EngineerInfo
Entity
engineer
=
engineerInfo
Dao
.
getByEngineerCode
(
engineerCode
);
boolean
record
=
false
;
OrderInfo
op
=
orderInfoMP
Dao
.
getByOrderIdAndDt
(
orderId
,
order
.
getDt
());
OrderInfo
Entity
op
=
orderInfo
Dao
.
getByOrderIdAndDt
(
orderId
,
order
.
getDt
());
if
(
op
!=
null
)
{
record
=
true
;
}
...
...
@@ -151,13 +155,12 @@ public class OrderAssignImpl implements OrderAssign {
Timestamp
planEndTime
=
Timestamp
.
valueOf
(
insertNode
.
getPlanEndTime
());
// 更新order_info表状态
LambdaUpdateWrapper
<
OrderInfo
>
wrapper
=
new
LambdaUpdateWrapper
<>();
wrapper
.
set
(
OrderInfo:
:
getAppointmentStatus
,
"CONFIRM"
);
wrapper
.
set
(
OrderInfo:
:
getAppointmentMethod
,
"MANUAL"
);
wrapper
.
set
(
OrderInfo:
:
getPlanStartTime
,
planStartTime
);
wrapper
.
set
(
OrderInfo:
:
getPlanEndTime
,
planEndTime
);
wrapper
.
eq
(
OrderInfo:
:
getOrderId
,
orderId
);
orderInfoMPDao
.
update
(
null
,
wrapper
);
String
sql
=
"UPDATE OrderInfo e SET e.appointmentStatus = 'CONFIRM', e.appointmentMethod='MANUAL', e.planStartTime = :planStartTime, e.planEndTime = :panEndTime WHERE e.orderId = :orderId"
;
Query
query
=
entityManager
.
createQuery
(
sql
);
query
.
setParameter
(
"planStartTime"
,
planStartTime
);
query
.
setParameter
(
"planEndTime"
,
planEndTime
);
query
.
setParameter
(
"orderId"
,
orderId
);
query
.
executeUpdate
();
// 工单变更登记
commonService
.
addOrderEvent
(
orderId
,
""
,
"PEA-WEB"
,
"API"
,
"工单指派"
,
"工单指派"
,
""
);
...
...
@@ -169,28 +172,18 @@ public class OrderAssignImpl implements OrderAssign {
public
Result
<?>
orderRevokeAssign
(
String
orderId
)
throws
BusinessException
{
// 放回工单池
OrderInfo
order
=
orderInfoMP
Dao
.
getByOrderId
(
orderId
);
OrderInfo
Entity
order
=
orderInfo
Dao
.
getByOrderId
(
orderId
);
if
(
order
==
null
)
{
throw
new
BusinessException
(
"订单不存在"
);
}
// 更新order_request表为未指派
order
.
setAppointmentStatus
(
"INIT"
);
orderInfoMPDao
.
updateById
(
order
);
entityManager
.
merge
(
order
);
// 操作员ID TODO-用户系统
// 登记事件
OrderEvent
oe
=
new
OrderEvent
();
oe
.
setOrderId
(
orderId
);
oe
.
setSuborderId
(
""
);
oe
.
setHappen
(
new
Timestamp
(
System
.
currentTimeMillis
()));
oe
.
setEvent
(
"放回工单池"
);
oe
.
setOperator
(
"123"
);
// 操作员ID TODO-用户系统
oe
.
setOperatorName
(
"测试用户"
);
// 操作员姓名 TODO-用户系统
oe
.
setSource
(
"PEA"
);
oe
.
setDescription
(
"返回工单池"
);
oe
.
setMemo
(
""
);
oe
.
setCreateTime
(
new
Timestamp
(
System
.
currentTimeMillis
()));
orderEventMPDao
.
insert
(
oe
);
commonService
.
addOrderEvent
(
orderId
,
""
,
"PEA-WEB"
,
"123"
,
"放回工单池"
,
"放回工单池"
,
""
);
return
Result
.
success
(
null
);
}
...
...
@@ -199,7 +192,7 @@ public class OrderAssignImpl implements OrderAssign {
public
Result
<?>
orderReschedule
(
String
orderId
,
LocalDateTime
expectBegin
,
LocalDateTime
expectEnd
,
String
expectDesc
)
throws
BusinessException
{
// 工单改约接口(当前同放回工单池处理)
OrderInfo
order
=
orderInfoMP
Dao
.
getByOrderId
(
orderId
);
OrderInfo
Entity
order
=
orderInfo
Dao
.
getByOrderId
(
orderId
);
if
(
order
==
null
)
{
throw
new
BusinessException
(
"订单不存在"
);
}
...
...
@@ -212,32 +205,24 @@ public class OrderAssignImpl implements OrderAssign {
LocalDate
originDate
=
order
.
getDt
();
// 改约前的日期
// 更新order_request表为未指派
order
.
setAppointmentStatus
(
"INIT"
);
order
.
setDt
(
expectBegin
.
toLocalDate
());
order
.
setExpectTimeBegin
(
Timestamp
.
valueOf
(
expectBegin
));
order
.
setExpectTimeEnd
(
Timestamp
.
valueOf
(
expectEnd
));
order
.
setExpectTimeDesc
(
expectDesc
);
orderInfoMPDao
.
updateById
(
order
);
// 更新order_info表
String
sql
=
"UPDATE OrderInfo e SET e.appointmentStatus = 'INIT', e.dt=:dt, e.expectTimeBegin = :expectTimeBegin, e.expectTimeEnd = :expectTimeEnd, e.expectTimeDesc = :expectTimeDesc WHERE e.orderId = :orderId"
;
Query
query
=
entityManager
.
createQuery
(
sql
);
query
.
setParameter
(
"dt"
,
expectBegin
.
toLocalDate
());
query
.
setParameter
(
"expectTimeBegin"
,
expectBegin
);
query
.
setParameter
(
"expectTimeEnd"
,
expectEnd
);
query
.
setParameter
(
"expectTimeDesc"
,
expectDesc
);
query
.
setParameter
(
"orderId"
,
orderId
);
query
.
executeUpdate
();
// 操作员ID TODO-用户系统
// 登记事件
OrderEvent
oe
=
new
OrderEvent
();
oe
.
setOrderId
(
orderId
);
oe
.
setSuborderId
(
""
);
oe
.
setHappen
(
new
Timestamp
(
System
.
currentTimeMillis
()));
oe
.
setEvent
(
"已改约"
);
oe
.
setOperator
(
"123"
);
// 操作员ID TODO-用户系统
oe
.
setOperatorName
(
"测试用户"
);
// 操作员姓名 TODO-用户系统
oe
.
setSource
(
"PEA"
);
oe
.
setDescription
(
"已改约"
);
oe
.
setMemo
(
""
);
oe
.
setCreateTime
(
new
Timestamp
(
System
.
currentTimeMillis
()));
orderEventMPDao
.
insert
(
oe
);
commonService
.
addOrderEvent
(
orderId
,
""
,
"PEA-WEB"
,
"123"
,
"已改约"
,
"已改约"
,
""
);
return
Result
.
success
(
null
);
}
private
List
<
String
>
searchEngineerCodes
(
OrderInfo
order
,
String
distance
,
String
key
,
String
recommend
)
{
private
List
<
String
>
searchEngineerCodes
(
OrderInfo
Entity
order
,
String
distance
,
String
key
,
String
recommend
)
{
Set
<
String
>
engineerCodes1
=
this
.
searchEngineerByRecommend
(
order
,
recommend
);
if
(
engineerCodes1
.
isEmpty
())
{
log
.
info
(
"recommend:{}筛选条件未找到技术员"
,
recommend
);
...
...
@@ -257,13 +242,13 @@ public class OrderAssignImpl implements OrderAssign {
}
}
// 匹配技能
SkillInfo
skill
=
skillInfoMP
Dao
.
getByBrandAndTypeAndSkill
(
order
.
getBrand
(),
order
.
getType
(),
order
.
getSkill
());
SkillInfo
Entity
skill
=
skillInfo
Dao
.
getByBrandAndTypeAndSkill
(
order
.
getBrand
(),
order
.
getType
(),
order
.
getSkill
());
if
(
skill
==
null
)
{
log
.
info
(
"skill_info表没有匹配到技能配置:{}-{}-{}"
,
order
.
getBrand
(),
order
.
getY
(),
order
.
getSkill
());
return
new
ArrayList
<>();
}
Set
<
String
>
engineerCodes3
=
engineerSkillGroup
MPDao
.
select
BySkillGroupCode
(
skill
.
getSkillGroupCode
()).
stream
().
map
(
EngineerSkillGroup:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
Set
<
String
>
engineerCodes3
=
engineerSkillGroup
Dao
.
find
BySkillGroupCode
(
skill
.
getSkillGroupCode
()).
stream
().
map
(
EngineerSkillGroup
Entity
:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
if
(
engineerCodes3
.
isEmpty
())
{
log
.
info
(
"没有匹配到技能相匹配的技术员:{}-{}-{}"
,
order
.
getBrand
(),
order
.
getType
(),
order
.
getSkill
());
return
new
ArrayList
<>();
...
...
@@ -284,9 +269,10 @@ public class OrderAssignImpl implements OrderAssign {
return
new
ArrayList
<>(
engineerCodes1
);
}
private
Set
<
String
>
searchEngineerByRecommend
(
OrderInfo
order
,
String
recommend
)
{
private
Set
<
String
>
searchEngineerByRecommend
(
OrderInfo
Entity
order
,
String
recommend
)
{
if
(
StringUtils
.
isNotEmpty
(
recommend
)
&&
recommend
.
equals
(
"team"
))
{
return
orgTeamEngineerMPDao
.
selectByTeamId
(
order
.
getOrgTeamId
()).
stream
().
map
(
OrgTeamEngineer:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
return
orgTeamEngineerDao
.
findAllByTeamId
(
order
.
getOrgTeamId
()).
stream
().
map
(
OrgTeamEngineerEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
}
String
levelType
;
String
levelValue
;
...
...
@@ -305,35 +291,41 @@ public class OrderAssignImpl implements OrderAssign {
lqw
.
eq
(
levelType
.
equals
(
"group"
),
OrgTeam:
:
getGroupId
,
levelValue
);
lqw
.
eq
(
levelType
.
equals
(
"team"
),
OrgTeam:
:
getTeamId
,
levelValue
);
List
<
String
>
groupIds
=
orgTeamMPDao
.
selectList
(
lqw
).
stream
().
map
(
OrgTeam:
:
getGroupId
).
collect
(
Collectors
.
toList
());
return
engineerInfo
MPDao
.
selectByGroupIds
(
groupIds
).
stream
().
map
(
EngineerInfo
:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
return
engineerInfo
Dao
.
findByGroupIdIn
(
groupIds
).
stream
().
map
(
EngineerInfoEntity
:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
}
private
Set
<
String
>
searchEngineerByKey
(
String
key
)
{
LambdaQueryWrapper
<
EngineerInfo
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
EngineerInfo:
:
getBeanStatus
,
1
);
CriteriaBuilder
criteriaBuilder
=
entityManager
.
getCriteriaBuilder
();
CriteriaQuery
<
EngineerInfoEntity
>
criteriaQuery
=
criteriaBuilder
.
createQuery
(
EngineerInfoEntity
.
class
);
Root
<
EngineerInfoEntity
>
root
=
criteriaQuery
.
from
(
EngineerInfoEntity
.
class
);
Predicate
predicate
=
criteriaBuilder
.
equal
(
root
.
get
(
"beanStatus"
),
1
);
if
(
StringUtils
.
isNotEmpty
(
key
))
{
lqw
.
and
(
w
->
w
.
like
(
EngineerInfo:
:
getPhone
,
key
)
.
or
()
.
like
(
EngineerInfo:
:
getName
,
key
)
.
or
()
.
like
(
EngineerInfo:
:
getEngineerCode
,
key
)
Predicate
keyPredicate
=
criteriaBuilder
.
or
(
criteriaBuilder
.
like
(
root
.
get
(
"phone"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"name"
),
"%"
+
key
+
"%"
),
criteriaBuilder
.
like
(
root
.
get
(
"engineerCode"
),
"%"
+
key
+
"%"
)
);
predicate
=
criteriaBuilder
.
and
(
predicate
,
keyPredicate
);
}
return
engineerInfoMPDao
.
selectList
(
lqw
).
stream
().
map
(
EngineerInfo:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
criteriaQuery
.
where
(
predicate
);
CriteriaQuery
<
EngineerInfoEntity
>
selectQuery
=
criteriaQuery
.
select
(
root
);
return
entityManager
.
createQuery
(
selectQuery
).
getResultList
().
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toSet
());
}
private
List
<
TimeLineDTO
>
packTimelines
(
List
<
OrderInfo
>
orders
,
HashMap
<
String
,
List
<
LabelValueDTO
>>
orderTips
)
{
private
List
<
TimeLineDTO
>
packTimelines
(
List
<
OrderInfo
Entity
>
orders
,
HashMap
<
String
,
List
<
LabelValueDTO
>>
orderTips
)
{
List
<
LabelValueDTO
>
empty
=
new
ArrayList
<>();
List
<
TimeLineDTO
>
items
=
new
ArrayList
<>();
for
(
OrderInfo
order
:
orders
)
{
for
(
OrderInfo
Entity
order
:
orders
)
{
TimeLineDTO
item
=
new
TimeLineDTO
();
item
.
setOrderId
(
order
.
getOrderId
());
item
.
setAppointmentStatus
(
order
.
getAppointmentStatus
());
item
.
setStartTime
(
TimeUtils
.
Iso
Timestamp2DateTime
(
order
.
getPlanStartTime
()));
item
.
setEndTime
(
TimeUtils
.
Iso
Timestamp2DateTime
(
order
.
getPlanEndTime
()));
item
.
setStartTime
(
TimeUtils
.
Iso
LocalDateTime2String
(
order
.
getPlanStartTime
()));
item
.
setEndTime
(
TimeUtils
.
Iso
LocalDateTime2String
(
order
.
getPlanEndTime
()));
item
.
setTips
(
orderTips
.
getOrDefault
(
order
.
getOrderId
(),
empty
));
items
.
add
(
item
);
...
...
@@ -341,12 +333,12 @@ public class OrderAssignImpl implements OrderAssign {
return
items
;
}
private
HashMap
<
String
,
List
<
LabelValueDTO
>>
packOrderTips
(
List
<
OrderInfo
>
orders
)
{
private
HashMap
<
String
,
List
<
LabelValueDTO
>>
packOrderTips
(
List
<
OrderInfo
Entity
>
orders
)
{
return
orders
.
stream
().
collect
(
Collectors
.
toMap
(
OrderInfo:
:
getOrderId
,
this
::
packOrderTip
,
(
l1
,
l2
)
->
l1
,
HashMap:
:
new
));
OrderInfo
Entity
:
:
getOrderId
,
this
::
packOrderTip
,
(
l1
,
l2
)
->
l1
,
HashMap:
:
new
));
}
private
List
<
LabelValueDTO
>
packOrderTip
(
OrderInfo
order
)
{
private
List
<
LabelValueDTO
>
packOrderTip
(
OrderInfo
Entity
order
)
{
// pack订单tips
List
<
LabelValueDTO
>
items
=
new
ArrayList
<>();
items
.
add
(
new
LabelValueDTO
(
"类型/品牌"
,
String
.
format
(
"%s %s %s"
,
order
.
getSkill
(),
order
.
getType
(),
order
.
getBrand
())));
...
...
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