From a5ab5365080f456e8dddbe269d05a23cd9c3da56 Mon Sep 17 00:00:00 2001 From: anthonywj Date: Tue, 16 May 2023 09:32:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9A=E6=97=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=9B=BD=E5=AE=B6=E5=BA=93=E6=95=B0=E6=8D=AE=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/glxp/api/task/AsyncDiDlService.java | 50 +++++++++++++++ .../java/com/glxp/api/task/AsyncDiDlTask.java | 63 +++++++++++++++++++ src/main/java/com/glxp/api/util/DateUtil.java | 17 +++-- 3 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/glxp/api/task/AsyncDiDlService.java create mode 100644 src/main/java/com/glxp/api/task/AsyncDiDlTask.java diff --git a/src/main/java/com/glxp/api/task/AsyncDiDlService.java b/src/main/java/com/glxp/api/task/AsyncDiDlService.java new file mode 100644 index 0000000..859f728 --- /dev/null +++ b/src/main/java/com/glxp/api/task/AsyncDiDlService.java @@ -0,0 +1,50 @@ +package com.glxp.api.task; + +import com.glxp.api.constant.AsyncDiDlHelper; +import com.glxp.api.entity.basic.ProductInfoEntity; +import com.glxp.api.service.basic.ProductInfoService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class AsyncDiDlService { + + + @Value("${UDI_SERVER_URL}") + private String udiUrl; + + @Resource + ProductInfoService productInfoService; + @Resource + AsyncDiDlHelper asyncDiDlHelper; + private static final Logger logger = LoggerFactory.getLogger(AsyncDiDlService.class); + + @Async + public void asyncDiByTime(String updateTime) { + int page = 1; + int limit = 200; + while (true) { + logger.info("更新时间:" + updateTime + "----" + page + "----" + limit); + List productInfoEntityList = asyncDiDlHelper.dlByTime(udiUrl, page, limit, updateTime); + if (productInfoEntityList != null && productInfoEntityList.size() > 0) { + productInfoService.insertProductInfos(productInfoEntityList); + if (productInfoEntityList.size() < limit) { + break; + } else { + page++; + } + } else { + break; + } + } + logger.info("更新时间:" + updateTime + "----" + "下载结束"); + } + + +} diff --git a/src/main/java/com/glxp/api/task/AsyncDiDlTask.java b/src/main/java/com/glxp/api/task/AsyncDiDlTask.java new file mode 100644 index 0000000..ba42798 --- /dev/null +++ b/src/main/java/com/glxp/api/task/AsyncDiDlTask.java @@ -0,0 +1,63 @@ +package com.glxp.api.task; + +import com.glxp.api.dao.schedule.ScheduledDao; +import com.glxp.api.entity.system.ScheduledEntity; +import com.glxp.api.req.system.ScheduledRequest; +import com.glxp.api.util.DateUtil; +import com.glxp.api.util.RedisUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; + +@Component +@EnableScheduling +public class AsyncDiDlTask implements SchedulingConfigurer { + + final Logger logger = LoggerFactory.getLogger(AsyncDiDlTask.class); + @Resource + RedisUtil redisUtil; + @Resource + private ScheduledDao scheduledDao; + @Resource + AsyncDiDlService asyncDiDlService; + + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + scheduledTaskRegistrar.addTriggerTask(() -> process(), + triggerContext -> { + ScheduledRequest scheduledRequest = new ScheduledRequest(); + scheduledRequest.setCronName("syncDi"); + ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); + if (scheduledEntity == null) { + return null; + } + String cron = scheduledEntity.getCron();//"0 55 5 * * ?"; + if (cron.isEmpty()) { + logger.error("cron is null"); + } + return new CronTrigger(cron).nextExecutionTime(triggerContext); + }); + } + + private void process() { + String day = DateUtil.getLastDayFormat(-1); + asyncDiDlService.asyncDiByTime(day); + + + String lastUpDiTime = (String) redisUtil.get("lastDiUpTime"); + if (lastUpDiTime == null) { + lastUpDiTime = DateUtil.getLastDayFormat(-10); + } + asyncDiDlService.asyncDiByTime(lastUpDiTime); + redisUtil.set("lastDiUpTime", DateUtil.formatDate(new Date())); + } + + +} diff --git a/src/main/java/com/glxp/api/util/DateUtil.java b/src/main/java/com/glxp/api/util/DateUtil.java index 17f7cf6..050f83e 100644 --- a/src/main/java/com/glxp/api/util/DateUtil.java +++ b/src/main/java/com/glxp/api/util/DateUtil.java @@ -4,11 +4,7 @@ import java.lang.management.ManagementFactory; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; +import java.util.*; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; @@ -577,7 +573,7 @@ public class DateUtil extends DateUtils { } - /** + /** * 将Date类型转换为指定格式字符串 * * @param date @@ -684,4 +680,13 @@ public class DateUtil extends DateUtils { Date dt1 = rightNow.getTime(); return dt1; } + + public static String getLastDayFormat(int amount) { + SimpleDateFormat smdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(new Date()); + calendar.add(calendar.DATE, amount); + String formatDate = smdate.format(calendar.getTime()); + return formatDate; + } }