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

完善工时统计

parent b3f862ab
......@@ -66,24 +66,16 @@
now() AS create_time
FROM
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
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
project_id,
t.user_id,
is_overtime,
YEAR (work_day),
MONTH (work_day)
ON DUPLICATE KEY UPDATE create_time =
VALUES(create_time),
statistics_end =
VALUES(statistics_end),
total_time =
VALUES(total_time),
cost =
VALUES(cost)
ORDER BY min(work_day)
</insert>
......
......@@ -229,11 +229,11 @@
</select>
<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
total_time,ROUND((SUM(t.work_time))/8*10,2) 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
WHERE status IN (2,5)
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 LEFT JOIN work_user_salary s ON s.user_id = t.user_id
WHERE status IN (2,5) AND s.create_time &lt; t.work_day AND s.end_time > t.work_day
<if test="projectIds != null">
AND (t.project_id IN
<foreach collection="projectIds" item="projectId" open="(" close=")" separator=",">
......
......@@ -195,41 +195,27 @@ public class StatisticsServiceImpl implements StatisticsService {
int notFilledCount = currentMonthWorkDays.size();
//本月被现存驳回数
map.clear();
map.put("status", 3);
map.put("status", StatusEnum.REJECTED.getCode());
map.put("userId", userId);
map.put("startDay", firstDayOfMonth);
Integer countByCondition = workTimeOrderMapper.getCountByCondition(map);
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());
for (ProjectTypeEnum value : ProjectTypeEnum.values()) {
// 除开请假、调休
if (!projectTypes.contains(value.getTypeName()) && !value.getTypeName().equals(ProjectTypeEnum.LEAVE.getTypeName()) && !value.getTypeName().equals(ProjectTypeEnum.COMPENSATORY_LEAVE.getTypeName())) {
MonthlyWorkingHoursStatistics workingHoursStatistics = new MonthlyWorkingHoursStatistics();
// 如果没填写项目
if (!projectTypes.contains(ProjectTypeEnum.PROJECT.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.PROJECT.getTypeName());
}
// 没填写商机
if (!projectTypes.contains(ProjectTypeEnum.BUSINESS_OPPORTUNITY.getTypeName())) {
workingHoursStatistics.setProjectType(ProjectTypeEnum.BUSINESS_OPPORTUNITY.getTypeName());
}
// 没填写外部商务
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.setProjectType(value.getTypeName());
workingHoursStatistics.setCount(0);
workingHoursStatistics.setWorkTime(0);
monthlyWorkingHoursStatistics.add(workingHoursStatistics);
}
}
}
// 赋值未填报天数、被驳回未重报天
for (MonthlyWorkingHoursStatistics monthlyWorkingHoursStatistic : monthlyWorkingHoursStatistics) {
......@@ -297,7 +283,8 @@ public class StatisticsServiceImpl implements StatisticsService {
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("types", types);
......@@ -510,7 +497,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 项目统计数据
if (workTimeAndType.getProjectName() != null && workTimeAndType.getProjectName().equals(projectWorkTimeAndType.getProjectName()) && workTimeAndType.getIsOvertime().equals(projectWorkTimeAndType.getIsOvertime())) {
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());
}
}
......@@ -693,7 +680,7 @@ public class StatisticsServiceImpl implements StatisticsService {
// 生成三种类型的表头
public List<ProjectWorkTimeAndType> createProjectWorkTimeAndTypeListByType() {
List<ProjectWorkTimeAndType> list = new ArrayList<>(6);
ProjectWorkTimeAndType timeAndType ;
ProjectWorkTimeAndType timeAndType;
// 外部商务、技术交流
timeAndType = createProjectWorkTimeAndTypeByType(ProjectTypeEnum.EXTERNAL_BUSINESS.getTypeName(), "正常");
list.add(timeAndType);
......@@ -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) {
List<ProjectStatisticsByMonth.StatisticsDateAndWorkTime> statisticsDateAndWorkTimes = projectStatisticsByMonth.getStatisticsDateAndWorkTimes();
// 部门主键不为空时,日期格式只有某月
......@@ -743,8 +730,8 @@ public class StatisticsServiceImpl implements StatisticsService {
stringBuilder.delete(0, 5);
statisticsDateAndWorkTime.setDate(stringBuilder.toString());
}
}else {
for (int i = statisticsDateAndWorkTimes.size()-1; i > 0; i--) {
} else {
for (int i = statisticsDateAndWorkTimes.size() - 1; i > 0; i--) {
String date1 = statisticsDateAndWorkTimes.get(i).getDate();
String date2 = statisticsDateAndWorkTimes.get(i - 1).getDate();
// 如果不为当年统计数据的第一个月,则删除年份
......
......@@ -232,8 +232,9 @@ public class WorkUserServiceImpl implements WorkUserService {
}
*/
//如果登录来源是PC,判断用户是不是管理员
List<Integer> roles = UserRoleLevelUtils.getRole(user.getId());
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);
}
}
......@@ -243,7 +244,6 @@ public class WorkUserServiceImpl implements WorkUserService {
//将用户对象转换为dto
ResultUser resultUser = getResultUser(user);
resultUser.setDay(byId.getSubmitTime());
List<Integer> roles = UserRoleLevelUtils.getRole(user.getId());
List<Integer> levelIds = UserRoleLevelUtils.getlevelIds(roles);
resultUser.setWorkLevels(UserRoleLevelUtils.getlevelByIds(levelIds));
return resultUser;
......
......@@ -29,7 +29,7 @@ public class AutoStatistics {
@Scheduled(cron = "0 0 0 * * ?")
public void 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));
workProjectTimeCostMapper.deleteStatisticsByQuarter(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