背景
现代社会,由于经济不断发展,家政服务的数量也在不断的增加,随着家政服务的数量增多,人们对家政服务信息的需求也越来越高。
以往的家政服务管理平台的管理,一般都是纸质文件来管理家政服务信息,传统的管理方式已经无法满足现代人们的需求;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索,只需输入家政服务相关信息就能在数秒内反馈想要的结果;其次可存储大量的家政服务信息,同时家政服务信息安全性有更高的保障;这些优点大大提高运营效率并节省运营成本。因此,开发家政服务管理平台对家政服务信息进行有效的管理是很必要的,不仅提高了家政服务管理效率,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户与管理员之间的互动交流,更能提高用户的体验强度。
本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库,而java技术,B/S架构则保证了较高的平台适应性。本文主要介绍了本系统的开发背景,所要完成的功能和开发的过程,主要说明了系统设计的重点、设计思想。
主要技术
2.1 SpringBoot
SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计,其不仅继承了Spring框架原来有的优秀特性,而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原本的Spring中由于随着项目的扩大导入的jar包数量越来越大,随之出现了jar包版本之间的兼容性问题,而此时SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性问题得到了很好的解决。
SpringBoot可以看做是Spring的加强版本,但实质上都是Spring的相关技术,有了这些优秀的开源框架,程序员在开发过程中将事半功倍。
2.2 vue
- 无需构建步骤,渐进式增强静态的 HTML
- 在任何页面中作为 Web Components 嵌入
- 单页应用 (SPA)
- 全栈 / 服务端渲染 (SSR)
- Jamstack / 静态站点生成 (SSG)
- 开发桌面端、移动端、WebGL,甚至是命令行终端中的界面
系统架构
家政服务管理的工作量随着信息的不断发展和人们的自动化办公意识的不断增强变得越来越复杂,原有的系统已经满足不了相关工作人员的使用需求。为了解决这一问题,并且方便信息行业实施家政服务管理的工作,提高工作的效率,有必要利用现有家政服务行业的资源,开发出更好、更方便的家政服务管理平台。
本家政服务管理平台是把IT技术用到家政服务信息的管理中,它具有标准家政服务管理平台所具备的现实生活中完整的家政服务管理过程,完全的实现了虚拟现实。它可以收集和保存用户的信息,真正的实现了节约资源、提高使用效率、处理业务的同时实现了家政服务管理平台的功能。
家政服务管理平台的主要功能的结构如图。
数据库设计
由于数据库表较多,此处只展示部分的数据表设计。
系统详细设计
前台模块设计
系统首页的主要功能展示了首页、服务信息、公告信息、留言反馈、个人中心、后台管理等,用户可根据权限进行相应操作。
服务信息,在服务信息页面可以查看服务名称、 服务价格、服务简介、发布日期、合同信息等内容进行预约、详情或收藏等操作
管理员功能模块
管理员登录系统后,可以对首页、个人中心、用户管理、服务人员管理、服务信息管理、服务类型管理、服务预约管理、服务取消管理、服务分配管理、服务进度管理、评价信息管理、留言反馈、系统管理等功能进行相应的操作管理。
服务预约管理,在服务预约管理页面可以对索引、服务名称、服务类型、服务价格、预约时间、账号、姓名、手机号码、地址、下单时间、是否支付、审核回复、审核状态、审核等内容进行详情、取消、修改或删除等操作。
系统源码
由于代码较多,此处只展示部分代码。
服务预约入口代码
@RestController
@RequestMapping("/fuwuyuyue")
public class FuwuyuyueController {
@Autowired
private FuwuyuyueService fuwuyuyueService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,FuwuyuyueEntity fuwuyuyue,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
fuwuyuyue.setZhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
PageUtils page = fuwuyuyueService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwuyuyue), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,FuwuyuyueEntity fuwuyuyue,
HttpServletRequest request){
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
PageUtils page = fuwuyuyueService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwuyuyue), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( FuwuyuyueEntity fuwuyuyue){
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwuyuyue, "fuwuyuyue"));
return R.ok().put("data", fuwuyuyueService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(FuwuyuyueEntity fuwuyuyue){
EntityWrapper< FuwuyuyueEntity> ew = new EntityWrapper< FuwuyuyueEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwuyuyue, "fuwuyuyue"));
FuwuyuyueView fuwuyuyueView = fuwuyuyueService.selectView(ew);
return R.ok("查询服务预约成功").put("data", fuwuyuyueView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
FuwuyuyueEntity fuwuyuyue = fuwuyuyueService.selectById(id);
return R.ok().put("data", fuwuyuyue);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
FuwuyuyueEntity fuwuyuyue = fuwuyuyueService.selectById(id);
return R.ok().put("data", fuwuyuyue);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody FuwuyuyueEntity fuwuyuyue, HttpServletRequest request){
fuwuyuyue.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwuyuyue);
fuwuyuyueService.insert(fuwuyuyue);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody FuwuyuyueEntity fuwuyuyue, HttpServletRequest request){
fuwuyuyue.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwuyuyue);
fuwuyuyueService.insert(fuwuyuyue);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody FuwuyuyueEntity fuwuyuyue, HttpServletRequest request){
//ValidatorUtils.validateEntity(fuwuyuyue);
fuwuyuyueService.updateById(fuwuyuyue);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
fuwuyuyueService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<FuwuyuyueEntity> wrapper = new EntityWrapper<FuwuyuyueEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
int count = fuwuyuyueService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* (按值统计)
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}")
public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = fuwuyuyueService.selectValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计)时间统计类型
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
params.put("timeStatType", timeStatType);
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = fuwuyuyueService.selectTimeStatValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* 分组统计
*/
@RequestMapping("/group/{columnName}")
public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("column", columnName);
EntityWrapper<FuwuyuyueEntity> ew = new EntityWrapper<FuwuyuyueEntity>();
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
ew.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
List<Map<String, Object>> result = fuwuyuyueService.selectGroup(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
}
服务分配代码
@RestController
@RequestMapping("/fuwufenpei")
public class FuwufenpeiController {
@Autowired
private FuwufenpeiService fuwufenpeiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,FuwufenpeiEntity fuwufenpei,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
fuwufenpei.setZhanghao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("fuwurenyuan")) {
fuwufenpei.setGonghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<FuwufenpeiEntity> ew = new EntityWrapper<FuwufenpeiEntity>();
PageUtils page = fuwufenpeiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwufenpei), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,FuwufenpeiEntity fuwufenpei,
HttpServletRequest request){
EntityWrapper<FuwufenpeiEntity> ew = new EntityWrapper<FuwufenpeiEntity>();
PageUtils page = fuwufenpeiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwufenpei), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( FuwufenpeiEntity fuwufenpei){
EntityWrapper<FuwufenpeiEntity> ew = new EntityWrapper<FuwufenpeiEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwufenpei, "fuwufenpei"));
return R.ok().put("data", fuwufenpeiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(FuwufenpeiEntity fuwufenpei){
EntityWrapper< FuwufenpeiEntity> ew = new EntityWrapper< FuwufenpeiEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwufenpei, "fuwufenpei"));
FuwufenpeiView fuwufenpeiView = fuwufenpeiService.selectView(ew);
return R.ok("查询服务分配成功").put("data", fuwufenpeiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
FuwufenpeiEntity fuwufenpei = fuwufenpeiService.selectById(id);
return R.ok().put("data", fuwufenpei);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
FuwufenpeiEntity fuwufenpei = fuwufenpeiService.selectById(id);
return R.ok().put("data", fuwufenpei);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody FuwufenpeiEntity fuwufenpei, HttpServletRequest request){
fuwufenpei.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwufenpei);
fuwufenpeiService.insert(fuwufenpei);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody FuwufenpeiEntity fuwufenpei, HttpServletRequest request){
fuwufenpei.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwufenpei);
fuwufenpeiService.insert(fuwufenpei);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody FuwufenpeiEntity fuwufenpei, HttpServletRequest request){
//ValidatorUtils.validateEntity(fuwufenpei);
fuwufenpeiService.updateById(fuwufenpei);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
fuwufenpeiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<FuwufenpeiEntity> wrapper = new EntityWrapper<FuwufenpeiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("fuwurenyuan")) {
wrapper.eq("gonghao", (String)request.getSession().getAttribute("username"));
}
int count = fuwufenpeiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}