要求:
1.限制搜索歷史的個數
2.大於三十天清除歷史紀錄
3.最多5條歷史紀錄
代碼:
第一部分:查詢接口
@PostMapping("/getAiResults") @SneakyThrows public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws Exception { try { String encode = Base64.encode(file.getBytes()); ImageRequest imageRequest = new ImageRequest(); imageRequest.setImage(encode); String result = EasydlImageClassify.easydlImageClassify(imageRequest); AiResponseEntity jsonObject = JSONUtil.toBean(result, AiResponseEntity.class); HashMap<String, InsectEntity> dataMap = new HashMap<String, InsectEntity>(); List<InsectEntity> results = jsonObject.getResults(); results.forEach(item -> { InsectEntity ins = dataMap.get(item.getName()); if (ins != null) { dataMap.put(item.getName(), item.getScore() > ins.getScore() ? item : ins); } else { dataMap.put(item.getName(), item); } }); Set<String> strings = dataMap.keySet(); ArrayList<InsectEntity> insectEntities = new ArrayList<>(); strings.forEach(item -> { insectEntities.add(dataMap.get(item)); }); insectEntities.forEach(item -> { SituationArchivesPests one = situationArchivesPestsService.getOne(Wrappers.lambdaQuery(SituationArchivesPests.class) .eq(SituationArchivesPests::getInsectName, item.getName())); item.setPests(one); // ==============================核心代碼 String key = RedisKeyPrefix.農情快訊搜索.getKey() + SecurityUtils.getLoginUser().getUser().getUserId(); redisTemplate.expire(key, 30, TimeUnit.DAYS); // if (one!=null){ redisTemplate.opsForList().leftPush(key, JSONUtil.toJsonStr(item)); Long size = redisTemplate.opsForList().size(key); if (size > 10) { redisTemplate.opsForList().rightPop(key); } // } //===============================核心代碼 }); return AjaxResult.success(insectEntities); } catch (Exception e) { return AjaxResult.error(e.getMessage()); } }
第一部分:獲取歷史
@GetMapping(value = "/serarchHistory") @ApiOperation("識蟲歷史記錄") public AjaxResult serarchHistory() { String key = RedisKeyPrefix.識蟲歷史記錄.getKey() + SecurityUtils.getLoginUser().getUser().getUserId(); Long size = redisTemplate.opsForList().size(key); List<String> range = redisTemplate.opsForList().range(key, 0, size - 1); return AjaxResult.success(range);