package com.ruoyi.lavorissue.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.ruoyi.approve.utils.StartAndEndDateDto; import com.ruoyi.lavorissue.dto.StatisticsLaborIssue; import com.ruoyi.lavorissue.mapper.LavorIssueMapper; import com.ruoyi.lavorissue.pojo.LaborIssue; import com.ruoyi.lavorissue.service.LavorIssueService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author :yys * @date : 2025/8/13 11:18 */ @Service @Slf4j public class LavorIssueServiceImpl extends ServiceImpl implements LavorIssueService { @Autowired private LavorIssueMapper lavorIssueMapper; @Override public IPage listPage(Page page, LaborIssue laborIssue) { StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(laborIssue.getSeason(), laborIssue.getIssueDate()); laborIssue.setStartDate(startAndEndDateDto.getStartDate()); laborIssue.setEndDate(startAndEndDateDto.getEndDate()); IPage laborIssueIPage = lavorIssueMapper.listPage(page, laborIssue); return laborIssueIPage; } public StartAndEndDateDto getStartAndEndDateDto(Integer season,Date payDate){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto(); if(season != null){ Calendar calendar = Calendar.getInstance(); int currentYear = calendar.get(Calendar.YEAR); switch (season){ case 1: startAndEndDateDto.setStartDate(currentYear + "-01-01"); startAndEndDateDto.setEndDate(currentYear + "-03-31"); break; case 2: startAndEndDateDto.setStartDate(currentYear + "-04-01"); startAndEndDateDto.setEndDate(currentYear + "-06-30"); break; case 3: startAndEndDateDto.setStartDate(currentYear + "-07-01"); startAndEndDateDto.setEndDate(currentYear + "-09-30"); break; case 4: startAndEndDateDto.setStartDate(currentYear + "-10-01"); startAndEndDateDto.setEndDate(currentYear + "-12-31"); break; } } if(payDate != null){ Date lastDayOfMonth = getLastDayOfMonth(payDate); startAndEndDateDto.setStartDate(sdf.format(payDate)); startAndEndDateDto.setEndDate(sdf.format(lastDayOfMonth)); } return startAndEndDateDto; } @Override public StatisticsLaborIssue statistics(StatisticsLaborIssue req) throws Exception{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); StatisticsLaborIssue statisticsLaborIssue = new StatisticsLaborIssue(); StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(req.getSeason(), req.getIssueDate()); LambdaQueryWrapper laborIssueLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(req.getSeason() != null || req.getIssueDate() != null){ laborIssueLambdaQueryWrapper.ge(LaborIssue::getIssueDate, startAndEndDateDto.getStartDate()) .le(LaborIssue::getIssueDate, startAndEndDateDto.getEndDate()); } List laborIssues = lavorIssueMapper.selectList(laborIssueLambdaQueryWrapper); if(!CollectionUtils.isEmpty(laborIssues)){ Long sum = laborIssues.stream() .filter(laborIssue -> laborIssue.getAdoptedDate() != null) .mapToLong(LaborIssue::getNum) .sum(); statisticsLaborIssue.setYlqNum(sum); statisticsLaborIssue.setWlqNum(laborIssues.stream() .filter(laborIssue -> laborIssue.getAdoptedDate() == null) .mapToLong(LaborIssue::getNum) .sum()); Date currentDate = new Date(); Date parse = sdf.parse(sdf.format(currentDate)); statisticsLaborIssue.setCsylqNum(laborIssues.stream() .filter(laborIssue -> laborIssue.getIssueDate() != null && laborIssue.getAdoptedDate() != null && (laborIssue.getIssueDate().before(laborIssue.getAdoptedDate()))) .mapToLong(LaborIssue::getNum) .sum()); statisticsLaborIssue.setCswlqNum(laborIssues.stream() .filter(laborIssue -> laborIssue.getIssueDate() != null && laborIssue.getIssueDate().before(parse) && laborIssue.getAdoptedDate() == null) .mapToLong(LaborIssue::getNum) .sum()); } return statisticsLaborIssue; } public Date getLastDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 设置传入的Date calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // 设置为当月最后一天 return calendar.getTime(); // 返回Date对象 } }