Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
GeoFlyApi
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
GeoFly
GeoFlyApi
Commits
26fb654f
Commit
26fb654f
authored
Apr 12, 2025
by
gdj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加任务统计接口和今日任务接口。
parent
744cfdef
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
442 additions
and
3 deletions
+442
-3
sample/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
+31
-0
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskSceneStatisticDTO.java
+19
-0
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskStatisticDTO.java
+33
-0
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskStatusStatisticDTO.java
+19
-0
sample/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java
+7
-0
sample/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
+7
-0
sample/src/main/java/com/dji/sample/wayline/model/enums/TaskSceneEnum.java
+41
-0
sample/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
+18
-0
sample/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
+267
-3
No files found.
sample/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
controller
;
import
com.dji.sample.common.model.CustomClaim
;
import
com.dji.sample.wayline.model.dto.TaskStatisticDTO
;
import
com.dji.sample.wayline.model.dto.WaylineJobDTO
;
import
com.dji.sample.wayline.model.param.CreateJobParam
;
import
com.dji.sample.wayline.model.param.UpdateJobParam
;
...
...
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.servlet.http.HttpServletRequest
;
import
javax.validation.Valid
;
import
java.sql.SQLException
;
import
java.util.List
;
import
java.util.Set
;
import
static
com
.
dji
.
sample
.
component
.
AuthInterceptor
.
TOKEN_CLAIM
;
...
...
@@ -100,4 +102,33 @@ public class WaylineJobController {
flighttaskService
.
updateJobStatus
(
workspaceId
,
jobId
,
param
);
return
HttpResultResponse
.
success
();
}
/**
* 统计数据
* @param workspaceId
* @return
*/
@GetMapping
(
"/{workspace_id}/jobs/statistics"
)
public
HttpResultResponse
<
List
<
TaskStatisticDTO
>>
getTaskStatistics
(
@PathVariable
(
name
=
"workspace_id"
)
String
workspaceId
,
@RequestParam
(
name
=
"time_type"
,
defaultValue
=
"0"
)
Integer
timeType
)
{
List
<
TaskStatisticDTO
>
dto
=
waylineJobService
.
getTaskStatistics
(
workspaceId
,
timeType
);
return
HttpResultResponse
.
success
(
dto
);
}
/**
* 今日任务
* @param page
* @param pageSize
* @param workspaceId
* @return
*/
@GetMapping
(
"/{workspace_id}/todayJobs"
)
public
HttpResultResponse
<
PaginationData
<
WaylineJobDTO
>>
getTodayJobs
(
@RequestParam
(
defaultValue
=
"1"
)
Long
page
,
@RequestParam
(
name
=
"page_size"
,
defaultValue
=
"10"
)
Long
pageSize
,
@RequestParam
(
name
=
"dock_sns"
,
required
=
false
)
String
dockSns
,
@PathVariable
(
name
=
"workspace_id"
)
String
workspaceId
)
{
PaginationData
<
WaylineJobDTO
>
data
=
waylineJobService
.
getTodayJobsByWorkspaceId
(
workspaceId
,
dockSns
,
page
,
pageSize
);
return
HttpResultResponse
.
success
(
data
);
}
}
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskSceneStatisticDTO.java
0 → 100644
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
model
.
dto
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @author guan
*/
@Data
public
class
TaskSceneStatisticDTO
implements
Serializable
{
private
Integer
taskScene
;
private
String
taskSceneName
;
private
Integer
count
;
}
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskStatisticDTO.java
0 → 100644
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
model
.
dto
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @author guan
*/
@Data
public
class
TaskStatisticDTO
implements
Serializable
{
String
date
;
Integer
count
;
Integer
finishCount
;
Integer
unfinishCount
;
//
/**
* 任务状态统计
*/
List
<
TaskStatusStatisticDTO
>
statusList
;
/**
* 任务起飞类型统计
*/
List
<
TaskSceneStatisticDTO
>
sceneList
;
}
sample/src/main/java/com/dji/sample/wayline/model/dto/TaskStatusStatisticDTO.java
0 → 100644
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
model
.
dto
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @author guan
*/
@Data
public
class
TaskStatusStatisticDTO
implements
Serializable
{
Integer
taskStatus
;
String
taskStatusName
;
Integer
count
;
}
sample/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobDTO.java
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
model
.
dto
;
import
com.dji.sample.wayline.model.enums.TaskSceneEnum
;
import
com.dji.sdk.cloudapi.wayline.OutOfControlActionEnum
;
import
com.dji.sdk.cloudapi.wayline.TaskTypeEnum
;
import
com.dji.sdk.cloudapi.wayline.WaylineTypeEnum
;
...
...
@@ -68,4 +69,10 @@ public class WaylineJobDTO {
private
WaylineTaskConditionDTO
conditions
;
private
String
parentId
;
/**
* 起飞类型
*/
private
TaskSceneEnum
taskScene
;
}
sample/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
View file @
26fb654f
...
...
@@ -82,4 +82,11 @@ public class WaylineJobEntity implements Serializable {
@TableField
(
"parent_id"
)
private
String
parentId
;
/**
* 任务起飞类型
*/
@TableField
(
"task_scene"
)
private
Integer
taskScene
;
}
sample/src/main/java/com/dji/sample/wayline/model/enums/TaskSceneEnum.java
0 → 100644
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
model
.
enums
;
import
com.fasterxml.jackson.annotation.JsonCreator
;
import
com.fasterxml.jackson.annotation.JsonValue
;
import
lombok.Getter
;
import
java.util.Arrays
;
import
java.util.Optional
;
/**
* 任务创建原因
* @author guan
*/
@Getter
public
enum
TaskSceneEnum
{
MODEL_TASK
(
0
,
"建模任务"
),
ROUTINE_PATROL_TASK
(
1
,
"常规巡查任务"
),
TEMPORARY_TAKEOFF_TASK
(
2
,
"临时起飞任务"
);
int
scene
;
String
sceneName
;
TaskSceneEnum
(
int
scene
,
String
sceneName
)
{
this
.
scene
=
scene
;
this
.
sceneName
=
sceneName
;
}
@JsonCreator
(
mode
=
JsonCreator
.
Mode
.
DELEGATING
)
public
static
TaskSceneEnum
find
(
Integer
scene
)
{
return
Arrays
.
stream
(
values
()).
filter
(
taskSceneEnum
->
taskSceneEnum
.
scene
==
scene
).
findAny
().
get
();
}
public
static
Optional
<
TaskSceneEnum
>
find
(
String
sceneName
)
{
return
Arrays
.
stream
(
values
()).
filter
(
taskSceneEnum
->
taskSceneEnum
.
sceneName
.
equals
(
sceneName
)).
findAny
();
}
}
sample/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
View file @
26fb654f
package
com
.
dji
.
sample
.
wayline
.
service
;
import
com.dji.sample.wayline.model.dto.TaskStatisticDTO
;
import
com.dji.sample.wayline.model.dto.WaylineJobDTO
;
import
com.dji.sample.wayline.model.enums.WaylineJobStatusEnum
;
import
com.dji.sample.wayline.model.param.CreateJobParam
;
...
...
@@ -79,9 +80,26 @@ public interface IWaylineJobService {
PaginationData
<
WaylineJobDTO
>
getJobsByWorkspaceId
(
String
workspaceId
,
String
dockSns
,
long
page
,
long
pageSize
);
/**
* 今日任务
* @param workspaceId
* @param dockSns
* @param page
* @param pageSize
* @return
*/
PaginationData
<
WaylineJobDTO
>
getTodayJobsByWorkspaceId
(
String
workspaceId
,
String
dockSns
,
long
page
,
long
pageSize
);
/**
* Query the wayline execution status of the dock.
* @param dockSn
* @return
*/
WaylineJobStatusEnum
getWaylineState
(
String
dockSn
);
/**
* 统计任务数据
* @param workspaceId
*/
List
<
TaskStatisticDTO
>
getTaskStatistics
(
String
workspaceId
,
Integer
timeType
);
}
sample/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
View file @
26fb654f
...
...
@@ -12,8 +12,12 @@ import com.dji.sample.manage.service.IDeviceService;
import
com.dji.sample.media.model.MediaFileCountDTO
;
import
com.dji.sample.media.service.IFileService
;
import
com.dji.sample.wayline.dao.IWaylineJobMapper
;
import
com.dji.sample.wayline.model.dto.TaskSceneStatisticDTO
;
import
com.dji.sample.wayline.model.dto.TaskStatisticDTO
;
import
com.dji.sample.wayline.model.dto.TaskStatusStatisticDTO
;
import
com.dji.sample.wayline.model.dto.WaylineJobDTO
;
import
com.dji.sample.wayline.model.entity.WaylineJobEntity
;
import
com.dji.sample.wayline.model.enums.TaskSceneEnum
;
import
com.dji.sample.wayline.model.enums.WaylineJobStatusEnum
;
import
com.dji.sample.wayline.model.param.CreateJobParam
;
import
com.dji.sample.wayline.service.IWaylineFileService
;
...
...
@@ -32,12 +36,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StringUtils
;
import
java.time.
Instant
;
import
java.time.
LocalDateTime
;
import
java.time.
ZoneId
;
import
java.time.
*
;
import
java.time.
format.DateTimeFormatter
;
import
java.time.
temporal.WeekFields
;
import
java.util.*
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -175,6 +181,37 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
return
new
PaginationData
<
WaylineJobDTO
>(
records
,
new
Pagination
(
pageData
.
getCurrent
(),
pageData
.
getSize
(),
pageData
.
getTotal
()));
}
@Override
public
PaginationData
<
WaylineJobDTO
>
getTodayJobsByWorkspaceId
(
String
workspaceId
,
String
dockSns
,
long
page
,
long
pageSize
)
{
LambdaQueryWrapper
<
WaylineJobEntity
>
waylineJobQueryWrapper
=
new
LambdaQueryWrapper
<
WaylineJobEntity
>()
.
eq
(
WaylineJobEntity:
:
getWorkspaceId
,
workspaceId
)
.
orderByDesc
(
WaylineJobEntity:
:
getId
);
if
(
StringUtils
.
hasText
(
dockSns
))
{
List
<
String
>
dockSnList
=
Arrays
.
asList
(
dockSns
.
split
(
","
));
if
(!
CollectionUtils
.
isEmpty
(
dockSnList
))
{
waylineJobQueryWrapper
.
in
(
WaylineJobEntity:
:
getDockSn
,
dockSnList
);
}
}
LocalDate
today
=
LocalDate
.
now
();
LocalDateTime
startOfDay
=
today
.
atStartOfDay
();
long
startTimestamp
=
startOfDay
.
toEpochSecond
(
ZoneOffset
.
UTC
);
waylineJobQueryWrapper
.
ge
(
WaylineJobEntity:
:
getBeginTime
,
startTimestamp
);
// 今天结束时间:23:59:59
LocalDateTime
endOfDay
=
today
.
atTime
(
23
,
59
,
59
);
long
endTimestamp
=
endOfDay
.
toEpochSecond
(
ZoneOffset
.
UTC
);
waylineJobQueryWrapper
.
le
(
WaylineJobEntity:
:
getBeginTime
,
endTimestamp
);
Page
<
WaylineJobEntity
>
pageData
=
mapper
.
selectPage
(
new
Page
<>(
page
,
pageSize
),
waylineJobQueryWrapper
);
List
<
WaylineJobDTO
>
records
=
pageData
.
getRecords
()
.
stream
()
.
map
(
this
::
entity2Dto
)
.
collect
(
Collectors
.
toList
());
return
new
PaginationData
<>(
records
,
new
Pagination
(
pageData
.
getCurrent
(),
pageData
.
getSize
(),
pageData
.
getTotal
()));
}
private
WaylineJobEntity
dto2Entity
(
WaylineJobDTO
dto
)
{
WaylineJobEntity
.
WaylineJobEntityBuilder
builder
=
WaylineJobEntity
.
builder
();
if
(
dto
==
null
)
{
...
...
@@ -201,6 +238,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.
dockSn
(
dto
.
getDockSn
())
.
workspaceId
(
dto
.
getWorkspaceId
())
.
taskType
(
Optional
.
ofNullable
(
dto
.
getTaskType
()).
map
(
TaskTypeEnum:
:
getType
).
orElse
(
null
))
.
taskScene
(
Optional
.
ofNullable
(
dto
.
getTaskScene
()).
map
(
TaskSceneEnum:
:
getScene
).
orElse
(
null
))
.
waylineType
(
Optional
.
ofNullable
(
dto
.
getWaylineType
()).
map
(
WaylineTypeEnum:
:
getValue
).
orElse
(
null
))
.
username
(
dto
.
getUsername
())
.
rthAltitude
(
dto
.
getRthAltitude
())
...
...
@@ -263,6 +301,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.
completedTime
(
WaylineJobStatusEnum
.
find
(
entity
.
getStatus
()).
getEnd
()
?
LocalDateTime
.
ofInstant
(
Instant
.
ofEpochMilli
(
entity
.
getUpdateTime
()),
ZoneId
.
systemDefault
())
:
null
)
.
taskType
(
TaskTypeEnum
.
find
(
entity
.
getTaskType
()))
.
taskScene
(
Objects
.
nonNull
(
entity
.
getTaskScene
())
?
TaskSceneEnum
.
find
(
entity
.
getTaskScene
())
:
null
)
.
waylineType
(
WaylineTypeEnum
.
find
(
entity
.
getWaylineType
()))
.
rthAltitude
(
entity
.
getRthAltitude
())
.
outOfControlAction
(
OutOfControlActionEnum
.
find
(
entity
.
getOutOfControlAction
()))
...
...
@@ -305,4 +344,229 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.
uploadedCount
(
uploadedSize
).
build
());
return
builder
.
build
();
}
/**
* 统计任务数据
* @param workspaceId
* @param timeType 0 周 1 月 2 年
*/
@Override
public
List
<
TaskStatisticDTO
>
getTaskStatistics
(
String
workspaceId
,
Integer
timeType
)
{
if
(
timeType
==
null
)
{
timeType
=
0
;
}
// 当前时间
ZoneId
zoneId
=
ZoneId
.
systemDefault
();
LocalDate
today
=
LocalDate
.
now
();
DateTimeFormatter
dayFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
long
startSecond
=
0L
;
long
endSecond
=
0L
;
// ===== 12日 =====
if
(
timeType
==
0
)
{
// 6天前 0点
startSecond
=
today
.
minusDays
(
6
).
atStartOfDay
(
zoneId
).
toEpochSecond
();
// 5天后 23:59:59
endSecond
=
today
.
plusDays
(
5
).
atTime
(
LocalTime
.
MAX
.
withNano
(
0
)).
atZone
(
zoneId
).
toEpochSecond
();
// 秒级时间戳;
}
// ===== 12周 =====
if
(
timeType
==
1
)
{
// 使用系统默认地区的周定义(通常是周一为第一天)
WeekFields
weekFields
=
WeekFields
.
of
(
Locale
.
getDefault
());
// 获取本周的周一
LocalDate
currentWeekStart
=
today
.
with
(
weekFields
.
dayOfWeek
(),
1
);
// 最小日期:6周前的周一
LocalDate
minDate
=
currentWeekStart
.
minusWeeks
(
6
);
// 最大日期:5周后的周日
LocalDate
maxDate
=
currentWeekStart
.
plusWeeks
(
5
).
with
(
weekFields
.
dayOfWeek
(),
7
);
// 转为时间戳(秒)
startSecond
=
minDate
.
atStartOfDay
().
toEpochSecond
(
ZoneOffset
.
UTC
);
endSecond
=
maxDate
.
atTime
(
23
,
59
,
59
).
toEpochSecond
(
ZoneOffset
.
UTC
);
}
// ===== 12月 =====
if
(
timeType
==
2
)
{
// 获取当前年份
int
year
=
Year
.
now
().
getValue
();
// 当年最小日期时间:2025-01-01 00:00:00
LocalDateTime
startOfYear
=
LocalDateTime
.
of
(
year
,
1
,
1
,
0
,
0
,
0
);
startSecond
=
startOfYear
.
toEpochSecond
(
ZoneOffset
.
UTC
);
// 当年最大日期时间:2025-12-31 23:59:59
LocalDateTime
endOfYear
=
LocalDateTime
.
of
(
year
,
12
,
31
,
23
,
59
,
59
);
endSecond
=
endOfYear
.
toEpochSecond
(
ZoneOffset
.
UTC
);
}
// 查询任务
LambdaQueryWrapper
<
WaylineJobEntity
>
waylineJobQueryWrapper
=
new
LambdaQueryWrapper
<>();
waylineJobQueryWrapper
.
between
(
WaylineJobEntity:
:
getBeginTime
,
startSecond
,
endSecond
);
List
<
WaylineJobEntity
>
waylineJobList
=
this
.
mapper
.
selectList
(
waylineJobQueryWrapper
);
// 对数据进行分析
if
(
timeType
==
0
)
{
Map
<
String
,
List
<
WaylineJobEntity
>>
dailyGrouped
=
waylineJobList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
item
->
{
Instant
instant
=
Instant
.
ofEpochMilli
(
item
.
getBeginTime
());
return
instant
.
atZone
(
zoneId
).
toLocalDate
().
format
(
dayFormatter
);
},
TreeMap:
:
new
,
// 指定使用 TreeMap 自动按 LocalDate 排序
Collectors
.
toList
()
));
List
<
String
>
dateList
=
new
ArrayList
<>();
// 前6天(不含今天)→ 今天往前推6天 到 今天
for
(
int
i
=
-
6
;
i
<=
0
;
i
++)
{
dateList
.
add
(
today
.
plusDays
(
i
).
format
(
dayFormatter
));
}
// 后5天(不含今天)
for
(
int
i
=
1
;
i
<=
5
;
i
++)
{
dateList
.
add
(
today
.
plusDays
(
i
).
format
(
dayFormatter
));
}
// 遍历 dateList
List
<
TaskStatisticDTO
>
newStatisticData
=
new
ArrayList
<>();
for
(
String
dayStr
:
dateList
)
{
List
<
WaylineJobEntity
>
curDayTaskList
=
dailyGrouped
.
getOrDefault
(
dayStr
,
new
ArrayList
<>());
TaskStatisticDTO
taskStatisticDTO
=
partitionTaskData
(
curDayTaskList
);
taskStatisticDTO
.
setDate
(
dayStr
);
newStatisticData
.
add
(
taskStatisticDTO
);
}
return
newStatisticData
;
}
if
(
timeType
==
1
)
{
// 按“周”分组
// 输出每周的分组
String
[]
weekLabels
=
{
"前六周"
,
"前五周"
,
"前四周"
,
"前三周"
,
"前两周"
,
"前一周"
,
"本周"
,
"后一周"
,
"后两周"
,
"后三周"
,
"后四周"
,
"后五周"
};
// 获取当前日期和周的起始日期(周一)
WeekFields
weekFields
=
WeekFields
.
of
(
Locale
.
getDefault
());
// 获取当前地区的周规则
LocalDate
startOfWeek
=
today
.
with
(
weekFields
.
dayOfWeek
(),
1
);
// 获取当前周的周一
List
<
List
<
WaylineJobEntity
>>
allWeeks
=
new
ArrayList
<>(
12
);
for
(
int
i
=
0
;
i
<
12
;
i
++)
{
allWeeks
.
add
(
new
ArrayList
<>());
}
// 按周填充数据
for
(
WaylineJobEntity
waylineJobEntity
:
waylineJobList
)
{
LocalDate
curDate
=
Instant
.
ofEpochMilli
(
waylineJobEntity
.
getBeginTime
()).
atZone
(
zoneId
).
toLocalDate
();
// 获取每个日期所在的周的起始日期(周一)
LocalDate
startOfCurrentWeek
=
curDate
.
with
(
weekFields
.
dayOfWeek
(),
1
);
// 计算这个周属于第几组,负数为前面几周,正数为后面几周
int
weekIndex
=
(
int
)
startOfCurrentWeek
.
until
(
startOfWeek
,
java
.
time
.
temporal
.
ChronoUnit
.
WEEKS
);
// 确保index在-6到+5之间(即12个周)
if
(
weekIndex
>=
-
6
&&
weekIndex
<=
5
)
{
// 将日期添加到相应的周组
allWeeks
.
get
(
weekIndex
+
6
).
add
(
waylineJobEntity
);
}
}
List
<
TaskStatisticDTO
>
newStatisticData
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<=
weekLabels
.
length
-
1
;
i
++)
{
TaskStatisticDTO
taskStatisticDTO
=
partitionTaskData
(
allWeeks
.
get
(
i
));
taskStatisticDTO
.
setDate
(
weekLabels
[
i
]);
newStatisticData
.
add
(
taskStatisticDTO
);
}
return
newStatisticData
;
}
if
(
timeType
==
2
)
{
// 获取当前年份(可以指定为某一年)
int
targetYear
=
Year
.
now
().
getValue
();
// 如果要固定写死,比如 2025 就直接 int targetYear = 2025;
// 日期格式化器:yyyy-MM
DateTimeFormatter
ymFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM"
);
// 初始化 Map(按当前年 1~12 月)
Map
<
String
,
List
<
WaylineJobEntity
>>
monthMap
=
new
LinkedHashMap
<>();
for
(
int
month
=
1
;
month
<=
12
;
month
++)
{
LocalDate
firstDayOfMonth
=
LocalDate
.
of
(
targetYear
,
month
,
1
);
String
key
=
firstDayOfMonth
.
format
(
ymFormatter
);
monthMap
.
put
(
key
,
new
ArrayList
<>());
}
// 数据填充(只放入当年的日期)
for
(
WaylineJobEntity
waylineJobEntity
:
waylineJobList
)
{
LocalDate
curDate
=
Instant
.
ofEpochMilli
(
waylineJobEntity
.
getBeginTime
()).
atZone
(
zoneId
).
toLocalDate
();
if
(
monthMap
.
containsKey
(
curDate
.
format
(
ymFormatter
)))
{
monthMap
.
get
(
curDate
.
format
(
ymFormatter
)).
add
(
waylineJobEntity
);
}
}
// 遍历数据
List
<
TaskStatisticDTO
>
newStatisticData
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
List
<
WaylineJobEntity
>>
entry
:
monthMap
.
entrySet
())
{
TaskStatisticDTO
taskStatisticDTO
=
partitionTaskData
(
entry
.
getValue
());
taskStatisticDTO
.
setDate
(
entry
.
getKey
());
newStatisticData
.
add
(
taskStatisticDTO
);
}
return
newStatisticData
;
}
return
new
ArrayList
<>();
}
// 区分数据
private
TaskStatisticDTO
partitionTaskData
(
List
<
WaylineJobEntity
>
taskList
)
{
TaskStatisticDTO
taskStatisticDTO
=
new
TaskStatisticDTO
();
// 初始化
taskStatisticDTO
.
setCount
(
taskList
.
size
());
// 任务状态 已完成 未完成
int
finishCount
=
0
;
int
unfinishCount
=
0
;
Map
<
Integer
,
List
<
WaylineJobEntity
>>
taskMapByTaskStatus
=
taskList
.
stream
().
filter
(
x
->
!
ObjectUtils
.
isEmpty
(
x
.
getStatus
())).
collect
(
Collectors
.
groupingBy
(
WaylineJobEntity:
:
getStatus
));
List
<
TaskStatusStatisticDTO
>
statusList
=
new
ArrayList
<>();
// 遍历任务状态
for
(
WaylineJobStatusEnum
waylineJobStatusEnum
:
WaylineJobStatusEnum
.
values
())
{
TaskStatusStatisticDTO
tempStatusDTO
=
new
TaskStatusStatisticDTO
();
tempStatusDTO
.
setTaskStatus
(
waylineJobStatusEnum
.
getVal
());
tempStatusDTO
.
setTaskStatusName
(
waylineJobStatusEnum
.
name
());
List
<
WaylineJobEntity
>
curStatusTaskList
=
taskMapByTaskStatus
.
getOrDefault
(
waylineJobStatusEnum
.
getVal
(),
new
ArrayList
<>());
tempStatusDTO
.
setCount
(
curStatusTaskList
.
size
());
boolean
statusEnd
=
waylineJobStatusEnum
.
getEnd
();
if
(
statusEnd
)
{
finishCount
+=
curStatusTaskList
.
size
();
}
else
{
unfinishCount
+=
curStatusTaskList
.
size
();
}
statusList
.
add
(
tempStatusDTO
);
}
taskStatisticDTO
.
setFinishCount
(
finishCount
);
taskStatisticDTO
.
setUnfinishCount
(
unfinishCount
);
taskStatisticDTO
.
setStatusList
(
statusList
);
Map
<
Integer
,
List
<
WaylineJobEntity
>>
taskMapByTaskScene
=
taskList
.
stream
().
filter
(
x
->
!
ObjectUtils
.
isEmpty
(
x
.
getTaskScene
())).
collect
(
Collectors
.
groupingBy
(
WaylineJobEntity:
:
getTaskScene
));
List
<
TaskSceneStatisticDTO
>
sceneList
=
new
ArrayList
<>();
// 任务起飞类型
for
(
TaskSceneEnum
taskSceneEnum
:
TaskSceneEnum
.
values
())
{
TaskSceneStatisticDTO
sceneDTO
=
new
TaskSceneStatisticDTO
();
sceneDTO
.
setTaskScene
(
taskSceneEnum
.
getScene
());
sceneDTO
.
setTaskSceneName
(
taskSceneEnum
.
getSceneName
());
List
<
WaylineJobEntity
>
curSceneTaskList
=
taskMapByTaskScene
.
getOrDefault
(
taskSceneEnum
.
getScene
(),
new
ArrayList
<>());
sceneDTO
.
setCount
(
curSceneTaskList
.
size
());
sceneList
.
add
(
sceneDTO
);
}
taskStatisticDTO
.
setSceneList
(
sceneList
);
return
taskStatisticDTO
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment