背景
随着机动车逐步走进寻常百姓家中,学车也随之被人们提上了日程,这使得汽车驾驶培训行业失去迅猛发展。挪动互联网技术的广泛应用,使手机约车成为可能,如何正当地调配已有资源,进步资源利用率,加强驾校服务水平,己成为驾校越来越迫切的需要。驾校学车预约小程序使预约者只需拿起手机,就能够线上约车,能够做到“足不出户选教练”,这样可能无效缩小学习者的等待时间,从而为学员提供更优质的服务。 本零碎蕴含学员端,教练端,治理端三方,不前后端残缺,包含布告,驾校教练预约,科目培训预约,后盾治理,用户治理,预约名单治理,预约记录治理与导出,我的预约,历史浏览,我的珍藏等模块,采纳腾讯提供的小程序云开发解决方案,毋庸服务器和域名。
概要设计
本我的项目分为学员端,驾校教练端,后盾端3个组成部分:
- 后盾端:能够增加和设定教练的根本信息,账号,登陆密码等。
- 驾校教练端:能够编辑本人的个人资料(头像,简介,星级等),设定预约时段排期(可预约时段,各时段人数限定), 在现场核销用户的预约码。
- 学员端:抉择本人须要的教练和时段,下单预约,预约胜利后到健身房出示预约码给教练或者工作人员核销
数据库设计
MeetModel.DB_STRUCTURE = { _pid: 'string|true', MEET_ID: 'string|true', MEET_ADMIN_ID: 'string|true|comment=增加的管理员', MEET_TITLE: 'string|true|comment=题目', MEET_JOIN_FORMS: 'array|true|default=[]|comment=表单字段设置', MEET_DAYS: 'array|true|default=[]|comment=最近一次批改保留的可用日期', MEET_CATE_ID: 'string|true|comment=分类编号', MEET_CATE_NAME: 'string|true|comment=分类冗余', MEET_FORMS: 'array|true|default=[]', MEET_OBJ: 'object|true|default={}', MEET_CANCEL_SET: 'int|true|default=1|comment=勾销设置 0=不允,1=容许,2=仅开始前可勾销', MEET_STATUS: 'int|true|default=1|comment=状态 0=未启用,1=应用中,9=进行预约,10=已敞开', MEET_ORDER: 'int|true|default=9999', MEET_VOUCH: 'int|true|default=0', MEET_QR: 'string|false', MEET_PHONE: 'string|false|comment=登录手机', MEET_PASSWORD: 'string|false|comment=登录明码', MEET_TOKEN: 'string|false|comment=以后登录token', MEET_TOKEN_TIME: 'int|true|default=0|comment=以后登录token time', MEET_MINI_OPENID: 'string|false|comment=小程序openid', MEET_LOGIN_CNT: 'int|true|default=0|comment=登陆次数', MEET_LOGIN_TIME: 'int|false|comment=最近登录工夫', MEET_ADD_TIME: 'int|true', MEET_EDIT_TIME: 'int|true', MEET_ADD_IP: 'string|false', MEET_EDIT_IP: 'string|false',};
技术使用
- 本我的项目应用微信小程序平台进行开发。
- 应用腾讯专门的小程序云开发技术,云资源蕴含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需域名和服务器即可搭建。
- 小程序自身的即用即走,适宜小工具的应用场景,也适宜疾速开发迭代。
- 云开发技术采纳腾讯外部链路,没有被黑客攻击的危险,不会 DDOS攻打,节俭防火墙费用,安全性高且免保护。
- 资源承载力可依据业务倒退须要随时弹性扩大
难点实现
/** 获取日期设置 */ async getDaysSet(meetId, startDay, endDay = null) { let where = { DAY_MEET_ID: meetId } if (startDay && endDay && endDay == startDay) where.day = startDay; else if (startDay && endDay) where.day = ['between', startDay, endDay]; else if (!startDay && endDay) where.day = ['<=', endDay]; else if (startDay && !endDay) where.day = ['>=', startDay]; let orderBy = { 'day': 'asc' } let list = await DayModel.getAllBig(where, 'day,dayDesc,times', orderBy, 1000); for (let k = 0; k < list.length; k++) { delete list[k]._id; } return list; } // 按时段统计某时段报名状况 async statJoinCnt(meetId, timeMark) { let whereDay = { DAY_MEET_ID: meetId, day: this.getDayByTimeMark(timeMark) }; let day = await DayModel.getOne(whereDay, 'times'); if (!day) return; let whereJoin = { JOIN_MEET_TIME_MARK: timeMark, JOIN_MEET_ID: meetId }; let ret = await JoinModel.groupCount(whereJoin, 'JOIN_STATUS'); let stat = { //统计数据 succCnt: ret['JOIN_STATUS_1'] || 0, //1=预约胜利, cancelCnt: ret['JOIN_STATUS_10'] || 0, //10=已勾销, adminCancelCnt: ret['JOIN_STATUS_99'] || 0, //99=后盾勾销 }; let times = day.times; for (let j in times) { if (times[j].mark === timeMark) { let data = { ['times.' + j + '.stat']: stat } await DayModel.edit(whereDay, data); return; } } }
学员端UI设计
教练端UI设计
后盾治理UI设计
git
代码