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 5c875dce
authored
Oct 27, 2023
by
huangjinxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:一家多单,超派,特殊时间段相关
1 parent
d3d25664
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
669 additions
and
132 deletions
project-order/src/main/java/com/dituhui/pea/order/controller/DispatchController.java
project-order/src/main/java/com/dituhui/pea/order/dao/OrderInfoDao.java
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchEngineerOrderListResp.java
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchOrderListResp.java
project-order/src/main/java/com/dituhui/pea/order/dto/OrderServiceList.java
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfo.java
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfoEntity.java
project-order/src/main/java/com/dituhui/pea/order/enums/OrderGroupEnum.java
project-order/src/main/java/com/dituhui/pea/order/service/DispatchService.java
project-order/src/main/java/com/dituhui/pea/order/service/OrderInfoService.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderInfoServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderServiceListServiceImpl.java
project-order/src/main/java/com/dituhui/pea/order/controller/DispatchController.java
View file @
5c875dc
...
...
@@ -33,6 +33,19 @@ public class DispatchController {
return
res
;
}
@GetMapping
(
"/dispatch/order/group"
)
public
Result
<?>
getDispatchOrderGroup
(
@Valid
DispatchOrderListReq
reqDTO
)
{
// 获取派工台待派订单列表
Result
<?>
res
=
null
;
try
{
res
=
dispatchService
.
getDispatchOrderGroup
(
reqDTO
);
}
catch
(
BusinessException
e
)
{
return
Result
.
failed
(
e
.
getMessage
());
}
return
res
;
}
@GetMapping
(
"/dispatch/engineer/order/list"
)
public
Result
<?>
getDispatchEngineerOrderList
(
@Valid
DispatchEngineerOrderListReq
reqDTO
)
{
// 获取派工台工程师已派订单列表
...
...
project-order/src/main/java/com/dituhui/pea/order/dao/OrderInfoDao.java
View file @
5c875dc
...
...
@@ -10,18 +10,31 @@ import java.util.List;
public
interface
OrderInfoDao
extends
JpaRepository
<
OrderInfoEntity
,
Long
>,
JpaSpecificationExecutor
<
OrderInfoEntity
>
{
OrderInfoEntity
getByOrderId
(
String
orderId
);
OrderInfoEntity
getByOrderIdAndDt
(
String
orderId
,
LocalDate
dt
);
List
<
OrderInfoEntity
>
findByOrderId
(
String
orderId
);
List
<
OrderInfoEntity
>
findByDtAndEngineerCodeIn
(
LocalDate
date
,
List
<
String
>
engineerCodes
);
List
<
OrderInfoEntity
>
findByDtAndEngineerCode
(
LocalDate
date
,
String
engineerCode
);
@Query
(
"SELECT o.orderId, s.skillCategory as skillCaption FROM OrderInfoEntity o JOIN SkillInfoEntity s on o.brand=s.brand and o.type=s.type and o.skill=s.skill WHERE o.orderId = :orderId and o.dt = :dt"
)
OrderSkillProjection
getOrderSkillCaptionByOrderIdAndDt
(
String
orderId
,
LocalDate
dt
);
List
<
OrderInfoEntity
>
findAllByOrderIdIn
(
List
<
String
>
orderIds
);
List
<
OrderInfoEntity
>
findAllByDtAndOrderIdIn
(
LocalDate
dt
,
List
<
String
>
orderIds
);
List
<
OrderInfoEntity
>
findByEngineerCodeAndDtAndAppointmentStatusIn
(
String
engineerCode
,
LocalDate
dt
,
List
<
String
>
appointmentStatus
);
List
<
OrderInfoEntity
>
findByDtAndOrgTeamIdAndAppointmentStatusIn
(
LocalDate
dt
,
String
orgTeamId
,
List
<
String
>
appointmentStatus
);
OrderInfoEntity
findTopBySkillAndAppointmentStatus
(
String
skill
,
String
status
);
List
<
OrderInfoEntity
>
findByServiceStatusAndEngineerCode
(
String
serviceStatus
,
String
engineerCode
);
List
<
OrderInfoEntity
>
findByDtAndAddressId
(
String
dt
,
String
addressId
);
List
<
OrderInfoEntity
>
findByMultipleOrders
(
String
multipleOrders
);
}
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchEngineerOrderListResp.java
View file @
5c875dc
...
...
@@ -3,53 +3,95 @@ package com.dituhui.pea.order.dto;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
java.util.List
;
@Data
public
class
DispatchEngineerOrderListResp
{
private
List
<
EngineerInfo
>
engineers
;
@Data
public
static
class
EngineerInfo
{
private
String
engineerCode
;
private
String
engineerName
;
private
String
capacity
;
private
String
capacityStatus
;
private
String
grade
;
private
List
<
OrderInfo
>
orders
;
}
@JsonInclude
(
JsonInclude
.
Include
.
ALWAYS
)
@Data
public
static
class
OrderInfo
{
private
boolean
weight
;
private
String
orderId
;
private
String
description
;
private
String
brand
;
private
String
type
;
private
String
skill
;
private
String
typeCategory
;
private
String
skillCategory
;
private
String
faultDescribe
;
private
String
applyNote
;
private
Integer
duration
;
private
String
province
;
private
String
city
;
private
String
county
;
private
String
address
;
private
String
name
;
private
String
phone
;
private
String
expectTimeDesc
;
private
String
source
;
private
String
dispatcher
;
private
String
appointmentType
;
private
String
appointmentStatus
;
private
String
serviceStatus
;
private
String
orderStatus
;
private
String
orderStatusDesc
;
private
String
createTime
;
private
String
groupTag
;
private
Integer
groupWeight
;
}
private
List
<
EngineerInfo
>
engineers
;
@Data
public
static
class
EngineerInfo
{
private
String
engineerCode
;
private
String
engineerName
;
private
String
capacity
;
private
String
capacityStatus
;
private
String
grade
;
private
List
<
OrderInfo
>
orders
;
}
@JsonInclude
(
JsonInclude
.
Include
.
ALWAYS
)
@Data
public
static
class
OrderInfo
{
private
boolean
weight
;
private
String
orderId
;
private
String
description
;
private
String
brand
;
private
String
type
;
private
String
skill
;
private
String
typeCategory
;
private
String
skillCategory
;
private
String
faultDescribe
;
private
String
applyNote
;
private
Integer
duration
;
private
String
province
;
private
String
city
;
private
String
county
;
private
String
address
;
private
String
name
;
private
String
phone
;
private
String
expectTimeDesc
;
private
String
source
;
private
String
dispatcher
;
private
String
appointmentType
;
private
String
appointmentStatus
;
private
String
serviceStatus
;
private
String
orderStatus
;
private
String
orderStatusDesc
;
private
String
createTime
;
private
String
groupTag
;
private
Integer
groupWeight
;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private
String
multipleOrders
;
/**
* 一家多单订单集合
*/
private
List
<
OrderInfo
>
multipleOrderList
;
/**
* 是否重物搬运(双人上门) 0:否 1:是 默认0
*/
private
Integer
isMultiple
=
0
;
/**
* 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0
*/
private
Integer
isAppointEngineer
=
0
;
/**
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private
String
appointEngineerCodes
;
/**
* 是否超派,0否 1是,默认0
*/
private
Integer
transcend
;
/**
* 工单优先级
*/
private
String
beanPriority
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private
Integer
isSpecialTime
;
}
}
project-order/src/main/java/com/dituhui/pea/order/dto/DispatchOrderListResp.java
View file @
5c875dc
...
...
@@ -3,41 +3,93 @@ package com.dituhui.pea.order.dto;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
java.util.List
;
@Data
public
class
DispatchOrderListResp
{
private
List
<
Order
>
orders
;
@JsonInclude
(
JsonInclude
.
Include
.
ALWAYS
)
@Data
public
static
class
Order
{
private
boolean
weight
;
private
String
orderId
;
private
String
description
;
private
String
brand
;
private
String
type
;
private
String
skill
;
private
String
typeCategory
;
private
String
skillCategory
;
private
String
faultDescribe
;
private
String
applyNote
;
private
Integer
duration
;
private
String
province
;
private
String
city
;
private
String
county
;
private
String
address
;
private
String
name
;
private
String
phone
;
private
String
expectTimeDesc
;
private
String
source
;
private
String
appointmentType
;
private
String
dispatcher
;
private
String
appointmentStatus
;
private
String
orderStatus
;
private
String
serviceStatus
;
private
String
createTime
;
private
String
groupTag
;
private
Integer
groupWeight
;
}
private
List
<
Order
>
orders
;
@JsonInclude
(
JsonInclude
.
Include
.
ALWAYS
)
@Data
public
static
class
Order
{
private
boolean
weight
;
private
String
orderId
;
private
String
description
;
private
String
brand
;
private
String
type
;
private
String
skill
;
private
String
typeCategory
;
private
String
skillCategory
;
private
String
faultDescribe
;
private
String
applyNote
;
private
Integer
duration
;
private
String
province
;
private
String
city
;
private
String
county
;
private
String
address
;
private
String
name
;
private
String
phone
;
private
String
expectTimeDesc
;
private
String
source
;
private
String
appointmentType
;
private
String
dispatcher
;
private
String
appointmentStatus
;
private
String
orderStatus
;
private
String
serviceStatus
;
private
String
createTime
;
private
String
groupTag
;
private
Integer
groupWeight
;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private
String
multipleOrders
;
/**
* 分站/网点id
*/
private
String
orgGroupId
;
/**
* 分站/网点name
*/
private
String
orgGroupName
;
/**
* 一家多单订单集合
*/
private
List
<
DispatchOrderListResp
.
Order
>
multipleOrderList
;
/**
* 是否重物搬运(双人上门) 0:否 1:是 默认0
*/
private
Integer
isMultiple
=
0
;
/**
* 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0
*/
private
Integer
isAppointEngineer
=
0
;
/**
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private
String
appointEngineerCodes
;
/**
* 是否超派,0否 1是,默认0
*/
private
Integer
transcend
;
/**
* 工单优先级
*/
private
String
beanPriority
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private
Integer
isSpecialTime
;
}
}
project-order/src/main/java/com/dituhui/pea/order/dto/OrderServiceList.java
View file @
5c875dc
...
...
@@ -2,6 +2,8 @@ package com.dituhui.pea.order.dto;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
OrderServiceList
{
private
String
orderId
;
...
...
@@ -54,4 +56,24 @@ public class OrderServiceList {
private
String
appointEngineerCodes
;
/**
* 一家多单订单集合
*/
private
List
<
OrderServiceList
>
multipleOrderList
;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private
String
multipleOrders
;
/**
* 是否超派,0否 1是,默认0
*/
private
Integer
transcend
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private
Integer
isSpecialTime
;
}
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfo.java
View file @
5c875dc
...
...
@@ -75,4 +75,27 @@ public class OrderInfo {
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private
String
appointEngineerCodes
;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private
String
multipleOrders
;
/**
* bean同步地址id
*/
private
String
addressId
;
/**
* 是否超派,0否 1是,默认0
*/
private
Integer
transcend
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private
Integer
isSpecialTime
;
}
\ No newline at end of file
project-order/src/main/java/com/dituhui/pea/order/entity/OrderInfoEntity.java
View file @
5c875dc
...
...
@@ -197,4 +197,32 @@ public class OrderInfoEntity {
*/
@Column
(
name
=
"appoint_engineer_codes"
)
private
String
appointEngineerCodes
;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
@Column
(
name
=
"multiple_orders"
)
private
String
multipleOrders
;
/**
* bean同步地址id
*/
@Column
(
name
=
"address_id"
)
private
String
addressId
;
/**
* 是否超派,0否 1是,默认0
*/
@Column
(
name
=
"transcend"
)
private
Integer
transcend
;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
@Column
(
name
=
"is_special_time"
)
private
Integer
isSpecialTime
=
0
;
}
project-order/src/main/java/com/dituhui/pea/order/enums/OrderGroupEnum.java
0 → 100644
View file @
5c875dc
package
com
.
dituhui
.
pea
.
order
.
enums
;
public
enum
OrderGroupEnum
{
zero
(
"0"
),
one
(
"1"
),
two
(
"2"
),
three
(
"3"
),
four
(
"4"
),
five
(
"5"
);
private
String
code
;
OrderGroupEnum
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
}
project-order/src/main/java/com/dituhui/pea/order/service/DispatchService.java
View file @
5c875dc
...
...
@@ -8,9 +8,17 @@ import java.util.List;
public
interface
DispatchService
{
Result
<?>
getDispatchOrderList
(
DispatchOrderListReq
reqDTO
);
Result
<?>
getDispatchOrderList
(
DispatchOrderListReq
reqDTO
);
Result
<?>
getDispatchEngineerOrderList
(
DispatchEngineerOrderListReq
reqDTO
);
Result
<?>
getDispatchEngineerOrderList
(
DispatchEngineerOrderListReq
reqDTO
);
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
String
date
,
List
<
String
>
orderIds
);
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
String
date
,
List
<
String
>
orderIds
);
/**
* 待派工工单池分组
*
* @param reqDTO
* @return
*/
Result
<?>
getDispatchOrderGroup
(
DispatchOrderListReq
reqDTO
);
}
project-order/src/main/java/com/dituhui/pea/order/service/OrderInfoService.java
0 → 100644
View file @
5c875dc
package
com
.
dituhui
.
pea
.
order
.
service
;
import
com.dituhui.pea.common.Result
;
/**
* 订单相关
*/
public
interface
OrderInfoService
{
/**
* 新增订单处理一家多单逻辑
*
* @param dt 订单日期 列:2023-07-21
* @param addressId 地址id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
Result
<
String
>
addMultipleOrders
(
String
dt
,
String
addressId
);
/**
* 取消指定订单一家多台
*
* @param multipleOrders 订单关联id
* @param orderId 订单id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
Result
deleteMultipleOrders
(
String
multipleOrders
,
String
orderId
);
}
project-order/src/main/java/com/dituhui/pea/order/service/impl/DispatchServiceImpl.java
View file @
5c875dc
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.dituhui.pea.common.BusinessException
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.order.common.ListUtils
;
...
...
@@ -11,9 +10,11 @@ import com.dituhui.pea.order.dto.DispatchEngineerOrderListResp;
import
com.dituhui.pea.order.dto.DispatchOrderListReq
;
import
com.dituhui.pea.order.dto.DispatchOrderListResp
;
import
com.dituhui.pea.order.entity.*
;
import
com.dituhui.pea.order.enums.OrderGroupEnum
;
import
com.dituhui.pea.order.enums.OrderStatus
;
import
com.dituhui.pea.order.service.DispatchService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.jpa.domain.Specification
;
...
...
@@ -56,6 +57,9 @@ public class DispatchServiceImpl implements DispatchService {
@Autowired
private
EntityManager
entityManager
;
@Autowired
private
OrgGroupDao
orgGroupDao
;
@Transactional
@Override
public
Result
<?>
getDispatchOrderList
(
DispatchOrderListReq
reqDTO
)
{
...
...
@@ -161,56 +165,12 @@ public class DispatchServiceImpl implements DispatchService {
// 获取技术员已指派单列表
List
<
DispatchEngineerOrderListResp
.
EngineerInfo
>
egs
=
new
ArrayList
<>();
for
(
EngineerInfoEntity
e
:
engineers
)
{
List
<
DispatchEngineerOrderListResp
.
OrderInfo
>
items
=
new
ArrayList
<>();
// 技术员已指派的订单列表
List
<
OrderInfoEntity
>
records
=
engineerOrders
.
getOrDefault
(
e
.
getEngineerCode
(),
new
ArrayList
<>());
for
(
OrderInfoEntity
o
:
records
)
{
DispatchEngineerOrderListResp
.
OrderInfo
item
=
new
DispatchEngineerOrderListResp
.
OrderInfo
();
item
.
setOrderId
(
o
.
getOrderId
());
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
()));
item
.
setBrand
(
o
.
getBrand
());
item
.
setType
(
o
.
getType
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setApplyNote
(
o
.
getApplyNote
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
if
(
skill
!=
null
)
{
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
}
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setCity
(
o
.
getCity
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setCity
(
o
.
getCity
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
String
time
=
TimeUtils
.
localDateTime2String
(
o
.
getPlanStartTime
(),
"HH:mm"
);
String
timeSlot
=
this
.
parseTimeSlot
(
o
.
getPlanStartTime
());
item
.
setExpectTimeDesc
(
String
.
format
(
"%s/%s"
,
time
,
timeSlot
));
item
.
setSource
(
o
.
getSource
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
// 订单状态
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setOrderStatusDesc
(
OrderStatus
.
valueOf
(
o
.
getOrderStatus
()).
getDescription
());
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
items
.
add
(
item
);
addOrderToItems
(
o
,
items
,
skillInfo
,
true
);
}
// 获取容量
...
...
@@ -241,6 +201,67 @@ public class DispatchServiceImpl implements DispatchService {
return
Result
.
success
(
res
);
}
private
void
addOrderToItems
(
OrderInfoEntity
o
,
List
<
DispatchEngineerOrderListResp
.
OrderInfo
>
items
,
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
,
boolean
isContinue
)
{
DispatchEngineerOrderListResp
.
OrderInfo
item
=
new
DispatchEngineerOrderListResp
.
OrderInfo
();
item
.
setOrderId
(
o
.
getOrderId
());
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
()));
item
.
setBrand
(
o
.
getBrand
());
item
.
setType
(
o
.
getType
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setApplyNote
(
o
.
getApplyNote
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
if
(
skill
!=
null
)
{
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
}
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setCity
(
o
.
getCity
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setCity
(
o
.
getCity
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
String
time
=
TimeUtils
.
localDateTime2String
(
o
.
getPlanStartTime
(),
"HH:mm"
);
String
timeSlot
=
this
.
parseTimeSlot
(
o
.
getPlanStartTime
());
item
.
setExpectTimeDesc
(
String
.
format
(
"%s/%s"
,
time
,
timeSlot
));
item
.
setSource
(
o
.
getSource
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
// 订单状态
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setOrderStatusDesc
(
OrderStatus
.
valueOf
(
o
.
getOrderStatus
()).
getDescription
());
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
item
.
setMultipleOrders
(
o
.
getMultipleOrders
());
item
.
setIsMultiple
(
o
.
getIsMultiple
());
item
.
setIsAppointEngineer
(
o
.
getIsAppointEngineer
());
item
.
setAppointEngineerCodes
(
o
.
getAppointEngineerCodes
());
item
.
setTranscend
(
o
.
getTranscend
());
item
.
setBeanPriority
(
o
.
getBeanPriority
());
item
.
setIsSpecialTime
(
o
.
getIsSpecialTime
());
if
(
isContinue
&&
StringUtils
.
isNotEmpty
(
o
.
getMultipleOrders
()))
{
List
<
OrderInfoEntity
>
byMultipleOrders
=
orderInfoDao
.
findByMultipleOrders
(
o
.
getMultipleOrders
());
List
<
DispatchEngineerOrderListResp
.
OrderInfo
>
multipleItems
=
new
ArrayList
<>();
for
(
OrderInfoEntity
info
:
byMultipleOrders
)
{
addOrderToItems
(
info
,
multipleItems
,
skillInfo
,
false
);
}
item
.
setMultipleOrderList
(
multipleItems
);
}
items
.
add
(
item
);
}
@Transactional
@Override
public
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
String
date
,
List
<
String
>
orderIds
)
throws
BusinessException
{
...
...
@@ -289,6 +310,128 @@ public class DispatchServiceImpl implements DispatchService {
return
Result
.
success
(
null
);
}
@Override
public
Result
<?>
getDispatchOrderGroup
(
DispatchOrderListReq
reqDTO
)
{
// 获取技能信息
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
=
this
.
querySkillInfo
();
// 获取工单列表
List
<
OrderInfoEntity
>
orders
=
this
.
queryOrders
(
reqDTO
);
if
(
CollectionUtils
.
isEmpty
(
orders
))
{
return
Result
.
success
();
}
List
<
String
>
groupIds
=
orders
.
stream
().
map
(
OrderInfoEntity:
:
getOrgGroupId
).
distinct
().
collect
(
Collectors
.
toList
());
List
<
OrgGroupEntity
>
byGroupIdIn
=
orgGroupDao
.
findByGroupIdIn
(
groupIds
);
Map
<
String
,
String
>
groupMap
=
byGroupIdIn
.
stream
().
collect
(
Collectors
.
toMap
(
OrgGroupEntity:
:
getGroupId
,
OrgGroupEntity:
:
getGroupName
));
List
<
DispatchOrderListResp
.
Order
>
items
=
new
ArrayList
<>();
Map
<
Object
,
List
<
DispatchOrderListResp
.
Order
>>
groupByMap
=
new
HashMap
<>();
for
(
OrderInfoEntity
o
:
orders
)
{
items
.
add
(
orderItemByOrderInfo
(
o
,
skillInfo
,
true
,
groupMap
,
groupByMap
,
reqDTO
.
getGroupTagId
()));
}
return
Result
.
success
(
groupByMap
);
}
/**
* 组装订单数据,并封装进map
*
* @param o
* @param skillInfo
* @param isContinue
* @param groupMap
* @param groupByMap
* @param groupTagId
* @return
*/
private
DispatchOrderListResp
.
Order
orderItemByOrderInfo
(
OrderInfoEntity
o
,
HashMap
<
String
,
SkillInfoEntity
>
skillInfo
,
boolean
isContinue
,
Map
<
String
,
String
>
groupMap
,
Map
<
Object
,
List
<
DispatchOrderListResp
.
Order
>>
groupByMap
,
String
groupTagId
)
{
DispatchOrderListResp
.
Order
item
=
new
DispatchOrderListResp
.
Order
();
item
.
setOrderId
(
o
.
getOrderId
());
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
()));
item
.
setBrand
(
o
.
getBrand
());
item
.
setType
(
o
.
getType
());
item
.
setSkill
(
o
.
getSkill
());
item
.
setFaultDescribe
(
o
.
getFaultDescribe
());
item
.
setApplyNote
(
o
.
getApplyNote
());
String
key
=
String
.
format
(
"%s%s%s"
,
o
.
getBrand
(),
o
.
getType
(),
o
.
getSkill
());
SkillInfoEntity
skill
=
skillInfo
.
get
(
key
);
if
(
skill
!=
null
)
{
item
.
setDuration
(
skill
.
getTakeTime
());
item
.
setSkillCategory
(
skill
.
getSkillCategory
());
item
.
setTypeCategory
(
skill
.
getTypeCategory
());
}
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setCity
(
o
.
getCity
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setProvince
(
o
.
getProvince
());
item
.
setCity
(
o
.
getCity
());
item
.
setCounty
(
o
.
getCounty
());
item
.
setAddress
(
o
.
getAddress
());
item
.
setName
(
o
.
getName
());
item
.
setPhone
(
o
.
getPhone
());
item
.
setExpectTimeDesc
(
o
.
getExpectTimeDesc
());
item
.
setSource
(
o
.
getSource
());
item
.
setDispatcher
(
o
.
getDispatcher
());
item
.
setAppointmentType
(
o
.
getAppointmentMethod
());
item
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
item
.
setOrderStatus
(
o
.
getOrderStatus
());
item
.
setServiceStatus
(
o
.
getServiceStatus
());
item
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
item
.
setMultipleOrders
(
o
.
getMultipleOrders
());
item
.
setIsMultiple
(
o
.
getIsMultiple
());
item
.
setIsAppointEngineer
(
o
.
getIsAppointEngineer
());
item
.
setAppointEngineerCodes
(
o
.
getAppointEngineerCodes
());
item
.
setTranscend
(
o
.
getTranscend
());
item
.
setBeanPriority
(
o
.
getBeanPriority
());
item
.
setOrgGroupId
(
o
.
getOrgGroupId
());
item
.
setIsSpecialTime
(
o
.
getIsSpecialTime
());
item
.
setOrgGroupName
(
groupMap
.
get
(
o
.
getOrgGroupId
()));
if
(
isContinue
&&
StringUtils
.
isNotEmpty
(
o
.
getMultipleOrders
()))
{
List
<
OrderInfoEntity
>
byMultipleOrders
=
orderInfoDao
.
findByMultipleOrders
(
o
.
getMultipleOrders
());
List
<
DispatchOrderListResp
.
Order
>
multipleItems
=
new
ArrayList
<>();
for
(
OrderInfoEntity
info
:
byMultipleOrders
)
{
multipleItems
.
add
(
orderItemByOrderInfo
(
info
,
skillInfo
,
false
,
groupMap
,
groupByMap
,
groupTagId
));
}
item
.
setMultipleOrderList
(
multipleItems
);
}
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
zero
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getBeanPriority
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getBeanPriority
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
one
.
getCode
())
&&
null
!=
item
.
getDuration
())
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getDuration
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
two
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getExpectTimeDesc
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getExpectTimeDesc
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
three
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getOrgGroupName
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getOrgGroupName
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
four
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getSkill
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getSkill
());
}
else
if
(
groupTagId
.
equals
(
OrderGroupEnum
.
five
.
getCode
())
&&
StringUtils
.
isNotEmpty
(
item
.
getMultipleOrders
()))
{
makeOrderMap
(
groupByMap
,
item
,
item
.
getMultipleOrders
());
}
else
{
makeOrderMap
(
groupByMap
,
item
,
"默认分类"
);
}
return
item
;
}
/**
* 组装data数据到map
*
* @param groupByMap
* @param item
* @param groupkey
*/
private
void
makeOrderMap
(
Map
<
Object
,
List
<
DispatchOrderListResp
.
Order
>>
groupByMap
,
DispatchOrderListResp
.
Order
item
,
Object
groupkey
)
{
List
<
DispatchOrderListResp
.
Order
>
groupByList
;
if
(
groupByMap
.
containsKey
(
groupkey
))
{
groupByList
=
groupByMap
.
get
(
groupkey
);
}
else
{
groupByList
=
new
ArrayList
<>();
}
groupByList
.
add
(
item
);
groupByMap
.
put
(
groupkey
,
groupByList
);
}
private
List
<
OrderInfoEntity
>
queryOrders
(
DispatchOrderListReq
reqDTO
)
{
// 获取服务单列表
...
...
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderInfoServiceImpl.java
0 → 100644
View file @
5c875dc
package
com
.
dituhui
.
pea
.
order
.
service
.
impl
;
import
com.dituhui.pea.common.Result
;
import
com.dituhui.pea.order.dao.OrderInfoDao
;
import
com.dituhui.pea.order.entity.OrderInfoEntity
;
import
com.dituhui.pea.order.service.OrderInfoService
;
import
com.dituhui.pea.util.UUIDUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Service
@Slf4j
public
class
OrderInfoServiceImpl
implements
OrderInfoService
{
@Autowired
private
OrderInfoDao
orderInfoDao
;
/**
* 新增订单处理一家多单逻辑
*
* @param dt 订单日期 列:2023-07-21
* @param addressId 地址id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
@Override
@Transactional
public
Result
<
String
>
addMultipleOrders
(
String
dt
,
String
addressId
)
{
List
<
OrderInfoEntity
>
infoList
=
orderInfoDao
.
findByDtAndAddressId
(
dt
,
addressId
);
if
(
CollectionUtils
.
isEmpty
(
infoList
))
{
return
Result
.
success
(
null
);
}
List
<
String
>
multipleOrdersList
=
infoList
.
stream
().
filter
(
e
->
StringUtils
.
isNotEmpty
(
e
.
getMultipleOrders
())).
map
(
OrderInfoEntity:
:
getMultipleOrders
).
distinct
().
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isNotEmpty
(
multipleOrdersList
))
{
return
Result
.
success
(
multipleOrdersList
.
get
(
0
));
}
String
uuid
=
UUIDUtil
.
getUuid
();
for
(
OrderInfoEntity
orderInfoEntity
:
infoList
)
{
orderInfoEntity
.
setMultipleOrders
(
uuid
);
orderInfoDao
.
save
(
orderInfoEntity
);
}
return
Result
.
success
(
uuid
);
}
/**
* 取消指定订单一家多台
*
* @param multipleOrders 订单关联id
* @param orderId 订单id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
@Override
@Transactional
public
Result
deleteMultipleOrders
(
String
multipleOrders
,
String
orderId
)
{
List
<
OrderInfoEntity
>
infoList
=
orderInfoDao
.
findByMultipleOrders
(
multipleOrders
);
for
(
OrderInfoEntity
infoEntity
:
infoList
)
{
if
(
infoEntity
.
getOrderId
().
equals
(
orderId
))
{
infoEntity
.
setMultipleOrders
(
null
);
orderInfoDao
.
save
(
infoEntity
);
}
if
(
infoList
.
size
()
==
2
)
{
infoEntity
.
setMultipleOrders
(
null
);
orderInfoDao
.
save
(
infoEntity
);
}
}
return
Result
.
success
();
}
}
project-order/src/main/java/com/dituhui/pea/order/service/impl/OrderServiceListServiceImpl.java
View file @
5c875dc
...
...
@@ -33,6 +33,9 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
@Autowired
private
OrgBranchDao
orgBranchDao
;
@Autowired
private
OrderInfoDao
orderInfoDao
;
@Transactional
@Override
public
Result
<
OrderServiceListResp
>
getOrderServiceList
(
OrderServiceListReq
reqDTO
)
throws
BusinessException
{
...
...
@@ -124,12 +127,12 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record
.
setDescription
(
o
.
getDescription
());
record
.
setPriority
(
o
.
getPriority
());
record
.
setOrgBranchName
(
branchNames
.
getOrDefault
(
o
.
getOrgBranchId
(),
""
));
// 获取工程师信息,为派工为空
if
(
StringUtils
.
isNotBlank
(
o
.
getEngineerCode
()))
{
List
<
String
>
names
=
this
.
getOrderEngineerNames
(
o
.
getEngineerCode
(),
o
.
getEngineerCodeSub
(),
engineerNames
);
record
.
setEngineerNum
(
names
.
size
());
//工程师数量
record
.
setEngineerNames
(
String
.
join
(
"、"
,
names
));
//工程师姓名列表
if
(
StringUtils
.
isNotBlank
(
o
.
getEngineerCode
()))
{
List
<
String
>
names
=
this
.
getOrderEngineerNames
(
o
.
getEngineerCode
(),
o
.
getEngineerCodeSub
(),
engineerNames
);
record
.
setEngineerNum
(
names
.
size
());
//工程师数量
record
.
setEngineerNames
(
String
.
join
(
"、"
,
names
));
//工程师姓名列表
}
record
.
setExpectTimeBegin
(
TimeUtils
.
IsoTimestamp2DateTime
(
o
.
getExpectTimeBegin
()));
...
...
@@ -146,7 +149,17 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record
.
setIsMultiple
(
o
.
getIsMultiple
());
record
.
setIsAppointEngineer
(
o
.
getIsAppointEngineer
());
record
.
setAppointEngineerCodes
(
o
.
getAppointEngineerCodes
());
record
.
setMultipleOrders
(
o
.
getMultipleOrders
());
record
.
setTranscend
(
o
.
getTranscend
());
record
.
setIsSpecialTime
(
o
.
getIsSpecialTime
());
if
(
StringUtils
.
isNotEmpty
(
o
.
getMultipleOrders
()))
{
List
<
OrderInfoEntity
>
byMultipleOrders
=
orderInfoDao
.
findByMultipleOrders
(
o
.
getMultipleOrders
());
List
<
OrderServiceList
>
multipleItems
=
new
ArrayList
<>();
for
(
OrderInfoEntity
info
:
byMultipleOrders
)
{
multipleItems
.
add
(
toMultipleOrders
(
info
,
branchNames
,
engineerNames
));
}
record
.
setMultipleOrderList
(
multipleItems
);
}
content
.
add
(
record
);
}
...
...
@@ -161,6 +174,50 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
return
Result
.
success
(
res
);
}
private
OrderServiceList
toMultipleOrders
(
OrderInfoEntity
o
,
Map
<
String
,
String
>
branchNames
,
Map
<
String
,
String
>
engineerNames
)
{
OrderServiceList
record
=
new
OrderServiceList
();
record
.
setOrderId
(
o
.
getOrderId
());
record
.
setType
(
o
.
getType
());
record
.
setBrand
(
o
.
getBrand
());
record
.
setSkill
(
o
.
getSkill
());
record
.
setTakeTime
(
o
.
getTakeTime
());
record
.
setFaultDescribe
(
o
.
getFaultDescribe
());
record
.
setName
(
o
.
getName
());
record
.
setPhone
(
o
.
getPhone
());
record
.
setAddress
(
String
.
format
(
"%s-%s-%s"
,
o
.
getCity
(),
o
.
getCounty
(),
o
.
getAddress
()));
record
.
setX
(
o
.
getX
());
record
.
setY
(
o
.
getY
());
record
.
setSource
(
o
.
getSource
());
record
.
setDescription
(
o
.
getDescription
());
record
.
setPriority
(
o
.
getPriority
());
record
.
setOrgBranchName
(
branchNames
.
getOrDefault
(
o
.
getOrgBranchId
(),
""
));
// 获取工程师信息,为派工为空
if
(
StringUtils
.
isNotBlank
(
o
.
getEngineerCode
()))
{
List
<
String
>
names
=
this
.
getOrderEngineerNames
(
o
.
getEngineerCode
(),
o
.
getEngineerCodeSub
(),
engineerNames
);
record
.
setEngineerNum
(
names
.
size
());
//工程师数量
record
.
setEngineerNames
(
String
.
join
(
"、"
,
names
));
//工程师姓名列表
}
record
.
setExpectTimeBegin
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getExpectTimeBegin
()));
record
.
setExpectTimeEnd
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getExpectTimeEnd
()));
record
.
setExpectTimeDesc
(
o
.
getExpectTimeDesc
());
record
.
setAppointmentType
(
o
.
getAppointmentMethod
());
record
.
setAppointmentStatus
(
o
.
getAppointmentStatus
());
record
.
setOrderStatus
(
o
.
getOrderStatus
());
record
.
setServiceStatus
(
o
.
getServiceStatus
());
record
.
setDispatcher
(
o
.
getDispatcher
());
record
.
setCreateTime
(
TimeUtils
.
IsoLocalDateTime2String
(
o
.
getCreateTime
()));
record
.
setBeanPriority
(
o
.
getBeanPriority
());
record
.
setIsMultiple
(
o
.
getIsMultiple
());
record
.
setIsAppointEngineer
(
o
.
getIsAppointEngineer
());
record
.
setAppointEngineerCodes
(
o
.
getAppointEngineerCodes
());
record
.
setMultipleOrders
(
o
.
getMultipleOrders
());
record
.
setTranscend
(
o
.
getTranscend
());
return
record
;
}
private
Map
<
String
,
String
>
getEngineerNames
(
List
<
OrderInfo
>
orders
)
{
// 获取技术员姓名
Set
<
String
>
engineerCodes
=
new
HashSet
<>();
...
...
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