chong

Merge branch master

  1 +c885220754f142364c05832aa5db702c0ceac992
  1 +
  2 +# 9.1接口文档:
  3 +
  4 +- 完成任务分享接口
  5 +
  6 +路径:
  7 +api-online.test.boxfish.cn/share/for?share_type=FINISH_STUDY&access_token=admin
  8 +
  9 +方式:
  10 +POST
  11 +
  12 + 参数例子:
  13 + {
  14 + "title" : "BOXFiSH学员:学习全辅导,每天都上外教课!",
  15 + "imageName" : "award_logo.png",
  16 + "description" : "我在BOXFiSH学英语#学的不止是英语,更是全球视角下的独立思考。",
  17 + "award_code":"hahaha",
  18 + "lesson_list":[
  19 + {
  20 + "lesson_name" : "lesson_name1",
  21 + "lesson_cover" : "lesson_cover1",
  22 + "lesson_type" : "lesson_type1"
  23 + },
  24 + {
  25 + "lesson_name" : "lesson_name2",
  26 + "lesson_cover" : "lesson_cover2",
  27 + "lesson_type" : "lesson_type2"
  28 + },
  29 + {
  30 + "lesson_name" : "lesson_name3",
  31 + "lesson_cover" : "lesson_cover3",
  32 + "lesson_type" : "lesson_type3"
  33 + }
  34 + ]
  35 + }
  36 +
  37 + 返回结果例子:
  38 +
  39 + {
  40 + "online_score": "106",
  41 + "gold": "633",
  42 + "msg": "success",
  43 + "url": "http://api-online.test.boxfish.cn/share/wechat/finish/study/1/b834bf2e-2244-4884-a0ed-050ce0fa8c62"
  44 +
  45 + }
  46 +
  47 +
  48 +
  49 +- 阶段预测接口
  50 +
  51 +路径:
  52 +
  53 +api-online.test.boxfish.cn/stage/multiword/info?access_token=JWEIEfGYly
  54 +
  55 +方式:
  56 +
  57 +GET
  58 +
  59 + 返回结果例子:
  60 + {
  61 + "increment": {
  62 + "multi_word_increase": 1256,
  63 + "word_increase": 1151,
  64 + "reading_amount_increase": 3001,
  65 + "listening_time_increase": 33060,
  66 + "record_score_increase": 0,
  67 + "phrase_increase": 0
  68 + },
  69 + "weeks": "预计2周完成",
  70 + "level": 2,
  71 + "stage": "第一阶段"
  72 + }
  73 +
  74 +
  75 +
  76 + - 完成任务分享接口
  77 +路径:
  78 +
  79 +api-online.test.boxfish.cn/share/for?share_type=FINISH_STUDY&access_token=admin
  80 +
  81 +方式:
  82 +
  83 +POST
  84 +
  85 + 参数例子:
  86 + {
  87 + "title" : "BOXFiSH学员:学习全辅导,每天都上外教课!",
  88 + "imageName" : "award_logo.png",
  89 + "description" : "我在BOXFiSH学英语#学的不止是英语,更是全球视角下的独立思考。",
  90 + "award_code":"这里是奖品码参数"
  91 + }
  92 + 返回结果例子:
  93 + {
  94 + "score": "106",
  95 + "gold": "633",
  96 + "msg": "success",
  97 + "url": "http://api-online.test.boxfish.cn/share/wechat/finish/study/1/b834bf2e-2244-4884-a0ed-050ce0fa8c62"
  98 + }
  99 +
  100 + - 完成任务分享 - 分享成功
  101 +
  102 +路径:
  103 +
  104 +/successful/share?access_token=admin&share_type=FINISH_STUDY
  105 +
  106 +方式:
  107 +
  108 +POST
  109 +
  110 +路径参数:
  111 +share_type=FINISH_STUDY
  112 +
  113 +body参数:
  114 +
  115 +
  116 + {
  117 + "url":"http://localhost/share/wechat/finish/study/1299909/16f3cbf6-4922-4ce4-af60-21b2742bb8b2",
  118 + "platform":"QQ"
  119 + }
  120 +
  121 +
  122 +
  123 +
  124 +
  125 +
  126 + - user/me
  127 +
  128 + 路径:
  129 +
  130 + user/me
  131 +
  132 + 方式:
  133 +
  134 + GET
  135 +
  136 +
  137 + 返回参数:
  138 + {
  139 + "grade": "六年级",
  140 + "difficulty": "5",
  141 + "courseLevel": "5",
  142 + "publication": "PEP版六年级上",
  143 + "updateTime": "2017-03-09 19:06:29.0",
  144 + "update_at": "2017-03-09 19:06:29.0",
  145 + "plan": "ONE_HOUR",
  146 + "purchase": "OPEN_4P",
  147 + "mobile": "18264160050",
  148 + "interface_version": {
  149 + "finished": "2016-09-03T17:00:47.815",
  150 + "score": "2016-09-03T17:00:47.815",
  151 + "buy": "2016-09-03T17:00:47.815",
  152 + "synchronize_word": 1
  153 + },
  154 + "id": 1,
  155 + "username": "admin",
  156 + "nickname": "拒绝黄赌毒",
  157 + "realname": "盒子鱼",
  158 + "figure_url": "https://avatars.boxfish.cn/user/-12/figure/1411532427.jpg",
  159 + "catalog": "初中",
  160 + "completed": 6,
  161 + "first_login": true,
  162 + "gift": [
  163 + "lesson_convert_score"
  164 + ],
  165 + "score": 372738,
  166 + "goal": {
  167 + "id": 1,
  168 + "goal_step": 55000,
  169 + "current_step": 3218
  170 + },
  171 + "queue": {
  172 + "log_queue_url": "http://cropd5q7bl.mqs-cn-hangzhou.aliyuncs.com/",
  173 + "log_queue_name": "test-boxfish-log",
  174 + "event_queue_url": "http://cropd5q7bl.mqs-cn-hangzhou.aliyuncs.com/",
  175 + "event_queue_name": "test-boxfish-word-event",
  176 + "log_mns_queue_url": "https://1296825402699921.mns.cn-hangzhou.aliyuncs.com/",
  177 + "log_mns_queue_name": "test-boxfish-log",
  178 + "event_mns_queue_url": "https://1296825402699921.mns.cn-hangzhou.aliyuncs.com/",
  179 + "event_mns_queue_name": "test-boxfish-word-event"
  180 + },
  181 + "easemob_username": "c4ca4238a0b923820dcc509a6f75849b",
  182 + "easemob_password": "bc7235a51e34c1d3ebfddeb538c20c71",
  183 + "current_login_type": "email",
  184 + "today_score": 0,
  185 + "qcloud": {
  186 + "identifier": "c4ca4238a0b923820dcc509a6f75849b",
  187 + "sign": "eJxFkFFPgzAQx78Lz8ZcSzuoiQ9sOEUhEecc7IWUUlidMOy6yTR*dxlh8emS3*8ud--7sV7DxTVvW1Vk3GS2LqwbC6yrAcuuVVpmvDRS9xhRSjHAxR6l3qtd0wsMiCJsA-xLVcjGqFINg4IITrDtcshZXzAUQlBgfFI61CUsH2f2quqbo7vlLIj9JEafkVOlm-hZvYuHwyM6QuIGH2lrnrbGv69MINcz031-eUG1mmO*Cb2lnMOb8bvEneomJKtpzV5wukj0up7oHEFUnrzby7Jimw2xz8HI*XJiUzpKo2o5cJchmzrARs6F2B0ak5lTK4c--f4BR3Bemg__"
  188 + },
  189 + "version": "100.0.0",
  190 + " is_school_student": true,
  191 + "user_role": [
  192 + "user",
  193 + "teacher",
  194 + "student"
  195 + ]
  196 + }
  197 +
  198 +
  199 + - 新版首页
  200 +
  201 + /event/statistic/stage/info
  202 +
  203 + 方式:
  204 +
  205 + GET
  206 +
  207 +
  208 + 返回参数:
  209 + {
  210 + "stage_level": 3,
  211 + "stage": 1,
  212 + "progress": "0.00",
  213 + "record_score": 0,
  214 + "listening_duration": 0,
  215 + "multiword_count": 0
  216 + }
  217 +
  218 +
  219 +
@@ -255,10 +255,12 @@ @@ -255,10 +255,12 @@
255 * [网络状态检测](未整理/网络状态检测.md) 255 * [网络状态检测](未整理/网络状态检测.md)
256 * [网页测试Demo数据](未整理/网页测试Demo数据.md) 256 * [网页测试Demo数据](未整理/网页测试Demo数据.md)
257 * [获取当前分类下存在的班级](未整理/获取当前分类下存在的班级.md) 257 * [获取当前分类下存在的班级](未整理/获取当前分类下存在的班级.md)
  258 +* [老罗](laoluo.md)
  259 +* [老罗](laoluo1.md)
258 * [分享](yjw接口文档/y分享.md) 260 * [分享](yjw接口文档/y分享.md)
259 * [口语测评](yjw接口文档/y口语测评.md) 261 * [口语测评](yjw接口文档/y口语测评.md)
260 * [手机号接口](yjw接口文档/y手机号接口.md) 262 * [手机号接口](yjw接口文档/y手机号接口.md)
261 * [提交成绩](yjw接口文档/y提交成绩.md) 263 * [提交成绩](yjw接口文档/y提交成绩.md)
262 * [每日推送](yjw接口文档/y每日推送.md) 264 * [每日推送](yjw接口文档/y每日推送.md)
263 * [阶段数](yjw接口文档/y阶段数.md) 265 * [阶段数](yjw接口文档/y阶段数.md)
264 -* [文案组分享统计](yjw接口文档/y分享统计.md) 266 +* [文案组分享统计](yjw接口文档/y分享统计.md)
  1 +## 内容研发环境部署
  2 +
  3 +### 一 资源管理 rms
  4 +|名称|值|描述
  5 +|||
  6 +|主机|192.168.0.111:8060
  7 +|目录|/root/projects/rms-web-1.0-SNAPSHOT.jar|
  8 +|地址|http://192.168.0.111:8060/|
  9 +|服务启动|service rms start|
  10 +|redis|192.168.0.111|database(5)
  11 +|rabbitMq|192.168.1.248|(user:admin,pass:boxfish, host:/)
  12 +|总表对比表|http://192.168.0.111:10504/|
  13 +|认证系统|http://192.168.0.111:8085|
  14 +|日志系统|http://192.168.0.111:8088|
  15 +|ffmpeg|/usr/bin/ffprobe|使用tika功能需要使用这个软件
  16 +|jackrabbit|/share/rms/jackrabbit|
  17 +|跑课资源日志|/share/rms_resource.log|
  18 +
  19 +### 二 4A:用户管理 register
  20 +|名称|值|描述
  21 +|||
  22 +|主机|192.168.0.111:8820|
  23 +|目录|/root/projects/register.jar|
  24 +|地址|http://192.168.0.111:8820/|
  25 +|服务启动|service register start|
  26 +|数据库|192.168.0.100|4a
  27 +
  28 +### 三 4A:用户认证 authentication
  29 +|名称|值|描述
  30 +|||
  31 +|主机|192.168.0.111:8085|
  32 +|目录|/root/projects/authentication-0.0.1-SNAPSHOT.jar|
  33 +|服务启动|service authentication start|
  34 +|redis|192.168.0.111|database(0)
  35 +|数据库|192.168.0.100|4a
  36 +
  37 +### 四 4A:日志服务 audit
  38 +|名称|值|描述
  39 +|||
  40 +|主机|192.168.0.111:8088|
  41 +|目录|/root/projects/audit.jar|
  42 +|地址|http://192.168.0.111:8088/|
  43 +|服务启动|service audit start|
  44 +|rabbitmq|192.168.1.248|(user:admin,pass:boxfish, host:/)
  45 +|数据库|192.168.0.100|4a
  46 +
  47 +### 五 跑课程序 onekey
  48 +|名称|值|描述
  49 +|||
  50 +|主机|192.168.0.111|8090
  51 +|目录|/root/projects/bebase-onekey-webapp-0.0.1-SNAPSHOT.jar|
  52 +|地址|http://192.168.0.111:8090/single|
  53 +|服务启动|service onekey start|
  54 +|数据库1|192.168.0.100|bebase
  55 +|数据库2|192.168.0.100|statistic
  56 +|redis|192.168.0.111|databse(5)
  57 +|跑课目录|/share/svn|
  58 +|删除json|/share/json|
  59 +|rms|http://192.168.0.111:8060/lookup/{resType}/{resPath}?resName=xxx|http://192.168.0.111:8060/lookup/image/default?resName=check
  60 +|总表对比表|http://192.168.0.111:10504/|
  61 +|nlp|http://192.168.0.111:11777/nlp/article|
  62 +|同步脚本|/share/sh/rsync.sh|同步课程json和data到100服务器
  63 +
  64 +### 六 总表对比表
  65 +|名称|值|描述
  66 +|||
  67 +|主机|192.168.0.111:10504|
  68 +|目录|/root/projects/relationship-0.0.1-SNAPSHOT.jar|
  69 +|地址|http://192.168.0.111:16384|
  70 +|服务启动|service relation start|
  71 +|数据库|192.168.0.100|course_online
  72 +|redis|192.168.0.111|database(5)
  73 +
  74 +
  75 +
  1 +## 内容研发实现
  2 +### 一 资源管理
  3 +1、jackrabbit库的启动(RepositoryStartup类)
  4 +>
  5 +* 首先启动入口为RepositoryStartup类, 首先会尝试获取到启动的配置文件,然后根据配置文件中库的位置(rep_home)以及库配置文件的位置(rep_config),启动对应的Repository。
  6 +* 其次将Repository注入到JackrabbitUtils与ServletContext等上下文中。
  7 +* 紧接着执行启动管道StartupPipeline, 管道上会安置一些启动阀门StartupValve,依次执行对应的Valve。StartupValve包含有FolderNodeTreeValve(目录节点树构造Valve), NodeRegisterValve(节点注册Valve,当需要调整节点Node时,需要调整resouces/nodetype/*.cnd文件结构, 然后启动的时候,会自动去调整节点结构),RmiSocketValve(socket远程调用线程池启动valve, 当开启Socket远程调用的时候,启动的时候需要启动对应的线程池)。
  8 +* 至此启动完成。
  9 +
  10 +2、文件节点上传(ContentController.uploadsubmit)·
  11 +>
  12 +* 首先调用(ContentController.uploadFile)将文件上传到服务器的临时文件中,上传的时候会依次调用Tika模块中的TikaFilter链,分别为FileNameTikaFilter(文件名过滤,文件名不能以空格结尾例如“aaa .jpg”,因为这样会破坏跑课调用; 不能无文件后缀名),FileSizeTikaFilter(不允许空文件),CodeTikaFilter(文件编码格式的验证,视频视频码需要为h264,音频码为aac),ContentTypeTikaFilter(文件类型的验证)。只有当所有验证条件都通过之后,文件才能真正上传到服务器。
  13 +* 上传之后,需要调用ContentController.uploadsubmit进行提交,提交分为正常提交,覆盖提交,全部覆盖提交,跳过,等同于文件系统中文件修改操作中的覆盖跳过。提交的时候需要使用tika读取资源文件的相关属性, 然后将其保存到对应的节点属性中,最终将其保存。
  14 +
  15 +3、远程调用RMI(RmiController.lookupResource)
  16 +>
  17 +* 调用/lookup/{restype}/{respath}接口,restype资源类型(包含image,audio,video),respath资源路径映射(见/resources/datamap/map.properties)。
  18 +* 根据资源类型, 映射到对应的查找规则(每种资源都有自己的查找规则),如果适配不到对应的规则,则返回404,提示“您所要查找的资源适配不到规则”。如果存在然后根据查找规则,资源名称查找到对应的节点,如果没搜索到对应的资源节点, 返回404,提示"您所要查找的资源xxx.jpg不存在"。
  19 +* 如果存在,则将md5、duration、extname属性设置到响应头中返回。
  20 +* 将文件流写入到Respose当中,与响应头一同返回。
  21 +
  22 +4、节点搜索(QueryController.query())
  23 +>
  24 +* 表单提交查询条件到/query接口,表单对象QueryContentEntity会自动生成对应的sql2语句。
  25 +* 根据sql2语句进行查询,查询到NodeIterator之后需要进行简单分页。因为jackrabbit不支持limit语句,所以分页需要使用NodeIterator.skip的方式来辅助分页。具体方式为NodeIterator.skip((page+1)*pageSize), 然后NodeIterator迭代一页或者是到末尾,这样计算出一页的数据,封装到QueryContentEntity中返回.
  26 +
  27 +5 节点框架(Node)
  28 +> 节点继承体系,继承父节点,同时会继承父节点的属性。例如在文件节点中添加md5属性,图片节点,视频节点,音频节点都具有md5属性。
  29 +>
  30 +|名称|属性|描述|继承自|
  31 +||||
  32 +|RootNode|根节点|所有节点的祖节点|无
  33 +|FileNode|文件节点|文件|RootNode
  34 +|FolderNode|文件夹节点|文件夹可以包含其他的节点|RootNode
  35 +|ImageNode|图片节点|图片|FileNode
  36 +|AudioNode|音频节点|音频|FileNode
  37 +|VideoNode|视频节点|视频|FileNode
  38 +
  39 +6、系统工作原理
  40 +>
  41 +* 使用jcr协议对文件系统进行抽象, 使用jackrabbit进行节点管理,对外提供web页面进行内容管理与内容查询,同时提供接口供其他系统进行系统集成(例如跑课)。
  42 +* jackrabbit库包含节点注册(nodetype)、节点属性存储(debry)、节点文件存储(datastore),搜索引擎(lucence),权限管理(privileges),版本控制等等功能.
  43 +
  44 +7、音频缓存重建
  45 +>
  46 +* 可以直接手动删除192.168.0.111(5)里面的"/资源/音频"中的缓存。
  47 +* 然后调用/resource/list/{type}接口,type为audio,即可。
  48 +
  49 +
  50 +## 4A内部认证
  51 +### 一、用户管理(Register)
  52 +
  53 +> 1、用户添加
  54 +>
  55 +* 接口:/user
  56 +* method: POST
  57 +* 参数:
  58 +>
  59 +|名称|值|参数
  60 +|||
  61 +|username|用户名|
  62 +|password|密码|
  63 +|nickname|昵称|
  64 +|adminPassword|管理员密码|需要用管理员密码才能添加用户
  65 +
  66 +2、用户修改密码
  67 +>
  68 +* 接口:/user
  69 +* method:PUT
  70 +* 参数:
  71 +>
  72 +|名称|值|参数
  73 +|||
  74 +|oldpassword|用户旧密码|
  75 +|newpassword|新密码|
  76 +|id|用户id|
  77 +
  78 +3、删除用户
  79 +>
  80 +* 接口:/user
  81 +* method:DELETE
  82 +* 参数:id, adminPassword(管理员密码)
  83 +
  84 +4、获取用户列表
  85 +>
  86 +* 接口:/user
  87 +* method:GET
  88 +* 参数:page=1&size=10
  89 +
  90 +
  91 +### 二、用户认证(Authentication)
  92 +> 1、用户登录
  93 +* 接口:/login
  94 +* method:POST
  95 +* 参数:
  96 +>
  97 +|名称|值|
  98 +|||
  99 +|username|用户名|
  100 +|password|密码|
  101 +
  102 +> 2、token验证
  103 +* 接口:/validation_token
  104 +* method:PUT
  105 +* 参数:
  106 +>
  107 +|名称|值|
  108 +|||
  109 +|token|token|
  110 +|appCode|app编码|
  111 +
  112 +> 3、注销
  113 +* 接口:/logout
  114 +* method:PUT
  115 +* 参数:access_token=xxxx
  116 +
  117 +
  118 +> 4、根据token获取用户id
  119 +* 接口:/userid
  120 +* method:GET
  121 +* 参数:access_token=xxxx
  122 +
  123 +
File mode changed
File mode changed
File mode changed
File mode changed
File mode changed
File mode changed