从0到1:健身房私教预约小程序开发笔记

开发背景

在当代“瘦身热”的带动下,到健身房运动和瘦身的人员也在不断增加,一定程度上加大了健身房的管理难度,因此,开发一款属于健身房预约的小程序这时候正好可以派上用场

概要设计

本项目分为用户端,教练端,后台端3个组成部分:
image.png

  • 后台端:可以添加和设定教练的基本信息,账号,登陆密码等。
  • 教练端:可以编辑自己的个人资料(头像,简介,星级等),设定预约时段排期(可预约时段,各时段人数限定), 在现场核销用户的预约码。
  • 用户端:选择自己需要的教练和时段,下单预约,预约成功后到健身房出示预约码给教练或者工作人员核销。

技术选型

  • 本项目使用微信小程序平台进行开发。
  • 使用腾讯专门的小程序云开发技术,云资源包含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需域名和服务器即可搭建。
  • 小程序本身的即用即走,适合小工具的使用场景,也适合快速开发迭代。
  • 云开发技术采用腾讯内部链路,没有被黑客攻击的风险,不会 DDOS攻击,节省防火墙费用,安全性高且免维护。
  • 资源承载力可根据业务发展需要随时弹性扩展。

数据库设计

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',

};

技术难点


 
// 用户预约逻辑
    async join(userId, meetId, timeMark, formsList) {
        // 预约时段是否存在
        let meetWhere = {
            _id: meetId
        };
        let day = this.getDayByTimeMark(timeMark);
        let meet = await this.getMeetOneDay(meetId, day, meetWhere);

        if (!meet) {
            this.AppError('预约时段选择错误1,请重新选择');
        }

        let daySet = this.getDaySetByTimeMark(meet, timeMark);
        if (!daySet)
            this.AppError('预约时段选择错误2,请重新选择');

        let timeSet = this.getTimeSetByTimeMark(meet, timeMark);
        if (!timeSet)
            this.AppError('预约时段选择错误3,请重新选择');

        // 规则校验
        await this.checkMeetRules(userId, meetId, timeMark, formsList);


        let data = {};

        data.JOIN_USER_ID = userId;
        data.JOIN_MEET_ID = meetId;
        data.JOIN_MEET_CATE_ID = meet.MEET_CATE_ID;
        data.JOIN_MEET_CATE_NAME = meet.MEET_CATE_NAME;
        data.JOIN_MEET_TITLE = meet.MEET_TITLE;
        data.JOIN_MEET_DAY = daySet.day;
        data.JOIN_MEET_TIME_START = timeSet.start;
        data.JOIN_MEET_TIME_END = timeSet.end;
        data.JOIN_MEET_TIME_MARK = timeMark;
        data.JOIN_START_TIME = timeUtil.time2Timestamp(daySet.day + ' ' + timeSet.start + ':00');
        data.JOIN_STATUS = JoinModel.STATUS.SUCC;
        data.JOIN_COMPLETE_END_TIME = daySet.day + ' ' + timeSet.end;

        // 入库
        for (let k = 0; k < formsList.length; k++) {
            let forms = formsList[k];
            data.JOIN_FORMS = forms;
            data.JOIN_OBJ = dataUtil.dbForms2Obj(forms);
            data.JOIN_CODE = dataUtil.genRandomIntString(15);
            await JoinModel.insert(data);
        }


        // 统计
        this.statJoinCnt(meetId, timeMark);

        return {
            result: 'ok',
        }
    }

UI设计(用户端)

image.png
image.png
image.png
image.png
image.png

UI设计(教练端)

image.png
image.png
image.png
image.png
image.png

UI设计(后台)

image.png
image.png
image.png
image.png

git

git源码


预约小程序
鹅厂程序媛一枚,交流v: cclinux0730

鹅厂程序猿一枚,交流v: cclinux0730

18 声望
2 粉丝
0 条评论
推荐阅读
从0到100:中小学运动体育设施开放预约小程序
随着全民健身的普及,为进一步贯彻落实《“健康中国2030”规划纲要》和《全民健身条例》,更好地满足广大青少年学生和人民群众就近、便利参加体育健身活动的需求,持续扩大公共服务配套资源供给, 中小学校园的操场...

CC同学呀

微信小程序的开发踩坑
前言记录一下在开发小程序的时候遇到的问题,笔记跟坑我都稍微写一点关于开发的一. 生命周期和路由跳转实在记不住( = = ||),但是用到的几率挺高,所以就索性抄下来了1.页面的生命周期onLoad—-监听页面加载onRead...

bug之所措11阅读 27.1k

有意思,小程序还可以一键生成App!
说到小程序,大部分同学的第一反应,可能是微信小程序、支付宝小程序,确实,小程序的概念深入人心,并且已经被约定俗成的绑定到某些互联网公司的 APP 上。

chokcoco4阅读 1.1k评论 2

Taro 小程序持续集成
传统意义上的持续集成,是在 Web 端通过自动化的方式将项目打包并上传到服务器,这一过程需要 Git 参与。持续集成的目的是为了免去手动打包、手动上传这一繁琐且容易出错的步骤,提高部署效率和部署的安全性。

杨成功3阅读 453

封面图
微信小程序归结
是的,在这个框架满天飞的年代,我既然有有幸使用了原生小程序开发项目,除了麻烦些,倒也不是一无所获,耕耘总有收货嘛,写博客本身不是为了炫技还是什么,单纯的是记性不好,有些知识点 自己是花了时间去查找的...

HappyCodingTop1阅读 1.1k

封面图
uni-app 实现pages.json的模块加载。
对于一个日渐庞大的下uni-app项目,pages.json文件会变得有大有难以维护,所有就思考怎么样将pages.json文件才分易维护的小文件。后来在阅读他的源码时发现了这个

只是小丑阅读 2.3k

快来解锁小程序蓝牙开发技能
微信小程序中很早就支持了蓝牙能力,看过不少的文档,知道大概的流程和能实现的效果,但是由于一直没有像样的实战项目导致也没有正经的开发上线过,本次缘于接到了一个外包项目,那就顺道记录一下开发的过程及遇...

南城FE2阅读 449

封面图

鹅厂程序猿一枚,交流v: cclinux0730

18 声望
2 粉丝
宣传栏