package cn.com.taiji.duty.task; import cn.com.taiji.duty.model.DutyLoginLog; import cn.com.taiji.duty.model.DutySeatDutyUnit; import cn.com.taiji.duty.model.DutySignInRecord; import cn.com.taiji.duty.model.DutyStatistics; import cn.com.taiji.duty.service.*; import cn.com.taiji.duty.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @Description * * @Author yangyue * @Date 2023/8/4 */ @Component @Slf4j public class TimeTask { @Autowired private IDutyStatisticsService statisticsService; @Autowired private IDutySeatDutyUnitService dutyUnitService; @Autowired private IDutySignInRecordService signInRecordService; @Autowired private IDutyLoginLogService loginLogService; @Autowired protected StringRedisTemplate redisTemplate; @Autowired private IDutyConfigService configService; @Scheduled(cron = "0 0 0 * * ?") public void signScheduleOne() { log.info("===========签卡处理定时开始==========="); this.signOne(); log.info("===========签卡处理定时结束==========="); } public void signOne() { List dutyUnits = dutyUnitService.queryDutyUnit(); DutySignInRecord signInRecord = new DutySignInRecord(); signInRecord.setStatus("4"); signInRecordService.update(signInRecord, new LambdaQueryWrapper() .eq(DutySignInRecord::getStatus, "0")); List signInRecords = new ArrayList<>(); Date date = new Date(); String signBeginTime = configService.selectConfigByKey("sign.begin.time"); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.now(); String time = df.format(localDate); dutyUnits.forEach(dutyUnit -> { DutySignInRecord sign = new DutySignInRecord(); sign.setDeptId(dutyUnit.getDeptId()); sign.setUnitName(dutyUnit.getName()); sign.setTime(date); sign.setType("1"); sign.setStatus("0"); sign.setSignTime(time + " " + signBeginTime); signInRecords.add(sign); }); String signEndTime = configService.selectConfigByKey("sign.end.time"); dutyUnits.forEach(dutyUnit -> { DutySignInRecord sign = new DutySignInRecord(); sign.setDeptId(dutyUnit.getDeptId()); sign.setUnitName(dutyUnit.getName()); sign.setTime(date); sign.setType("2"); sign.setStatus("0"); sign.setSignTime(time + " " + signEndTime); signInRecords.add(sign); }); signInRecordService.saveBatch(signInRecords); } @Scheduled(cron = "0 0 12 * * ?") public void signScheduleTwo() { log.info("===========签卡处理定时开始==========="); this.signTwo(); log.info("===========签卡处理定时结束==========="); } public void signTwo() { // List dutyUnits = dutyUnitService.queryDutyUnit(); DutySignInRecord signInRecord = new DutySignInRecord(); signInRecord.setStatus("4"); signInRecordService.update(signInRecord, new LambdaQueryWrapper() .eq(DutySignInRecord::getStatus, "0").eq(DutySignInRecord::getType,"1")); // List signInRecords = new ArrayList<>(); // Date date = new Date(); // String signEndTime = configService.selectConfigByKey("sign.end.time"); // dutyUnits.forEach(dutyUnit -> { // DutySignInRecord sign = new DutySignInRecord(); // sign.setDeptId(dutyUnit.getDeptId()); // sign.setUnitName(dutyUnit.getName()); // sign.setTime(date); // sign.setType("2"); // sign.setStatus("0"); // sign.setSignTime(signEndTime); // signInRecords.add(sign); // }); // signInRecordService.saveBatch(signInRecords); } @Scheduled(cron = "0 0 1 * * ?") public void statisticsScheduleOne() { log.info("===========定时开始==========="); LocalDate localDate = LocalDate.now().plusDays(-1); this.statisticsOne(); log.info("===========定时结束==========="); } public void statisticsOne() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM"); LocalDate now = LocalDate.now(); String time = formatter.format(now); String year = String.valueOf(now.getYear()); String yearMonth = df.format(now); String week = String.valueOf(now.get(WeekFields.ISO.weekOfWeekBasedYear())); List dutyUnits = dutyUnitService.queryDutyUnit(); List dutyStatisticsList = new ArrayList<>(); dutyUnits.forEach(dutyUnit -> { DutyStatistics statistics = new DutyStatistics(); statistics.setDeptId(dutyUnit.getDeptId()); statistics.setUnitName(dutyUnit.getName()); statistics.setYear(year); statistics.setYearMonth(yearMonth); statistics.setWeek(week); statistics.setTime(time); statistics.setType("1"); statistics.setStatus("2"); dutyStatisticsList.add(statistics); DutyStatistics statistics2 = new DutyStatistics(); statistics2.setDeptId(dutyUnit.getDeptId()); statistics2.setUnitName(dutyUnit.getName()); statistics2.setYear(year); statistics2.setYearMonth(yearMonth); statistics2.setWeek(week); statistics2.setTime(time); statistics2.setType("2"); statistics2.setStatus("2"); dutyStatisticsList.add(statistics2); DutyStatistics statistics3 = new DutyStatistics(); statistics.setDeptId(dutyUnit.getDeptId()); statistics3.setUnitName(dutyUnit.getName()); statistics3.setYear(year); statistics3.setYearMonth(yearMonth); statistics3.setWeek(week); statistics3.setTime(time); statistics3.setType("3"); statistics3.setStatus("2"); dutyStatisticsList.add(statistics3); }); statisticsService.saveBatch(dutyStatisticsList); String oldTime = formatter.format(now.plusDays(-1)); dutyUnits.forEach(dutyUnit -> { long count = signInRecordService.queryCount(dutyUnit.getDeptId(), oldTime); if (count == 2) { DutyStatistics statistics = new DutyStatistics(); statistics.setStatus("1"); statisticsService.update(statistics, new LambdaQueryWrapper() .eq(DutyStatistics::getDeptId,dutyUnit.getDeptId()) .eq(DutyStatistics::getTime,oldTime) .eq(DutyStatistics::getType,"1")); } }); } @Scheduled(cron = "0 0/10 * * * ?") public void logOutScheduleOne() { log.info("===========定时开始==========="); LocalDate localDate = LocalDate.now().plusDays(-1); this.logOutOne(); log.info("===========定时结束==========="); } public void logOutOne() { List list = loginLogService.list(new LambdaQueryWrapper() .eq(DutyLoginLog::getStatus, "1")); if (list != null && list.size() > 0) { Date date = new Date(); list.forEach(loginLog -> { String username = redisTemplate.opsForValue().get(loginLog.getToken()); if (StringUtils.isEmpty(username)) { loginLog.setStatus("2"); loginLog.setExitTime(date); loginLog.setDuration((date.getTime()-loginLog.getLoginTime().getTime())/1000); loginLogService.updateById(loginLog); } }); } } }