基于微信小程序的上门按摩服务系统设计与实现

💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发、文档编写、答疑辅导等。
👇🏻 精彩专栏 推荐订阅👇🏻
计算机毕业设计精品项目案例(持续更新)
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人

一.前言

在这里插入图片描述
随着移动互联网技术的迅猛发展,微信小程序作为一种轻量级应用,以其无需安装、即用即走的特点,迅速成为用户获取服务的新途径。在此背景下,上门按摩服务系统结合微信小程序平台,实现了线上预约、线下服务的无缝对接,用户可以随时随地预约按摩服务,无需繁琐的线下操作,为用户提供了更加便捷、高效、舒适的按摩体验。其次,该系统为按摩服务行业带来了新的发展机遇,通过线上平台可以拓展更广泛的客户群体,提高服务效率,降低成本,增强市场竞争力。

课题主要采用springboot架构技术,前端以微信小程序用户端页面呈现给用户,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。


二.技术环境

jdk版本:1.8 及以上
ide工具:Eclipse或者 IDEA,微信小程序开发工具
数据库: mysql5.7 (必须5.7)
编程语言: Java
java框架:SpringBoot
maven: 3.6.1
详细技术:HTML+CSS+JAVA+SpringBoot+MYSQL+VUE+MAVEN+微信开发工具


三.功能设计

系统分为用户、技师、政府监管人员以及管理员三种角色,具体功能需求如下所示:
1、用户模块功能
(1)个人信息管理
普通用户可以在信息管理中查看、修改自己的信息,还可以定位自己的位置信息(获取地址即可)的操作。
(2)活动管理
普通用户点击进入活动管理中可以查看有关服务的套餐活动。
普通用户可以进入活动管理去领取优惠券。
(3)社区留言管理
普通用户点击进入社区留言管理,该管理包括了发布图文信息和点赞评论留言。用户可以查看留言,也可以进行留言反馈修改建议等。
(4)公告管理
普通用户可以通过公告管理查看公告。
(5)预约订单管理
普通用户点击进入预约订单管理可以查看自己想要的时间段去选择距离最近且心仪的技师。普通用户进行预约订单或技师进行接单形成“已支付订单”。
(6)订单管理
普通用户预约订单后形成“已支付订单”,普通用户点击取消/退款生成“已取消/退款订单”,完成即生成“已完成订单”。普通用户和技师都可以查看所有订单信息。普通用户可以在订单完成后进行评价以及售后服务。(订单信息里需要包括费用、服务时长、服务地点、服务)
(7)技师管理
技师通过技师管理申请入师,成功后可以查看、修改信息。
2、技师功能模块:
(1)技师可以在社区进行发布图文信息
(2)用户预约订单技师收到订单信息
(3)技师可以查看订单信息并进行服务

3、政府监管人员功能模块:
(1)政府监管人员可以对订单进行查看与监管

4、管理员功能模块:
(1)政府监管人员管理
管理员对政府监管人员进行管理。
(2)信息管理
管理员可以添加用户的基本信息,并对不同用户赋予不同的权限。这里的基本信息包括:账号(用户用的是手机号码,技师用的是专用工号)和密码,用户获得权限后即可登陆小程序界面,进行后续相关操作。
(2)活动管理
管理员可以在活动管理中对于套餐活动管理和优惠券发放管理进行添加、删除、修改与查询操作。
(3)社区留言管理
用户可以针对此系统发表意见和建议,在小程序端以留言形式发送给管理员,管理员会针对性地做出留言回复。管理员还可以对所有留言信息进行删除、查询操作,删除时可以批量删除所有不恰当的言论、图片,维护系统良好的运作环境;也可以基于用户账号进行查询操作,查询到该用户的留言次数。
(4)公告管理
公告管理是管理员用于发布公约的,也可以在关键时刻发布重要信息供用户查看,使得用户可以掌握及时、准确的信息。
(5)预约订单管理
管理者可以对时间信息,预约订单信息以及接单信息进行增删修改。
(6)订单管理
管理员可以增删修改所有订单信息,也可以根据订单编号查看所有的订单信息
管理员可以在个人中心模块进行管理员信息管理与用户技师权限管理。
管理员可以在管理员信息管理界面查看所有管理员信息并进行添加、删除、修改与查询操作。
(7)技师管理
管理员可以在技师管理中审核技师申请。
管理员可以查看所有技师信息并进行添加、删除、修改与查询操作。

程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。
在这里插入图片描述

四.部分效果展示

4.1用户微信端功能实现效果

当用户进入微信小程序后,首先看到的就是首页界面。在这里,游客能够看到上门按摩服务小程序的低部导航条显示首页、按摩服务、活动信息、公告资讯、我的等,微信小程序界面如图所示:
在这里插入图片描述
用户进入按摩服务详情页面,能够查看服务基本信息、联系电话、技师姓名、评论数、收藏数、地址、服务详情等信息,并可进行收藏、评论和下单预约操作,如图所示:
在这里插入图片描述
当用户下单预约后,用户可以支付对应费用,还可进行退订服务和服务登记等操作,如图所示:
在这里插入图片描述

当技师完成服务后,用户可以对服务进行评价,需要填写服务评价、服务打分、评语等信息,如图所示:
在这里插入图片描述

用户点击我的页面,在我的页面可以对服务订单、退订服务、完成服务、用户评价、我的收藏、社区留言、修改密码进行详细操作,如图所示:
在这里插入图片描述

4.2管理员服务端功能实现效果

管理员登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后选择角色,点击登录操作;如图所示。

在这里插入图片描述

管理员进入主页面,主要功能包括对首页、个人中心、用户管理、技师管理、监管人员管理、服务类型管理、按摩服务管理、服务订单管理、退订服务管理、完成服务管理、用户评价管理、活动信息管理、社区留言管理、系统管理等进行操作。

在用户信息页面的输入栏中输入账号、性别进行查询,可以查看到用户信息详细信息,并根据需要进行修改或者删除等操作;如图所示:
在这里插入图片描述

在技师信息页面的输入栏中输入技师账号、技师姓名进行查询,可以查看到技师详细信息,并根据需要进行修改或者删除等操作;如图所示:
在这里插入图片描述

管理员点击按摩服务管理:在按摩服务页面,可以对服务名称、服务分类、图片、封面、服务价格、联系电话、技师账号、评论数、收藏数、地址等信息,进行查询、添加或者删除按摩服务等操作,如图所示:
在这里插入图片描述

管理员点击服务订单管理:在服务订单信息页面,可以根据服务名称、是否支付等进行查询,进行查询或者删除订单信息等操作,如图所示:

在这里插入图片描述

管理员点击退订服务管理:在退订服务信息页面,可以根据服务名称、是否通过等进行查询,同时可以审核退订服务信息等操作,如图所示:
在这里插入图片描述
管理员点击用户评价管理:在用户评价信息页面,可以根据姓名等进行查询,同时对服务进行评价、修改和删除信息等操作,如图所示:
在这里插入图片描述

部分功能代码

	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		JishiEntity u = jishiService.selectOne(new EntityWrapper<JishiEntity>().eq("jishizhanghao", username));
		if(u==null || !u.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		
		String token = tokenService.generateToken(u.getId(), username,"jishi",  "技师" );
		return R.ok().put("token", token);
	}


	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody JishiEntity jishi){
    	//ValidatorUtils.validateEntity(jishi);
    	JishiEntity u = jishiService.selectOne(new EntityWrapper<JishiEntity>().eq("jishizhanghao", jishi.getJishizhanghao()));
		if(u!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		jishi.setId(uId);
        jishiService.insert(jishi);
        return R.ok();
    }

	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        JishiEntity u = jishiService.selectById(id);
        return R.ok().put("data", u);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	JishiEntity u = jishiService.selectOne(new EntityWrapper<JishiEntity>().eq("jishizhanghao", username));
    	if(u==null) {
    		return R.error("账号不存在");
    	}
        u.setMima("123456");
        jishiService.updateById(u);
        return R.ok("密码已重置为:123456");
    }
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
    @IgnoreAuth
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
        if(StringUtils.isNotBlank(type) && type.contains("_template")) {
            fileName = type + "."+fileExt;
            new File(upload.getAbsolutePath()+"/"+fileName).deleteOnExit();
        }
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	

数据库参考

--
-- Table structure for table `anmofuwu`
--

DROP TABLE IF EXISTS `anmofuwu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `anmofuwu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `fuwumingcheng` varchar(200) NOT NULL COMMENT '服务名称',
  `fuwuleixing` varchar(200) NOT NULL COMMENT '服务类型',
  `tupian` longtext COMMENT '图片',
  `fuwujiage` int(11) NOT NULL COMMENT '服务价格',
  `lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',
  `fuwuxiangqing` longtext COMMENT '服务详情',
  `jishizhanghao` varchar(200) DEFAULT NULL COMMENT '技师账号',
  `jishixingming` varchar(200) DEFAULT NULL COMMENT '技师姓名',
  `discussnum` int(11) DEFAULT '0' COMMENT '评论数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  `longitude` double DEFAULT NULL COMMENT '经度',
  `latitude` double DEFAULT NULL COMMENT '纬度',
  `fulladdress` varchar(200) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COMMENT='按摩服务';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `fuwudingdan`
--

DROP TABLE IF EXISTS `fuwudingdan`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fuwudingdan` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `dingdanbianhao` varchar(200) DEFAULT NULL COMMENT '订单编号',
  `fuwumingcheng` varchar(200) NOT NULL COMMENT '服务名称',
  `tupian` longtext COMMENT '图片',
  `fuwuleixing` varchar(200) NOT NULL COMMENT '服务类型',
  `jishixingming` varchar(200) DEFAULT NULL COMMENT '技师姓名',
  `jishizhanghao` varchar(200) DEFAULT NULL COMMENT '技师账号',
  `yuyueshijian` datetime NOT NULL COMMENT '预约时间',
  `fuwujiage` int(11) NOT NULL COMMENT '服务价格',
  `fuwushizhang` int(11) NOT NULL COMMENT '服务时长',
  `jine` int(11) DEFAULT NULL COMMENT '金额',
  `lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',
  `zhanghao` varchar(200) DEFAULT NULL COMMENT '账号',
  `xingming` varchar(200) DEFAULT NULL COMMENT '姓名',
  `shouji` varchar(200) DEFAULT NULL COMMENT '手机',
  `dizhi` varchar(200) NOT NULL COMMENT '地址',
  `dengjishijian` datetime DEFAULT NULL COMMENT '登记时间',
  `zhuangtai` varchar(200) NOT NULL COMMENT '状态',
  `ispay` varchar(200) DEFAULT '未支付' COMMENT '是否支付',
  PRIMARY KEY (`id`),
  UNIQUE KEY `dingdanbianhao` (`dingdanbianhao`)
) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8 COMMENT='服务订单';
/*!40101 SET character_set_client = @saved_cs_client */;

源码及文档获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻

最新计算机毕业设计选题篇-选题推荐
小程序毕业设计精品项目案例-200套
Java毕业设计精品项目案例-200套
Python毕业设计精品项目案例-200套
大数据毕业设计精品项目案例-200套
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一点毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值