Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
W
work_service
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
licc
work_service
Commits
58170ac7
Commit
58170ac7
authored
Mar 06, 2021
by
nie'hong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善项目工时统计
parent
1898c2b4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
21 deletions
+138
-21
WorkProjectMapper.java
.../src/main/java/cn/wisenergy/mapper/WorkProjectMapper.java
+7
-0
WorkProjectMapper.xml
...gy-mapper/src/main/resources/mapper/WorkProjectMapper.xml
+26
-1
StatisticsServiceImpl.java
...java/cn/wisenergy/service/impl/StatisticsServiceImpl.java
+104
-19
AutoStatistics.java
...ain/java/cn/wisenergy/web/config/auto/AutoStatistics.java
+1
-1
No files found.
wisenergy-mapper/src/main/java/cn/wisenergy/mapper/WorkProjectMapper.java
View file @
58170ac7
...
...
@@ -55,4 +55,11 @@ public interface WorkProjectMapper extends BaseMapper<WorkProject> {
List
<
Integer
>
getProjectIdByManager
(
Integer
userId
);
List
<
WorkProject
>
getListByCentreIdAndIsConclusion
(
@Param
(
"centreId"
)
Integer
centreId
,
@Param
(
"isConclusion"
)
Integer
isConclusion
);
/**
* 如果项目为已结项,返回最后一次统计时间的年月。为未结项,返回当前年月
* @param projectId
* @return
*/
String
getLastDate
(
Integer
projectId
);
}
wisenergy-mapper/src/main/resources/mapper/WorkProjectMapper.xml
View file @
58170ac7
...
...
@@ -191,7 +191,18 @@
from
<include
refid=
"table"
/>
<where>
<include
refid=
"criteria"
/>
<if
test=
"isConclusion != null"
>
AND is_conclusion = #{isConclusion}
</if>
<if
test=
"deptId != null and managerId == null"
>
AND dept_id = #{deptId}
</if>
<if
test=
"deptId != null and managerId != null"
>
AND (dept_id = #{deptId} OR manager_id = #{managerId})
</if>
<if
test=
"managerId != null and deptId == null"
>
AND manager_id = #{managerId}
</if>
</where>
</select>
...
...
@@ -212,5 +223,19 @@
</if>
</select>
<select
id=
"getLastDate"
resultType=
"java.lang.String"
>
SELECT
CONCAT(YEAR (IF (is_conclusion = 0,max(work_day),now())),
'年',
MONTH (IF (is_conclusion = 0,max(work_day),now())),
'月'
)
FROM
work_project p
JOIN work_time_order t ON p.id = t.project_id
WHERE
p.id = #{projectId}
</select>
</mapper>
wisenergy-service/src/main/java/cn/wisenergy/service/impl/StatisticsServiceImpl.java
View file @
58170ac7
...
...
@@ -26,6 +26,8 @@ import org.springframework.stereotype.Service;
import
org.springframework.util.CollectionUtils
;
import
java.math.BigDecimal
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -565,9 +567,34 @@ public class StatisticsServiceImpl implements StatisticsService {
map
.
put
(
"managerId"
,
user
.
getId
());
}
// 查询项目
List
<
WorkProject
>
projects
=
workProjectMapper
.
getListByCriteria
(
map
);
// 所有项目的统计
map
.
put
(
"isAll"
,
false
);
userProjectWorkTimeStatistics
=
workTimeOrderMapper
.
getUserProjectWorkTimeStatistics
(
map
);
// 给返回前端的数据补全所有项目
if
(
CollectionUtil
.
isNotEmpty
(
projects
))
{
// 如果查询所有项目的统计为空,给集合里添加个元素
if
(
CollectionUtil
.
isEmpty
(
userProjectWorkTimeStatistics
))
{
UserWorkTimeStatisticsByProject
userWorkTimeStatisticsByProject
=
new
UserWorkTimeStatisticsByProject
();
List
<
ProjectWorkTimeAndType
>
projectWorkTimeAndTypes
=
new
ArrayList
<>();
userWorkTimeStatisticsByProject
.
setProjectWorkTimeAndType
(
projectWorkTimeAndTypes
);
userProjectWorkTimeStatistics
.
add
(
userWorkTimeStatisticsByProject
);
}
// 补全项目
List
<
Integer
>
projectIds
=
userProjectWorkTimeStatistics
.
get
(
0
).
getProjectWorkTimeAndType
().
stream
().
map
(
ProjectWorkTimeAndType:
:
getProjectId
).
collect
(
Collectors
.
toList
());
for
(
WorkProject
project
:
projects
)
{
if
(!
projectIds
.
contains
(
project
.
getId
()))
{
ProjectWorkTimeAndType
projectWorkTimeAndType
=
new
ProjectWorkTimeAndType
();
projectWorkTimeAndType
.
setProjectName
(
project
.
getProjectName
());
projectWorkTimeAndType
.
setProjectId
(
project
.
getId
());
projectWorkTimeAndType
.
setProjectType
(
project
.
getType
());
projectWorkTimeAndType
.
setNormalTime
(
0
);
projectWorkTimeAndType
.
setOverTime
(
0
);
userProjectWorkTimeStatistics
.
get
(
0
).
getProjectWorkTimeAndType
().
add
(
projectWorkTimeAndType
);
}
}
}
// 所有项目下所有人员的统计
map
.
replace
(
"isAll"
,
true
);
...
...
@@ -592,7 +619,6 @@ public class StatisticsServiceImpl implements StatisticsService {
}
// 部门级别以上的用户可以查询所管理项目的成员所填的其他类型的工单
List
<
Integer
>
userIds
=
workUserProjectMapper
.
selectUserIdByProjectIds
(
map
);
if
(
rank
.
contains
(
LevelRankEnum
.
DEPARTMENT_LEVEL
.
getRank
())
||
rank
.
contains
(
LevelRankEnum
.
CENTRAL_LEVEL
.
getRank
()))
{
// 获取其他类型统计信息
map
.
replace
(
"isAll"
,
false
);
...
...
@@ -603,9 +629,16 @@ public class StatisticsServiceImpl implements StatisticsService {
if
(
CollectionUtil
.
isNotEmpty
(
userWorkTimeStatisticsByProjectList
))
{
UserWorkTimeStatisticsByProject
userWorkTimeStatisticsByProject1
=
userWorkTimeStatisticsByProjectList
.
get
(
0
);
List
<
ProjectWorkTimeAndType
>
projectWorkTimeAndType1
=
userWorkTimeStatisticsByProject1
.
getProjectWorkTimeAndType
();
for
(
ProjectWorkTimeAndType
projectWorkTimeAndType
:
projectWorkTimeAndType1
)
{
projectWorkTimeAndType
.
setProjectName
(
types
.
get
(
projectWorkTimeAndType
.
getProjectType
()-
1
).
getName
());
}
collect
=
projectWorkTimeAndType1
.
stream
().
map
(
ProjectWorkTimeAndType:
:
getProjectType
).
collect
(
Collectors
.
toList
());
}
// 缺少类型,造对象传前端
UserWorkTimeStatisticsByProject
userWorkTimeStatisticsByProject1
=
new
UserWorkTimeStatisticsByProject
();
List
<
ProjectWorkTimeAndType
>
projectWorkTimeAndTypes
=
new
ArrayList
<>();
...
...
@@ -628,6 +661,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 查询各个项目下所有人的其他除了项目、商机、请假、调休类型的加班工时和平常工时
map
.
replace
(
"isAll"
,
true
);
List
<
UserWorkTimeStatisticsByProject
>
userWorkTimeStatisticsByProjects
=
workTimeOrderMapper
.
selectListByType
(
map
);
for
(
UserWorkTimeStatisticsByProject
userWorkTimeStatisticsByProject
:
userWorkTimeStatisticsByProjects
)
{
if
(!
userProjectWorkTimeStatistics1
.
contains
(
userWorkTimeStatisticsByProject
))
{
UserWorkTimeStatisticsByProject
userWorkTimeStatisticsByProject2
=
new
UserWorkTimeStatisticsByProject
();
...
...
@@ -643,15 +677,17 @@ public class StatisticsServiceImpl implements StatisticsService {
}
}
}
}
userProjectWorkTimeStatistics
.
addAll
(
0
,
userProjectWorkTimeStatistics1
);
// 赋值类型名称
for
(
UserWorkTimeStatisticsByProject
userProjectWorkTimeStatistic
:
userProjectWorkTimeStatistic
s
)
{
for
(
UserWorkTimeStatisticsByProject
userProjectWorkTimeStatistic
:
userWorkTimeStatisticsByProject
s
)
{
List
<
ProjectWorkTimeAndType
>
projectWorkTimeAndType
=
userProjectWorkTimeStatistic
.
getProjectWorkTimeAndType
();
for
(
ProjectWorkTimeAndType
workTimeAndType
:
projectWorkTimeAndType
)
{
workTimeAndType
.
setProjectName
(
types
.
get
(
workTimeAndType
.
getProjectType
()
-
1
).
getName
());
}
}
}
userProjectWorkTimeStatistics
.
addAll
(
0
,
userProjectWorkTimeStatistics1
);
// 取出单人的项目工时统计
for
(
UserWorkTimeStatisticsByProject
userProjectWorkTimeStatistic
:
userProjectWorkTimeStatistics
)
{
...
...
@@ -773,9 +809,16 @@ public class StatisticsServiceImpl implements StatisticsService {
}
else
{
projectStatisticsByMonths
.
addAll
(
0
,
projectStatisticsByMonths1
);
}
List
<
String
>
yearMonthList
=
new
ArrayList
<>();
if
(
projectId
!=
null
)
{
// 整个项目所占时间,未结项目截止时间为当月,已结项目截止时间为最后一次统计的时间
String
startDate
=
projectStatisticsByMonths
.
get
(
0
).
getStatisticsDateAndWorkTimes
().
get
(
0
).
getDate
();
String
endDate
=
workProjectMapper
.
getLastDate
(
projectId
);
yearMonthList
=
this
.
getYearMonthList
(
startDate
,
endDate
);
}
// 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月
this
.
conversionDateFormat
(
projectStatisticsByMonths
,
deptId
);
this
.
conversionDateFormat
(
projectStatisticsByMonths
,
yearMonthList
,
deptId
);
// 计算项目工时和成本合计
for
(
ProjectStatisticsByMonth
projectStatisticsByMonth
:
projectStatisticsByMonths
)
{
...
...
@@ -887,7 +930,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月
public
void
conversionDateFormat
(
List
<
ProjectStatisticsByMonth
>
projectStatisticsByMonths
,
Integer
deptId
)
{
public
void
conversionDateFormat
(
List
<
ProjectStatisticsByMonth
>
projectStatisticsByMonths
,
List
<
String
>
yearMonthList
,
Integer
deptId
)
{
for
(
ProjectStatisticsByMonth
projectStatisticsByMonth
:
projectStatisticsByMonths
)
{
List
<
ProjectStatisticsByMonth
.
StatisticsDateAndWorkTime
>
statisticsDateAndWorkTimes
=
projectStatisticsByMonth
.
getStatisticsDateAndWorkTimes
();
// 部门主键不为空时,日期格式只有某月
...
...
@@ -900,17 +943,43 @@ public class StatisticsServiceImpl implements StatisticsService {
statisticsDateAndWorkTime
.
setDate
(
stringBuilder
.
toString
());
}
}
else
{
for
(
int
i
=
statisticsDateAndWorkTimes
.
size
()
-
1
;
i
>
0
;
i
--)
{
String
date1
=
statisticsDateAndWorkTimes
.
get
(
i
).
getDate
();
String
date2
=
statisticsDateAndWorkTimes
.
get
(
i
-
1
).
getDate
();
// 如果不为当年统计数据的第一个月,则删除年份
if
(
date1
.
charAt
(
2
)
==
date2
.
charAt
(
2
)
&&
date1
.
charAt
(
3
)
==
date2
.
charAt
(
3
))
{
StringBuilder
dateBuilder1
=
new
StringBuilder
(
date1
);
// 删除年份
dateBuilder1
.
delete
(
0
,
5
);
statisticsDateAndWorkTimes
.
get
(
i
).
setDate
(
dateBuilder1
.
toString
());
for
(
int
i
=
0
;
i
<
yearMonthList
.
size
();
i
++)
{
String
s
=
yearMonthList
.
get
(
i
);
String
date
=
statisticsDateAndWorkTimes
.
get
(
i
).
getDate
();
if
(!
s
.
equals
(
date
))
{
ProjectStatisticsByMonth
.
StatisticsDateAndWorkTime
statisticsDateAndWorkTime
=
new
ProjectStatisticsByMonth
.
StatisticsDateAndWorkTime
();
statisticsDateAndWorkTime
.
setDate
(
s
);
statisticsDateAndWorkTime
.
setTotalTime
(
new
BigDecimal
(
"0"
));
statisticsDateAndWorkTime
.
setCost
(
new
BigDecimal
(
"0"
));
statisticsDateAndWorkTimes
.
add
(
i
,
statisticsDateAndWorkTime
);
}
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy年M月"
);
Date
parse
=
null
;
try
{
parse
=
format
.
parse
(
s
);
if
(
DateUtil
.
getMonth
(
parse
)
!=
1
&&
i
!=
0
)
{
String
s1
=
yearMonthList
.
get
(
i
);
String
substring
=
s1
.
substring
(
5
);
statisticsDateAndWorkTimes
.
get
(
i
).
setDate
(
substring
);
}
}
catch
(
ParseException
e
)
{
log
.
info
(
e
.
toString
());
}
}
// for (int i = statisticsDateAndWorkTimes.size() - 1; i > 0; i--) {
// String date1 = statisticsDateAndWorkTimes.get(i).getDate();
// String date2 = statisticsDateAndWorkTimes.get(i - 1).getDate();
//
// // 如果不为当年统计数据的第一个月,则删除年份
// if (date1.charAt(2) == date2.charAt(2) && date1.charAt(3) == date2.charAt(3)) {
// StringBuilder dateBuilder1 = new StringBuilder(date1);
// // 删除年份
// dateBuilder1.delete(0, 5);
// statisticsDateAndWorkTimes.get(i).setDate(dateBuilder1.toString());
// }
// }
}
}
}
...
...
@@ -942,4 +1011,20 @@ public class StatisticsServiceImpl implements StatisticsService {
return
rank
;
}
List
<
String
>
getYearMonthList
(
String
startDate
,
String
endDate
)
{
String
pattern
=
"yyyy年M月"
;
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
pattern
);
List
<
String
>
list
=
new
ArrayList
<>();
Calendar
calendar
=
DateUtil
.
convertStrToCalendar
(
startDate
,
pattern
);
Calendar
calendar2
=
DateUtil
.
convertStrToCalendar
(
endDate
,
pattern
);
list
.
add
(
startDate
);
for
(;!
calendar
.
equals
(
calendar2
);
)
{
calendar
.
add
(
Calendar
.
MONTH
,
1
);
String
format
=
sdf
.
format
(
calendar
.
getTime
());
list
.
add
(
format
);
}
return
list
;
}
}
wisenergy-web-admin/src/main/java/cn/wisenergy/web/config/auto/AutoStatistics.java
View file @
58170ac7
...
...
@@ -26,7 +26,7 @@ public class AutoStatistics {
private
WorkProjectTimeCostMapper
workProjectTimeCostMapper
;
@Transactional
@Scheduled
(
cron
=
"0
0
0 * * ?"
)
@Scheduled
(
cron
=
"0
5
0 * * ?"
)
public
void
autoStatistics
(){
log
.
info
(
"AutoStatistics[]autoStatistics[]自动统计任务"
);
Date
date
=
DateUtil
.
add
(
new
Date
(),
Calendar
.
MONTH
,
-
3
);
...
...
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