diff --git a/api-admin/src/main/java/com/glxp/api/admin/constant/Constant.java b/api-admin/src/main/java/com/glxp/api/admin/constant/Constant.java index 9c0fdaa8..56a53324 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/constant/Constant.java +++ b/api-admin/src/main/java/com/glxp/api/admin/constant/Constant.java @@ -41,6 +41,7 @@ public class Constant { public static final String dlThrInvProducts = "THR_DOWNLOAD_INV_PRODUCTS"; public static final String dlThrOrders = "THR_DOWNLOAD_ORDERS"; public static final String dlThrCorps = "THR_DOWNLOAD_CORPS"; + public static final String SPS_SYNC_DOWNLOAD_INFO = "SPS_SYNC_DOWNLOAD_INFO"; public static String SPTM_TO_DI = "sptm_to_di"; diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/basic/SpsSyncDownloadController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/basic/SpsSyncDownloadController.java index 7865f58e..1126a9d6 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/controller/basic/SpsSyncDownloadController.java +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/basic/SpsSyncDownloadController.java @@ -7,8 +7,9 @@ import com.glxp.api.admin.req.basic.BasicDownloadRequest; import com.glxp.api.admin.req.info.DeleteRequest; import com.glxp.api.admin.res.PageSimpleResponse; import com.glxp.api.admin.service.basic.BasicDownloadService; -import com.glxp.api.admin.service.inout.OrderService; +import com.glxp.api.admin.thread.DlBasicService; import com.glxp.api.admin.util.RedisUtil; +import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import lombok.extern.slf4j.Slf4j; @@ -32,7 +33,7 @@ public class SpsSyncDownloadController { @Resource SpGetHttpClient spGetHttp; @Resource - OrderService orderService; + DlBasicService dlBasicService; @GetMapping("/spssync/download/basic/udiinfo/getStatus") @@ -82,5 +83,19 @@ public class SpsSyncDownloadController { } + /** + * 立即下载数据 + * + * @param type + * @return + */ + @GetMapping("/spsync/download/now") + public BaseResponse downloadNow(Integer type) { + if (null == type) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return dlBasicService.downloadNow(type); + } + } \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/httpclient/SpGetHttpClient.java b/api-admin/src/main/java/com/glxp/api/admin/httpclient/SpGetHttpClient.java index ff42b243..cdb2145a 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/httpclient/SpGetHttpClient.java +++ b/api-admin/src/main/java/com/glxp/api/admin/httpclient/SpGetHttpClient.java @@ -6,10 +6,9 @@ import com.alibaba.fastjson.TypeReference; import com.glxp.api.admin.entity.basic.BasicExportStatusEntity; import com.glxp.api.admin.entity.info.SyncDataSetEntity; import com.glxp.api.admin.entity.inout.IOOrderStatusEntity; -import com.glxp.api.admin.httpclient.UHttpClient; import com.glxp.api.admin.req.basic.BasicExportStatusRequest; import com.glxp.api.admin.req.inout.OrderStatusFilterRequest; -import com.glxp.api.admin.req.sync.BasicDataFilterRequest; +import com.glxp.api.admin.req.sync.PostDownloadInfo; import com.glxp.api.admin.res.PageSimpleResponse; import com.glxp.api.admin.res.basic.SpsSyncBusResponse; import com.glxp.api.admin.res.basic.SpsSyncDataResponse; @@ -20,7 +19,6 @@ import com.glxp.api.admin.service.info.SyncDataSetService; import com.glxp.api.admin.util.OkHttpCli; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -204,5 +202,13 @@ public class SpGetHttpClient { return response; } + public BaseResponse postDownloadInfo(PostDownloadInfo postDownloadInfo) { + String json = JSONUtil.toJsonStr(postDownloadInfo); + String result = okHttpCli.doPostJson(getIpUrl() + "/udisp/sync/downloadNow", json); + BaseResponse response = + JSONObject.parseObject(result, new TypeReference>() { + }); + return response; + } } diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/sync/PostDownloadInfo.java b/api-admin/src/main/java/com/glxp/api/admin/req/sync/PostDownloadInfo.java new file mode 100644 index 00000000..c04aff5d --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/req/sync/PostDownloadInfo.java @@ -0,0 +1,16 @@ +package com.glxp.api.admin.req.sync; + +import lombok.Data; + +/** + * 下载任务信息 + */ +@Data +public class PostDownloadInfo { + + /** + * 下载类型 + */ + private Integer type; + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/thread/DlBasicService.java b/api-admin/src/main/java/com/glxp/api/admin/thread/DlBasicService.java index 377b1f03..fd639bcd 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/thread/DlBasicService.java +++ b/api-admin/src/main/java/com/glxp/api/admin/thread/DlBasicService.java @@ -1,9 +1,11 @@ package com.glxp.api.admin.thread; import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.glxp.api.admin.constant.BasicProcessStatus; +import com.glxp.api.admin.constant.Constant; import com.glxp.api.admin.constant.ConstantStatus; import com.glxp.api.admin.dao.auth.AuthAdminDao; import com.glxp.api.admin.dao.basic.*; @@ -34,13 +36,13 @@ import com.glxp.api.admin.entity.purchase.SupProductEntity; import com.glxp.api.admin.entity.thrsys.*; import com.glxp.api.admin.httpclient.SpGetHttpClient; import com.glxp.api.admin.req.basic.BasicExportStatusRequest; +import com.glxp.api.admin.req.sync.PostDownloadInfo; import com.glxp.api.admin.res.basic.SpSyncUdiResponse; import com.glxp.api.admin.res.basic.SpsSyncBusResponse; import com.glxp.api.admin.res.basic.SpsSyncDataResponse; import com.glxp.api.admin.res.basic.SpsSyncOrderResponse; import com.glxp.api.admin.service.auth.DeptService; import com.glxp.api.admin.service.basic.*; -import com.glxp.api.admin.service.info.SystemParamConfigService; import com.glxp.api.admin.service.inout.OrderService; import com.glxp.api.admin.service.inventory.InvBusUserService; import com.glxp.api.admin.service.inventory.InvSubWarehouseService; @@ -54,6 +56,8 @@ import com.glxp.api.admin.util.CustomUtil; import com.glxp.api.admin.util.DateUtil; import com.glxp.api.admin.util.RedisUtil; import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; @@ -65,8 +69,11 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +@Slf4j @Service public class DlBasicService { @@ -730,4 +737,54 @@ public class DlBasicService { } + /** + * 发送通知到自助平台,生成同步任务 + * + * @param type + * @return + */ + public BaseResponse downloadNow(Integer type) { + Object o = redisUtil.get(Constant.SPS_SYNC_DOWNLOAD_INFO); + if (null != o) { + return ResultVOUtils.error(500, "已存在下载任务,请等待下载完成!"); + } + + String downloadInfo = null; + if (null != type) { + switch (type) { + case 1: + downloadInfo = "基础信息"; + break; + case 2: + downloadInfo = "单据类型"; + break; + case 3: + downloadInfo = "扫码单据"; + break; + case 4: + downloadInfo = "国家库信息"; + break; + default: + break; + } + } + PostDownloadInfo postDownloadInfo = new PostDownloadInfo(); + postDownloadInfo.setType(type); + BaseResponse response = spGetHttp.postDownloadInfo(postDownloadInfo); + if (null == response) { + log.error("创建下载任务失败!"); + return ResultVOUtils.error(500, response.getMessage()); + } else if (response.getCode() != 20000) { + log.error(response.getMessage()); + return ResultVOUtils.error(500, response.getMessage()); + } else { + log.info("创建:{} 下载任务成功", downloadInfo); + //在Redis中创建下载任务标识 + Map map = new HashMap<>(2); + map.put("type", postDownloadInfo.getType()); + map.put("time", cn.hutool.core.date.DateUtil.offsetMinute(new Date(), 2).getTime()); + redisUtil.set(Constant.SPS_SYNC_DOWNLOAD_INFO, JSONUtil.toJsonStr(map)); + return ResultVOUtils.success(); + } + } } diff --git a/api-admin/src/main/java/com/glxp/api/admin/thread/DownloadSpDataTask.java b/api-admin/src/main/java/com/glxp/api/admin/thread/DownloadSpDataTask.java new file mode 100644 index 00000000..fb93bce9 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/thread/DownloadSpDataTask.java @@ -0,0 +1,79 @@ +package com.glxp.api.admin.thread; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.glxp.api.admin.constant.Constant; +import com.glxp.api.admin.dao.schedule.ScheduledDao; +import com.glxp.api.admin.entity.info.ScheduledEntity; +import com.glxp.api.admin.req.info.ScheduledRequest; +import com.glxp.api.admin.util.RedisUtil; +import lombok.extern.slf4j.Slf4j; +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.Map; + +@Slf4j +@Component +@EnableScheduling +public class DownloadSpDataTask implements SchedulingConfigurer { + + @Resource + private ScheduledDao scheduledDao; + @Resource + private RedisUtil redisUtil; + @Resource + private DlBasicService dlBasicService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.addTriggerTask(this::process, triggerContext -> { + ScheduledRequest scheduledRequest = new ScheduledRequest(); + scheduledRequest.setCronName("downloadSpDataTask"); + ScheduledEntity scheduled = scheduledDao.findScheduled(scheduledRequest); + String cron = scheduled.getCron(); + if (StrUtil.isBlank(cron)) { + log.error("cron is null"); + } + return new CronTrigger(cron).nextExecutionTime(triggerContext); + }); + } + + private void process() { + Object result = redisUtil.get(Constant.SPS_SYNC_DOWNLOAD_INFO); + if (null != result) { + //解析下载参数 + Map map = JSONUtil.toBean(String.valueOf(result), Map.class); + DateTime taskTime = DateUtil.date(Long.valueOf(String.valueOf(map.get("time")))); + if (DateUtil.date().getTime() <= taskTime.getTime()) { + Integer type = Integer.valueOf(String.valueOf(map.get("type"))); + if (type == 1) { + log.info("开始下载基础信息"); + dlBasicService.dlAllData(); + log.info("基础信息下载完毕"); + } else if (type == 2) { + log.info("开始下载单据类型"); + dlBasicService.dlAllBus(); + log.info("单据类型下载完毕"); + } else if ((type == 3)) { + log.info("开始下载扫码单据"); + dlBasicService.dlAllOrder(); + log.info("扫码单据下载完毕"); + } else if (type == 4) { + log.info("开始下载国家库数据"); + dlBasicService.dlAllUDI(); + log.info("国家库数据下载完毕"); + } + //删除标记 + redisUtil.del(Constant.SPS_SYNC_DOWNLOAD_INFO); + } + } + } + +} diff --git a/api-admin/src/main/resources/schemas/schema_v2.1.sql b/api-admin/src/main/resources/schemas/schema_v2.1.sql index 35747397..66cb9494 100644 --- a/api-admin/src/main/resources/schemas/schema_v2.1.sql +++ b/api-admin/src/main/resources/schemas/schema_v2.1.sql @@ -5,6 +5,7 @@ CALL Pro_Temp_ColumnWork ('io_order','wzUploadStatus','varchar(255) ', 1); CALL Pro_Temp_ColumnWork ('io_order','wzUploadResult','varchar(255) ', 1); +INSERT ignore INTO sys_scheduled (`cronName`, `cron`, `customerId`, `remark`) VALUES ('downloadSpDataTask', '0 0/1 * * * ?', NULL, '立即下载自助平台数据'); -- 创建表时必须 create table if not exists 表名