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 32188e2e
authored
Jul 25, 2023
by
张晓
Browse files
Options
Browse Files
Download
Plain Diff
解决合并冲突
2 parents
afa28734
f36179c2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
189 additions
and
243 deletions
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/DispatchOrderRepository.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderAppointmentRepository.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderInfoRepository.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderRequestRepository.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/DispatchOrder.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/EngineerInfo.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/OrderAppointment.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/OrderRequest.java → project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/OrderInfo.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/pojo/Customer.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/scheduler/BatchScheduler.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/ExtractService.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/BatchServiceImpl.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/ExtractServiceImpl.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/SolveServiceImpl.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/utils/DataUtils.java
project-dispatch/src/test/java/com/dituhui/pea/dispatch/SolveServiceTest.java
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/DispatchOrderRepository.java
View file @
32188e2
...
...
@@ -10,13 +10,14 @@ import java.util.Optional;
public
interface
DispatchOrderRepository
extends
CrudRepository
<
DispatchOrder
,
Long
>
{
// 查看未指派非confirm的,供算法计算
@Query
(
"from DispatchOrder where groupId=?1 and batchNo=?2 and status !='CONFIRM' and (engineerCode is null or engineerCode='' ) "
)
List
<
DispatchOrder
>
findNotAssigned
(
String
groupId
,
String
batchNo
);
// 查看算法指派成功且非confirm状态的
@Query
(
"from DispatchOrder where groupId=?1 and batchNo=?2 and status !='CONFIRM' and
engineerCode is not null and engineerCode!=''
"
)
@Query
(
"from DispatchOrder where groupId=?1 and batchNo=?2 and status !='CONFIRM' and
( engineerCode is not null and engineerCode!='')
"
)
List
<
DispatchOrder
>
findAssigned
(
String
groupId
,
String
batchNo
);
Optional
<
DispatchOrder
>
findByGroupIdAndBatchNoAndOrderId
(
String
groupId
,
String
batchNo
,
String
orderId
);
Optional
<
DispatchOrder
>
findByGroupIdAndBatchNoAndOrderId
AndDt
(
String
groupId
,
String
batchNo
,
String
orderId
,
String
dt
);
}
\ No newline at end of file
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderAppointmentRepository.java
deleted
100644 → 0
View file @
afa2873
package
com
.
dituhui
.
pea
.
dispatch
.
dao
;
import
com.dituhui.pea.dispatch.entity.OrderAppointment
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.CrudRepository
;
import
java.util.Optional
;
public
interface
OrderAppointmentRepository
extends
CrudRepository
<
OrderAppointment
,
Long
>
{
@Query
(
value
=
"SELECT * FROM order_appointment WHERE order_id=:orderId ORDER BY id DESC LIMIT 1"
,
nativeQuery
=
true
)
Optional
<
OrderAppointment
>
findByOrderId
(
String
orderId
);
}
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderInfoRepository.java
0 → 100644
View file @
32188e2
package
com
.
dituhui
.
pea
.
dispatch
.
dao
;
import
com.dituhui.pea.dispatch.entity.OrderInfo
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.CrudRepository
;
import
java.time.LocalDate
;
import
java.util.Optional
;
public
interface
OrderInfoRepository
extends
CrudRepository
<
OrderInfo
,
Long
>
{
// @Query(value = "SELECT * FROM order_info WHERE order_id=:orderId ORDER BY dt DESC LIMIT 1",nativeQuery = true)
Optional
<
OrderInfo
>
findOrderInfoByOrderIdAndDt
(
String
orderId
,
LocalDate
dt
);
}
project-dispatch/src/main/java/com/dituhui/pea/dispatch/dao/OrderRequestRepository.java
deleted
100644 → 0
View file @
afa2873
package
com
.
dituhui
.
pea
.
dispatch
.
dao
;
import
com.dituhui.pea.dispatch.entity.OrderRequest
;
import
org.springframework.data.repository.CrudRepository
;
import
java.util.Optional
;
public
interface
OrderRequestRepository
extends
CrudRepository
<
OrderRequest
,
Long
>
{
Optional
<
OrderRequest
>
findByOrderId
(
String
orderId
);
}
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/DispatchOrder.java
View file @
32188e2
...
...
@@ -30,9 +30,15 @@ public class DispatchOrder implements Serializable {
@Column
(
name
=
"batch_no"
)
private
String
batchNo
;
@Column
(
name
=
"team_id"
)
private
String
teamId
;
@Column
(
name
=
"order_id"
)
private
String
orderId
;
@Column
(
name
=
"dt"
)
private
String
dt
;
@Column
(
name
=
"x"
)
private
String
X
;
...
...
@@ -73,6 +79,14 @@ public class DispatchOrder implements Serializable {
@Column
(
name
=
"time_end"
)
private
LocalDateTime
timeEnd
;
//到达耗时(分钟)
@Column
(
name
=
"path_time"
)
private
Integer
pathTime
;
//到达距离(米)
@Column
(
name
=
"path_distance"
)
private
Integer
pathDistance
;
private
String
status
;
private
String
ext
;
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/EngineerInfo.java
View file @
32188e2
...
...
@@ -45,11 +45,6 @@ public class EngineerInfo implements Serializable {
private
String
credentials
;
private
Integer
vehicle
;
@Column
(
name
=
"vehicle_no"
)
private
String
vehicleNo
;
@Column
(
name
=
"bean_status"
)
private
Integer
beanStatus
;
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/OrderAppointment.java
deleted
100644 → 0
View file @
afa2873
package
com
.
dituhui
.
pea
.
dispatch
.
entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonDeserialize
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
@Data
@Entity
@Table
(
name
=
"order_appointment"
)
public
class
OrderAppointment
implements
Serializable
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Integer
id
;
@Column
(
name
=
"order_id"
)
private
String
orderId
;
@Column
(
name
=
"suborder_id"
)
private
String
suborderId
;
@Column
(
name
=
"main_sub"
)
private
Integer
mainSub
;
@Column
(
name
=
"engineer_code"
)
private
String
engineerCode
;
@Column
(
name
=
"engineer_name"
)
private
String
engineerName
;
@Column
(
name
=
"engineer_phone"
)
private
String
engineerPhone
;
@Column
(
name
=
"engineer_age"
)
private
Integer
engineerAge
;
@Column
(
name
=
"is_workshop"
)
private
Integer
isWorkshop
;
@JsonDeserialize
(
using
=
LocalDateDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"dt"
)
private
LocalDate
dt
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"expect_start_time"
)
private
LocalDateTime
expectStartTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"expect_end_time"
)
private
LocalDateTime
expectEndTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"actual_time"
)
private
LocalDateTime
actualTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"actual_start_time"
)
private
LocalDateTime
actualStartTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"actual_end_time"
)
private
LocalDateTime
actualEndTime
;
@Column
(
name
=
"pre_status"
)
private
String
preStatus
;
private
String
status
;
private
String
memo
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"create_time"
)
private
LocalDateTime
createTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"update_time"
)
private
LocalDateTime
updateTime
;
}
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/Order
Request
.java
→
project-dispatch/src/main/java/com/dituhui/pea/dispatch/entity/Order
Info
.java
View file @
32188e2
package
com
.
dituhui
.
pea
.
dispatch
.
entity
;
import
lombok.Data
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonDeserialize
;
...
...
@@ -17,20 +18,34 @@ import java.time.LocalDateTime;
@Data
@Entity
@Table
(
name
=
"order_
request
"
)
public
class
Order
Request
implements
Serializable
{
@Table
(
name
=
"order_
info
"
)
public
class
Order
Info
implements
Serializable
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
String
id
;
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Integer
id
;
@Column
(
name
=
"order_id"
)
private
String
orderId
;
@JsonDeserialize
(
using
=
LocalDateDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
private
LocalDate
dt
;
@Column
(
name
=
"sub_id"
)
private
String
subId
;
private
String
name
;
private
String
phone
;
private
String
province
;
private
String
city
;
private
String
county
;
private
String
address
;
@Column
(
name
=
"x"
)
...
...
@@ -39,11 +54,8 @@ public class OrderRequest implements Serializable {
@Column
(
name
=
"y"
)
private
String
Y
;
private
String
province
;
private
String
city
;
private
String
county
;
@Column
(
name
=
"bean_brand"
)
private
String
beanBrand
;
private
String
brand
;
...
...
@@ -51,19 +63,17 @@ public class OrderRequest implements Serializable {
private
String
skill
;
@Column
(
name
=
"apply_note"
)
private
String
applyNote
;
@Column
(
name
=
"take_time"
)
private
Integer
takeTime
;
@Column
(
name
=
"is_workshop"
)
private
Integer
isWorkshop
;
@Column
(
name
=
"fault_describe"
)
private
String
faultDescribe
;
@JsonDeserialize
(
using
=
LocalDateDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"dt"
)
private
LocalDate
dt
;
@Column
(
name
=
"apply_note"
)
private
String
applyNote
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
...
...
@@ -82,53 +92,96 @@ public class OrderRequest implements Serializable {
private
String
source
;
@Column
(
name
=
"bean_priority"
)
private
String
beanPriority
;
@Column
(
name
=
"bean_tags"
)
private
String
beanTags
;
@Column
(
name
=
"bean_status"
)
private
String
beanStatus
;
@Column
(
name
=
"bean_sub_status"
)
private
String
beanSubStatus
;
@Column
(
name
=
"area_id"
)
private
String
areaId
;
@Column
(
name
=
"or
der_priority
"
)
private
String
or
derPriority
;
@Column
(
name
=
"or
g_cluster_id
"
)
private
String
or
gClusterId
;
@Column
(
name
=
"order_tags"
)
private
String
orderTags
;
@Column
(
name
=
"org_branch_id"
)
private
String
orgBranchId
;
@Column
(
name
=
"org_group_id"
)
private
String
orgGroupId
;
@Column
(
name
=
"org_team_id"
)
private
String
orgTeamId
;
private
Integer
priority
;
private
String
tags
;
private
String
status
;
@Column
(
name
=
"appointment_method"
)
private
String
appointmentMethod
;
@Column
(
name
=
"appointment_status"
)
private
String
appointmentStatus
;
@Column
(
name
=
"
appointment_method
"
)
private
String
appointmentMethod
;
@Column
(
name
=
"
order_status
"
)
private
String
orderStatus
;
@Column
(
name
=
"
org_cluster_id
"
)
private
String
orgClusterId
;
@Column
(
name
=
"
service_status
"
)
private
String
serviceStatus
;
@Column
(
name
=
"
org_cluster_nam
e"
)
private
String
orgClusterNam
e
;
@Column
(
name
=
"
engineer_cod
e"
)
private
String
engineerCod
e
;
@Column
(
name
=
"
org_branch_id
"
)
private
String
orgBranchId
;
@Column
(
name
=
"
engineer_name
"
)
private
String
engineerName
;
@Column
(
name
=
"
org_branch_nam
e"
)
private
String
orgBranchNam
e
;
@Column
(
name
=
"
engineer_phon
e"
)
private
String
engineerPhon
e
;
@Column
(
name
=
"org_group_id"
)
private
String
orgGroupId
;
@Column
(
name
=
"engineer_code_sub"
)
private
String
engineerCodeSub
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"plan_start_time"
)
private
LocalDateTime
planStartTime
;
@Column
(
name
=
"org_group_name"
)
private
String
orgGroupName
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"plan_end_time"
)
private
LocalDateTime
planEndTime
;
@Column
(
name
=
"
org_team_i
d"
)
private
String
orgTeamI
d
;
@Column
(
name
=
"
arrive_elapse
d"
)
private
Integer
arriveElapse
d
;
@Column
(
name
=
"org_team_name"
)
private
String
orgTeamName
;
@Column
(
name
=
"arrive_distance"
)
private
Integer
arriveDistance
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"actual_start_time"
)
private
LocalDateTime
actualStartTime
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"actual_end_time"
)
private
LocalDateTime
actualEndTime
;
private
String
description
;
@Column
(
name
=
"extra_info"
)
private
String
extraInfo
;
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/pojo/Customer.java
View file @
32188e2
...
...
@@ -21,6 +21,8 @@ public class Customer {
private
long
id
;
private
String
code
;
// orderid(code)+dt 确定唯一一条工单
private
String
dt
;
@JsonIgnore
private
Location
location
;
// 时间窗 分钟
...
...
@@ -45,10 +47,11 @@ public class Customer {
public
Customer
()
{
}
public
Customer
(
long
id
,
String
code
,
Location
location
,
int
startTime
,
int
endTime
,
String
requiredSkill
,
public
Customer
(
long
id
,
String
code
,
String
dt
,
Location
location
,
int
startTime
,
int
endTime
,
String
requiredSkill
,
int
serviceDuration
)
{
this
.
id
=
id
;
this
.
code
=
code
;
this
.
dt
=
dt
;
this
.
location
=
location
;
this
.
startTime
=
startTime
;
this
.
endTime
=
endTime
;
...
...
@@ -116,7 +119,7 @@ public class Customer {
}
/**
* 与前一个订单或者出发地depot的距离
* 与前一个订单或者出发地depot的距离
(米)
*
* @return
*/
...
...
@@ -132,7 +135,7 @@ public class Customer {
}
/**
* 与前一个订单或者出发地depot的路程时间
* 与前一个订单或者出发地depot的路程时间
(分钟)
*
* @return
*/
...
...
@@ -168,16 +171,17 @@ public class Customer {
return
"Customer{"
+
"id="
+
id
+
", code='"
+
code
+
'\''
+
", dt='"
+
dt
+
'\''
+
", location="
+
location
+
", startTime="
+
startTime
+
", endTime="
+
endTime
+
", serviceDuration="
+
serviceDuration
+
", requiredSkill='"
+
requiredSkill
+
'\''
+
", technician="
+
((
technician
!=
null
)
?
technician
.
getCode
()
:
"null"
)
+
", technician="
+
((
technician
!=
null
)
?
technician
.
getCode
()
:
"null"
)
+
", previousCustomer="
+
((
previousCustomer
!=
null
)
?
previousCustomer
.
getCode
()
:
"null"
)
+
", nextCustomer="
+
((
nextCustomer
!=
null
)
?
nextCustomer
.
getCode
()
:
"null"
)
+
", arrivalTime="
+
arrivalTime
+
", departureTime="
+
((
getDepartureTime
()
!=
null
)
?
getDepartureTime
()
:
0
)
+
", departureTime="
+
((
getDepartureTime
()
!=
null
)
?
getDepartureTime
()
:
0
)
+
'}'
;
}
}
project-dispatch/src/main/java/com/dituhui/pea/dispatch/scheduler/BatchScheduler.java
View file @
32188e2
...
...
@@ -38,7 +38,7 @@ public class BatchScheduler {
@Value
(
"${dispatch.cron.next-day-limit}"
)
int
nextDaysLimit
=
3
;
int
nextDaysLimit
=
2
;
@Autowired
BatchService
batchService
;
...
...
@@ -75,10 +75,11 @@ public class BatchScheduler {
log
.
info
(
"dispatchRun begin----- group:{}, day:{}"
,
groupId
,
currDay
);
LocalTime
currentTime
=
LocalTime
.
now
();
LocalTime
cutoffTime
=
LocalTime
.
parse
(
"1
6
:00:00"
,
DateTimeFormatter
.
ISO_LOCAL_TIME
);
LocalTime
cutoffTime
=
LocalTime
.
parse
(
"1
8
:00:00"
,
DateTimeFormatter
.
ISO_LOCAL_TIME
);
// 明天单才有cutoff
if
(
i
==
1
&&
currentTime
.
isAfter
(
cutoffTime
))
{
/*if (i == 1 && currentTime.isAfter(cutoffTime)) {
log.info("dispatchRun 已过cutoff时间,更新pre状态为confirm----- group:{}, day:{}", groupId, currDay);
DispatchBatch dispatchBatch = batchService.queryBatchInfoByDay(groupId, currDay);
if (null == dispatchBatch.getBatchNo()) {
...
...
@@ -97,6 +98,7 @@ public class BatchScheduler {
}
continue;
}
*/
String
batchNo
=
batchService
.
buildBatchData
(
groupId
,
currDay
);
UUID
problemId
=
solveService
.
generateProblemId
(
groupId
,
batchNo
);
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/ExtractService.java
View file @
32188e2
...
...
@@ -11,7 +11,7 @@ import java.sql.SQLException;
* @author zhangx
* <p>
* 排班算法数据准备
* 排班结果解析到dispatch_order(更新补充技术员工号、上门时间) ,order_
appointment、order_request
* 排班结果解析到dispatch_order(更新补充技术员工号、上门时间) ,order_
info
*/
public
interface
ExtractService
{
...
...
@@ -19,9 +19,7 @@ public interface ExtractService {
/*
* 将dispath_order 中的计算结果,回写到 order_request, order_appointment
* order_appointment(新增、更新)
* order_request(主要更新状态)
* 将dispath_order 中的计算结果,回写到 order_info
* */
void
extractDispatchToOrder
(
String
groupId
,
String
batchNo
,
boolean
isConfirm
)
;
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/BatchServiceImpl.java
View file @
32188e2
...
...
@@ -101,54 +101,39 @@ public class BatchServiceImpl implements BatchService {
" order by a.engineer_code asc"
;
int
engCount
=
jdbcTemplate
.
update
(
sqlEngineer
,
batchNo
,
groupId
);
// 未派过的工单(虚拟指派不更改order_request.appointment_status,所以也包含在当前条件中)
String
sqlOrder
=
"INSERT INTO dispatch_order (group_id, batch_no, order_id , x, y, expect_time_begin, expect_time_end, tags, priority , skills , take_time )\n"
+
" select a.org_group_id, ? , a.order_id, a.x, a.y , \n"
+
" a.expect_time_begin, a.expect_time_end, a.tags, a.priority , concat(a.brand, '-', a.type, '-', a.skill) skills , b.take_time \n"
+
" from order_request a left join skill_info b on (a.brand=b.brand and a.type=b.type and a.skill=b.skill )\n"
+
" where a.org_group_id=? and a.status='OPEN' "
+
" and a.dt = ? "
+
" and a.appointment_status ='NOT_ASSIGNED' and a.appointment_method like 'AUTO%' \n"
+
" order by a.expect_time_begin asc "
;
// 未派过的工单(已派过PRE状态还可以再次派)
String
sqlOrder
=
"INSERT INTO dispatch_order (group_id, batch_no, team_id, order_id , dt, x, y, \n"
+
" expect_time_begin, expect_time_end, tags, priority , skills , take_time, status )\n"
+
" select a.org_group_id, ?, a.org_team_id , a.order_id, a.dt, a.x, a.y , \n"
+
" a.expect_time_begin, a.expect_time_end, a.tags, a.priority , \n"
+
" concat(a.brand, '-', a.type, '-', a.skill) skills , a.take_time , a.appointment_status\n"
+
" from order_info a \n"
+
" where a.org_group_id=? and a.dt = ? and bean_status='OPEN'\n"
+
" and appointment_method like 'AUTO%' and a.appointment_status in ('INIT','VIRTUAL', 'PRE')\n"
+
" and order_status ='NORMAL' and service_status='INIT'\n"
+
" order by a.expect_time_begin asc "
;
int
orderCount
=
jdbcTemplate
.
update
(
sqlOrder
,
batchNo
,
groupId
,
batchDay
);
// 已派过PRE状态还可以再次派
String
sqlOrderPre
=
"INSERT INTO dispatch_order (group_id, batch_no, order_id , x, y, expect_time_begin, expect_time_end, tags, priority , skills , take_time )\n"
+
" select a.org_group_id, ?, a.order_id, a.x, a.y , \n"
+
" a.expect_time_begin, a.expect_time_end, a.tags, a.priority , concat(a.brand,'-', a.type, '-', a.skill) skills , b.take_time \n"
+
" from order_request a "
+
" left join skill_info b on (a.brand=b.brand and a.type=b.type and a.skill=b.skill )\n"
+
" left join order_appointment o on (a.order_id =o.order_id)\n"
+
" where a.org_group_id=? and a.status='OPEN' \n"
+
" and a.dt = ? "
+
" and a.appointment_status = 'ASSIGNED' and a.appointment_method like 'AUTO%' \n"
+
" and o.pre_status in ('PRE') \n"
+
" order by a.expect_time_begin asc "
;
int
orderCountPre
=
jdbcTemplate
.
update
(
sqlOrderPre
,
batchNo
,
groupId
,
batchDay
);
// CONFIRM的订单再次入表(1占用时间窗 2,可视化需要展示)
String
sqlOrderConfirm
=
"INSERT INTO dispatch_order (group_id, batch_no, order_id , x, y, expect_time_begin, expect_time_end, tags, priority , skills , take_time, "
+
" engineer_code, seq, time_begin, time_end, status )\n"
+
" select a.org_group_id, ?, a.order_id, a.x, a.y , \n"
+
" a.expect_time_begin, a.expect_time_end, a.tags, a.priority , concat(a.brand,'-', a.type, '-', a.skill) skills , b.take_time, \n"
+
" o.engineer_code, -1, o.expect_start_time, o.expect_end_time, o.pre_status "
+
" from order_request a "
+
" left join skill_info b on (a.brand=b.brand and a.type=b.type and a.skill=b.skill )\n"
+
" left join order_appointment o on (a.order_id =o.order_id)\n"
+
" where a.org_group_id=? and a.status='OPEN' \n"
+
" and a.dt = ? "
+
" and o.pre_status in ('CONFIRM') \n"
+
" order by a.expect_time_begin asc "
;
// int orderCountConfirm = jdbcTemplate.update(sqlOrderConfirm, batchNo, groupId, batchDay);
log
.
info
(
"准备批次数据 orderCount :{}"
,
orderCount
);
log
.
info
(
"准备批次数据 orderCountPre :{}"
,
orderCountPre
);
// log.info("准备批次数据 orderCountConfirm :{}", orderCountConfirm);
if
(
orderCount
+
orderCountPre
>
0
)
{
// confirm的要做预占用,所以也加入进来
String
sqlOrderConfirm
=
"INSERT INTO dispatch_order (group_id, batch_no, team_id, order_id , dt, x, y, \n"
+
" expect_time_begin, expect_time_end, tags, priority , skills , take_time, status, engineer_code, time_begin, time_end )\n"
+
" select a.org_group_id, ?, a.org_team_id , a.order_id, a.dt, a.x, a.y , \n"
+
" a.expect_time_begin, a.expect_time_end, a.tags, a.priority , \n"
+
" concat(a.brand, '-', a.type, '-', a.skill) skills , a.take_time, a.appointment_status, \n"
+
" a.engineer_code, a.plan_start_time, a.plan_end_time \n"
+
" from order_info a \n"
+
" where a.org_group_id=? and a.dt = ? and bean_status='OPEN'\n"
+
" and appointment_method like 'AUTO%' and a.appointment_status in ('CONFIRM')\n"
+
" and order_status ='NORMAL' and service_status='INIT'\n"
+
" order by a.expect_time_begin asc "
;
int
orderConfirmCount
=
jdbcTemplate
.
update
(
sqlOrderConfirm
,
batchNo
,
groupId
,
batchDay
);
log
.
info
(
"准备批次数据 orderCount:{}, orderConfirmCount:{}"
,
orderCount
,
orderConfirmCount
);
if
(
orderCount
+
orderConfirmCount
>
0
)
{
jdbcTemplate
.
update
(
"update dispatch_batch set engineer_num=? , order_num=?, start_time=?, end_time=null, status='RUNNING' where group_id=? and batch_no=?"
,
engCount
,
orderCount
+
orderCo
untPre
,
LocalDateTime
.
now
(),
groupId
,
batchNo
);
engCount
,
orderCount
+
orderCo
nfirmCount
,
LocalDateTime
.
now
(),
groupId
,
batchNo
);
}
else
{
jdbcTemplate
.
update
(
"update dispatch_batch set engineer_num=? , order_num=?, start_time=?, end_time=?, status='DONE' where group_id=? and batch_no=?"
,
engCount
,
0
,
LocalDateTime
.
now
(),
LocalDateTime
.
now
(),
groupId
,
batchNo
);
...
...
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/ExtractServiceImpl.java
View file @
32188e2
This diff is collapsed.
Click to expand it.
project-dispatch/src/main/java/com/dituhui/pea/dispatch/service/impl/SolveServiceImpl.java
View file @
32188e2
This diff is collapsed.
Click to expand it.
project-dispatch/src/main/java/com/dituhui/pea/dispatch/utils/DataUtils.java
View file @
32188e2
...
...
@@ -264,7 +264,7 @@ public class DataUtils {
// 初始化订单+技能服务时间
List
<
Customer
>
customerList
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
customerIndexMap
.
keySet
().
size
();
i
++)
{
customerList
.
add
(
new
Customer
(
i
+
1
,
customerIndexMap
.
get
(
i
+
1
),
locationIndex
.
get
(
i
+
2
),
customerList
.
add
(
new
Customer
(
i
+
1
,
customerIndexMap
.
get
(
i
+
1
),
"2000-01-01"
,
locationIndex
.
get
(
i
+
2
),
customerStartMap
.
get
(
i
+
1
),
customerEndMap
.
get
(
i
+
1
),
customerSkillMap
.
get
(
i
+
1
),
// 初始化技能服务时间
customerCodeServiceTimeMap
.
get
(
customerIndexMap
.
get
(
i
+
1
))));
...
...
project-dispatch/src/test/java/com/dituhui/pea/dispatch/SolveServiceTest.java
View file @
32188e2
...
...
@@ -44,6 +44,7 @@ class SolveServiceTest {
String
groupId
=
"gsuzhou"
;
String
day
=
"2023-07-25"
;
private
SolverManager
<
DispatchSolution
,
UUID
>
solverManager
;
private
SolverFactory
<
DispatchSolution
>
solverFactory
;
private
Solver
<
DispatchSolution
>
solver
;
...
...
@@ -55,6 +56,7 @@ class SolveServiceTest {
solverConfig
.
withConstraintProviderClass
(
DispatchConstraintProvider
.
class
);
solverConfig
.
withTerminationSpentLimit
(
Duration
.
ofSeconds
(
20
));
solverFactory
=
SolverFactory
.
create
(
solverConfig
);
solver
=
solverFactory
.
buildSolver
();
solverManager
=
SolverManager
.
create
(
solverConfig
,
new
SolverManagerConfig
());
...
...
@@ -81,7 +83,17 @@ class SolveServiceTest {
solveService
.
saveSolutionWrp
(
solution
);
extractService
.
extractDispatchToOrder
(
groupId
,
batchNo
,
false
);
log
.
info
(
"testAsync done"
);
}
@Test
public
void
testExtraceToOrder
()
throws
InterruptedException
{
log
.
info
(
"testExtraceToOrder init"
);
String
batchNo
=
"20230723-0810"
;
extractService
.
extractDispatchToOrder
(
groupId
,
batchNo
,
false
);
log
.
info
(
"testExtraceToOrder done"
);
}
}
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