package com.yuanchu.mom.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.yuanchu.mom.dto.PerformanceShiftAddDto;
|
import com.yuanchu.mom.mapper.PerformanceShiftMapper;
|
import com.yuanchu.mom.pojo.Enums;
|
import com.yuanchu.mom.pojo.PerformanceShift;
|
import com.yuanchu.mom.service.EnumService;
|
import com.yuanchu.mom.service.PerformanceShiftService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 绩效管理-班次 服务实现类
|
* </p>
|
*
|
* @author 江苏鵷雏网络科技有限公司
|
* @since 2024-05-08 09:12:04
|
*/
|
@Service
|
public class PerformanceShiftServiceImpl extends ServiceImpl<PerformanceShiftMapper, PerformanceShift> implements PerformanceShiftService {
|
|
@Autowired
|
private EnumService enumService;
|
|
@Override
|
public void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto) {
|
List<LocalDateTime> datesBetween = getLocalDateTimesBetween(performanceShiftAddDto.getStartWeek(), performanceShiftAddDto.getEndWeek());
|
for (LocalDateTime date : datesBetween) {
|
PerformanceShift performanceShift = new PerformanceShift();
|
performanceShift.setShift(performanceShiftAddDto.getShift());
|
performanceShift.setUserId(performanceShiftAddDto.getUserId());
|
performanceShift.setWorkTime(date);
|
baseMapper.insert(performanceShift);
|
}
|
}
|
|
@Override
|
public IPage<Map<String, Object>> performanceShiftPage(Page<Object> page, LocalDateTime time, String userName, String laboratory) {
|
IPage<Map<String, Object>> mapIPage = baseMapper.performanceShiftPage(page, time, userName, laboratory);
|
List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
|
for (Map<String, Object> i : mapIPage.getRecords()) {
|
String[] shiftTimes = i.get("shiftTime").toString().split(";");
|
int totalAttendance = 0;
|
for (Enums enums : shiftType) {
|
Integer num = 0;
|
for (String shiftTime : shiftTimes) {
|
String[] shiftTimeAndShift = shiftTime.split(":");
|
if (enums.getValue().equals(shiftTimeAndShift[1])) {
|
num++;
|
}
|
// 3:休假;4:请假
|
if (!enums.getValue().equals("3") && enums.getValue().equals("4")) {
|
totalAttendance++;
|
}
|
}
|
i.put(enums.getLabel(), num);
|
i.put("totalAttendance", totalAttendance);
|
}
|
}
|
return mapIPage;
|
}
|
|
@Override
|
public void performanceShiftUpdate(String shift, Integer id) {
|
PerformanceShift performanceShift = new PerformanceShift();
|
performanceShift.setId(id);
|
performanceShift.setShift(shift);
|
baseMapper.updateById(performanceShift);
|
}
|
|
// 获取两个localDateTime的每一天
|
public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) {
|
List<LocalDateTime> localDateTimes = new ArrayList<>();
|
LocalDate currentDate = start.toLocalDate();
|
LocalDateTime currentLocalDateTime = start;
|
while (!currentDate.isAfter(end.toLocalDate())) {
|
localDateTimes.add(currentLocalDateTime);
|
currentLocalDateTime = currentLocalDateTime.plusDays(1);
|
currentDate = currentDate.plusDays(1);
|
}
|
return localDateTimes;
|
}
|
}
|