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 5ed5f699
authored
Jun 15, 2023
by
王力
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature_mvp616_wangl' into 'develop'
Feature mvp616 wangl See merge request !88
2 parents
836ed73c
6b753b65
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
167 additions
and
4 deletions
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/OrderAppointment.java
project-order/src/main/java/com/alibaba/cloud/integration/order/service/impl/DispatchServiceImpl.java
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/OrderAppointment.java
View file @
5ed5f69
...
...
@@ -9,18 +9,18 @@ public class OrderAppointment {
private
Integer
id
;
private
String
orderId
;
private
String
suborderId
;
private
String
mainSub
;
private
Integer
mainSub
;
private
String
engineerCode
;
private
String
engineerName
;
private
String
engineerPhone
;
private
String
engineerAge
;
private
String
isWorkshop
;
private
Integer
isWorkshop
;
private
Timestamp
expectStartTime
;
private
Timestamp
expectEndTime
;
private
Timestamp
actualTime
;
private
Timestamp
actualStartTime
;
private
Timestamp
actualEndTime
;
private
String
pre
_s
tatus
;
private
String
pre
S
tatus
;
private
String
status
;
private
String
memo
;
private
Timestamp
createTime
;
...
...
project-order/src/main/java/com/alibaba/cloud/integration/order/service/impl/DispatchServiceImpl.java
View file @
5ed5f69
package
com
.
alibaba
.
cloud
.
integration
.
order
.
service
.
impl
;
import
com.alibaba.cloud.integration.common.BusinessException
;
import
com.alibaba.cloud.integration.common.Result
;
import
com.alibaba.cloud.integration.order.dao.*
;
import
com.alibaba.cloud.integration.order.dto.DispatchEngineerOrderListResp
;
...
...
@@ -12,6 +13,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
java.sql.Timestamp
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -190,8 +192,56 @@ public class DispatchServiceImpl implements DispatchService {
}
@Override
public
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
List
<
String
>
orderIds
)
{
public
Result
<?>
dispatchOrderConfirm
(
String
engineerCode
,
List
<
String
>
orderIds
)
throws
BusinessException
{
// 派工台确认派单
EngineerInfo
engineer
=
this
.
queryEngineer
(
engineerCode
);
if
(
engineer
==
null
)
{
throw
new
BusinessException
(
"技术员不存在"
);
}
List
<
OrderRequest
>
orders
=
this
.
queryOrderRequestByOrderIds
(
orderIds
);
if
(
orders
.
isEmpty
())
{
throw
new
BusinessException
(
"订单号错误"
);
}
// 通过订单获取日期
Timestamp
t
=
orders
.
get
(
0
).
getExpectTimeBegin
();
String
date
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
).
format
(
t
.
toLocalDateTime
());
LambdaQueryWrapper
<
OrderAppointment
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
OrderAppointment:
:
getEngineerCode
,
engineerCode
);
lqw
.
ge
(
OrderAppointment:
:
getExpectStartTime
,
this
.
getTimestampFromDate
(
date
,
"00:00:00"
));
lqw
.
lt
(
OrderAppointment:
:
getExpectStartTime
,
this
.
getTimestampFromDate
(
date
,
"23:59:59"
));
lqw
.
orderByAsc
(
OrderAppointment:
:
getExpectStartTime
);
List
<
OrderAppointment
>
orderAppointments
=
orderAppointmentMPDao
.
selectList
(
lqw
);
// TODO,临时处理方案,后续调用派单引擎处理
OrderRequestScheduler
scheduler
=
new
OrderRequestScheduler
();
List
<
LineSegment
>
results
=
scheduler
.
scheduler
(
orders
,
orderAppointments
);
for
(
LineSegment
r
:
results
)
{
String
orderId
=
r
.
id
;
Timestamp
expectStartTime
=
scheduler
.
linePoint2Timestamp
(
r
.
start
,
date
);
Timestamp
expectEndTime
=
scheduler
.
linePoint2Timestamp
(
r
.
end
,
date
);
OrderAppointment
op
=
new
OrderAppointment
();
op
.
setOrderId
(
orderId
);
op
.
setSuborderId
(
Long
.
toString
(
System
.
currentTimeMillis
()));
op
.
setMainSub
(
1
);
op
.
setEngineerCode
(
engineerCode
);
op
.
setEngineerName
(
engineer
.
getName
());
op
.
setEngineerAge
(
""
);
op
.
setEngineerPhone
(
engineer
.
getPhone
());
op
.
setIsWorkshop
(
0
);
op
.
setExpectStartTime
(
expectStartTime
);
op
.
setExpectStartTime
(
expectEndTime
);
op
.
setPreStatus
(
"PRE"
);
op
.
setStatus
(
"PRE"
);
orderAppointmentMPDao
.
insert
(
op
);
}
return
null
;
}
...
...
@@ -245,6 +295,12 @@ public class DispatchServiceImpl implements DispatchService {
return
engineerInfoMPDao
.
selectList
(
lqw
);
}
private
EngineerInfo
queryEngineer
(
String
engineerCode
)
{
LambdaQueryWrapper
<
EngineerInfo
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
EngineerInfo:
:
getEngineerCode
,
engineerCode
);
return
engineerInfoMPDao
.
selectOne
(
lqw
);
}
private
List
<
String
>
queryOrgGroupIds
(
String
levelType
,
List
<
String
>
levelIds
)
{
LambdaQueryWrapper
<
OrgGroup
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
in
(
levelType
.
equals
(
"cluster"
),
OrgGroup:
:
getClusterId
,
levelIds
);
...
...
@@ -334,3 +390,109 @@ class GroupTagOmit implements GroupTag {
return
"默认分类#5"
;
}
}
class
LineSegment
{
public
String
id
;
public
int
start
;
public
int
end
;
public
LineSegment
(
String
id
,
int
start
,
int
end
)
{
this
.
id
=
id
;
this
.
start
=
start
;
this
.
end
=
end
;
}
}
class
Line
{
public
String
id
;
public
int
length
;
public
Line
(
String
id
,
int
length
)
{
this
.
id
=
id
;
this
.
length
=
length
;
}
}
class
LineSegmentScheduler
{
public
List
<
LineSegment
>
scheduleLineSegments
(
List
<
LineSegment
>
used
,
List
<
Line
>
newTasks
)
{
used
.
sort
(
Comparator
.
comparingInt
(
a
->
a
.
start
));
List
<
LineSegment
>
result
=
new
ArrayList
<>();
for
(
Line
task
:
newTasks
)
{
String
taskId
=
task
.
id
;
int
taskLength
=
task
.
length
;
boolean
scheduled
=
false
;
int
startRange
=
480
;
int
endRange
=
1440
;
if
(!
scheduled
)
{
for
(
int
i
=
0
;
i
<=
used
.
size
();
i
++)
{
int
start
;
if
(
i
==
0
)
{
start
=
startRange
;
}
else
{
start
=
used
.
get
(
i
-
1
).
end
;
}
int
end
;
if
(
i
==
used
.
size
()
||
used
.
get
(
i
).
start
>
endRange
)
{
end
=
endRange
;
}
else
{
end
=
used
.
get
(
i
).
start
;
}
if
(
end
-
start
>=
taskLength
)
{
int
taskStart
=
start
;
int
taskEnd
=
start
+
taskLength
;
LineSegment
s
=
new
LineSegment
(
taskId
,
taskStart
,
taskEnd
);
result
.
add
(
s
);
used
.
add
(
i
,
s
);
break
;
}
}
}
}
return
result
;
}
}
class
OrderRequestScheduler
{
public
List
<
LineSegment
>
scheduler
(
List
<
OrderRequest
>
orderRequests
,
List
<
OrderAppointment
>
orderAppointments
)
{
List
<
LineSegment
>
used
=
new
ArrayList
<>();
for
(
OrderAppointment
o
:
orderAppointments
)
{
LineSegment
s
=
new
LineSegment
(
o
.
getOrderId
(),
this
.
Timestamp2LinePoint
(
o
.
getExpectStartTime
()),
this
.
Timestamp2LinePoint
(
o
.
getExpectEndTime
()));
used
.
add
(
s
);
}
List
<
Line
>
newTasks
=
new
ArrayList
<>();
for
(
OrderRequest
o
:
orderRequests
)
{
Line
l
=
new
Line
(
o
.
getOrderId
(),
30
);
}
return
new
LineSegmentScheduler
().
scheduleLineSegments
(
used
,
newTasks
);
}
public
int
Timestamp2LinePoint
(
Timestamp
t
)
{
LocalDateTime
datetime
=
t
.
toLocalDateTime
();
return
datetime
.
getHour
()
*
60
+
datetime
.
getMinute
();
}
public
Timestamp
linePoint2Timestamp
(
int
x
,
String
date
)
{
int
base
=
60
;
int
hour
=
x
/
base
;
int
minute
=
x
%
base
;
String
datetime
=
String
.
format
(
"%s %d:%d:00"
,
date
,
hour
,
minute
);
return
Timestamp
.
valueOf
(
datetime
);
}
}
\ No newline at end of file
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