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("统计人员工作量任务结束"); 
 | 
    } 
 | 
} 
 |