README.md 25 KB

测试git

中世康恺RIS3.0文档说明

1. 架构说明

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

  • 1. ThinkPHP github地址 中文文档
  • 2. 单元测试使用的是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类都是抽象类,尽管有些可能没有抽象方法

  • 4. actions 通用行为定义 >   actions定义了实现类需要的各个行为,比如IBaseAction.php中的抛出异常,token校验失败异常,参数校验失败异常,中断操作返回前端成功响应等操作和IBaseLog.php的记录日志操作,该接口只定义行为,具体实现有实现类完成
  • 5. controller 控制器层 >   controller下的BaseController.php为所有控制器实现类的祖父类

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

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

  • 6. dao 数据访问层   dao下的BaseDao.php为所有数据访问层实现类的祖父类
  • 7. error   error\model 下的 BaseErrorModel.php是所有异常模型实现类的基类

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

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

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

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

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

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

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

  • 10. response
    • BaseResponse.php >   BaseResponse.php为所有响应对象的基类,它封装了响应的一系列方法
    • BaseThinkphpResponse.php >   BaseThinkphpResponse.php为tp响应基类继承自tp的think\Response具体可用方法可以通过TP关于响应的文档查看
  • 11. servies   servies下的BaseService.php为所有业务逻辑层实现类的祖父类
  • 12. utils   utils目录下的一系列工具类封装了一些工具方法供其他类调用

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

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

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

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

  • 14. 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开头的类

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

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

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

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

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

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

  • 4. behavior behavior 下存放监听tp生命周期函数的类
  • 5. controller controller为控制器层 所有控制器都存放在该目录下

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

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

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

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

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

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

  • 6. 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的配置

  • 7. 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探路)返回 由控制器基类调用

  • 8. 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等等))

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

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

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

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

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

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

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

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

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

  • 12. schedule schedule目录想存放一些定时任务 php可能支持不好 后续通过liunx服务器定时任务调用curl接口实现会比较好 ?
  • 13. 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层实例也是在实现类重写构造方法类注入

  • 14. 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的分表标识都是一样的,以后如果分库就可以去同一个库去查

  • 15. validate validate为数据验证目录

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

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

Xxx.php 为具体校验规则

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

  • 16. 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封装了该方