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> {
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 @@
</select>
<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
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
(t.work_day &lt;= #{endDate} or t.work_day is null) AND (t.status IN (2, 5) or t.status is null)
<if test="startDate != null">
AND (t.work_day > #{startDate} or t.work_day is null)
</if>
AND ty.id in
t.work_day &lt;= #{endDate} AND t.status IN (2, 5)
AND t.type in
<foreach collection="queryType" item="type" open="(" close=")" separator=",">
#{type}
</foreach>
<if test="userIds.size != 0">
AND ( t.user_id in
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId}
</foreach>
OR t.user_id is null)
</if>
GROUP BY <if test="isAll">u.id,u.`name`,</if> ty.id,ty.name, t.is_overtime
<if test="startDate != null">
AND t.work_day >= #{startDate}
</if>
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>
</mapper>
......@@ -595,7 +595,9 @@ public class StatisticsServiceImpl implements StatisticsService {
List<Integer> userIds = workUserProjectMapper.selectUserIdByProjectIds(map);
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<>();
if (CollectionUtil.isNotEmpty(userWorkTimeStatisticsByProjectList)) {
......@@ -624,8 +626,17 @@ public class StatisticsServiceImpl implements StatisticsService {
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) {
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) {
if (userWorkTimeStatisticsByProject.getUserId() != null && userWorkTimeStatisticsByProject.getUserId().equals(workTimeStatisticsByProject.getUserId())) {
workTimeStatisticsByProject.getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProject.getProjectWorkTimeAndType());
......@@ -634,6 +645,13 @@ public class StatisticsServiceImpl implements StatisticsService {
}
}
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) {
......@@ -650,19 +668,19 @@ public class StatisticsServiceImpl implements StatisticsService {
projectWorkTimeAndType1.remove(i);
}
// 获取前一个对象
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(i-1);
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(i - 1);
if (projectWorkTimeAndTypes.getNormalTime() != null) {
totalTime += projectWorkTimeAndTypes.getNormalTime();
}
if (projectWorkTimeAndTypes.getOverTime()!=null) {
if (projectWorkTimeAndTypes.getOverTime() != null) {
totalTime += projectWorkTimeAndTypes.getOverTime();
}
}
// 最后一个对象
if (projectWorkTimeAndType1.size() != 0) {
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(projectWorkTimeAndType1.size()-1);
if (projectWorkTimeAndTypes.getOverTime()!=null) {
ProjectWorkTimeAndType projectWorkTimeAndTypes = projectWorkTimeAndType1.get(projectWorkTimeAndType1.size() - 1);
if (projectWorkTimeAndTypes.getOverTime() != null) {
totalTime += projectWorkTimeAndTypes.getOverTime();
}
if (projectWorkTimeAndTypes.getNormalTime() != null) {
......@@ -711,7 +729,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 项目/商机级别,以项目管理查询
map.put("managerId", userId);
}
}else {
} else {
map.put("projectId", projectId);
}
// 查询所管理项目的项目统计
......@@ -729,9 +747,12 @@ public class StatisticsServiceImpl implements StatisticsService {
// 部门的各个月对项目的贡献工时
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++) {
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();
statisticsDateAndWorkTime.setTotalTime(new BigDecimal("0"));
statisticsDateAndWorkTime.setCost(new BigDecimal("0"));
......@@ -741,6 +762,7 @@ public class StatisticsServiceImpl implements StatisticsService {
continue;
}
}
statisticsDateAndWorkTimes1.remove(statisticsDateAndWorkTimes1.size()-1);
}
}
}
......@@ -749,7 +771,7 @@ public class StatisticsServiceImpl implements StatisticsService {
if (deptId == null) {
projectStatisticsByMonths.addAll(projectStatisticsByMonths1);
} 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