微信小程序家政预约系统+后台管理系统

 博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计

项目名称

微信小程序家政预约系统+后台管理系统

视频效果

https://www.bilibili.com/video/BV1yU4y1D7uD/

系统说明

家政服务网站系统是面向广大家政求职者和家政需求客户开发的系统,完成用户在前台页面的信息浏览、注册操作以及管理员在后台的信息匹配工作,本系统的主要用户角色分为:后台管理员、普通会员、员工、客户。 具体设计方案为:

前台的页面包括:

首页:主要包括用户登录入口,新闻信息显示入口,生活小知识信息显示入口,公司简单介绍以及相关的友情链接等。

家政求职:这是一个提供给家政求职人员的页面,且只有拥有普通会员身份的用户才拥有访问权限,其主要内容是家政求职人员信息的录入和注册,写入的数据直接与后台数据库连接,方便管理员管理。

服务员展示:展示的是本公司的员工风采。

家政需求:这是一个提供给客户的页面,各种用户都可以直接访问此页面,其主要内容是客户信息的录入和注册,写入的数据直接与后台数据库连接,方便管理员管理。

职员信息修改:这是仅提供给已注册且未被分配工作的员工提供的页面,用于员工求职信息变动以后作修改用,也可以是重新发布求职信息。

分类信息:主要是关于本公司的一些招聘、工作提供、招商合作信息。

服务申请:又包括服务信息修改和服务信息再发布。两者的区别是服务信息修改是用在客户未被分配员工时,服务信息再发布是指客户已安排工作的情况下还需要新的需求信息。这样设计两个页面的目的是保证客户编号与客户实际信息一致但又能实现不同的需求,这里是用客户序列号与客户编号共同标识实现。

网站介绍:主要是关于本公司具体的联系方式及网站地址信息。

访客留言:一个供网站会员发表心情日志,信息交流的平台。

后台的设计主要是管理员的各种管理,将在后面的功能模块管理员功能中详细讲解。

4.2系统功能模块划分

本系统主要涉及如下功能模块:

1.普通用户:浏览页面信息,注册成为会员,留言等。

2.员工:必须是本网站的普通会员,可以浏览页面信息,登录注册发布求职信息,管理员根据其注册信息分配最佳工作。

3.客户:可以浏览页面信息,登录注册发布家政需求信息,管理员根据其发布的需求分配最合适的员工。

4.管理员:

(1) 管理员管理

超级管理员:名称为Tsoft的管理员。主要实现的功能是:实现对普通管理员的增加、删除、修改;拥有普通管理员的所有权限。

普通管理员:主要实现的功能:浏览客户、员工信息,修改自身信息;对企业文化、生活小常识、新闻、分类信息等实现增加、删除、修改功能;实现对客户、员工信息的增加、删除、修改,实现员工与客户之间的匹配管理。

(2) 信息管理

普通会员管理:实现对普通会员信息的浏览、删除等。

客户管理:实现对客户信息的浏览、审核。

员工管理:实现对员工信息的浏览、删除。

(3) 企业文化管理

企业文化管理:企业文化信息的浏览、增加、删除、更新等。

新闻管理:实现对公司新闻、行业新闻的浏览、增加、删除、更新等。

分类信息管理:实现对家政供应、家政需求、家政求职、家政培训、招商合作等信息的浏览、增加、删除、更新等。

生活小常识管理:实现对生活小常识的浏览、增加、删除、更新等

(4) 家政服务管理

信息匹配管理:根据员工条件匹配客户需求。通过员工的求职类型、文化程度、期望工作地、人员的状态、婚姻状况等五个方面来分别输入查询条件来筛选查询结果,选择最佳的客户进行匹配;根据客户需求匹配员工。通过客户需求的服务类型、对员工的性别要求、截止服务日期、服务地点等四个方面来分别输入查询条件来筛选查询结果,选择最佳的员工进行匹配。

(5) 其他管理

留言板管理:留言内容的浏览、回复留言、删除留言。

链接管理:链接公司的添加、删除、更新。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
5.数据库:MySql 5.7版本;
6.是否Maven项目:否;

技术栈

1. 后端:Spring+SpringMVC+Mybatis
2. 前端:JSP+CSS+JavaScript+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8080/ 登录

运行截图

 用户管理控制层:

package com.houserss.controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;

/**
 * Created by admin
 */
@Controller
@RequestMapping("/user/")
public class UserController {
    @Autowired
    private IUserService iUserService;

    /**
     * 用户登录
     * @param username
     * @param password
     * @param session
     * @return
     */
    @RequestMapping(value = "login.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<User> login(User user,String uvcode, HttpSession session){
        String code = (String)session.getAttribute("validationCode");
        if(StringUtils.isNotBlank(code)) {
            if(!code.equalsIgnoreCase(uvcode)) {
                return ServerResponse.createByErrorMessage("验证码不正确");
            }
        }
        ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword());
        if(response.isSuccess()){
            session.setAttribute(Const.CURRENT_USER,response.getData());
        }
        return response;
    }

  
    
    
}

管理员管理控制层:


package com.sxl.controller.admin;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller("adminController")
@RequestMapping(value = "/admin")
public class AdminController extends MyController {
	

	@RequestMapping(value = "/index")
	public String frame(Model model, HttpServletRequest request)throws Exception {
		return "/admin/index";
	}
	
	@RequestMapping(value = "/main")
	public String main(Model model, HttpServletRequest request)throws Exception {
		return "/admin/main";
	}
	
	@RequestMapping(value = "/tj1")
	public String tj1(Model model, HttpServletRequest request)throws Exception {
		String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d')  desc";
		List<Map> list = db.queryForList(sql);
		model.addAttribute("list", list);
		System.out.println(list);
		return "/admin/tj/tj1";
	}
	
	
	@RequestMapping(value = "/password")
	public String password(Model model, HttpServletRequest request)throws Exception {
		return "/admin/password";
	}
	
	
	@RequestMapping(value = "/changePassword")
	public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
		Map admin = getAdmin(request);
		if(oldPassword.equals(admin.get("password").toString())){
			String sql="update t_admin set password=? where id=?";
			db.update(sql, new Object[]{newPassword,admin.get("id")});
			return renderData(true,"1",null);
		}else{
			return renderData(false,"1",null);
		}
	}
}

修改密码业务逻辑:


package com.sxl.controller.admin;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller("userController")
@RequestMapping(value = "/user")
public class UserController extends MyController {
	

	@RequestMapping(value = "/index")
	public String frame(Model model, HttpServletRequest request)throws Exception {
		return "/user/index";
	}
	
	@RequestMapping(value = "/main")
	public String main(Model model, HttpServletRequest request)throws Exception {
		return "/user/main";
	}
	
	
	@RequestMapping(value = "/password")
	public String password(Model model, HttpServletRequest request)throws Exception {
		return "/user/password";
	}
	
	
	@RequestMapping(value = "/changePassword")
	public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
		Map user = getUser(request);
		if(oldPassword.equals(user.get("password").toString())){
			String sql="update t_user set password=? where id=?";
			db.update(sql, new Object[]{newPassword,user.get("id")});
			return renderData(true,"1",null);
		}else{
			return renderData(false,"1",null);
		}
	}
	@RequestMapping(value = "/mine")
	public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap("select * from t_user where id=?",new Object[]{user.get("id")});model.addAttribute("map", map);		return "/user/mine";
	}
	
	

	@RequestMapping(value = "/mineSave")
	public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id
		,String username,String password,String name,String gh,String mobile) throws Exception{
		int result = 0;
			String sql="update t_user set name=?,gh=?,mobile=? where id=?";
			result = db.update(sql, new Object[]{name,gh,mobile,id});
		if(result==1){
			return renderData(true,"操作成功",null);
		}else{
			return renderData(false,"操作失败",null);
		}
	}
	}

通用管理模块:

package com.sxl.controller;


import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;


public class BaseController {
	public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1天

	@Autowired
	private SystemProperties systemProperties;

	/**
	 * 获得配置文件内容
	 */
	public String getConfig(String key) {
		return systemProperties.getProperties(key);
	}

	/**
	 * 返回服务器地址 like http://192.168.1.1:8441/UUBean/
	 */
	public String getHostUrl(HttpServletRequest request) {
		String hostName = request.getServerName();
		Integer hostPort = request.getServerPort();
		String path = request.getContextPath();

		if (hostPort == 80) {
			return "http://" + hostName + path + "/";
		} else {
			return "http://" + hostName + ":" + hostPort + path + "/";
		}
	}

	/***
	 * 获取当前的website路径 String
	 */
	public static String getWebSite(HttpServletRequest request) {
		String returnUrl = request.getScheme() + "://"
				+ request.getServerName();

		if (request.getServerPort() != 80) {
			returnUrl += ":" + request.getServerPort();
		}

		returnUrl += request.getContextPath();

		return returnUrl;
	}



	/**
	 * 初始化HTTP头.
	 * 
	 * @return HttpHeaders
	 */
	public HttpHeaders initHttpHeaders() {
		HttpHeaders headers = new HttpHeaders();
		MediaType mediaType = new MediaType("text", "html",
				Charset.forName("utf-8"));
		headers.setContentType(mediaType);
		return headers;
	}

	/**
	 * 返回 信息数据
	 * 
	 * @param status
	 * @param msg
	 * @return
	 */
	public ResponseEntity<String> renderMsg(Boolean status, String msg) {
		if (StringUtils.isEmpty(msg)) {
			msg = "";
		}
		String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}";
		ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
				initHttpHeaders(), HttpStatus.OK);
		return responseEntity;
	}

	/**
	 * 返回obj数据
	 * 
	 * @param status
	 * @param msg
	 * @param obj
	 * @return
	 */
	public ResponseEntity<String> renderData(Boolean status, String msg,
			Object obj) {
		if (StringUtils.isEmpty(msg)) {
			msg = "";
		}
		StringBuffer sb = new StringBuffer();
		sb.append("{");
		sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\",");
		sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
		sb.append("}");

		ResponseEntity<String> responseEntity = new ResponseEntity<String>(
				sb.toString(), initHttpHeaders(), HttpStatus.OK);
		return responseEntity;
	}


	/***
	 * 获取IP(如果是多级代理,则得到的是一串IP值)
	 */
	public static String getIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}

		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}

		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}

		if (ip != null && ip.length() > 0) {
			String[] ips = ip.split(",");
			for (int i = 0; i < ips.length; i++) {
				if (!"unknown".equalsIgnoreCase(ips[i])) {
					ip = ips[i];
					break;
				}
			}
		}

		return ip;
	}

	/**
	 * 国际化获得语言内容
	 * 
	 * @param key
	 *            语言key
	 * @param args
	 * @param argsSplit
	 * @param defaultMessage
	 * @param locale
	 * @return
	 */
	public static String getLanguage(String key, String args, String argsSplit,
			String defaultMessage, String locale) {
		String language = "zh";
		String contry = "cn";
		String returnValue = defaultMessage;

		if (!StringUtil.isEmpty(locale)) {
			try {
				String[] localeArray = locale.split("_");
				language = localeArray[0];
				contry = localeArray[1];
			} catch (Exception e) {
			}
		}

		try {
			ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
					new Locale(language, contry));
			returnValue = resource.getString(key);
			if (!StringUtil.isEmpty(args)) {
				String[] argsArray = args.split(argsSplit);
				for (int i = 0; i < argsArray.length; i++) {
					returnValue = returnValue.replace("{" + i + "}",
							argsArray[i]);
				}
			}
		} catch (Exception e) {
		}

		return returnValue;
	}
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
基于微信小程序家政服务管理系统(全套)是一套针对家政服务行业的全方位管理系统。该系统包含了客户端小程序、服务人员端小程序后台管理系统以及相关的数据库和接口等组成部分,可以实现家政服务的预约管理、订单管理、人员管理、财务管理等全方面的功能。客户端小程序提供了用户注册登录、查看服务项目、预约下单、支付订单、评价反馈等功能,让客户可以方便快捷地选购家政服务,并与服务人员进行沟通交流,提高了用户的满意度和忠诚度。服务人员端小程序提供了人员注册认证、查看订单、接受订单、完成订单、查看收入等功能,让服务人员可以随时随地了解自己的工作情况和收入情况,方便灵活地安排自己的工作时间。后台管理系统为系统管理员和企业管理人员提供了订单管理、人员管理、财务管理、数据统计等功能,让企业可以全面了解业务运营情况,及时进行决策和调整,提升管理效率和经营效益。此外,该系统还集成了在线支付、位置导航、消息推送等功能,用户体验友好,操作简便,能够满足不同用户群体的需求。同时,系统的安全性和稳定性也得到了充分考虑,保障了用户信息和交易安全。总的来说,基于微信小程序家政服务管理系统(全套)是一套功能齐全、操作简便、安全稳定的家政服务管理解决方案,可以帮助家政服务企业提升管理水平,提高服务质量,促进业务发展。
课程内容主要讲解如下几点:1:如何使用navaicat导入sql2:如何设置网站的的数据库账号等,如何使用iis发布网站3:演示后台管理功能4:如何使用HBuilder X导入app项目,如何设置发布,以及app功能演示 该系统主要分网站管理员、游客、注册用户这几个角色网站管理员系统设置关于我们设置:设置关于我们、联系我们、入我们、法律声明广告和留言       首页轮播图设置:支持上传轮播图;       留言列表:用户的所有留言信息、支持删除资讯中心       添资讯:类型、标题、资讯内容等       管理资讯:查看所有资讯列表;支持修改功能;支持删除功能会员管理查看会员信息列表、支持删除功能    查看会员注册时间、手机用户名、姓名、QQ、邮箱、备注等。教室管理       录入教室:选择是上课教室/自习室,录入教室名称和内容(备注不显示)       管理教室:查看后台管理员开放的教室列表;支持修改功能;支持删除功能 教室预约订单管理       教室预约订单列表:查看所有注册的用户的订单信息,包括下单时间,下单用户,用户的手机、姓名、QQ邮箱联系,预约的日期,预约的教室名称,预约的哪节课,留言备注信息。       教室预约订单管理:可以修改状态。       状态有:等待审核、拒绝、审核通过游客功能查看平台介绍关于我们、联系我们、入我们、法律声明资讯中心查看网站的所有资讯列表和详情:通知公告、帮助中心等查看首页广告  查看首页轮播滚动的广告留言反馈给网站管理员留言:主题、联系人、电话、邮箱、内容等查看教室开放信息可以查看已开放教室的所有相关信息:是否已经预约不能进行预约,需要注册登录的用户才可以。 注册用户注册用户除了享有游客的特别功能外,还有一些功能。注册和登录注册功能:填写用户名和密码注册登录:登录后可以享有会员功能。教室预约步骤如下:第一步:通过点击“预约”栏目或进入教室预约页面第二步:选择教室,然后选择需要预约的日期(只开放4天内),点击预约,跳转到提交页面第三步:在提交页面填写联系信息;确认信息后;提交预约,等待后台管理员审核。 我的教室预约可以查看我所有的教室预约订单信息:预约哪个教室、预约的哪天、预约的哪节课、预约时候填写的信息。默认提交的教室预约订单信息是“待审核”状态,这个状态的时候可以“取消申请”。后台管理员审核后,状态变更为“已审核”,只能查看不能进行其他操作。 用户信息维护自己的会员信息,包括:头像、姓名、QQ、邮箱、备注等;支持修改功能 密码修改和退出登录密码修改:修改自己的密码退出登录:清除登录的cookie、跳转到首页
### 回答1: 微信小程序家政服务预约可以使用Node.js作为后端开发语言。Node.js是一种基于JavaScript运行时的开发工具,适用于构建高效的网络应用程序。通过Node.js,我们可以创建一个服务器,处理家政服务预约的相关请求和数据。 首先,我们需要使用Node.js的框架Express来启动一个服务器。Express是一个简洁、灵活的Node.js Web应用程序开发框架,可以处理HTTP请求和响应。 其次,我们可以使用Node.js的相关模块来处理微信小程序的请求和响应。例如,可以使用request模块来发送HTTP请求,从微信服务器获取用户的预约信息。同时,可以使用response模块来处理并发送响应给用户。 在服务器端,我们可以使用Node.js来处理家政服务预约的功能。例如,可以根据用户的请求参数查询可用的家政服务人员,然后将结果返回给用户。还可以实现用户预约家政服务的功能,并将预约信息存储到数据库中。 此外,Node.js还具有很好的扩展性和灵活性,可以方便地与其他技术和工具进行集成。例如,可以使用数据库模块来连接和操作数据库,以便更好地管理和查询家政服务人员和预约信息。还可以使用第三方模块来实现一些特定的功能,如发送短信通知或支付接口的集成。 总之,使用Node.js可以方便地开发微信小程序家政服务预约系统,通过Node.js的高效性和灵活性,我们可以快速响应用户的请求、处理数据并与其他技术进行集成,从而提供良好的用户体验。 ### 回答2: 微信小程序是一种轻量级的应用程序,用户可以通过微信直接使用。家政服务预约是指用户可以通过小程序预约家政服务,比如保洁、搬家、修理等。而Node.js是一种运行在服务器端的JavaScript运行环境,它可以用来构建高效、可扩展的服务器端应用程序。 在微信小程序家政服务预约中,Node.js可以发挥重要作用。首先,Node.js可以处理小程序与后台服务器之间的数据传输,通过异步I/O的特性,可以实现高并发的数据处理和响应。同时,Node.js还能与微信官方提供的开放接口进行交互,实现用户的登录、支付、请求数据等功能。 在家政服务预约中,Node.js可以提供以下功能。首先,它可以处理用户的预约请求,将用户的需求以及选择的服务内容传递给后台服务器进行处理。其次,Node.js还可以实现家政服务提供商的管理功能,包括接受预约、安排工人、处理支付等。同时,Node.js还可以与第三方服务进行对接,比如地图服务,使得用户可以在小程序中查看家政服务的地理位置信息。 总之,微信小程序家政服务预约中使用Node.js可以实现高效、可扩展的服务器端应用程序,处理预约请求、管理服务提供商以及对接第三方服务,为用户提供方便快捷的家政服务预约体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全职计算机毕业设计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值