package com.yuanchu.mom.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.dto.PerformanceShiftMapDto;
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 com.yuanchu.mom.utils.JackSonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
/**
*
* 绩效管理-班次 服务实现类
*
*
* @author 江苏鵷雏网络科技有限公司
* @since 2024-05-08 09:12:04
*/
@Service
public class PerformanceShiftServiceImpl extends ServiceImpl implements PerformanceShiftService {
@Autowired
private EnumService enumService;
public List list = new ArrayList<>();
@Transactional(rollbackFor = Exception.class)
@Override
public void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDateTime = performanceShiftAddDto.getStartWeek().format(formatter);
String[] splitUserId = performanceShiftAddDto.getUserId().split(",");
for (String userId : splitUserId) {
boolean exists = baseMapper.exists(Wrappers.lambdaQuery()
.eq(PerformanceShift::getWorkTime, formattedDateTime)
.eq(PerformanceShift::getUserId, userId));
// 如果不存在添加数据
if (!exists) {
LocalDate firstDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().withDayOfMonth(1);
LocalDate lastDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().with(TemporalAdjusters.lastDayOfMonth());
List localDateTimesBetween = getLocalDateTimesBetween(firstDayOfMonth.atStartOfDay(), lastDayOfMonth.atStartOfDay());
localDateTimesBetween.forEach(i -> {
for (String s : splitUserId) {
PerformanceShift performanceShift = new PerformanceShift();
performanceShift.setUserId(Integer.valueOf(s));
performanceShift.setWorkTime(i);
performanceShift.setShift("");
list.add(performanceShift);
}
if (list.size() >= 1000) {
baseMapper.insertBatchSomeColumn(list);
list.clear();
}
});
if (!list.isEmpty()) {
baseMapper.insertBatchSomeColumn(list);
}
}
}
// 再次更新
List datesBetween = getLocalDateTimesBetween(performanceShiftAddDto.getStartWeek(), performanceShiftAddDto.getEndWeek());
for (LocalDateTime date : datesBetween) {
for (String s : splitUserId) {
PerformanceShift performanceShift = new PerformanceShift();
performanceShift.setShift(performanceShiftAddDto.getShift());
performanceShift.setUserId(Integer.valueOf(s));
performanceShift.setWorkTime(date);
String formatterDateTime = date.format(formatter);
baseMapper.update(new PerformanceShift(), Wrappers.lambdaUpdate()
.set(PerformanceShift::getShift, performanceShiftAddDto.getShift())
.eq(PerformanceShift::getUserId, s)
.eq(PerformanceShift::getWorkTime, formatterDateTime));
}
}
}
@Override
public Map performanceShiftPage(Page