Commit 8e8bd95e by 郭旭

教案修改

parent 615a8f01
## 后端项目下载运行 ## 后端项目下载运行
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#### 项目下载 #### 项目下载
使用git命令拉取gitlab上的后端工程 使用git命令拉取gitlab上的后端工程
后端工程(gjjs-common)地址:http://114.115.138.98:8900/fukai/gjjs-common.git 后端工程(gjjs-common)地址:http://114.115.138.98:8900/fukai/gjjs-common.git
......
## 后端项目整体介绍
## 后端项目整体介绍
#### 项目框架
后端项目是一个springboot工程项目,持久化框架用的是mybatis.
#### 项目流程介绍
##### 1.请求流程
![image-20210918165941920](../assets/images/gjjs-common2.png)
##### 2.Service与Rule如何调用
1)AbstractRouteService是service层最上层抽象类,对一些基本公共方法(init、executeRule、executeDefault等,这些方法基本每个交易都会去调用)做了实现,保证执行流程的统一,通过getEmitter这个抽象方法来实现多态(子类通过实现这个方法来处理不同业务逻辑,不用去关心具体的执行流程)
2)AbstractCommonProcess是service层二级抽象类,对一些非公共方法(某个交易需要的方法,例如ditopn相关的executeDocpan方法、Trnrel交易相关的reJrow方法)做了实现
3)具体交易service通过接口向resource层暴露服务,这里用ICommonService将常用公共接口方法做了封装,具体交易service不再进行业务方法的实现(已在抽象类进行了实现),只是持有自己交易对应的emitter实例,实现getEmitter方法
4)AbstractRuleEmitter是emitter的抽象父类,对基本公共方法(executeRule、executeDefault等)做了实现,交易emitter实现executeInit方法,并对一系列rule按照执行顺序做了封装,根据rule名字缓存到map里,通过反射去调用对应的方法
5)**在一次请求中可以调用多个交易service所对应的方法**,比如暂存恢复功能,先去执行Sptsel交易的getPendingData方法,然后再去调用ditopn交易的init方法,在去掉ditopn init方法之前,拿到SptselService实例,然后去执行getPendingData方法,如图:
![](../../../../../assets/images/03-新国结产品开发/image\hdservicerule1.png)
##### 3.Emitter的方法分类
RuleEmitter大概有4类方法,分别是
executeInit(一个交易加载初始化时调用)
executeRule(event rule)
executeDefault (default rule)
executeCheck (参数、数据校验类rule)
##### 4.消息体格式说明
###### 请求消息体
请求消息体是一个json格式数据,数据格式形如
![](../../../../../assets/images/03-新国结产品开发/image\qqxxt2.png)
```
{
"didgrp_rec_ownref": "",
"mtabut_coninf_conexedat": "",
.
.
.
"pageId": "c39e4675-1cc0-4169-bcf6-e6f8d659e4ff",
"params": {}
}
```
对应后端VO实体类说明(以com.ceb.gjjs.mda.vo.DitopnVO为例):
![请求实体类](../../../../../assets/images/03-新国结产品开发/image/请求实体类.png)
###### 响应消息体
响应消息体是一个json格式数据
结果成功响应数据格式形如
![](../../../../../assets/images/03-新国结产品开发/image\xyxxt1.png)
```
{
"respCode": "AAAAAA",
"respMsg": "操作成功!",
"fieldErrors": {},
"data": {
"params": {},
"pageId": "c39e4675-1cc0-4169-bcf6-e6f8d659e4ff",
.
.
.
"didgrp_rec_conno": "",
"didgrp_rec_dkflg": "N"
}
}
```
结果失败响应数据格式形如
![](../../../../../assets/images/03-新国结产品开发/image\xyxxt2.png)
```
{
"respCode": "500",
"respMsg": "Rule执行异常",
"fieldErrors": null,
"data": null
}
```
​ 响应结果封装类:com.brilliance.mda.runtime.response.ResponseSet
![响应消息体](../../../../../assets/images/03-新国结产品开发/image/响应消息体.png)
##### 5.VO的规范
VO类是前后端数据请求和响应的实体类,VO有一个共同父类VO(BaseVO),字段说明如下:
![](../../../../../assets/images/03-新国结产品开发/image\qqxxt4.png)
VO按照交易进行划分,一个交易对应一个VO(比如信用证开证交易对应VO是DitopnVO),VO类使用了lombok插件,不需要set get方法,字段用RelPath注解区分是请求字段还是响应字段(默认没有注解,代表dir属性值是DirType.BOTH,及请求和响应都需要该字段;如果只是请求字段,dir属性值是DirType.IN;如果是相应字段,dir属性值是DirType.OUT),如图:
![](../../../../../assets/images/03-新国结产品开发/image\vogf1.png)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment