Commit 56ab9dcd authored by nie'hong's avatar nie'hong

完善工时统计

parent b3f862ab
...@@ -66,24 +66,16 @@ ...@@ -66,24 +66,16 @@
now() AS create_time now() AS create_time
FROM FROM
work_time_order t work_time_order t
JOIN work_user_salary s ON t.user_id = s.user_id LEFT JOIN work_user_salary s ON t.user_id = s.user_id
WHERE WHERE
t.work_day >= #{date} AND s.create_time <work_day AND s.end_time > work_day t.work_day >= #{date} AND s.create_time <work_day AND s.end_time > work_day
AND t.`status` IN (2, 5) AND t.`status` IN (2, 5) AND project_id is not null
GROUP BY GROUP BY
project_id, project_id,
t.user_id, t.user_id,
is_overtime,
YEAR (work_day), YEAR (work_day),
MONTH (work_day) MONTH (work_day)
ON DUPLICATE KEY UPDATE create_time = ORDER BY min(work_day)
VALUES(create_time),
statistics_end =
VALUES(statistics_end),
total_time =
VALUES(total_time),
cost =
VALUES(cost)
</insert> </insert>
......
...@@ -229,11 +229,11 @@ ...@@ -229,11 +229,11 @@
</select> </select>
<select id="getWorkTimeAndCostCollect" resultMap="workTimeAndCostCollect" > <select id="getWorkTimeAndCostCollect" resultMap="workTimeAndCostCollect" >
SELECT CASE t.type WHEN 1 THEN "项目" WHEN 2 THEN "商机" WHEN 3 THEN "请假" WHEN 4 THEN "调休" WHEN 5 THEN "外部商务" WHEN 6 THEN "内部培训、技术准备、管理" WHEN 7 THEN "其他非项目/商机工作" END AS type,t.dept_id AS dept_id, SELECT CASE t.type WHEN 1 THEN "项目" WHEN 2 THEN "商机" WHEN 3 THEN "请假" WHEN 4 THEN "调休" WHEN 5 THEN "外部商务/技术交流" WHEN 6 THEN "内部培训/技术准备/管理" WHEN 7 THEN "其他非项目/商机工作" END AS type,t.dept_id AS dept_id,
t.project_id AS project_id ,MIN(t.work_day) AS first_time,MAX(t.work_day) AS last_time,ROUND(SUM(t.work_time)/8,2) AS t.project_id AS project_id ,MIN(t.work_day) AS first_time,MAX(t.work_day) AS last_time,ROUND(SUM(t.work_time)/8,2) AS
total_time,ROUND((SUM(t.work_time))/8*10,2) AS cost,dept_name AS dept_name,project_name total_time, SUM(t.work_time * s.day_salary)/8 AS cost,dept_name AS dept_name,project_name
FROM work_time_order t LEFT JOIN work_project p ON t.project_id=p.id LEFT JOIN work_dept d ON t.dept_id=d.id FROM work_time_order t LEFT JOIN work_project p ON t.project_id=p.id LEFT JOIN work_dept d ON t.dept_id=d.id LEFT JOIN work_user_salary s ON s.user_id = t.user_id
WHERE status IN (2,5) WHERE status IN (2,5) AND s.create_time &lt; t.work_day AND s.end_time > t.work_day
<if test="projectIds != null"> <if test="projectIds != null">
AND (t.project_id IN AND (t.project_id IN
<foreach collection="projectIds" item="projectId" open="(" close=")" separator=","> <foreach collection="projectIds" item="projectId" open="(" close=")" separator=",">
......
...@@ -195,40 +195,26 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -195,40 +195,26 @@ public class StatisticsServiceImpl implements StatisticsService {
int notFilledCount = currentMonthWorkDays.size(); int notFilledCount = currentMonthWorkDays.size();
//本月被现存驳回数 //本月被现存驳回数
map.clear(); map.clear();
map.put("status", 3); map.put("status", StatusEnum.REJECTED.getCode());
map.put("userId", userId); map.put("userId", userId);
map.put("startDay", firstDayOfMonth); map.put("startDay", firstDayOfMonth);
Integer countByCondition = workTimeOrderMapper.getCountByCondition(map); Integer countByCondition = workTimeOrderMapper.getCountByCondition(map);
List<MonthlyWorkingHoursStatistics> monthlyWorkingHoursStatistics = workTimeOrderMapper.statisticsByProjectType(userId, firstDayOfMonth); List<MonthlyWorkingHoursStatistics> monthlyWorkingHoursStatistics = workTimeOrderMapper.statisticsByProjectType(userId, firstDayOfMonth);
// 如果没填写填报类型其中某项,造对象传前端 // 如果没填写填报类型其中某项,造对象传前端
while (monthlyWorkingHoursStatistics.size() < 5) { if (monthlyWorkingHoursStatistics.size() < 5) {
// 获取工时类型(项目或商机) // 获取工时类型(项目或商机)
List<String> projectTypes = monthlyWorkingHoursStatistics.stream().map(MonthlyWorkingHoursStatistics::getProjectType).collect(Collectors.toList()); List<String> projectTypes = monthlyWorkingHoursStatistics.stream().map(MonthlyWorkingHoursStatistics::getProjectType).collect(Collectors.toList());
MonthlyWorkingHoursStatistics workingHoursStatistics = new MonthlyWorkingHoursStatistics(); for (ProjectTypeEnum value : ProjectTypeEnum.values()) {
// 如果没填写项目 // 除开请假、调休
if (!projectTypes.contains(ProjectTypeEnum.PROJECT.getTypeName())) { if (!projectTypes.contains(value.getTypeName()) && !value.getTypeName().equals(ProjectTypeEnum.LEAVE.getTypeName()) && !value.getTypeName().equals(ProjectTypeEnum.COMPENSATORY_LEAVE.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.PROJECT.getTypeName()); MonthlyWorkingHoursStatistics workingHoursStatistics = new MonthlyWorkingHoursStatistics();
} workingHoursStatistics.setProjectType(value.getTypeName());
// 没填写商机 workingHoursStatistics.setCount(0);
if (!projectTypes.contains(ProjectTypeEnum.BUSINESS_OPPORTUNITY.getTypeName())) { workingHoursStatistics.setWorkTime(0);
workingHoursStatistics.setProjectType(ProjectTypeEnum.BUSINESS_OPPORTUNITY.getTypeName()); monthlyWorkingHoursStatistics.add(workingHoursStatistics);
} }
// 没填写外部商务
if (!projectTypes.contains(ProjectTypeEnum.EXTERNAL_BUSINESS.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.EXTERNAL_BUSINESS.getTypeName());
}
// 没填写内部培训、技术准备、管理
if (!projectTypes.contains(ProjectTypeEnum.INTERNAL_TRAINING.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.INTERNAL_TRAINING.getTypeName());
}
// 没填写其他非项目/商机工作
if (!projectTypes.contains(ProjectTypeEnum.OTHER_NON_PROJECTS.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.OTHER_NON_PROJECTS.getTypeName());
} }
workingHoursStatistics.setCount(0);
workingHoursStatistics.setWorkTime(0);
monthlyWorkingHoursStatistics.add(workingHoursStatistics);
} }
// 赋值未填报天数、被驳回未重报天 // 赋值未填报天数、被驳回未重报天
...@@ -297,7 +283,8 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -297,7 +283,8 @@ public class StatisticsServiceImpl implements StatisticsService {
types.add(value.getType()); types.add(value.getType());
} }
} }
if (role.contains(ManagerEnum.IS_DEPARTMENT_DIRECTOR.getCode())) { // 用户仅为部门管理
if (role.contains(ManagerEnum.IS_DEPARTMENT_DIRECTOR.getCode()) && role.size() == 1) {
map.put("deptId", user.getDeptId()); map.put("deptId", user.getDeptId());
} }
map.put("types", types); map.put("types", types);
...@@ -510,7 +497,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -510,7 +497,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 项目统计数据 // 项目统计数据
if (workTimeAndType.getProjectName() != null && workTimeAndType.getProjectName().equals(projectWorkTimeAndType.getProjectName()) && workTimeAndType.getIsOvertime().equals(projectWorkTimeAndType.getIsOvertime())) { if (workTimeAndType.getProjectName() != null && workTimeAndType.getProjectName().equals(projectWorkTimeAndType.getProjectName()) && workTimeAndType.getIsOvertime().equals(projectWorkTimeAndType.getIsOvertime())) {
workTimeAndType.setWorkTime(workTimeAndType.getWorkTime() + projectWorkTimeAndType.getWorkTime()); workTimeAndType.setWorkTime(workTimeAndType.getWorkTime() + projectWorkTimeAndType.getWorkTime());
}else if (workTimeAndType.getProjectType() != null && workTimeAndType.getProjectType().equals(projectWorkTimeAndType.getProjectType()) && workTimeAndType.getIsOvertime().equals(projectWorkTimeAndType.getIsOvertime())) { } else if (workTimeAndType.getProjectType() != null && workTimeAndType.getProjectType().equals(projectWorkTimeAndType.getProjectType()) && workTimeAndType.getIsOvertime().equals(projectWorkTimeAndType.getIsOvertime())) {
workTimeAndType.setWorkTime(workTimeAndType.getWorkTime() + projectWorkTimeAndType.getWorkTime()); workTimeAndType.setWorkTime(workTimeAndType.getWorkTime() + projectWorkTimeAndType.getWorkTime());
} }
} }
...@@ -600,7 +587,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -600,7 +587,7 @@ public class StatisticsServiceImpl implements StatisticsService {
} }
return projectStatisticsByMonths; return projectStatisticsByMonths;
} }
//获取一个月应上班日期,如果是当月,时间截至到当天 //获取一个月应上班日期,如果是当月,时间截至到当天
public List<Date> currentMonthWorkDays(Date date) { public List<Date> currentMonthWorkDays(Date date) {
...@@ -693,7 +680,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -693,7 +680,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 生成三种类型的表头 // 生成三种类型的表头
public List<ProjectWorkTimeAndType> createProjectWorkTimeAndTypeListByType() { public List<ProjectWorkTimeAndType> createProjectWorkTimeAndTypeListByType() {
List<ProjectWorkTimeAndType> list = new ArrayList<>(6); List<ProjectWorkTimeAndType> list = new ArrayList<>(6);
ProjectWorkTimeAndType timeAndType ; ProjectWorkTimeAndType timeAndType;
// 外部商务、技术交流 // 外部商务、技术交流
timeAndType = createProjectWorkTimeAndTypeByType(ProjectTypeEnum.EXTERNAL_BUSINESS.getTypeName(), "正常"); timeAndType = createProjectWorkTimeAndTypeByType(ProjectTypeEnum.EXTERNAL_BUSINESS.getTypeName(), "正常");
list.add(timeAndType); list.add(timeAndType);
...@@ -731,7 +718,7 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -731,7 +718,7 @@ public class StatisticsServiceImpl implements StatisticsService {
} }
// 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月 // 部门主键不为空时,日期格式只有某月。为空时,日期格式为某年统计的第一个月为某年某月,其余为某月
public void conversionDateFormat(List<ProjectStatisticsByMonth> projectStatisticsByMonths, Integer deptId){ public void conversionDateFormat(List<ProjectStatisticsByMonth> projectStatisticsByMonths, Integer deptId) {
for (ProjectStatisticsByMonth projectStatisticsByMonth : projectStatisticsByMonths) { for (ProjectStatisticsByMonth projectStatisticsByMonth : projectStatisticsByMonths) {
List<ProjectStatisticsByMonth.StatisticsDateAndWorkTime> statisticsDateAndWorkTimes = projectStatisticsByMonth.getStatisticsDateAndWorkTimes(); List<ProjectStatisticsByMonth.StatisticsDateAndWorkTime> statisticsDateAndWorkTimes = projectStatisticsByMonth.getStatisticsDateAndWorkTimes();
// 部门主键不为空时,日期格式只有某月 // 部门主键不为空时,日期格式只有某月
...@@ -743,8 +730,8 @@ public class StatisticsServiceImpl implements StatisticsService { ...@@ -743,8 +730,8 @@ public class StatisticsServiceImpl implements StatisticsService {
stringBuilder.delete(0, 5); stringBuilder.delete(0, 5);
statisticsDateAndWorkTime.setDate(stringBuilder.toString()); statisticsDateAndWorkTime.setDate(stringBuilder.toString());
} }
}else { } else {
for (int i = statisticsDateAndWorkTimes.size()-1; i > 0; i--) { for (int i = statisticsDateAndWorkTimes.size() - 1; i > 0; i--) {
String date1 = statisticsDateAndWorkTimes.get(i).getDate(); String date1 = statisticsDateAndWorkTimes.get(i).getDate();
String date2 = statisticsDateAndWorkTimes.get(i - 1).getDate(); String date2 = statisticsDateAndWorkTimes.get(i - 1).getDate();
// 如果不为当年统计数据的第一个月,则删除年份 // 如果不为当年统计数据的第一个月,则删除年份
......
...@@ -232,8 +232,9 @@ public class WorkUserServiceImpl implements WorkUserService { ...@@ -232,8 +232,9 @@ public class WorkUserServiceImpl implements WorkUserService {
} }
*/ */
//如果登录来源是PC,判断用户是不是管理员 //如果登录来源是PC,判断用户是不是管理员
List<Integer> roles = UserRoleLevelUtils.getRole(user.getId());
if (LOGIN_SOURCE.equals(source)) { if (LOGIN_SOURCE.equals(source)) {
if (user.getLevel().equals(ManagerEnum.NOT_MANAGER.getCode())) { if (roles.contains(ManagerEnum.NOT_MANAGER.getCode())) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.THE_USER_NOT_MANAGER_PLASE_MANAGER_LOGIN); throw new BaseCustomException(BASE_RESP_CODE_ENUM.THE_USER_NOT_MANAGER_PLASE_MANAGER_LOGIN);
} }
} }
...@@ -243,7 +244,6 @@ public class WorkUserServiceImpl implements WorkUserService { ...@@ -243,7 +244,6 @@ public class WorkUserServiceImpl implements WorkUserService {
//将用户对象转换为dto //将用户对象转换为dto
ResultUser resultUser = getResultUser(user); ResultUser resultUser = getResultUser(user);
resultUser.setDay(byId.getSubmitTime()); resultUser.setDay(byId.getSubmitTime());
List<Integer> roles = UserRoleLevelUtils.getRole(user.getId());
List<Integer> levelIds = UserRoleLevelUtils.getlevelIds(roles); List<Integer> levelIds = UserRoleLevelUtils.getlevelIds(roles);
resultUser.setWorkLevels(UserRoleLevelUtils.getlevelByIds(levelIds)); resultUser.setWorkLevels(UserRoleLevelUtils.getlevelByIds(levelIds));
return resultUser; return resultUser;
......
...@@ -29,7 +29,7 @@ public class AutoStatistics { ...@@ -29,7 +29,7 @@ public class AutoStatistics {
@Scheduled(cron = "0 0 0 * * ?") @Scheduled(cron = "0 0 0 * * ?")
public void autoStatistics(){ public void autoStatistics(){
log.info("AutoStatistics[]autoStatistics[]自动统计任务"); log.info("AutoStatistics[]autoStatistics[]自动统计任务");
Date date = DateUtil.add(new Date(), Calendar.DAY_OF_MONTH, -3); Date date = DateUtil.add(new Date(), Calendar.MONTH, -3);
String firstDayOfMonth = DateUtil.convertDateToYMDStr(DateUtil.getFirstDayOfMonth(date)); String firstDayOfMonth = DateUtil.convertDateToYMDStr(DateUtil.getFirstDayOfMonth(date));
workProjectTimeCostMapper.deleteStatisticsByQuarter(firstDayOfMonth); workProjectTimeCostMapper.deleteStatisticsByQuarter(firstDayOfMonth);
workProjectTimeCostMapper.statisticsTimeOrderByMonth(firstDayOfMonth); workProjectTimeCostMapper.statisticsTimeOrderByMonth(firstDayOfMonth);
......
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