From d7315a9183fb2b13535fb86b98ff6441bf2a7203 Mon Sep 17 00:00:00 2001 From: 10001392 <1055202292@qq.com> Date: Thu, 12 Sep 2024 09:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=89=A9=E6=96=99=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E3=80=91=E5=A4=A7=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../material/config/RedisTemplateConfig.java | 28 +++++++++++++++++++ .../service/MaterialUpdateBillService.java | 11 ++++---- 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/config/RedisTemplateConfig.java diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/RedisTemplateConfig.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/RedisTemplateConfig.java new file mode 100644 index 00000000..0298dff2 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/config/RedisTemplateConfig.java @@ -0,0 +1,28 @@ +package com.nflg.product.material.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisTemplateConfig { + + /** + * redis 解决key和value前多出一段xACxEDx00 + * c.r. https://blog.csdn.net/u010667710/article/details/131452820 + * + * @param redisTemplate + * @return + */ + @Bean + public RedisTemplate redisStringTemplate(RedisTemplate redisTemplate) { + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringRedisSerializer); + // 如果手动将Value转换成了JSON,就不要再用JSON序列化器了。 + // redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); + redisTemplate.setValueSerializer(stringRedisSerializer); + return redisTemplate; + } + +} diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java index 425cfe3b..552aabcf 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java @@ -405,14 +405,12 @@ public class MaterialUpdateBillService extends ServiceImpl excelContext = EecExcelUtil.getExcelContext(file.getInputStream(), MaterialStateUpExcelDTO.class); - if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > 100) { - redisTemplate.opsForValue().set(buildKey(userCode + "1:updateBatchImport"), file.getOriginalFilename()); - redisTemplate.opsForValue().set(buildKey(userCode + "2:updateBatchImport"), file.getOriginalFilename()); - redisTemplate.opsForValue().set(buildKey(userCode + "3:updateBatchImport"), file.getOriginalFilename()); + if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > 1000) { + redisTemplate.opsForValue().set(buildKey(userCode + ":updateBatchImport"), file.getOriginalFilename()); // 大数据量,子线程分批次提交OA(每批1000条),主线程提前返回结果给前端 CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { long startTime = System.currentTimeMillis(); - List> lists = Lists.partition(excelContext, 100); + List> lists = Lists.partition(excelContext, 1000); lists.forEach(items -> this.handleImportDataForState(items, applyDeptName, deptEnt, realName, userCode)); long endTime = System.currentTimeMillis(); log.info("物料变更批量导入耗时(ms): {}", endTime - startTime); @@ -435,6 +433,7 @@ public class MaterialUpdateBillService extends ServiceImpl excelContext = EecExcelUtil.getExcelContext(file.getInputStream(), TwentyMaterialTemplateExcelDTO.class); if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > 1000) { + redisTemplate.opsForValue().set(buildKey(userCode + ":updateBatchImport"), file.getOriginalFilename()); // 大数据量,子线程分批次提交OA(每批1000条),主线程提前返回结果给前端 CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { long startTime = System.currentTimeMillis(); @@ -442,11 +441,13 @@ public class MaterialUpdateBillService extends ServiceImpl this.handleImportDataForSummary(items, applyDeptName, deptEnt, realName, userCode)); long endTime = System.currentTimeMillis(); log.info("物料变更批量导入耗时(ms): {}", endTime - startTime); + redisTemplate.delete(buildKey(userCode + ":updateBatchImport")); return 1; }); task1.exceptionally(ex -> { // 异常处理器,打印异常信息并返回默认值 log.error("物料变更批量导入异常: " + ex.getMessage()); + redisTemplate.delete(buildKey(userCode + ":updateBatchImport")); return -1; }); // task1.join(); // 阻塞获取结果