diff --git a/src/main/java/com/ai/da/common/utils/RedisUtil.java b/src/main/java/com/ai/da/common/utils/RedisUtil.java index 780d0c3a..7d5295dc 100644 --- a/src/main/java/com/ai/da/common/utils/RedisUtil.java +++ b/src/main/java/com/ai/da/common/utils/RedisUtil.java @@ -268,4 +268,14 @@ public class RedisUtil { // 每天允许通知3次 public final static String UPLOAD_TIMEOUT_REMINDER_COUNTER = "UploadTimeoutReminderCounter"; + public void addProcessId(String processId, int progress) { + // Redis 中的键,可以通过 processId 来唯一标识 + String redisKey = "process:progress:" + processId; + + // 将当前进度存储到 Redis + redisTemplate.opsForValue().set(redisKey, String.valueOf(progress)); + + // 设置过期时间为 5 分钟(300 秒) + redisTemplate.expire(redisKey, 5, TimeUnit.MINUTES); + } } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 3fa9ef28..a378d624 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -74,6 +74,9 @@ public class PythonService { @Resource private MinioUtil minioUtil; + @Resource + private RedisUtil redisUtil; + /** * 生成打印的图片 二合一 (废弃于2024/01/02) * @@ -260,6 +263,7 @@ public class PythonService { DesignPythonObject pythonObject = createDesignPythonObject(elementVO, designPictureType, systemScale, singleOverall, switchCategory); objects.add(pythonObject); + redisUtil.addProcessId(processId, i); } return designPythonObjects; } diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 4ce62f41..53446908 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -106,6 +106,9 @@ public class DesignServiceImpl extends ServiceImpl impleme @Value("${access.python.port:''}") private String accessPythonPort; + @Resource + private RedisUtil redisUtil; + @Override public DesignCollectionVO designCollection(DesignCollectionDTO designDTO) { AuthPrincipalVo userInfo = UserContext.getUserHolder(); @@ -1117,6 +1120,24 @@ public class DesignServiceImpl extends ServiceImpl impleme @Override public Integer designProcess(String processId) { + // 假设 Redis 中存储的最大进度为 8,分配前 50% + int redisMaxProgress = 8; + int totalProgress = 100; + int redisWeight = 50; // Redis 进度占 50% + int pythonWeight = 50; // Python 接口进度占 50% + + // 先从 Redis 中查询当前进度 + String redisKey = "process:progress:" + processId; + String redisProgressString = redisUtil.getFromString(redisKey); + int redisProgress = redisProgressString != null ? Integer.parseInt(redisProgressString) : 0; + + // 如果 Redis 进度未达到最大值,则返回前 50% 的部分 + if (redisProgress < redisMaxProgress) { + int progressPercentage = (redisProgress * redisWeight) / redisMaxProgress; + return progressPercentage; + } + + // Redis 进度已经达到 8,查询 Python 接口获取后 50% 的进度 ProcessIdObject object = new ProcessIdObject(); object.setProcess_id(processId); @@ -1144,13 +1165,18 @@ public class DesignServiceImpl extends ServiceImpl impleme String responseBody = Objects.requireNonNull(response.body()).string(); JSONObject responseObject = JSON.parseObject(responseBody); String num = responseObject.getString("data"); - return Integer.valueOf(num); + int pythonProgress = Integer.parseInt(num); + + // Redis 进度占前 50%,Python 进度占后 50% + int combinedProgress = redisWeight + (pythonProgress * pythonWeight) / totalProgress; + return combinedProgress; } } catch (IOException | JSONException e) { log.error("PythonService##design进度条异常###{}", ExceptionUtil.getThrowableList(e)); } - return 0; + // 如果 Python 请求失败,仍然返回前 50% 的 Redis 进度 + return redisWeight; }