🙊作者简介:多年编程开发经验,专注java技术领域和毕业设计项目实战,系统定制、远程部署调试、代码讲解、代码修改
🍅擅长语言:springboot、ssm、vue、html、jsp、php、python、爬虫、小程序、安卓app
⬇️源码获取:文末可以获取源码+数据库+文档
⚡感兴趣的可以先收藏+关注,后续会更新更多项目资料,所有项目均配有开发文档和安装配置教程
摘 要
网络和科学技术的发展改变了人类的生活。科技的进步使计算机技术生活化,帮助人们的工作和生活。目前信息化成为主流,使人类进入新的文明社会。本系统是利用现代科技和网络开发的帮助网上预约家政服务的小程序,可以减少预约家政服务的传递环节,提高工作效率和帮助用户的信息查询。
本基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。
关键词:家政服务;客户需求;接单管理;服务预约;PHP语言
第1章 绪论
1.1课题背景与问题来源
随着信息化时代的到来,方便了人们的生活。各个行业都离不开小程序技术的辅助。小程序技术可以实现信息的快速处理,帮助人们减少工作压力,采用小程序技术的管理系统对于信息安全的保证更为可靠。管理系统对于复杂的信息更能体现优势,弥补了人工管理的缺点。虽然现在很多的企业和商家都已使用了相关的管理系统,但采用的大多都还是人工+计算机管理的方式进行工作的管理。这种方式还是需要大量的人工参与,不能彻底解放员工的“双手”,对于减轻工作压力非常有限。特别对于信息的查询和统计,都还是需要人工进行多次核实才可以完成,非常浪费时间和体力,经常需要员工加班,为企业带来成本的增加。不能适应科学技术的发展。
现在人们生活水平提高和工作繁忙。家务活常常没有时间做造成需要家政服务的用户越来越多。网上预约家政服务的用户非常多,工作人员的压力也非常大。如果没有有效的工作流程和办公工具会造成工作的出错,一旦工作出错影响家政公司的形象,发生矛盾。所以网上预约家政服务的工作需要严谨,对于信息的管理尤为重要,需要更为安全可靠的办公工具来帮助工作。本基于微信小程序的家政服务预约系统由此开发,基于微信小程序的家政服务预约系统可以充分信任、放心使用。
1.2课题现状和研究意义
小程序技术的发展也对人们提出了更高的要求,经济的提高相对应着工作的压力提高。我国目前正处在网络发展的快速时期,要求网络可以为人们做出更多的服务。现在,我国的企业、公司等都还是采用半人工的工作方式,也就是在工作中加入计算机技术但还是大部分以人为主导。这种现象充分反映了当代人们对小程序技术的不信任。造成这种现象的主要原因是一些办公软件的功能不完善、操作流程不友好、信息安全没有保证。
进入本世纪后,管理系统进一步发展。国家大力支持科技,对网络安全提供了保障。管理信息可以处理复杂的信息从而提高用户的工作效率,减少失误。所以本基于微信小程序的家政服务预约系统的开发非常有意义,基于微信小程序的家政服务预约系统里的信息大致可以分为客户需求信息、家政服务信息、公司介绍信息和预约信息、接单信息、留言信息。把这些信息交给计算机处理非常安全,对于信息的搜索也更为快速。
1.3课题研究内容
本系统主要研究的内容为家政服务相关信息、客户相关信息和管理员相关信息、员工相关信息。和管理员相关的信息有客户信息、员工信息,包括审核客户、员工信息和删除客户、员工信息,家政服务信息,包括添加家政服务和修改家政服务。和客户相关的信息有预约信息和需求信息、注册信息、接单信息。和员工相关的信息为接单信息和预约信息。本系统的功能非常全面,信息也非常安全,对于各类信息的存储也非常合理,可以帮助网上预约家政服务的管理工作。
1.4论文结构安排
本论文的结构分为绪论、系统分析、系统设计、系统实现和系统测试。对于论文结构的安排采用了系统开发的流程。
第1章绪论,在绪论中阐述系统开发的背景、现状和意义、内容;
第2章系统分析,在系统分析中从开发语言分析到可行性分析,加入系统流程分析和功能分析;
第3章系统设计,本部分内容为系统的规划;
第4章系统实现,把系统的设计转换到具体的实现中;
第5章系统测试,根据系统的实现进行测试,保证系统实现中没有错误。
第2章 系统分析
2.1系统使用相关技术分析
2.1.1PHP语言介绍
PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 PHP同时支持面向对象和面向过程的开发,使用上非常灵活。PHP是一个拥有众多开发者的开源软件项目,最开始是Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。PHP是在1994年由Rasmus Lerdorf创建的,最初只是一个简单的用Perl语言编写的统计他自己网站访问者数量的程序。后来重新用C语言编写,同时可以访问数据库,1995年,PHP(Personal Home Page Tools)对外发表第一个版本PHP1。此后,越来越多的网站开始使用PHP,并且强烈要求增加一些特性,如循环语句和数组变量等,1995年发布的PHP2加入了对mySQL的支持。
2.1.2微信小程序技术介绍
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。
2.1.3Mysql数据库
Mysql数据库是一个开源的数据库产品,功能非常的强大,可以运行在各个操作系统上面,而且支持各种不同的编程语言,数据库是用来存储和管理数据信息的一个仓库,都是通过api进行创建,然后实现数据信息的访问,管理和搜索等,现在的数据库都是采用的关系型数据库,就是建立在关系模型之上的,通过几何代数等数学方式来进行处理数据,存储的数据通常是以表格的形式,就是看起来是一个电子表格一样,然后分为不同的列和行等,还需要设置数据的主键和外键等,还要使用索引,可以快速的查找和访问数据,然后才能生成一个完整的数据库。
2.2系统可行性分析
系统是否可行决定着系统是否要开发,分析系统的可行性通常从系统的技术性、经济性和操作性分析。系统可行性分析是非常重要的一步,不可缺少。本系统为基于微信小程序的家政服务预约系统,所以在系统可行性分析时需要充分考虑到使用客户和家政服务的需求以及开发条件、配置、硬件环境等。
2.2.1系统技术可行性分析
技术可行性一般从系统开发所使用的技术和系统运行所使用的软件进行分析。本系统在开发中采用PHP语言和Mysql数据库。PHP语言为动态的开发语言,支持多种平台,代码也非常健壮。使用PHP语言开发的系统可以把代码单独拿出来用到其它平台上。Mysql数据库为小型的关系型数据库,支持PHP,Android,PHP等语言,在安装和使用中非常简单。本系统在运行中采用微信开发者工具软件,微信开发者工具含有非常多的控件,可以使系统在调试中节省安装其它组件的时间。综合分析,本系统在系统可行性分析上是没有问题的。
2.2.2系统经济可行性分析
经济可行性分为系统的开发成本和运行成本以及售后维护成本。本系统在开发中不需要资金的支持,只需要电脑一台;本系统在运行中的成本也是电脑、手机一台。如今电脑、手机价格已平民化,电脑、手机的普及率已达到百分之八十;本系统在今后的维护中也仅需要一人就可以完成。综合分析,本系统的在经济可行性分析上也是没有问题的。
2.2.3系统操作可行性分析
系统的操作可行性包括用户使用本系统的操作流程和界面的设计、布局。本系统在设计中大量调查了使用人员的习惯和审美,所有的功能都采用统一的风格方便用户使用。本系统的操作流程采用大众的操作习惯,并加入大量的提示框。比如在删除信息时,会提示“是否删除本条信息”的提示框,为用户做出指导。本系统在界面设计中采用了简单、大方的布局。综合分析,本系统在操作可行性上分析是没有问题的。
本系统从技术可行性、操作可行性和经济可行性三方面分析得出,本系统的实现可行,是可以为用户带来工作帮助,非常有意义的。
2.3系统性能分析
目前很多的预约家政服务中都使用了计算机技术的管理系统,管理员在计算机中录入用户的预约然后进行时间的安排。家政服务的内部人员都可以使用此类管理系统,方便了家政服务内部工作人员的工作,但用户想要了解服务信息、家政人员信息等还必须找到专业负责人员进行了解,非常不方便。特别是对一些预约结果还需要再次跑到管理处拿结果,非常麻烦。而且有时候对于一些特殊信息还是采用纸张记录的方式进行保存,这种方式非常容易出错,造成工作失误。
本系统可以把客户加入进来,客户可以随时了解信息,清楚预约情况。为了可以使系统更好的实现和正确的设计,在设计时就需要考虑到:
(1)在设计本系统的功能界面时,需要考虑到用户的需求,多方位调查用户的操作习惯和操作需求,总结出最适合用户使用的操作功能界面。当然在设计中也要充分考虑到自己的水平,在自己能力范围内尽可能的满足用户的需求;
(2)为了提高系统的使用率和实用性,在系统的功能设计中要考虑到方方面面,调查不同角色用户的工作需求,总结出功能完善的系统。对于代码的编写也要求减少废弃代码来保证系统的运行和系统的大小;
(3)最重要的一点为信息安全,本系统里的信息涉及到个人隐私和平台隐私,所以系统在设计中需要采用安全机制;
(4)系统代码的健壮性,随时时代的发展,人们的需求会不断的发生改变。这时候就需要对系统进行扩展,在扩展中就需要考验系统的代码健壮性。在经过多次修改后,系统的代码还可以正确使用,为系统的扩展和升级提供保障。本系统采用PHP语言进行代码编写,PHP语言的代码支持多种环境,并且可以封装,可以直接移植到其它环境中使用。所以本系统的代码非常健壮。
2.4功能分析
在系统实现时先进行功能的分析,可以保证系统功能实现的完整性。如果没有经过功能分析直接进行实现,难免不会在系统完成后发现需要进行完善,造成需要再次开发。功能分析可以降低系统的开发成本,提高开发效率。
本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。
2.5系统操作流程分析
想要系统可以正确的运行就需要良好的操作流程。本系统的主要功能是对网上预约家政服务日常工作的管理,包括客户需求信息、家政服务信息、预约信息、留言信息、员工信息等。管理员管理接单信息、家政服务信息和员工信息、预约信息、客户信息等;员工查看需求信息和进行接单。本系统的操作流程如下图2.1所示:
图2.1系统操作流程图
第3章 系统设计
3.1系统功能结构设计
本系统的结构分为管理员和客户、员工。本系统的功能结构图如下图3.1所示:
图3.1系统功能结构图
3.2数据库设计
本系统为小程序类的预约平台,所以对信息的安全和稳定要求非常高。为了解决本问题,采用前端界面展示,后端数据处理的方式进行设计。在后端数据的存储中采用Mysql数据库进行设计。数据库设计分为ER图设计和数据库表设计。
3.2.1数据ER图设计
本系统中的数据种类非常多,想要把数据都有效的关联起来就需要注意数据之间的联系。因为数据之间都有联系,所以在数据库的操作中不能任意的删除,如果删除了一方的数据会造成系统的出错。
本系统中的数据有客户信息、管理员信息、预约信息、家政服务信息和留言信息等。
- 管理员信息的ER图如下图3.2所示:
图3.2管理员信息ER图
(2)客户信息ER图如下图3.3所示:
图3.3客户信息ER图
(3)家政服务信息ER图如下图3.4所示:
图3.4家政服务信息ER图
(4)留言信息ER图如下图3.5所示:
图3.5留言信息ER图
(5)预约信息ER图如下图3.6所示:
图3.6预约信息ER图
3.2.2数据库表设计
数据库表的设计质量关系着系统的运行是否稳定,一个好的数据库表可以保证系统数据的正确处理,数据库表中设计了数据的分类和主外键、长度等信息。根据系统的ER图设计中本系统的数据库表有管理员信息表、家政服务信息表、预约信息表、客户需求信息表、客户信息表等,具体的表详情如下表3.1-3.16所示:
表3.1 config
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | name | varchar | 100 |
|
|
|
| 否 |
|
|
3 | value | varchar | 100 |
|
|
|
| 是 |
|
|
表3.2 discussjiazhengfuwu
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | refid | bigint | 20 |
|
|
|
| 否 |
|
|
4 | userid | bigint | 20 |
|
|
|
| 否 |
|
|
5 | nickname | varchar | 200 |
|
|
|
| 是 |
|
|
6 | content | longtext |
|
|
|
|
| 否 |
|
|
7 | reply | longtext |
|
|
|
|
| 是 |
|
|
表3.3 fuwuyuyue
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | fuwumingcheng | varchar | 200 |
|
|
|
| 是 |
|
|
4 | fuwuneirong | varchar | 200 |
|
|
|
| 是 |
|
|
5 | fuwushouze | varchar | 200 |
|
|
|
| 是 |
|
|
6 | yuyueshijian | datetime |
|
|
|
|
| 否 |
|
|
7 | xiaoshijiage | int | 11 |
|
|
|
| 是 |
|
|
8 | fuwushizhang | int | 11 |
|
|
|
| 否 |
|
|
9 | zongfeiyong | int | 11 |
|
|
|
| 是 |
|
|
10 | lianxidianhua | varchar | 200 |
|
|
|
| 是 |
|
|
11 | xiangqing | longtext |
|
|
|
|
| 是 |
|
|
12 | tupian | varchar | 200 |
|
|
|
| 是 |
|
|
13 | yuangonggonghao | varchar | 200 |
|
|
|
| 是 |
|
|
14 | kehuzhanghao | varchar | 200 |
|
|
|
| 是 |
|
|
15 | kehuxingming | varchar | 200 |
|
|
|
| 是 |
|
|
16 | kehushouji | varchar | 200 |
|
|
|
| 是 |
|
|
17 | dengjishijian | datetime |
|
|
|
|
| 是 |
|
|
18 | ispay | varchar | 200 |
|
|
|
| 是 | 未支付 |
|
19 | thumbsupnum | int | 11 |
|
|
|
| 是 | 0 |
|
20 | crazilynum | int | 11 |
|
|
|
| 是 | 0 |
|
21 | userid | bigint | 20 |
|
|
|
| 是 |
|
|
表3.4 gongsijieshao
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | gongsimingcheng | varchar | 200 |
|
|
|
| 是 |
|
|
4 | dizhi | varchar | 200 |
|
|
|
| 是 |
|
|
5 | zhuceshijian | date |
|
|
|
|
| 是 |
|
|
6 | zhucejine | int | 11 |
|
|
|
| 是 |
|
|
7 | xiangqing | longtext |
|
|
|
|
| 是 |
|
|
8 | lianxidianhua | varchar | 200 |
|
|
|
| 是 |
|
|
9 | fengmian | varchar | 200 |
|
|
|
| 是 |
|
|
表3.5 jiazhengfuwu
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | fuwumingcheng | varchar | 200 |
|
|
|
| 是 |
|
|
4 | fuwuneirong | varchar | 200 |
|
|
|
| 是 |
|
|
5 | fuwushouze | varchar | 200 |
|
|
|
| 是 |
|
|
6 | xiaoshijiage | int | 11 |
|
|
|
| 是 |
|
|
7 | lianxidianhua | varchar | 200 |
|
|
|
| 是 |
|
|
8 | xiangqing | longtext |
|
|
|
|
| 是 |
|
|
9 | tupian | varchar | 200 |
|
|
|
| 是 |
|
|
10 | yuangonggonghao | varchar | 200 |
|
|
|
| 是 |
|
|
11 | thumbsupnum | int | 11 |
|
|
|
| 是 | 0 |
|
12 | crazilynum | int | 11 |
|
|
|
| 是 | 0 |
|
13 | clicktime | datetime |
|
|
|
|
| 是 |
|
|
表3.6 jiedanxinxi
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | biaoti | varchar | 200 |
|
|
|
| 否 |
|
|
4 | tupian | varchar | 200 |
|
|
|
| 否 |
|
|
5 | fuwujiage | varchar | 200 |
|
|
|
| 是 |
|
|
6 | xuqiuneirong | longtext |
|
|
|
|
| 否 |
|
|
7 | beizhu | varchar | 200 |
|
|
|
| 是 |
|
|
8 | fabushijian | varchar | 200 |
|
|
|
| 是 |
|
|
9 | kehuzhanghao | varchar | 200 |
|
|
|
| 是 |
|
|
10 | kehuxingming | varchar | 200 |
|
|
|
| 是 |
|
|
11 | kehushouji | varchar | 200 |
|
|
|
| 是 |
|
|
12 | dizhi | varchar | 200 |
|
|
|
| 否 |
|
|
13 | yuangonggonghao | varchar | 200 |
|
|
|
| 是 |
|
|
14 | yuangongxingming | varchar | 200 |
|
|
|
| 是 |
|
|
15 | jiedanshijian | datetime |
|
|
|
|
| 是 |
|
|
16 | ispay | varchar | 200 |
|
|
|
| 是 | 未支付 |
|
17 | userid | bigint | 20 |
|
|
|
| 是 |
|
|
表3.7 kehu
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | kehuzhanghao | varchar | 200 |
|
|
|
| 否 |
|
|
4 | mima | varchar | 200 |
|
|
|
| 否 |
|
|
5 | kehuxingming | varchar | 200 |
|
|
|
| 是 |
|
|
6 | xingbie | varchar | 200 |
|
|
|
| 是 |
|
|
7 | kehushouji | varchar | 200 |
|
|
|
| 是 |
|
|
8 | touxiang | varchar | 200 |
|
|
|
| 是 |
|
|
表3.8 kehuxuqiu
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | biaoti | varchar | 200 |
|
|
|
| 否 |
|
|
4 | tupian | varchar | 200 |
|
|
|
| 否 |
|
|
5 | fuwujiage | varchar | 200 |
|
|
|
| 是 |
|
|
6 | xuqiuneirong | longtext |
|
|
|
|
| 否 |
|
|
7 | beizhu | varchar | 200 |
|
|
|
| 是 |
|
|
8 | fabushijian | datetime |
|
|
|
|
| 是 |
|
|
9 | kehuzhanghao | varchar | 200 |
|
|
|
| 是 |
|
|
10 | kehuxingming | varchar | 200 |
|
|
|
| 是 |
|
|
11 | kehushouji | varchar | 200 |
|
|
|
| 是 |
|
|
12 | dizhi | varchar | 200 |
|
|
|
| 否 |
|
|
13 | zhuangtai | varchar | 200 |
|
|
|
| 否 |
|
|
表3.9 messages
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | userid | bigint | 20 |
|
|
|
| 否 |
|
|
4 | username | varchar | 200 |
|
|
|
| 是 |
|
|
5 | content | longtext |
|
|
|
|
| 否 |
|
|
6 | cpicture | varchar | 200 |
|
|
|
| 是 |
|
|
7 | reply | longtext |
|
|
|
|
| 是 |
|
|
8 | rpicture | varchar | 200 |
|
|
|
| 是 |
|
|
表3.10 news
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | title | varchar | 200 |
|
|
|
| 否 |
|
|
4 | introduction | longtext |
|
|
|
|
| 是 |
|
|
5 | picture | varchar | 200 |
|
|
|
| 否 |
|
|
6 | content | longtext |
|
|
|
|
| 否 |
|
|
表3.11 shenghuozhishi
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | biaoti | varchar | 200 |
|
|
|
| 是 |
|
|
4 | neirong | longtext |
|
|
|
|
| 是 |
|
|
5 | fabushijian | date |
|
|
|
|
| 是 |
|
|
6 | faburen | varchar | 200 |
|
|
|
| 是 |
|
|
7 | tupian | varchar | 200 |
|
|
|
| 是 |
|
|
表3.12 storeup
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | userid | bigint | 20 |
|
|
|
| 否 |
|
|
4 | refid | bigint | 20 |
|
|
|
| 是 |
|
|
5 | tablename | varchar | 200 |
|
|
|
| 是 |
|
|
6 | name | varchar | 200 |
|
|
|
| 否 |
|
|
7 | picture | varchar | 200 |
|
|
|
| 否 |
|
|
8 | type | varchar | 200 |
|
|
|
| 是 | 1 |
|
9 | inteltype | varchar | 200 |
|
|
|
| 是 |
|
|
表3.13 users
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | username | varchar | 100 |
|
|
|
| 否 |
|
|
3 | password | varchar | 100 |
|
|
|
| 否 |
|
|
4 | role | varchar | 100 |
|
|
|
| 是 | 管理员 |
|
5 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
表3.14 youqinglianjie
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | lianjiemingcheng | varchar | 200 |
|
|
|
| 是 |
|
|
4 | lianjiewangzhan | varchar | 200 |
|
|
|
| 是 |
|
|
5 | tupian | varchar | 200 |
|
|
|
| 是 |
|
|
6 | clicktime | datetime |
|
|
|
|
| 是 |
|
|
7 | clicknum | int | 11 |
|
|
|
| 是 | 0 |
|
表3.15 yuangong
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | yuangonggonghao | varchar | 200 |
|
|
|
| 否 |
|
|
4 | mima | varchar | 200 |
|
|
|
| 是 |
|
|
5 | yuangongxingming | varchar | 200 |
|
|
|
| 否 |
|
|
6 | xingbie | varchar | 200 |
|
|
|
| 是 |
|
|
7 | bumen | varchar | 200 |
|
|
|
| 是 |
|
|
8 | zhiwei | varchar | 200 |
|
|
|
| 是 |
|
|
9 | ruzhishijian | date |
|
|
|
|
| 是 |
|
|
10 | lianxifangshi | varchar | 200 |
|
|
|
| 是 |
|
|
11 | shenfenzheng | varchar | 200 |
|
|
|
| 是 |
|
|
12 | zhaopian | varchar | 200 |
|
|
|
| 是 |
|
|
表3.16 yuangongfengcai
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 外键 | 允许空 | 默认值 | 说明 |
1 | id | bigint | 20 |
| 是 | 是 |
| 否 |
| auto_increment |
2 | addtime | timestamp |
|
|
|
|
| 否 | CURRENT_TIMESTAMP |
|
3 | xingming | varchar | 200 |
|
|
|
| 是 |
|
|
4 | tupian | varchar | 200 |
|
|
|
| 是 |
|
|
5 | zhuanzhang | varchar | 200 |
|
|
|
| 是 |
|
|
6 | fabushijian | date |
|
|
|
|
| 是 |
|
|
7 | gerenjianjie | longtext |
|
|
|
|
| 是 |
|
|
第4章 系统详细实现
4.1登录功能模块的界面实现
在系统调试运行后,可以进入本界面,本界面是最基本的功能,可以保证系统的安全,采用验证的安全机制进行设计。在本界面里可以看到账号和密码的输入框。本系统中的登录权限包括员工和客户两个。必须三种信息都正确才可以验证成功进入到对应的操作界面。系统的登录功能模块的实现界面如下图4.1所示:
图4.1系统登录功能的实现界面
4.2管理员操作界面的功能模块实现
4.2.1个人中心管理功能模块的界面实现
本功能的设计可以保证管理员账号的安全,使用本功能可以修改管理员的登录密码。管理员修改密码功能模块的实现界面如下图4.2所示:
图4.2管理员修改密码功能的实现界面
4.2.2家政服务管理功能模块的界面实现
本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。管理员管理家政服务信息功能的实现界面如下图4.3所示:
图4.3管理员管理家政服务信息的实现界面
4.2.3员工风采管理功能模块的界面实现
员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。管理员添加员工风采信息的实现界面如下图4.4所示:
图4.4管理员添加员工风采信息的实现界面
4.2.4客户需求管理功能模块的界面实现
客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。管理员查询客户需求信息功能的实现界面如下图4.5所示:
图4.5管理员查询客户需求信息的界面实现
4.2.5接单管理功能模块的界面实现
接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员查询接单信息的实现界面如下图4.6所示:
图4.6管理员查询接单信息功能的实现界面
4.2.6员工管理功能模块的界面实现
管理员可以查询员工信息,可以进行修改删除。管理员添加员工信息的实现界面如下图4.7所示:
图4.7管理员添加员工信息的实现界面
4.3客户角色的操作界面实现
客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。客户角色的操作界面的实现效果如下图4.8所示:
图4.8客户操作界面的实现效果
4.4首页界面的操作功能实现
在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。首页界面的实现如下图4.9所示:
图4.9首页界面的实现效果
4.5员工角色功能的界面实现
员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。实现界面如下图4.10所示:
图4.10员工角色的功能实现界面
第5章 系统测试
5.1实例测试的研究与选择
系统测试分为黑盒测试和白盒测试。白盒测试主要针对复杂大型的项目,需要多人配合才能实现,白盒测试主要从系统的逻辑方面进行测试。黑盒测试针对功能性测试,是检验系统的功能是否正确的测试方法,黑盒测试多用于小型简单的项目中。本系统采用黑盒测试的方法进行测试。通过数据的输入来检验系统的功能。
在系统测试时需要先制定测试方案,在测试中把测试过程和测试结果都记录下来,测试完成后可以进行对比和分析,总结系统的问题和进行修改。系统测试是非常重要的一步,系统测试可以保证系统的正确也是验证系统正确的唯一手段。如果系统没有经过测试就投入使用会造成用户工作的严重失误并给编程人员带来负面影响。
5.2测试环境与测试条件
本系统的测试环境为本人的电脑。本人的电脑为华为笔记本,安装的操作系统为windows10。运行软件为微信开发者工具和Mysql。先把系统的数据库进行附加,然后打开本系统进行调试运行,运行成功后进入正式的测试。
5.3功能测试
本系统的主要功能为用户登录、客户预约、管理员管理预约信息。
5.3.1用户登录功能的测试
对用户登录功能的测试采用输入正确的账号和密码进行登录和输入错误的账号或者错误的密码进行登录以及输入正确的账号和密码进行登录。通过上述情况进行用户登录的测试发现,用户登录功能可以正确运行,用户通过登录后可以进入正确的操作界面,用户登录功能的测试界面如下图5.1所示:
图5.1用户登录功能的测试界面
5.3.2客户预约功能的测试
对于客户预约功能的测试采用客户选择家政服务进行预约,填写正确的预约信息,预约完成后,查看预约记录和客户选择家政服务进行错误预约,预约完成后,查看预约结果。客户登录到系统中查看预约记录的信息。客户预约功能的测试界面如下图5.2所示:
图5.2客户预约功能的测试界面
客户登录到系统中查预约记录信息的测试界面如下图5.3所示:
图5.3客户查看预约记录信息的测试界面
5.3.3管理员预约管理功能的测试
对于管理员预约管理功能的测试采用管理员选择用户预约信息后进行审核,审核操作后,查看审核结果,用户登录后查看预约信息。管理员预约管理功能的测试界面如下图5.4所示:
图5.4管理员预约信息的测试界面
客户查看我的预约记录信息的测试界面如下图5.5所示:
图5.5客户查看我的预约记录信息的测试界面
5.4测试结果
通过对系统的测试发现,用户可以正确登录,客户预约后,客户可以查询到预约记录信息,管理员审核预约信息后,客户可以查看到相关的审核信息。可见,本系统的功能是正确的。系统中还有很多的功能,本论文中只对部分功能进行了阐述。
结束语
本系统通过PHP语言Mysql数据库进行设计,完成了基于微信小程序的家政服务预约系统的实现。本系统可以帮助管理员和客户、员工的需求。客户可以预约、发布自己的需求。管理员可以管理系统里的服务信息、员工信息和预约信息等。员工可以接单和管理接单信息。本系统可以实现网上预约家政服务工作的流程化管理,可以提高工作效率和帮助用户的信息查询。
本次设计通过系统分析、系统设计和系统实现、系统测试的步骤顺利完成。本人通过参考相关的网站和去图书馆查找资料设计了本次基于微信小程序的家政服务预约系统。功能相对完整、操作流畅,界面友好。本次设计让我对PHP语言有了更深的认识,系统的学习了系统开发的过程。在设计中也遇到了很多的问题,通过我的不断努力问题也都得到了解决。本次设计锻炼了我的学习能力和解决问题的能力,让我明白了编程的辛苦,通过本次设计让我印象最深的为系统测试。系统测试让我认识到自己认为最简单的问题往往是最容易出错的地方。本基于微信小程序的家政服务预约系统还有很多的问题,因为个人能力和时间的问题没有继续完善,今后我会继续努力学习。本次设计也让我对未来充满信心。
参考文献
[1]陈国通,刘琪,范圆圆.基于微信小程序的家政服务预约系统设计与实现[J].信息通信,2019(02):122-124.
[2]张茂林,白海涛,王铂智.基于微信小程序的驾校预约系统[J].电子世界,2018(09):161+163.DOI:10.19353/j.cnki.dzsj.2018.09.088.
[3]谢华夏. 基于.NET平台的家政信息交互网站设计与实现[D].电子科技大学,2014.
[4]王圳,马秀博.基于微信小程序设计校园浴室预约系统[J].电脑知识与技术,2021,17(08):89-91.DOI:10.14004/j.cnki.ckt.2021.0646.
[5]李昊楠,刘雅莉.基于微信小程序的图书馆座位预约系统设计[J].现代信息科技,2020,4(06):4-6.DOI:10.19850/j.cnki.2096-4706.2020.06.002.
[6]赵家伟,白花蒲,张恒瑞,苏智恩.基于微信小程序的实验室预约系统开发与实现[J].电脑知识与技术,2020,16(11):80-81.DOI:10.14004/j.cnki.ckt.2020.1382.
[7]陈仕许.MySQL数据库在PHP网页中的动态应用研究[J].信息记录材料,2021,22(09):112-113.DOI:10.16009/j.cnki.cn13-1295/tq.2021.09.052.
[8]赵晓军,倪旺,李家兴,胡向博.基于微信小程序的车位预约设计[J].电视技术,2019,43(Z1):64-66+70.DOI:10.16280/j.videoe.2019.11/12.023.
[9]刘艳秋,卜永波,王冬青,于洪超.基于微信小程序的电影票购票系统设计与实现[J].电脑编程技巧与维护,2021(12):68-70.DOI:10.16184/j.cnki.comprg.2021.12.025.
[10]陈金玲,陈力蔚,胡艳霞.中山市家政服务群体社会管理的对策研究[J].南方论刊,2022(02):44-46+80.
[11]于永力. 福音网络公司家政服务门户网站建设项目成本管理研究[D].吉林大学,2015.
[12]连钦兴,盘炜生,白伟华.基于微信小程序的场馆预约系统设计[J].河南科技,2021,40(31):9-11.
[13]郑新桥.基于微信平台的琴房预约系统的设计[J].数字技术与应用,2021,39(10):225-227.DOI:10.19695/j.cnki.cn12-1369.2021.10.72.
[14]田娟.PHP教学中项目驱动法对计算思维能力培养[J].办公自动化,2021,26(23):17-19.
[15]刘一澎. 基于微信小程序的专家预约系统的设计与实现[D].南京大学,2021.DOI:10.27235/d.cnki.gnjiu.2021.001300.
[16]孙辉. 浅析PHP微服务架构[C]//.第三十五届中国(天津)2021’IT、网络、信息技术、电子、仪器仪表创新学术会议论文集.,2021:286-288.DOI:10.26914/c.cnkihy.2021.013747.
[17]QingHai Yin. Research and Implementation of Network Examination System Based on PHP Language[J]. Journal of Physics: Conference Series,2018,1087(6).
[18]Rotmianto Mohamad,Wahyudi Eko. Developing Plugin e-DDC as an Additional Application for Senayan Library Management System with PHP Language Programming and MySQL Database[J]. Record and Library Journal,2018,2(1).
[19]Krittawaya Thongkoo. Problem-Based Teaching Using the Blended E-Learning System for Learning Php Programming[C]//.Proceedings of 10th International Conference on Advances in Social Sciences (ICASS).,2015:4-5.
致 谢
很快就度过了美好的大学时光,学习了计算机专业各方面的知识,对老师渊博的学识深深的佩服,老师不光教会了我们专业的知识,还教会了我们很多做人处事的道理,所以在这毕业之际,要深深的要各位老师表示感谢。还要感谢我的答辩指导老师,在整个毕业设计的过程中,给与了我很大的帮助和指导,从选题阶段到写任务书,到设计的实现和最终的完成,给我提供了好多宝贵的意见,而且在我遇见难题的时候及时的给我帮助,如果没有老师的辅导,我相信也不能这么顺利的完成我的设计。老师严谨的教学态度,是我们不断学习和前进的榜样。我一定要好好学习来回报我的母校,回报我的老师,老师,你辛苦了。最后还要感谢陪伴我一起成长一起学习的同学,因为有了你们,大学生活才变的多姿多彩,让我们一起努力,一起加油,共同开创更美好的明天。
核心代码
<?php
session_start();
class FuwuyuyueController extends CommonController {
public function __construct()
{
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
header('Access-Control-Allow-Headers:Origin,Content-Type,Accept,token,X-Requested-With,device');
}
public $columData = [
'id','addtime'
,'fuwumingcheng'
,'fuwuneirong'
,'fuwushouze'
,'yuyueshijian'
,'xiaoshijiage'
,'fuwushizhang'
,'zongfeiyong'
,'lianxidianhua'
,'xiangqing'
,'tupian'
,'yuangonggonghao'
,'kehuzhanghao'
,'kehuxingming'
,'kehushouji'
,'dengjishijian'
,'ispay'
,'thumbsupnum'
,'crazilynum'
,'userid'
];
/**
* 分页,列表
* get
*/
public function page(){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$where = " where 1 ";//查询条件
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'yuangong') {
$where .= " and `yuangonggonghao` = '".$tokens['username']."' ";
}
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'kehu') {
$where .= " and `kehuzhanghao` = '".$tokens['username']."' ";
}
$page = isset($_REQUEST['page'])?$_REQUEST['page']:"1";
$limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10";
$sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id";
$order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc";
foreach ($_REQUEST as $k => $val){
if(in_array($k, $this->columData)){
if ($val != ''){
$where.= " and ".$k." like '".$val."'";
}
}
}
$base = json_decode(base64_decode($token),true);
if ($base['isAdmin']!=1 || ($base['isAdmin']==1 && $base['tablename'] != "users")){
$md5 = md5($userid."+10086");
$colum = "yuangonggonghao";
$columData = $base['columData'];
if (isset($_SESSION[$md5]) && in_array($colum, $columData)){
if($base['tablename'] == 'yuangong'){
$where .= " and `yuangonggonghao` = '".$_SESSION[$md5]."'";
}
}
}
$base = json_decode(base64_decode($token),true);
if ($base['isAdmin']!=1 || ($base['isAdmin']==1 && $base['tablename'] != "users")){
$md5 = md5($userid."+10086");
$colum = "kehuzhanghao";
$columData = $base['columData'];
if (isset($_SESSION[$md5]) && in_array($colum, $columData)){
if($base['tablename'] == 'kehu'){
$where .= " and `kehuzhanghao` = '".$_SESSION[$md5]."'";
}
}
}
$sql = "select * from `fuwuyuyue` ".$where;
$count = table_sql($sql);
if ($count->num_rows < 1){
$numberCount = 0;
}else{
$numberCount = $count->num_rows;
}
$page_count = ceil($numberCount/$limt);//页数
$startCount = ($page-1)*$limt;
$lists = "select * from `fuwuyuyue` ".$where." order by ".$sort." ".$order." limit ".$startCount.",".$limt;
$result = table_sql($lists);
$arrayData = array();
if ($result->num_rows > 0) {
while ($datas = $result->fetch_assoc()){
array_push($arrayData,$datas);
}
}
exit(json_encode([
'code'=>0,
'data' => [
"total" => $numberCount,
"pageSize" => $limt,
"totalPage" => $page_count,
"currPage" => $page,
"list" => $arrayData
]
]));
}
/**
* 分页,列表list
* get
*/
public function lists(){
$page = isset($_REQUEST['page'])?$_REQUEST['page']:"1";
$limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10";
$sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id";
$order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc";
$refid = isset($_REQUEST['refid']) ? $_REQUEST['refid'] : "0";
$where = " where 1 ";//查询条件
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'yuangong') {
$where .= " and `yuangonggonghao` = '".$tokens['username']."' ";
}
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'kehu') {
$where .= " and `kehuzhanghao` = '".$tokens['username']."' ";
}
foreach ($_REQUEST as $k => $val){
if(in_array($k, $this->columData)){
$where.= " and ".$k." like '".$val."'";
}
}
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$token = $this->token();
$base = json_decode(base64_decode($token),true);
$userid = $base['id'];
if ($base['isAdmin']!=1){
$md5 = md5($userid."+10086");
$colum = "yuangonggonghao";
$columData = $base['columData'];
if (isset($base['success'][$colum]) && in_array($colum, $columData)){
$where .= " and `yuangonggonghao` = '".$base['success'][$colum]."'";
}
}
$token = $this->token();
$base = json_decode(base64_decode($token),true);
$userid = $base['id'];
if ($base['isAdmin']!=1){
$md5 = md5($userid."+10086");
$colum = "kehuzhanghao";
$columData = $base['columData'];
if (isset($base['success'][$colum]) && in_array($colum, $columData)){
$where .= " and `kehuzhanghao` = '".$base['success'][$colum]."'";
}
}
$sql = "select * from `fuwuyuyue`".$where;
$count = table_sql($sql);
if ($count->num_rows < 1){
$numberCount = 0;
}else{
$numberCount = $count->num_rows;
}
$page_count = ceil($numberCount/$limt);//页数
$startCount = ($page-1)*$limt;
$lists = "select * from `fuwuyuyue` ".$where." order by ".$sort." ".$order." limit ".$startCount.",".$limt;
$result = table_sql($lists);
$arrayData = array();
if ($result->num_rows > 0) {
while ($datas = $result->fetch_assoc()){
array_push($arrayData,$datas);
}
}
exit(json_encode([
'code'=>0,
'data' => [
"total" => $numberCount,
"pageSize" => $limt,
"totalPage" => $page_count,
"currPage" => $page,
"list" => $arrayData
]
]));
}
/**
* 新增数据接口
* post
*/
public function save(){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$keyArr = $valArr = array();
$tmpData = strval(file_get_contents("php://input"));//Content-Type: application/json 需要用到php://input 处理输入流
if (!empty($tmpData)&& isset($tmpData)){
$postData = json_decode($tmpData,true);
$postData['userid'] = $uid;
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if(!empty($value) || $value == 0) {
if ($key == 'id') {
continue;
}
array_push($keyArr,"`".$key."`");
if($key == 'clicktime') {
array_push($valArr,"'".date('Y-m-d h:i:s', time())."'");
} else {
array_push($valArr,"'".$value."'");
}
}
}
}
}
$k = implode(',',$keyArr);
$v = implode(',',$valArr);
$sql = "INSERT INTO `fuwuyuyue` (".$k.") VALUES (".$v.")";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 新增数据接口 add
* post
*/
public function add(){
$keyArr = $valArr = array();
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$tmpData = strval(file_get_contents("php://input"));
if (!empty($tmpData)&& isset($tmpData)){
$postData = json_decode($tmpData,true);
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$postData['userid'] = $uid;
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if(!empty($value) || $value == 0) {
if ($key == 'id') {
continue;
}
array_push($keyArr,"`".$key."`");
if($key == 'clicktime') {
array_push($valArr,"'".date('Y-m-d h:i:s', time())."'");
} else {
array_push($valArr,"'".$value."'");
}
}
}
}
}
$k = implode(',',$keyArr);
$v = implode(',',$valArr);
$sql = "INSERT INTO `fuwuyuyue` (".$k.") VALUES (".$v.")";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 更新接口
* post
*/
public function update(){
$tmpData = strval(file_get_contents("php://input"));
$postData = json_decode($tmpData,true);
$v = array();
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if ($key == "id"){
$id = $value;
}
if(!empty($value) || $value === 0) {
array_push($v,$key." = '".$value."'");
}
}
}
$value = implode(',',$v);
$sql = "UPDATE fuwuyuyue SET ".$value." where id = ".$id;
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 删除
* post
*/
public function delete(){
$ids = strval(file_get_contents("php://input"));//发现接收的是字符串
preg_match_all('/\d+/',$ids,$arr);
$str = implode(',',$arr[0]);//拼接字符,
$sql = "delete from fuwuyuyue WHERE id in({$str})";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 查询一条数据
* get
*/
public function info($id=false){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$name = isset($_REQUEST['name'])? $_REQUEST['name']:"";
if (!empty($id)){
$where = "`id` = ".$id;
}else{
$where = "`name` = ".$name;
}
$sql = "select * from `fuwuyuyue` where ".$where;
$result = table_sql($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
$lists = $row;
}
}
exit(json_encode([
'code'=>0,
'data'=> $lists
]));
}
/**
* 查询一条数据
* get
*/
public function detail($id=false){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$name = isset($_REQUEST['name'])? $_REQUEST['name']:"";
if ($id){
$where = "`id` = ".$id;
}else{
$where = "`name` = ".$name;
}
$sql = "select * from `fuwuyuyue` where ".$where;
$result = table_sql($sql);
if (!$result) exit(json_encode(['code'=>500,'msg'=>"查询数据发生错误。"]));
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
$lists = $row;
}
}
exit(json_encode([
'code'=>0,
'data'=> $lists
]));
}
/**
* 按值统计接口
**/
public function value(){
$url = explode('?',$_SERVER['REQUEST_URI']);
$request = explode('/',$url[0]);
$xColumnName = $request[4];
$yColumnName = $request[5];
$sql = "SELECT ".$xColumnName.",sum(".$yColumnName.") total FROM fuwuyuyue group by ".$xColumnName;
if(urldecode($request[6]) == '日') {
$sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m-%d') ".$xColumnName.", sum(".$yColumnName.") total FROM fuwuyuyue GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m-%d')";
}
if(urldecode($request[6]) == '月') {
$sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m') ".$xColumnName.", sum(".$yColumnName.") total FROM fuwuyuyue GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m')";
}
if(urldecode($request[6]) == '年') {
$sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y') ".$xColumnName.", sum(".$yColumnName.") total FROM fuwuyuyue GROUP BY DATE_FORMAT(".$xColumnName.", '%Y')";
}
$result = table_sql($sql);
if ($result->num_rows > 0) {
// 输出数据
$total = array();
while($row = $result->fetch_assoc()) {
array_push($total,array('total' => intval($row['total']),$xColumnName => $row[$xColumnName]));
}
}
exit(json_encode(['code'=>0,'data'=>$total]));
}
/**
* 赞和踩
**/
public function thumbsup($id=false){
$type = isset($_REQUEST['type'])?$_REQUEST['type']:"";
if ($type==1){
$result = $this->andone('fuwuyuyue',$id,$column = 'thumbsupnum',$num = 1);
}else{
$result = $this->andone('fuwuyuyue',$id,$column = 'crazilynum',$num = 1);
}
exit(json_encode(['code'=>0,'msg'=>"投票成功"]));
}
/**
* 获取需要提醒的记录数接口
* get
*/
public function remind($columnName,$type){
$remindStart = isset($_GET['remindstart'])?$_GET['remindstart']:"";
$remindEnd = isset($_GET['remindend'])?$_GET['remindend']:"";
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
$where = " where 1 ";//查询条件
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'yuangong') {
$where .= " and `yuangonggonghao` = '".$tokens['username']."' ";
}
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'kehu') {
$where .= " and `kehuzhanghao` = '".$tokens['username']."' ";
}
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$where .= " and `userid` = '".$uid."'";
if ($type == 1){//数字
if ($remindStart && $remindEnd){
$where .= " and ".$columnName."<='".$remindEnd."' and ".$columnName.">='".$remindStart."'";
}elseif($remindStart){
$where .= " and ".$columnName.">='".$remindStart."'";
}elseif($remindEnd){
$where .= " and ".$columnName."<='".$remindEnd."'";
}
}else{
if ($remindStart && $remindEnd){
$where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."' and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'";
}elseif($remindStart){
$where .= " and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'";
}elseif($remindEnd){
$where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."'";
}
}
$sql = "select * from `fuwuyuyue` ".$where;
$result = table_sql($sql);
exit(json_encode(['code'=> 0 ,'count' => $result->num_rows]));
}
}