lgy 44a8311124 xg 4 perce
..
application 470288edfd first 19 órája
config 44a8311124 xg 4 perce
extend 470288edfd first 19 órája
public 470288edfd first 19 órája
route 470288edfd first 19 órája
tests 470288edfd first 19 órája
thinkphp 82b749740f second 19 órája
tmp 470288edfd first 19 órája
vendor 82b749740f second 19 órája
.env_lc 470288edfd first 19 órája
.env_lc-yd 470288edfd first 19 órája
.env_yd 470288edfd first 19 órája
.gitignore 470288edfd first 19 órája
.travis.yml 470288edfd first 19 órája
CHANGELOG.md 470288edfd first 19 órája
EGSl1AtmEq.txt 470288edfd first 19 órája
LICENSE.txt 470288edfd first 19 órája
README.html 470288edfd first 19 órája
README.jpeg 470288edfd first 19 órája
README.md 470288edfd first 19 órája
README.pdf 470288edfd first 19 órája
README.png 470288edfd first 19 órája
build.php 470288edfd first 19 órája
composer.json 470288edfd first 19 órája
composer.lock 470288edfd first 19 órája
dev 470288edfd first 19 órája
dev.sh 470288edfd first 19 órája
phpunit.xml 470288edfd first 19 órája
sleep.sh 470288edfd first 19 órája
test.sh 470288edfd first 19 órája
think 470288edfd first 19 órája

README.html















中世康恺RIS3.0文档说明


1. 架构说明


  该项目使用PHP7.1,框架使用TPv5.1.37 LTS,数据使用的是Mysql5.6+,缓存使用Redis+文件缓存,服务器部署在centos7+的linux环境下,通过php-fpm启动使用nginx对外提供接口





    1. ThinkPHP github地址 中文文档





    1. 单元测试使用的是TP的think-testing=2.0.*拓展,它是基于PHPUnit(中文文档)的





    1. 项目目录层次图如下




server 项目根目录
├─application 应用目录(tp)
│ ├─api 模块目录
│ │ ├─behavior hook目录(负责处理tp生命周期函数)
│ │ ├─controller 控制器目录
│ │ ├─dao 数据访问层目录
│ │ ├─error 错误处理目录
│ │ ├─model 模型层目录
│ │ ├─request 请求目录
│ │ ├─resources 资源配置文件
│ │ ├─schedule 定时任务目录
│ │ ├─response 响应目录
│ │ ├─servies 业务逻辑层目录
│ │ ├─utils 工具类目录
│ │ └─validate 数据校验目录
│ │
│ ├─common 公共模块目录
│ │ ├─base 基类目录
│ │ │ ├─actions 通用行为目录
│ │ │ ├─controller 控制器目录
│ │ │ ├─dao 数据访问层目录
│ │ │ ├─error 错误处理目录
│ │ │ ├─model 模型层目录
│ │ │ ├─request 请求目录
│ │ │ ├─resources 资源配置文件
│ │ │ ├─response 响应目录
│ │ │ ├─servies 业务逻辑层目录
│ │ │ ├─utils 工具类目录
│ │ │ └─validate 数据校验目录
│ │ └─lib 第三方内库
│ │
│ ├─command.php 命令行定义文件(tp)
│ ├─common.php 公共函数文件(tp)
│ └─tags.php 应用行为扩展定义文件(tp)

├─config 应用配置目录(tp)
│ ├─module_name 模块配置目录(tp)
│ │ ├─database.php 数据库配置(tp)
│ │ ├─cache 缓存配置(tp)
│ │ └─ ...
│ │
│ ├─app.php 应用配置(tp)
│ ├─cache.php 缓存配置(tp)
│ ├─cookie.php Cookie配置(tp)
│ ├─database.php 数据库配置(tp)
│ ├─log.php 日志配置(tp)
│ ├─session.php Session配置(tp)
│ ├─template.php 模板引擎配置(tp)
│ └─trace.php Trace配置(tp)

├─public WEB目录(对外访问目录)(tp)
│ ├─index.php 入口文件(tp)
│ ├─router.php 快速测试文件(tp)
│ └─.htaccess 用于apache的重写(tp)

├─route 路由定义目录(tp)
│ ├─route.php 路由定义(tp)
│ └─... 更多(tp)

├─extend 扩展类库目录(tp)
├─runtime 应用的运行时目录(可写,可定制)(tp)
├─thinkphp 框架系统目录(tp)
│ ├─lang 语言文件目录(tp)
│ ├─library 框架类库目录(tp)
│ │ ├─think Think类库包目录(tp)
│ │ └─traits 系统Trait目录(tp)
│ │
│ ├─tpl 系统模板目录(tp)
│ ├─base.php 基础定义文件(tp)
│ ├─convention.php 框架惯例配置文件(tp)
│ ├─helper.php 助手函数文件(tp)
│ └─logo.png 框架LOGO文件(tp)

├─vendor 第三方类库目录(Composer依赖库)(tp)
├─build.php 自动生成定义文件(参考)(tp)
├─composer.json composer 定义文件(tp)
├─LICENSE.txt 授权说明文件(tp)
├─README.md README 文件
├─think 命令行入口文件(tp)




    1. 项目调用流程图如下




2. 基类描述





    1. 文件目录图谱




common 公共模块目录
├─base 基类目录
│ ├─actions 通用行为目录
│ │ ├─IBaseAction.php 通用行为接口
│ │ └─IBaseLog.php 日志行为接口
│ │
│ ├─controller 控制器目录
│ │ └─BaseController.php 控制器基类
│ │
│ ├─dao 数据访问层目录
│ │ └─BaseDao.php 数据服务层基类
│ │
│ ├─error 错误处理目录
│ │ ├─model 错误模型目录
│ │ │ └─BaseErrorModel.php 错误模型基类
│ │ │
│ │ ├─BaseError.php 异常基类
│ │ ├─BaseHttpError.php Http异常基类
│ │ └─BaseHttpResponseError.php Http响应异常
│ │
│ ├─model 模型层目录
│ │ └─BaseModel.php 模型层基类
│ │
│ ├─request 请求目录
│ │ └─BaseRequest.php 请求基类
│ │
│ ├─response 响应目录
│ │ ├─BaseResponse.php 响应基类
│ │ └─BaseThinkphpResponse.php Http响应基类
│ │
│ ├─servies 业务逻辑层目录
│ │ └─BaseService.php 业务逻辑层基类
│ │
│ ├─utils 工具类目录
│ │ ├─BaseUUID.php uuid工具类基类
│ │ └─TimeUtils.php 时间工具类基类
│ │
│ └─validate 数据校验目录
│ └─BaseValidate.php 数据校验基类继承自tp的think\Validate

└─lib 第三方内库




    1. common



      common目录下的base目录里面的各类负责定义每层的行为,和一些通用的实现,lib目录负责存放第三方库并封装方法由base下utils目录里面的工具类封装调用方法抛出给实现类调用






    1. base



      base目录下的各类是所有实现类的基类,base类分为三种:行为定义接口,继承类,自定义类




      base类的继承类基本都重写了父类的构造方法,并调用父类构造,只是加上了父类构造调用前后的钩子(beforeConstruct和afterConstruct)以供子类有需要时重写




      base类的自定义类构造也加上了初始化钩子(beforeInit和afterInit)以供子类有需要时重写




      base类都是抽象类,尽管有些可能没有抽象方法






    1. actions 通用行为定义



      actions定义了实现类需要的各个行为,比如IBaseAction.php中的抛出异常,token校验失败异常,参数校验失败异常,中断操作返回前端成功响应等操作和IBaseLog.php的记录日志操作,该接口只定义行为,具体实现有实现类完成






    1. controller 控制器层



      controller下的BaseController.php为所有控制器实现类的祖父类




      它定义了控制器层的一下通用行为并实现了一部分,剩下的由子类去实现或者重写已实现的行为




      定义的行为有 设置请求包装对象,校验(获取)token,获取请求参数,成功返回,异常失败,异常成功等方法






    1. dao 数据访问层



      dao下的BaseDao.php为所有数据访问层实现类的祖父类






    1. error



      error\model 下的 BaseErrorModel.php是所有异常模型实现类的基类




      BaseError.php为异常基类继承自PHP原生Exception




      BaseHttpError.php为Http异常基类继承自tp的think\exception\HttpException




      BaseHttpResponseError.php为Http响应异常基类继承自tp的think\exception\HttpResponseException






    1. model



      model下的BaseModel.php为所有数据模型层实现类的祖父类




      BaseModel.php继承自tp的think\Model具体可用方法可以通过TP关于模型层的文档查看






    1. request



      request下的BaseRequest.php为所有请求对象实现类的祖父类




      BaseRequest.php继承自tp的think\Request具体可用方法可以通过TP关于请求的文档查看






    1. response



    • BaseResponse.php

        BaseResponse.php为所有响应对象的基类,它封装了响应的一系列方法




    • BaseThinkphpResponse.php

        BaseThinkphpResponse.php为tp响应基类继承自tp的think\Response具体可用方法可以通过TP关于响应的文档查看








    1. servies



      servies下的BaseService.php为所有业务逻辑层实现类的祖父类






    1. utils



      utils目录下的一系列工具类封装了一些工具方法供其他类调用




      BaseUUID.php封装了生成和解析uuid的方法




      TimeUtils.php封装了一下时间函数方法






    1. validate



      validate下的BaseValidate.php为所有数据校验层实现类的祖父类




    BaseRequest.php继承自tp的think\Validate具体可用方法可以通过TP关于验证器文档查看






    1. lib



      lib放置第三方库的源码或者调用方式,由base/utils下的类实现基本调用方法,并由最终的的工具实现类实现调用方法供其他类调用,建议可以用composer形式导入的类都使用composer形式引入,原则上不允许直接修改第三方类的源码,如果需要修改应当继承改类后重写




    api_sdk是阿里云短信sdk库




    Message.php 和 AliyunSms.php封装了发送短信的函数





2. 远程诊断实现类描述





    1. 文件目录图谱





api ris模块
├─actions 通用行为目录
│ ├─ZskkCache.php 缓存实现
│ └─ZskkDefaultLog.php 日志行为基本实现
│ └─ZskkDefaultLog.php 日志行为基本实现

├─behavior 行为目录
│ └─ResponseSend.php hook类

├─controller 控制器目录
│ ├─ZskkDefaultController.php 控制器基类
│ └─xxx 控制器实现类目录
│ └─XxxController.php 控制器实现类

├─dao 数据访问层目录
│ ├─ZskkDefaultDao.php 数据服务层基类
│ └─xxx 数据服务层实现类目录
│ └─XxxDao.php 数据服务层实现类

├─error 错误处理目录
│ ├─model 错误模型目录
│ │ ├─ZskkErrorModel.php 错误模型基类
│ │ ├─Cros.php 自定义请求头校验
│ │ ├─Params.php 参数错误
│ │ ├─Success.php 抛出成功
│ │ └─Token.php Token校验失败
│ │
│ ├─ZskkDefaultError.php 异常基类
│ ├─ZskkHttpDefaultError.php Http异常基类
│ └─ZskkHttpResponseDefaultError.php Http响应异常

├─model 模型层目录
│ ├─ZskkDefaultModel.php 模型层基类
│ └─Xxx 模型层实现类目录
│ ├─PublicXxxModel.php 模型层实现类(公有云数据库)
│ └─XxxModel.php 模型层实现类(私有云数据库)

├─resources 资源目录
│ └─ Report.php 资源配置

├─request 请求目录
│ └─ZskkDefaultRequest.php 请求基类
|
├─response 响应目录
│ ├─ZskkBaseResponse.php 响应基类
│ ├─ZskkCrosResponse.php 自定义请求头校验响应
│ ├─ZskkDefaultResponse.php 默认响应/成功响应
│ ├─ZskkDefaultThinkphpResponse.php tp响应对象继承类
│ └─ZskkErrorResponse.php 异常响应

├─schedule 定时任务

├─servies 业务逻辑层目录
│ ├─ZskkDefaultService.php 业务逻辑层基类
│ ├─common 公共业务逻辑层实现类目录
│ │ └─CommonService.php 公共业务逻辑层实现类
│ └─xxx 业务逻辑层实现类目录
│ └─XxxService.php 业务逻辑层实现类

├─utils 工具类目录
| ├─MsgUtils.php 发送短信工具类
| └─UUIDUtils.php uuid工具类
|
├─validate 数据校验目录
| ├─ZskkDefaultValidate.php 数据校验基类
| └─xxx 数据校验实现类目录
| ├─XxxValidate.php 数据校验工具类
| └─Xxx 数据校验规则
|
└─version
├─log 日志目录
| ├─v1.md 1.0日志
| └─vx.md x版本日志
|
├─sql sql目录
| ├─v1 1版本目录
| | ├─build.sql 数据库构建语句
| | └─build.php 数据库构建语句
| |
| └─vx x版本目录
| ├─build.sql 数据库构建语句
| ├─build.php 数据库构建语句
| ├─up.sql 数据库构建语句
| └─up.php 数据库更新语句
|
└─version.php




    1. api



    api为中世康恺RIS3.0+远程诊断项目目录,对外抛出去的接口全部由该目录下的文件甩出




    基类名称基本都是有Zskk开头的类






    1. actions



    actions 是common/base基类定义的一些通用行为实现类




    actions 实现了在控制器层,业务逻辑层,数据访问层,数据模型层等抛出各种异常以及日志打印的方法




    由于PHP语法机制 actions 中类并不是通过 implements 的方式继承接口 而是使用了 trait 关键字定义 其他层基类调用时要通过use该类实现行为接口,由于没有不是通过实现接口方式去做的,需要这边定性的trait类里面的方法和接口方法,方法名和参数一致




    ZskkCache.php 为缓存实现类通过封装tp的Cache类提供file和两级redis的缓存




    ZskkDefaultAction.php 抛出异常直接由ZskkDefaultResponse等类实现




    ZskkDefaultLog日志打印使用tp自定义日志的方法,日志等级为 logName,子类需要重写






    1. behavior



    behavior 下存放监听tp生命周期函数的类






    1. controller



    controller为控制器层 所有控制器都存放在该目录下




    ZskkDefaultController继承自common/base的控制器基类,是项目所有控制器实现类的父类




    ZskkDefaultController 实现了基本的设置请求对象,设置参数,token校验,抛出各种异常,成功返回,打印控制器层日志等方法




    xxx为具体控制器目录 理论上下面应该只有一个XxxController.php文件继承自ZskkDefaultController




    XxxController.php为实际业务的控制器类,由于是框架直接调用,所以方法可以依赖注入,一般注入service层对象




    XxxController.php原则上只允许调用service层对象




    XxxController.php原则上只允许定义被框架调用的方法,其他方法根据其通用性等级,可以沉淀到对应service层或者公共service层或直接抽取到控制器层基类






    1. dao



    dao 为数据访问层




    dao层被且只被service层调用,对service提供数据




    目前dao层只调用model层




    预计dao层还需要调用缓存层获取数据(可能是file缓存或者redis/codis)




    dao层调用的model(或者以后的cache)对象 由构造时依赖注入, 具体实现类负责定义成员变量和注入逻辑




    dao层通过use ZskkCache 的 getCache 和 setCache的方法获取和设置缓存




    设置缓存默认先设置文件缓存再设置redis缓存




    读取缓存默认先从文件缓存中读 没有再去redis缓存中读并存入文件缓存




    缓存默认保存时间86400秒就是一天




    通过重写redis_name属性改变缓存redis的配置






    1. error



    error 封装了对数据错误的处理




    ZskkDefaultError继承自BaseError类(祖父类是Exception)用于抛出系统异常 基本应该用不上




    ZskkHttpDefaultError继承自BaseHttpError类(祖父类是think\exception\HttpException)用于抛出http异常 基
    本应该用不上




    ZskkHttpResponseDefaultError继承自BaseHttpResponseError类(祖父类是think\exception\HttpResponseException)用于抛出http响应异常 基本应该用不上




    error下model存放了错误处理的模型类




    ZskkErrorModel继承自BaseErrorModel为所有错误处理模型基类




    Token为token验证失败的错误返回模型类 后续错误码和错误提示可能需要封装到resources




    Params为参数校验失败的错误返回模型类 后续错误码和错误提示可能需要封装到resources 该错误应当多数情况下由校验工具类抛出




    Cros为请求自定义头验证类(OPTIONS Http探路)返回 由控制器基类调用






    1. model



    model 为数据模型层 复制请求数据库并返回结果




    一般情况下由且只由dao层调用




    ZskkDefaultModel 为模型层基类继承自BaseModel(祖父类为tp的Model)




    xxx为数据模型层具体实现一般情况下一个数据库表对应一个xxx目录




    根据业务特殊情况xxx目录下有PublicXxxModel.php和XxxModel.php XxxModel.php负责私有云(一般是代码运行环境)下的数据库表数据操作 PublicXxxModel.php负责公有云下的数据库表数据操作




    多数据库配置在/server/config/database.php中配置 model使用中通过继承类重写connection字段修改数据库连接配置




    目前基类的是connection字段为db_config_private代表私有云配置,XxxModel.php也是连接私有云不需要重写配置,PublicXxxModel.php需要连接公有云数据库,需要重写connection字段为null代表默认配置(后期可能增加db_config_xxx(xxx为lc jsd zskk zgpa等等))




    后期可能会把配置名称统一抽取出来






    1. request



    request目录存放封装后的请求对象




    ZskkDefaultRequest继承自BaseRequest(祖父类是tp的Request类)






    1. resources



    resources目录主要存放一些资源类比如各种状态的定义已经错误的定义,后期可能会把所有返回的提示放这方便以后国际化的处理






    1. response



    response目录存放封装后的响应对象




    ZskkDefaultThinkphpResponse继承自BaseThinkphpResponse(祖父类是tp的Response类)




    ZskkBaseResponse继承自BaseResponse是http响应的工具类




    ZskkCrosResponse继承自ZskkBaseResponse是自定义头验证类(OPTIONS Http探路)的响应类




    ZskkErrorResponse继承自ZskkBaseResponse是错误返回的响应类




    ZskkDefaultResponse继承自ZskkBaseResponse是默认响应类被控制器层success方法调用抛出完成成功的响应结果






    1. schedule



    schedule目录想存放一些定时任务 php可能支持不好 后续通过liunx服务器定时任务调用curl接口实现会比较好 ?






    1. servies



    业务逻辑层 负责处理业务的具体逻辑




    ZskkDefaultService继承自BaseService是所有service类的基类




    common文件夹存放公共业务逻辑层代码,该层文件命名规则应该是CommonXXXService




    xxx为业务逻辑实现类目录 理论上说 应该是一个控制器层(controller)的xxx目录对应一个业务逻辑层(service)的xxx目录对应一个数据访问层(dao)的xxx目录可能对应多个数据模型层(model)目录或缓存层(fiel/redis)




    原则上servies层只允许被controller层调用,servies也只能调用dao层,但是考虑到业务可能重复比较多,service层可以调用commonservice(公共业务逻辑)层




    servies需要使用的model层或commonservice层实例也是在实现类重写构造方法类注入






    1. utils



    utils主要为了提供一些公共工具的调用以及封装一些第三方插件提供调用方法




    MsgUtils.php为短信发送工具类封装了一些短信发送的逻辑, 它的配置在app.php的msg_options中, accessKeyId和accessKeySecret为阿里云身份标识product和domain以及region和endPointName为域名相关基本不用修改,sign为短信签名,目前也不用修改,templateCode中的属性为对应短信模板的模板号




    sendSms为短信发送实际方法,他调用了AliyunSms.php的发送短信方法,该方法只供内部调用




    BaseUUID.php封装了uuid相关一些操作, 它的配置在app.php的uuid_options中, flag为位数标识只传1, env 为环境标识 1-7,db为数据库标识1-255, server为服务标识1-255, startTime为时间戳开始统计时间1558713600000代表从2019/5/25 0:0:0开始算起




    uuid规则 82位的二进制转换的16位36进制字符串, 前20位(4位)代表位数标识+环境标记+数据库标识+服务标识;中间31位(8位)代表时间戳部分标识;后31位(8位)代表时间戳部分标识+随机数+数据库表标识




    flag(1)(一位):位数标识占一位只传1




    env(1-7)(三位):环境标识 1.开发环境 2.测试环境 3.演示环境 4.正式环境 其他预留




    db(1-255)(八位):数据库标识 1.开发数据库 2.测试数据库 3.演示数据库 4+.其他正式数据库




    server(1-255)(八位):服务标识 1.开发服务 2.测试服务 3.演示服务 4+.其他正式服务




    以上组成20位2进账(4位36进制),为uuid前四位




    timestamp(0-4398046511103)(四十二位): 当前时间毫秒值与startTime(1558713600000->2019/5/25 0:0:0)时间戳值差,可以表示时间范围2019/5/25 0:0:0(1558713600000) - 2158/10/6 7:35:11(5956760111103)




    timestamp二进制前31位组成8位的36进账,为uuid第五-十二位




    random(0-2047)(十二位): 随机数




    table(0-255)(八位): 预留字段,分表标识,标识最多可以分256张表




    uuid()为生成uuid的方法




    pasre()为解析uuid的方法,可以获取flag,env,db,server,timestamp,random,table等字段




    pasreTable()为解析uuid获取分表字段的方法




    注意,由于分表字段的存在,尽量使有关联关系的数据的$table字段一致,远程诊断可能数据量不太大,举个dicom存储的例子,默认uuid()随机生成了患者id,考虑以后可能存在分表,通过患者id pasreTable拿到table字段并调用uuid(table)生成检查id,以此类推,一个患者下面,他的检查id,系列id,影像id的分表标识都是一样的,以后如果分库就可以去同一个库去查






    1. validate



    validate为数据验证目录




    ZskkDefaultValidate继承自BaseValidate(祖父类为tp的Validate)




    xxx为具体校验的目录 一般和model层xxx的对应




    Xxx.php 为具体校验规则




    XxxValidate 是封装的这些验证规则并提供静态的方式供其他类调用,该类一般对调用ZskkErrorResponse的抛出参数异常的方法






    1. version



    version位版本记录目录




    version.php暴露当前版本号




    log目录下为版本更新描述,包括功能描述和数据库修改描述,bug维护等




    sql目录下为项目初始化需要的SQL




    sql/v1为项目最初版本SQL创建语句,其中只有build.php和build.sql,build.sql为数据库初始创建语句,仅供参考,build.php抛出数据库初始化具体执行语句




    sql/vx为项目升级到x版本所需要的SQL语句,起目录下有build和up语句,同样.sql仅供参考,具体执行语句由.php封装抛出build.php提供当时数据库没有初始化的情况下,直接升级到vx版本的数据库SQL,up.php提供从vx-1版本升级到vx版本的数据库SQL,在数据库已经被初始化并且版本落后(vn)的情况下,需要从数据库当前版本依次逐步执行vn+1,vn+2,...vmax目录下的up.php





4. 其他



  • 单元测试



单元测试使用的是TP的think-testing=2.0.*拓展,它是基于PHPUnit(中文文档)的
单元测试配置文件是/server/phpunit.xml
测试完成后会在/server/tmp下生成HTML和TXT格式的日志报告
单元测试命令为php think unit /server/test.sh封装了该方