计算机毕业设计 美发管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
————————————————
计算机毕业设计《1000套》✌

目录

1、项目介绍及开发技术

1.1 项目介绍

1.2 开发技术

2、系统功能设计结构图

3、功能截图

3.1 前台功能

3.2 后台功能

4、数据库表结构设计

5、关键代码

5.1 美容项目Controller模块 

5.2 美容项目Service模块 

5.3 美容项目ServiceImpl模块

5.4  美容项目Dao模块

6、论文目录结构

7、源码获取


1、项目介绍及开发技术

1.1 项目介绍

在当代社会,美容服务已成为人们追求健康和美丽的重要方式之一。随着生活水平的提高和美容意识的增强,消费者对美容服务的需求日益增长,对服务质量的要求也越来越高。为了满足市场需求,提升美容服务的专业性和管理效率,我们设计并开发了一个综合性的美容服务管理平台。

背景:
传统的美容服务行业多依赖于线下门店和人工管理,这种方式在预约、服务跟踪和管理效率上存在局限性。随着互联网技术的发展,线上平台已成为连接消费者和美容服务提供者的重要桥梁。消费者期望能够通过在线平台方便地预约服务、查看美容师信息和评价、管理个人美容计划。

目的意义:

  • 1. 提升用户体验:平台通过提供在线预约、美容师和项目信息浏览等功能,使用户能够随时随地获取美容服务,享受便捷的预约体验。
  • 2. 优化美容师管理:美容师可以通过平台展示个人资料和专业技能,接收和管理预约,提升工作效率和服务质量。
  • 3. 增强互动交流:论坛模块为用户提供了一个交流美容经验和心得的平台,同时也为美容师提供了收集客户反馈和建议的渠道。
  • 4. 提高管理效率:后端管理系统为美容中心提供了全面的管理工具,包括用户管理、美容师管理、项目管理等,极大地提高了运营效率和管理水平。
  • 5. 支持决策制定:平台收集的用户数据和反馈信息,为美容中心的决策者提供了宝贵的信息资源,有助于制定更加精准的市场策略和运营计划。

综上所述,美容服务管理平台的设计与实现,不仅能够为消费者提供一个全面、便捷的服务体验,还能够为美容中心提供一个高效、智能的管理工具。通过技术手段优化美容服务流程,该平台有望成为推动美容行业服务升级的重要力量,为消费者和美容服务提供者创造更大的价值。
 

1.2 开发技术

类别技术名称用途/描述
开发语言Java一种广泛使用的面向对象编程语言。
框架Spring Boot简化Spring应用的初始搭建以及开发过程。
ORM工具MyBatis PlusMyBatis的增强工具,简化CRUD操作。
数据库MySQL流行的关系型数据库管理系统。
构建工具Maven项目管理和理解工具。
开发工具IDEA集成开发环境,用于代码编写和调试。
JDK版本JDK 1.8+Java开发工具包,提供运行Java程序所需的环境。
前端框架Vue用于构建用户界面的渐进式JavaScript框架。
UI框架Element UI基于Vue的桌面端组件库。
前端技术HTML网页内容的标准标记语言。
前端技术CSS描述HTML文档的样式。
前端技术JS网页脚本语言,用于实现网页的动态效果。

2、系统功能设计结构图

功能模块结构图

├── 前端
│   ├── 登录
│   ├── 注册
│   ├── 论坛
│   ├── 美容师
│   ├── 美容项目
│   ├── 公告通知
│   └── 个人中心
│       ├── 个人信息
│       ├── 美容师收藏
│       ├── 美容师预约
│       ├── 美容项目收藏
│       └── 美容项目订单

└── 后端
    ├── 登录
    ├── 个人中心
    ├── 管理员管理
    ├── 用户管理
    ├── 美容师管理
    ├── 美容项目管理
    ├── 基础数据管理
    ├── 论坛管理
    ├── 公告通知管理
    └── 轮播图信息管理

系统MVC框架,请求流程展示:

3、功能截图

3.1 前台功能

3.2 后台功能

4、数据库表结构设计


DROP TABLE IF EXISTS `meirongshi`;CREATE TABLE `meirongshi` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',`username` varchar(200) DEFAULT NULL COMMENT '账户 ',`password` varchar(200) DEFAULT NULL COMMENT '密码 ',`meirongshi_name` varchar(200) DEFAULT NULL COMMENT '美容师名称 Search111 ',`meirongshi_phone` varchar(200) DEFAULT NULL COMMENT '联系方式',`meirongshi_email` varchar(200) DEFAULT NULL COMMENT '邮箱',`meirongshi_new_money` decimal(10,2) DEFAULT NULL COMMENT '价格',`meirongshi_photo` varchar(200) DEFAULT NULL COMMENT '美容师照片 ',`meirongshi_price` int(11) DEFAULT NULL COMMENT '购买获得积分 ',`meirongshi_xingji_types` int(11) DEFAULT NULL COMMENT '美容师类型',`meirongshi_content` longtext COMMENT '美容师介绍 ',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow ',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='美容师';DROP TABLE IF EXISTS `meirongshi_collection`;CREATE TABLE `meirongshi_collection` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`meirongshi_id` int(11) DEFAULT NULL COMMENT '美容师',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`meirongshi_collection_types` int(11) DEFAULT NULL COMMENT '类型',`insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='美容师收藏';DROP TABLE IF EXISTS `meirongshi_order`;CREATE TABLE `meirongshi_order` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`meirongshi_order_uuid_number` varchar(200) DEFAULT NULL COMMENT '订单编号 Search111 ',`meirongshi_id` int(11) DEFAULT NULL COMMENT '美容师',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`meirongshi_order_time` timestamp NULL DEFAULT NULL COMMENT '预约时间',`meirongshi_order_true_price` decimal(10,2) DEFAULT NULL COMMENT '实付价格',`meirongshi_order_types` int(11) DEFAULT NULL COMMENT '订单类型 Search111 ',`meirongshi_order_payment_types` int(11) DEFAULT NULL COMMENT '支付类型',`insert_time` timestamp NULL DEFAULT NULL COMMENT '订单创建时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 listShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='美容师预约';DROP TABLE IF EXISTS `meirongxiangm_collection`;CREATE TABLE `meirongxiangm_collection` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`meirongxiangm_id` int(11) DEFAULT NULL COMMENT '美容项目',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`meirongxiangm_collection_types` int(11) DEFAULT NULL COMMENT '类型',`insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='美容项目收藏';DROP TABLE IF EXISTS `meirongxiangm_order`;CREATE TABLE `meirongxiangm_order` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`meirongxiangm_order_uuid_number` varchar(200) DEFAULT NULL COMMENT '订单编号 Search111 ',`meirongxiangm_id` int(11) DEFAULT NULL COMMENT '美容项目',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`meirongxiangm_order_time` timestamp NULL DEFAULT NULL COMMENT '预约时间',`meirongxiangm_order_true_price` decimal(10,2) DEFAULT NULL COMMENT '实付价格',`meirongxiangm_order_types` int(11) DEFAULT NULL COMMENT '订单类型 Search111 ',`meirongxiangm_order_payment_types` int(11) DEFAULT NULL COMMENT '支付类型',`insert_time` timestamp NULL DEFAULT NULL COMMENT '订单创建时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 listShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='美容项目订单';DROP TABLE IF EXISTS `news`;CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`news_name` varchar(200) DEFAULT NULL COMMENT '公告标题  Search111 ',`news_types` int(11) DEFAULT NULL COMMENT '公告类型  Search111 ',`news_photo` varchar(200) DEFAULT NULL COMMENT '公告图片',`insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',`news_content` longtext COMMENT '公告详情',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='公告通知';/*Data for the table `news` */
DROP TABLE IF EXISTS `token`;CREATE TABLE `token` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`userid` bigint(20) NOT NULL COMMENT '管理id',`username` varchar(100) NOT NULL COMMENT '管理名',`tablename` varchar(100) DEFAULT NULL COMMENT '表名',`role` varchar(100) DEFAULT NULL COMMENT '角色',`token` varchar(200) NOT NULL COMMENT '密码',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',`expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='token表';

5、关键代码

5.1 美容项目Controller模块 

package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 美容项目* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/meirongxiangm")
public class MeirongxiangmController {private static final Logger logger = LoggerFactory.getLogger(MeirongxiangmController.class);private static final String TABLE_NAME = "meirongxiangm";@Autowiredprivate MeirongxiangmService meirongxiangmService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate ForumService forumService;//论坛@Autowiredprivate MeirongshiService meirongshiService;//美容师@Autowiredprivate MeirongshiCollectionService meirongshiCollectionService;//美容师收藏@Autowiredprivate MeirongshiLiuyanService meirongshiLiuyanService;//美容师留言@Autowiredprivate MeirongshiOrderService meirongshiOrderService;//美容师预约@Autowiredprivate MeirongxiangmCollectionService meirongxiangmCollectionService;//美容项目收藏@Autowiredprivate MeirongxiangmLiuyanService meirongxiangmLiuyanService;//美容项目留言@Autowiredprivate MeirongxiangmOrderService meirongxiangmOrderService;//美容项目订单@Autowiredprivate NewsService newsService;//公告通知@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"));else if("美容师".equals(role))params.put("meirongshiId",request.getSession().getAttribute("userId"));params.put("meirongxiangmDeleteStart",1);params.put("meirongxiangmDeleteEnd",1);CommonUtil.checkMap(params);PageUtils page = meirongxiangmService.queryPage(params);//字典表数据转换List<MeirongxiangmView> list =(List<MeirongxiangmView>)page.getList();for(MeirongxiangmView 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);MeirongxiangmEntity meirongxiangm = meirongxiangmService.selectById(id);if(meirongxiangm !=null){//entity转viewMeirongxiangmView view = new MeirongxiangmView();BeanUtils.copyProperties( meirongxiangm , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody MeirongxiangmEntity meirongxiangm, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,meirongxiangm:{}",this.getClass().getName(),meirongxiangm.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");Wrapper<MeirongxiangmEntity> queryWrapper = new EntityWrapper<MeirongxiangmEntity>().eq("meirongxiangm_name", meirongxiangm.getMeirongxiangmName()).eq("zan_number", meirongxiangm.getZanNumber()).eq("cai_number", meirongxiangm.getCaiNumber()).eq("meirongxiangm_types", meirongxiangm.getMeirongxiangmTypes()).eq("meirongxiangm_price", meirongxiangm.getMeirongxiangmPrice()).eq("meirongxiangm_delete", 1);logger.info("sql语句:"+queryWrapper.getSqlSegment());MeirongxiangmEntity meirongxiangmEntity = meirongxiangmService.selectOne(queryWrapper);if(meirongxiangmEntity==null){meirongxiangm.setZanNumber(1);meirongxiangm.setCaiNumber(1);meirongxiangm.setMeirongxiangmClicknum(1);meirongxiangm.setMeirongxiangmDelete(1);meirongxiangm.setInsertTime(new Date());meirongxiangm.setCreateTime(new Date());meirongxiangmService.insert(meirongxiangm);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody MeirongxiangmEntity meirongxiangm, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,meirongxiangm:{}",this.getClass().getName(),meirongxiangm.toString());MeirongxiangmEntity oldMeirongxiangmEntity = meirongxiangmService.selectById(meirongxiangm.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");if("".equals(meirongxiangm.getMeirongxiangmPhoto()) || "null".equals(meirongxiangm.getMeirongxiangmPhoto())){meirongxiangm.setMeirongxiangmPhoto(null);}if("".equals(meirongxiangm.getMeirongxiangmContent()) || "null".equals(meirongxiangm.getMeirongxiangmContent())){meirongxiangm.setMeirongxiangmContent(null);}meirongxiangmService.updateById(meirongxiangm);//根据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<MeirongxiangmEntity> oldMeirongxiangmList =meirongxiangmService.selectBatchIds(Arrays.asList(ids));//要删除的数据ArrayList<MeirongxiangmEntity> list = new ArrayList<>();for(Integer id:ids){MeirongxiangmEntity meirongxiangmEntity = new MeirongxiangmEntity();meirongxiangmEntity.setId(id);meirongxiangmEntity.setMeirongxiangmDelete(2);list.add(meirongxiangmEntity);}if(list != null && list.size() >0){meirongxiangmService.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<MeirongxiangmEntity> meirongxiangmList = 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("static/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){//循环MeirongxiangmEntity meirongxiangmEntity = new MeirongxiangmEntity();
//                            meirongxiangmEntity.setMeirongxiangmName(data.get(0));                    //美容项目名称 要改的
//                            meirongxiangmEntity.setMeirongxiangmPhoto("");//详情和图片
//                            meirongxiangmEntity.setZanNumber(Integer.valueOf(data.get(0)));   //赞 要改的
//                            meirongxiangmEntity.setCaiNumber(Integer.valueOf(data.get(0)));   //踩 要改的
//                            meirongxiangmEntity.setMeirongxiangmNewMoney(data.get(0));                    //价格 要改的
//                            meirongxiangmEntity.setMeirongxiangmTypes(Integer.valueOf(data.get(0)));   //美容项目类型 要改的
//                            meirongxiangmEntity.setMeirongxiangmPrice(Integer.valueOf(data.get(0)));   //购买获得积分 要改的
//                            meirongxiangmEntity.setMeirongxiangmClicknum(Integer.valueOf(data.get(0)));   //美容项目热度 要改的
//                            meirongxiangmEntity.setMeirongxiangmContent("");//详情和图片
//                            meirongxiangmEntity.setMeirongxiangmDelete(1);//逻辑删除字段
//                            meirongxiangmEntity.setInsertTime(date);//时间
//                            meirongxiangmEntity.setCreateTime(date);//时间meirongxiangmList.add(meirongxiangmEntity);//把要查询是否重复的字段放入map中}//查询是否重复meirongxiangmService.insertBatch(meirongxiangmList);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<MeirongxiangmView> returnMeirongxiangmViewList = 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("meirongxiangmYesnoTypes",2);PageUtils pageUtils = meirongxiangmOrderService.queryPage(params1);List<MeirongxiangmOrderView> orderViewsList =(List<MeirongxiangmOrderView>)pageUtils.getList();Map<Integer,Integer> typeMap=new HashMap<>();//购买的类型listfor(MeirongxiangmOrderView orderView:orderViewsList){Integer meirongxiangmTypes = orderView.getMeirongxiangmTypes();if(typeMap.containsKey(meirongxiangmTypes)){typeMap.put(meirongxiangmTypes,typeMap.get(meirongxiangmTypes)+1);}else{typeMap.put(meirongxiangmTypes,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("meirongxiangmTypes",type);params2.put("shangxiaTypes",1);params2.put("meirongxiangmYesnoTypes",2);PageUtils pageUtils1 = meirongxiangmService.queryPage(params2);List<MeirongxiangmView> meirongxiangmViewList =(List<MeirongxiangmView>)pageUtils1.getList();returnMeirongxiangmViewList.addAll(meirongxiangmViewList);if(returnMeirongxiangmViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环}params.put("shangxiaTypes",1);params.put("meirongxiangmYesnoTypes",2);//正常查询出来商品,用于补全推荐缺少的数据PageUtils page = meirongxiangmService.queryPage(params);if(returnMeirongxiangmViewList.size()<limit){//返回数量还是小于要求数量int toAddNum = limit - returnMeirongxiangmViewList.size();//要添加的数量List<MeirongxiangmView> meirongxiangmViewList =(List<MeirongxiangmView>)page.getList();for(MeirongxiangmView meirongxiangmView:meirongxiangmViewList){Boolean addFlag = true;for(MeirongxiangmView returnMeirongxiangmView:returnMeirongxiangmViewList){if(returnMeirongxiangmView.getId().intValue() ==meirongxiangmView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品}if(addFlag){toAddNum=toAddNum-1;returnMeirongxiangmViewList.add(meirongxiangmView);if(toAddNum==0) break;//够数量了}}}else {returnMeirongxiangmViewList = returnMeirongxiangmViewList.subList(0, limit);}for(MeirongxiangmView c:returnMeirongxiangmViewList)dictionaryService.dictionaryConvert(c, request);page.setList(returnMeirongxiangmViewList);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 = meirongxiangmService.queryPage(params);//字典表数据转换List<MeirongxiangmView> list =(List<MeirongxiangmView>)page.getList();for(MeirongxiangmView 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);MeirongxiangmEntity meirongxiangm = meirongxiangmService.selectById(id);if(meirongxiangm !=null){//点击数量加1meirongxiangm.setMeirongxiangmClicknum(meirongxiangm.getMeirongxiangmClicknum()+1);meirongxiangmService.updateById(meirongxiangm);//entity转viewMeirongxiangmView view = new MeirongxiangmView();BeanUtils.copyProperties( meirongxiangm , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody MeirongxiangmEntity meirongxiangm, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,meirongxiangm:{}",this.getClass().getName(),meirongxiangm.toString());Wrapper<MeirongxiangmEntity> queryWrapper = new EntityWrapper<MeirongxiangmEntity>().eq("meirongxiangm_name", meirongxiangm.getMeirongxiangmName()).eq("zan_number", meirongxiangm.getZanNumber()).eq("cai_number", meirongxiangm.getCaiNumber()).eq("meirongxiangm_types", meirongxiangm.getMeirongxiangmTypes()).eq("meirongxiangm_price", meirongxiangm.getMeirongxiangmPrice()).eq("meirongxiangm_clicknum", meirongxiangm.getMeirongxiangmClicknum()).eq("meirongxiangm_delete", meirongxiangm.getMeirongxiangmDelete())
//            .notIn("meirongxiangm_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());MeirongxiangmEntity meirongxiangmEntity = meirongxiangmService.selectOne(queryWrapper);if(meirongxiangmEntity==null){meirongxiangm.setZanNumber(1);meirongxiangm.setCaiNumber(1);meirongxiangm.setMeirongxiangmClicknum(1);meirongxiangm.setMeirongxiangmDelete(1);meirongxiangm.setInsertTime(new Date());meirongxiangm.setCreateTime(new Date());meirongxiangmService.insert(meirongxiangm);return R.ok();}else {return R.error(511,"表中有相同数据");}}}

5.2 美容项目Service模块 

 package com.service;import com.baomidou.mybatisplus.service.IService;
import com.utils.PageUtils;
import com.entity.MeirongxiangmEntity;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import java.util.List;/*** 美容项目 服务类*/
public interface MeirongxiangmService extends IService<MeirongxiangmEntity> {/*** @param params 查询参数* @return 带分页的查询出来的数据*/PageUtils queryPage(Map<String, Object> params);}

5.3 美容项目ServiceImpl模块


package com.service.impl;import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.MeirongxiangmDao;
import com.entity.MeirongxiangmEntity;
import com.service.MeirongxiangmService;
import com.entity.view.MeirongxiangmView;/*** 美容项目 服务实现类*/
@Service("meirongxiangmService")
@Transactional
public class MeirongxiangmServiceImpl extends ServiceImpl<MeirongxiangmDao, MeirongxiangmEntity> implements MeirongxiangmService {@Overridepublic PageUtils queryPage(Map<String,Object> params) {Page<MeirongxiangmView> page =new Query<MeirongxiangmView>(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}

5.4  美容项目Dao模块


package com.dao;import com.entity.MeirongxiangmEntity;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;import org.apache.ibatis.annotations.Param;
import com.entity.view.MeirongxiangmView;/*** 美容项目 Dao 接口** @author */
public interface MeirongxiangmDao extends BaseMapper<MeirongxiangmEntity> {List<MeirongxiangmView> selectListView(Pagination page,@Param("params")Map<String,Object> params);}

6、论文目录结构

摘要... I

Abstract... II

1 绪论... 1
   1.1 项目简介... 1
   1.2 调查研究... 1
       1.2.1 研究背景及意义... 1
       1.2.2 国内外研究现状... 2
       1.2.3 研究主要内容... 2
   1.3 论文的章节安排... 3

2 系统相关技术介绍... 4
   2.1 Java语言... 4
   2.2 SpringBoot框架... 4
   2.3 Vue框架... 4
   2.4 MySQL数据库... 4

3 系统需求分析... 6
   3.1 可行性分析... 6
       3.1.1 技术可行性... 6
       3.1.2 经济可行性... 6
       3.1.3 操作可行性... 6
   3.2 系统功能需求... 6
       3.2.1 用户端功能需求... 6
       3.2.2 XX端功能需求... 6
       3.2.3 管理员端功能需求... 6
   3.3 系统性能需求... 6

4 系统总体设计... 7
   4.1 系统总体架构设计... 7
   4.2 系统的功能设计... 7
   4.3 数据库设计... 7
       4.3.1 概念设计E-R图... 7
       4.3.2 逻辑设计关系模式... 7
       4.3.3 数据库物理设计... 7

5 系统详细实现... 14
   5.1 系统实现环境... 14
   5.2 用户端... 14
       5.2.1 登录页面... 14
       5.2.2 注册页面... 14
       5.2.3 XXXX页面... 14
       5.2.4 XXXX页面... 14
       5.2.5 XXXX页面... 14
   5.3 XXXX端... 15
       5.3.1 XXXX页面... 15
       5.3.2 XXXX页面... 15
       5.3.3 XXXX页面... 15
       5.3.4 XXXX页面... 15
   5.4 管理端... 15
       5.4.1 用户管理页面... 15
       5.4.2 XXXX页面... 15
       5.4.3 XXXX页面... 16
       5.4.4 XXXX页面... 16

6 系统测试... 16
   6.1 测试目的... 16
   6.2 测试方法... 16
   6.3 测试用例... 16
       6.3.1 XXXX测试... 16
       6.3.2 XXXX测试... 16
   6.4 测试结果... 16

结论... 17

参考文献... 18

致谢... 19

更多源码:

计算机毕业设计选题1000套等你来!!!

7、源码获取

感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!

喜欢文章可以点赞、收藏、关注、评论

下方联系方式获取源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430899.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI converting API code from GPT-3 to chatGPT-3.5

题意&#xff1a;将OpenAI API代码从GPT-3转换为ChatGPT-3.5 问题背景&#xff1a; Below is my working code for the GPT-3 API. I am having trouble converting it to work with chatGPT-3.5. 以下是我用于GPT-3 API的工作代码。我在将其转换为适用于ChatGPT-3.5时遇到了…

前端开发之装饰器模式

介绍 装饰器模式 是在不修改对象内部结构的情况下&#xff0c;动态地给对象添加功能的一种设计模式。在软件开发中&#xff0c;有时候我们需要为已有对象添加一些额外的行为&#xff0c;但不希望修改该对象的代码&#xff0c;装饰器模式可以很好的满足这一需求。 在TypeScrip…

echarts map地图动态下钻,自定义标注,自定义tooltip弹窗【完整demo版本】

在数据可视化中&#xff0c;地图是很重要的一个环节&#xff0c;很多时候需要展现的不仅是国家地图&#xff0c;还需要能从国家进入到省市。这个逐级进入的过程就是我们今天说的地图下钻。 地图下钻看起来很屌、很高大上&#xff0c;但是仔细琢磨一下&#xff0c;技术实现上真的…

Cpp类和对象(下)(6)

文章目录 前言一、初始化列表概念使用注意实际运用explicit关键字初始化列表的总结 二、static成员static成员的概念static成员的特性static的一个实用场景 三、友元友元函数友元类 四、内部类概念特性 五、匿名对象六、再次理解封装和面向对象总结 前言 Hello&#xff0c;本篇…

『玉竹』基于Laravel 开发的博客、微博客系统和Android App

基于 Laravel 和 Filament 开发, 使用 Filament 开发管理后台&#xff0c;前端比较简洁。 博客大家都清楚是什么东西&#xff0c;微博客类似于微博之类的吧&#xff0c;有时候想要写的东西可能只有几句话&#xff0c;想要起个标题都不好起。 为了是微博客功能更好用&#xff0c…

【小程序】微信小程序课程 -3 快速上手之常用方法

目录 1、 对话框 1.1 模态对话框 1.2 消息对话框 2、 存储 2.1 同步 2.1.1 同步保存数据 2.1.2 同步获取数据 2.1.3 同步删除数据 2.1.4 同步清空数据 2.2 异步 2.2.1 异步保存数据 2.2.2 异步获取数据 2.2.3 异步删除数据 2.2.4 异步清空数据 3、 上拉加载更多…

Java类加载揭秘:从加载过程到双亲委派机制

类的加载 目标 能够理解字节码加载过程 【了解】 路径 类的加载过程类的加载时机 类的加载 当程序在运行后&#xff0c;第一次使用某个类的时候&#xff0c;会将此类的class文件读取到内存&#xff0c;并将此类的所有信息存储到一个Class对象中 说明&#xff1a;Class对象…

金仓数据库 KingbaseES参考手册 (8. 函数(九))

8.299. SCALE 用法&#xff1a; scale(numeric)功能&#xff1a; SCALE返回参数的精度&#xff08;小数点后的位数&#xff09;。 例子&#xff1a; SELECT scale(8.41);8.300. SCORE 用法&#xff1a; SCORE(lable number)输入参数&#xff1a; lable&#xff1a;表示第几个co…

js发送邮件至指定邮箱功能实现方式和技巧?

js发送邮件至指定邮箱的教程&#xff1f;怎么使用Node.js发信&#xff1f; 无论是用户反馈、订单确认还是密码重置&#xff0c;js发送邮件至指定邮箱的需求无处不在。AokSend将深入探讨js发送邮件至指定邮箱的实现方式和技巧&#xff0c;帮助开发者更好地理解和应用这一功能。…

windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!

windows桌面管理软件推荐来咯&#xff01;在繁忙的工作和生活中&#xff0c;一个整洁、有序的电脑桌面不仅能提升工作效率&#xff0c;还能带来愉悦的视觉体验。然而&#xff0c;随着文件的增多&#xff0c;桌面往往变得杂乱无章。幸运的是&#xff0c;市面上有许多优秀的Windo…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端&#xff0c;能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格&#xff0c;界面既简洁又清晰&#xff0c;操作起来方便又高效。不管是刚开始接触的新手&#xff0c;还是经验丰富的开发者&#xff0c;都…

C++标准库类——string类

引言 在c中&#xff0c;string类的引用极大地简化了字符串的操作和管理&#xff0c;相比 C 风格字符串&#xff08;char*或cahr[]&#xff09;&#xff0c;std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧&#xff01; 1.string 的构造…

Spring Cache的使用

一、简介 1. Spring Cache是Spring提供的一个缓存框架&#xff0c;在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中&#xff0c;在4.1开始&#xff0c;缓存已支持JSR-107注释和更多自定义的选项。 1. Spring Cache利用了**AOP**&#xff0c;实现了基于注解的缓存…

【解密 Kotlin 扩展函数】命名参数和默认值(十三)

导读大纲 1.0.1 命名参数1.0.2 默认参数值 上一节讲述如何自定义 joinToString 函数来代替集合的默认字符串表示 文末遗留下几个待优化问题–传送门 1.0.1 命名参数 我们要解决的第一个问题涉及函数调用的可读性 例如,请看下面的joinToString调用: joinToString(collection,&…

【LLM多模态】Animatediff文生视频大模型

note AnimateDiff框架&#xff1a;核心是一个可插拔的运动模块&#xff0c;它可以从真实世界视频中学习通用的运动先验&#xff0c;并与任何基于相同基础T2I的个性化模型集成&#xff0c;以生成动画。训练策略&#xff1a;AnimateDiff的训练包括三个阶段&#xff1a; 领域适配…

spark之不同序列化对比

一&#xff0c;spark的rdd的序列话不同介绍 下面是使用不同序列化后的占用资源和数据大小 2&#xff0c;sparksql中序列化的区别 sparksql中使用序列化和不使用差别不大&#xff0c;英文sparksql中默认使用了encode自己实现的序列化方法&#xff0c;加上与不加序列化差别不大…

基于真实山地场景下的超多目标优化算法求解无人机三维路径规划,MATLAB代码

超多目标优化算法是一类专门用于解决存在三个以上目标函数的最优化问题的算法。这类问题在现实世界中非常常见&#xff0c;例如在工程设计、资源管理、机器学习等领域。由于目标之间的冲突性&#xff0c;很难找到一个单一的解来同时优化所有目标&#xff0c;因此超多目标优化算…

MQ高级(二):死信交换机--延迟消息及DelayExchange插件--超时订单案例实现

目录 1.延迟消息 1.1.死信交换机和延迟消息 1.1.1.死信交换机 1.1.2.延迟消息 1.2.DelayExchange插件 1.2.1.下载 1.2.2.安装 1.2.3.声明延迟交换机 1.2.4.发送延迟消息 1.3.超时订单问题 1.3.1.定义常量 1.3.2.配置MQ 1.3.3.改造下单业务&#xff0c;发送延迟消息…

【Linux篇】TCP/IP协议(笔记)

目录 一、TCP/IP协议族体系结构 1. 数据链路层 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;常用协议 ① ARP协议&#xff08;Address Resolve Protocol&#xff0c;地址解析协议&#xff09; ② RARP协议&#xff08;Reverse Address Resolve Protocol&…

详解Web测试和APP测试的区别

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近听到有些朋友说&#xff0c;移动端要比web端稍微难一些&#xff0c;涉及到的细节笔记要多&#xff0c;有转去做web测试的想法&#xff0c;看看在具体测试的…