Commit bb4660b1 authored by cq990612's avatar cq990612

Merge remote-tracking branch 'origin/chenqi' into chenqi

parents 7fefe48e 5086bd25
...@@ -107,5 +107,5 @@ public interface WorkTimeOrderMapper extends BaseMapper<WorkTimeOrder> { ...@@ -107,5 +107,5 @@ public interface WorkTimeOrderMapper extends BaseMapper<WorkTimeOrder> {
List<MonthlyWorkingHoursStatistics> selectCountByTypeAndStatus(@Param("userId") Integer userId, @Param("firstDayOfMonth") Date firstDayOfMonth, @Param("status") Integer[] status); List<MonthlyWorkingHoursStatistics> selectCountByTypeAndStatus(@Param("userId") Integer userId, @Param("firstDayOfMonth") Date firstDayOfMonth, @Param("status") Integer[] status);
List<UserWorkTimeStatisticsByProject> selectListByType(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("queryType") List<Integer> queryType, @Param("userIds") List<Integer> userIds, @Param("isAll") Boolean isAll); List<UserWorkTimeStatisticsByProject> selectListByType(Map<String,Object> map);
} }
...@@ -348,25 +348,35 @@ ...@@ -348,25 +348,35 @@
</select> </select>
<select id="selectListByType" resultMap="userWorkTimeStatisticsByProject"> <select id="selectListByType" resultMap="userWorkTimeStatisticsByProject">
SELECT <if test="isAll"> u.id AS user_id, u.`name` AS user_name,</if> <if test="!isAll"> '合计' AS user_name,</if> ty.id AS project_type, ty.name AS project_name, SELECT <if test="isAll"> u.id AS user_id, u.`name` AS user_name,</if> <if test="!isAll"> '合计' AS user_name,</if> t.type AS project_type,
IF(t.is_overtime = 0, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS normal_time IF(t.is_overtime = 0, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS over_time, IF(t.is_overtime=1, <if test="!isAll">0</if> <if test="isAll">null</if>, sum(t.work_time)) AS normal_time
from work_type ty left join work_time_order t on t.type = ty.id left join work_user u on t.user_id = u.id from work_time_order t JOIN work_user u ON t.user_id = u.id
where where
(t.work_day &lt;= #{endDate} or t.work_day is null) AND (t.status IN (2, 5) or t.status is null) t.work_day &lt;= #{endDate} AND t.status IN (2, 5)
<if test="startDate != null"> AND t.type in
AND (t.work_day > #{startDate} or t.work_day is null)
</if>
AND ty.id in
<foreach collection="queryType" item="type" open="(" close=")" separator=","> <foreach collection="queryType" item="type" open="(" close=")" separator=",">
#{type} #{type}
</foreach> </foreach>
<if test="userIds.size != 0"> <if test="startDate != null">
AND ( t.user_id in AND t.work_day >= #{startDate}
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId}
</foreach>
OR t.user_id is null)
</if> </if>
GROUP BY <if test="isAll">u.id,u.`name`,</if> ty.id,ty.name, t.is_overtime AND user_id in (
select user_id
from work_project p JOIN work_user_project up ON p.id = up.project_id
<if test="isConclusion != null">
AND p.is_conclusion = #{isConclusion}
</if>
<if test="deptId != null and managerId == null">
AND p.dept_id = #{deptId}
</if>
<if test="deptId != null and managerId != null">
AND (p.dept_id = #{deptId} OR p.manager_id = #{managerId})
</if>
<if test="managerId != null and deptId == null">
AND p.manager_id = #{managerId}
</if>
)
GROUP BY <if test="isAll">u.id,u.`name`,</if> t.type, t.is_overtime
</select> </select>
</mapper> </mapper>
...@@ -595,7 +595,9 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -595,7 +595,9 @@ public class StatisticsServiceImpl implements StatisticsService {
List<Integer> userIds = workUserProjectMapper.selectUserIdByProjectIds(map); List<Integer> userIds = workUserProjectMapper.selectUserIdByProjectIds(map);
if (rank.contains(LevelRankEnum.DEPARTMENT_LEVEL.getRank()) || rank.contains(LevelRankEnum.CENTRAL_LEVEL.getRank())) { if (rank.contains(LevelRankEnum.DEPARTMENT_LEVEL.getRank()) || rank.contains(LevelRankEnum.CENTRAL_LEVEL.getRank())) {
// 获取其他类型统计信息 // 获取其他类型统计信息
List<UserWorkTimeStatisticsByProject> userWorkTimeStatisticsByProjectList = workTimeOrderMapper.selectListByType(startDate, endDate, queryType, userIds, false); map.replace("isAll", false);
map.put("queryType", queryType);
List<UserWorkTimeStatisticsByProject> userWorkTimeStatisticsByProjectList = workTimeOrderMapper.selectListByType(map);
// 获取查询结果的类型 // 获取查询结果的类型
List<Integer> collect = new ArrayList<>(); List<Integer> collect = new ArrayList<>();
if (CollectionUtil.isNotEmpty(userWorkTimeStatisticsByProjectList)) { if (CollectionUtil.isNotEmpty(userWorkTimeStatisticsByProjectList)) {
...@@ -624,8 +626,17 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -624,8 +626,17 @@ public class StatisticsServiceImpl implements StatisticsService {
userProjectWorkTimeStatistics.get(0).getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProjectList.get(0).getProjectWorkTimeAndType()); userProjectWorkTimeStatistics.get(0).getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProjectList.get(0).getProjectWorkTimeAndType());
// 查询各个项目下所有人的其他除了项目、商机、请假、调休类型的加班工时和平常工时 // 查询各个项目下所有人的其他除了项目、商机、请假、调休类型的加班工时和平常工时
List<UserWorkTimeStatisticsByProject> userWorkTimeStatisticsByProjects = workTimeOrderMapper.selectListByType(startDate, endDate, queryType, userIds, true); map.replace("isAll", true);
List<UserWorkTimeStatisticsByProject> userWorkTimeStatisticsByProjects = workTimeOrderMapper.selectListByType(map);
for (UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject : userWorkTimeStatisticsByProjects) { for (UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject : userWorkTimeStatisticsByProjects) {
if (!userProjectWorkTimeStatistics1.contains(userWorkTimeStatisticsByProject)) {
UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject2 = new UserWorkTimeStatisticsByProject();
userWorkTimeStatisticsByProject2.setUserName(userWorkTimeStatisticsByProject.getUserName());
userWorkTimeStatisticsByProject2.setUserId(userWorkTimeStatisticsByProject.getUserId());
List<ProjectWorkTimeAndType> projectWorkTimeAndTypes1 = new ArrayList<>();
userWorkTimeStatisticsByProject2.setProjectWorkTimeAndType(projectWorkTimeAndTypes1);
userProjectWorkTimeStatistics1.add(userWorkTimeStatisticsByProject2);
}
for (UserWorkTimeStatisticsByProject workTimeStatisticsByProject : userProjectWorkTimeStatistics1) { for (UserWorkTimeStatisticsByProject workTimeStatisticsByProject : userProjectWorkTimeStatistics1) {
if (userWorkTimeStatisticsByProject.getUserId() != null && userWorkTimeStatisticsByProject.getUserId().equals(workTimeStatisticsByProject.getUserId())) { if (userWorkTimeStatisticsByProject.getUserId() != null && userWorkTimeStatisticsByProject.getUserId().equals(workTimeStatisticsByProject.getUserId())) {
workTimeStatisticsByProject.getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProject.getProjectWorkTimeAndType()); workTimeStatisticsByProject.getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProject.getProjectWorkTimeAndType());
...@@ -634,6 +645,13 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -634,6 +645,13 @@ public class StatisticsServiceImpl implements StatisticsService {
} }
} }
userProjectWorkTimeStatistics.addAll(0, userProjectWorkTimeStatistics1); userProjectWorkTimeStatistics.addAll(0, userProjectWorkTimeStatistics1);
// 赋值类型名称
for (UserWorkTimeStatisticsByProject userProjectWorkTimeStatistic : userProjectWorkTimeStatistics) {
List<ProjectWorkTimeAndType> projectWorkTimeAndType = userProjectWorkTimeStatistic.getProjectWorkTimeAndType();
for (ProjectWorkTimeAndType workTimeAndType : projectWorkTimeAndType) {
workTimeAndType.setProjectName(types.get(workTimeAndType.getProjectType() - 1).getName());
}
}
// 取出单人的项目工时统计 // 取出单人的项目工时统计
for (UserWorkTimeStatisticsByProject userProjectWorkTimeStatistic : userProjectWorkTimeStatistics) { for (UserWorkTimeStatisticsByProject userProjectWorkTimeStatistic : userProjectWorkTimeStatistics) {
...@@ -650,19 +668,19 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -650,19 +668,19 @@ public class StatisticsServiceImpl implements StatisticsService {
projectWorkTimeAndType1.remove(i); projectWorkTimeAndType1.remove(i);
} }
// 获取前一个对象 // 获取前一个对象
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(i-1); ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(i - 1);
if (projectWorkTimeAndTypes.getNormalTime() != null) { if (projectWorkTimeAndTypes.getNormalTime() != null) {
totalTime += projectWorkTimeAndTypes.getNormalTime(); totalTime += projectWorkTimeAndTypes.getNormalTime();
} }
if (projectWorkTimeAndTypes.getOverTime()!=null) { if (projectWorkTimeAndTypes.getOverTime() != null) {
totalTime += projectWorkTimeAndTypes.getOverTime(); totalTime += projectWorkTimeAndTypes.getOverTime();
} }
} }
// 最后一个对象 // 最后一个对象
if (projectWorkTimeAndType1.size() != 0) { if (projectWorkTimeAndType1.size() != 0) {
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(projectWorkTimeAndType1.size()-1); ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(projectWorkTimeAndType1.size() - 1);
if (projectWorkTimeAndTypes.getOverTime()!=null) { if (projectWorkTimeAndTypes.getOverTime() != null) {
totalTime += projectWorkTimeAndTypes.getOverTime(); totalTime += projectWorkTimeAndTypes.getOverTime();
} }
if (projectWorkTimeAndTypes.getNormalTime() != null) { if (projectWorkTimeAndTypes.getNormalTime() != null) {
...@@ -711,7 +729,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -711,7 +729,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 项目/商机级别,以项目管理查询 // 项目/商机级别,以项目管理查询
map.put("managerId", userId); map.put("managerId", userId);
} }
}else { } else {
map.put("projectId", projectId); map.put("projectId", projectId);
} }
// 查询所管理项目的项目统计 // 查询所管理项目的项目统计
...@@ -729,9 +747,12 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -729,9 +747,12 @@ public class StatisticsServiceImpl implements StatisticsService {
// 部门的各个月对项目的贡献工时 // 部门的各个月对项目的贡献工时
List<ProjectStatisticsByMonth.StatisticsDateAndWorkTime> statisticsDateAndWorkTimes1 = statisticsByMonth.getStatisticsDateAndWorkTimes(); List<ProjectStatisticsByMonth.StatisticsDateAndWorkTime> statisticsDateAndWorkTimes1 = statisticsByMonth.getStatisticsDateAndWorkTimes();
// 如果该部门对该项目的贡献的时间不是和该项目周期一样 // 如果该部门对该项目的贡献的时间不是和该项目周期一样
if (statisticsDateAndWorkTimes1.size() != statisticsDateAndWorkTimes.size()) { if (statisticsDateAndWorkTimes1.size() < statisticsDateAndWorkTimes.size()) {
ProjectStatisticsByMonth.StatisticsDateAndWorkTime statisticsDateAndWorkTime1 = new ProjectStatisticsByMonth.StatisticsDateAndWorkTime();
statisticsDateAndWorkTime1.setDate("");
statisticsDateAndWorkTimes1.add(statisticsDateAndWorkTime1);
for (int i = 0; i < statisticsDateAndWorkTimes.size(); i++) { for (int i = 0; i < statisticsDateAndWorkTimes.size(); i++) {
if (statisticsDateAndWorkTimes1.size() < statisticsDateAndWorkTimes.size() || !statisticsDateAndWorkTimes1.get(i).getDate().equals(statisticsDateAndWorkTimes.get(i).getDate())) { if ( !statisticsDateAndWorkTimes.get(i).getDate().equals(statisticsDateAndWorkTimes1.get(i).getDate())) {
ProjectStatisticsByMonth.StatisticsDateAndWorkTime statisticsDateAndWorkTime = new ProjectStatisticsByMonth.StatisticsDateAndWorkTime(); ProjectStatisticsByMonth.StatisticsDateAndWorkTime statisticsDateAndWorkTime = new ProjectStatisticsByMonth.StatisticsDateAndWorkTime();
statisticsDateAndWorkTime.setTotalTime(new BigDecimal("0")); statisticsDateAndWorkTime.setTotalTime(new BigDecimal("0"));
statisticsDateAndWorkTime.setCost(new BigDecimal("0")); statisticsDateAndWorkTime.setCost(new BigDecimal("0"));
...@@ -741,6 +762,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -741,6 +762,7 @@ public class StatisticsServiceImpl implements StatisticsService {
continue; continue;
} }
} }
statisticsDateAndWorkTimes1.remove(statisticsDateAndWorkTimes1.size()-1);
} }
} }
} }
...@@ -749,7 +771,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -749,7 +771,7 @@ public class StatisticsServiceImpl implements StatisticsService {
if (deptId == null) { if (deptId == null) {
projectStatisticsByMonths.addAll(projectStatisticsByMonths1); projectStatisticsByMonths.addAll(projectStatisticsByMonths1);
} else { } else {
projectStatisticsByMonths.addAll(0,projectStatisticsByMonths1); projectStatisticsByMonths.addAll(0, projectStatisticsByMonths1);
} }
// 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月 // 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment