Selaa lähdekoodia

Project Description Document

jace 7 vuotta sitten
vanhempi
commit
bd18103c16

+ 94 - 0
CRM项目整体架构.docx

@@ -0,0 +1,94 @@
+一:项目简单介绍,配置文件介绍:
+项目的全局访问流程如下图:
+
+那么我们一步步来分析如何完成上述过程和每个文件代表的什么.
+目前的项目使用的是yii2.0框架。采取MVC模式。对于项目的认识,首先从配置文件开始,很多项目对于配置文件分为全局(common)和局部(项目中的config),也有的分为本地(local)和线上。无论如何,配置文件有很多提前声明的一些规定,比如访问的规则,预定字段代表的含义。比如我们的crm后台这个项目,在初始文件下规定好了,使用的:
+规定了访问路径对应的模块:访问正常的控制器,方法走的是controller正常模式。当访问user或者ib模式的时候会选择新的规则走。
+
+路径访问(pathinfo)的规则:
+
+针对于资源文件的存放,yii2.0使用了AppAssets管理CSS样式及JS脚本
+
+二.项目整体架构和各个文件的功能:
+这些都是配置文件的信息,很多初始化或者约定成俗的一些规则基本都是在配置文件完成的。
+接下来我们看看这个CRM系统的整体目录结构:
+
+web目录(入口文件目录)下:
+
+三:各个页面的访问流程:
+1.登录界面的流程:  路径: /login
+界面如下:
+
+路径的访问规则,我们看到login对应的控制器和方法:这是在配置文件中规定的
+
+我们按照MVC的访问结构,到控制器account中找到login方法:
+
+找到当前视图文件:
+
+当输入完账号和密码后:点击登录,会触发ajax请求:
+
+提交后我们找到,接受数据的方法:post提交到account/login-post(路径)
+
+看看这个核心类文件的代码:
+
+
+
+
+这样我们就想service发起了向地址:/login/login-post 的请求。接下来我们看看service文件的这个路径对应的方法:
+
+member继承于activerecord操作数据类
+
+操作数据库,匹配数据,对结果进行反馈。错误提示登录失败,正确跳转到:/user/dashboard
+2./user/dashboard页面的流程显示:
+看到路径我们看看配置文件信息有这样的一条规定:
+
+
+所以我们要去指定的路径看看是否对本来的控制器进行重写:
+
+找到对应的dashboard控制器:执行index方法(获取所需要的参数)
+
+其中的Mt4tradeApi 实例再次的走入上述的过程,先实例化模型中的,然后在去想service发起请求。然后进入BaseApi 进行Client模拟发起请求。
+
+渲染view视图中的index。接下来我们看看视图模块部分。视图模块除了加载自身的模板外,在加入公共文件的模板(common文件夹和layouts文件夹).形成了总体视图.
+
+控制器文件和视图文件都在这里,这是访问路径为user的时候所访问的地方,如果访问路径是ib,那就是另一个文件夹下面的控制器和视图文件.每个文件代表的含义是:
+/user/dashboard   :  首页
+/user/notice :公告
+/user/bankdeposit:入金
+/user/bankwithdraw:出金
+/user/info :基本资料
+/user/password :修改密码
+/user/dashboard : 名下账户
+/user/deposit :入金报表
+/user/withdraw : 出金报表
+/user/position : 持仓报表
+/user/pending: 挂单报表
+/user/history:历史报表
+
+同理如果上述访问路径变为了ib:那么登录页面首先按照路由规则访问:
+
+登录界面如下:
+
+当登录上后:    路径地址为这个 /ib/dashboard,根据配置文件的信息,我们找到对应的目录
+
+
+和上面一样,每个控制器和视图文件都有对应的含义:
+/ib/dashboard  : 首页
+/ib/notice : 公告
+/ib/bankwithdraw: 出金
+/ib/r : 推广
+/ib/help :帮助
+/ib/info : 基本资料
+/ib/password :修改密码
+/ib/ibs :名下代理
+/ib/users : 名下账户
+/ib/deposit: 入金报表
+/ib/withdraw : 出金报表
+/ib/position : 持仓报表
+/ib/pending :挂单报表
+/ib/history : 历史报表
+
+到这里我们就把CRM项目的整体架子大致介绍了一下: 总的思路是这样的:
+
+
+

+ 72 - 0
项目流程(入金部分).docx

@@ -0,0 +1,72 @@
+这一部分我们主要讲述的是项目的入金部分,对入金的所有环节进行详细的讲解:
+1.入金前端部分的详细讲解:
+我们进入前端部分,页面呈现的是这样的画面:
+
+对应的前端代码,就在user的view中的bankdeposit页面。其中对于我们比较重要的就是通道这一部分。 通道的来源:就是后端对于支付方式的开启
+因为这个才是连接所有支付方式的一个可变的地方。对于金额和账户,还是比较固定的,没有那么大的难度性。
+当我们选择通道的时候,如果当前通道有多个银行选项就会出现银行的选择对话框,
+如果没有,那么就不会出现就是当前支付方式对应的方法(当前截图的通道就是只有自身的页面)
+
+这个就是选择了有银行选择的通道显示的界面。其中大部分的显示和隐藏都是js来控制的。
+当我们把参数全部选择好之后,进行页面的提交,我们就会进入到:
+
+这个方法中去,我们现在看看这个方法的具体写法:这里会拿到我们前端提交的数据,然后拼接为数组:
+
+然后调用模型中的outpay方法:在该方法中对参数进行了一些列的组装,然后向后台发起请求:
+
+我们看看发起请求的部分:
+
+这样所有的数据进入到service层开始我们所说的方法outpay:
+
+这里我们拿到前端的数据,然后调用方法,进入到后端的模型中:common\pay\PayForm
+
+
+来看看这个关键点函数:
+
+我们这样就会进入到一下支付方法的函数中去。我们以其中的一个函数为例:
+
+其中的HTML代码生成,是在我们的方法中写明的:
+
+在参数中有很多我们是初始化好的参数:主要就是一些商户的号码,密钥,支付网关等:
+
+这些参数我们放在配置params中去配置的。
+当我们发起请求的时候,就会出现支付页面:如图:类似的
+
+之后当我们完成支付的后,支付平台就会对我们提交的异步地址回调。就会执行我们在此文件中书写的异步方法:
+
+这样大体我们就完成了前端的入金操作。剩余的就是将结果通过函数返回了。大体的入金操作就是这样。
+2.后端入金界面的操作:
+后端界面如下:
+
+我们根据地址栏找到:配置信息页面,入金部分主要就是两个页面:一个是入金明细展示页,一个就是我们看到的配置页面:
+
+我们主要看看入金参数的显示部分:service层  操作的去数据库查询。主要是获取到数据库中的数据,然后进行显示而已。(这里首先显示的是payform中设置的数据,当我更新设置的时候才会进入到数据库中更新完毕。这一点倒是挺关键的)
+
+设置入金的设置操作:
+
+这样我们就把所有关于入金的设置项看完了。当我们获取前端的通道的时候,我们会读取配置项中开启的选项。
+接着我们看一下入金的明细部分:
+
+我们找到显示的页面:这个页面其实很多都只是展示,也就是数据库的查询并显示的过程,不过在这个页面比较重要的就是补单这个动作操作。我们需要对这个补单进行好好的理解和掌握。此处的补单似乎还不完善,需要我们去完善部分功能。 因为点击了并没有发送邮件。(目前只发现这样啊)
+我们先看展示部分:
+控制器方法部分:
+
+因为页面使用了前端的ajax获取数据,所以其中一部分数据是通过前端的插件来触发寻找数据的,我们可以在页面总看到这个函数的:
+
+然后就会触发对应的函数:
+
+上述两个函数都会去service函数中去寻找对应的方法操作对应的数据库部分,然后来进行数据的查找和显示。(后续来详细的讲解这一部分,因为他们并不是很难)。
+我们接下来看看补单的这个函数(这个方法的实现还是比较重要的)
+当我们点击补单的按钮的时候,会触发函数操作:
+
+然后在控制器中,我们找到对应的方法:
+
+我们到模型中去看看,这个方法是如何实现的:
+
+我们看看后台部分的显示:这里主要是针对补单的id来进行一系列操作,完成入金的操作,还有其中对于mt4账户的更新:
+
+上述的mt4账户的金额增加,并标记为入金的标识符,然后就会发送邮件告知已经入金。
+
+
+
+

+ 57 - 0
项目流程(出金部分).docx

@@ -0,0 +1,57 @@
+1.前端页面的出金操作:
+
+用户进入出金界面。然后填写资料后,点击提交申请,然后数据提交到数据到 save方法中去
+
+进入出金的控制器的save方法我们可以看看:
+
+携带者数据一直走向了service层的数据:
+
+我们随着数据流的走向到service层找到出金的create方法:
+
+我们看到的是一系列的判断,我们仔细来分析一下这些判断:此时它会获取到前台传递的参数过来并保存起来$data 里面:首次拿到的数据是这样的
+
+然后获取当时的汇率,进行再次的添加:
+
+出金表是否还有未处理的订单:当时的数据库查询是查询type为0 的状态,不过这种状态根本不存在,因为初始化的时候设置的为6.所以就没有起到应有的作用。
+
+mt4账户是否存在
+
+然后判断完成后,就会再次更新数据和对mt4表进行操作,只读账号:这里的主要就是对于type的设置,此处是直接设置为6的,所以导致一提交的数据就是处理中的这个状态。
+对于mt4账户的操作主要是针对的只读信息设置。
+
+
+
+2.后端对于出金的操作:
+
+后台所有和出金相关的页面全部放在admin的目录下,withdraw文件下的index页面。无论你点击那个状态下的显示,均使用的是这个页面。他会根据type的不同值显示不同的页面。
+
+对w函数的操作。也就是对出金的一些列操作,因为他会对应不同的状态。
+
+开始执行后台的方法:
+
+前台携带的参数开始向service层发起请求。然后进入到后台的方法中去:
+
+接下里我们看看后台的这个方法到底写了些什么:
+
+接受前台提交过来的数据,主要是id这一块。拿到修改数据的当前的id,然后才可以进行操作。
+对所有的id数据进行循环,然后开始各自的操作:
+
+拿到当前的id,看是否可以在数据库中找到对应的数据。如果没有就报错。
+如果有数据,并且数据在我们type的各个阶段内,我们根据,阶段来进行不同的操作。
+其中对于不同的阶段,进行不同的操作:
+
+只有2的时候需要知道当前的出金时间,需要赋予给当前的坐标。
+如果是type为2,就是已出金的状态:
+
+出金的金额需要当前出金的额度,加上手续费。这个很关键的一个函数就是mt4deposit函数
+
+这里会返回一个结果,我们来看一下这个函数的运行是怎么样的。
+
+主要就是对于出入金的操作,如果有结果返回,那么就是正确的结果,如果没有那么就会 报错。并通过邮件的形式发送。
+如果errcode的结果为0,那么就可以开始了操作了。因为此时的出金是没有问题的,那么我们开始更新出金表(当地的数据库文件),让数据库中的mt4_status的状态变更为1
+
+然后进行保存的操作,对所有的出金的操作全部更新到数据库文件中去。然后再次操作mt4的账户,然后设置账户的只读属性消失。
+
+到此时我们所有的出金相关的操作就已经完成了。除非发生错误,都会返回对应的错误信息,其他正确的流程就是这样的。
+
+页面读取的都是同一个。只是根据不同的type值来操作。

+ 33 - 0
项目流程(邮箱注册).docx

@@ -0,0 +1,33 @@
+   Xtrader用户端登录,最终端用户,只有最基本的功能,就是首页,公告 出入金等.type类型为1
+   Xbroker用户登录,属于代理用户.除了最基本的功能外  还增加了推广(推广专属,推广代理)和常见问题的两个项目.
+
+先看看两个推广链接的使用:
+1.推广代理链接:
+发送邮件的地方: 
+
+目前测试使用的是行政的账号
+公司行政的pop开启:
+
+284978269@qq.com [HYPERLINK: ]
+
+输入邮箱的时候会进行邮箱的验证,是否注册. 如果会员表中邮箱被注册了,那么就会提示邮箱已存在.
+对于杠杆的选择,目前页面是写死的.
+我们现在主要来说一下邮箱注册的所有环节,主要是邮箱发送验证码这一部分。
+我们看到上面请求的方法是进入了控制器account的sendmail方法中去,那我们看一下这个对应的方法是怎么样的。
+
+我们来看看这部分代码是怎么样的:携带者邮箱号码,准备向service层发起请求。
+
+接下来我们看看service层的函数书怎么样来触发到邮件发送的这个动作的:
+
+到这里我们先停止住,我们要把生成验证码的函数搞清楚,也就是sendCodeSms函数
+
+我们在redis可视化工具中看到这样的结果:
+
+接下来我们继续分析发送邮件的函数:
+
+接受参数调用发送邮箱的函数,这里我们看到的主要是对于参数的拼接,正式的调用函数:
+
+这里邮箱的参数主要是读取配置文件中的邮箱发送的数据,
+
+如果需要更改邮箱的参数,需要对这份的配置文件参数进行重新的赋值才可以。
+到这里我们就把项目中的邮箱部分介绍的差不多了,可能更多的细节就是对于邮箱函数的深层次底层代码的逻辑了。