TimeTask.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package cn.com.taiji.duty.task;
  2. import cn.com.taiji.duty.model.DutyLoginLog;
  3. import cn.com.taiji.duty.model.DutySeatDutyUnit;
  4. import cn.com.taiji.duty.model.DutySignInRecord;
  5. import cn.com.taiji.duty.model.DutyStatistics;
  6. import cn.com.taiji.duty.service.*;
  7. import cn.com.taiji.duty.utils.StringUtils;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.data.redis.core.StringRedisTemplate;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import java.time.LocalDate;
  15. import java.time.format.DateTimeFormatter;
  16. import java.time.temporal.WeekFields;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. /**
  21. * @Description
  22. *
  23. * @Author yangyue
  24. * @Date 2023/8/4
  25. */
  26. @Component
  27. @Slf4j
  28. public class TimeTask {
  29. @Autowired
  30. private IDutyStatisticsService statisticsService;
  31. @Autowired
  32. private IDutySeatDutyUnitService dutyUnitService;
  33. @Autowired
  34. private IDutySignInRecordService signInRecordService;
  35. @Autowired
  36. private IDutyLoginLogService loginLogService;
  37. @Autowired
  38. protected StringRedisTemplate redisTemplate;
  39. @Autowired
  40. private IDutyConfigService configService;
  41. @Scheduled(cron = "0 0 0 * * ?")
  42. public void signScheduleOne() {
  43. log.info("===========签卡处理定时开始===========");
  44. this.signOne();
  45. log.info("===========签卡处理定时结束===========");
  46. }
  47. public void signOne() {
  48. List<DutySeatDutyUnit> dutyUnits = dutyUnitService.queryDutyUnit();
  49. DutySignInRecord signInRecord = new DutySignInRecord();
  50. signInRecord.setStatus("4");
  51. signInRecordService.update(signInRecord, new LambdaQueryWrapper<DutySignInRecord>()
  52. .eq(DutySignInRecord::getStatus, "0"));
  53. List<DutySignInRecord> signInRecords = new ArrayList<>();
  54. Date date = new Date();
  55. String signBeginTime = configService.selectConfigByKey("sign.begin.time");
  56. DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  57. LocalDate localDate = LocalDate.now();
  58. String time = df.format(localDate);
  59. dutyUnits.forEach(dutyUnit -> {
  60. DutySignInRecord sign = new DutySignInRecord();
  61. sign.setDeptId(dutyUnit.getDeptId());
  62. sign.setUnitName(dutyUnit.getName());
  63. sign.setTime(date);
  64. sign.setType("1");
  65. sign.setStatus("0");
  66. sign.setSignTime(time + " " + signBeginTime);
  67. signInRecords.add(sign);
  68. });
  69. String signEndTime = configService.selectConfigByKey("sign.end.time");
  70. dutyUnits.forEach(dutyUnit -> {
  71. DutySignInRecord sign = new DutySignInRecord();
  72. sign.setDeptId(dutyUnit.getDeptId());
  73. sign.setUnitName(dutyUnit.getName());
  74. sign.setTime(date);
  75. sign.setType("2");
  76. sign.setStatus("0");
  77. sign.setSignTime(time + " " + signEndTime);
  78. signInRecords.add(sign);
  79. });
  80. signInRecordService.saveBatch(signInRecords);
  81. }
  82. @Scheduled(cron = "0 0 12 * * ?")
  83. public void signScheduleTwo() {
  84. log.info("===========签卡处理定时开始===========");
  85. this.signTwo();
  86. log.info("===========签卡处理定时结束===========");
  87. }
  88. public void signTwo() {
  89. // List<DutySeatDutyUnit> dutyUnits = dutyUnitService.queryDutyUnit();
  90. DutySignInRecord signInRecord = new DutySignInRecord();
  91. signInRecord.setStatus("4");
  92. signInRecordService.update(signInRecord, new LambdaQueryWrapper<DutySignInRecord>()
  93. .eq(DutySignInRecord::getStatus, "0").eq(DutySignInRecord::getType,"1"));
  94. // List<DutySignInRecord> signInRecords = new ArrayList<>();
  95. // Date date = new Date();
  96. // String signEndTime = configService.selectConfigByKey("sign.end.time");
  97. // dutyUnits.forEach(dutyUnit -> {
  98. // DutySignInRecord sign = new DutySignInRecord();
  99. // sign.setDeptId(dutyUnit.getDeptId());
  100. // sign.setUnitName(dutyUnit.getName());
  101. // sign.setTime(date);
  102. // sign.setType("2");
  103. // sign.setStatus("0");
  104. // sign.setSignTime(signEndTime);
  105. // signInRecords.add(sign);
  106. // });
  107. // signInRecordService.saveBatch(signInRecords);
  108. }
  109. @Scheduled(cron = "0 0 1 * * ?")
  110. public void statisticsScheduleOne() {
  111. log.info("===========定时开始===========");
  112. LocalDate localDate = LocalDate.now().plusDays(-1);
  113. this.statisticsOne();
  114. log.info("===========定时结束===========");
  115. }
  116. public void statisticsOne() {
  117. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  118. DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM");
  119. LocalDate now = LocalDate.now();
  120. String time = formatter.format(now);
  121. String year = String.valueOf(now.getYear());
  122. String yearMonth = df.format(now);
  123. String week = String.valueOf(now.get(WeekFields.ISO.weekOfWeekBasedYear()));
  124. List<DutySeatDutyUnit> dutyUnits = dutyUnitService.queryDutyUnit();
  125. List<DutyStatistics> dutyStatisticsList = new ArrayList<>();
  126. dutyUnits.forEach(dutyUnit -> {
  127. DutyStatistics statistics = new DutyStatistics();
  128. statistics.setDeptId(dutyUnit.getDeptId());
  129. statistics.setUnitName(dutyUnit.getName());
  130. statistics.setYear(year);
  131. statistics.setYearMonth(yearMonth);
  132. statistics.setWeek(week);
  133. statistics.setTime(time);
  134. statistics.setType("1");
  135. statistics.setStatus("2");
  136. dutyStatisticsList.add(statistics);
  137. DutyStatistics statistics2 = new DutyStatistics();
  138. statistics2.setDeptId(dutyUnit.getDeptId());
  139. statistics2.setUnitName(dutyUnit.getName());
  140. statistics2.setYear(year);
  141. statistics2.setYearMonth(yearMonth);
  142. statistics2.setWeek(week);
  143. statistics2.setTime(time);
  144. statistics2.setType("2");
  145. statistics2.setStatus("2");
  146. dutyStatisticsList.add(statistics2);
  147. DutyStatistics statistics3 = new DutyStatistics();
  148. statistics.setDeptId(dutyUnit.getDeptId());
  149. statistics3.setUnitName(dutyUnit.getName());
  150. statistics3.setYear(year);
  151. statistics3.setYearMonth(yearMonth);
  152. statistics3.setWeek(week);
  153. statistics3.setTime(time);
  154. statistics3.setType("3");
  155. statistics3.setStatus("2");
  156. dutyStatisticsList.add(statistics3);
  157. });
  158. statisticsService.saveBatch(dutyStatisticsList);
  159. String oldTime = formatter.format(now.plusDays(-1));
  160. dutyUnits.forEach(dutyUnit -> {
  161. long count = signInRecordService.queryCount(dutyUnit.getDeptId(), oldTime);
  162. if (count == 2) {
  163. DutyStatistics statistics = new DutyStatistics();
  164. statistics.setStatus("1");
  165. statisticsService.update(statistics, new LambdaQueryWrapper<DutyStatistics>()
  166. .eq(DutyStatistics::getDeptId,dutyUnit.getDeptId())
  167. .eq(DutyStatistics::getTime,oldTime)
  168. .eq(DutyStatistics::getType,"1"));
  169. }
  170. });
  171. }
  172. @Scheduled(cron = "0 0/10 * * * ?")
  173. public void logOutScheduleOne() {
  174. log.info("===========定时开始===========");
  175. LocalDate localDate = LocalDate.now().plusDays(-1);
  176. this.logOutOne();
  177. log.info("===========定时结束===========");
  178. }
  179. public void logOutOne() {
  180. List<DutyLoginLog> list = loginLogService.list(new LambdaQueryWrapper<DutyLoginLog>()
  181. .eq(DutyLoginLog::getStatus, "1"));
  182. if (list != null && list.size() > 0) {
  183. Date date = new Date();
  184. list.forEach(loginLog -> {
  185. String username = redisTemplate.opsForValue().get(loginLog.getToken());
  186. if (StringUtils.isEmpty(username)) {
  187. loginLog.setStatus("2");
  188. loginLog.setExitTime(date);
  189. loginLog.setDuration((date.getTime()-loginLog.getLoginTime().getTime())/1000);
  190. loginLogService.updateById(loginLog);
  191. }
  192. });
  193. }
  194. }
  195. }