前言
✨博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
👇精彩专栏 推荐订阅👇
Java精品项目案例【3000套】
Python精品项目案例【500套】
uniapp/微信小程序/安卓app【800套】
2026-2027届Java毕业设计优质选题汇总:百个热门方向完整推荐✅
2026-2027届Python毕业设计优质选题汇总:百个热门方向完整推荐✅
2026-2027届小程序/APP毕业设计优质选题汇总:百个热门方向完整推荐✅
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️
系统实现
用户功能实现
本模块实现了用户浏览、阅读系统内发布的所有的图文资讯。该模块在系统中起信息发布、传递的作用,是用户获取平台动态、行业信息的官方渠道。
民宿资讯界面
本模块实现了用户浏览系统推荐的特色民宿信息的功能。本模块在系统里为用户推送优质的住房信息,可以使得用户找到满意的住宿场所,使平台更加吸引人,用户的使用频率也会提高。
民宿信息推荐界面
该模块实现了用户浏览系统推荐的可以预订的客房详细信息。本模块是系统中预订流程的前置环节,给用户提供具体的客房信息展示,也是用户做出预订决策的直接依据。
客房信息推荐界面
本模块完成用户查询以及管理自己所有的已提交的预订订单的功能。本模块在系统中给用户提供了一个统一的订单视图,使用户可以跟踪预订的状态,也为之后入住流程提供入口。
预定登记界面
该模块实现用户查询个人已经完成入住登记的信息。本模块用来保存用户以前的入住信息,是完成服务确认整个周期中的重要凭证。
入住登记界面
本模块主要实现用户在完成住宿服务之后,对所住的房间进行评价的功能。该模块在系统中对用户的体验反馈进行收集,为其他的用户起到借鉴的作用,并且对房源质量的持续改善起到作用。
退房评价界面
房东功能实现
本模块主要实现房东用户对其名下所有的民宿房源信息的管理。该模块是系统中房东发布房源、吸引客源的重要手段,也是房东开展经营活动的基础。
民宿信息管理界面
本模块实现了房东用户对于名下民宿中各个客房资源的管理维护功能。该模块在系统中定义了可以供销售的产品库存及属性,是连接房东房源和用户预订的桥梁。
客房信息管理界面
本模块实现房东用户查询、管理自己名下客房的预订订单。该模块为系统的营运管理和服务提供未来房源预订的统计数据,给接待工作准备以及收益管理带去帮助。
客房预订管理界面
该模块是房东用户查看其房源实际入住登记记录的查询。此模块将系统里所有的真实入住信息保存,供房东对服务执行情况进行核对以及管理房间的状态。
入住登记管理界面
该模块实现了房东用户查看用户在退房后对房源所提交的评价内容。该模块为房东提供直接的用户体验反馈,也是房东改进服务质量的依据来源。
退房评价管理界面
管理员功能实现
本模块实现系统管理员以图表方式查看整个平台客房预订的数据统计。本模块给管理者提供系统的整体业务运行情况,可以辅助平台的决策。
客房预订统计界面
该模块可以实现系统管理员对平台上所有的房东用户账户、资质信息的全面管理。本模块保证系统中服务提供方群体的合规性、质量,保证平台基本生态秩序。
房东管理界面
本模块完成对系统管理员平台上所有的普通用户账户及信息的管理。本模块主要对消费用户的群体进行有效的监督,保证用户的用户数据规范以及平台安全。
普通用户管理界面
本模块完成系统管理员对平台所定义的民宿分类体系的查询和管理。该模块在系统中维持着房源信息的基础分类标准,保证信息组织的结构化以及检索的便利性。
民宿类型管理界面
本模块实现系统管理员对平台中定义的客房类型标准进行查询和管理。该模块为系统中房源产品的基础属性类型做了定义,是客房信息结构化存储与展示的前提。
客房类型管理界面
数据库参考
CREATE TABLE `upload` ( `upload_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '上传ID', `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件名', `path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '访问路径', `file` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件路径', `display` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '显示顺序', `father_id` int(11) DEFAULT '0' COMMENT '父级ID', `dir` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件夹', `type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件类型', PRIMARY KEY (`upload_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传'; insert into `upload` values ('1','movie.mp4','/upload/movie.mp4','',null,'0',null,'video'); DROP TABLE IF EXISTS `message_inform`; CREATE TABLE `message_inform` ( `inform_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '通知ID', `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '通知人ID', `title` varchar(255) DEFAULT NULL COMMENT '标题', `state` varchar(255) DEFAULT NULL COMMENT '状态', `type` varchar(64) DEFAULT NULL COMMENT '分类', `content` varchar(255) DEFAULT NULL COMMENT '内容', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`inform_id`) USING BTREE, KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='通知记录'; DROP TABLE IF EXISTS `user_group`; CREATE TABLE `user_group` ( `group_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户组ID', `display` smallint(4) unsigned NOT NULL DEFAULT '100' COMMENT '显示顺序', `name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称', `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述', `source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表', `source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段', `source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID', `register` smallint(1) unsigned DEFAULT '0' COMMENT '注册位置', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`group_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户组'; DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `article_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id', `title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题', `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '文章分类', `hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击数', `praise_len` int(11) NOT NULL DEFAULT '0' COMMENT '点赞数', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源', `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源地址', `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签', `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文', `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '文章描述', PRIMARY KEY (`article_id`,`title`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章';代码参考
package com.project.demo.controller; import com.project.demo.entity.CheckOutInformation; import com.project.demo.service.CheckOutInformationService; import com.alibaba.fastjson.JSON; import com.project.demo.controller.base.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.util.StringUtils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 退房信息:(CheckOutInformation)表控制层 * */ @RestController @RequestMapping("/check_out_information") public class CheckOutInformationController extends BaseController<CheckOutInformation, CheckOutInformationService> { /** * 退房信息对象 */ @Autowired public CheckOutInformationController(CheckOutInformationService service) { setService(service); } @PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); CheckOutInformation check_out_information = new CheckOutInformation(); check_out_information.setLandlord_user(paramMap.get("landlord_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("landlord_user")))); check_out_information.setName_of_landlord(paramMap.get("name_of_landlord")==null?null:String.valueOf(paramMap.get("name_of_landlord"))); check_out_information.setOrdinary_user(paramMap.get("ordinary_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("ordinary_user")))); check_out_information.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); check_out_information.setGuest_room_name(paramMap.get("guest_room_name")==null?null:String.valueOf(paramMap.get("guest_room_name"))); check_out_information.setRoom_type(paramMap.get("room_type")==null?null:String.valueOf(paramMap.get("room_type"))); check_out_information.setOrder_number(paramMap.get("order_number")==null?null:String.valueOf(paramMap.get("order_number"))); check_out_information.setCheck_out_time(paramMap.get("check_out_time")==null?null:String.valueOf(paramMap.get("check_out_time"))); check_out_information.setCheck_out_remarks(paramMap.get("check_out_remarks")==null?null:String.valueOf(paramMap.get("check_out_remarks"))); check_out_information.setRoom_evaluation_limit_times(paramMap.get("room_evaluation_limit_times")==null?null:String.valueOf(paramMap.get("room_evaluation_limit_times"))); check_out_information.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); check_out_information.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); check_out_information.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); check_out_information.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by")))); this.addEntity(check_out_information); System.out.println("退房信息新增成功"); return success(1); } @PostMapping("/set") @Transactional public Map<String, Object> set(HttpServletRequest request) throws IOException { Map<String,String> queryMap = service.readQuery(request); Map<String,String> configMap = service.readConfig(request); Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); CheckOutInformation check_out_information = new CheckOutInformation(); check_out_information.setLandlord_user(paramMap.get("landlord_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("landlord_user")))); check_out_information.setName_of_landlord(paramMap.get("name_of_landlord")==null?null:String.valueOf(paramMap.get("name_of_landlord"))); check_out_information.setOrdinary_user(paramMap.get("ordinary_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("ordinary_user")))); check_out_information.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); check_out_information.setGuest_room_name(paramMap.get("guest_room_name")==null?null:String.valueOf(paramMap.get("guest_room_name"))); check_out_information.setRoom_type(paramMap.get("room_type")==null?null:String.valueOf(paramMap.get("room_type"))); check_out_information.setOrder_number(paramMap.get("order_number")==null?null:String.valueOf(paramMap.get("order_number"))); check_out_information.setCheck_out_time(paramMap.get("check_out_time")==null?null:String.valueOf(paramMap.get("check_out_time"))); check_out_information.setCheck_out_remarks(paramMap.get("check_out_remarks")==null?null:String.valueOf(paramMap.get("check_out_remarks"))); check_out_information.setRoom_evaluation_limit_times(paramMap.get("room_evaluation_limit_times")==null?null:String.valueOf(paramMap.get("room_evaluation_limit_times"))); check_out_information.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); check_out_information.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); check_out_information.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); this.setEntity(queryMap,configMap,check_out_information); System.out.println("退房信息修改成功"); return success(1); package com.project.demo.controller; import com.project.demo.entity.HomestayInformation; import com.project.demo.service.HomestayInformationService; import com.alibaba.fastjson.JSON; import com.project.demo.controller.base.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.util.StringUtils; import com.project.demo.constant.FindConfig; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 民宿信息:(HomestayInformation)表控制层 * */ @RestController @RequestMapping("/homestay_information") public class HomestayInformationController extends BaseController<HomestayInformation, HomestayInformationService> { /** * 民宿信息对象 */ @Autowired public HomestayInformationController(HomestayInformationService service) { setService(service); } @PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); HomestayInformation homestay_information = new HomestayInformation(); homestay_information.setHomestay_name(paramMap.get("homestay_name")==null?null:String.valueOf(paramMap.get("homestay_name"))); homestay_information.setHomestay_pictures(paramMap.get("homestay_pictures")==null?null:String.valueOf(paramMap.get("homestay_pictures"))); homestay_information.setType_of_homestay(paramMap.get("type_of_homestay")==null?null:String.valueOf(paramMap.get("type_of_homestay"))); homestay_information.setLandlord_user(paramMap.get("landlord_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("landlord_user")))); homestay_information.setName_of_landlord(paramMap.get("name_of_landlord")==null?null:String.valueOf(paramMap.get("name_of_landlord"))); homestay_information.setHomestay_location(paramMap.get("homestay_location")==null?null:String.valueOf(paramMap.get("homestay_location"))); homestay_information.setHomestay_facilities(paramMap.get("homestay_facilities")==null?null:String.valueOf(paramMap.get("homestay_facilities"))); homestay_information.setHome_stay_specificss(paramMap.get("home_stay_specificss")==null?null:String.valueOf(paramMap.get("home_stay_specificss"))); homestay_information.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits")))); homestay_information.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len")))); homestay_information.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len")))); homestay_information.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len")))); homestay_information.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by")))); this.addEntity(homestay_information); System.out.println("民宿信息新增成功"); return success(1); } @PostMapping("/set") @Transactional public Map<String, Object> set(HttpServletRequest request) throws IOException { Map<String,String> queryMap = service.readQuery(request); Map<String,String> configMap = service.readConfig(request); Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); HomestayInformation homestay_information = new HomestayInformation(); homestay_information.setHomestay_name(paramMap.get("homestay_name")==null?null:String.valueOf(paramMap.get("homestay_name"))); homestay_information.setHomestay_pictures(paramMap.get("homestay_pictures")==null?null:String.valueOf(paramMap.get("homestay_pictures"))); homestay_information.setType_of_homestay(paramMap.get("type_of_homestay")==null?null:String.valueOf(paramMap.get("type_of_homestay"))); homestay_information.setLandlord_user(paramMap.get("landlord_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("landlord_user")))); homestay_information.setName_of_landlord(paramMap.get("name_of_landlord")==null?null:String.valueOf(paramMap.get("name_of_landlord"))); homestay_information.setHomestay_location(paramMap.get("homestay_location")==null?null:String.valueOf(paramMap.get("homestay_location"))); homestay_information.setHomestay_facilities(paramMap.get("homestay_facilities")==null?null:String.valueOf(paramMap.get("homestay_facilities"))); homestay_information.setHome_stay_specificss(paramMap.get("home_stay_specificss")==null?null:String.valueOf(paramMap.get("home_stay_specificss"))); homestay_information.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits")))); homestay_information.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len")))); homestay_information.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len")))); homestay_information.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len")))); this.setEntity(queryMap,configMap,homestay_information); System.out.println("民宿信息修改成功"); return success(1); } /** * 协同过滤算法 */ @RequestMapping("/get_hits_list") public Map<String, Object> getHits(HttpServletRequest request) { Map<String,String> paramMap = service.readQuery(request); if (paramMap.get("user_id")==null||paramMap.get("user_id").equals("")){ return this.getList(request); }else{ try { if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ paramMap.put("examine_state", URLDecoder.decode(paramMap.get("examine_state"), "UTF-8")); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //查询该用户常点击 String hitsSource = "SELECT COUNT( hits_id ) AS hits_count, source_id FROM hits WHERE source_table = 'homestay_information' AND user_id = "+paramMap.get("user_id")+" GROUP BY source_id"; List<Map<String,Object>> hitsSourceList = service.selectMapBaseList(hitsSource); //判断是否为空,代表当前用户暂无点击数据,那么取其他用户的最常点击 if (hitsSourceList==null || hitsSourceList.size()<=0){ hitsSource = "SELECT COUNT( hits_id ) AS hits_count, source_id FROM hits WHERE source_table = 'homestay_information' GROUP BY source_id"; hitsSourceList = service.selectMapBaseList(hitsSource); } String table_name = "homestay_information"; String table_id = "homestay_information_id"; String type_name = "type_of_homestay"; //二次处理-如果依旧为空则取添加时间前12条数据 if (hitsSourceList==null || hitsSourceList.size()<=0){ String sql = "SELECT * FROM " + table_name; if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'"; } sql = sql + " ORDER BY create_time DESC LIMIT 0,12"; List list = service.selectBaseList(sql); Map<String, Object> map=new HashMap<>(); map.put("list",list); map.put("count",list.size()); return success(map); }else { //对用户点击量进行排序取得最大值 int max = 0; int maxSourceId = 0; for (Map<String,Object> map:hitsSourceList) { int hitsCount = Integer.parseInt(String.valueOf(map.get("hits_count"))); if (hitsCount > max){ max = hitsCount; maxSourceId = Integer.parseInt(String.valueOf(map.get("source_id"))); } } //查询该用户点击最大值的种类 String typeSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + table_id + " = " + maxSourceId; List<Map<String,Object>> typeList = service.selectMapBaseList(typeSql); //如果为空则取添加时间前12条数据 if (typeList==null || typeList.size()<=0){ String sql = "SELECT * FROM " + table_name; if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'"; } sql = sql + " ORDER BY create_time DESC LIMIT 0,12"; List list = service.selectBaseList(sql); Map<String, Object> map=new HashMap<>(); map.put("list",list); map.put("count",list.size()); return success(map); }else { String typeName = String.valueOf(typeList.get(0).get(type_name)); //查询该种类的数据 String sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '"+typeName+"'" ; if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ sql = sql + " and examine_state = '"+paramMap.get("examine_state")+"' ORDER BY create_time DESC limit 0,12"; }else { sql = sql + " ORDER BY create_time DESC limit 0,12"; } List resultList = service.selectBaseList(sql); //如果为空则取添加时间前12条数据 if (resultList==null || resultList.size()<=0){ sql = "SELECT * FROM " + table_name; if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'"; } sql = sql + " ORDER BY create_time DESC LIMIT 0,12"; List list = service.selectBaseList(sql); Map<String, Object> map=new HashMap<>(); map.put("list",list); map.put("count",list.size()); return success(map); }else { //对结果排序-冒泡排序 for (int i = resultList.size() - 1; i > 0; i--) { // 是否发生交换 boolean swapped = false; for (int j = 0; j < i; j++) { HomestayInformation leftMap = (HomestayInformation) resultList.get(j); HomestayInformation rightMap = (HomestayInformation) resultList.get(j + 1); if (leftMap.getHits()<rightMap.getHits()){ HomestayInformation temp = rightMap; rightMap = leftMap; leftMap = temp; swapped = true; } } if (!swapped) { // 没有发生交换,则说明数组已有序,停止冒泡 break; } } //判断是否有12条-如果不足则计算其他类型和用户当前点击最多的余弦相似度,依次往下取得数据 if (resultList.size()<12) { String typeCosSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + type_name + " <> '" + typeName + "' GROUP BY " + type_name; List<Map<String, Object>> typeCosList = service.selectMapBaseList(typeCosSql); if (typeCosList != null && typeCosList.size() > 0) { for (Map<String, Object> typeCos : typeCosList) { typeCos.put("cosSim", calculateCosineSimilarity(typeName, String.valueOf(typeCos.get(type_name)))); } //冒泡根据相似度排序 for (int i = typeCosList.size() - 1; i > 0; i--) { // 是否发生交换 boolean swapped = false; for (int j = 0; j < i; j++) { Map<String, Object> leftMap = typeCosList.get(j); Map<String, Object> rightMap = typeCosList.get(j + 1); if (Double.parseDouble(String.valueOf(leftMap.get("cosSim" ))) < Double.parseDouble(String.valueOf(rightMap.get("cosSim" )))) { Map<String, Object> temp = rightMap; rightMap = leftMap; leftMap = temp; swapped = true; } } if (!swapped) { // 没有发生交换,则说明数组已有序,停止冒泡 break; } } //逐条加入数据 for (Map<String, Object> typeCos : typeCosList) { sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '" + String.valueOf(typeCos.get(type_name)) + "'"; if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){ sql = sql + " and examine_state = '"+paramMap.get("examine_state")+"'"; } sql = sql + " ORDER BY create_time DESC LIMIT 0," + (12 - resultList.size()); List list = service.selectBaseList(sql); if (list != null && list.size() > 0) { resultList.addAll(list); } if (resultList.size() >= 12) { break; } } } } Map<String, Object> map=new HashMap<>(); map.put("list",resultList); map.put("count",resultList.size()); return success(map); } } } } } /** * 计算余弦相似度 */ private double calculateCosineSimilarity(String text1, String text2) { // 将文本分词并转换为向量表示 Map<Character, Integer> wordCount1 = getWordCount(text1); Map<Character, Integer> wordCount2 = getWordCount(text2); double dotProduct = 0.0; double magnitude1 = 0.0; double magnitude2 = 0.0; for (Character word : wordCount1.keySet()) { int count1 = wordCount1.get(word); int count2 = wordCount2.getOrDefault(word, 0); dotProduct += count1 * count2; magnitude1 += Math.pow(count1, 2); } for (Integer count : wordCount2.values()) { magnitude2 += Math.pow(count, 2); } magnitude1 = Math.sqrt(magnitude1); magnitude2 = Math.sqrt(magnitude2); if (magnitude1 == 0.0 || magnitude2 == 0.0) { return 0.0; } return dotProduct / (magnitude1 * magnitude2); } private static Map<Character, Integer> getWordCount(String text) { Map<Character, Integer> wordCount = new HashMap<>(); for (char c : text.toCharArray()) { wordCount.put(c, wordCount.getOrDefault(c, 0) + 1); } return wordCount;前端:基于Vue.js框架构建用户界面,使用HTML5、CSS3和JavaScript实现页面结构与交互逻辑,通过Vue Router管理路由,Vuex或Pinia维护全局状态。采用Element UI或Vant组件库快速搭建界面,Axios封装HTTP请求实现与后端的数据通信。
后端:基于springboot框架搭建,遵循Controller-Service-Mapper三层架构。Controller层接收前端请求并校验参数,Service层处理核心业务逻辑,Mapper层通过MyBatis或MyBatis-Plus完成数据库操作。使用Spring Security或Shiro结合JWT实现用户认证与权限控制。
数据库:采用MySQL存储持久化数据,Redis缓存热点信息以提升系统性能。
开发工具:使用IDEA开发后端,VSCode或HBuilderX开发前端,Git进行版本管理,Maven和npm分别管理前后端依赖。
👇精彩专栏 推荐订阅👇
Java精品项目案例【3000套】
Python精品项目案例【500套】
uniapp/微信小程序/安卓app【800套】
2026-2027届Java毕业设计优质选题汇总:百个热门方向完整推荐✅
2026-2027届Python毕业设计优质选题汇总:百个热门方向完整推荐✅
2026-2027届小程序/APP毕业设计优质选题汇总:百个热门方向完整推荐✅
✅获取源码请私信✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️