基于Vue+SpringBoot+MySQL的厦门旅游电子商务预订系统包含景点类型模块、景点档案模块、景点评分模块、景点收藏模块、酒店模块、美食模块,拥有用户网页端和管理后台端,包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,厦门旅游电子商务预订系统基于角色的访问控制,给景点管理员、游客使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
景点类型模块是一个用于对旅游景点中不同类型的旅游景点进行分类和管理的模块,旅游景点类型模块允许用户按主题和类型组织和管理旅游景点,以便用户能够快速找到自己感兴趣的旅游景点,景点类型模块为用户提供个性化的推荐服务,并根据用户选择的类型和偏好推荐相应的旅游景点和路线。景点类型模块不同通过分析每种类型的旅游景点统计数据,可以了解每种类型旅游景点的流量和知名度,优化旅游资源的利用效率,旅游景点类型模块有助于旅游目的地更好地表达自身特色和品牌形象,从而提高旅游目的地的知名度和影响力,景点类型模块对于旅游网站和应用程序来说是非常必要的,通过景点类型模块,更容易搜索用户,提供个性化服务,优化旅游资源利用,更好地表达旅游地区的特色,提高用户体验和旅游电子商务预订管理系统的价值。
景点档案模块是旅游电子商务预订管理系统中,用于管理和显示各种旅游目的地信息、历史背景、地理位置、交通路线等详细资料、旅游目的地介绍、书面信息、相关信息,以便您能够更好地了解和选择用户感兴趣的目的地,改善旅行体验,旅游景点档案模块为用户提供交通路线、周边食宿、票价等详细信息,用户可以制定出行计划和预算,旅游景点档案模块包含了大量的旅游信息和相关信息,可以为平台提供更全面、更丰富的内容,提高平台的信息量和可靠性。推介客源和景点,提升旅游知名度和影响力,促进旅游经济发展,了解各类旅游景点的流量和知名度,优化旅游资源利用效率。旅游景点模块有助于旅游目的地更好地表达自身特色和品牌形象,从而提高旅游目的地的知名度和影响力,景点模块对于旅游网站和应用程序来说是非常必要的,通过景点模块,更容易搜索用户,提供个性化服务,优化旅游资源利用,更好地表达旅游地区的特色,提高用户体验和平台价值。
酒店管理模块是用于旅游电子商务预订管理系统钟处理酒店预订和管理系统中的酒店订单、客房、服务等信息的模块,酒店管理模块可以通过向酒店提供订单管理、客户管理、客房管理、设备管理等自动化管理工具,提高酒店的管理效率,可以提供餐饮服务等更先进的服务系统。通过提高酒店的服务质量和用户满意度,酒店管理模块可以实现管理自动化,减少人力资源和物力消耗,更好地控制酒店的运营成本和风险,记录并分析酒店运营数据和运营状态,帮助酒店经理做出决策并优化运营。
美食管理模块是旅游电子商务预订管理系统中用于管理和显示美食信息的模块,美食管理模块让用户更容易了解食物、价格、口味等信息,让用户吃得上。美食管理模块可以提高选择项目的满意度,美食管理模块可以展示餐厅的美食形象和介绍,吸引更多潜在顾客的兴趣和参与,美食管理模块可以对不同的菜肴进行分类和定价,可以执行确定和库存管理等操作,为了给餐饮企业提供更便捷的管理模式,美食管理模块可以通过分析客户偏好和订单记录,为餐饮企业制定科学准确的营销策略,提高市场竞争力和盈利能力。
@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);
}
@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;
}
@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);
}
@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);
}
@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();
}
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!