|
@@ -1,26 +1,28 @@
|
|
|
package com.persagy.fm.scheduling.service;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.common.collect.Sets;
|
|
|
import com.persagy.fm.common.response.PageList;
|
|
|
import com.persagy.fm.scheduling.dao.WorkScheduleMapper;
|
|
|
import com.persagy.fm.scheduling.model.WorkSchedule;
|
|
|
+import com.persagy.fm.scheduling.model.dto.ScheduleListQueryDto;
|
|
|
+import com.persagy.fm.scheduling.model.dto.WorkScheduleDto;
|
|
|
import com.persagy.fm.scheduling.transform.WorkScheduleTransform;
|
|
|
import com.persagy.fm.scheduling.vo.request.ScheduleListQueryVO;
|
|
|
import com.persagy.fm.scheduling.vo.request.UpdateScheduleVO;
|
|
|
import com.persagy.fm.scheduling.vo.response.OnePersonScheduleVO;
|
|
|
-import com.persagy.fm.scheduling.vo.response.StatisticalInfoVO;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.assertj.core.util.Lists;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.Date;
|
|
|
+import java.util.GregorianCalendar;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
-import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
@@ -36,47 +38,33 @@ public class WorkScheduleService {
|
|
|
|
|
|
//todo 根据父级部门id 获取下面所有子级部门的部门id
|
|
|
final Set<String> departmentIds = Sets.newHashSet();
|
|
|
- QueryWrapper<WorkSchedule> wrapper = new QueryWrapper<WorkSchedule>().eq("project_id", vo.getProjectId())
|
|
|
- .in("department_id", departmentIds)
|
|
|
- .eq("year", vo.getYear())
|
|
|
- .eq("month", vo.getMonth());
|
|
|
+
|
|
|
+ Date minDate = new GregorianCalendar(vo.getYear(), vo.getMonth(), 1).getTime();
|
|
|
+ Date maxDate = new GregorianCalendar(vo.getYear(), vo.getMonth() + 1, 1).getTime();
|
|
|
+
|
|
|
+ ScheduleListQueryDto listQueryDto = new ScheduleListQueryDto().setDeptId(vo.getDeptId())
|
|
|
+ .setMaxDate(maxDate)
|
|
|
+ .setMinDate(minDate)
|
|
|
+ .setProjectId(vo.getProjectId());
|
|
|
+
|
|
|
|
|
|
Page<WorkSchedule> page = new Page<WorkSchedule>().setSize(vo.getPageSize()).setCurrent(vo.getPageNum());
|
|
|
|
|
|
|
|
|
- Page<WorkSchedule> workSchedulePage = workScheduleMapper.selectPage(page, wrapper);
|
|
|
- final List<WorkSchedule> records = workSchedulePage.getRecords();
|
|
|
+ IPage<WorkScheduleDto> workSchedulePage = workScheduleMapper.getPage(page, listQueryDto);
|
|
|
+ final List<WorkScheduleDto> records = workSchedulePage.getRecords();
|
|
|
if (CollectionUtils.isEmpty(records)) return new PageList<>(Lists.newArrayList(), 0);
|
|
|
- ConcurrentMap<String, List<WorkSchedule>> personSchedulesMap = records.stream()
|
|
|
+ ConcurrentMap<String, List<WorkScheduleDto>> personSchedulesMap = records.stream()
|
|
|
.collect(Collectors.groupingByConcurrent(WorkSchedule::getPersonId));
|
|
|
|
|
|
- //todo 根据personIds 获取用户信息
|
|
|
- Set<String> personIds = personSchedulesMap.keySet();
|
|
|
-
|
|
|
List<OnePersonScheduleVO> personScheduleList = personSchedulesMap
|
|
|
.entrySet()
|
|
|
.stream().map(entry -> {
|
|
|
- List<WorkSchedule> value = entry.getValue();
|
|
|
- AtomicInteger workHours = new AtomicInteger();
|
|
|
- AtomicInteger remainWorkMinutes = new AtomicInteger();
|
|
|
- List<StatisticalInfoVO.OneStatisticalInfo> oneStatisticalInfos = value.stream()
|
|
|
- .collect(Collectors.groupingByConcurrent(WorkSchedule::getWorkTimeType))
|
|
|
- .entrySet().stream()
|
|
|
- .map(keyValue -> new StatisticalInfoVO.OneStatisticalInfo()
|
|
|
- .setWorkTimeType(keyValue.getKey())
|
|
|
- .setTimes(keyValue.getValue().size()))
|
|
|
- .peek(a -> {
|
|
|
- //todo 根据工作时间的配置 去处理工作时间的统计问题
|
|
|
- })
|
|
|
- .collect(Collectors.toList());
|
|
|
+ List<WorkScheduleDto> value = entry.getValue();
|
|
|
List<OnePersonScheduleVO.WorkScheduleVO> workScheduleVOS = value.stream()
|
|
|
.map(workScheduleTransform::toWorkScheduleVO)
|
|
|
.collect(Collectors.toList());
|
|
|
return new OnePersonScheduleVO()
|
|
|
- .setStatisticalInfoVO(new StatisticalInfoVO()
|
|
|
- .setStatisticalInfos(oneStatisticalInfos)
|
|
|
- .setWorkHours(workHours.get())
|
|
|
- .setWorkMinutes(remainWorkMinutes.get()))
|
|
|
.setPersonInfo(new OnePersonScheduleVO.PersonInfo().setPersonId(entry.getKey()))
|
|
|
.setWorkScheduleVOS(workScheduleVOS);
|
|
|
})
|
|
@@ -103,8 +91,8 @@ public class WorkScheduleService {
|
|
|
}
|
|
|
scheduleVOS.stream().filter(usefulIds::contains).forEach(a -> workSchedules.forEach(b -> {
|
|
|
if (a.getId().equals(b.getId())) {
|
|
|
- b.setWorkTimeType(a.getWorkTimeType());
|
|
|
- b.setDay(a.getDay());
|
|
|
+ b.setShiftId(a.getShiftId());
|
|
|
+ b.setWorkDay(a.getWorkDay());
|
|
|
}
|
|
|
}));
|
|
|
workSchedules.forEach(workScheduleMapper::updateById);
|