概要设计
医院陪诊预约小程序:随着移动互联网的普及,越来越多的医院陪诊服务开始向线上转型, 传统的预约方式往往效率低下,用户需耗费大量时间进行电话预约或现场排队,陪诊服务预约小程序集多种服务于一体,可以提高服务效率、提升用户体验。 用户可以浏览不同医院的位置、陪诊项目和陪诊时间,用户可以选择日期、时间段和人数,然后进行预约。
功能规划
本项目前后端完整代码包括公告通知,用户预约,签到核销, 管理者可以自定义预约要填写的内容,比如姓名、性别、年龄、诊疗科室、手机号等,后台预约管理,后台预约名单管理和导出Excel,后台设置预约时段和人数上线,后台管理最新通知公告,后台用户管理,后台医院管理,医院管理员设定等功能。

数据库设计
MeetModel.DB_STRUCTURE = {
_pid: 'string|true',
MEET_ID: 'string|true',
MEET_ADMIN_ID: 'string|true|comment=添加的管理员',
MEET_TITLE: 'string|true|comment=标题',
MEET_UNIT_ID: 'string|false',
MEET_UNIT_NAME: 'string|false',
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_ADD_TIME: 'int|true',
MEET_EDIT_TIME: 'int|true',
MEET_ADD_IP: 'string|false',
MEET_EDIT_IP: 'string|false',
};
JoinModel.DB_STRUCTURE = {
_pid: 'string|true',
JOIN_ID: 'string|true',
JOIN_UNIT_ID: 'string|false',
JOIN_UNIT_NAME: 'string|false',
JOIN_EDIT_ADMIN_ID: 'string|false|comment=最近修改的管理员ID',
JOIN_EDIT_ADMIN_NAME: 'string|false|comment=最近修改的管理员名',
JOIN_EDIT_ADMIN_TIME: 'int|true|default=0|comment=管理员最近修改的时间',
JOIN_EDIT_ADMIN_STATUS: 'int|false|comment=最近管理员修改为的状态 ',
JOIN_IS_ADMIN: 'int|true|default=0|comment=是否管理员添加 0/1',
JOIN_CODE: 'string|true|comment=核验码15位',
JOIN_IS_CHECKIN: 'int|true|default=0|comment=是否核销 0/1 ',
JOIN_CHECKIN_TIME: 'int|true|default=0',
JOIN_USER_ID: 'string|true|comment=用户ID',
JOIN_MEET_ID: 'string|true|comment=预约PK',
JOIN_MEET_CATE_ID: 'string|true',
JOIN_MEET_CATE_NAME: 'string|true',
JOIN_MEET_TITLE: 'string|true|comment=项目',
JOIN_MEET_DAY: 'string|true|comment=日期',
JOIN_MEET_TIME_START: 'string|true|comment=时段开始',
JOIN_MEET_TIME_END: 'string|true|comment=时段结束',
JOIN_MEET_TIME_MARK: 'string|true|comment=时段标识',
JOIN_COMPLETE_END_TIME: 'string|false|comment=完整结束时间',
JOIN_START_TIME: 'int|true|comment=开始时间戳',
JOIN_FORMS: 'array|true|default=[]|comment=表单',
/* title:
mark:
type:
val:
*/
JOIN_OBJ: 'object|true|default={}',
JOIN_STATUS: 'int|true|default=1|comment=状态 1=预约成功,10=已取消, 99=系统取消',
JOIN_REASON: 'string|false|comment=审核拒绝或者取消理由',
JOIN_ADD_TIME: 'int|true',
JOIN_EDIT_TIME: 'int|true',
JOIN_ADD_IP: 'string|false',
JOIN_EDIT_IP: 'string|false',
};
核心实现
class MeetService extends BaseProjectService {
constructor() {
super();
this._log = new LogUtil(projectConfig.MEET_LOG_LEVEL);
}
/**
* 抛出异常
* @param {*} msg
* @param {*} code
*/
AppError(msg) {
this._log.error(msg);
super.AppError(msg);
}
_meetLog(meet, func = '', msg = '') {
let str = '';
str = `[MEET=${meet.MEET_TITLE}][${func}] ${msg}`;
this._log.debug(str);
}
/** 统一获取Meet(某天) */
async getMeetOneDay(meetId, day, where, fields = '*') {
let meet = await MeetModel.getOne(where, fields);
if (!meet) return meet;
meet.MEET_DAYS_SET = await this.getDaysSet(meetId, day, day);
return meet;
}
/** 获取日期设置 */
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, 'da

最低0.47元/天 解锁文章
744

被折叠的 条评论
为什么被折叠?



