package com.dy.pmsOther.task; import com.dy.common.schedulerTask.TaskJob; import com.dy.common.springUtil.SpringContextUtil; import com.dy.pmsGlobal.daoOth.OthStatisticWorkloadMapper; import com.dy.pmsGlobal.pojoSta.StaDeviceProductionLog; import lombok.extern.slf4j.Slf4j; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.List; @Slf4j public class WorkloadTask extends TaskJob { @Override @Transactional public void execute(JobExecutionContext ctx) throws JobExecutionException { //today 0点5分 统计before today log.info("启动统计人员工作量任务"); OthStatisticWorkloadMapper workloadMapper = SpringContextUtil.getBean(OthStatisticWorkloadMapper.class); //应该统计的日期 DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE; LocalDate maxLocalDate = LocalDate.parse(workloadMapper.selectMaxDate(), formatter); LocalDate today = LocalDate.now(); long daysBetween = ChronoUnit.DAYS.between(maxLocalDate, today); if (daysBetween > 30) { daysBetween = 30; maxLocalDate = today.minusDays(daysBetween); } LocalDate statisticDate = maxLocalDate; for (int i = 1; i <= daysBetween; i++) { Date startDt = Date.from(LocalDateTime.of(statisticDate, LocalTime.of(0, 0, 0)).atZone(ZoneId.systemDefault()).toInstant()); Date endDt = Date.from(LocalDateTime.of(statisticDate, LocalTime.of(23, 59, 59)).atZone(ZoneId.systemDefault()).toInstant()); workloadMapper.insertBatch(startDt, endDt); log.info("startDt: {} , endDt: {} ", startDt, endDt); statisticDate = maxLocalDate.plusDays(i); } log.info("统计人员工作量任务结束"); } }