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 8179fcf1
authored
May 16, 2023
by
wangli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增工程师轨迹接口
1 parent
7d8f5cea
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
298 additions
and
0 deletions
project-order/src/main/java/com/alibaba/cloud/integration/order/controller/EnginnerTimelineController.java
project-order/src/main/java/com/alibaba/cloud/integration/order/dao/EngineerTimelineDao.java
project-order/src/main/java/com/alibaba/cloud/integration/order/dao/WarehouseInfoDao.java
project-order/src/main/java/com/alibaba/cloud/integration/order/dto/EnginnerTimelineReq.java
project-order/src/main/java/com/alibaba/cloud/integration/order/dto/EnginnerTimelineResp.java
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/EngineerTimeline.java
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/WarehouseInfo.java
project-order/src/main/java/com/alibaba/cloud/integration/order/service/EnginnerTimelineService.java
project-order/src/main/java/com/alibaba/cloud/integration/order/service/impl/EnginnerTimelineServiceImpl.java
project-order/src/main/java/com/alibaba/cloud/integration/order/controller/EnginnerTimelineController.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
controller
;
import
com.alibaba.cloud.integration.common.Result
;
import
com.alibaba.cloud.integration.order.dto.EnginnerTimelineReq
;
import
com.alibaba.cloud.integration.order.service.EnginnerTimelineService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
public
class
EnginnerTimelineController
{
@Autowired
private
EnginnerTimelineService
enginnerTimelineService
;
@GetMapping
(
"/enginner/work/trace"
)
public
Result
<?>
GetEnginnerTimeline
(
@RequestParam
EnginnerTimelineReq
req
)
{
return
enginnerTimelineService
.
GetEnginnerTimelines
(
req
.
getEnginnerCode
(),
req
.
getDate
());
}
}
project-order/src/main/java/com/alibaba/cloud/integration/order/dao/EngineerTimelineDao.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
dao
;
import
com.alibaba.cloud.integration.order.entity.EngineerTimeline
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Mapper
;
@Mapper
public
interface
EngineerTimelineDao
extends
BaseMapper
<
EngineerTimeline
>
{
}
project-order/src/main/java/com/alibaba/cloud/integration/order/dao/WarehouseInfoDao.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
dao
;
import
com.alibaba.cloud.integration.order.entity.WarehouseInfo
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Mapper
;
@Mapper
public
interface
WarehouseInfoDao
extends
BaseMapper
<
WarehouseInfo
>
{
}
project-order/src/main/java/com/alibaba/cloud/integration/order/dto/EnginnerTimelineReq.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
dto
;
import
lombok.Data
;
@Data
public
class
EnginnerTimelineReq
{
private
String
enginnerCode
;
private
String
date
;
}
project-order/src/main/java/com/alibaba/cloud/integration/order/dto/EnginnerTimelineResp.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
dto
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
EnginnerTimelineResp
{
private
String
engineerCode
;
private
String
engineerName
;
private
List
<
DynamicItem
>
dynamics
;
@Data
public
static
class
DynamicItem
{
private
String
title
;
private
String
time
;
private
Integer
status
;
private
String
text
;
private
String
location
;
private
String
type
;
}
}
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/EngineerTimeline.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
entity
;
import
lombok.Data
;
import
java.sql.Timestamp
;
@Data
public
class
EngineerTimeline
{
private
String
engineerCode
;
private
String
event
;
private
Timestamp
happen
;
private
String
orderId
;
private
String
suborderId
;
private
Integer
status
;
private
String
memo
;
private
Timestamp
createTime
;
private
Timestamp
updateTime
;
}
project-order/src/main/java/com/alibaba/cloud/integration/order/entity/WarehouseInfo.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
entity
;
import
lombok.Data
;
@Data
public
class
WarehouseInfo
{
private
Integer
warehouseId
;
private
String
warehouseNname
;
private
String
branchId
;
private
String
cityCode
;
private
String
address
;
private
String
x
;
private
String
y
;
}
project-order/src/main/java/com/alibaba/cloud/integration/order/service/EnginnerTimelineService.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
service
;
import
com.alibaba.cloud.integration.common.Result
;
public
interface
EnginnerTimelineService
{
Result
<?>
GetEnginnerTimelines
(
String
engineerCode
,
String
date
);
}
project-order/src/main/java/com/alibaba/cloud/integration/order/service/impl/EnginnerTimelineServiceImpl.java
0 → 100644
View file @
8179fcf
package
com
.
alibaba
.
cloud
.
integration
.
order
.
service
.
impl
;
import
com.alibaba.cloud.integration.common.Result
;
import
com.alibaba.cloud.integration.order.dao.*
;
import
com.alibaba.cloud.integration.order.dto.EnginnerTimelineResp
;
import
com.alibaba.cloud.integration.order.entity.EngineerInfo
;
import
com.alibaba.cloud.integration.order.entity.EngineerTimeline
;
import
com.alibaba.cloud.integration.order.entity.OrderRequest
;
import
com.alibaba.cloud.integration.order.entity.WarehouseInfo
;
import
com.alibaba.cloud.integration.order.entity.OrderAppointment
;
import
com.alibaba.cloud.integration.order.service.EnginnerTimelineService
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.sql.Timestamp
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
@Service
public
class
EnginnerTimelineServiceImpl
implements
EnginnerTimelineService
{
@Autowired
private
EngineerTimelineDao
engineerTimelineDao
;
@Autowired
private
OrderAppointmentDao
orderAppointmentDao
;
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
@Autowired
private
OrderRequestDao
orderRequestDao
;
@Autowired
private
WarehouseInfoDao
warehouseInfoDao
;
public
Result
<?>
GetEnginnerTimelines
(
String
engineerCode
,
String
date
){
// 工程师姓名
String
name
=
this
.
GetEnginnerName
(
engineerCode
);
// 获取工程师已完成的timeline数据
List
<
EngineerTimeline
>
timelines
=
this
.
EnginnerTimelines
(
engineerCode
,
date
);
// 获取工程师date日的订单数据
List
<
OrderAppointment
>
orders
=
this
.
OrderAppointments
(
engineerCode
,
date
);
// 获取客户地址
List
<
String
>
orderIds
=
new
ArrayList
<>();
for
(
OrderAppointment
o:
orders
)
{
orderIds
.
add
(
o
.
getOrderId
());
}
HashMap
<
String
,
String
>
orderLocations
=
this
.
OrderRequestsLocation
(
orderIds
);
// 获取配送站地址
String
branchId
=
this
.
EngineerBranchId
(
engineerCode
);
String
warehouseLocation
=
this
.
WarehouseLocation
(
branchId
);
List
<
EnginnerTimelineResp
.
DynamicItem
>
dynamics
=
this
.
PackItems
(
timelines
,
orders
,
orderLocations
,
warehouseLocation
);
EnginnerTimelineResp
res
=
new
EnginnerTimelineResp
();
res
.
setEngineerCode
(
engineerCode
);
res
.
setEngineerName
(
name
);
res
.
setDynamics
(
dynamics
);
return
Result
.
success
(
res
);
}
private
String
GetEnginnerName
(
String
enginerrCode
){
LambdaQueryWrapper
<
EngineerInfo
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
EngineerInfo:
:
getEngineerCode
,
enginerrCode
);
EngineerInfo
e
=
engineerInfoDao
.
selectOne
(
lqw
);
return
e
.
getName
();
}
private
List
<
OrderAppointment
>
OrderAppointments
(
String
engineerCode
,
String
date
){
// 获取指派单列表
LambdaQueryWrapper
<
OrderAppointment
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
OrderAppointment:
:
getEngineerCode
,
engineerCode
);
lqw
.
ge
(
OrderAppointment:
:
getExpectTime
,
date
+
" 00:00:00"
);
lqw
.
le
(
OrderAppointment:
:
getExpectTime
,
date
+
" 23:59:59"
);
return
orderAppointmentDao
.
selectList
(
lqw
);
}
private
List
<
EngineerTimeline
>
EnginnerTimelines
(
String
engineerCode
,
String
date
){
// 获取工程师timeline
List
<
String
>
events
=
Stream
.
of
(
"分站取还配件"
,
"已出发"
,
"加单"
).
collect
(
Collectors
.
toList
());
LambdaQueryWrapper
<
EngineerTimeline
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
EngineerTimeline:
:
getEngineerCode
,
engineerCode
);
lqw
.
ge
(
EngineerTimeline:
:
getHappen
,
date
+
" 00:00:00"
);
lqw
.
le
(
EngineerTimeline:
:
getHappen
,
date
+
" 23:59:59"
);
lqw
.
in
(
EngineerTimeline:
:
getEvent
,
events
);
return
engineerTimelineDao
.
selectList
(
lqw
);
}
private
HashMap
<
String
,
String
>
OrderRequestsLocation
(
List
<
String
>
orderIds
)
{
// 获取客户地址location
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
LambdaQueryWrapper
<
OrderRequest
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
in
(
OrderRequest:
:
getOrderId
,
orderIds
);
List
<
OrderRequest
>
orders
=
orderRequestDao
.
selectList
(
lqw
);
for
(
OrderRequest
o:
orders
){
map
.
put
(
o
.
getOrderId
(),
String
.
format
(
"%s,%s"
,
o
.
getX
(),
o
.
getY
()));
}
return
map
;
}
private
String
WarehouseLocation
(
String
branchId
)
{
// 获取配送站location
LambdaQueryWrapper
<
WarehouseInfo
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
WarehouseInfo:
:
getBranchId
,
branchId
);
WarehouseInfo
w
=
warehouseInfoDao
.
selectOne
(
lqw
);
return
String
.
format
(
"%s,%s"
,
w
.
getX
(),
w
.
getY
());
}
private
String
EngineerBranchId
(
String
engineerCode
)
{
LambdaQueryWrapper
<
EngineerInfo
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
EngineerInfo:
:
getEngineerCode
,
engineerCode
);
return
engineerInfoDao
.
selectOne
(
lqw
).
getBranchId
();
}
private
List
<
EnginnerTimelineResp
.
DynamicItem
>
PackItems
(
List
<
EngineerTimeline
>
timelines
,
List
<
OrderAppointment
>
orders
,
HashMap
<
String
,
String
>
locations
,
String
warehouseLocation
)
{
Integer
index
=
1
;
String
order_id
,
title
,
type
,
text
,
location
;
List
<
EnginnerTimelineResp
.
DynamicItem
>
items
=
new
ArrayList
<>();
Set
<
String
>
s
=
new
HashSet
<>();
for
(
EngineerTimeline
t:
timelines
){
EnginnerTimelineResp
.
DynamicItem
item
=
new
EnginnerTimelineResp
.
DynamicItem
();
if
(
t
.
getEvent
()
==
"分站取还配件"
)
{
title
=
t
.
getEvent
();
text
=
"取"
;
type
=
"other"
;
location
=
warehouseLocation
;
}
else
if
(
t
.
getEvent
()
==
"加单"
)
{
title
=
t
.
getEvent
();
text
=
"加"
;
type
=
"other"
;
location
=
locations
.
get
(
t
.
getOrderId
());
}
else
{
index
+=
1
;
title
=
String
.
format
(
"第%d单出发"
,
index
);
text
=
String
.
format
(
"%d"
,
index
);
type
=
"order"
;
location
=
locations
.
get
(
t
.
getOrderId
());
}
item
.
setTitle
(
title
);
item
.
setTime
(
this
.
Timestamp2Datetime
(
t
.
getHappen
()));
item
.
setStatus
(
1
);
item
.
setText
(
text
);
item
.
setLocation
(
location
);
item
.
setType
(
type
);
items
.
add
(
item
);
s
.
add
(
t
.
getOrderId
()
+
t
.
getSuborderId
());
}
for
(
OrderAppointment
o:
orders
){
order_id
=
o
.
getOrderId
()
+
o
.
getSuborderId
();
if
(
s
.
equals
(
order_id
))
{
continue
;
}
index
+=
1
;
EnginnerTimelineResp
.
DynamicItem
item
=
new
EnginnerTimelineResp
.
DynamicItem
();
item
.
setTitle
(
String
.
format
(
"第%d单出发"
,
index
));
item
.
setTime
(
this
.
Timestamp2Datetime
(
o
.
getExpectTime
()));
item
.
setStatus
(
0
);
item
.
setText
(
String
.
format
(
"%d"
,
index
));
item
.
setLocation
(
locations
.
get
(
o
.
getOrderId
()));
item
.
setType
(
"order"
);
items
.
add
(
item
);
}
// 根据items的time升序排序
items
.
stream
().
sorted
(
Comparator
.
comparing
(
EnginnerTimelineResp
.
DynamicItem
::
getTime
)).
collect
(
Collectors
.
toList
());
return
items
;
}
private
String
Timestamp2Datetime
(
Timestamp
t
)
{
DateTimeFormatter
df
=
DateTimeFormatter
.
ofPattern
(
"yyyy-mm-dd HH:MM:SS"
);
return
df
.
format
(
t
.
toLocalDateTime
());
}
}
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