chong

Merge branch master

c885220754f142364c05832aa5db702c0ceac992
\ No newline at end of file
... ...
# 9.1接口文档:
- 完成任务分享接口
路径:
api-online.test.boxfish.cn/share/for?share_type=FINISH_STUDY&access_token=admin
方式:
POST
参数例子:
{
"title" : "BOXFiSH学员:学习全辅导,每天都上外教课!",
"imageName" : "award_logo.png",
"description" : "我在BOXFiSH学英语#学的不止是英语,更是全球视角下的独立思考。",
"award_code":"hahaha",
"lesson_list":[
{
"lesson_name" : "lesson_name1",
"lesson_cover" : "lesson_cover1",
"lesson_type" : "lesson_type1"
},
{
"lesson_name" : "lesson_name2",
"lesson_cover" : "lesson_cover2",
"lesson_type" : "lesson_type2"
},
{
"lesson_name" : "lesson_name3",
"lesson_cover" : "lesson_cover3",
"lesson_type" : "lesson_type3"
}
]
}
返回结果例子:
{
"online_score": "106",
"gold": "633",
"msg": "success",
"url": "http://api-online.test.boxfish.cn/share/wechat/finish/study/1/b834bf2e-2244-4884-a0ed-050ce0fa8c62"
}
- 阶段预测接口
路径:
api-online.test.boxfish.cn/stage/multiword/info?access_token=JWEIEfGYly
方式:
GET
返回结果例子:
{
"increment": {
"multi_word_increase": 1256,
"word_increase": 1151,
"reading_amount_increase": 3001,
"listening_time_increase": 33060,
"record_score_increase": 0,
"phrase_increase": 0
},
"weeks": "预计2周完成",
"level": 2,
"stage": "第一阶段"
}
- 完成任务分享接口
路径:
api-online.test.boxfish.cn/share/for?share_type=FINISH_STUDY&access_token=admin
方式:
POST
参数例子:
{
"title" : "BOXFiSH学员:学习全辅导,每天都上外教课!",
"imageName" : "award_logo.png",
"description" : "我在BOXFiSH学英语#学的不止是英语,更是全球视角下的独立思考。",
"award_code":"这里是奖品码参数"
}
返回结果例子:
{
"score": "106",
"gold": "633",
"msg": "success",
"url": "http://api-online.test.boxfish.cn/share/wechat/finish/study/1/b834bf2e-2244-4884-a0ed-050ce0fa8c62"
}
- 完成任务分享 - 分享成功
路径:
/successful/share?access_token=admin&share_type=FINISH_STUDY
方式:
POST
路径参数:
share_type=FINISH_STUDY
body参数:
{
"url":"http://localhost/share/wechat/finish/study/1299909/16f3cbf6-4922-4ce4-af60-21b2742bb8b2",
"platform":"QQ"
}
- user/me
路径:
user/me
方式:
GET
返回参数:
{
"grade": "六年级",
"difficulty": "5",
"courseLevel": "5",
"publication": "PEP版六年级上",
"updateTime": "2017-03-09 19:06:29.0",
"update_at": "2017-03-09 19:06:29.0",
"plan": "ONE_HOUR",
"purchase": "OPEN_4P",
"mobile": "18264160050",
"interface_version": {
"finished": "2016-09-03T17:00:47.815",
"score": "2016-09-03T17:00:47.815",
"buy": "2016-09-03T17:00:47.815",
"synchronize_word": 1
},
"id": 1,
"username": "admin",
"nickname": "拒绝黄赌毒",
"realname": "盒子鱼",
"figure_url": "https://avatars.boxfish.cn/user/-12/figure/1411532427.jpg",
"catalog": "初中",
"completed": 6,
"first_login": true,
"gift": [
"lesson_convert_score"
],
"score": 372738,
"goal": {
"id": 1,
"goal_step": 55000,
"current_step": 3218
},
"queue": {
"log_queue_url": "http://cropd5q7bl.mqs-cn-hangzhou.aliyuncs.com/",
"log_queue_name": "test-boxfish-log",
"event_queue_url": "http://cropd5q7bl.mqs-cn-hangzhou.aliyuncs.com/",
"event_queue_name": "test-boxfish-word-event",
"log_mns_queue_url": "https://1296825402699921.mns.cn-hangzhou.aliyuncs.com/",
"log_mns_queue_name": "test-boxfish-log",
"event_mns_queue_url": "https://1296825402699921.mns.cn-hangzhou.aliyuncs.com/",
"event_mns_queue_name": "test-boxfish-word-event"
},
"easemob_username": "c4ca4238a0b923820dcc509a6f75849b",
"easemob_password": "bc7235a51e34c1d3ebfddeb538c20c71",
"current_login_type": "email",
"today_score": 0,
"qcloud": {
"identifier": "c4ca4238a0b923820dcc509a6f75849b",
"sign": "eJxFkFFPgzAQx78Lz8ZcSzuoiQ9sOEUhEecc7IWUUlidMOy6yTR*dxlh8emS3*8ud--7sV7DxTVvW1Vk3GS2LqwbC6yrAcuuVVpmvDRS9xhRSjHAxR6l3qtd0wsMiCJsA-xLVcjGqFINg4IITrDtcshZXzAUQlBgfFI61CUsH2f2quqbo7vlLIj9JEafkVOlm-hZvYuHwyM6QuIGH2lrnrbGv69MINcz031-eUG1mmO*Cb2lnMOb8bvEneomJKtpzV5wukj0up7oHEFUnrzby7Jimw2xz8HI*XJiUzpKo2o5cJchmzrARs6F2B0ak5lTK4c--f4BR3Bemg__"
},
"version": "100.0.0",
" is_school_student": true,
"user_role": [
"user",
"teacher",
"student"
]
}
- 新版首页
/event/statistic/stage/info
方式:
GET
返回参数:
{
"stage_level": 3,
"stage": 1,
"progress": "0.00",
"record_score": 0,
"listening_duration": 0,
"multiword_count": 0
}
... ...
... ... @@ -255,10 +255,12 @@
* [网络状态检测](未整理/网络状态检测.md)
* [网页测试Demo数据](未整理/网页测试Demo数据.md)
* [获取当前分类下存在的班级](未整理/获取当前分类下存在的班级.md)
* [老罗](laoluo.md)
* [老罗](laoluo1.md)
* [分享](yjw接口文档/y分享.md)
* [口语测评](yjw接口文档/y口语测评.md)
* [手机号接口](yjw接口文档/y手机号接口.md)
* [提交成绩](yjw接口文档/y提交成绩.md)
* [每日推送](yjw接口文档/y每日推送.md)
* [阶段数](yjw接口文档/y阶段数.md)
* [文案组分享统计](yjw接口文档/y分享统计.md)
* [文案组分享统计](yjw接口文档/y分享统计.md)
\ No newline at end of file
... ...
## 内容研发环境部署
### 一 资源管理 rms
|名称|值|描述
|||
|主机|192.168.0.111:8060
|目录|/root/projects/rms-web-1.0-SNAPSHOT.jar|
|地址|http://192.168.0.111:8060/|
|服务启动|service rms start|
|redis|192.168.0.111|database(5)
|rabbitMq|192.168.1.248|(user:admin,pass:boxfish, host:/)
|总表对比表|http://192.168.0.111:10504/|
|认证系统|http://192.168.0.111:8085|
|日志系统|http://192.168.0.111:8088|
|ffmpeg|/usr/bin/ffprobe|使用tika功能需要使用这个软件
|jackrabbit|/share/rms/jackrabbit|
|跑课资源日志|/share/rms_resource.log|
### 二 4A:用户管理 register
|名称|值|描述
|||
|主机|192.168.0.111:8820|
|目录|/root/projects/register.jar|
|地址|http://192.168.0.111:8820/|
|服务启动|service register start|
|数据库|192.168.0.100|4a
### 三 4A:用户认证 authentication
|名称|值|描述
|||
|主机|192.168.0.111:8085|
|目录|/root/projects/authentication-0.0.1-SNAPSHOT.jar|
|服务启动|service authentication start|
|redis|192.168.0.111|database(0)
|数据库|192.168.0.100|4a
### 四 4A:日志服务 audit
|名称|值|描述
|||
|主机|192.168.0.111:8088|
|目录|/root/projects/audit.jar|
|地址|http://192.168.0.111:8088/|
|服务启动|service audit start|
|rabbitmq|192.168.1.248|(user:admin,pass:boxfish, host:/)
|数据库|192.168.0.100|4a
### 五 跑课程序 onekey
|名称|值|描述
|||
|主机|192.168.0.111|8090
|目录|/root/projects/bebase-onekey-webapp-0.0.1-SNAPSHOT.jar|
|地址|http://192.168.0.111:8090/single|
|服务启动|service onekey start|
|数据库1|192.168.0.100|bebase
|数据库2|192.168.0.100|statistic
|redis|192.168.0.111|databse(5)
|跑课目录|/share/svn|
|删除json|/share/json|
|rms|http://192.168.0.111:8060/lookup/{resType}/{resPath}?resName=xxx|http://192.168.0.111:8060/lookup/image/default?resName=check
|总表对比表|http://192.168.0.111:10504/|
|nlp|http://192.168.0.111:11777/nlp/article|
|同步脚本|/share/sh/rsync.sh|同步课程json和data到100服务器
### 六 总表对比表
|名称|值|描述
|||
|主机|192.168.0.111:10504|
|目录|/root/projects/relationship-0.0.1-SNAPSHOT.jar|
|地址|http://192.168.0.111:16384|
|服务启动|service relation start|
|数据库|192.168.0.100|course_online
|redis|192.168.0.111|database(5)
... ...
## 内容研发实现
### 一 资源管理
1、jackrabbit库的启动(RepositoryStartup类)
>
* 首先启动入口为RepositoryStartup类, 首先会尝试获取到启动的配置文件,然后根据配置文件中库的位置(rep_home)以及库配置文件的位置(rep_config),启动对应的Repository。
* 其次将Repository注入到JackrabbitUtils与ServletContext等上下文中。
* 紧接着执行启动管道StartupPipeline, 管道上会安置一些启动阀门StartupValve,依次执行对应的Valve。StartupValve包含有FolderNodeTreeValve(目录节点树构造Valve), NodeRegisterValve(节点注册Valve,当需要调整节点Node时,需要调整resouces/nodetype/*.cnd文件结构, 然后启动的时候,会自动去调整节点结构),RmiSocketValve(socket远程调用线程池启动valve, 当开启Socket远程调用的时候,启动的时候需要启动对应的线程池)。
* 至此启动完成。
2、文件节点上传(ContentController.uploadsubmit)·
>
* 首先调用(ContentController.uploadFile)将文件上传到服务器的临时文件中,上传的时候会依次调用Tika模块中的TikaFilter链,分别为FileNameTikaFilter(文件名过滤,文件名不能以空格结尾例如“aaa .jpg”,因为这样会破坏跑课调用; 不能无文件后缀名),FileSizeTikaFilter(不允许空文件),CodeTikaFilter(文件编码格式的验证,视频视频码需要为h264,音频码为aac),ContentTypeTikaFilter(文件类型的验证)。只有当所有验证条件都通过之后,文件才能真正上传到服务器。
* 上传之后,需要调用ContentController.uploadsubmit进行提交,提交分为正常提交,覆盖提交,全部覆盖提交,跳过,等同于文件系统中文件修改操作中的覆盖跳过。提交的时候需要使用tika读取资源文件的相关属性, 然后将其保存到对应的节点属性中,最终将其保存。
3、远程调用RMI(RmiController.lookupResource)
>
* 调用/lookup/{restype}/{respath}接口,restype资源类型(包含image,audio,video),respath资源路径映射(见/resources/datamap/map.properties)。
* 根据资源类型, 映射到对应的查找规则(每种资源都有自己的查找规则),如果适配不到对应的规则,则返回404,提示“您所要查找的资源适配不到规则”。如果存在然后根据查找规则,资源名称查找到对应的节点,如果没搜索到对应的资源节点, 返回404,提示"您所要查找的资源xxx.jpg不存在"。
* 如果存在,则将md5、duration、extname属性设置到响应头中返回。
* 将文件流写入到Respose当中,与响应头一同返回。
4、节点搜索(QueryController.query())
>
* 表单提交查询条件到/query接口,表单对象QueryContentEntity会自动生成对应的sql2语句。
* 根据sql2语句进行查询,查询到NodeIterator之后需要进行简单分页。因为jackrabbit不支持limit语句,所以分页需要使用NodeIterator.skip的方式来辅助分页。具体方式为NodeIterator.skip((page+1)*pageSize), 然后NodeIterator迭代一页或者是到末尾,这样计算出一页的数据,封装到QueryContentEntity中返回.
5 节点框架(Node)
> 节点继承体系,继承父节点,同时会继承父节点的属性。例如在文件节点中添加md5属性,图片节点,视频节点,音频节点都具有md5属性。
>
|名称|属性|描述|继承自|
||||
|RootNode|根节点|所有节点的祖节点|无
|FileNode|文件节点|文件|RootNode
|FolderNode|文件夹节点|文件夹可以包含其他的节点|RootNode
|ImageNode|图片节点|图片|FileNode
|AudioNode|音频节点|音频|FileNode
|VideoNode|视频节点|视频|FileNode
6、系统工作原理
>
* 使用jcr协议对文件系统进行抽象, 使用jackrabbit进行节点管理,对外提供web页面进行内容管理与内容查询,同时提供接口供其他系统进行系统集成(例如跑课)。
* jackrabbit库包含节点注册(nodetype)、节点属性存储(debry)、节点文件存储(datastore),搜索引擎(lucence),权限管理(privileges),版本控制等等功能.
7、音频缓存重建
>
* 可以直接手动删除192.168.0.111(5)里面的"/资源/音频"中的缓存。
* 然后调用/resource/list/{type}接口,type为audio,即可。
## 4A内部认证
### 一、用户管理(Register)
> 1、用户添加
>
* 接口:/user
* method: POST
* 参数:
>
|名称|值|参数
|||
|username|用户名|
|password|密码|
|nickname|昵称|
|adminPassword|管理员密码|需要用管理员密码才能添加用户
2、用户修改密码
>
* 接口:/user
* method:PUT
* 参数:
>
|名称|值|参数
|||
|oldpassword|用户旧密码|
|newpassword|新密码|
|id|用户id|
3、删除用户
>
* 接口:/user
* method:DELETE
* 参数:id, adminPassword(管理员密码)
4、获取用户列表
>
* 接口:/user
* method:GET
* 参数:page=1&size=10
### 二、用户认证(Authentication)
> 1、用户登录
* 接口:/login
* method:POST
* 参数:
>
|名称|值|
|||
|username|用户名|
|password|密码|
> 2、token验证
* 接口:/validation_token
* method:PUT
* 参数:
>
|名称|值|
|||
|token|token|
|appCode|app编码|
> 3、注销
* 接口:/logout
* method:PUT
* 参数:access_token=xxxx
> 4、根据token获取用户id
* 接口:/userid
* method:GET
* 参数:access_token=xxxx
... ...
File mode changed
File mode changed
File mode changed
File mode changed
File mode changed
File mode changed