五、核心代码
5.1 新增景点类型
@RequestMapping(value = "/insert", method = RequestMethod.POST) @ApiOperation(value = "新增景点类型") public Result<ScenicSpotType> insert(ScenicSpotType scenicSpotType){ if(scenicSpotType.getSortOrder() == null || Objects.equals(0,scenicSpotType.getSortOrder().compareTo(BigDecimal.ZERO))) { scenicSpotType.setSortOrder(BigDecimal.valueOf(iScenicSpotTypeService.count() + 1)); } iScenicSpotTypeService.saveOrUpdate(scenicSpotType); return new ResultUtil<ScenicSpotType>().setData(scenicSpotType); }
5.2 查询推荐的景点
@RequestMapping(value = "/getRecommendList2OnWeb", method = RequestMethod.GET) @ApiOperation(value = "查询推荐的景点") public Result<List<ScenicSpot>> getRecommendList2(){ List<ScenicSpot> spotList = iScenicSpotService.list(); int[] arr = new int[spotList.size()]; for(int i = 1; i < spotList.size(); i ++) { arr[i - 1] = i; } int[] ints = selectM(arr, 10); List<ScenicSpot> ans = new ArrayList<>(); for (int i : ints) { ans.add(spotList.get(i)); } return new ResultUtil<List<ScenicSpot>>().setData(ans); } public static int[] selectM(int[] arr,int m){ int len=arr.length; if(m>arr.length) { throw new RuntimeException("xxxxx"); } int[] res=new int[m]; for(int i=0;i<m;i++){ int randomIndex=len-1-new Random().nextInt(len-i); res[i]=arr[randomIndex]; int tmp=arr[randomIndex]; arr[randomIndex]=arr[i]; arr[i]=tmp; } return res; }
5.3 查询单个景点
@RequestMapping(value = "/getOneOnWeb", method = RequestMethod.GET) @ApiOperation(value = "查询单个景点") public Result<ScenicSpot> getOneOnWeb(@RequestParam String id){ ScenicSpot vo = iScenicSpotService.getById(id); if(vo == null) { return ResultUtil.error("景点不存在"); } // 评分 BigDecimal evaluateSum = BigDecimal.ZERO; QueryWrapper<Evaluate> evalQw = new QueryWrapper<>(); evalQw.eq("spot_id",vo.getId()); List<Evaluate> evaluateList = iEvaluateService.list(evalQw); for (Evaluate evaluate : evaluateList) { evaluateSum = evaluateSum.add(evaluate.getLevel()); } if(evaluateList.size() > 0) { vo.setStar(evaluateSum.divide(BigDecimal.valueOf(evaluateList.size()),2, RoundingMode.DOWN)); } else { vo.setStar(BigDecimal.valueOf(-1)); } // 收藏 QueryWrapper<Collection> coQw = new QueryWrapper<>(); coQw.eq("spot_id",vo.getId()); vo.setCollection(iCollectionService.count(coQw)); String viewStr = redisTemplate.get("SPOT_VIEW:" + vo.getId()); if(!ZwzNullUtils.isNull(viewStr)) { try { long viewNumber = Long.parseLong(viewStr); redisTemplate.set("SPOT_VIEW:" + vo.getId(),(viewNumber + 1) + ""); } catch (Exception e) {} } else { redisTemplate.set("SPOT_VIEW:" + vo.getId(), "1"); } return new ResultUtil<ScenicSpot>().setData(vo); }
5.4 查询评价前10的景点
@RequestMapping(value = "/getTopEvaluate", method = RequestMethod.GET) @ApiOperation(value = "查询评价前10的景点") public Result<List<ScenicSpot>> getTopEvaluate(){ List<ScenicSpot> spotList = iScenicSpotService.list(); for (ScenicSpot vo : spotList) { BigDecimal evaluateSum = BigDecimal.ZERO; QueryWrapper<Evaluate> evalQw = new QueryWrapper<>(); evalQw.eq("spot_id",vo.getId()); List<Evaluate> evaluateList = iEvaluateService.list(evalQw); for (Evaluate evaluate : evaluateList) { evaluateSum = evaluateSum.add(evaluate.getLevel()); } if(evaluateList.size() > 0) { vo.setStar(evaluateSum.divide(BigDecimal.valueOf(evaluateList.size()),2, RoundingMode.DOWN)); } else { vo.setStar(BigDecimal.ZERO); } } Collections.sort(spotList, new Comparator<ScenicSpot>() { @Override public int compare(ScenicSpot o1, ScenicSpot o2) { return o2.getStar().compareTo(o1.getStar()); } }); if(spotList.size() > 10) { spotList = spotList.subList(0,10); } return new ResultUtil<List<ScenicSpot>>().setData(spotList); }
5.5 新增景点评价
@RequestMapping(value = "/addEvaluate", method = RequestMethod.GET) @ApiOperation(value = "新增评价") public Result<Evaluate> addEvaluate(@RequestParam String id, @RequestParam BigDecimal level, @RequestParam String message){ ScenicSpot ss = iScenicSpotService.getById(id); if(ss == null) { return ResultUtil.error("景点不存在"); } User currUser = securityUtil.getCurrUser(); QueryWrapper<Evaluate> qw = new QueryWrapper<>(); qw.eq("spot_id",ss.getId()); qw.eq("user_id",currUser.getId()); qw.last("limit 1"); Evaluate evaluate = iEvaluateService.getOne(qw); if(evaluate == null) { evaluate = new Evaluate(); evaluate.setSpotId(ss.getId()); evaluate.setSpotName(ss.getTitle()); evaluate.setUserId(currUser.getId()); evaluate.setUserName(currUser.getNickname()); } evaluate.setLevel(level); evaluate.setMessage(message); evaluate.setTime(DateUtil.now()); iEvaluateService.saveOrUpdate(evaluate); return ResultUtil.success(); }
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。