基于ThinkPHP框架的工控品采购平台设计与实现
2020-03-20谷恪忱
摘 要:为了引导更多的工控厂家参与快捷方便的线上采购,改善当下工控品线上规模与线下规模不匹配的状况,采购平台根据专业工控工作人士的建议需求,使用基于PHP技术的ThinkPHP框架与MySQL数据库搭建业务后端,Bootstrap框架设计友好、直观的用户交互界面。同时搭配合适的聚类、分类等算法结合后台数据库做数据统计,为用户提供专业、便捷、高效的购买方案。应用上述模式方案设计的采购平台,经测试在高并发量的情况下性能良好,大约平均每秒处理10次请求,平均响应时间在3至5秒。基于ThinkPHP框架开发的线上工控品采购平台完全可以胜任一般厂家的业务需求,并给予厂家便利。
关键词:工控品;采购平台;ThinkPHP框架;数据统计;性能
中图分类号:TP3-0 文献标识码:A
Abstract:For the purpose that guiding more industry manufactures to participate in easy,quick online purchase and ameliorating the mismatch purchase scale of industrial devices between online purchase and offline purchase,according to industrial professional's suggestion and demand,purchasing platform adopts the ThinkPHP framework based on PHP with MySQL Database technique to build the backend,and adopts bootstrap framework to build the friendly,intuitively interactive frontend.Meanwhile,this paper selects suitable algorithms such as clustering algorithms and classification algorithms combined with the database to conduct data statistics,which provides a professional,convenient,and efficient purchasing scheme for the customers.The purchasing platform that adopts the model mentioned above was tested with highly concurrent cases and showed good performance for dealing with ten requests per second,resulting in an average response time of three to five seconds approximately.The online platform based on the ThinkPHP framework is good enough to deal with demands from common manufactures and provide them with convenience.
Keywords:industrial devices;purchasing platform;ThinkPHP framework;data statistics;performance
1 引言(Introduction)
工控,即工業自动化控制,结合计算机、微电子、电气等技术手段,实现在工业生产过程中采用机械设备代替人力劳动,将生产变得智能、高效、精确、可控[1]。工控技术的出现使工业生产带来了第三次革命,生产效率较传统生产模式实现了质的飞越,已经成为衡量一个国家工业与制造业发展水平的重要指标。然而,工控行业由于其专业性,却没有很好地与当下电商行业相结合。随着大数据、云计算、人工智能等技术的出现,全世界已经开始走向第四次工业革命,因此提供一种快速、简便的方法使得工控制造业过渡到“互联网+”线上时代是非常必要的[2-4]。
陈米力等[5]指出了工业4.0时代下不少专注工控领域的电商平台发展模式落后,缺少专业服务,没有产业价值链的话语权,无法与厂商达成完全的信任沟通等是阻碍平台经营壮大的痛点,并提出了集阳光一站式采购、场景导航、虚拟体验、供应链协同、专业化支持等创新服务模式为一体的架构方案,但缺乏实际的行动验证。流程工业智能工厂的未来发展[6]一文则从生产厂家出发,提出了基于IT互联网的技术的新智能共享工厂架构,解决当下国内大部分厂商仍采用传统自动化解决方案的问题,是一种升级理念,但却无法做到短时间快速实现。
本文通过介绍使用ThinkPHP框架的软件开发技术,提供促进线上销售与工控行业匹配的采购平台设计方式与思想,弥补了上述文献缺乏实践与短时无法实现的不足,让更多的IT从业人员与工控行业专业人士参与到工控的电商化进程。
2 技术简介(The brief introduction of technology)
2.1 PHP语言
PHP(Hypertext Preprocessor),中文名超文本处理器,是一种运行在服务器端的开源脚本性编程语言,其融合了C、Java、Perl等其他多种编程语言的语法与优点,具有小巧轻便,运行快捷,简单易学且支持跨平台的特性,被广泛应用于Web端和移动端程序的开发[7]。
2.2 ThinkPHP框架
ThinkPHP是一款开源免费,基于PHP5版本和Apache2协议的国产轻量级应用框架,秉承简洁实用的设计原则,致力于简化企业级应用和敏捷WEB应用的开发过程[7]。其核心运作于ThinkTemplate内置模板引擎,使用动态编译和缓存技术,保证了开发速度与运行效率,拥有良好的安全性、可拓展性[8]。ThinkPHP 5.0版本框架融合了丰富的PHP特性,提供了大量简便的框架API,在使用体验和性能等各方面都较为出色,受到当下国内众多程序设计者的青睐[9]。
2.3 Bootstrap框架
Bootstrap是由美国Twitter公司开发的一个前端设计工具包,本质是一个CSS/HTML框架,配有多项JavaScript插件提供对JQuery库引用的支持[10]。使用Bootstrap可大大简化Web网站界面的设计,前端设计者仅需在合适的HTML标签中添加样式类名即可快速实现界面的显示效果设置。此外,Bootstrap对JQuery的插件支持使得Ajax技术应用十分方便,前后端可以完美地实现异步局部界面更新与数据交换。
3 需求分析(Demand analysis)
基础材料、基础零部件(元器件)、基础工艺和产业技术基础(简称“四基”)构成了整个工业的基础能力,我国由于在工控业起步较晚,在基础环节长期存在短板,所幸近年来出现技术突破,逐渐打破了提升的制约。
就当下工控行情而言,工控业产品的销售对象主要为生产智能自动化成品(如数字电视、智能冰箱、微波等家具)的企业厂家,而卖家则为提供生产所需基础器件等中间设备的公司[11]。另外,工控涵盖的生产范围非常之广,因而专业、便捷的采购需要将工控细分为多个子行业,并根据行业的制造过程进行购买流程和方案的设计。
根据业内人士的说法,工控业采购可按照机器人、机床工具、纺织机械、包装机械、食品机械、塑料机械、印刷机械、泵业设备等领域的应用进行分类并细化购买方案的构建。
4 模块划分(The division of platform module)
采购平台的模块划分主要基于前后端交互时都涉及的行为,而非单纯地基于前台界面或后台操作,因此结合前述需求和商城的结构可将平台概括划分为以下四大模块:
(1)验证模块:包括用户的注册、登录、找回密码、信息修改操作。注册应该细分为个人还是企业厂家,并通过提交相应的有效证件信息完成认证(身份证、企业厂家营业执照等)。验证方式多样化,可通过短信验证码、邮箱验证码、密码、邀请码等多种方式实现注册、登录、找回密码的验证。此外还应让入驻用户选择主要参与或感兴趣的工控子行业领域。
(2)推送模块:主要涉及热门器件与购买方案的推送,另外还有关于采购平台升级变动、入驻准则、疑难解答等通知与服务的展示。这里较为专业的推送应根据用户主要从事的工控领域进行筛选,此外还应结合用户平时的关键词搜索频率做智能的推荐。
(3)筛选模块:该模块是整個采购平台的核心模块,也是工控业采购专业性、复杂性体现最明显之处,用户可按单品或按流程方式购买,每个单品都有配有使用说明书,可供用户下载参阅,并且应提示用户该器件适用于哪一生产环节的应用,单品可以加入购物车。按流程购买则应根据某一工控成品的完整生产流程来划分,对于每个环节,用户可以按市场占比、销量、品牌、种类等多种方式对相应的工控器件进行筛选,在某些生产环节,还可以推荐可雇佣的专业人员,最终产生的购买组合会被作为一种购买方案加入后台,用于后续统计分析工作,此外专业的采购平台还应提供诸如VR溯源技术的真实场景体验等,让购买切身体会物件的用途。
图1以雕刻机生产工艺为例展示了按流程购买的一种概念模型,重点参考第二步与第四步。
(4)结算模块:结算模块也是采购平台非常重要的一部分,包括收货信息录入,订单生成,订单支付,订单情况查看等。生成的订单信息要保证用户的联系方式、收货地址不出错,支付阶段调用银联、支付宝、微信等第三方支付接口时还要考虑到安全性等。
5 界面设计(The design of user interface)
鉴于采购平台是一个庞大的系统,单纯地凭借常识和经验直接设计后端数据库不能保证较高的准确性与完整性,因此应该先以使用者的身份做好整个平台的界面UI设计,待有良好的体验后再进行中间过程的数据传递分析,设计数据库字段。
5.1 前台界面
前台界面可以理解为采购平台的公开部分,即向购买用户展示的界面,具体应包括主导航页、推送通知页、用户信息页、登录注册页、找回密码页、单品详情页、流程筛选页、购物车页、订单录入页、订单结算页、第三方支付页(可选)等。
图2展示了前台界面的主要结构,由图可见界面还与平台的总体模块划分相对应(见第3点模块划分)。
5.2 后台界面
与前台界面相对应的,后台界面作为采购平台的私有部分,即向管理员或入驻企业展示的数据管理界面,应结合后端对数据的CURD功能进行设计,从而实现数据的可视化操作。按照功能可将后台界面分为用户管理、品牌管理、推荐位管理、消息管理、图片管理、行业管理、产品管理、订单管理等子模块。
为了方便读者更好地了解后台管理的功能,下面再对后台界面的主要子模块做简要介绍:
用户管理:即对注册用户的信息管理(分为个人和企业),通常只用于注册时的信息审核,仅有超级管理员拥有修改的权限。
品牌管理:也可以理解为卖家管理,主要是对入驻提供商品的企业厂家进行营业合法审核,此外还进行信誉度、销量等数据统计分析作为向用户推荐购买的衡量因素。
推荐位管理:管理在前台对应推荐位置的产品或购买方案。
消息管理:可以编辑文字信息,生成链接,推送通知给用户。
图片管理:由于需要动态更换的图片量大,因此应专门设计图片管理模块对各个前台界面需展示的图片进行调配,包括图片的各种放大、缩略、压缩处理。
行业管理:主要针对流程过程中的按行业筛选购买进行管理,设置的筛选条件有品牌、型号、占比等多种因素。
产品管理:即对应单品展示页的商品介绍、详细参数、产品说明书、占比、销量等重要数据的管理。可以在该模块修改产品介绍、规格信号、所属流程等信息,并上传产品说明书供用户下载。
订单管理:后台管理中非常重要的一环,审核订单信息,用于后续的产品发货与售后服务。
图3展示了后台界面的主要结构。
6 数据库构建(Database construction)
在拥有完整UI界面实现的基础上,我们要从原本完全静态的部分中剖离出需要动态改变的文字、图片、音频信息,绘制ER图,仔细分析各数据信息间的依赖关系,谨慎设计各数据表的字段,设置主外键、存储过程、触发器。图4是以用户购买场景构建的ER图示例。
采购平台的数据库选用MySQL,鉴于其与PHP良好的适配性,加上平台发展初期的采购并发量不高,以MySQL的性能完全足以胜任通常的购买业务。此外,MySQL体积小、成本低,如此高的性价比是任何商业应用的不二之选[12]。当然,到发展成熟期,对业务的承载处理量要求更高时,可以考虑使用Oracle等性能更好的大型数据库。
实际的构建过程可以使用数据库可视化工具,如MySQL Workbench、Navicat for MySQL、phpMyAdmin等,免去了使用传统SQL语言创建的繁杂过程,仅需在细节处修改。
在这里以industry表(行业表)为例,见表1。
另外,如核心数据表goods表(产品表)应有产品号(主键)、产品名、原图url、缩略图url、价格、是否上架、所属流程、机型、品牌、描述、重量、单位、说明书地址、推荐指数等字段,为方便后续提供专业服务与数据统计。
7 技術实现(The realization of technology)
对于采购平台这样一个体系庞大的商业应用网站,如何方便高效地处理繁杂的中间数据传递过程是关键,这也是笔者介绍使用ThinkPHP框架进行后端开发的原因。
在IT行业中众所周知,PHP技术一向只适合中小型应用程序的快速开发,对于大型高性能网站,原生PHP一般难以胜任,其中的一大诟病便是其只能将PHP脚本代码内嵌至HTML标签中[13],后端的全部业务处理逻辑与前端代码完全混杂,一旦业务应用量庞大便会出现开发效率低下、运行速度慢的问题,并且由于核心代码直接暴露,安全性也不佳。然而,ThinkPHP框架完美地解决了原生PHP带来的缺陷。
ThinkPHP框架使用MVC(模型、视图、控制器)设计模式[14],实现了业务层与表示层的完全分离,使得仅使用PHP进行开发也能符合分布式应用体系规范,同时在安全、性能上也上了好几个台阶,可与经典的JSP(Java Servlet Pages)动态网页设计技术相媲美。
下面将就ThinkPHP5.0应用框架的目录结构说明设计模式的实现细节,为了节省篇幅,仅对重点目录做介绍。
7.1 整体目录结构呈现
图5展示了采购平台目录的整体结构,其中多出的分割水平线“——”代表该目录或文件是上一个目录的子文件,“*”号代表笔者为实现功能额外添加的目录,此外省略部分为框架默认提供的文件与目录[15]。
ThinkPHP框架的MVC设计模式就体现在这一层目录结构上,controller、model、view子目录分别对应经典分布式应用体系中的业务层(Business Layer)、核心层(Data Layer)、表示层(Presentation Layer)。简单的业务逻辑写在controller层,model层负责将某些复杂的数据查询操作封装后供controller层调用,而view作为表示层负责将从controller传递来的数据显示。在图5中还可看到笔者添加了验证器目录,该目录主要用于规定配置在某些特定场景下对用户输入的信息格式(包括长度、精度、是否唯一等)与相应的反馈信息,是ThinkPHP框架提供的一种快捷验证拓展功能,应用十分广泛。
以下是数据传递的简单代码示例:
后端控制器部分代码:
<?php
……
$inds = db('industry')->where('pid',$ind3['id'])->where('or',2)->field('name')->select();//获取该行业下流程
$this->assign([
'inds'=>$inds, //将查询所得数据分配至前端界面
]);
……
return view(); //调用模板渲染函数
?>
前端获取调用代码:
……
{volist name='inds' id='inds'} <!- - 取出后端传递来的数据对象 - ->
{/volist}
……
由示例代码可见数据的传递过程十分简单,在后端代码中调用类的$this->assign方法分配数据集对象,相应的在前端页面取出对象,使用模板标签显示对象的成员数据即可。
7.3 其他技术实现概要
根据图4所示的应用目录结构,采购平台在一些额外功能的技术实现上通常都会使用拓展类库和第三方库文件,对应地在extend和vender目录中存放PHP库文件。
接下来简要介绍采购平台验证码功能的实现。
验证码分为短信验证码和邮箱验证码,其中短信验证码笔者使用的是国内开发商提供的自定义类库,放置于extend目录下,而邮箱验证码的实现则是通过ThinkPHP5.0版本框架的依赖管理工具Composer下载PHP通用第三方库PHPMailer,放置于vendor目录下。
调用发送短信验证码的关键代码示例:
<?php
……
$clapi=new SmsApi(); //创建短信接口API对象,
$code=mt_rand(100000,999999);
$tipMsg='';
if($password==0){
$tipMsg='您好,您的验证码是'. $code;
}
……
$result=$clapi->sendSMS($phoneNum, $tipMsg); //根据电话号码发送短信验证码
……
?>
调用邮箱发送关键代码示例:
<?php
……
$mail=new PHPMailer(true); // 创建PHPMailer对象 true代表创建的对象支持使用stmp方式发送邮件
……
$mail->setFrom("xxx@xxx.com","PHP采購平台"); // 邮件发送地址设置
$mail->Password="xxxxxx"; // 邮箱stmp登录授权码
$mail->Port=xxx; // 端口号请参见你使用的邮箱提供的说明
$mail->addAddress($to); // 添加发送地址
$mail->addReplyTo($to); // 添加回复地址
$mail->Subject=$title; // 邮件标题
$mail->Body=$content; // 邮件内容
$sendRes=$mail->send(); // 发送邮件
……
?>
诸如上述的库调用在采购平台的其他功能实现上应用的非常多,结合JavaScript与Ajax技术可以很好地实现业务需求。
8 算法介绍(The introduction of algorithm)
采购平台所要处理的数据量是非常复杂多样的,因此,为了应对大规模数据和方便数据统计做智能推荐,采用当下常用的数据挖掘、机器学习算法非常有必要。下面介绍两种基本的常见算法。二者分别是划分聚类与层次分类算法的典型代表[16]。
8.1 K-means算法
基本思想是将给定的数据集(样本集)赋以一质心(均值向量),根据数据点与质心的欧式距离大小将数据划分为k个类簇(类别),让同簇内的数据点的欧式距离尽量近(通过最小化方差实现),反之非同簇则尽量远[17]。
K-means算法通常可以应用于维数、数值都很小且连续的数据集,如文档分类、乘车数据分析、网络分析犯罪分子。与采购平台相契合的应用是过滤推荐与客户分类,通过用户的购买历史、兴趣、活动监控等方式逐渐筛选出具有不同特征的用户,根据用户喜好推荐[18]。
但由于K-means算法本身存在全局搜索能力差、对初始聚类中心依赖性大、聚类效率和精度低,易陷入局部最优解等缺点,通常而言还需要配合其他算法弥补缺陷,其中,由吴金李等提出的二分K-means的协同过滤推荐算法数据稀疏率低,聚类效果良好[19],另外如用遗传算法的染色体基因表示聚类中心点,结合Hash散列算法将高维度聚类中心压缩至低维标识空间等都可[20]。
8.2 决策树算法
最经典的决策树算法当属机器学习研究者J.Ross Quinlan在1986年提出的ID3算法[21,22]。
ID3算法中的信息熵、条件熵、信息增益可分别用公式表达如下:
其中,为D取值i的概率,n代表D的n种不同取值。
算法流程:
(1)初始化信息增益的阈值。
(2)判断样本是否为同一类输出,如果是则返回单节点树T,标记类别为。
(3)判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
(4)计算A中的各个特征(一共n个)对输出D的信息增益,选择信息增益最大的特征。
(5)如果的信息增益小于阈值,则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
(6)否则,按特征的不同取值将对应的样本输出D分成不同的类别。每个类别产生一个子节点,对应特征值为,返回增加了节点的树T。
(7)对于所有的子节点,令递归调用2—6步,得到子树并返回。
与K-means算法类似,ID3算法由于存在着无法处理连续值、属性偏向、对噪声敏感等问题也受到了众多算法研究者的关注与改进,比较著名的如C4.5算法,同样由J.Ross Quinlan在1993年改进提出,采用连续特征离散化、信息增益率加权、剪枝等手段解决了ID3比较明显的缺陷。
决策树算法理论上能应用于各种具有筛选因素的分类,因此通过统计某器件的购买次数、反馈度等因素进行统计,设置合理阈值,将能很好地将采购平台的各种产品按层次好坏多级分类。当然改进的决策树算法也能进行构建回归模型,主要看业务需求。
9 运行评估(The evaluation of platform's performance)
在采购平台开发完成后,需要设计测试用例检验平台运行性能。通过借助ThinkPHP框架的日志工具,我们可以非常方便地对服务器的运行性能进行评估,在配置文件config.php中选择输出参数以获得结果[23]。
如查看加载某个行业购买流程界面的运行状况,在日志中输出为:
[info] ……/index/industry/index?id=102 [运行时间:0.162680s][吞吐率:6.15req/s] [内存消耗:3,415.72kb] [文件加载:62]
当然,也可以采用运维测试工具提供的压力测试法,结果更为可靠专业[24]。这里以Apache Bench为例,在终端中输入命令:
ab-n 1000-c 100 http://....../index/industry/index?id=100
即自动进行在100用户并发使用情况下,进行1000次请求的运行状况统计,这里仅给出三个重要性能参数:
Requests per second: 19.25 [#/sec] (mean) //每秒处理请求数
Time per request: 5194.934 [ms] (mean) //并发时的平均请求等待时间
Percentage of the requests served within a certain time (ms)
……
90% 17738 //执行完90%请求所用时间
……
根据结果,使用ThinkPHP框架搭建的服务器性能优良,足以负担采购平台的常规业务。
10 结论(Conclusion)
本文结合当下国内工控业发展现状,提出了一种基于ThinkPHP框架的通用、快速的设计工控采购平台的方法,详述了从UI界面设计到后台数据库搭建的整体实现细节。通过实践研究,整理了归纳了设计线上平台所需的技术、算法,以及适配工控行业的特殊功能,以应对因其专业性造成的采购门槛高问题。预计到2020年,我国工控产业市值将达到2000亿,届时将会有更多的线上专业采购平台应运而生[25]。当然,随着业务量增加与性能要求的不断提高,ThinkPHP框架可能不再适应企业需求,而被更高性能的其他技术框架(如Spring Boot等)替代,但是基本的设计思想和模式是类似的,遵循工控行业规范的采购平台将能更好地受到厂家青睐。
参考文献(References)
[1] 张立克,常建军.工控机的现状与前景[J].水利电力机械,2007,29(3):64-66;71.
[2] LI Guoping,HOU Yun,WU Aizhi.Fourth Industrial Revolution:Technological Drivers,Impacts and Coping Methods[J].Chinese Geographical Science,2017,27(04):626-637.
[3] James M.TIEN.THE NEXT INDUSTRIAL REVOLUTION:INTEGRATED SERVICES AND GOODS[J].Journal of Systems Science and Systems Engineering,2012,21(03):257-296.
[4] Alin ST?NCIOIU.THE FOURTH INDUSTRIAL REVOLUTION "INDUSTRY 4.0" [J].Fiabilitate ?i Durabilitate,2017,1(19):74-78.
[5] 陳米力,陈扬帆,林秋艳.工业4.0背景下的工控电子商务模式研究[J].制造业自动化,2015,37(04):146-147;150.
[6] 褚健.流程工业智能工厂的未来发展[J].科技导报,2018,36(21):23-29.
[7] 王俊芳,李隐峰,王池.基于MVC模式的ThinkPHP框架研究[J].电子科技,2014,27(4):151-153;158.
[8] 董玉霞.基于ThinkPHP框架的网上商城系统的设计与实现[J].信息与电脑(理论版),2016(14):86-88;90.
[9] 序言·ThinkPHP5.0完全开发手册·看云[EB/OL]. https://www.kancloud.cn/manual/thinkphp5/118003.
[10] Bootstrap·The most popular HTML,CSS,and JS library in the world[ EB/OL]. https://getbootstrap.com.
[11] 包冉.工控机市场:布局5年后[N].计算机世界,2004-4-12(E20).
[12] 赵鹤芹.设计动态网站的最佳方案:Apache+PHP+MySQL [J].计算机工程与设计,2007(4):933-934;938.
[13] 渠芳,曹志梅..ASP、PHP和JSP技术的比较研究[J].现代情报,2002(7):50-52.
[14] 谢敏,程适.基于ThinkPHP框架的家教信息管理系统设计与实现[J].软件导刊,2018,17(07):128-131.
[15] 目录结构·ThinkPHP5.0完全开发手册·看云[EB/OL]. https://www.kancloud.cn/manual/thinkphp5/118008.
[16] 聚类算法[EB/OL].https://www.cnblogs.com/fionacai/p/5873975.html.
[17] K-Means聚类算法原理[EB/OL].https://www.cnblogs.com/pinard/p/6164214.html.
[18] K-Means算法的10个有趣用例[EB/OL].https://blog.csdn.net/yunqiinsight/article/details/80134331.
[19] 吴金李,张建明.基于二分K-means的协同过滤推荐算法[J].软件导刊,2017,16(01):26-29.
[20] 孟佳伟,孙红.基于Hadoop平台的K-means算法优化综述[J].软件导刊,2017,16(06):208-211.
[21] 决策树算法原理(上)[EB/OL].https://www.cnblogs.com/pinard/p/6050306.html.
[22] 謝妞妞.决策树算法综述[J].软件导刊,2015,14(11):63-65.
[23] 日志驱动·ThinkPHP5.0完全开发手册·看云[EB\OL]. https://www.kancloud.cn/manual/thinkphp5/118126.
[24] 张能立,欧阳毅.如何对Web应用程序进行压力测试[J].计算机与数字工程,2006(08):90-93.
[25] 新时代证券.行业研究:工控自动化行业深度报告:跟随到超越我国工控崛起正当时[EB/OL].http://stock.qq.com/a/20180716/029076.htm.
作者简介:
谷恪忱(1997-),男,本科生.研究领域:软件工程,嵌入式软件开发.