计算机毕业设计选题推荐-旅游攻略平台-Java/Python项目实战

devtools/2024/9/25 17:12:33/

作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

文章目录

  • 一、前言
  • 二、开发环境
  • 三、系统界面展示
  • 四、代码参考
  • 五、论文参考
  • 六、系统视频
  • 结语

一、前言

随着国民经济的持续增长和居民可支配收入的提高,旅游已成为大众消费的重要组成部分。2015年,我国居民可支配收入达到21966元,增速达8.9%,这直接推动了旅游业的快速发展 。互联网大数据的普及和应用,为旅游行业提供了精准营销和用户体验提升的可能,智慧旅游的概念应运而生。

尽管旅游业发展迅速,但现有的旅游服务平台仍存在一些不足。例如,服务功能单一、用户体验不佳、信息更新不及时、缺乏个性化推荐等问题。这些问题限制了旅游服务平台在提升旅游体验和服务质量方面的潜力。

本课题旨在设计并实现一个功能全面、用户友好的旅游攻略平台。该平台将提供个性化旅游攻略等功能,以满足不同用户的需求。通过该系统,用户可以方便地获取旅游资讯。

旅游攻略平台中,管理员负责用户账户的创建与维护、新闻资讯的发布、旅游攻略内容的监管;游客用户可以登录平台、阅读旅游攻略、发表旅游评论、修改个人信息。系统通过这些功能模块的整合,旨在为用户提供一个全面、互动的旅游信息获取和预订平台。

本课题的研究具有重要的理论意义和实际意义。从理论角度来看,它为旅游信息服务领域提供了新的研究思路,即如何利用信息技术提升旅游服务的质量和效率。从实际角度来看,旅游攻略平台的应用将有助于提高旅游信息的获取效率,增强旅游体验,推动旅游业的创新发展 。同时,系统的推广应用也将为旅游行业的信息化和智能化发展提供支持,促进旅游经济的增长。

二、开发环境

  • 开发语言:Java/Python
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot/SSM/Django/Flask
  • 前端:Vue

三、系统界面展示

  • 旅游攻略平台界面展示:
    管理员-旅游攻略管理:
    管理员-<a class=旅游攻略管理" />
    管理员-旅游资讯管理:
    管理员-<a class=旅游资讯管理" />
    用户-查看旅游攻略:
    用户-查看<a class=旅游攻略" />
    用户-查看旅游资讯:
    用户-查看<a class=旅游资讯" />

四、代码参考

  • 项目实战代码参考:
java(贴上部分代码)">@RestController
@Controller
@RequestMapping("/gonglue")
public class GonglueController {private static final Logger logger = LoggerFactory.getLogger(GonglueController.class);private static final String TABLE_NAME = "gonglue";@Autowiredprivate GonglueService gonglueService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate GonggaoService gonggaoService;//公告@Autowiredprivate GonglueCollectionService gonglueCollectionService;//旅游攻略收藏@Autowiredprivate JingdianService jingdianService;//景点@Autowiredprivate JingdianCollectionService jingdianCollectionService;//景点收藏@Autowiredprivate JingdianCommentbackService jingdianCommentbackService;//景点评价@Autowiredprivate JingdianOrderService jingdianOrderService;//景点订单@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));params.put("gonglueDeleteStart",1);params.put("gonglueDeleteEnd",1);CommonUtil.checkMap(params);PageUtils page = gonglueService.queryPage(params);//字典表数据转换List<GonglueView> list =(List<GonglueView>)page.getList();for(GonglueView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);GonglueEntity gonglue = gonglueService.selectById(id);if(gonglue !=null){//entity转viewGonglueView view = new GonglueView();BeanUtils.copyProperties( gonglue , view );//把实体数据重构到view中//级联表 景点//级联表JingdianEntity jingdian = jingdianService.selectById(gonglue.getJingdianId());if(jingdian != null){BeanUtils.copyProperties( jingdian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setJingdianId(jingdian.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody GonglueEntity gonglue, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,gonglue:{}",this.getClass().getName(),gonglue.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");Wrapper<GonglueEntity> queryWrapper = new EntityWrapper<GonglueEntity>().eq("jingdian_id", gonglue.getJingdianId()).eq("gonglue_name", gonglue.getGonglueName()).eq("gonglue_chu_address", gonglue.getGonglueChuAddress()).eq("gonglue_tujing_address", gonglue.getGonglueTujingAddress()).eq("gonglue_mu_address", gonglue.getGonglueMuAddress()).eq("zan_number", gonglue.getZanNumber()).eq("cai_number", gonglue.getCaiNumber()).eq("gonglue_delete", 1);logger.info("sql语句:"+queryWrapper.getSqlSegment());GonglueEntity gonglueEntity = gonglueService.selectOne(queryWrapper);if(gonglueEntity==null){gonglue.setZanNumber(1);gonglue.setCaiNumber(1);gonglue.setGonglueDelete(1);gonglue.setInsertTime(new Date());gonglue.setCreateTime(new Date());gonglueService.insert(gonglue);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody GonglueEntity gonglue, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,gonglue:{}",this.getClass().getName(),gonglue.toString());GonglueEntity oldGonglueEntity = gonglueService.selectById(gonglue.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");if("".equals(gonglue.getGongluePhoto()) || "null".equals(gonglue.getGongluePhoto())){gonglue.setGongluePhoto(null);}if("".equals(gonglue.getGonglueContent()) || "null".equals(gonglue.getGonglueContent())){gonglue.setGonglueContent(null);}if("".equals(gonglue.getGonglueXiandaiContent()) || "null".equals(gonglue.getGonglueXiandaiContent())){gonglue.setGonglueXiandaiContent(null);}gonglueService.updateById(gonglue);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());List<GonglueEntity> oldGonglueList =gonglueService.selectBatchIds(Arrays.asList(ids));//要删除的数据ArrayList<GonglueEntity> list = new ArrayList<>();for(Integer id:ids){GonglueEntity gonglueEntity = new GonglueEntity();gonglueEntity.setId(id);gonglueEntity.setGonglueDelete(2);list.add(gonglueEntity);}if(list != null && list.size() >0){gonglueService.updateBatchById(list);}return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<GonglueEntity> gonglueList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环GonglueEntity gonglueEntity = new GonglueEntity();
//                            gonglueEntity.setJingdianId(Integer.valueOf(data.get(0)));   //景点 要改的
//                            gonglueEntity.setGonglueName(data.get(0));                    //攻略名称 要改的
//                            gonglueEntity.setGonglueUuidNumber(data.get(0));                    //攻略编号 要改的
//                            gonglueEntity.setGongluePhoto("");//详情和图片
//                            gonglueEntity.setGonglueChuAddress(data.get(0));                    //出发地点 要改的
//                            gonglueEntity.setGonglueTujingAddress(data.get(0));                    //途径地 要改的
//                            gonglueEntity.setGonglueMuAddress(data.get(0));                    //目的地点 要改的
//                            gonglueEntity.setZanNumber(Integer.valueOf(data.get(0)));   //赞 要改的
//                            gonglueEntity.setCaiNumber(Integer.valueOf(data.get(0)));   //踩 要改的
//                            gonglueEntity.setGonglueContent("");//详情和图片
//                            gonglueEntity.setGonglueXiandaiContent("");//详情和图片
//                            gonglueEntity.setGonglueDelete(1);//逻辑删除字段
//                            gonglueEntity.setInsertTime(date);//时间
//                            gonglueEntity.setCreateTime(date);//时间gonglueList.add(gonglueEntity);//把要查询是否重复的字段放入map中//攻略编号if(seachFields.containsKey("gonglueUuidNumber")){List<String> gonglueUuidNumber = seachFields.get("gonglueUuidNumber");gonglueUuidNumber.add(data.get(0));//要改的}else{List<String> gonglueUuidNumber = new ArrayList<>();gonglueUuidNumber.add(data.get(0));//要改的seachFields.put("gonglueUuidNumber",gonglueUuidNumber);}}//查询是否重复//攻略编号List<GonglueEntity> gonglueEntities_gonglueUuidNumber = gonglueService.selectList(new EntityWrapper<GonglueEntity>().in("gonglue_uuid_number", seachFields.get("gonglueUuidNumber")).eq("gonglue_delete", 1));if(gonglueEntities_gonglueUuidNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(GonglueEntity s:gonglueEntities_gonglueUuidNumber){repeatFields.add(s.getGonglueUuidNumber());}return R.error(511,"数据库的该表中的 [攻略编号] 字段已经存在 存在数据为:"+repeatFields.toString());}gonglueService.insertBatch(gonglueList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 个性推荐*/@IgnoreAuth@RequestMapping("/gexingtuijian")public R gexingtuijian(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("gexingtuijian方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);List<GonglueView> returnGonglueViewList = new ArrayList<>();//查看收藏Map<String, Object> params1 = new HashMap<>(params);params1.put("sort","id");params1.put("yonghuId",request.getSession().getAttribute("userId"));params1.put("shangxiaTypes",1);params1.put("gonglueYesnoTypes",2);PageUtils pageUtils = gonglueCollectionService.queryPage(params1);List<GonglueCollectionView> collectionViewsList =(List<GonglueCollectionView>)pageUtils.getList();Map<Integer,Integer> typeMap=new HashMap<>();//购买的类型list
//        for(GonglueCollectionView collectionView:collectionViewsList){
//            Integer gonglueTypes = collectionView.getGonglueTypes();
//            if(typeMap.containsKey(gonglueTypes)){
//                typeMap.put(gonglueTypes,typeMap.get(gonglueTypes)+1);
//            }else{
//                typeMap.put(gonglueTypes,1);
//            }
//        }List<Integer> typeList = new ArrayList<>();//排序后的有序的类型 按最多到最少typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey()));//排序Integer limit = Integer.valueOf(String.valueOf(params.get("limit")));for(Integer type:typeList){Map<String, Object> params2 = new HashMap<>(params);params2.put("gonglueTypes",type);params2.put("shangxiaTypes",1);params2.put("gonglueYesnoTypes",2);PageUtils pageUtils1 = gonglueService.queryPage(params2);List<GonglueView> gonglueViewList =(List<GonglueView>)pageUtils1.getList();returnGonglueViewList.addAll(gonglueViewList);if(returnGonglueViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环}params.put("shangxiaTypes",1);params.put("gonglueYesnoTypes",2);//正常查询出来商品,用于补全推荐缺少的数据PageUtils page = gonglueService.queryPage(params);if(returnGonglueViewList.size()<limit){//返回数量还是小于要求数量int toAddNum = limit - returnGonglueViewList.size();//要添加的数量List<GonglueView> gonglueViewList =(List<GonglueView>)page.getList();for(GonglueView gonglueView:gonglueViewList){Boolean addFlag = true;for(GonglueView returnGonglueView:returnGonglueViewList){if(returnGonglueView.getId().intValue() ==gonglueView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品}if(addFlag){toAddNum=toAddNum-1;returnGonglueViewList.add(gonglueView);if(toAddNum==0) break;//够数量了}}}else {returnGonglueViewList = returnGonglueViewList.subList(0, limit);}for(GonglueView c:returnGonglueViewList)dictionaryService.dictionaryConvert(c, request);page.setList(returnGonglueViewList);return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = gonglueService.queryPage(params);//字典表数据转换List<GonglueView> list =(List<GonglueView>)page.getList();for(GonglueView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Integer id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);GonglueEntity gonglue = gonglueService.selectById(id);if(gonglue !=null){//entity转viewGonglueView view = new GonglueView();BeanUtils.copyProperties( gonglue , view );//把实体数据重构到view中//级联表JingdianEntity jingdian = jingdianService.selectById(gonglue.getJingdianId());if(jingdian != null){BeanUtils.copyProperties( jingdian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney"});//把级联的数据添加到view中,并排除id和创建时间字段view.setJingdianId(jingdian.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody GonglueEntity gonglue, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,gonglue:{}",this.getClass().getName(),gonglue.toString());Wrapper<GonglueEntity> queryWrapper = new EntityWrapper<GonglueEntity>().eq("jingdian_id", gonglue.getJingdianId()).eq("gonglue_name", gonglue.getGonglueName()).eq("gonglue_uuid_number", gonglue.getGonglueUuidNumber()).eq("gonglue_chu_address", gonglue.getGonglueChuAddress()).eq("gonglue_tujing_address", gonglue.getGonglueTujingAddress()).eq("gonglue_mu_address", gonglue.getGonglueMuAddress()).eq("zan_number", gonglue.getZanNumber()).eq("cai_number", gonglue.getCaiNumber()).eq("gonglue_delete", gonglue.getGonglueDelete())
//            .notIn("gonglue_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());GonglueEntity gonglueEntity = gonglueService.selectOne(queryWrapper);if(gonglueEntity==null){gonglue.setZanNumber(1);gonglue.setCaiNumber(1);gonglue.setGonglueDelete(1);gonglue.setInsertTime(new Date());gonglue.setCreateTime(new Date());gonglueService.insert(gonglue);return R.ok();}else {return R.error(511,"表中有相同数据");}}}
java(贴上部分代码)">@RestController
@Controller
@RequestMapping("/gonglueCollection")
public class GonglueCollectionController {private static final Logger logger = LoggerFactory.getLogger(GonglueCollectionController.class);private static final String TABLE_NAME = "gonglueCollection";@Autowiredprivate GonglueCollectionService gonglueCollectionService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate GonggaoService gonggaoService;//公告@Autowiredprivate GonglueService gonglueService;//旅游攻略@Autowiredprivate JingdianService jingdianService;//景点@Autowiredprivate JingdianCollectionService jingdianCollectionService;//景点收藏@Autowiredprivate JingdianCommentbackService jingdianCommentbackService;//景点评价@Autowiredprivate JingdianOrderService jingdianOrderService;//景点订单@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = gonglueCollectionService.queryPage(params);//字典表数据转换List<GonglueCollectionView> list =(List<GonglueCollectionView>)page.getList();for(GonglueCollectionView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);GonglueCollectionEntity gonglueCollection = gonglueCollectionService.selectById(id);if(gonglueCollection !=null){//entity转viewGonglueCollectionView view = new GonglueCollectionView();BeanUtils.copyProperties( gonglueCollection , view );//把实体数据重构到view中//级联表 旅游攻略//级联表GonglueEntity gonglue = gonglueService.selectById(gonglueCollection.getGonglueId());if(gonglue != null){BeanUtils.copyProperties( gonglue , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setGonglueId(gonglue.getId());}//级联表 用户//级联表YonghuEntity yonghu = yonghuService.selectById(gonglueCollection.getYonghuId());if(yonghu != null){BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody GonglueCollectionEntity gonglueCollection, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,gonglueCollection:{}",this.getClass().getName(),gonglueCollection.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("用户".equals(role))gonglueCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<GonglueCollectionEntity> queryWrapper = new EntityWrapper<GonglueCollectionEntity>().eq("gonglue_id", gonglueCollection.getGonglueId()).eq("yonghu_id", gonglueCollection.getYonghuId()).eq("gonglue_collection_types", gonglueCollection.getGonglueCollectionTypes());logger.info("sql语句:"+queryWrapper.getSqlSegment());GonglueCollectionEntity gonglueCollectionEntity = gonglueCollectionService.selectOne(queryWrapper);if(gonglueCollectionEntity==null){gonglueCollection.setInsertTime(new Date());gonglueCollection.setCreateTime(new Date());gonglueCollectionService.insert(gonglueCollection);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody GonglueCollectionEntity gonglueCollection, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,gonglueCollection:{}",this.getClass().getName(),gonglueCollection.toString());GonglueCollectionEntity oldGonglueCollectionEntity = gonglueCollectionService.selectById(gonglueCollection.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            gonglueCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));gonglueCollectionService.updateById(gonglueCollection);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());List<GonglueCollectionEntity> oldGonglueCollectionList =gonglueCollectionService.selectBatchIds(Arrays.asList(ids));//要删除的数据gonglueCollectionService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<GonglueCollectionEntity> gonglueCollectionList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环GonglueCollectionEntity gonglueCollectionEntity = new GonglueCollectionEntity();
//                            gonglueCollectionEntity.setGonglueId(Integer.valueOf(data.get(0)));   //旅游攻略 要改的
//                            gonglueCollectionEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            gonglueCollectionEntity.setGonglueCollectionTypes(Integer.valueOf(data.get(0)));   //类型 要改的
//                            gonglueCollectionEntity.setInsertTime(date);//时间
//                            gonglueCollectionEntity.setCreateTime(date);//时间gonglueCollectionList.add(gonglueCollectionEntity);//把要查询是否重复的字段放入map中}//查询是否重复gonglueCollectionService.insertBatch(gonglueCollectionList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = gonglueCollectionService.queryPage(params);//字典表数据转换List<GonglueCollectionView> list =(List<GonglueCollectionView>)page.getList();for(GonglueCollectionView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Integer id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);GonglueCollectionEntity gonglueCollection = gonglueCollectionService.selectById(id);if(gonglueCollection !=null){//entity转viewGonglueCollectionView view = new GonglueCollectionView();BeanUtils.copyProperties( gonglueCollection , view );//把实体数据重构到view中//级联表GonglueEntity gonglue = gonglueService.selectById(gonglueCollection.getGonglueId());if(gonglue != null){BeanUtils.copyProperties( gonglue , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段view.setGonglueId(gonglue.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(gonglueCollection.getYonghuId());if(yonghu != null){BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody GonglueCollectionEntity gonglueCollection, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,gonglueCollection:{}",this.getClass().getName(),gonglueCollection.toString());Wrapper<GonglueCollectionEntity> queryWrapper = new EntityWrapper<GonglueCollectionEntity>().eq("gonglue_id", gonglueCollection.getGonglueId()).eq("yonghu_id", gonglueCollection.getYonghuId()).eq("gonglue_collection_types", gonglueCollection.getGonglueCollectionTypes())
//            .notIn("gonglue_collection_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());GonglueCollectionEntity gonglueCollectionEntity = gonglueCollectionService.selectOne(queryWrapper);if(gonglueCollectionEntity==null){gonglueCollection.setInsertTime(new Date());gonglueCollection.setCreateTime(new Date());gonglueCollectionService.insert(gonglueCollection);return R.ok();}else {return R.error(511,"您已经收藏过了");}}}

五、论文参考

  • 计算机毕业设计选题推荐-旅游攻略平台论文参考:
    计算机<a class=毕业设计选题推荐-旅游攻略平台论文参考" />

六、系统视频

旅游攻略平台项目视频:

计算机毕业设计选题推荐-旅游攻略平台-Java/Python

结语

计算机毕业设计选题推荐-旅游攻略平台-Java/Python项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目


http://www.ppmy.cn/devtools/94500.html

相关文章

理解与实践Eureka原理:微服务架构的注册与发现

目录 1. Eureka的基本原理 1.1 服务注册与发现的概念 1.2 Eureka的工作流程 2. Eureka服务器的搭建与配置 2.1 搭建Eureka服务器 2.2 Eureka服务器的配置 3. Eureka客户端的实践 3.1 服务实例注册到Eureka 3.2 服务发现与调用 4. Eureka高可用与集群配置 4.1 Eureka…

基于BiGRU的预测模型及其Python和MATLAB实现

## 一、背景 在当今快速发展的数据驱动的时代&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;、时间序列预测、语音识别等任务中&#xff0c;深度学习技术的应用已经变得越来越普遍。传统的机器学习算法往往无法很好地捕捉数据中的时序信息和上下文关系&#xf…

Localization Translate API 的对接和使用

Localization Translate API 的对接和使用 Localization Translate API 的主要功能是通过输入需要翻译的文本来获取翻译后的文本&#xff0c;同时翻译后的语言可以自定义&#xff0c;并且翻译结果可以采用 json &#xff0c; markdown 俩种主流的方法来输出。 本文档将详细介…

JAVA中的Iterator与ListIterator

Java中的Iterator类是Java集合框架中的一个重要接口&#xff0c;它用于遍历集合中的元素。Iterator提供了三个基本操作&#xff1a;检查是否有下一个元素、获取下一个元素以及移除元素。下面将详细介绍Iterator类及其使用方法&#xff0c;并提供相应的代码例子和中文注释。 一、…

基于DPU云盘挂载的Spark优化解决方案

1. 方案背景和挑战 Apache Spark&#xff0c;作为当今大数据处理领域的佼佼者&#xff0c;凭借其高效的分布式计算能力、内存计算优化以及强大的生态系统支持&#xff0c;已牢固确立其在业界的标杆地位。Spark on Kubernetes&#xff08;简称K8s&#xff09;作为Spark与Kuber…

ubuntu 24.04执行apt-get update报错处理

文章目录 一、apt-get update报错内容二、解决启动失败的服务推荐阅读 今天在做Ubuntu 24.04更新时&#xff0c;突然跳出两个报错&#xff0c;这在之前还从未遇到过&#xff0c;处理过程记录和分享一下&#xff1a; 一、apt-get update报错内容 报错截图参考如下&#xff1a; …

Ubuntu20.10更换阿里云源

文章目录 # cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE20.10 DISTRIB_CODENAMEgroovy DISTRIB_DESCRIPTION"Ubuntu 20.10"目前网上关于一些Ubuntu20.10更换阿里云源的方案都不可以&#xff0c;网上的方案都是使用该网址&#xff1a;http://mirrors.aliy…

文件上传-.user.ini利用

php.ini是php的全局配置文件&#xff0c;对整个web服务起作用 .user.ini和.htaccess都是目录的配置文件 .user.ini是用户自定义的php.in 官方解释&#xff1a; 自 PHP 5.3.0 起&#xff0c;PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI&#xff0f…