Commit 7498caf7 authored by nie'hong's avatar nie'hong

完善工时统计

parent 3ad75783
......@@ -313,7 +313,7 @@
<select id="getUserProjectWorkTimeStatistics" resultMap="userWorkTimeStatisticsByProject">
SELECT <if test="isAll == true"> u.id AS user_id, u.`name` AS user_name,</if> <if test="isAll == false">'合计' AS user_name ,</if> t.project_id AS project_id, t.type AS project_type, p.project_name AS project_name, case t.is_overtime when 1 then '加班' ELSE '正常' end AS is_overtime,SUM(t.work_time) AS work_time
SELECT <if test="isAll"> u.id AS user_id, u.`name` AS user_name,</if> <if test="!isAll">'合计' AS user_name ,</if> t.project_id AS project_id, t.type AS project_type, p.project_name AS project_name, case t.is_overtime when 1 then '加班' ELSE '正常' end AS is_overtime,SUM(t.work_time) AS work_time
from work_time_order t left join work_project p on t.project_id = p.id join work_user u on t.user_id = u.id
where
t.status in (2,5) AND
......@@ -325,7 +325,7 @@
<foreach collection="projectIds" item="projectId" open="(" close=")" separator=",">
#{projectId}
</foreach>
GROUP BY <if test="isAll == true"> u.id,u.`name`,</if>t.project_id,t.type,p.project_name, t.is_overtime
GROUP BY <if test="isAll"> u.id,u.`name`,</if>t.project_id,t.type,p.project_name, t.is_overtime
</select>
<select id="selectCountByTypeAndStatus" resultType="cn.wisenergy.model.dto.MonthlyWorkingHoursStatistics">
......
......@@ -14,7 +14,7 @@ import java.util.List;
**/
@Data
@ApiModel(value = "UserWorkTimeStatisticsByProject",description = "用户参与正在进行的项目工时统计")
public class UserWorkTimeStatisticsByProject implements Serializable {
public class UserWorkTimeStatisticsByProject implements Serializable{
private static final long serialVersionUID = -4059589583836766681L;
......@@ -22,6 +22,7 @@ public class UserWorkTimeStatisticsByProject implements Serializable {
* 用户主键
*/
@ApiModelProperty(name = "userId",value = "用户主键")
private Integer userId;
/**
......@@ -42,5 +43,21 @@ public class UserWorkTimeStatisticsByProject implements Serializable {
@ApiModelProperty(name = "totalTime", value = "总工时")
private Integer totalTime;
@Override
public boolean equals(Object obj) {
UserWorkTimeStatisticsByProject other = (UserWorkTimeStatisticsByProject) obj;
if (this == obj) {
return true;
}
if (this.userId.equals(other.userId)) {
return true;
}
return false;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
......@@ -23,6 +23,7 @@ import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
......@@ -559,14 +560,20 @@ public class StatisticsServiceImpl implements StatisticsService {
// 管理项目为空则提前结束
if (CollectionUtil.isEmpty(userManageProjects)) {
return null;
return new ArrayList<>();
}
// 提取项目主键
List<Integer> projectIds = userManageProjects.stream().map(WorkProject::getId).collect(Collectors.toList());
// 查询各个项目正常工时和加班工时统计总计
List<UserWorkTimeStatisticsByProject> userProjectWorkTimeStatistics = workTimeOrderMapper.getUserProjectWorkTimeStatistics(startDate, endDate, projectIds, false);
if (CollectionUtils.isEmpty(userProjectWorkTimeStatistics)) {
UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject = new UserWorkTimeStatisticsByProject();
userWorkTimeStatisticsByProject.setUserName("合计");
List<ProjectWorkTimeAndType> projectWorkTimeAndTypes = new ArrayList<>();
userWorkTimeStatisticsByProject.setProjectWorkTimeAndType(projectWorkTimeAndTypes);
userProjectWorkTimeStatistics.add(userWorkTimeStatisticsByProject);
}
// 查询除开项目于、商机、请假、调休这几种类型的工单
List<WorkType> types = workTypeMapper.getAll();
List<Integer> queryType = new ArrayList<>();
......@@ -579,25 +586,33 @@ public class StatisticsServiceImpl implements StatisticsService {
List<UserWorkTimeStatisticsByProject> userProjectWorkTimeStatistics1 = workTimeOrderMapper.getUserProjectWorkTimeStatistics(startDate, endDate, projectIds, true);
// 部门级别以上的用户可以查询所管理项目的成员所填的其他类型的工单
List<Integer> userIds = workUserProjectMapper.selectUserIdByProjectIds(projectIds);
if (rank.contains(LevelRankEnum.DEPARTMENT_LEVEL.getRank()) || rank.contains(LevelRankEnum.CENTRAL_LEVEL.getRank())) {
List<Integer> userIds = workUserProjectMapper.selectUserIdByProjectIds(projectIds);
// 获取其他类型统计信息
List<UserWorkTimeStatisticsByProject> userWorkTimeStatisticsByProjectList = workTimeOrderMapper.selectListByType(startDate, endDate, queryType, userIds, false);
// 获取查询结果的类型
UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject1 = userWorkTimeStatisticsByProjectList.get(0);
List<ProjectWorkTimeAndType> projectWorkTimeAndType1 = userWorkTimeStatisticsByProject1.getProjectWorkTimeAndType();
List<Integer> collect = projectWorkTimeAndType1.stream().map(ProjectWorkTimeAndType::getProjectType).collect(Collectors.toList());
List<Integer> collect = new ArrayList<>();
if (CollectionUtil.isNotEmpty(userWorkTimeStatisticsByProjectList)) {
UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject1 = userWorkTimeStatisticsByProjectList.get(0);
List<ProjectWorkTimeAndType> projectWorkTimeAndType1 = userWorkTimeStatisticsByProject1.getProjectWorkTimeAndType();
collect = projectWorkTimeAndType1.stream().map(ProjectWorkTimeAndType::getProjectType).collect(Collectors.toList());
}
// 缺少类型,造对象传前端
UserWorkTimeStatisticsByProject userWorkTimeStatisticsByProject1 = new UserWorkTimeStatisticsByProject();
List<ProjectWorkTimeAndType> projectWorkTimeAndTypes = new ArrayList<>();
for (int i = 4; i < types.size(); i++) {
if (!collect.contains(types.get(i).getId())) {
ProjectWorkTimeAndType projectWorkTimeAndType = new ProjectWorkTimeAndType();
projectWorkTimeAndType.setWorkTime(0);
projectWorkTimeAndType.setProjectType(types.get(i).getId());
projectWorkTimeAndType.setProjectName(types.get(i).getName());
userWorkTimeStatisticsByProjectList.get(0).getProjectWorkTimeAndType().add(projectWorkTimeAndType);
projectWorkTimeAndTypes.add(projectWorkTimeAndType);
}
}
userWorkTimeStatisticsByProject1.setProjectWorkTimeAndType(projectWorkTimeAndTypes);
userWorkTimeStatisticsByProjectList.add(userWorkTimeStatisticsByProject1);
// 将项目和商机统计信息和除开项目、商机、请假、调休类型的其他类型统计信息合并
userProjectWorkTimeStatistics.get(0).getProjectWorkTimeAndType().addAll(userWorkTimeStatisticsByProjectList.get(0).getProjectWorkTimeAndType());
......
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