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 maxLocalDate = null; if (maxDate == null) { maxLocalDate = LocalDate.now().minusDays(2); } else { maxLocalDate = maxDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); }*/ LocalDate today = LocalDate.now(); LocalDate statisticDate = maxLocalDate.plusDays(1); long daysBetween = ChronoUnit.DAYS.between(maxLocalDate, today); if (daysBetween > 30) { daysBetween = 30; statisticDate = today.minusDays(daysBetween); } 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); statisticDate = maxLocalDate.plusDays(i); } log.info("统计人员工作量任务结束"); } }