package com.integrated.zyyt.controller; import com.integrated.zyyt.service.ZyytService; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; import java.lang.reflect.Method; import java.time.Instant; import java.time.LocalDate; import java.time.LocalTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.concurrent.Callable; /** * @ClassName ZyytController * @Author cy * @Date 2022/11/15 * @Description * @Version 1.0 **/ @ControllerAdvice @Slf4j @RequestMapping("/api/zyyt") public class ZyytController { // private ExecutorService threadPool = Executors.newFixedThreadPool(6); @Resource private ZyytService zyytService; @GetMapping("/addStationInfo") /** * @params date 更新的业务日期 * @params isForece 1强制更新 2不强制 * */ public String addStationInfo() { zyytService.stationInfoTasks(); return "执行完毕"; } @GetMapping("/shkdrbTasks") /** * @params date 更新的业务日期 2022-11-16 * @params isForece 1强制更新 2不强制 * */ public String shkdrbTasks(String date) { zyytService.shkdrbTasks(LocalDate.parse(date)); return "执行完毕"; } @GetMapping("/shkdrbTasksYear") public String shkdrbTasksYear(int year) throws Exception { LocalDate startOfYear = LocalDate.of(year, 1, 1); LocalDate endOfYear = LocalDate.of(year, 12, 31); LocalDate now = LocalDate.now(); for (LocalDate tmp = startOfYear; endOfYear.compareTo(tmp) > 0 && now.compareTo(tmp) > 0; tmp = tmp.plus(1, ChronoUnit.DAYS)) { Instant instant = tmp.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); // threadPool.submit(new ZyytTask(Date.from(instant), zyytService, "shkdrbTasks")); ZyytTask shkdrbTasks = new ZyytTask(Date.from(instant), zyytService, "shkdrbTasks"); shkdrbTasks.call(); } return "后台执行中 ,请不要重复请求"; } @GetMapping("/djtjbTasks") /** * @params date 更新的业务日期 * @params isForece 1强制更新 2不强制 * */ public String djtjbTasks(String date) { zyytService.djtjbTasks(LocalDate.parse(date)); return "执行完毕"; } @GetMapping("/djtjbTasksYear") /** * @params date 更新的业务日期 * @params isForece 1强制更新 2不强制 * */ public String djtjbTasksYear(int year) throws Exception { LocalDate startOfYear = LocalDate.of(year, 1, 1); LocalDate endOfYear = LocalDate.of(year, 12, 31); LocalDate now = LocalDate.now(); for (LocalDate tmp = startOfYear; endOfYear.compareTo(tmp) > 0 && now.compareTo(tmp) > 0; tmp = tmp.plus(1, ChronoUnit.DAYS)) { Instant instant = tmp.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); // threadPool.submit(new ZyytTask(Date.from(instant), zyytService, "djtjbTasks")); ZyytTask djtjbTasks = new ZyytTask(Date.from(instant), zyytService, "djtjbTasks"); djtjbTasks.call(); } return "123"; } } @Slf4j class ZyytTask implements Callable { private Date date; private ZyytService zyytService; private String methodName; public ZyytTask(Date date, ZyytService zyytService, String methodName) { this.date = date; this.zyytService = zyytService; this.methodName = methodName; } @Override public Object call() throws Exception { Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDate localDate = instant.atZone(zoneId).toLocalDate(); log.info("开始:执行方法{},业务日期为{}", methodName, localDate); Method zyytServiceMethod = zyytService.getClass().getMethod(methodName, Date.class); zyytServiceMethod.invoke(zyytService, date); log.info("结束:执行方法{},业务日期为{}", methodName, localDate); return null; } }