From 3b7a01f69f61305ec120d96f298528ceff315147 Mon Sep 17 00:00:00 2001 From: wj <1285151836@qq.com> Date: Wed, 19 Apr 2023 18:55:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E7=BB=A7=E6=9C=8D=E5=8A=A1=E6=8B=89?= =?UTF-8?q?=E5=8F=96UDI=E8=87=AA=E5=8A=A9=E5=B9=B3=E5=8F=B0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/constant/BasicExportStatusEnum.java | 33 +++++++++ .../admin/constant/BasicExportTypeEnum.java | 28 +++++++ .../com/glxp/sale/admin/dto/RelaySyncDto.java | 16 ++++ .../entity/sync/BasicExportStatusEntity.java | 6 ++ .../com/glxp/sale/admin/http/SpGetHttp.java | 23 ++++++ .../sale/admin/thread/DlAllDataService.java | 74 ++++++++++++++++++- .../com/glxp/sale/admin/thread/HeartTask.java | 27 ++++--- 7 files changed, 193 insertions(+), 14 deletions(-) create mode 100644 api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportStatusEnum.java create mode 100644 api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportTypeEnum.java create mode 100644 api-admin/src/main/java/com/glxp/sale/admin/dto/RelaySyncDto.java diff --git a/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportStatusEnum.java b/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportStatusEnum.java new file mode 100644 index 0000000..b6c71b4 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportStatusEnum.java @@ -0,0 +1,33 @@ +package com.glxp.sale.admin.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum BasicExportStatusEnum { + + /** + * 任务待触发 + */ + WAIT_TRIGGERED(1, "任务待触发"), + + /** + * 文件待生成 + */ + WAIT_BUILT(2, "文件待生成"), + + /** + * 文件待同步 + */ + WAIT_SYNC(3, "文件待同步"), + + /** + * 任务完成 + */ + COMPLETED(4, "任务完成"), + ; + private Integer code; + + private String remark; +} diff --git a/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportTypeEnum.java b/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportTypeEnum.java new file mode 100644 index 0000000..ffb81d2 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/sale/admin/constant/BasicExportTypeEnum.java @@ -0,0 +1,28 @@ +package com.glxp.sale.admin.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum BasicExportTypeEnum { + + /** + * 基础数据 + */ + BASIC_DATA("basic_data", "基础数据"), + + /** + * 国家库DI数据 + */ + COUNTRY_DI_DATA("country_di_data", "国家库DI数据"), + + /** + * 其他数据 + */ + OTHER_DATA("other_data", "其他数据"), + ; + private String key; + + private String remark; +} diff --git a/api-admin/src/main/java/com/glxp/sale/admin/dto/RelaySyncDto.java b/api-admin/src/main/java/com/glxp/sale/admin/dto/RelaySyncDto.java new file mode 100644 index 0000000..ca11996 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/sale/admin/dto/RelaySyncDto.java @@ -0,0 +1,16 @@ +package com.glxp.sale.admin.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RelaySyncDto { + String taskId; + String filePath; + String fileContent; +} diff --git a/api-admin/src/main/java/com/glxp/sale/admin/entity/sync/BasicExportStatusEntity.java b/api-admin/src/main/java/com/glxp/sale/admin/entity/sync/BasicExportStatusEntity.java index 68b3bb3..9a8e880 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/entity/sync/BasicExportStatusEntity.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/entity/sync/BasicExportStatusEntity.java @@ -1,10 +1,16 @@ package com.glxp.sale.admin.entity.sync; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class BasicExportStatusEntity { private String id; private String taskId; diff --git a/api-admin/src/main/java/com/glxp/sale/admin/http/SpGetHttp.java b/api-admin/src/main/java/com/glxp/sale/admin/http/SpGetHttp.java index 7a18f2e..147b477 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/http/SpGetHttp.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/http/SpGetHttp.java @@ -1,8 +1,10 @@ package com.glxp.sale.admin.http; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.glxp.sale.admin.constant.BasicExportTypeEnum; import com.glxp.sale.admin.entity.sync.BasicExportStatusEntity; import com.glxp.sale.admin.entity.sync.BasicExportStatusTimeEntity; import com.glxp.sale.admin.entity.sync.IOOrderStatusEntity; @@ -21,6 +23,7 @@ import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.WeakHashMap; @Service public class SpGetHttp { @@ -313,4 +316,24 @@ public class SpGetHttp { return ResultVOUtils.error(500, "下载失败!"); } } + + + /** + * 拉取UDI自助平台数据 + * + * @return + */ + public String pullData(BasicExportTypeEnum exportType) { + Map paramMap = new WeakHashMap<>(1); + paramMap.put("exportType", exportType.name()); + String result = UHttpClient.mipsGetHead(getSpmsUrl() + "/sps/sync/data", paramMap, getHeaders()); + return result; + } + + + public void finishTask(String id) { + String result = UHttpClient.mipsGetHead(getSpmsUrl() + "/spssync/basic/udiinfo/finishTask" + , Map.of("id", id), getHeaders()); + + } } diff --git a/api-admin/src/main/java/com/glxp/sale/admin/thread/DlAllDataService.java b/api-admin/src/main/java/com/glxp/sale/admin/thread/DlAllDataService.java index 8393305..1427dc0 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/thread/DlAllDataService.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/thread/DlAllDataService.java @@ -1,12 +1,14 @@ package com.glxp.sale.admin.thread; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.glxp.sale.admin.constant.BasicProcessStatus; -import com.glxp.sale.admin.constant.ConstantStatus; -import com.glxp.sale.admin.constant.FileConstant; +import com.glxp.sale.admin.constant.*; +import com.glxp.sale.admin.dto.RelaySyncDto; import com.glxp.sale.admin.entity.param.SystemParamConfigEntity; import com.glxp.sale.admin.entity.sync.BasicExportStatusEntity; import com.glxp.sale.admin.entity.sync.ProductInfoEntity; @@ -20,12 +22,18 @@ import com.glxp.sale.admin.service.param.SystemParamConfigService; import com.glxp.sale.admin.service.sync.BasicExportService; import com.glxp.sale.admin.thread.didl.AsyncDiDlHelper; import com.glxp.sale.admin.util.*; +import com.glxp.sale.common.enums.ResultEnum; import com.glxp.sale.common.res.BaseResponse; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.util.Date; import java.util.List; @@ -232,6 +240,66 @@ public class DlAllDataService { log.info("下载所有单据---结束"); } + /** + * 从UDI自助平台拉取 统一方法 + * + * @param exportType 任务类型 + */ + @Transactional(rollbackFor = Exception.class) + public void pullData(BasicExportTypeEnum exportType) { + + String data = spGetHttp.pullData(exportType); + cn.hutool.json.JSONObject obj = JSONUtil.parseObj(data); + Integer code = obj.getInt("code"); + if (!code.equals(ResultEnum.SUCCESS.getCode())) { + log.error("从UDI自助平台拉取数据错误,报文-----{}", data); + return; + } + //需要写入文件的内容 + String dataStr = obj.getStr("data"); + if (StrUtil.isNotBlank(dataStr)) { + RelaySyncDto bean = JSONUtil.toBean(dataStr, RelaySyncDto.class); + // 将数据写入文件 + try { + this.writeFile(bean.getFilePath(), bean.getFileContent()); + } catch (IOException e) { + log.error("从UDI自助平台拉取基础数据 文件写入异常----{}", e.getMessage()); + throw new RuntimeException(e); + } + + BasicExportStatusEntity exportStatusEntity = BasicExportStatusEntity.builder() + .id(bean.getTaskId()) + .taskId(bean.getTaskId()) + .status(BasicExportStatusEnum.WAIT_SYNC.getCode()) + .type(exportType.getRemark()) + .transportType(1) + .scheduleType(0) + .fromType(1) + .startTime(DateUtil.getDateTime()) + .updateTime(new Date()) + .cacheFilePath(bean.getFilePath()) + .build(); + basicExportService.insertExportStatus(exportStatusEntity); + //通知自助平台任务已完成 + spGetHttp.finishTask(bean.getTaskId()); + } + } + + private void writeFile(String filePath, String content) throws IOException { + String folder = filePath.substring(filePath.lastIndexOf('/')); + File file = new File(folder); + if (!file.exists()) { + file.mkdirs(); + } + file = new File(filePath); + file.createNewFile(); + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(content); + fileWriter.flush(); + fileWriter.close(); + } + + public void dllNewAllBusType() { log.info("下载所有单据类型---"); BasicExportStatusRequest basicExportStatusRequest = new BasicExportStatusRequest(); diff --git a/api-admin/src/main/java/com/glxp/sale/admin/thread/HeartTask.java b/api-admin/src/main/java/com/glxp/sale/admin/thread/HeartTask.java index dc92bab..4b15da3 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/thread/HeartTask.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/thread/HeartTask.java @@ -1,5 +1,6 @@ package com.glxp.sale.admin.thread; +import com.glxp.sale.admin.constant.BasicExportTypeEnum; import com.glxp.sale.admin.dao.info.ScheduledDao; import com.glxp.sale.admin.entity.info.ScheduledEntity; import com.glxp.sale.admin.entity.param.SystemParamConfigEntity; @@ -20,6 +21,7 @@ import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Arrays; @Component @EnableScheduling @@ -44,17 +46,16 @@ public class HeartTask implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { - scheduledTaskRegistrar.addTriggerTask(() -> process(), - triggerContext -> { - ScheduledRequest scheduledRequest = new ScheduledRequest(); - scheduledRequest.setCronName("heartTask"); - ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); - String cron = scheduledEntity.getCron(); - if (cron.isEmpty()) { - logger.error("cron is null"); - } - return new CronTrigger(cron).nextExecutionTime(triggerContext); - }); + scheduledTaskRegistrar.addTriggerTask(() -> process(), triggerContext -> { + ScheduledRequest scheduledRequest = new ScheduledRequest(); + scheduledRequest.setCronName("heartTask"); + ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); + String cron = scheduledEntity.getCron(); + if (cron.isEmpty()) { + logger.error("cron is null"); + } + return new CronTrigger(cron).nextExecutionTime(triggerContext); + }); } @@ -145,6 +146,10 @@ public class HeartTask implements SchedulingConfigurer { redisUtil.set("is_doing_download", "true", 60); // dlAllDataService.dllNewAllData(); dlAllDataService.dllNewAllOrder(); + Arrays.stream(BasicExportTypeEnum.values()).forEach(i -> { + dlAllDataService.pullData(i); + }); + // dlAllDataService.dllNewAllBusType(); // dlAllDataService.dlScheduleStatus(); // dlAllDataService.dlAllDi();