薛晓波 il y a 6 ans
commit
e0300d688b
93 fichiers modifiés avec 17534 ajouts et 0 suppressions
  1. BIN
      .DS_Store
  2. 2 0
      .gitattributes
  3. 29 0
      .gitignore
  4. 114 0
      .mvn/wrapper/MavenWrapperDownloader.java
  5. BIN
      .mvn/wrapper/maven-wrapper.jar
  6. 1 0
      .mvn/wrapper/maven-wrapper.properties
  7. 10 0
      conf/FEATURE_CONFIG.json
  8. 12 0
      conf/OSS_CONFIG.json
  9. BIN
      data/.DS_Store
  10. 1 0
      data/12306.json
  11. BIN
      data/12306.xlsx
  12. 6907 0
      data/2016移动应用决赛.json
  13. 14 0
      data/2017移动应用决赛.json
  14. 2416 0
      data/2018移动应用决赛.json
  15. 286 0
      mvnw
  16. 161 0
      mvnw.cmd
  17. BIN
      oss/.DS_Store
  18. 103 0
      pom.xml
  19. BIN
      src/.DS_Store
  20. BIN
      src/main/.DS_Store
  21. BIN
      src/main/java/.DS_Store
  22. 28 0
      src/main/java/META-INF/MANIFEST.MF
  23. BIN
      src/main/java/edu/.DS_Store
  24. BIN
      src/main/java/edu/nju/.DS_Store
  25. 13 0
      src/main/java/edu/nju/BugApplication.java
  26. 244 0
      src/main/java/edu/nju/controller/AnalyzeController.java
  27. 91 0
      src/main/java/edu/nju/controller/AnnotationController.java
  28. 85 0
      src/main/java/edu/nju/controller/DeleteController.java
  29. 324 0
      src/main/java/edu/nju/controller/ExtraController.java
  30. 113 0
      src/main/java/edu/nju/controller/GraphController.java
  31. 164 0
      src/main/java/edu/nju/controller/HistoryController.java
  32. 63 0
      src/main/java/edu/nju/controller/OssController.java
  33. 232 0
      src/main/java/edu/nju/controller/RecommendController.java
  34. 72 0
      src/main/java/edu/nju/controller/RelationController.java
  35. 177 0
      src/main/java/edu/nju/controller/ReportController.java
  36. 222 0
      src/main/java/edu/nju/controller/UploadController.java
  37. 38 0
      src/main/java/edu/nju/dao/AnnotationDao.java
  38. 119 0
      src/main/java/edu/nju/dao/BugDao.java
  39. 92 0
      src/main/java/edu/nju/dao/BugHistoryDao.java
  40. 190 0
      src/main/java/edu/nju/dao/BugMirrorDao.java
  41. 70 0
      src/main/java/edu/nju/dao/BugPageDao.java
  42. 42 0
      src/main/java/edu/nju/dao/BugScoreDao.java
  43. 89 0
      src/main/java/edu/nju/dao/CTBDao.java
  44. 30 0
      src/main/java/edu/nju/dao/DotDao.java
  45. 33 0
      src/main/java/edu/nju/dao/ExamDao.java
  46. 42 0
      src/main/java/edu/nju/dao/KWDao.java
  47. 52 0
      src/main/java/edu/nju/dao/ReportDao.java
  48. 38 0
      src/main/java/edu/nju/dao/StuInfoDao.java
  49. 53 0
      src/main/java/edu/nju/dao/TestCaseDao.java
  50. 91 0
      src/main/java/edu/nju/dao/ThumsUpDao.java
  51. 20 0
      src/main/java/edu/nju/dao/UserRecordDao.java
  52. 152 0
      src/main/java/edu/nju/entities/Bug.java
  53. 64 0
      src/main/java/edu/nju/entities/BugHistory.java
  54. 177 0
      src/main/java/edu/nju/entities/BugMirror.java
  55. 80 0
      src/main/java/edu/nju/entities/BugPage.java
  56. 51 0
      src/main/java/edu/nju/entities/BugScore.java
  57. 65 0
      src/main/java/edu/nju/entities/CaseToBug.java
  58. 41 0
      src/main/java/edu/nju/entities/Dot.java
  59. 86 0
      src/main/java/edu/nju/entities/Exam.java
  60. 73 0
      src/main/java/edu/nju/entities/ImageAnnotation.java
  61. 52 0
      src/main/java/edu/nju/entities/KeyWords.java
  62. 167 0
      src/main/java/edu/nju/entities/Report.java
  63. 53 0
      src/main/java/edu/nju/entities/StuInfo.java
  64. 98 0
      src/main/java/edu/nju/entities/TestCase.java
  65. 55 0
      src/main/java/edu/nju/entities/ThumsUp.java
  66. 73 0
      src/main/java/edu/nju/entities/UserRecord.java
  67. 327 0
      src/main/java/edu/nju/service/AnalyzeService.java
  68. 37 0
      src/main/java/edu/nju/service/AnnotationService.java
  69. 48 0
      src/main/java/edu/nju/service/CTBService.java
  70. 115 0
      src/main/java/edu/nju/service/DeleteService.java
  71. 196 0
      src/main/java/edu/nju/service/DivRecService.java
  72. 37 0
      src/main/java/edu/nju/service/DotService.java
  73. 122 0
      src/main/java/edu/nju/service/ExtraService.java
  74. 381 0
      src/main/java/edu/nju/service/GraphService.java
  75. 176 0
      src/main/java/edu/nju/service/GuideService.java
  76. 193 0
      src/main/java/edu/nju/service/HistoryService.java
  77. 16 0
      src/main/java/edu/nju/service/OssService.java
  78. 440 0
      src/main/java/edu/nju/service/RecommendService.java
  79. 276 0
      src/main/java/edu/nju/service/ReportService.java
  80. 325 0
      src/main/java/edu/nju/service/SaveService.java
  81. 47 0
      src/main/java/edu/nju/service/UserBasedService.java
  82. 10 0
      src/main/java/edu/nju/util/Algorithm.java
  83. 40 0
      src/main/java/edu/nju/util/Algorithm_1.java
  84. 21 0
      src/main/java/edu/nju/util/Algorithm_2.java
  85. 81 0
      src/main/java/edu/nju/util/ExcelToJson.java
  86. 146 0
      src/main/java/edu/nju/util/HTTP.java
  87. 26 0
      src/main/java/edu/nju/util/LoadConf.java
  88. 47 0
      src/main/java/edu/nju/util/PMF.java
  89. 129 0
      src/main/java/edu/nju/util/StringMatch.java
  90. 101 0
      src/main/java/edu/nju/util/UserCF.java
  91. BIN
      src/main/resources/.DS_Store
  92. 11 0
      src/main/resources/application.properties
  93. 16 0
      src/test/java/edu/nju/bug/BugApplicationTests.java

BIN
.DS_Store


+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto

+ 29 - 0
.gitignore

@@ -0,0 +1,29 @@
+HELP.md
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+/build/
+
+### VS Code ###
+.vscode/

+ 114 - 0
.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,114 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL =
+            "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: : " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
.mvn/wrapper/maven-wrapper.jar


+ 1 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip

+ 10 - 0
conf/FEATURE_CONFIG.json

@@ -0,0 +1,10 @@
+{
+	FEATURE_CONFIG:{
+	    EMAIL:true,
+	    MEDAL:false,
+	    OSS:true,
+	    SMS:true,
+	    WEBIDE:true,
+	    WECHAT:true
+	}
+}

+ 12 - 0
conf/OSS_CONFIG.json

@@ -0,0 +1,12 @@
+{
+	OSS_CONFIG:{
+	    ACCESS_KEY_ID:"IvS323TIcWUT57MG",
+	    ACCESS_KEY_SECRET:"dYml7rvT8stQkoSjMYlfRTxNj9dEsI",
+	    BUCKET:"mooctest-site",
+	    END_POINT:"http://oss-cn-shanghai.aliyuncs.com",
+	    EXPIRE_TIME:600,
+	    REGION:"oss-cn-shanghai",
+	    ROLE_ARN:"acs:ram::1525065817051996:role/oss-archive",
+	    PATH_PRE:'http://mooctest-site.oss-cn-shanghai.aliyuncs.com/'
+	}
+}

BIN
data/.DS_Store


+ 1 - 0
data/12306.json

@@ -0,0 +1 @@
+[{"item":"出行服务","children":[{"item":"余票查询","children":[{"item":"余票搜索"}]},{"item":"时刻表查询","children":[{"item":"车次(时刻)"},{"item":"站站(时刻)"}]},{"item":"正晚点查询","children":[{"item":"车次(正晚点)"},{"item":"站站(正晚点)"}]},{"item":"车站大屏","children":[{"item":"候车信息"},{"item":"到达信息"},{"item":"刷新"}]},{"item":"中铁商城","children":[{"item":"首页"},{"item":"推荐"},{"item":"我的"}]},{"item":"铁路社区","children":[{"item":"搜索"},{"item":"发布帖子"},{"item":"其它"}]}]},{"item":"我的行程","children":[{"item":"出行贴士","children":[{"item":"购票"},{"item":"退改签"},{"item":"客运"}]},{"item":"添加行程","children":[{"item":"车次(行程)"},{"item":"站站(行程)"}]}]},{"item":"个人中心","children":[{"item":"历史行程","children":[{"item":""}]},{"item":"签到","children":[{"item":"排行榜"}]},{"item":"积分","children":[{"item":"获取详情"},{"item":"积分规则"}]},{"item":"任务","children":[{"item":"去完成"},{"item":"等级获取"}]}]}]

BIN
data/12306.xlsx


+ 6907 - 0
data/2016移动应用决赛.json

@@ -0,0 +1,6907 @@
+{
+    "RECORDS": [
+        {
+            "case_id": "216",
+            "id": "10010000012312",
+            "case_take_id": "2336",
+            "report_id": "10010000012311",
+            "create_time_millis": "1481336252572",
+            "bug_category": "其他",
+            "description": "步行记录不能及时更新,有时需要等一段时间才能更新步行记录,有时可以及时更新,这会造成用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-10-14-51[1]_end5fa2ba42372a2d9d1329eec4d98a346b.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-10-15-23[1]_end745f056a17e14c498d213ad04bf295d9.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012352",
+            "case_take_id": "2336",
+            "report_id": "10010000012351",
+            "create_time_millis": "1481337516317",
+            "bug_category": "其他",
+            "description": "对方手机上的跑步记录在我账号上不能进行及时更新,好友手机步行记录为88(因无法获取好友的图片就没上传好友的运动记录),我手机上的好友记录为0。不能进行及时更新用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-10-37-17[1]_enda069fac236dded7367939cb3374ea4ae.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012369",
+            "case_take_id": "2336",
+            "report_id": "10010000012366",
+            "create_time_millis": "1481338106708",
+            "bug_category": "用户体验",
+            "description": "已被清除的聊天记录可以反复进行清空。应给出提示信息,聊天信息已删除,不要可以反复进行聊天信息删除,用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-10-47-07[1]_end00269fe3cf2176b37646d4c8b0bb675a.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-10-47-10[1]_enddfcdd7201020c8d500a441fb92ef17f7.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012395",
+            "case_take_id": "2336",
+            "report_id": "10010000012394",
+            "create_time_millis": "1481338936180",
+            "bug_category": "功能不完整",
+            "description": "图一群聊信息界面我的昵称应变成刘,但图二返回群聊信息界面仍显示为我以前的昵称Sunny,修改我的昵称功能没有实现",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-00-43[1]_end88723b0ace6f6b098b3e85dbac9bd11a.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-00-48[1]_end007d84b23f7edf185066476fe5f7c5d5.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012421",
+            "case_take_id": "2336",
+            "report_id": "10010000012419",
+            "create_time_millis": "1481339622544",
+            "bug_category": "用户体验",
+            "description": "图一群中有好友“觉”,再次添加好友时,会同样列出该好友“觉”如图二所示。图二的好友不能进行添加,那么列出该好友,用户体验很不好。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-12-23[1]_end548567024c7af451b07ec511e54b208c.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-12-28[1]_end408d3fda8e622e7dc27d0a99c70a97b8.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012480",
+            "case_take_id": "2336",
+            "report_id": "10010000012474",
+            "create_time_millis": "1481340573560",
+            "bug_category": "功能不完整",
+            "description": "图一将体重记录应为40公斤,图二但显示为50.6公斤\n图三将体重记录应为70公斤,但显示为57.8公斤,体重无规律的变动,造成用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-28-16[1]_endde238b43e1ac3d1bf15ccf5684d5937d.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-28-23[1]_endab89641e0f2d6a87363df80b6ce2fc93.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-30-45[1]_endda219f9140a30032dfe73a3322d83ef6.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-31-09[1]_end23bf0f331feb4a29dd8d880a5b3a31cf.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012523",
+            "case_take_id": "2336",
+            "report_id": "10010000012520",
+            "create_time_millis": "1481341209825",
+            "bug_category": "用户体验",
+            "description": "图一显示已经修改成功的出生日期为2033,图二是可以勾选日期为2033。2033年的用户的还没有出生,不应该可以将出生日期修改为2033",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-36-56[1]_end70b5477b635959a6dc62db6118149c67.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-37-01[1]_endbf36f1649598165263690e5f900d6e34.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012561",
+            "case_take_id": "2336",
+            "report_id": "10010000012556",
+            "create_time_millis": "1481341629462",
+            "bug_category": "用户体验",
+            "description": "体重最多可以选择到150公斤,超过150公斤的用户就不能进行自己的体重值。目前体重超过150公斤的用户是大量存在的,限制值为150让用户体验很不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-46-28[1]_end5376e8597deaf818048dcc5d5f5dd17b.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012623",
+            "case_take_id": "2336",
+            "report_id": "10010000012621",
+            "create_time_millis": "1481342438832",
+            "bug_category": "用户体验",
+            "description": "身高为50cm,体重为150公斤的用户是不可能存在的,所以不应该可以将身高体重设置为这个值。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-11-59-10[1]_end6a4cd9bc854c47865bb4a23675cbe2e5.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012310",
+            "case_take_id": "2330",
+            "report_id": "10010000012298",
+            "create_time_millis": "1481336199169",
+            "bug_category": "用户体验",
+            "description": "选择为比赛做准备时,可选的准备时间只有部分时间,用户体验不够好",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012345",
+            "case_take_id": "2330",
+            "report_id": "10010000012298",
+            "create_time_millis": "1481337329197",
+            "bug_category": "性能",
+            "description": "有时明明有网,却显示没有网络,无法使用gps功能",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012354",
+            "case_take_id": "2330",
+            "report_id": "10010000012347",
+            "create_time_millis": "1481337548285",
+            "bug_category": "用户体验",
+            "description": "报名活动后没有取消报名的选项,用户体验不好",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012358",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481337682886",
+            "bug_category": "用户体验",
+            "description": "设置昵称时,实际上是有长度限制的,但没有显示出来",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012362",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481337924755",
+            "bug_category": "用户体验",
+            "description": "目标步数设置时只能1000步1000步的设,不精确",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012365",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481338061991",
+            "bug_category": "用户体验",
+            "description": "体重目标最多居然能设到150公斤,不切实际",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012380",
+            "case_take_id": "2330",
+            "report_id": "10010000012298",
+            "create_time_millis": "1481338445330",
+            "bug_category": "用户体验",
+            "description": "跑步时步数并没有实时更新,而是等跑完了结束跑步时步数才加上去",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012393",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481338848891",
+            "bug_category": "用户体验",
+            "description": "个人资料中生日这一栏我有异议,首先有必要设为非公开吗?其次作为一个跑步软件,知道用户生日的必要性不高",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012402",
+            "case_take_id": "2330",
+            "report_id": "10010000012347",
+            "create_time_millis": "1481339153300",
+            "bug_category": "用户体验",
+            "description": "如若不小心进入了开始跑步的状态,无法用退出键退出,只能先暂停,然后再点结束跑步",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012435",
+            "case_take_id": "2330",
+            "report_id": "10010000012347",
+            "create_time_millis": "1481339865786",
+            "bug_category": "不正常退出",
+            "description": "在发现界面的好友里点扫一扫,偶尔会出现相机出现故障,退出的情况",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012466",
+            "case_take_id": "2330",
+            "report_id": "10010000012298",
+            "create_time_millis": "1481340360449",
+            "bug_category": "用户体验",
+            "description": "在添加计划里的能力里,时间最多只能到1小时12分,用户体验不够好",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012516",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481341154155",
+            "bug_category": "功能不完整",
+            "description": "我的成绩单里的步数与实际运动后显示的步数不一致",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012555",
+            "case_take_id": "2330",
+            "report_id": "10010000012298",
+            "create_time_millis": "1481341600306",
+            "bug_category": "用户体验",
+            "description": "首页上标识的一些信息解释的不够清楚,如热量没有单位",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012620",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481342400666",
+            "bug_category": "用户体验",
+            "description": "在我的里面设置生日时,生日居然可以在当前年份之后!",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012635",
+            "case_take_id": "2330",
+            "report_id": "10010000012350",
+            "create_time_millis": "1481342612590",
+            "bug_category": "用户体验",
+            "description": "退出当前帐号居然还要密码!",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012436",
+            "case_take_id": "2332",
+            "report_id": "10010000012320",
+            "create_time_millis": "1481339866378",
+            "bug_category": "功能不完整",
+            "description": "传感器在运动中途关闭之后,记步功能失效,当再次开启时,不是实时更新",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012437",
+            "case_take_id": "2332",
+            "report_id": "10010000012320",
+            "create_time_millis": "1481339869754",
+            "bug_category": "功能不完整",
+            "description": "传感器在运动中途关闭之后,记步功能失效,当再次开启时,不是实时更新",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012528",
+            "case_take_id": "2332",
+            "report_id": "10010000012304",
+            "create_time_millis": "1481341320210",
+            "bug_category": "用户体验",
+            "description": "1、点击启动运动健康,进入首页,点击窗口上方的“我的”选项卡;\n2、在“我的”界面,点击目标,进入目标页面\n3、先拿一个手指选中滑动条\n4、手指不要离开屏幕,增加手指数目\n5、然后滑动,在屏幕上几根手指任意滑动(上下也可以)\n6、此时运动目标一致在刷新",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012596",
+            "case_take_id": "2332",
+            "report_id": "10010000012570",
+            "create_time_millis": "1481342082343",
+            "bug_category": "功能不完整",
+            "description": "在步数详细界面,无法导出详细的运动数据\n建议:可以导出到Excel",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012661",
+            "case_take_id": "2332",
+            "report_id": "10010000012612",
+            "create_time_millis": "1481343128661",
+            "bug_category": "用户体验",
+            "description": "编辑计划名称时,设置输入的字符长度过长,修改完之后,界面不是很美观\n建议:限制字符长度到10以内",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012573",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341806872",
+            "bug_category": "功能不完整",
+            "description": "当距离小于移动力显示不计入统计,但是记录中仍然有记录",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012575",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341837657",
+            "bug_category": "功能不完整",
+            "description": "高度变化时,登高变化不变,对高度变化不够敏感",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012581",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341886860",
+            "bug_category": "功能不完整",
+            "description": "配速问题:\n走路的速度快,而跑步反而变慢",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012584",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341931264",
+            "bug_category": "功能不完整",
+            "description": "进行了两次运动,但是记录的先后顺序错误",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012586",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341961711",
+            "bug_category": "用户体验",
+            "description": "首页,设定目标之后,不能改变目标,只能开始训练",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012589",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481341990767",
+            "bug_category": "功能不完整",
+            "description": "体脂记录时,时间小于当前时间,不能正常记录",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012592",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481342032732",
+            "bug_category": "功能不完整",
+            "description": "血糖记录时,在中午可以记录晚上的血糖,与实际情况相违背",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012594",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481342066723",
+            "bug_category": "功能不完整",
+            "description": "当前不是最新版本,但是设置中检查更新,显示已为最新版",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012598",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481342094738",
+            "bug_category": "功能不完整",
+            "description": "我的成绩单,信息查看,累计距离不正确",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012602",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481342136144",
+            "bug_category": "用户体验",
+            "description": "标题栏推荐活动中,只推荐了2个活动,但是活动中有4个活动在进行中",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012605",
+            "case_take_id": "2361",
+            "report_id": "10010000012526",
+            "create_time_millis": "1481342171726",
+            "bug_category": "其他",
+            "description": "编辑个人头像时,写的需要审核,但是未经过审核直接更改成功",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012303",
+            "case_take_id": "2328",
+            "report_id": "10010000012296",
+            "create_time_millis": "1481335891200",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入首页,点击体重模块的记录按钮,见截图1;对日期进行选择操作,见截图2;该应用应该是记录从用户开始使用这个应用时,以及之后的体重变化情况;但是测试时发现,可选择使用该应用之前的日期,见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/11/19/Screenshot_20161210-110736.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/11/24/Screenshot_20161210-110746.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/11/31/Screenshot_20161210-110756.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012357",
+            "case_take_id": "2328",
+            "report_id": "10010000012353",
+            "create_time_millis": "1481337665179",
+            "bug_category": "安全",
+            "description": "成功登录应用进入首页,点击首页上方导航栏“我的”进入“我的”界面,点击个人头像进入账户中心,见截图2;点击退出账号,未显示是否确认退出,而是显示提示该账号登录过的应用都会退出该账号,见截图3;继续点击退出账号,显示必须输入密码,见截图4\n测试时发现不输入密码无法退出,虽然在一方面保证了安全性,但是另一方面也不安全,如手机丢后,别人可使用该账号进行很多关于安全方面的操作",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/39/Screenshot_20161210-113451.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/51/Screenshot_20161210-113503.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/59/Screenshot_20161210-113513.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/41/05/Screenshot_20161210-113350.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012376",
+            "case_take_id": "2328",
+            "report_id": "10010000012375",
+            "create_time_millis": "1481338319226",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入首页,点击首页上方导航栏“我的”进入“我的”界面,点击个人头像进入账户中心,见截图2;点击退出账号,未显示是否确认退出,而是显示提示该账号登录过的应用都会退出该账号,见截图3;",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/51/54/Screenshot_20161210-113451.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/51/56/Screenshot_20161210-113503.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/51/59/Screenshot_20161210-113513.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012391",
+            "case_take_id": "2328",
+            "report_id": "10010000012389",
+            "create_time_millis": "1481338774328",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入首页,点击首页上方导航栏“发现”进入“发现”界面,点击“我的好友”进入好友列表界面,点击扫一扫,添加已经是好友的朋友“zs”时,并没有提示“该用户已是好友”,而是显示如图2的加好友界面",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/00/24/Screenshot_20161210-115907.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/00/25/Screenshot_20161210-115712.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012414",
+            "case_take_id": "2328",
+            "report_id": "10010000012412",
+            "create_time_millis": "1481339434511",
+            "bug_category": "性能",
+            "description": "成功登录应用,进入发现界面,再进入好友列表界面,点击扫一扫添加好友,见截图1;发送添加好友请求后,好友在10s内点击接受,但是过了3分钟左右才收到好友的接受回复消息,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/10/34/Screenshot_20161210-115712.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/10/34/Screenshot_20161210-120037.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012442",
+            "case_take_id": "2328",
+            "report_id": "10010000012440",
+            "create_time_millis": "1481339921173",
+            "bug_category": "不正常退出",
+            "description": "成功登录应用,在手机显示的11点14分左右并未对手机进行任何操作,但是应用显示了下线通知,见截图1;查看此时的网络连接等信息,均正常,见截图2;未对应用进行相关操作,手机自动锁屏后解锁,应用又自动上线了",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/40/Screenshot_20161210-121644.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/41/Screenshot_20161210-121657.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012472",
+            "case_take_id": "2328",
+            "report_id": "10010000012470",
+            "create_time_millis": "1481340514728",
+            "bug_category": "功能不完整",
+            "description": "成功登录并进入应用首页,未发现睡眠模块的记录功能,只有查看详情功能,见截图1\n因为没有记录功能,所以查看详情时睡眠模块无数据显示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/28/34/Screenshot_20161210-122702.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012496",
+            "case_take_id": "2328",
+            "report_id": "10010000012493",
+            "create_time_millis": "1481340907371",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入首页,点击血压模块的记录按钮,见截图1;对日期进行选择操作,见截图2;该应用应该是记录从用户开始使用这个应用时,以及之后的血压变化情况;但是测试时发现,可选择使用该应用之前的日期,见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/35/05/Screenshot_20161210-123323.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/35/06/Screenshot_20161210-123300.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/35/07/Screenshot_20161210-123251.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012511",
+            "case_take_id": "2328",
+            "report_id": "10010000012509",
+            "create_time_millis": "1481341081064",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入首页,点击血糖模块的记录按钮,见截图1;对日期进行选择操作,见截图2;该应用应该是记录从用户开始使用这个应用时,以及之后的血糖变化情况;但是测试时发现,可选择使用该应用之前的日期,见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/37/58/Screenshot_20161210-123514.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/37/59/Screenshot_20161210-123508.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/38/00/Screenshot_20161210-123502.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012577",
+            "case_take_id": "2328",
+            "report_id": "10010000012574",
+            "create_time_millis": "1481341844305",
+            "bug_category": "功能不完整",
+            "description": "成功登录,进入发现界面,点击该界面的“我的好友”后进入好友列表界面,见截图1;点击好友lzk一栏,进入好友详细资料界面,该界面的发消息按钮应该呈激活状态并可点击,但是测试时发现该按钮呈未激活状态,不可点击,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/50/43/Screenshot_20161210-124823.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/50/44/Screenshot_20161210-124906.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012609",
+            "case_take_id": "2328",
+            "report_id": "10010000012608",
+            "create_time_millis": "1481342235170",
+            "bug_category": "功能不完整",
+            "description": "成功登录,进入发现界面,点击该界面的“我的好友”后进入好友列表界面,见截图1;点击好友lzk一栏,进入好友详细资料界面,点击更多按钮,显示“删除”和“发送该名片”,但是“发送改名片”呈未激活状态,不可点击,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/57/14/Screenshot_20161210-124823.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/57/14/Screenshot_20161210-125512.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012648",
+            "case_take_id": "2328",
+            "report_id": "10010000012645",
+            "create_time_millis": "1481342899038",
+            "bug_category": "用户体验",
+            "description": "成功登录应用,进入发现界面,点击该界面的“我的好友”,进入好友列表界面,见截图1;点击发起群聊,进入选择群聊好友界面,见截图2;选择一名好友,如lzk,点击右上角的打勾图标,应该提示群聊人少不少于3人,但是测试时发现并没有提示,界面直接跳转至和lzk单独聊天的界面,见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/08/18/Screenshot_20161210-130612.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/08/18/Screenshot_20161210-130623.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/08/18/Screenshot_20161210-130633.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012403",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481339164645",
+            "bug_category": "页面布局缺陷",
+            "description": "在注册用户的过程中,手机号输入多一位或者少一位,不会提示手机号码输入错误,只会显示验证码发送失败。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1_end8d494e887a97590946dfd20e67b9e1fa.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012416",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481339499340",
+            "bug_category": "用户体验",
+            "description": "在设置密码的过程中,输入超过32位的字符,虽然现实输入已达上限,但是还是可以继续输入。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_2_end0f2853c6f3f7879090d9feec4484eb40.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012426",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481339681402",
+            "bug_category": "不正常退出",
+            "description": "注册完毕之后,应用直接退出,没有进入应用的主页面。并且再次点击进入的时候,也会闪退。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_3_endcc57b702c95bea2487faf51a9e7d96bc.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012447",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481339962554",
+            "bug_category": "用户体验",
+            "description": "在进行操作的过程中,界面反应时间过长。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_4_end77dbb3a57d3ae31a6a486c8506eda5c9.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012477",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481340561621",
+            "bug_category": "功能不完整",
+            "description": "在设置昵称的过程中,设置的昵称为空格,但是点击确认后,昵称一栏显示的是未设置。个性签名一栏也是这个情况。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_5_endd8ecd971af1d0b86725a5abe49025c97.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_6_endeb754c30e3f72ea5c3909d4f8b10a91d.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_7_end07191b5b80e284360adfac22356146cd.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_8_end9485f712d9e7ef0edbcb7231c2839621.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012497",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481340908325",
+            "bug_category": "功能不完整",
+            "description": "在个性设置中,输入姓名,系统不会检测姓名是否为真的姓名,那这个样子,这个姓名和昵称的作用就一样了。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_9_end150b03c6df747fe80ba7d30d7cc1a7ae.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012549",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481341503777",
+            "bug_category": "用户体验",
+            "description": "个性设置的时候,设置生日,选择月份的时候,一个不小心滑过了,直接到下一月份,或者是在选择年份的时候,而不会从头再来。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_10_endcce0340df2784d795643f875c1f97a06.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_11_endf4e035a30394e49cba1809ef29271584.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012600",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481342106159",
+            "bug_category": "功能不完整",
+            "description": "在账号中心,点击头像进去的个性设置中,设置的自己的信息,但是在我的里面点击我的信息,却是默认的信息,之前的改变并没有更新到我的信息里面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_14_ende2eb0bcd269e25e868d4b91ebaeb47ae.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_15_endd12a52656d130985baff896ac9216bda.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012622",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481342425169",
+            "bug_category": "功能不完整",
+            "description": "在发现中,参加的活动没有地方取消参加。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_16_ende7e94cec563b8ab50af0195dc5f7351d.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012657",
+            "case_take_id": "2285",
+            "report_id": "10010000011918",
+            "create_time_millis": "1481343056917",
+            "bug_category": "用户体验",
+            "description": "在我的,目标当中,修改目标,不点击保存退出,系统不会提示是否保存。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012428",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481339747440",
+            "bug_category": "功能不完整",
+            "description": "设置体重的时候应该设置为0公斤,保存当前目标,再次查看我的目标,体重目标变成60公斤。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-111307[1]_end9f32feac16f84d59b19fafa2a2a5fed7.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-111319[1]_endf0b323baea7d2a4b655b8653c4feb5eb.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012505",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481341035532",
+            "bug_category": "功能不完整",
+            "description": "从我的页面中的设置路径进入设置页面,点击检查更新,提示当前是最新版本,但是从我的页面中的账号中心进入,点击设置,点击检查更新提示有最新版本。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Scr[1]_endec72905dd93735f8b708ada819fd9405.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113643[1]_end1faad560205b458fa6109b3b6923df7f.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012562",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481341630062",
+            "bug_category": "功能不完整",
+            "description": "现在离线地图之后,点击已下载的离线地图,无法打开已下载的地图。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114552[1]_endd5e3e433abde4a4376ed71eee4d48d61.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012618",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481342393581",
+            "bug_category": "功能不完整",
+            "description": "设置体重的时候,日期设置为当前时间的前一年的前一天,点击保存,没有提示当前时间过早,进入记录查看,没有显示添加的记录。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115748[1]_end7c65ce7343174d93db719a8da8b7990a.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115757[1]_endec60801f2152f071846691f10d07a523.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012654",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481343028565",
+            "bug_category": "功能不完整",
+            "description": "年统计的总卡路里不正确,计算出来应该是1981千卡,但是显示的总卡路里是56480千卡。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120443[1]_end83b89e76c6ca3c9f6dce1419667ef625.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120447[1]_end429479581c320cdfdc10336a95f54aab.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120451[1]_end488bb5748de9982949c88f6a52f7f330.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120455[1]_end082449ca33789148eedd61d19a186827.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120500[1]_endf202cefb8727a59f9ae24810fb88666f.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120505[1]_end95e29c74f1df22f1f8211b8e1d7be07e.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120509[1]_end80a9bf538335b573835f00b6f05b8bf4.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120512[1]_endf1c424b70aa9fd1d601caec036edbff0.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120525[1]_end829f267e714db0325fc8cd3665506d3b.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012665",
+            "case_take_id": "2352",
+            "report_id": "10010000012396",
+            "create_time_millis": "1481343145287",
+            "bug_category": "功能不完整",
+            "description": "年总步数统计不正确。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-121111[1]_end34ab5c13d574bd66dfc986c09242ec7b.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012367",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481338077741",
+            "bug_category": "功能不完整",
+            "description": "无法自己设定目标",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/47/57/Screenshot_2016-12-10-10-47-38.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012378",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481338351709",
+            "bug_category": "功能不完整",
+            "description": "无法显示运动时的配速",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/52/31/Screenshot_2016-12-10-10-51-06.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012443",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481339923457",
+            "bug_category": "功能不完整",
+            "description": "无法自己填写,运动目标,有时目标高于或低于系统设定目标",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/43/Screenshot_2016-12-10-11-17-08.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012451",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481340023628",
+            "bug_category": "功能不完整",
+            "description": "无法自己填写体重目标,有时设定的目标会高于或低于系统的设定",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/20/23/Screenshot_2016-12-10-11-17-08.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012458",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481340159946",
+            "bug_category": "用户体验",
+            "description": "用户体验不好,这样比较难找到用户想要的体重目标",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/22/39/Screenshot_2016-12-10-11-21-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/23/32/Screenshot_2016-12-10-11-21-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/23/50/Screenshot_2016-12-10-11-21-28.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012522",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481341201683",
+            "bug_category": "功能不完整",
+            "description": "可以分享的软件太少,例如QQ",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/40/01/Screenshot_2016-12-10-11-38-49.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012534",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481341421014",
+            "bug_category": "功能不完整",
+            "description": "软件没有发现有输入框",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012543",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481341466422",
+            "bug_category": "功能不完整",
+            "description": "用户无法查找联系人",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012550",
+            "case_take_id": "2337",
+            "report_id": "10010000012313",
+            "create_time_millis": "1481341512852",
+            "bug_category": "功能不完整",
+            "description": "没有搜索功能,用户无法搜索想要的内容",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012306",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336053480",
+            "bug_category": "功能不完整",
+            "description": "跑步测试:当我开始测试的时候并没有跑步,只是拿着手机模仿正坐在公交车上上下震动,他却显示有步数记录",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/14/13/Screenshot_2016-12-10-10-14-05.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/17/26/Screenshot_2016-12-10-10-17-05.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012314",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336335770",
+            "bug_category": "功能不完整",
+            "description": "分享结果:我点进步数,当我想要分享结果时却没有办法在这里分享数据,哪怕是一个截图也好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/18/55/Screenshot_2016-12-10-10-14-05.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/18/55/Screenshot_2016-12-10-10-17-05.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012319",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336430973",
+            "bug_category": "功能不完整",
+            "description": "设定目标:当我想设定目标时,必须按照他给定的目标选择,而无法自己根据自己的情况随意设定",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/20/30/Screenshot_2016-12-10-10-19-22.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012324",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336577216",
+            "bug_category": "用户体验",
+            "description": "设定目标:当我设定目标时有马拉松选项,有人不知道马拉松是多远,例如我就不知道,让用户可能盲目的设定,应该在后面给个提示的数目",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/22/57/Screenshot_2016-12-10-10-21-04.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/23/02/Screenshot_2016-12-10-10-21-04.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012327",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336639165",
+            "bug_category": "功能不完整",
+            "description": "比赛目标,当我设定比赛的时候,年份只能设定2017年,无法设定其他年份",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/23/59/Screenshot_2016-12-10-10-21-04.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012331",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481336782467",
+            "bug_category": "用户体验",
+            "description": "设定比赛目标:在设定比赛目标时 \"正在准备比赛按钮\"显示灰色,让人以为不能点击,应该在旁边设定一个提示\"关\"",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/26/22/Screenshot_2016-12-10-10-24-26.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012349",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481337418912",
+            "bug_category": "功能不完整",
+            "description": "设定每周运动次数:在设定次数时只能选给定我的次数,没法自己设定",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/36/58/Screenshot_2016-12-10-10-30-28.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012356",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481337646860",
+            "bug_category": "功能不完整",
+            "description": "重复设定目标:我设定一个目标后无法在继续设定了,我家如同时有两个目标则不能设定需要一个个完成,但是我需要每天两个目标同时进行",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/46/Screenshot_2016-12-10-10-37-44.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012360",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481337789600",
+            "bug_category": "功能不完整",
+            "description": "重复设定目标:我设定一个目标后无法在继续设定了,我家如同时有两个目标则不能设定需要一个个完成,但是我需要每天两个目标同时进行",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/43/09/Screenshot_2016-12-10-10-37-44.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012371",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481338165570",
+            "bug_category": "不正常退出",
+            "description": "步行:我明明是在走路,可结果记录是跑步100%",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/49/25/Screenshot_2016-12-10-10-46-15.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012373",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481338251875",
+            "bug_category": "功能不完整",
+            "description": "定位:开始跑步时,地图定位不准确,我明明在实验室比赛,可显示的却不是",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/50/51/Screenshot_2016-12-10-10-43-39.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012388",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481338718303",
+            "bug_category": "功能不完整",
+            "description": "计数:计数不准确,实时性不好,我明明走了10步却没变,然后突然变了加了17步",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/57/28/Screenshot_2016-12-10-10-54-23.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/58/12/Screenshot_2016-12-10-10-54-43.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/58/38/Screenshot_2016-12-10-10-54-23.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012407",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481339274607",
+            "bug_category": "功能不完整",
+            "description": "我在发现页面里进入表项,选择目标,体重竟然可以选择0,而当用户选择了0之后保存,结果又变成了60",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/07/53/Screenshot_2016-12-10-11-05-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/07/54/Screenshot_2016-12-10-11-05-36.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012433",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481339769066",
+            "bug_category": "功能不完整",
+            "description": "选择出生年龄时竟然可以选择2049年",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/16/08/Screenshot_2016-12-10-11-13-39.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012438",
+            "case_take_id": "2326",
+            "report_id": "10010000012287",
+            "create_time_millis": "1481339876779",
+            "bug_category": "功能不完整",
+            "description": "在发现里面分享的时候只能用微信和微博分享",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/17/56/Screenshot_2016-12-10-11-16-50.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012377",
+            "case_take_id": "2321",
+            "report_id": "10010000012293",
+            "create_time_millis": "1481338324342",
+            "bug_category": "用户体验",
+            "description": "在首页的第一部分的最上面的抽奖字样点击一次返回之后会消失,必须退出重新登录才会有,用户可能错误点击了返回,但是想重新进入时,没有显示在原先的地方,也不知道去哪里找",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-100300_endc2feeb3c897ecb8609a2f4cddec10d03.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-100156_end99e1686927129fe3ea80dbc67c470e35.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012404",
+            "case_take_id": "2321",
+            "report_id": "10010000012293",
+            "create_time_millis": "1481339164889",
+            "bug_category": "功能不完整",
+            "description": "携带手机步行时,记录步数有时不实时,过了几秒一下增加,还有与实际的步数有少量差池",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-104437_endb316229d578b74c2ec537409a52285d7.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012408",
+            "case_take_id": "2321",
+            "report_id": "10010000012293",
+            "create_time_millis": "1481339300695",
+            "bug_category": "页面布局缺陷",
+            "description": "没有记录的数据显示默认的图形,容易误导用户。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-102235_end60689ddfe4186ecb63140a7535f968ec.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012457",
+            "case_take_id": "2321",
+            "report_id": "10010000012293",
+            "create_time_millis": "1481340137281",
+            "bug_category": "其他",
+            "description": "最上面记录步行步数,运动处运动类型有可以选择步行,功能重复多余",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112123_endb0fe02073ff72ab90bf4f3e34426b165.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012538",
+            "case_take_id": "2357",
+            "report_id": "10010000012481",
+            "create_time_millis": "1481341458738",
+            "bug_category": "用户体验",
+            "description": "进入我的信息页面时,可以直接进入,不必输入密码,对用户的隐私安全不好",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012632",
+            "case_take_id": "2357",
+            "report_id": "10010000012481",
+            "create_time_millis": "1481342583364",
+            "bug_category": "功能不完整",
+            "description": "在点击开始跑步后,GPS很难定位准确,给用户带来较大不便。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012636",
+            "case_take_id": "2357",
+            "report_id": "10010000012481",
+            "create_time_millis": "1481342628876",
+            "bug_category": "用户体验",
+            "description": "用户可以不设定昵称,这样在查看排行榜时,根本分不清谁是谁,很不方便。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012641",
+            "case_take_id": "2357",
+            "report_id": "10010000012481",
+            "create_time_millis": "1481342809869",
+            "bug_category": "功能不完整",
+            "description": "记录步数时不怎么精确。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012662",
+            "case_take_id": "2357",
+            "report_id": "10010000012481",
+            "create_time_millis": "1481343128683",
+            "bug_category": "功能不完整",
+            "description": "只能看到整体的运动情况,不能看到我每天的运动情况,对很多用户不方便。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012473",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481340527577",
+            "bug_category": "用户体验",
+            "description": "首页中,步数下方的8/60分钟含义不清楚,完全没向用户显示出锁代表含义",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_051_end28a9304ce53fc844f0ab2f4a0fcfb25e.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012485",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481340666042",
+            "bug_category": "页面布局缺陷",
+            "description": "首页中的每天运动记录柱状高度应该表示的为每天的运动量大小,然而,未来几天还没有测,显示出的柱状图界面容易对用户造成误解",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_051_end28a9304ce53fc844f0ab2f4a0fcfb25e.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012491",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481340827687",
+            "bug_category": "功能不完整",
+            "description": "运动过程中,爬了几层楼梯,然而在运动过程中的爬高竟然是0。用户看到自己的运动过程没有被正确记录对软件感到失望",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_051_end28a9304ce53fc844f0ab2f4a0fcfb25e.png",
+            "severity": "5",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012519",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481341193150",
+            "bug_category": "用户体验",
+            "description": "用户在想停止跑步时,点击暂停按钮,然后出现的两个按钮含义太模糊,考虑到使用该APP的老年用户很多,此时候的退出或者继续或者运动记录的回放既没有相关提示,也没有教程。用户体验感很差",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112400_end5f7ef1b4c5cc0c52a84f39d568e1001e.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012535",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481341431862",
+            "bug_category": "功能不完整",
+            "description": "在发现界面中的排行榜中,当我点击爱心小按钮时,他提出HIA没有好友点赞,然而此时我还没有好有,应用应该弹出当前关注我的人数为0,并且提供我的好友那个界面的链接",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114028_endde16d21db64820d6d78839980b4a82d9.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012564",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481341648695",
+            "bug_category": "其他",
+            "description": "我只运动了一次,然而在排行榜中与偶两条记录,并且,皇冠显示在了第二条上",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_052_end4401ba46854082268e69c0eeda2833f6.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012582",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481341913711",
+            "bug_category": "用户体验",
+            "description": "并没有对自己的个人信息和运动目标进行设置,然而在我的目标和我的信息中,均有默认值的存在,在第一次进入应用的时候就应该提醒用户进行相关的设置",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114849_endf5c6b46cf1fc6b046054feeea9a03b1f.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114911_end1732a2be9bd3ad2c07c8cbf802570ed2.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012599",
+            "case_take_id": "2342",
+            "report_id": "10010000012326",
+            "create_time_millis": "1481342098428",
+            "bug_category": "性能",
+            "description": "没有好友,然而显示出战胜1.22%的人",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114826_endf593b58a573da7101bb72af57d87e8f4.png",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012400",
+            "case_take_id": "2353",
+            "report_id": "10010000012397",
+            "create_time_millis": "1481339064700",
+            "bug_category": "功能不完整",
+            "description": "在GPS信号无论强弱的环境下,记步都不能正常进行,跑也不行",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-105535_end0f98765f3ee4563b4aebc848752b6967.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-105623_endb8c49fe08d78a8bbf32a48959365d3eb.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012459",
+            "case_take_id": "2353",
+            "report_id": "10010000012397",
+            "create_time_millis": "1481340168374",
+            "bug_category": "功能不完整",
+            "description": "GPS定位有问题,当在GPS信号强的情况下,定位的结果没有出现,等到GPS信号弱得时候,出现,但是,出现的却是错误信息",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-105905_end1e1907a203f0d78d405d5a4c7d78da5a.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012465",
+            "case_take_id": "2353",
+            "report_id": "10010000012397",
+            "create_time_millis": "1481340333250",
+            "bug_category": "功能不完整",
+            "description": "计步不准确,有的时候,不走动,这是轻轻摇动手机,首页的数据还是在后台增加",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112353_endc656f2e7d1be88043f3baf2dd73950d8.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-110031_endfb0ebdf60a18cff82d418d73577bcd8c.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012548",
+            "case_take_id": "2353",
+            "report_id": "10010000012501",
+            "create_time_millis": "1481341498166",
+            "bug_category": "功能不完整",
+            "description": "点击查看排行榜,自己出现了两次,步数是一样的,点击分享,观察到自己的好友有两位,点击我的好友,界面显示我的好友只有一位",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113404_endea2d6d34e5752a5254c72587329ed388.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113307_end3c6a85f6d5fa50c5329b993202163008.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113341_end6dce2196e7bf8ce93867443a82942991.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012614",
+            "case_take_id": "2353",
+            "report_id": "10010000012593",
+            "create_time_millis": "1481342349097",
+            "bug_category": "功能不完整",
+            "description": "发现,消息栏目,在消息查看的时候,出现重复出现的情况,同一个讨论组,消息不同步,而且重复出现",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_upload_Screenshot_20161210-114845_end38a5027a002cd0ebb75c6617ab0d32cb_end38a5027a002cd0ebb75c6617ab0d32cb.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_upload_Screenshot_20161210-114858_endc99f169b2f9d4bf4db2c86b6c8d6b299_endc99f169b2f9d4bf4db2c86b6c8d6b299.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_upload_Screenshot_20161210-114934_endc00f47384c64f3b6c171f102c13903b6_endc00f47384c64f3b6c171f102c13903b6.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012651",
+            "case_take_id": "2353",
+            "report_id": "10010000012640",
+            "create_time_millis": "1481343020348",
+            "bug_category": "用户体验",
+            "description": "睡眠功能没有任何提示信息,不知道如何去用,数据无显示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_顺丰_endeecc9ccec6ac32d6e8aba3d0b6fa86bf.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012669",
+            "case_take_id": "2353",
+            "report_id": "10010000012659",
+            "create_time_millis": "1481343187292",
+            "bug_category": "用户体验",
+            "description": "消息中心无提示,不知道是没有消息还是有问题,应该给用户个提示,这样,用户才不会白等",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_上定位_enda4210821f8d34dba1cd4020f29eb2535.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012513",
+            "case_take_id": "2359",
+            "report_id": "10010000012507",
+            "create_time_millis": "1481341122779",
+            "bug_category": "功能不完整",
+            "description": "无法点击\"发送消息\"",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/42/33/Screenshot_2016-12-10-11-41-39.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012554",
+            "case_take_id": "2359",
+            "report_id": "10010000012552",
+            "create_time_millis": "1481341593683",
+            "bug_category": "功能不完整",
+            "description": "B方无法接受到A方发来的消息",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/46/33/Screenshot_2016-12-10-11-45-57.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012619",
+            "case_take_id": "2359",
+            "report_id": "10010000012615",
+            "create_time_millis": "1481342395383",
+            "bug_category": "功能不完整",
+            "description": "测试时间是12.10,但是数据多出了一个12.09的数据",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/59/53/Screenshot_2016-12-10-11-59-06.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/59/55/Screenshot_2016-12-10-11-58-51.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012649",
+            "case_take_id": "2359",
+            "report_id": "10010000012643",
+            "create_time_millis": "1481342968186",
+            "bug_category": "用户体验",
+            "description": "无法按照日期先后排序而是按添加顺序排序",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/09/27/Screenshot_2016-12-10-12-09-16.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012666",
+            "case_take_id": "2359",
+            "report_id": "10010000012663",
+            "create_time_millis": "1481343148556",
+            "bug_category": "功能不完整",
+            "description": "无提供任何功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/12/31/Screenshot_2016-12-10-12-11-33.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012679",
+            "case_take_id": "2359",
+            "report_id": "10010000012677",
+            "create_time_millis": "1481343362388",
+            "bug_category": "功能不完整",
+            "description": "体检",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/16/02/Screenshot_2016-12-10-12-11-33.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012536",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481341434924",
+            "bug_category": "功能不完整",
+            "description": "步骤重现:\n步骤:\n        1.手机号登录\n        2,进入“我的界面”\n        3.进行昵称的更换\n                 输入数字,输入到最大位数\n  预期结果:\n          输入到最大,提示最多\n实际结果:没有任何反应",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_nicheng[1]_end692bfcab864b2826a2f01daa8100becb.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012571",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481341764803",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n   1.手机号登录\n    2,进入“我的界面”\n    3.进行扫一扫添加好友\n                3.1进入聊天界面,发起聊天\n                3.2 输入表情,点击发送\n预期结果:发送成功\n     实际结果:\n         没有发送",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_liaogt[1]_end3a8bd5ac6a64f516ee54cd6ff0a410ff.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012579",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481341885028",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n         1.首页制定计划\n         2.进行修改,和删除\n预期结果:\n       可以进行修改和删除\n实际结果:\n 不可以删除和退订",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_jih[1]_endb52e5d7c87415c9e0ea9f792abc2307d.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012603",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481342143827",
+            "bug_category": "功能不完整",
+            "description": "步骤:\n         1.进入发现界面\n         2.点击进入排行榜\n         3.点击进入活动界面\n             3.1进行添加活动\n             3.2 进行退出活动\n预期结果:可以正常添加和退出活动\n实际结果:不可以退出活动",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_huodiong[1]_end98c45b4514b817d7826efe69f20ed251.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012611",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481342237329",
+            "bug_category": "用户体验",
+            "description": "步骤:\n 1.进入“我的”首页\n 2.查看我的成绩单\n 预期结果:\n      *将首页上的步数会自动同步到,我的成绩单\n实际结果:\n    *没有进行自动同步,步数为0",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_chengjidan16[1]_end199707d9094465028e56a979ae3cea85.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012625",
+            "case_take_id": "2360",
+            "report_id": "10010000012517",
+            "create_time_millis": "1481342476501",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n1.关掉网络,重新连接网络\n2.进入首页\n3.点击开始跑步;\n预期结果:\n*定位准确\n实际结果:\n*定位失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_haiyang[1]_endab5e3b6de55d5547f89523ee7868392e.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012525",
+            "case_take_id": "2339",
+            "report_id": "10010000012318",
+            "create_time_millis": "1481341218044",
+            "bug_category": "功能不完整",
+            "description": "进入我的页面,查看我的成绩单栏目的成绩信息,与首页中的成绩信息不一致。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/40/14/Screenshot_20161210-113835.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/40/17/Screenshot_20161210-113826.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012580",
+            "case_take_id": "2339",
+            "report_id": "10010000012318",
+            "create_time_millis": "1481341886509",
+            "bug_category": "用户体验",
+            "description": "用户收到来自好友的消息时,只有进入发现-我的好友中才可看到通知。建议在上级\"发现\"界面中加入通知功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/51/21/Screenshot_20161210-114612.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/51/25/Screenshot_20161210-114602.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/51/26/Screenshot_20161210-115102.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012344",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481337225071",
+            "bug_category": "功能不完整",
+            "description": "打开gps,点击跑步开始后,步数数据统计的增加,可根据原地跳动或幅度稍大的上下甩动增加数据,计步异常。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/33/44/Screenshot_2016-12-10-10-32-37.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012355",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481337618288",
+            "bug_category": "功能不完整",
+            "description": "爬高功能缺失,无法正确计算实际进行的高度获取数据并统计。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/15/Screenshot_2016-12-10-10-38-09.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/17/Screenshot_2016-12-10-10-40-06.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012386",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481338698101",
+            "bug_category": "功能不完整",
+            "description": "点击开始跑步,运动一段时间,关闭gps定位后或到达gps定位不到的地方,就无法根据路程和速度更新新的消耗热量。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/58/17/Screenshot_2016-12-10-10-52-31.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012398",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481338998527",
+            "bug_category": "页面布局缺陷",
+            "description": "点击发现,添加计划,距离,能力,若选择好距离之后不能调自己的时间小时,分钟的上限,只能设置他给的定值。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/03/17/Screenshot_2016-12-10-10-59-43.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/07/50/Screenshot_2016-12-10-10-59-43.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012413",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481339397498",
+            "bug_category": "页面布局缺陷",
+            "description": "在\"发现\"tab中,上层的滑动广告中,布局无法将两张广告图片的信息完整显示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/09/55/Screenshot_2016-12-10-11-07-44.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/09/57/Screenshot_2016-12-10-11-07-37.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/10/23/Screenshot_2016-12-10-11-07-44.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/10/26/Screenshot_2016-12-10-11-07-37.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/06/Screenshot_2016-12-10-11-07-44.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/08/Screenshot_2016-12-10-11-07-37.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012446",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481339945658",
+            "bug_category": "功能不完整",
+            "description": "排行榜未能实时更新好友数据。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/19/05/Screenshot_2016-12-10-11-17-42.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012462",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481340264697",
+            "bug_category": "功能不完整",
+            "description": "点击排行榜,分享,分享到微博,点击登录微博或者免密码注册登录,都不能获取到网络访问数据,且登录加载时没有设置登录超时的时限。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/23/Screenshot_2016-12-10-11-22-13.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/23/Screenshot_2016-12-10-11-22-04.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/24/Screenshot_2016-12-10-11-21-45.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/24/Screenshot_2016-12-10-11-17-42.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/36/Screenshot_2016-12-10-11-22-13.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/36/Screenshot_2016-12-10-11-22-04.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/36/Screenshot_2016-12-10-11-21-45.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/24/37/Screenshot_2016-12-10-11-17-42.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012482",
+            "case_take_id": "2345",
+            "report_id": "10010000012336",
+            "create_time_millis": "1481340626921",
+            "bug_category": "用户体验",
+            "description": "点击tab\"我的\",\"我的卡卡\",去抽奖,抽奖页面无规则频率出现加载不出正常抽奖页面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/30/23/Screenshot_2016-12-10-11-27-47.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/30/26/Screenshot_2016-12-10-11-27-41.png",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012382",
+            "case_take_id": "2344",
+            "report_id": "10010000012332",
+            "create_time_millis": "1481338544422",
+            "bug_category": "用户体验",
+            "description": "在”发现“功能中仅有一张图片,内容较少,比较单一,建议改为多图流动形式",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-103645_endccbd0ee1bcd5c1b29dabef9da3c51356.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012441",
+            "case_take_id": "2344",
+            "report_id": "10010000012329",
+            "create_time_millis": "1481339900751",
+            "bug_category": "用户体验",
+            "description": "建议将“菜鸟”改为“新手”等不含贬义字眼的词汇",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-111524_enddedde976d233fe3ffb531534cde27c38.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012530",
+            "case_take_id": "2344",
+            "report_id": "10010000012333",
+            "create_time_millis": "1481341384488",
+            "bug_category": "用户体验",
+            "description": "单位数值设置过大,不便用户直观观察跑步数据",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113357_ende41b3fa18c3e717df32874975469f202.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-113220_end1059b3594b96e567505fd2cc3891e116.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012672",
+            "case_take_id": "2344",
+            "report_id": "10010000012333",
+            "create_time_millis": "1481343261167",
+            "bug_category": "用户体验",
+            "description": "设置个人身体各项指标过多,相对复杂",
+            "img_url": "",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012587",
+            "case_take_id": "2286",
+            "report_id": "10010000011919",
+            "create_time_millis": "1481341965321",
+            "bug_category": "用户体验",
+            "description": "首页体重记录时,时间选择默认是当前时间,选择时不应出现超过当前时间的时间出现。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/52/45/Screenshot_20161210-032721.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012595",
+            "case_take_id": "2286",
+            "report_id": "10010000011919",
+            "create_time_millis": "1481342079488",
+            "bug_category": "性能",
+            "description": "GPS在较弱环境下无信号",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/54/37/Screenshot_20161210-025820.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012504",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481341027583",
+            "bug_category": "用户体验",
+            "description": "当在发现页面,点击活动时,跳转时间太长,用户体验极为不佳!!!影响用户的使用情绪,下意识以为这个页面打不开!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112511_end64cbcb0408ab4365d94ad40a81102710.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012521",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481341196424",
+            "bug_category": "性能",
+            "description": "在首页,点击开始跑步时,就算在空旷地带也会出现”无信号,请到户外开阔处活动“提示。但是GPS定位会跟着我时而动时而不动!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112201_end51913cb41e7f4228959f7a2cdb886db9.png",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012537",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481341441328",
+            "bug_category": "用户体验",
+            "description": "当开始跑步和停止跑步时的系统提示音太大,出乎意料的就响了,给用户造成极大的不满,甚至吓一跳!!!用户体验极为不好!!",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012559",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481341628023",
+            "bug_category": "用户体验",
+            "description": "在跑步过程中想要结束运动时,操作太过于繁琐,需要进行三步到四步才能停止跑步,用户体验极为不佳!!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114431_end6b3fb6b45e3e7107a4491057cf7b1bdf.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-112201_end51913cb41e7f4228959f7a2cdb886db9.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114441_end15f12e16c8662d4f85bf1990c4faabca.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012617",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481342371884",
+            "bug_category": "用户体验",
+            "description": "在我的里面设置个人信息,设置身高时,会出现一个上下滑动选择的控件,这个控件只能上下滑动,不能进行点击操作,非常不方便,用户体验差!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115559_end225e88c61b10ac199f97032b7335a526.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012628",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481342539939",
+            "bug_category": "页面布局缺陷",
+            "description": "在我的页面,还有个头像点击的按钮能跳转到另一个我的页面,这两个页面极为相似,在设计页面时,考虑不周到,可以将两个页面合二为一!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115008_endd1bfb89b9c34545a204658cdfac71a80.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115019_endf84a28c2f69be279e1a34a54cfc99344.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012638",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481342764364",
+            "bug_category": "性能",
+            "description": "在我的成绩单中,一个页面显示最近一周战胜为0.00%,而在点开我的成绩单页面后,显示为战胜了0.28%的人,这是性能不准确,无法实时传输数据!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115205_end99299355ee15dbb8bfb7ce29e8c34f59.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120328_end501927215ff98a0a41ccc7d818ab9f10.png",
+            "severity": "5",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012647",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481342893885",
+            "bug_category": "页面布局缺陷",
+            "description": "在我的页面,修改个人信息的页面中,在设置中又包含一个设置,而且是直接显示出来,显得页面不美观。繁琐。页面布局存在严重的缺陷!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-114858_enda9094936ee662485f5e34df58dd302e9.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012655",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481343043129",
+            "bug_category": "功能不完整",
+            "description": "在发现中的排行榜中,只能显示自己与好友的排名,而不能跟同地区,或者更大面的人的对比,功能极为不完整!!!无法得到与别人的对比!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-120852_enda9b5ec632fef899f23c3b967bed8222f.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012667",
+            "case_take_id": "2341",
+            "report_id": "10010000012323",
+            "create_time_millis": "1481343161863",
+            "bug_category": "用户体验",
+            "description": "在我的卡卡中,只能获得卡卡后才能知道卡卡的具体情况,这个用户极为反感,在不知情的情况下就去进行获得是不情愿的,用户体验极差!!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_20161210-115014_endb44d4132b447d57d91a19c9504d21841.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012342",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481337170898",
+            "bug_category": "功能不完整",
+            "description": "在用户登录界面中,没有提示用户用户名和密码上限字符,并且在密码输入31个字符时不让继续输入但是没有提示,功能不完整。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_102514_end39323826f1294817160fe588d7057ddd.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_102624_end203d867dbf81ae4d363084b5daca1775.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012385",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481338625540",
+            "bug_category": "功能不完整",
+            "description": "用户在室内跑步运动,不能正常定位。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1481338516421_end8575c3e19f0a15902ae9464333a8eed0.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012390",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481338758415",
+            "bug_category": "功能不完整",
+            "description": "用户跑步情况下,步数记录与跑步模式记录不同步,并且没有提示跑步时速。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1481338516421_end8575c3e19f0a15902ae9464333a8eed0.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1481338594785_end72d1488c3df77e13a963e5d974905a0c.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012399",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481339047501",
+            "bug_category": "功能不完整",
+            "description": "训练模式设定,在室内进行训练计划实现,不能定位,不能记录",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_110057_end2b821c49084a04a5fc9ca2a5edbe9619.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_110114_end43a19b24346139cc4aab8c2d3ff105cf.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012409",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481339304085",
+            "bug_category": "功能不完整",
+            "description": "在修改体重记录时,提示手动输入,但是体重最大值为149公斤,并且体重过大的人想要找到需要滑动很久并不是实现了手动输入",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_110348_end5b065ee4ae866826b30ae14b6e913281.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012422",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481339637658",
+            "bug_category": "性能",
+            "description": "在网络正常情况下,活动不能正常加载",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_111241_endbedac579f77d02ae8ce95eebadf5ab7e.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_111232_end0e22316a1a179c193fe125def2643327.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012430",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481339757767",
+            "bug_category": "用户体验",
+            "description": "在活动分享中,用户只能分享到微信朋友圈与微博,不能通过邮箱、qq、Facebook等方式进行分享,用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1481339454108_ende9f23c2e06c1505efff6e3f8279e935c.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012455",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481340102163",
+            "bug_category": "用户体验",
+            "description": "在用户好友界面,点击好友出现详细资料界面,好友资料并不详细,点击头像出现的仅是圆形小图标,不是头像大图。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_111814_end49a79ca3ee46f678c81bb3664f005dc8.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_111832_end6b449368e6e37f5013d78852ecb6a03a.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012461",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481340262346",
+            "bug_category": "功能不完整",
+            "description": "用户对好友进行备注修改时,没有字数提示要求,但在输入一定字符时不能继续输入",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_111703_end7714030988f056f1cae27825fbc7431d.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012471",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481340509327",
+            "bug_category": "功能不完整",
+            "description": "用户在进行好友搜索时,只能进行准确号码或准确昵称搜岁,不能实现模糊搜索,搜索效率低,功能不完整",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_112530_end5cea148685f5055e933876397153114e.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012512",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481341115418",
+            "bug_category": "用户体验",
+            "description": "将”我的成绩单“分享时,用户只能分享到微信朋友圈与微博,不能通过邮箱、qq、Facebook等方式进行分享,用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_113644_end36b0714db747a3e22be8a465aa1556da.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012541",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481341462265",
+            "bug_category": "功能不完整",
+            "description": "在”我的卡卡“中,用户浏览卡卡规则时,点击返回”我的卡卡“界面,却跳到了”我的“界面",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_113705_endc8bf693f224de60b2963f43f7dccbfb2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_113712_end26ff4e93c31ad19e38cc617ef68e8152.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_114248_end7ccb1fc0710513866e8dfb306c8a14b2.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012567",
+            "case_take_id": "2331",
+            "report_id": "10010000012300",
+            "create_time_millis": "1481341695212",
+            "bug_category": "功能不完整",
+            "description": "在用户进入app时、个人信息自动修改为默认值,根据BEE能量代谢表达式,但是一个女性用户与男性用户差距过大,在未提醒修改个人信息的情况,首页所给出的能量消耗数值不标准。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_114836_end5890247db6014c4971f530b90b87ebf1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_IMG_20161210_114842_end29dda0dc902bc2ad6ff974758ca3b7f5.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012439",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481339883097",
+            "bug_category": "用户体验",
+            "description": "在首页点击步数,进入步数页面,显示步数,点击空白处,步数就会消失,在热量页面也是这种现象。影响用户体验",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/01/-5cad17e7d350f4f1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/01/49fbf3d0b091ca67.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/02/-68a334cc1799fb1f.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/02/-529b1362fe7acff.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/02/54920417882893b5.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/02/-6e58d0fee123f4d0.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012448",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481339977419",
+            "bug_category": "用户体验",
+            "description": "在运动,制定计划时,完成后点击下方按钮,会卡屏。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/19/37/37240277a53c9f3d.jpg",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012453",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481340071892",
+            "bug_category": "用户体验",
+            "description": "在运动跑步页面,GPRS信号很差,跑至空阔出还是差,建议使用感应,GPRS太差,影响用户体验!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/21/11/5a77b4ac05948ca2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/21/11/-5fcff13fa7279f62.jpg",
+            "severity": "5",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012467",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481340365114",
+            "bug_category": "用户体验",
+            "description": "点击进入发现页面,进入活动栏。点击后出一直转圈,大约5秒左右,进入后再次点击进入各项活动,也是类似现象。形象用户体验。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/26/04/28cd3d3c5ba3179d.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/26/04/-37a4346e6f96c482.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/26/04/-35fd4f05c0753d4d.jpg",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012487",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481340730679",
+            "bug_category": "功能不完整",
+            "description": "在进入我的页面后,点击头像进入帐号中心,点击好友后,选择好友,想要发送信息,却发现无法完成发送信息,发消息的按钮不能点击。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/32/04/1d4bde5762d4250e.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/32/05/-493346b7febfa4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/32/05/-4e6b59dd41768d5e.jpg",
+            "severity": "5",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012492",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481340859441",
+            "bug_category": "用户体验",
+            "description": "在我的页面点击头像进入帐号中心,再点击头像查看个人信息。发现个人信息又出现转圈卡屏现象,尝试多次,发现是偶尔出现。影响用户体验。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/34/18/-207647d8931a1573.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/34/18/1d4bde5762d4250e.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/34/19/-4e6b59dd41768d5e.jpg",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012676",
+            "case_take_id": "2329",
+            "report_id": "10010000012297",
+            "create_time_millis": "1481343319901",
+            "bug_category": "用户体验",
+            "description": "在我的页面,点击我的信息。查看个人信息,然后查看完了,点击返回按钮。按钮不灵敏,点击多次才能返回。影响用户体验。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/15/19/4a7bc6f32dd5dee2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/15/19/409161cfd8334e5.jpg",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012463",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481340295775",
+            "bug_category": "性能",
+            "description": "华为运动载入过慢,这样会导致用户的次日留存量大大下降。由于网络的原因导致页面相应很慢,上拉下滑菜单的时候不是很流畅,在测试wif开启关闭交替的情况时,app反应较慢。复现程度为“必现”,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210113722_endc802f98eb560c980447ee76a79647605.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012483",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481340630604",
+            "bug_category": "功能不完整",
+            "description": "步数不能同步到qq运动,微博,微信等app,导致用户想要分享数据时,不能及时分享。而且仅限于华为用户太少,几乎大多数的好友都在微信和qq上,最好可以设置一个同步到qq运动的功能,可以添加分享到其他类运动平台的功能。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210120256_end5e2205b04ebdb1bd8924cbc21839fe2c.jpg",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012499",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481340927035",
+            "bug_category": "功能不完整",
+            "description": "没有进行运动的过程中,app在后台依然进行数据统计,数据记录不准确。导致用户对自己的运动情况了解不准确,容易造成偏差、功能不完整,复现程度为必现,严重程度为紧急。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210113429_end0a05654eed3d7d09e984f89b741e2f0f.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012508",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341057507",
+            "bug_category": "性能",
+            "description": "运动类APP 一般背景色采用黑色,这种颜色为手机最为省电的模式,也在一定程度上缓解了用户手机电量问题。对于长距离跑步,对于手机电量的需求是用户的一个很大的痛点。 而本app大体是白色,十分耗电。性能不是很好,复现程度为小概率复现,严重等级为一般。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210113722_endc802f98eb560c980447ee76a79647605.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012529",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341325205",
+            "bug_category": "功能不完整",
+            "description": "进行爬楼运动测试的时候步数不会增加。而用户一天之内大多数的运动情况是爬楼,爬楼也很消耗卡路里,这和实际情况不符合。无法正确记录跑步情况和进行兑换。属于功能不完整的情况,复现成都为大概率复现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210114156_enddbb59c020ed8d9d64524a35698baa551.jpg",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012542",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341463289",
+            "bug_category": "功能不完整",
+            "description": "运动时运动轨迹不明确,而且GPS定位时过于缓慢,室内运动,跑步机方式运动的话,gps定位不到,显示不出来。属于功能不完整的情况,复现程度为大概率复现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210114414_endcbf41653cb1e0f1292b9fd8b32a76574.jpg",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012558",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341623784",
+            "bug_category": "功能不完整",
+            "description": "地图不是很清楚,没有0.5公里播报的功能。一般运动类app都有语音提示用户此时已经运动的距离和步数,使用户可以对自己所运动的情况有一个完整的了解和把握。而此app没有响应功能,属于功能不完整的情况。严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210114414_endcbf41653cb1e0f1292b9fd8b32a76574.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012568",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341722297",
+            "bug_category": "用户体验",
+            "description": "在进跑步方式的测试时,一直都在进行步行运动,但是记录显示我的总步数为26步,步行65%,跑步35%,爬高0%。与我实际运动的情况不符合。属于用户体验不好,复现程度为必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210114734_end05875a3e8efdd2e5462526626dacf15d.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012578",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481341864829",
+            "bug_category": "性能",
+            "description": "在测试app的时候,当app在后台运行,所占用内存太多,一定程度影响了用户使用其他app的效果和体验,导致手机速度变得卡慢。属于性能不太好的情况,复现程度为必现,严重情况为紧急。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210115041_end39c192ff417423beac6b4ed19192f131.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012601",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481342131832",
+            "bug_category": "用户体验",
+            "description": "运动距离这个不是很人性化,没有单步的幅度变化,直接就是由5公里变成了10公里,中间跨度很大,对于某些运动幅度不是很大的用户来说,这个设置不太合理,不符合他们的运动情况。属于用户体验不好,复现程度必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210115524_end639fb3c65dfa5d96f0c2a5b5c88279d0.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012624",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481342473236",
+            "bug_category": "用户体验",
+            "description": "在测试app时,运动情况的统计的月度统计应该是1-30号来统计,而不是一个月的时间窗口来统计,周统计也是这样。属于用户体验不太好,复现程度为必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210120057_endb9b6edbde9fec1b10df666445820a0f5.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012633",
+            "case_take_id": "2347",
+            "report_id": "10010000012348",
+            "create_time_millis": "1481342588632",
+            "bug_category": "其他",
+            "description": "没有体重和周的月曲线图,而且不能动态查询,比较不方便。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210120256_end5e2205b04ebdb1bd8924cbc21839fe2c.jpg",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012454",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481340090331",
+            "bug_category": "功能不完整",
+            "description": "首页点击开始跑步,会语音提示开始跑步,点击后我并未移动位置,已经开始计时,应该在移动时开始计时,并显示移动路线",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/23/26/Screenshot_2016-12-10-11-21-09.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012469",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481340436862",
+            "bug_category": "功能不完整",
+            "description": "首页~开始运动,手机提示允许Gps访问,点击确定后,定位正常,可是定位地图页面没有返回图标,且无法返回跑步页面,我在后台关闭应用后才正常。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/27/16/Screenshot_2016-12-10-11-13-38.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012484",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481340641597",
+            "bug_category": "功能不完整",
+            "description": "首页~开始运动,手机提示允许Gps访问,点击确定后,定位正常,可是定位地图页面没有返回图标,且无法返回跑步页面,我在后台关闭应用后才正常。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/30/41/Screenshot_2016-12-10-11-13-38.png",
+            "severity": "5",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012488",
+            "case_take_id": "2351",
+            "report_id": "10010000012450",
+            "create_time_millis": "1481340742930",
+            "bug_category": "用户体验",
+            "description": "添加好友后,添加好友群,若所有好友刚开始均为设置用户头像,均为系统默认头像,在群里进行聊天,显示的均为默认头像,多个人聊天时无法确认身份,不知道谁在说话,应该未默认用户头像旁边分配一个用户id,可以将用户区分开。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/32/22/Screenshot_2016-12-10-11-28-20.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012503",
+            "case_take_id": "2351",
+            "report_id": "10010000012444",
+            "create_time_millis": "1481341027128",
+            "bug_category": "用户体验",
+            "description": "新用户登陆前进行注册,注册时使用手机号进行注册,当手机号填错时,多写一位,注册失败,提示信息为获取验证码失败而不是手机号错误",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/37/07/Screenshot_2016-12-10-11-04-15.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012510",
+            "case_take_id": "2351",
+            "report_id": "10010000012444",
+            "create_time_millis": "1481341074078",
+            "bug_category": "用户体验",
+            "description": "注册设置密码时,密码输入错误,而且选择隐式显示密码,输错时不能确定哪位输错,只能逐个字符删除,不能一次删除",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/37/53/Screenshot_2016-12-10-11-08-52.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012533",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481341395517",
+            "bug_category": "用户体验",
+            "description": "用户在使用开始跑步功能不能邀请好友一块进行。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/15/Screenshot_2016-12-10-11-41-39.png",
+            "severity": "5",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012563",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481341637315",
+            "bug_category": "用户体验",
+            "description": "开始跑步后,显示有跑步时间,但消耗热量和距离没有变,是0",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/47/16/Screenshot_2016-12-10-11-45-30.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012569",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481341750536",
+            "bug_category": "用户体验",
+            "description": "进入首页后只能进行跑步训练,不能进行其他项目训练设置,如塑性等",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/49/10/Screenshot_2016-12-10-11-41-39.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012583",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481341928914",
+            "bug_category": "不正常退出",
+            "description": "首页-绑定新的设备-血压计,可选用的设备较少,无法进行设备搜索",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/52/08/Screenshot_2016-12-10-11-50-38.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012606",
+            "case_take_id": "2351",
+            "report_id": "10010000012383",
+            "create_time_millis": "1481342176926",
+            "bug_category": "不正常退出",
+            "description": "首页_排行_排行榜,显示我今日运动步数,不过在首页运动中仍旧没有显示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/56/15/Screenshot_2016-12-10-11-54-24.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/56/16/Screenshot_2016-12-10-11-21-09.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012616",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481342364721",
+            "bug_category": "用户体验",
+            "description": "发现_我的好友,好友那块有提示,推荐添加的好友,点击查看后,在新的好友添加好友,页面无返回键",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/59/24/Screenshot_2016-12-10-11-57-44.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/00/55/Screenshot_2016-12-10-11-57-44.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/00/56/Screenshot_2016-12-10-11-57-44.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012629",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481342550513",
+            "bug_category": "用户体验",
+            "description": "发现_活动页面,无法进行活动搜索,只能选择推荐的活动",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/02/30/Screenshot_2016-12-10-12-01-32.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012637",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481342666240",
+            "bug_category": "用户体验",
+            "description": "发现_活动页面,刷新,滑动页面至底部,没有相关提示如\"已经到底啦\"",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/04/25/Screenshot_2016-12-10-12-02-51.png",
+            "severity": "5",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012639",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481342775760",
+            "bug_category": "页面布局缺陷",
+            "description": "发现页面没有合理利用,页面底部还可以添加其他标签信息",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/06/15/Screenshot_2016-12-10-12-04-46.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012646",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481342882505",
+            "bug_category": "功能不完整",
+            "description": "发现页面不能进行相关训练搜索,作为初学者,应该预防不合理锻炼对身体造成的伤害,可以进行相关训练视频的推荐进行下载,可以查看对此视频的评论和点击量。针对用户推荐热门视频。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/08/02/Screenshot_2016-12-10-12-04-46.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/08/37/Screenshot_2016-12-10-12-04-46.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012656",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481343056313",
+            "bug_category": "用户体验",
+            "description": "在发现模块没有加入其他训练团队的功能",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012668",
+            "case_take_id": "2351",
+            "report_id": "10010000012449",
+            "create_time_millis": "1481343172934",
+            "bug_category": "用户体验",
+            "description": "发现页面,没有对健身用户的饮食进行定制功能,可以在此页面添加训练和饮食的子功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/12/52/Screenshot_2016-12-10-12-04-46.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012671",
+            "case_take_id": "2351",
+            "report_id": "10010000012450",
+            "create_time_millis": "1481343242219",
+            "bug_category": "功能不完整",
+            "description": "没有对个人运动记录,好友数进行显示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/14/02/Screenshot_2016-12-10-12-13-07.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012680",
+            "case_take_id": "2351",
+            "report_id": "10010000012450",
+            "create_time_millis": "1481343385814",
+            "bug_category": "功能不完整",
+            "description": "无法收藏发现里面自己运动结果较好的运动记录",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/16/25/Screenshot_2016-12-10-12-13-07.png",
+            "severity": "5",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012681",
+            "case_take_id": "2351",
+            "report_id": "10010000012450",
+            "create_time_millis": "1481343401318",
+            "bug_category": "功能不完整",
+            "description": "无法收藏发现里面自己运动结果好的运动记录",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/16/40/Screenshot_2016-12-10-12-13-07.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012392",
+            "case_take_id": "2335",
+            "report_id": "10010000012309",
+            "create_time_millis": "1481338830467",
+            "bug_category": "用户体验",
+            "description": "问题描述:步数历史详情页,日历史步数下点击条形图多次才可成功建议优化\n前置条件:已进入步数详情页的日步数详情\n步骤:\n1.点击任意一条形图\n2.再次点击该条形图\n预期结果:\n1.条形图上步数消失\n2.条形图上显示步数\n实际结果:\n1.步数不消失\n2.显示步数",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/00/29/P61210-105645.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012547",
+            "case_take_id": "2335",
+            "report_id": "10010000012309",
+            "create_time_millis": "1481341494098",
+            "bug_category": "其他",
+            "description": "问题描述:发现-我的好友-家庭-我的家-编辑拍照失败(所有与相机相关都失败,发消息用相机也失败)\n前置条件:已进入家庭知料界面\n步骤:\n1.点击编辑\n2.点击拍照\n预期结果:\n1.进入编辑头像界面\n2.拍照成功\n实际结果:\n1.进入编辑头像界面\n2.拍照失败,提示相机屡次停止运行",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/44/52/P61210-113840.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/47/17/P61210-113840.jpg",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012604",
+            "case_take_id": "2335",
+            "report_id": "10010000012309",
+            "create_time_millis": "1481342161644",
+            "bug_category": "其他",
+            "description": "问题描述:群聊设置页面,显示群成员昵称失效\n前置条件:已进入群聊设置界面\n步骤:\n1.将显示群成员昵称关闭\n2.点击聊天信息中一名成员信息\n预期结果:\n1.群昵称关闭后,聊天信息成员名显示不为昵称\n2.该成员姓名显示为昵称",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/56/00/S61210-115403.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/56/01/S61210-115246.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012627",
+            "case_take_id": "2335",
+            "report_id": "10010000012309",
+            "create_time_millis": "1481342530531",
+            "bug_category": "其他",
+            "description": "问题描述:使用二维码添加好友开启相机失败\n前置条件:已进入发现-我的好友\n预期结果:\n1.点击页面底部扫一扫\n实际结果:\n1.相机开启失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/02/10/P61210-120002.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012524",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481341217289",
+            "bug_category": "用户体验",
+            "description": "在排行榜界面点击分享之后没弹出分享到指定地方,而是转到另一个分享页面再点击一次分享,建议只点击一次分享就好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/40/16/Screenshot_20161210-113642.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/40/17/Screenshot_20161210-113633.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012551",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481341514666",
+            "bug_category": "页面布局缺陷",
+            "description": "在排行榜分享运动成果给微信好友,图片与app名称间距过大,只有在再发送一条消息之后间距才变小",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/45/14/Screenshot_20161210-114305.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012560",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481341629069",
+            "bug_category": "用户体验",
+            "description": "建议增加自己能给自己点赞的功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/47/09/Screenshot_20161210-114621.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012576",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481341840006",
+            "bug_category": "用户体验",
+            "description": "建议增加字符超出限制提示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/50/39/Screenshot_20161210-114958.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012613",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481342327904",
+            "bug_category": "用户体验",
+            "description": "建议增加语音对话发送功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/58/47/Screenshot_20161210-115754.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012626",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481342508445",
+            "bug_category": "功能不完整",
+            "description": "长按发送内容弹出转发和删除,更多,复制几个功能,点击更多后,依然还是转发和删除",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/01/46/Screenshot_20161210-115954.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/01/48/Screenshot_20161210-115944.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012642",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481342827272",
+            "bug_category": "用户体验",
+            "description": "建议在运动界面增加步数统计",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/07/07/Screenshot_20161210-120600.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012673",
+            "case_take_id": "2338",
+            "report_id": "10010000012315",
+            "create_time_millis": "1481343279607",
+            "bug_category": "用户体验",
+            "description": "建议增加消息撤回功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/04/14/39/Screenshot_20161210-121359.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012374",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481338253929",
+            "bug_category": "用户体验",
+            "description": "跑步模式中,大步地跨10步,然后会发现,步数显示增加了20步。",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012379",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481338373182",
+            "bug_category": "用户体验",
+            "description": "定位设备漂移很大,沿着直线行走,左右偏移的距离达到2-3米。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012381",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481338448139",
+            "bug_category": "用户体验",
+            "description": "跑步模式下。当设备由室内走向室外时,在空旷地区呆的时间约为1分钟。定位信号仍然显示很弱,地图一直处于北京的定位。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012384",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481338600090",
+            "bug_category": "用户体验",
+            "description": "跑步模式下,围着操场走走跑跑了半圈。发现地图开始50m左右的距离出现往返情况。也就是说在没有走重复路的情况下,地图上显示的轨迹有一段约50m的距离是叠加在一起的",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012387",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481338716356",
+            "bug_category": "其他",
+            "description": "同样是在跑步模式下,以缓慢的速度走路。发现在差不多每3秒的情况下,公里数递增0.02公里。详见相册截图",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012401",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481339085043",
+            "bug_category": "用户体验",
+            "description": "跑步模式将要退出时提示不明确",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012410",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481339318322",
+            "bug_category": "其他",
+            "description": "可以增加身高参数,那么对此人的身体数值可以有个大概的了解",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012415",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481339491113",
+            "bug_category": "功能不完整",
+            "description": "理论上,在室内应该也可以进行定位,只是定位数据准确与否。\n建议增加上网络定位的功能,这样在室内同样可以进行跑步等操作",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012429",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481339755026",
+            "bug_category": "用户体验",
+            "description": "跑步模式下,建议有一个定位当前点的功能。地图放大之后,找回当前点比较麻烦",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012445",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481339944402",
+            "bug_category": "用户体验",
+            "description": "退出跑步模式过于繁琐,要经过暂停->停止->确认停止。三步才可以退出。而如何点返回键的话,还可能要4步。有时候可能只是想返回上一界面。不可以暂停返回",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012460",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481340258625",
+            "bug_category": "用户体验",
+            "description": "点击发现,点击我的好友,中间home键回到主界面。再点进去发现,自动跳到了发现界面。\n同理发现,点击发现,点击我的好友,中间home键回到主界面。上述操作,无论你在我的好友中进行哪些操作,就会在home键之后,变成了发现。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012489",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481340763790",
+            "bug_category": "用户体验",
+            "description": "账号问题,没有办法进行切换账号。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012515",
+            "case_take_id": "2343",
+            "report_id": "10010000012328",
+            "create_time_millis": "1481341150274",
+            "bug_category": "功能不完整",
+            "description": "好友功能,无法找到删除好友功能,长按为修改备注名。滑动无反应。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012423",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481339648959",
+            "bug_category": "其他",
+            "description": "走路不计算时间",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/05/Screenshot_20161210-110256.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012425",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481339663299",
+            "bug_category": "其他",
+            "description": "GPS无信号",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/27/Screenshot_20161210-110016.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/28/Screenshot_20161210-105121.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012427",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481339686580",
+            "bug_category": "用户体验",
+            "description": "无法精确增加步数",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/18/45/Screenshot_20161210-104813.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012431",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481339762851",
+            "bug_category": "其他",
+            "description": "奔跑时步数计算不精准",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/19/03/Screenshot_20161210-110256.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012434",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481339842707",
+            "bug_category": "用户体验",
+            "description": "没有说明多少分钟才生成数据",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/19/14/Screenshot_20161210-104615.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012494",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481340898657",
+            "bug_category": "用户体验",
+            "description": "爬高步数不准确,有时较轻微时,爬高步数算入走路步数",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/42/17/Screenshot_20161210-113036.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012527",
+            "case_take_id": "2354",
+            "report_id": "10010000012417",
+            "create_time_millis": "1481341305356",
+            "bug_category": "用户体验",
+            "description": "计划只能终止不能更改",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/42/26/Screenshot_20161210-114149.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012405",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481339208589",
+            "bug_category": "用户体验",
+            "description": "在华为mate9(安卓5.1)上测试,两次在没有SIM卡但连接WIFI并且GPS信号良好的情况下开始跑步,app没有记录到任何位移。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012411",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481339356356",
+            "bug_category": "功能不完整",
+            "description": "在GPS信号差的情况下开始跑步,跑步界面地图无法定位,自动到开阔地带GPS信号变好之后,有定位,但跑步界面地图仍然停留在GPS信号差时的界面,无法自动移动到定位的当前位置。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012420",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481339620039",
+            "bug_category": "用户体验",
+            "description": "在跑步界面,点击左下角锁定按钮后,屏幕锁定的只是屏幕下半区显示跑步时间等的区域,上方的地图和底部的三个系统按钮仍然可以操作,这样可能造成跑步过程中的误触问题。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_2_endb0f53a2519e797c20df9ad02f3328cd7.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012432",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481339765805",
+            "bug_category": "用户体验",
+            "description": "计步功能算法有严重缺陷,手机拿在手上做小幅度晃动步数都会迅速增加。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012456",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481340110541",
+            "bug_category": "用户体验",
+            "description": "在发现,我的好友,聊天界面中,在输入框输入表情然后复制表情再粘贴时,粘贴到600字符上限时,最后一个表情因字符数限制无法正常显示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_580816966891602352_enda9f13d1336c31ea9db6e1d682c3ef92e.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012495",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481340904128",
+            "bug_category": "用户体验",
+            "description": "在我的-目标界面,设置运动目标时,步数只能以1000位单位进行调整,无法进行微调。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012500",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481340948273",
+            "bug_category": "用户体验",
+            "description": "在我的-目标界面,体重目标只能以1位单位进行调整,不能进行微调。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012506",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481341039315",
+            "bug_category": "功能不完整",
+            "description": "在我的-目标界面中,体重的下限是0,很明显这是一个不可能的数值!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_3_endcc6fb2343fc01b20f58827188c688109.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012553",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481341572972",
+            "bug_category": "用户体验",
+            "description": "在我的界面点击头像,进入后修改昵称,修改完成后直接关闭运动健康,再次打开运动健康,进入    我的    界面,显示的昵称仍然是修改前的昵称。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_5_end7a093d27615c2dc79ef3a0182fc3392a.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_4_end3d3503cc409d1e8aa29e1e064df6b09d.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012634",
+            "case_take_id": "2350",
+            "report_id": "10010000012368",
+            "create_time_millis": "1481342603806",
+            "bug_category": "用户体验",
+            "description": "在我的界面点击头像,进入后修改头像,随后关闭运动健康,再次打开运动健康,进入我的界面,头像仍然是修改前的头像。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_12_end24fe6387d55e1ffc9850d6a10c6ba8dc.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_11_endacd93331b9cd81cea235b3597513070e.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012490",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481340806180",
+            "bug_category": "性能",
+            "description": "在跑步的时候,开启GPS的情况下无法进行GPA定位,不显示用户运动的信息。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/33/10/Screenshot_2016-12-10-10-26-36.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/33/14/Screenshot_2016-12-10-10-25-39.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/33/26/Screenshot_2016-12-10-10-26-36.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012498",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481340924344",
+            "bug_category": "功能不完整",
+            "description": "在跑步的时候,用户跑步的公里数不给于显示,但是在结束运动返回到首页的时候却有步数的显示,前后不一致,",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/35/23/Screenshot_2016-12-10-10-28-21.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/35/24/Screenshot_2016-12-10-10-26-36.png",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012502",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341018904",
+            "bug_category": "功能不完整",
+            "description": "在准备结束运动的时候,系统提示运动距离短,不会记录数据,这样不方便用户的使用,即使运动距离很少,也应该将用户的运动数据记录。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/36/58/Screenshot_2016-12-10-10-27-14.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012514",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341129652",
+            "bug_category": "性能",
+            "description": "在从跑步页面返回到主页面并且用户有运动量后,在运动模块依旧显示\"暂无数据,开始跑步吧\"。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/38/49/Screenshot_2016-12-10-10-28-21.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012532",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341393571",
+            "bug_category": "功能不完整",
+            "description": "无法同时满足设定的目标。在首页运动模块的右下角,点击目标旗帜,可以选择运动目标,先选择时间30分钟,选择完成后返回到运动模块界面的时候,在小人和目标旗帜之间显示\"开始走路30分钟\",之后在目标旗帜下面选择距离10公里,同样的在小人和目标旗帜之间显示\"开始走路10公里\",对于目标旗帜下面的热量也是一样的操作,但是此app无法同时满足其中的两个条件或者三个条件。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/08/Screenshot_2016-12-10-10-52-03.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/08/Screenshot_2016-12-10-10-51-54.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/10/Screenshot_2016-12-10-10-51-46.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/11/Screenshot_2016-12-10-10-48-42.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/43/12/Screenshot_2016-12-10-10-47-03.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012544",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341486542",
+            "bug_category": "用户体验",
+            "description": "在发现页面,选择活动按钮,进入活动页面后,一些已经结束的活动仍然存在,如果用户没有看到活动已结束的话,就会点进去查看活动的详细信息,浪费时间。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/44/44/Screenshot_2016-12-10-10-58-12.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012565",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341652602",
+            "bug_category": "用户体验",
+            "description": "在从\"我的\"页面进入到通知-消息中心的时候,如果没有消息则显示为空白,此app没有设置相应的提示信息,比如在消息中心页面提示\"暂无消息\",如果不提示,用户可能会认为是网络慢的原因而没有加载出来,从而一直等待,浪费时间。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/47/32/Screenshot_2016-12-10-11-04-47.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012572",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341794970",
+            "bug_category": "功能不完整",
+            "description": "从\"我的\"页面进入到\"我的目标\"界面设置目标时,体重目标为\"40公斤时\",7000步的运动量目标为少量,体重目标为\"91公斤\"时,7000步的运动目标还是少量,运动目标是否适量,应该根据用户的体重目标来自动匹配变化。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/49/54/Screenshot_2016-12-10-11-09-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/49/54/Screenshot_2016-12-10-11-09-19.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012585",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341933028",
+            "bug_category": "其他",
+            "description": "从\"我的\"页面进入到\"我的成绩单\"页面\",点击分享按钮进行分享时,供用户可选的路径有点少,比如现在用户用的比较多的\"qq\"",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/52/12/Screenshot_2016-12-10-11-14-31.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012588",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481341985079",
+            "bug_category": "用户体验",
+            "description": "\"我的\"界面的头像背景图案系统是默认的,不允许用户自定义。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/53/04/Screenshot_2016-12-10-11-20-40.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012597",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481342082388",
+            "bug_category": "用户体验",
+            "description": "在\"我的\"界面点击用户头像不能直接进行头像更换,需要跳转到账号中心,然后再点击用户头像,跳转到个人信息才能进行头像修改,很不方便。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/54/41/Screenshot_2016-12-10-11-21-49.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/54/42/Screenshot_2016-12-10-11-20-40.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "216",
+            "id": "10010000012610",
+            "case_take_id": "2358",
+            "report_id": "10010000012486",
+            "create_time_millis": "1481342237009",
+            "bug_category": "用户体验",
+            "description": "在从\"发现\"页面进入到活动页面查看某一个具体活动的详细信息页面,点击页面左上角的返回按钮,没有返回到活动列表页面,而是返回到了\"发现\"页面,如果用户需要查看其他活动的详细信息,还需要重新从\"发现\"页面进入,比较麻烦。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/03/57/14/Screenshot_2016-12-10-11-27-41.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/03/57/16/Screenshot_2016-12-10-11-27-03.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011993",
+            "case_take_id": "2309",
+            "report_id": "10010000011991",
+            "create_time_millis": "1481330099948",
+            "bug_category": "功能不完整",
+            "description": "\n点击评价从到大小,评价值应该由大到小排列,但没有实现该功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/59/Screenshot_2016-12-10-08-32-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/15/18/Screenshot_2016-12-10-12-13-03.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/15/57/Screenshot_2016-12-10-12-13-03.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/04/16/08/Screenshot_2016-12-10-12-13-03.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012022",
+            "case_take_id": "2309",
+            "report_id": "10010000012019",
+            "create_time_millis": "1481330884369",
+            "bug_category": "用户体验",
+            "description": "没有输入邮箱,点击发送按钮,应该给出提示信息请输入邮箱,而不是请输入评论",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/04/Screenshot_2016-12-10-08-45-17.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012045",
+            "case_take_id": "2309",
+            "report_id": "10010000012040",
+            "create_time_millis": "1481331318279",
+            "bug_category": "用户体验",
+            "description": "没有输入账号时应该给出提示提示信息,请输入账号,而不是给出分享到具体平台,有时用户并不想登录微信账号,提示输入微信账号操作就不友好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/18/Screenshot_2016-12-10-08-52-12.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012086",
+            "case_take_id": "2309",
+            "report_id": "10010000012084",
+            "create_time_millis": "1481331959966",
+            "bug_category": "性能",
+            "description": "进入学习迷你小对话窗口,应该能正常进行学习,但报错说网络错误。但设置中开启使用网络,且该网络良好,且多台手机都报类似的错误。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/05/59/Screenshot_2016-12-10-09-01-57.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/21/51/Screenshot_2016-12-10-09-20-54.jpeg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012116",
+            "case_take_id": "2309",
+            "report_id": "10010000012112",
+            "create_time_millis": "1481332473224",
+            "bug_category": "功能不完整",
+            "description": "点击课程介绍,弹出提示窗口,关闭提示窗口时没有进入相应的课程界面,而是返回到主界面",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/32/Screenshot_2016-12-10-09-13-26.jpeg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012168",
+            "case_take_id": "2309",
+            "report_id": "10010000012166",
+            "create_time_millis": "1481333188422",
+            "bug_category": "用户体验",
+            "description": "当学习计划没有发生修改,不应该给出提示信息“修改成功”",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/26/27/Screenshot_2016-12-10-09-25-46.jpeg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/26/28/Screenshot_2016-12-10-09-25-30.jpeg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012207",
+            "case_take_id": "2309",
+            "report_id": "10010000012205",
+            "create_time_millis": "1481333727397",
+            "bug_category": "功能不完整",
+            "description": "图二是我第一次评价,显示我的评价为“哈哈哈”。我再次评价“再次哈哈哈”时,会覆盖我的第一次评价。图一就是我的再次评价。\n应该显示两条评价信息,“哈哈哈”和“再次哈哈哈”",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/35/25/Screenshot_2016-12-10-09-34-31.jpeg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/35/27/Screenshot_2016-12-10-09-34-09.jpeg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012245",
+            "case_take_id": "2309",
+            "report_id": "10010000012244",
+            "create_time_millis": "1481334240765",
+            "bug_category": "安全",
+            "description": "图二是用户没有进行登录,进行推荐给好友时可以进行推荐成功。图一是推荐给QQ好友,进入QQ好友推荐界面。没有登录的用户进行分享给QQ好友会存在很大的安全问题",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/43/59/Screenshot_2016-12-10-09-43-20.jpeg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/44/00/Screenshot_2016-12-10-09-42-15.jpeg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012270",
+            "case_take_id": "2309",
+            "report_id": "10010000012269",
+            "create_time_millis": "1481334867570",
+            "bug_category": "功能不完整",
+            "description": "没有登录的用户应该可以通过图二的登录功能进行登录。但只是消除弹出的界面,没有进入到登录界面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/54/26/Screenshot_2016-12-10-09-53-34.jpeg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/54/27/Screenshot_2016-12-10-09-53-24.jpeg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012063",
+            "case_take_id": "2296",
+            "report_id": "10010000011943",
+            "create_time_millis": "1481331586692",
+            "bug_category": "用户体验",
+            "description": "在注册时,输入密码只要求输入一次,这样没有了再次验证的过程,用户输错密码的话就问题大了",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/44/Screenshot_20161210-083054.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012139",
+            "case_take_id": "2296",
+            "report_id": "10010000011943",
+            "create_time_millis": "1481332667546",
+            "bug_category": "用户体验",
+            "description": "没有说明用户名长度限制",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/47/Screenshot_20161210-091509.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012148",
+            "case_take_id": "2296",
+            "report_id": "10010000011943",
+            "create_time_millis": "1481332830385",
+            "bug_category": "用户体验",
+            "description": "注册成功后若不确认用户名直接退出,再登录时没有默认用户名,用户无法登录",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012286",
+            "case_take_id": "2296",
+            "report_id": "10010000012197",
+            "create_time_millis": "1481335412216",
+            "bug_category": "用户体验",
+            "description": "每个用户只能评论一条评论,如果有用户评论后还想再评论,也只能编辑已评论的那一条",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/05/34/Screenshot_20161210-100519.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/05/35/Screenshot_20161210-100513.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011958",
+            "case_take_id": "2297",
+            "report_id": "10010000011944",
+            "create_time_millis": "1481329283297",
+            "bug_category": "功能不完整",
+            "description": "在注册引导页面,点击注册后,系统提示页面有叠加层,要去应用设置中设置叠加层,设置之后也无效;可能是也KIKAndroid的浮动窗口冲突。",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011960",
+            "case_take_id": "2297",
+            "report_id": "10010000011944",
+            "create_time_millis": "1481329285889",
+            "bug_category": "功能不完整",
+            "description": "在注册引导页面,点击注册后,系统提示页面有叠加层,要去应用设置中设置叠加层,设置之后也无效;可能是也KIKAndroid的浮动窗口冲突。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-14-31_end9a7ae429326221ea64cac72845bac5a0.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-14-40_end3c856d03bb63b220006cba5197d30071.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-14-58_end4ef2b62f518cb45f4ec91a40b75ea9d4.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-15-23_endeac8f328cb438d150d9673d5ec72f8dc.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012007",
+            "case_take_id": "2297",
+            "report_id": "10010000011992",
+            "create_time_millis": "1481330534354",
+            "bug_category": "功能不完整",
+            "description": "1、在无网络状态下进入注册页面\n2、填写合法的手机号码\n3、打开网络、此时不能获取到验证码图片",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-33-21_end6c16811ded5ca1a079c607fa058ddc59.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-33-44_end53e99d22dd1f7d9075c2ed00a61f8ba5.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012097",
+            "case_take_id": "2297",
+            "report_id": "10010000012078",
+            "create_time_millis": "1481332190664",
+            "bug_category": "功能不完整",
+            "description": "其他注册方式中选择QQ,提示非官方正版应用,要去应用宝下载,错误代码(100044)",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-09-01-57_end594cb57656c0c9f286f5e225855efd4d.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012101",
+            "case_take_id": "2297",
+            "report_id": "10010000012078",
+            "create_time_millis": "1481332240648",
+            "bug_category": "功能不完整",
+            "description": "其他 注册方式选择微信,一闪没有进入微信的授权界面",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012102",
+            "case_take_id": "2297",
+            "report_id": "10010000012078",
+            "create_time_millis": "1481332277896",
+            "bug_category": "功能不完整",
+            "description": "其他注册方式选择微博,选择之后,微博停止运行",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012141",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481332682493",
+            "bug_category": "功能不完整",
+            "description": "第三方qq登录,一直在登录中,然后直接返回普通登录界面,登录失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/18/02/Screenshot_2016-12-10-09-15-10.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012146",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481332764671",
+            "bug_category": "性能",
+            "description": "选择课程,自己按类别选择课程和查看课程详情时,加载速度过慢\n",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012152",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481332870053",
+            "bug_category": "功能不完整",
+            "description": "选择常春藤时,第一次点击更多,已添加课程还能再添加一次,第二次点击更多,登录到浏览器",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/21/08/Screenshot_2016-12-10-09-06-48.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/21/09/Screenshot_2016-12-10-09-06-40.png",
+            "severity": "1",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012156",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481332932160",
+            "bug_category": "功能不完整",
+            "description": "有的课程,没有更多选项",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/22/10/Screenshot_2016-12-10-09-12-47.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/22/11/Screenshot_2016-12-10-09-11-22.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012161",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333062086",
+            "bug_category": "功能不完整",
+            "description": "10天突破零基础中\n第一次点击添加课程,进去有个更多,点击之后,又进去添加课程界面,再次添加后,更多按钮替换为问答",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/19/Screenshot_2016-12-10-09-07-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/20/Screenshot_2016-12-10-09-12-47.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/21/Screenshot_2016-12-10-09-10-43.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/22/Screenshot_2016-12-10-09-07-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/22/Screenshot_2016-12-10-09-12-47.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/26/Screenshot_2016-12-10-09-10-43.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/28/Screenshot_2016-12-10-09-24-57.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/29/Screenshot_2016-12-10-09-24-50.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012171",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333203760",
+            "bug_category": "页面布局缺陷",
+            "description": "课程难度筛选中,初中级中,出现了初级课程",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012189",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333466440",
+            "bug_category": "页面布局缺陷",
+            "description": "在  新闻分类中,voa news和新闻综合有重叠节目",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/31/05/Screenshot_2016-12-10-08-37-48.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/31/06/Screenshot_2016-12-10-08-37-39.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012199",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333610180",
+            "bug_category": "页面布局缺陷",
+            "description": "在美式英语中,全部美式英语和纯正美式英语内容完全相同,没必要\n在英式英语中,全部英式英语和bbc英式英语完全相同,没必要",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/33/24/Screenshot_2016-12-10-08-40-27.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/33/25/Screenshot_2016-12-10-08-40-20.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/33/27/Screenshot_2016-12-10-08-40-07.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/33/28/Screenshot_2016-12-10-08-39-58.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012202",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333659485",
+            "bug_category": "页面布局缺陷",
+            "description": "在品牌英语中,赖世雄品牌出现了常春藤英语",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/34/19/Screenshot_2016-12-10-08-42-49.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/34/29/Screenshot_2016-12-10-08-42-49.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012211",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333753645",
+            "bug_category": "页面布局缺陷",
+            "description": "在英语考试中,考验锦囊中没有包含考验相关,",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/35/53/Screenshot_2016-12-10-08-46-46.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012218",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333843082",
+            "bug_category": "页面布局缺陷",
+            "description": "在英语考试中\n剑桥雅思,托福考试,口译中,出现了无关内容",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/37/18/Screenshot_2016-12-10-08-49-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/37/21/Screenshot_2016-12-10-08-47-38.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/37/22/Screenshot_2016-12-10-08-46-38.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012221",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333914490",
+            "bug_category": "页面布局缺陷",
+            "description": "在文学著作中\n名人传记里,出现了无关内容",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/38/34/Screenshot_2016-12-10-08-51-48.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012224",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481333964915",
+            "bug_category": "页面布局缺陷",
+            "description": "在,文学著作中\n\n名著小说中没有包含应该有的名著\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/39/21/Screenshot_2016-12-10-08-54-22.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/39/22/Screenshot_2016-12-10-08-54-15.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/39/24/Screenshot_2016-12-10-08-54-10.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012228",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481334013486",
+            "bug_category": "页面布局缺陷",
+            "description": "在实用英语中,出现了飞鸟集这种诗歌。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/40/13/Screenshot_2016-12-10-08-59-08.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012670",
+            "case_take_id": "2314",
+            "report_id": "10010000012134",
+            "create_time_millis": "1481343240370",
+            "bug_category": "功能不完整",
+            "description": "试用登录后,点击注册,无法输入手机号",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011980",
+            "case_take_id": "2304",
+            "report_id": "10010000011971",
+            "create_time_millis": "1481329937862",
+            "bug_category": "功能不完整",
+            "description": "进入注册页面,使用手机号进行注册,收入正确的手机号、验证码以及密码,点击注册按钮,应该显示注册成功,但是测试时显示请求失败,见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1_end5df2c716936310e9df96ff36e4510cba.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_2_endb5dde090201cef164171d735021f2bee.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_3_endfaa0e9c8840533541e13d77c4f275b9e.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012025",
+            "case_take_id": "2304",
+            "report_id": "10010000012021",
+            "create_time_millis": "1481330922476",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用后,进入课程页面,见截图1;点击英语,进入英语课程界面,见截图2;点击英语界面的右下角的人气降低排序方式,见截图2;点击第二个课程,查看其人数为71429,见截图3;点击第三个课程,查看其人数为63828,见截图4。因此英语课程并没有按照人气降低排序",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/31/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/38/Screenshot_2016-12-10-00-45-16.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/39/Screenshot_2016-12-10-00-46-32.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/42/Screenshot_2016-12-10-00-46-26.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012061",
+            "case_take_id": "2304",
+            "report_id": "10010000012057",
+            "create_time_millis": "1481331565354",
+            "bug_category": "功能不完整",
+            "description": "成功登录并进入英语课程界面,点击评价降序图标后查看课程并没有按照评价数降序排序,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/19/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/25/Screenshot_2016-12-10-00-56-57.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012065",
+            "case_take_id": "2304",
+            "report_id": "10010000012062",
+            "create_time_millis": "1481331612158",
+            "bug_category": "用户体验",
+            "description": "成功登录应用,进入英语课程界面,点击该界面右下角的时间降序排序图标,可看到英语课程界面的所有课程按照上传时间降序排序,或者进入课程详情界面可看到上传时间,并且课程按上传时间降序排序。\n测试时点击时间降序排序图标后,并没有在英语课程界面或者详情界面看到上传时间,也没有看到排序",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/08/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/12/Screenshot_2016-12-10-00-57-25.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012115",
+            "case_take_id": "2304",
+            "report_id": "10010000012109",
+            "create_time_millis": "1481332461814",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入英语课程界面,选择人气降序以及难度为初级的课程,查看选择结果显示为初级课程,但是并没有按照人气降序排序,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/21/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/43/Screenshot_2016-12-10-01-11-06.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012121",
+            "case_take_id": "2304",
+            "report_id": "10010000012117",
+            "create_time_millis": "1481332505645",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入英语课程界面,选择人气降序、难度为初级和类型为泛听的课程,查看选择结果显示为初级、类型为泛听的课程,但是并没有按照人气降序排序,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/15/05/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/25/Screenshot_2016-12-10-01-22-33.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012129",
+            "case_take_id": "2304",
+            "report_id": "10010000012123",
+            "create_time_millis": "1481332589879",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入英语课程界面,选择类型为阅读的课程,显示类型为阅读的所有课程,但是只有部分课程的名字下方有五星图标和评价数,有的课程下方并没有五星图标和评价数,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/09/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/34/48/Screenshot_2016-12-10-01-23-11.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012135",
+            "case_take_id": "2304",
+            "report_id": "10010000012133",
+            "create_time_millis": "1481332637161",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入英语课程界面,选择该界面右上角的类型为听力的课程,结果只有部分听力课程有五星图标和评价数显示,还有一部分课程没有五星和评价数显示,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/16/Screenshot_2016-12-10-00-45-00.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/25/25/Screenshot_2016-12-10-01-22-04.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012236",
+            "case_take_id": "2304",
+            "report_id": "10010000012231",
+            "create_time_millis": "1481334073792",
+            "bug_category": "功能不完整",
+            "description": "成功登录应用进入英语课程界面,点击《常春藤新闻英语听力》课程并成功添加,制作学习计划时,该界面并没有显示如截图2中的多少天可完成学习,缺陷见截图3",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/02/Screenshot_2016-12-10-01-39-06.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/04/Screenshot_2016-12-10-01-40-10.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/13/Screenshot_2016-12-10-01-39-40.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012262",
+            "case_take_id": "2304",
+            "report_id": "10010000012260",
+            "create_time_millis": "1481334591348",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入“我的”界面,课程《常春藤新闻英语听力》的三点图标在课程详情界面的右上角,见截图1,而课程《流利英语口语1》的三点图标在课程详情界面的右上角,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/56/42/Screenshot_2016-12-10-01-56-07.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/56/44/Screenshot_2016-12-10-01-56-14.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012276",
+            "case_take_id": "2304",
+            "report_id": "10010000012274",
+            "create_time_millis": "1481335045342",
+            "bug_category": "用户体验",
+            "description": "成功登录应用进入“我的”界面,点击课程《常春藤新闻英语听力》进入其详情界面,点击三点图标,显示“退订课程”,见截图1,而课程《流利英语口语1》的退订名称叫“放弃课程”,见截图2",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/57/23/Screenshot_2016-12-10-01-48-11.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/57/25/Screenshot_2016-12-10-01-48-53.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011994",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481330182578",
+            "bug_category": "用户体验",
+            "description": "在进行用户注册的过程中,信息填写完毕后,点击注册按钮,响应时间过于长,等了一会才有反应。登录过程中也是如此。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1_end562b0ccb74afed072aa358d6c9b9c26a.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_4_endf1f963f40de86ce04200787aff07a650.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012001",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481330356687",
+            "bug_category": "用户体验",
+            "description": "在用户注册的过程中,使用已经注册过的手机进行注册,1.输入验证码错误,她会首先验证验证码错误,而不是直接告诉用户,该账户已经成功注册。2.密码输入不合规矩,他也是首先验证密码输入不能为纯数字或者密码输入不能为纯字母,再去验证手机账号已经被注册了。大大的降低了用户的体验感,输入了半天,才被告知手机号已经被注册。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_2_end3315d77f61daef38996f0b005e2e7ca6.JPG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012053",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481331468025",
+            "bug_category": "页面布局缺陷",
+            "description": "已经登陆进去之后,他还会显示当前是试用账号,为了更好的保存信息,请先登录",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012125",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481332530824",
+            "bug_category": "功能不完整",
+            "description": "在进入课程-英语界面之后,选择相应的选项卡进入子页面的过程中,有些分类分的不完善,不能够提供初,中,高三个等级的学习,有些只有中,有些只有初。有些分类类别显示错误。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_5_ende0e03b8cceecc28f3e7ae7b5a1bd5de2.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_6_endb0b443bc39a9acdc000a676ba87fa623.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012176",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481333263682",
+            "bug_category": "页面布局缺陷",
+            "description": "点击课程-英语-美式英语-选择难度为高级,但是显示出来的是英式新闻精华回顾。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_8_endae44a230fc57b446c84df6d7456cdff7.JPG",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012198",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481333608153",
+            "bug_category": "功能不完整",
+            "description": "选择排序方式的时候,点击人气排序,最终结果并没有按照人气的高低进行排序。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_9_endb3764a6459a3f2db69615ba08dac45f7.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012226",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481333987989",
+            "bug_category": "功能不完整",
+            "description": "课程-学习,加一门课程进入学习之后,并没有开始学习,直接点击下一课,会显示今日任务完成。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_10_end6ce8a9eb0f81026cc73b256b08cb9699.JPG;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_11_end07867a43466ba89c9b1ff94b9b00db55.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012258",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481334527847",
+            "bug_category": "安全",
+            "description": "在加入课程评价的过程中,我没有学习该课程便开始评价,这个样子很容易造成刷评价的,提高自己的评价,或者去把别人的评价等级弄低。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_13_end058102fdb4c8b73e0111aa40f018ad2e.JPG",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012361",
+            "case_take_id": "2295",
+            "report_id": "10010000011928",
+            "create_time_millis": "1481337857337",
+            "bug_category": "性能",
+            "description": "登陆界面输入键盘始终出不来",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_15_end5c36c1772aee0c8385c607b17be0b30a.JPG",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011929",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481328960763",
+            "bug_category": "性能",
+            "description": "注册的时候输入正确的手机号和图像验证码,输入包含数字和字母的21位密码,点击注册,本应该提示密码超过20位,让用户重新输入密码,但是成功转到填写手机验证码的界面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/17/38/Screenshot_2016-12-10-08-15-34.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/17/38/Screenshot_2016-12-10-08-15-28.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011989",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481330047379",
+            "bug_category": "功能不完整",
+            "description": "输入正确的手机短信验证码之后,再输入不包含特殊字符且长度超过20的用户名,没有禁止用户输入超过20字符长度的用户名。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/29/Screenshot_2016-12-10-08-31-53.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/35/10/Screenshot_2016-12-10-08-31-53.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012051",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481331465204",
+            "bug_category": "功能不完整",
+            "description": "在课程页面选择英语,进入英语课程选择页面,点击右上角选择类别为名人传记的英语类别,显示与名人传记不相关的类别。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/58/00/Screenshot_2016-12-10-08-56-03.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012099",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481332230689",
+            "bug_category": "功能不完整",
+            "description": "进入英语课程界面,选择高级,点击评价,英语课程应该按照评价从高到低进行排序,但是出现评价高的出现在评价低的后面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/10/44/Screenshot_2016-12-10-09-08-28.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012104",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481332317286",
+            "bug_category": "功能不完整",
+            "description": "进入英语课程页面,点击人气,课程应该按照人气进行排名,但是出现人气低的出现在人气高的前面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/12/16/Screenshot_2016-12-10-09-12-01.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/13/38/Screenshot_2016-12-10-09-13-28.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/34/Screenshot_2016-12-10-09-16-04.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012143",
+            "case_take_id": "2283",
+            "report_id": "10010000011916",
+            "create_time_millis": "1481332705510",
+            "bug_category": "功能不完整",
+            "description": "进入英语课程页面,点击评价,出现评价低的出现在评价高的前面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/18/59/Screenshot_2016-12-10-09-18-48.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012004",
+            "case_take_id": "2305",
+            "report_id": "10010000011972",
+            "create_time_millis": "1481330424545",
+            "bug_category": "不正常退出",
+            "description": "用户体验不好,登录时用户会把焦点放在了点击登录上,容易忽视上面的小图标",
+            "img_url": "",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012092",
+            "case_take_id": "2305",
+            "report_id": "10010000011972",
+            "create_time_millis": "1481332087935",
+            "bug_category": "功能不完整",
+            "description": "点击登录,无法进入到登录页面",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/08/42/Screenshot_20161210-090650.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012100",
+            "case_take_id": "2305",
+            "report_id": "10010000011972",
+            "create_time_millis": "1481332238941",
+            "bug_category": "安全",
+            "description": "设置登录密码时,可以输入纯数字,没有提示要字母和数字的混合等",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/10/38/Screenshot_20161210-090612.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012107",
+            "case_take_id": "2305",
+            "report_id": "10010000011972",
+            "create_time_millis": "1481332360377",
+            "bug_category": "页面布局缺陷",
+            "description": "下拉框的课程,和英语页面的主页重复",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/12/40/Screenshot_20161210-091109.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012054",
+            "case_take_id": "2284",
+            "report_id": "10010000012047",
+            "create_time_millis": "1481331481097",
+            "bug_category": "安全",
+            "description": "邮箱注销:用邮箱注册时没有发送验证链接,随便输入一个邮箱就能注册",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/57/54/Screenshot_2016-12-10-08-56-56-01.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/57/54/Screenshot_2016-12-10-08-56-48-89.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/58/00/Screenshot_2016-12-10-08-56-56-01.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/58/00/Screenshot_2016-12-10-08-56-48-89.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/12/Screenshot_2016-12-10-08-56-56-01.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/13/Screenshot_2016-12-10-08-56-48-89.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012071",
+            "case_take_id": "2284",
+            "report_id": "10010000012047",
+            "create_time_millis": "1481331672773",
+            "bug_category": "功能不完整",
+            "description": "人气排序:在所有课程里面点击下面的人气排序安扭,并没有安人气进行降序排序,好无规律",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/12/Screenshot_2016-12-10-08-59-50-33.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012076",
+            "case_take_id": "2284",
+            "report_id": "10010000012047",
+            "create_time_millis": "1481331789181",
+            "bug_category": "功能不完整",
+            "description": "评价排序:当在列表下面点击评价排序时,并没按照评价高低进行排序,毫无规律",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/03/08/Screenshot_2016-12-10-09-01-26-30.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012082",
+            "case_take_id": "2284",
+            "report_id": "10010000012047",
+            "create_time_millis": "1481331879338",
+            "bug_category": "用户体验",
+            "description": "时间排序:当点击时间排序安扭时,无法看到任何有关时间的文本,根本不知道他是安装什么时间排序的。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/39/Screenshot_2016-12-10-09-01-29-24.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012096",
+            "case_take_id": "2284",
+            "report_id": "10010000012047",
+            "create_time_millis": "1481332153053",
+            "bug_category": "其他",
+            "description": "逻辑缺陷:选择实用英语的时候选择英语口语,再去选择类型为阅读,竟然可以选,虽然没有结果。可是英语口语怎么会有阅读类型了,应该让阅读安扭置灰",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/20/Screenshot_2016-12-10-09-09-10-28.png",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011996",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481330243872",
+            "bug_category": "用户体验",
+            "description": "验证码输入错误时,离开输入框,没有标红提示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-08343699_enda99230e670f04be43173c049b69852e6.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011997",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481330246351",
+            "bug_category": "用户体验",
+            "description": "验证码输入错误时,离开输入框,没有标红提示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-08343699_enda99230e670f04be43173c049b69852e6.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012031",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481331096504",
+            "bug_category": "不正常退出",
+            "description": "在注册输入用户名点击确认后,不正常退出,一直停留在此界面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-08501934_end2b6a477d1d87710148b72ade2057fa4c.jpg",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012095",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481332149429",
+            "bug_category": "功能不完整",
+            "description": "没有邮箱绑定和邮箱注册,但是登陆时却提示可以邮箱登陆。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09034809_end91c6872a87e0ccab2fd5456082783a20.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012124",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481332528935",
+            "bug_category": "功能不完整",
+            "description": "排序功能不正确,没有按照选择的选项从大到小排序,并且不可以从小到大排序,按照时间排序时也根本不显示时间,无法知道真实时间。出现高评价在低评价后面等",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09123950_end555e9e75ac698a39fdb862176d11e9c6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09124880_end1177b112722f6a1e336e79aa13de9256.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09144185_enda9bc7a68dacf17afab9ad332c95c507b.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012165",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481333161929",
+            "bug_category": "功能不完整",
+            "description": "qq登录失败,在用户名和密码正确时,使得用户想使用qq登录时不能成功",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09242075_endadeca902b14d67c0f88fd41be18eedf2.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012177",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481333284774",
+            "bug_category": "功能不完整",
+            "description": "微博登录时,显示文件不存在,不能登录成功",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09261973_end007a0e24fc11648f01ef0e28735ca9e0.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012190",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481333493919",
+            "bug_category": "用户体验",
+            "description": "验证码错误时,提交后提示,出现新的验证码图片但是不清空上一次输入的验证码,也无法一键清空,很麻烦",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09300228_endfdb7690f7bd90c8415f1204a8b7da1ec.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012230",
+            "case_take_id": "2298",
+            "report_id": "10010000011954",
+            "create_time_millis": "1481334023826",
+            "bug_category": "功能不完整",
+            "description": "社交账号登录失败,影响用户使用",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09360845_endc79b22c7e3e5fc84cc16b94cd659896c.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_S61210-09355625_end5488dbf13515994922dcee8887026727.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012056",
+            "case_take_id": "2303",
+            "report_id": "10010000011964",
+            "create_time_millis": "1481331512627",
+            "bug_category": "功能不完整",
+            "description": "有按时间排序的选项,但是课程介绍却没有关于时间的信息,无法让用户知晓",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012069",
+            "case_take_id": "2303",
+            "report_id": "10010000011964",
+            "create_time_millis": "1481331667300",
+            "bug_category": "功能不完整",
+            "description": "在按人气或评论排序时,排序结果混乱。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/06/S61210-085534.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/07/S61210-085441.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/21/S61210-085534.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/22/S61210-085441.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012105",
+            "case_take_id": "2303",
+            "report_id": "10010000011964",
+            "create_time_millis": "1481332344870",
+            "bug_category": "用户体验",
+            "description": "没有查询功能,当课程较多时,对用户很不方便",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/13/00/S61210-091242.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012147",
+            "case_take_id": "2303",
+            "report_id": "10010000011964",
+            "create_time_millis": "1481332808814",
+            "bug_category": "用户体验",
+            "description": "无法对别人的评价进行恢复或提问,对用户是个不好的体验",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012160",
+            "case_take_id": "2303",
+            "report_id": "10010000011964",
+            "create_time_millis": "1481333042310",
+            "bug_category": "功能不完整",
+            "description": "对于听写类型的课程无法进行评论。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/02/S61210-092301.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011977",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481329823431",
+            "bug_category": "不正常退出",
+            "description": "当第一次进去应用时,当我点击英语后,推荐给我的兴趣全选,然后点击跳过,直接闪退",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/30/23/1481329627025_6.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012039",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481331247491",
+            "bug_category": "用户体验",
+            "description": "正常的密码输入环节应该是手机验证码验证成功后。才由用户自己输入。而这个app竟然在点击了注册按钮之后才发送验证码",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/54/07/1481329445127_4.jpg",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012050",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481331390997",
+            "bug_category": "用户体验",
+            "description": "当用户在输入账号前,并没有验证码输入验证,但输入结束后突然下边弹出一个验证栏目",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/56/30/1481329445127_4.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012064",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481331600138",
+            "bug_category": "页面布局缺陷",
+            "description": "当点击英语进入后相关界面后。每个栏目的属性应该相同。但其中的迷你小对话等栏目并没有相关评价指数和评价\n人数的显示",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/59/1481329649028_7.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/00/1481329649028_7.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012083",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481331890818",
+            "bug_category": "性能",
+            "description": "进入课程界面后,不断下拉刷新,会出现很明显的闪屏现象",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012108",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481332363207",
+            "bug_category": "用户体验",
+            "description": "进入英语课程界面后,用户筛选要进入的相关推荐中,右下方的按人气,评价,时间竟然都不能反转排序。从低到高排序无法实现",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/12/42/1481332113996_7.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/12/42/1481332086696_6.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012114",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481332459384",
+            "bug_category": "功能不完整",
+            "description": "对于没有的课程推荐,应该提供跳转的链接,或者给用户手动选择的权利,或者推荐,而不是光秃秃的反馈没有结果\n\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/18/1481332046669_4.jpg",
+            "severity": "2",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012138",
+            "case_take_id": "2306",
+            "report_id": "10010000011973",
+            "create_time_millis": "1481332665887",
+            "bug_category": "用户体验",
+            "description": "一个app用户非常关心与自己感兴趣的内容,然而这个列表的排序既没有按相关推荐度,也没有按使用人数排序(难道是根据广告费??)。使用户难以快速找到自己喜欢的栏目。\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/45/1481332086696_6.jpg",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011963",
+            "case_take_id": "2294",
+            "report_id": "10010000011927",
+            "create_time_millis": "1481329356883",
+            "bug_category": "用户体验",
+            "description": "进入沪江英语的课程,选择英语,选择具体某一项英语类别的时候,下数据的加载很慢,但是,获取的数据并不多,在进行人气、评价时间排序的时候,首次加载会慢,第二次加载还是慢,应该考虑缓存的优化问题,如果说是实时数据不方便进行数据缓存,那每个页面没有下拉刷新也是不合理的",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/21/37/Screenshot_2016-12-10-08-13-46-479_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/21/37/Screenshot_2016-12-10-08-13-42-537_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/21/38/Screenshot_2016-12-10-08-13-00-148_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/22/35/Screenshot_2016-12-10-08-11-56-252_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/22/36/Screenshot_2016-12-10-08-13-46-479_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/22/36/Screenshot_2016-12-10-08-13-42-537_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011987",
+            "case_take_id": "2294",
+            "report_id": "10010000011974",
+            "create_time_millis": "1481329946955",
+            "bug_category": "用户体验",
+            "description": "进入某一具体课程的介绍页面(例如旅游从口语学起),对每个课程的评价只能有一份记录,再次增加,会把以前的覆盖了,这个是不合理的,应该把以前的保留起来,用户可能会在学习过程中的不同阶段有不同评价。用户发表新的评价,在课程评价页面应该显示最新的,点进去后可以看到以前的评价",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/25/Screenshot_2016-12-10-08-25-58-110_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/26/Screenshot_2016-12-10-08-25-43-599_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011990",
+            "case_take_id": "2294",
+            "report_id": "10010000011974",
+            "create_time_millis": "1481330068595",
+            "bug_category": "用户体验",
+            "description": "在具体的某一课程介绍页面,不能够对评价的用户进行咨询,这样,不能很好的进行互动,应该增加一些用户与用户之间的讨论会好一些",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/21/Screenshot_2016-12-10-08-25-43-599_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/28/Screenshot_2016-12-10-08-25-43-599_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012010",
+            "case_take_id": "2294",
+            "report_id": "10010000011927",
+            "create_time_millis": "1481330592695",
+            "bug_category": "功能不完整",
+            "description": "进入某一课程(例如慢速美音新闻)进入学习,无论网络的好坏程度,都没有办法加载语音资料,要么提示网络不行,要么说网址错误",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/43/12/Screenshot_2016-12-10-08-40-13-093_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/43/12/Screenshot_2016-12-10-08-39-46-729_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012028",
+            "case_take_id": "2294",
+            "report_id": "10010000011974",
+            "create_time_millis": "1481331094421",
+            "bug_category": "功能不完整",
+            "description": "进入某一课程的介绍页面,屏幕上会有用户对此课程的评价,会显示有多少人评价,评分多少。人数不够,会提示不显示,但是,当一开始有评价数提示的时,自己评价,会显示评价数不够,无法显示课程评价人数,这很不合理",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/51/33/Screenshot_2016-12-10-08-51-14-635_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/51/34/Screenshot_2016-12-10-08-50-29-160_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012044",
+            "case_take_id": "2294",
+            "report_id": "10010000011974",
+            "create_time_millis": "1481331302237",
+            "bug_category": "功能不完整",
+            "description": "具体的某一课程,用户评价数量的计算有问题,(以常春藤英语听力为例),显示有32条评论,但是,查看所有的评论发现才有16条,要是用户与用户之间的评论也计算在内,可能会有,但是,课程介绍评价里面看不到用户与用户之间的交流",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/01/Screenshot_2016-12-10-08-50-56-005_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/02/Screenshot_2016-12-10-08-50-29-160_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012090",
+            "case_take_id": "2294",
+            "report_id": "10010000012079",
+            "create_time_millis": "1481332034794",
+            "bug_category": "功能不完整",
+            "description": "进入课程标签页面,下拉刷新,发现上部的图片轮番会出现抖动,短暂的空白(不明显,但是,会抖动)",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/07/13/Screenshot_2016-12-10-09-02-51-673_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/07/14/Screenshot_2016-12-10-09-02-46-571_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012217",
+            "case_take_id": "2294",
+            "report_id": "10010000011927",
+            "create_time_millis": "1481333835580",
+            "bug_category": "功能不完整",
+            "description": "进入英语课程,选择某一类课程,出现下拉课程,下拉没有刷新提示,上拉的时候有加载更多。下拉到底,也应该有个提示,提示刷新,或则没有更多了",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/37/15/Screenshot_2016-12-10-09-34-59-399_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011998",
+            "case_take_id": "2310",
+            "report_id": "10010000011995",
+            "create_time_millis": "1481330246586",
+            "bug_category": "功能不完整",
+            "description": "无法点击",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/37/26/1481330153289_1.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012013",
+            "case_take_id": "2310",
+            "report_id": "10010000012009",
+            "create_time_millis": "1481330651784",
+            "bug_category": "性能",
+            "description": "除了主要步骤的步骤1操作时刷新速度正常(如图1),步骤2和3的刷新速度都过慢(如图2和3)",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/44/09/1481330633420_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/44/10/1481330564740_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/44/11/1481330552113_1.jpg",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012080",
+            "case_take_id": "2310",
+            "report_id": "10010000012066",
+            "create_time_millis": "1481331858931",
+            "bug_category": "功能不完整",
+            "description": "无法取消",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/13/1481332422556_7.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/13/1481332411810_6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/14/1481332407557_5.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/16/1481332401349_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/16/1481332386385_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/18/1481332382908_1.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012089",
+            "case_take_id": "2310",
+            "report_id": "10010000012087",
+            "create_time_millis": "1481331997573",
+            "bug_category": "功能不完整",
+            "description": "1、如图4至图3,对一个人的留言评论成功后点击删除,如图2点击确定,但是评论无法删除。\n2、如图1对一个人点赞成功后再次点击点赞图标,但是无法取消点赞",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/06/33/1481332555575_6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/06/33/1481332551281_5.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/06/34/1481332549013_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/06/36/1481332540741_3.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012120",
+            "case_take_id": "2310",
+            "report_id": "10010000012118",
+            "create_time_millis": "1481332502704",
+            "bug_category": "功能不完整",
+            "description": "发送留言后无法对自己的留言进行编辑或者删除\n表情留有白色底纹(可能是后台的标签图片格式不是png导致原先透明背景被改成白色)",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/15/02/1481333085295_1.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012182",
+            "case_take_id": "2310",
+            "report_id": "10010000012180",
+            "create_time_millis": "1481333368767",
+            "bug_category": "用户体验",
+            "description": "如图1,页面缺少字数计算器,用户只有在提交的时候才会知道自己是否输入字符数超出500\n如图2再次点击我要评论,进入如图3页面,虽然可以编辑自己写过的上一份评论,但是任然显示为”提交“而不是”修改“,点击”提交“后的效果如图4,并不是新生产一份评价,而是在原有评价上修改",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/29/20/1481333898576_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/29/23/1481333906922_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/29/25/1481333925935_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/29/28/1481333930018_4.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012237",
+            "case_take_id": "2310",
+            "report_id": "10010000012232",
+            "create_time_millis": "1481334084025",
+            "bug_category": "功能不完整",
+            "description": "如图2,当把原来的”hhh“评价删除后,点击提交,提交成功,并且把原来的评价删除了",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/20/1481334621687_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/21/1481334626087_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/23/1481334629663_3.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012259",
+            "case_take_id": "2310",
+            "report_id": "10010000012252",
+            "create_time_millis": "1481334544428",
+            "bug_category": "功能不完整",
+            "description": "如图1-3,进行操作后图3的页面没有任何功能,而选择其他课程(如图4)则提供学习和更多 的功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/49/00/1481335040535_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/49/00/1481335046784_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/49/02/1481335055851_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/49/04/1481335085134_4.jpg",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012284",
+            "case_take_id": "2310",
+            "report_id": "10010000012282",
+            "create_time_millis": "1481335298130",
+            "bug_category": "功能不完整",
+            "description": "异常",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/01/36/1481335820489_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/01/37/1481335827223_2.jpg",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012294",
+            "case_take_id": "2310",
+            "report_id": "10010000012292",
+            "create_time_millis": "1481335702849",
+            "bug_category": "功能不完整",
+            "description": "输入框空白,点击提交,提示提交成功,但是实际并没有显示个人的评价",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/08/22/1481336273869_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_1210_4_end5d5d933934be25288c9e2af3e1b9ea92.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012110",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332423960",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n 1.手机号登录\n 2.点击课程\n 3进入英语界面\n 4.点击一个一个新闻英语的听力\n 5.添加课程\n 6.进入课程\n 7.点击进入第1课\n 9进行评论\n 10.点击删除button,删除评论\n 预期结果:\n   正常登录,进入课程,评论成功,删除成功\n 实际结果:\n   正常登录,进入课程,不可以成功",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/13/42/Screenshot_2016-12-10-08-14-34-764.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/13/43/Screenshot_2016-12-10-08-14-20-492.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012113",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332455522",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n1.手机号登录\n 2.点击课程\n 3进入英语界面\n 4.点击一个一个新闻英语的听力\n 5.添加课程\n 6.进入课程\n 7.点击进入第1课\n 9。进行点赞\n10 取消点赞\n    预期结果:\n   正常登录,进入课程,点赞成功\n 实际结果:\n   正常登录,进入课程,不可以取消点赞",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012119",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332489788",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n  1.手机号登录\n 2.点击课程\n 3进入英语界面\n 4.点击一个一个新闻英语的听力\n 5.添加课程\n 6.进入课程\n 7.点击进入《一口气英语》\n 8.点击学习\n 9.观看视频\n 预期结果:\n   正常观看\n  实际结果\n    网速很好,但是不可以播放;",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/49/Screenshot_2016-12-10-08-25-37-759.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/49/Screenshot_2016-12-10-08-25-34-228.png",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012126",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332536764",
+            "bug_category": "功能不完整",
+            "description": "步骤重现:\n     1.进入英语界面\n     2.点击发音的学习       \n     3.不听英语的发音,不进行播放,直接点击下一个,直到完成学习\n预期结果:\n      不进行播放,到最后一个,应该提示未完成\n 实际结果:\n       已经完成学习;",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/15/35/Screenshot_2016-12-10-08-41-37-518.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/15/36/Screenshot_2016-12-10-08-36-22-129.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012131",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332595495",
+            "bug_category": "用户体验",
+            "description": "步骤重现:\n 设计步骤:\n     1.进入英语界面;\n     2.添加一个音频的课程\n     3.进入学习页面,点击右上角\n     4.点击课程介绍\n             4.1进行分享到微信好友,朋友圈,新浪微博点击分享\n预期结果:\n       可以正常进入并分享成功\n实际结果:\n     微信好友,朋友圈,新浪微博点,分享出现黑屏,并且返回原来的界面",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/34/Screenshot_2016-12-10-08-54-47-169.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/35/Screenshot_2016-12-10-08-54-22-48.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012136",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332639879",
+            "bug_category": "不正常退出",
+            "description": "步骤重现:\n     1.进入英语界面\n     2.进入一个课程\n     3.点击学习;\n     4学习完毕后,进行练习。\n     5.全部答错\n      6.点击再来一遍\n   预期结果:\n    可以正常返回\n 实际结果:\n  出现黑屏",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/19/Screenshot_2016-12-10-09-03-44-599.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/19/Screenshot_2016-12-10-09-02-01-684.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012140",
+            "case_take_id": "2313",
+            "report_id": "10010000012106",
+            "create_time_millis": "1481332673797",
+            "bug_category": "功能不完整",
+            "description": "步骤重现:            \n 1.进入英语界面;\n     2.添加一个音频的课程\n     3.进入学习页面,点击右上角\n     \n     4.点击我要评价\n           4.1进行无星评价\n 预期结果:\n       可以正常评价;\n实际结果:\n     无星不可以评价",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/53/Screenshot_2016-12-10-09-00-10-119.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011962",
+            "case_take_id": "2287",
+            "report_id": "10010000011920",
+            "create_time_millis": "1481329324918",
+            "bug_category": "用户体验",
+            "description": "用户注册页面,注册用户时,没有确认密码功能。为避免注册时输错密码,建议添加确认密码功能。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/22/04/Screenshot_2016-12-10-08-19-45-984_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012130",
+            "case_take_id": "2287",
+            "report_id": "10010000011920",
+            "create_time_millis": "1481332595138",
+            "bug_category": "功能不完整",
+            "description": "按照人气排序功能异常:点击课程,英语,进入英语页面,在右下角点击人气按钮,课程没有按照人气排序,与需求不符。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/34/Screenshot_2016-12-10-09-11-26-739_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012145",
+            "case_take_id": "2287",
+            "report_id": "10010000011920",
+            "create_time_millis": "1481332710649",
+            "bug_category": "功能不完整",
+            "description": "按照评价排序功能异常:点击课程,英语,进入英语页面,在右下角点击评价按钮,课程没有按照评价排序,去截图,五星评价排在倒数第二位置,与需求不符。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/18/30/Screenshot_2016-12-10-09-11-17-370_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012154",
+            "case_take_id": "2287",
+            "report_id": "10010000011920",
+            "create_time_millis": "1481332908676",
+            "bug_category": "功能不完整",
+            "description": "按照人气排序功能异常:点击课程,英语,进入英语页面,在左上角点击类别按钮,课程没有按照类别正确筛选,如截图4左上角选择的类别为考研锦囊,筛选出来的为托福听力,与需求不符。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/21/47/Screenshot_2016-12-10-08-55-41-941_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/21/48/Screenshot_2016-12-10-08-54-49-638_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011981",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481329937994",
+            "bug_category": "页面布局缺陷",
+            "description": "点击课程>学习页面,左右滑动翻页,当向一边滑动两次或多次,再向反方向滑动时,不能马上往反方向滑动,需等到一个方向执行完毕后才能滑动。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/13/1481329734268_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/14/1481329717859_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/22/1481329734268_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/32/22/1481329717859_1.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012000",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481330273668",
+            "bug_category": "功能不完整",
+            "description": "添加英语课程之后,点击进入课程,课程学习>点击做题:快速做题以后,点击查看结果,等待结果提交之后,点击再来一次出现程序崩溃闪退。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/37/53/1481330136090_1.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012018",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481330842304",
+            "bug_category": "功能不完整",
+            "description": "点击课程学习之后,在右下角评论功能,点击进入评论之后提交评论,重新进入这门课程学习界面,右下角的评论数无更新,有时评论两个只加一次。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/47/18/1481330709150_5.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/47/19/1481330703942_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/47/20/1481330683291_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/47/21/1481330660033_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/47/22/1481330645051_1.jpg",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012060",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481331560975",
+            "bug_category": "功能不完整",
+            "description": "环境切换之后,导致登陆异常(加载超时)。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012098",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481332192890",
+            "bug_category": "功能不完整",
+            "description": "课程,查看更多,点击底部排序功能,人气和评价倒序排列功能未实现,人气,评论高的课程未排至前位。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/40/1481331987673_6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/41/1481331980196_5.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/42/1481331945328_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/44/1481331941845_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/47/1481331912467_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/49/1481331892490_1.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012127",
+            "case_take_id": "2301",
+            "report_id": "10010000011957",
+            "create_time_millis": "1481332571940",
+            "bug_category": "功能不完整",
+            "description": "英语课程>查看更多,点击右上角类型选择听力或泛听,进入课程学习,发现进入课程后获取不到数据,用户进行不了听力学习。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/08/1481332452326_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/09/1481332401772_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/10/1481332399751_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/11/1481332373814_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/02/1481332764615_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/04/1481332760715_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/05/1481332752130_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/06/1481332720671_1.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/40/1481332764615_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/42/1481332760715_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/43/1481332752130_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/20/44/1481332720671_1.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012005",
+            "case_take_id": "2300",
+            "report_id": "10010000011956",
+            "create_time_millis": "1481330471965",
+            "bug_category": "不正常退出",
+            "description": "点击沪江英语登录按钮,小概率出现闪退情况。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012008",
+            "case_take_id": "2300",
+            "report_id": "10010000011956",
+            "create_time_millis": "1481330566698",
+            "bug_category": "用户体验",
+            "description": "登陆后,在引导页中设置时无法返回上一层,对误操作的用户造成不便",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/42/19/S61210-083608.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/42/36/S61210-083601.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/42/46/S61210-083547.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012027",
+            "case_take_id": "2300",
+            "report_id": "10010000011956",
+            "create_time_millis": "1481331005481",
+            "bug_category": "不正常退出",
+            "description": "在引导页中,设置”想学哪门语言呢?“出现小概率闪退情况。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012212",
+            "case_take_id": "2300",
+            "report_id": "10010000012074",
+            "create_time_millis": "1481333792931",
+            "bug_category": "性能",
+            "description": "手机网络为联通4G,运行内存2G,在沪江英语打开页面,对课程进行筛选,排序,加在课程资源,平均响应时间为2-4秒,部分响应时间超过4秒。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012215",
+            "case_take_id": "2300",
+            "report_id": "10010000012074",
+            "create_time_millis": "1481333821531",
+            "bug_category": "功能不完整",
+            "description": "添加课程,下方有”进入课程“按钮,返回后再次点击已添加的课程,,下方“进入”课程按钮消失,功能不统一",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/36/56/S61210-093543.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/36/57/S61210-093535.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012278",
+            "case_take_id": "2300",
+            "report_id": "10010000012074",
+            "create_time_millis": "1481335083387",
+            "bug_category": "功能不完整",
+            "description": "在英语课程页面中,点击英语类型为”少儿英语“,课程中间的英语类型没有更改,仍为”英语“",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/58/03/S61210-095730.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012229",
+            "case_take_id": "2289",
+            "report_id": "10010000011922",
+            "create_time_millis": "1481334015612",
+            "bug_category": "用户体验",
+            "description": "用户注册时,填写合法的手机号,图片验证码输入框出现,当输入错误的验证码时,没有提示,要等密码输入合法,点注册才提示验证码输入错误,用输入验证码后进行提示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/40/15/S61210-084204.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012235",
+            "case_take_id": "2289",
+            "report_id": "10010000011922",
+            "create_time_millis": "1481334063227",
+            "bug_category": "功能不完整",
+            "description": "使用QQ授权登录时,出现错误",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/02/S61210-091407.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012238",
+            "case_take_id": "2289",
+            "report_id": "10010000011922",
+            "create_time_millis": "1481334099478",
+            "bug_category": "功能不完整",
+            "description": "使用微博授权登录时,出现错误",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/39/S61210-091400.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012247",
+            "case_take_id": "2289",
+            "report_id": "10010000011922",
+            "create_time_millis": "1481334304780",
+            "bug_category": "功能不完整",
+            "description": "进入课程页面,点击英语,点击人气按钮,发现不是按人气进行降序排列",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/45/04/S61210-094330.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012250",
+            "case_take_id": "2289",
+            "report_id": "10010000011922",
+            "create_time_millis": "1481334393246",
+            "bug_category": "功能不完整",
+            "description": "当进入课程界面,点击评价按钮,发现没有按评价降序排列",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/46/33/S61210-094344.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012017",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481330840645",
+            "bug_category": "功能不完整",
+            "description": "当手机号码已经注册后,想起用第三方登录,第三方登录中点击微信登陆不能使用,只会弹出一个界面然后闪退这个界面,回到第三方登录界面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084434_endad8da498d3c5df6056746101e42b099b.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012037",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481331196749",
+            "bug_category": "功能不完整",
+            "description": "利用第三方登录中QQ登录时不能正常登录,会产生登录失败提示,告诉用户这不是正版QQ。用户体验非常差。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084409_endcce8452168a7ee3d457435b38e15d609.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012048",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481331344521",
+            "bug_category": "用户体验",
+            "description": "当输入密码时,输入两个字符会产生不对应的提示,应当提示字符不符合要求,但它提示的是不能用纯数字或者纯字母,用户体验极为不好!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084244_endf743e794c82c251d16741f9277fb277e.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012055",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481331508365",
+            "bug_category": "页面布局缺陷",
+            "description": "界面当中的第三方登录提示字符太小,导致用户不能及时发现,从而进行了繁琐的注册,页面布局有缺陷,导致用户体验非常差!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084434_endad8da498d3c5df6056746101e42b099b.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084244_endf743e794c82c251d16741f9277fb277e.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012075",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481331747724",
+            "bug_category": "用户体验",
+            "description": "当进行第二次登录时,app给的默认用户名不是我的登录账号,输入正确密码也登录不进去!用户体验极为不好!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085958_endf99e0e74dc81862cd0fbaa91ef65019f.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012187",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481333456325",
+            "bug_category": "用户体验",
+            "description": "当进入英语界面,点击”人气“,”评价“,”时间“时,只能按照app默认的从上到下即从高人气到低人气,从好评价到差评价,从新发布到旧发布。非常不符合用户的使用习惯,不能进行高低的切换,用户体验极为不好。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091020_ende4367b87fa414e418ee1bd790753efbe.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012196",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481333552726",
+            "bug_category": "用户体验",
+            "description": "选择英语界面时,进行的跳转时间过长,用户体验极为不佳。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091006_end264261e5dd3160dff7d4bdd0f307d765.png",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012210",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481333752522",
+            "bug_category": "页面布局缺陷",
+            "description": "当选择了一门课程之后,进行添加课程,然后出现这个选择页面中的每天学习多少篇,布局极为不好,中间的数字都发生了变形,极为不美观,而且”学习“与”篇“中间的距离太大,不美观。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091924_endac53a6b17ffa229e0fae860a1dfef3b5.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012219",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481333861310",
+            "bug_category": "用户体验",
+            "description": "在英语页面中,没有搜索框,给用户的体验极为不佳,当用户有准确的学习方向,而不能直接搜索想要学习的方向,还只是进行选择,用户体验极为不佳。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091020_ende4367b87fa414e418ee1bd790753efbe.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012227",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481334001169",
+            "bug_category": "用户体验",
+            "description": "当选择课程后进行选择每天学习的篇数时,数字上下滑动进行选择,数字滑动的区域太小不能进行准确的滑动。用户体验极为不佳。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091924_endac53a6b17ffa229e0fae860a1dfef3b5.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012241",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481334131608",
+            "bug_category": "性能",
+            "description": "当进行课程学的时候,选择一个单元进行学习,而它得音频无法加载,无法进行学习,导致这个app的主要功能缺失,极为严重。性能极为不佳!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092013_endb3c9bd1f218909bc7d852772478a948d.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012248",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481334321280",
+            "bug_category": "用户体验",
+            "description": "在英语中选择一门科目进行了解时,课程介绍极为模糊,有些甚至没有课程介绍!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092152_endb560d622ac466a656aec2e2734a09fda.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_094346_endaacb6407d1602812052d250946f51e5c.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012253",
+            "case_take_id": "2308",
+            "report_id": "10010000011976",
+            "create_time_millis": "1481334484931",
+            "bug_category": "用户体验",
+            "description": "在学习时无法进行下载,收藏,分享,选择下一项,选择列表等操作,用户体验极为不好,这个界面直接没有任何作用!!!!",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092013_endb3c9bd1f218909bc7d852772478a948d.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011978",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481329861974",
+            "bug_category": "功能不完整",
+            "description": "在用户登录过程中,完成手机号注册时,在修改用户名称界面,用户输入过程中没有提示用户最多输入多少字符,并且没有提示用户名可输入什么类型的字符。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_082507_end0531340c57a07e927593d1526f6779ef.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012011",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481330610583",
+            "bug_category": "用户体验",
+            "description": "在引导页面过程中,仅是帮助用户进行选择语种与随机推荐了课程,并没有对软件做基本的概述与使用方法的介绍或者app特色的介绍,用户体验差,吸引用户使用兴趣低。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084008_end66d68a04e31564a38fa3cfdf46740e68.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012015",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481330682572",
+            "bug_category": "性能",
+            "description": "在网络稳定且手机状态正常的情况下,课程不能正常使用,图片不能正常加载。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_083338_endc1d511ead17f88277421f5d8728f81e6.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_083354_ende83a025bb96d76896059b12854e31ec3.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_083756_end6250a5ad428b42efcc99e431000abe69.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_083801_endd267a821ef22c6d1c5dad1b46a3663e3.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012020",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481330858875",
+            "bug_category": "用户体验",
+            "description": "用户使用第三方登录,不容易发现登录界面,用户体验差,并且多次点击都无反应,或者反应迟缓,功能缺陷明显。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084524_endaab751d5fa659666cb2279358e8404cf.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084531_end1ef3bfbd594071b83d4e2f67ed242c78.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012043",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481331298241",
+            "bug_category": "功能不完整",
+            "description": "用户使用第三方登录,使用微信登录直接闪退回到注册页面,qq、微博注册均不成功。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084806_end7ebddaf76d75d18ae06791b140a464fb.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084811_end5da556abeae2f314d4f1bf1c90949a87.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_084920_endbd5a86d32c0d5067be05f98fb003f7ad.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012058",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481331535844",
+            "bug_category": "用户体验",
+            "description": "在使用第三方邮箱登录过程中,输入邮箱等信息完成后,点击下方《沪江用户协议》查看浏览后返回,用户输入信息不存在,直接返回手机号注册,用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085107_enda65a3a59bd7261f8683c9125cea7fb4f.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085117_end1d9406e7869bbe49ef2db2dee34ccda8.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085119_ende830b72deed4f0cb17ef0009f276afc3.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012088",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481331986370",
+            "bug_category": "功能不完整",
+            "description": "用户忘记密码,进行忘记选择密码重置方式,点击微信按钮闪退,qq、微博功能均不能使用",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085720_end414f0348df7a1b822bbaf2be53461439.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085726_end2976edb645cc5b7c59de923a839c3b18.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_085737_endd940b287ec949de17c830cc57971af25.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012094",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481332146257",
+            "bug_category": "功能不完整",
+            "description": "在用户登录界面,用户使用邮箱注册后没有邮箱登录按钮,第三方登录,微博闪退,qq、微博登录未成功,功能不完整。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090051_endb5d30143c119dc75c9ed05f82b5a5e76.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090056_end971fd49cd4b2164be4ed2e231c44394d.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090103_end2aed4b75af000c8a1ec10d43cde52167.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012103",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481332316230",
+            "bug_category": "页面布局缺陷",
+            "description": "在使用手机快速登录过程,页面布局出现问题,上方出现多余留白,并且短信动态码不能正常输入,在回复出现键盘的过程中,下方闪现出启动页面的图案,在登录成功是,页面布局也存在上方留白情况,用户体验差",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090355_endc0c93dcbb5a39515c7f6a1e1158244a8.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090401_end02285baabd6131a9a71de035c0a8e15f.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_090406_end9acc369133ad5c519d4ff8678de21653.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012158",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481333014483",
+            "bug_category": "功能不完整",
+            "description": "在用户刷新课程界面时,上方滑动图片闪动,下方内容并没有修改",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091759_end5556a971db0a8ea76cbe5b92385f3ff1.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091820_end41057acfef49e2217b45c044714d157c.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_091825_endfa9a73a5fa39997533237a8f6cad225c.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012163",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481333115578",
+            "bug_category": "用户体验",
+            "description": "关键字搜索,搜索到的内容不符合用户需求,模糊搜索不准确。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092129_end5a536de004c884427515f14caf3ebb21.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092136_end953ec3b5a47a625873b93093ca6f7b05.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012214",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481333809787",
+            "bug_category": "功能不完整",
+            "description": "用户分享个人学习情况时,分享到微信、朋友圈、qq均不成功。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092906_enda55d156701b361c7ade6fdb8fbe00ce3.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092910_end6ec0774f16a156653a12cac9cfd919fa.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092912_end3a33232bfca258107b7189115636e4c8.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_092938_endeebeb736a3c318a44a2ef8519de972e4.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_093624_end279fd5ee622b2a1bfb838353839d072b.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012223",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481333956182",
+            "bug_category": "用户体验",
+            "description": "用户分享到微博,空间,qq的个人学习情况,在他人点击时,并未看到,而是让 他下载,用户体验不好",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_093624_end279fd5ee622b2a1bfb838353839d072b.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012239",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481334107442",
+            "bug_category": "用户体验",
+            "description": "在用户进行浏览课程时,并没有对课程进行更多的了解,只是出现目录和简要介绍,并且不能浏览课程,只能添加课程后才能进行学习。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_093949_end7a937f469ff28f1d2d844dea76ce8db3.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012246",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481334274294",
+            "bug_category": "用户体验",
+            "description": "用户在得知某一位老师课程讲述符合自己的要求时,自己在英语界面,没有搜索功能不易找到所需课程用户体验差",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_094307_end1c63eadd03750101dd3349a78a5171a8.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012256",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481334525836",
+            "bug_category": "用户体验",
+            "description": "app悬浮窗口,隐藏功能出现不明提示框,并且在隐藏后不能再找到重新出现,切换网络功能未实现。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_094526_end9c45eb807f95ce9597e2f3b0cc5d2bff.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_094540_end539af6c94164495cb95fdc38939bfaaa.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_094546_end4763afcf60f6a2d36e60ecbbbcc13ef7.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012272",
+            "case_take_id": "2293",
+            "report_id": "10010000011926",
+            "create_time_millis": "1481334934054",
+            "bug_category": "功能不完整",
+            "description": "在个人信息修改中,不能修改用户头像,微信绑定闪退,新浪账户绑定,qq账号绑定均不能使用。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_095152_endf52bf554f9f0a3f010d42d5c27f1113e.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_095158_endec16ce9fdf504584f98d89a91df06ffa.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_截屏_20161210_095206_end15aac7afbecfdc76799ad1a34413a7b4.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011979",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481329899840",
+            "bug_category": "性能",
+            "description": "当打开应用,进入沪江英语app时会出现白屏,卡屏现象,影响使用。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/31/39/Screenshot_2016-12-10-08-26-22.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/31/39/Screenshot_2016-12-10-08-25-46.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011988",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330044498",
+            "bug_category": "用户体验",
+            "description": "进入app选择注册时,发送验证码到手机,当手机接受验证码并填写时,出现卡屏现象,不停地转圈圈,影响用户体验。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/04/Screenshot_2016-12-10-08-27-20.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/04/Screenshot_2016-12-10-08-27-05.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012002",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330361168",
+            "bug_category": "安全",
+            "description": "当选择了注册时,会不经过用户同意直接发送验证码到手机,这影响了用户的使用安全问题。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/39/20/Screenshot_2016-12-10-08-36-46.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/39/20/Screenshot_2016-12-10-08-27-05.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012006",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330524079",
+            "bug_category": "不正常退出",
+            "description": "打开图库查看Bug截图,沪江英语app出现闪退现象,手机自动存了该日志。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012012",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330650205",
+            "bug_category": "功能不完整",
+            "description": "进入注册页面选择其他方式注册,当使用微信注册时,会出现一直转圈的现象,然后圈圈消失,无法进行微信注册。功能不完整。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/44/10/Screenshot_2016-12-10-08-28-06.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012016",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330763037",
+            "bug_category": "不正常退出",
+            "description": "在注册页面选择其他方式注册,使用QQ注册时,先出现转圈卡屏的现象,然后显示“注册失败”字样,不能使用QQ完成注册。属于功能不完整的Bug类别。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/46/02/Screenshot_2016-12-10-08-40-09.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/46/02/Screenshot_2016-12-10-08-39-55.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012024",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481330910835",
+            "bug_category": "用户体验",
+            "description": "注册完成后,进行登陆,登陆一直处于转圈卡屏中,大约3到5秒,影响用户体验。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/29/Screenshot_2016-12-10-08-47-18.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/30/Screenshot_2016-12-10-08-47-15.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/48/30/Screenshot_2016-12-10-08-46-40.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012046",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481331323520",
+            "bug_category": "功能不完整",
+            "description": "注册时输入不足要求的密码长度时,进行注册,提示不能是纯数字纯字母,与现实填写不相符,应提示密码不足以8位符号。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/23/Screenshot_2016-12-10-08-52-04.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/23/Screenshot_2016-12-10-08-50-56.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012049",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481331379268",
+            "bug_category": "功能不完整",
+            "description": "登陆时输入错误密码,会提示用户名密码不相符,不知道是用户名错误还是密码错误,应该提示的更详细一些。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/56/19/Screenshot_2016-12-10-08-52-43.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012067",
+            "case_take_id": "2307",
+            "report_id": "10010000011975",
+            "create_time_millis": "1481331641463",
+            "bug_category": "功能不完整",
+            "description": "在课程页面选择英语,进入后设置自己的要求,完成后查看文章,然后点击分享,使用微信分享会提示分享中,时间过长,然后又提示分享失败,不能完成分享,使用朋友圈分享也是会出现以上现象,截图如下。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/40/Screenshot_2016-12-10-08-58-13.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/40/Screenshot_2016-12-10-08-58-11.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/41/Screenshot_2016-12-10-08-58-02.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/00/41/Screenshot_2016-12-10-08-57-59.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012242",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334134368",
+            "bug_category": "不正常退出",
+            "description": "在首页面进行注册的时候,通过邮箱和手机分别注册测试,注册成功显示设置用户名界面时,界面无响应,并显示,闪退后将缓存存到某目录下。此BUG提示说明该版本注册成功阶段,有高频率的闪退情况。属于不正常退出的情况,复现程度为“大概率复现”。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210093942_endd2d9fbe0a4db89a1cbce4bf4af442e2a.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210093747_end5807f62878ecd16800c0e474a9860d70.jpg",
+            "severity": "5",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012249",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334370980",
+            "bug_category": "用户体验",
+            "description": "用户体验差:在选择喜欢的内容的时候,界面的十个类别区别很大,但是可以同时选中十个开始推荐课程,这是不合理的情况,应该会有提示,例如“亲,不能太贪心哦”。首先,用户不可能是十个方面都有需求的,从入门到深度学习,区别很大。此功能应该有做用户功能推荐,或者是智能推荐等。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210103302_end49c0b3f5d854ee114c430cec7af02254.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012257",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334527261",
+            "bug_category": "不正常退出",
+            "description": "用户点击主页面左下角“注册”按钮,跳转到注册界面\n,进行注册时,输入无效的邮箱地址,不存在的邮箱地址,也可以显示注册成功,这种不符合实际情况,会有用户恶意注册多个垃圾账号的情况。应该邮箱注册的时候,加入点击邮箱链接的功能。这样才可以保证账号的有效性和安全性。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210094625_endbafe270625334a3fdb0c83f7838633c6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210094630_end85d6a93bd8f22ee006a6784d307fb3f8.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012263",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334615403",
+            "bug_category": "用户体验",
+            "description": "用户体验差:在选择英语四六级体验课程时,每次进入的课程推荐都是相同的,同时对应的级别都是中高级和高级,但是对于中高级水平的同学其实很少会使用app来使用英语学习,更多的是四六级需要冲分过线的同学,所以这里应该也需要设置一部分初级的。(即使里面内容涉及的比较初级,但是这会给用户一种错觉,以至于要用户去课程中心去挑选,比较麻烦)",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210103443_endbb5e15380b814a5af24990b7d3cd2e83.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012265",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334726535",
+            "bug_category": "不正常退出",
+            "description": "每次点击选择课程,然后退出后,在当前页面的最下边都会有个弹窗显示“签到失败哦”这个提示。这个提示应该是在用户每天登陆之后显示一次签到成功或者失败,而不应该是每次退出都会显示。这种情况应该是app的不正常退出,总会有错误提示。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210095012_end91b38c95cdf9c3285cee923302d99bb7.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012271",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481334897094",
+            "bug_category": "功能不完整",
+            "description": "用户在同一台手机注册新的账号之后,进行登录完毕,也会显示“签到失败”的提示。应该是用户在同一台手机上进行签到,也会签到成功,签到成功应该是根据不同用户账号来统计的,而不是因为在一台手机上,这种情况有bug。复现成都为必现。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210095313_end0c4807101e9f0bca59b7b225d58552be.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012277",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335046324",
+            "bug_category": "功能不完整",
+            "description": "功能不完善:用户不能同时在难度类别里选择两个难度,例如,不能同时选择中级和中高级。因为用户可能对自己的情况了解不是很清楚,不会很明确的判断自己适合的难易等级,所以这个情况用户可能会偏向于选择多个难度,多种选择,会显得功能更加完整,复现程度为必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210095717_end4c4ae49e868e5191c0070f0506ff32a6.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012281",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335192667",
+            "bug_category": "用户体验",
+            "description": "用户体验差:在选择课程界面时,按照人气、评价、时间排序的顺序,触点不够灵敏,按钮不够灵敏,有时需要多按几下,所以用户有时单手操作时造成不便。复现程度为小概率复现,严重等级为一般。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210095945_endca623203c8ce3b844cfa8f004a05f6ac.jpg",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012283",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335297374",
+            "bug_category": "功能不完整",
+            "description": "进入英语界面的时候,清单下方虽然有人气时间评价的排序,但针对人气进行排续的时候并不是按照这些排序的。是功能不完整的情况,复现程度为必现,严重等级为紧急。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100057_end1dc1b7fd1d2dba14ea97ab5d59a3f0e0.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012285",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335402274",
+            "bug_category": "用户体验",
+            "description": "用户体验差:进入英语界面的时候,括号里的(评价人数)感觉作用不大,很少有人想在列表的信息里看到这个作用不大的东西,第一眼看上去也会产生意义不明的感觉,一般换成课程数有多少才比较合理。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100309_end1bfa2fe7ef17f7c2559958778f37ff11.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100307_end017b00d171ef1cc82a75eaefb2759b15.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012288",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335517891",
+            "bug_category": "用户体验",
+            "description": "用户体验差:在进入学习时,从下一单元跳转回上一单元的时候,直接跳转到上一单元的第一个页面,而不是上一单元的最后一个页面,这会给用户一种不连贯的感觉。并且在单元间滑动界面时,几乎需要横向滑动满一整个屏幕才能跳转,同时在滑动过头的时候,甚至还会导致轻微的卡顿,十分不方便。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100504_endee06416fcb33826cf97089c3a6303bcf.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100507_endefe1d6a0ecf6b503b1b3a96a2929dd7f.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012295",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335740465",
+            "bug_category": "性能",
+            "description": "体验不够流畅,加载速度比较慢,在网络畅通的情况下经常出现加载错误的情况。但是自身网络良好,导致经常需要刷新才可以完成听力的情况。属于性能不太好的方面,复现程度为必现,严重等级为紧急。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100724_end5ae423b35977003efb1826f11125bc20.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012301",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481335850345",
+            "bug_category": "功能不完整",
+            "description": "如果用户遇到自己喜欢的课程,想要分享给其他人,在这类界面上无法下载收藏和分享。属于功能不完整的情况,用户无法将自己的感受和喜欢的东西推荐给他人。复现程度为必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100947_end5abf317b989f0670edb830e1bb5d87ff.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012308",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336087045",
+            "bug_category": "用户体验",
+            "description": "用户进行分享某个课程时,比如分享到qq,出来的只是链接,没有一点文字叙述,比如我看见一个很好的英语课程,分享给你,使得被分享的用户不明所以,属于用户体验不好。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210101400_end33f84f3546878807805a6eb0e20e61f8.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012317",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336361298",
+            "bug_category": "功能不完整",
+            "description": "功能不太完整,不能够缓存学习,没有单词本,生词也没有音标,收藏的东西很难被找到。属于功能不完整的情况,复现程度为必现,严重等级为严重。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210101821_endaf5225069a7a99b88dd6c382090d0238.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012325",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336605882",
+            "bug_category": "功能不完整",
+            "description": "用户使用qq、微信、微博是没法授权登陆的,只能选择注册登陆,或者直接登陆(我有账号的情况下),属于功能不完整。\n\n账号进行登陆的时候,",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210102318_end67ea446e9951c2448f520485ffb70b67.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012330",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336748692",
+            "bug_category": "安全",
+            "description": "安全性差:在用户没有进行课程学习的时候,也能对课程进行评价,这样容易造成恶意评价,从而导致社交系统的垃圾内容过多难以管理。此处应该设置进行了学习之后再进行评论。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210100307_end017b00d171ef1cc82a75eaefb2759b15.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012335",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336855713",
+            "bug_category": "用户体验",
+            "description": "用户体验差:课时学习上面的系统默认配图,连续的课程应该设置不一样的配图,否则会导致用户视觉疲劳。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210102725_end3cc4eb270a9198b5b5ae02a3b7ab4808.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012337",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481336928484",
+            "bug_category": "安全",
+            "description": "安全性差:整个课程学习过程中的评价体系和评论体系,都是可以无限制进行的,也就是说不需要任何学习动作的前置,就可以进行评价和评论的动作操作,会导致两种结果,1、官方运营商,刷良好评论,刷高星评价,给用户误导,导致用户无法对该课程做出比较正确的评判,2、恶意评价过多,导致评价系统崩溃,没有任何作用。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210102835_end12d287d7525b815ee8274f27f7d4f722.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012338",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481337006645",
+            "bug_category": "功能不完整",
+            "description": "功能不完善:在进行文字课程学习的时候,每张图片重新出现时,都会重新加载,会使得内存小的手机产生卡顿,每次都会进行重新加载,会让用户阅读不方便,同时也会增加用户的流量消耗,这里应该在每次阅读完成之前,都加载到本地,在阅读结束之后可以系统自动删除缓存或者用户手动删除。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210102959_endd8c309259a0a8c4635402613764cd4c1.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012339",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481337102579",
+            "bug_category": "功能不完整",
+            "description": "点击下一题按钮时 经常会出现页面的随意跳转  做完之后 点击查看结果  结果上传速度慢 还容易随意跳转回初始的页面  导致完成失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210103136_end3251319177c1ed4a4487ec332444a0c8.jpg",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012359",
+            "case_take_id": "2299",
+            "report_id": "10010000011955",
+            "create_time_millis": "1481337752810",
+            "bug_category": "功能不完整",
+            "description": "用户在进行注册时,只让输入一遍密码,没有确认密码,此时容易输入错误,导入密码错误。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210093942_endd2d9fbe0a4db89a1cbce4bf4af442e2a.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011969",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481329439843",
+            "bug_category": "用户体验",
+            "description": "点击注册登陆按钮下方的,“先试用一下”标题后,进行软件试用,试用结束后应该返回到注册登录界面的初始页面,可是此处直接跳转到进去软件的首页。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/34/08/Screenshot_2016-12-10-08-31-12_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011970",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481329439843",
+            "bug_category": "用户体验",
+            "description": "点击注册登陆按钮下方的,“先试用一下”标题反应时间较长",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/30/39/Screenshot_2016-12-10-08-20-58_com.hujiang.normandy.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011999",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481330254779",
+            "bug_category": "用户体验",
+            "description": "进行注册时,输入验证码没有提示不区分大小写。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/37/34/Screenshot_2016-12-10-08-36-37_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012003",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481330413415",
+            "bug_category": "用户体验",
+            "description": "通过手机快速登录方式进行登录,发送手机验证码后登录时,本来快速登录是为了快捷方便,首次登录还需设置密码,用户体验不佳。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/41/22/Screenshot_2016-12-10-08-38-45_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012014",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481330681155",
+            "bug_category": "功能不完整",
+            "description": "手机快速登录方式登录,获取验证码60秒内均有效,动态获取动态码后,输入动态码,不直接登录,点击返回,在重新进入手机快速登录页面,刚才填写的信息还在,此时点击登录,验证码还在有效期内,点击登录后页面中间的字符验证码会变,与之前输入不符,可是手机动态码正确,此时提示动态码输入错误,可是动态码是正确的。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/46/58/Screenshot_2016-12-10-08-38-56_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012038",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481331235550",
+            "bug_category": "用户体验",
+            "description": "刚登录上去,还未做任何任务,显示签到一天。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/53/54/Screenshot_2016-12-10-08-50-10_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012042",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481331295934",
+            "bug_category": "功能不完整",
+            "description": "登录上去应该跳转到课程首页,这里跳转到“我的”个人信息页面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/55/36/Screenshot_2016-12-10-08-53-50_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012081",
+            "case_take_id": "2292",
+            "report_id": "10010000012073",
+            "create_time_millis": "1481331863355",
+            "bug_category": "功能不完整",
+            "description": "跳转到课程页面,英语图标和综合图标,沪江图标未正常显示,无法显示,下拉页面显示后。页面排布如下图。无线网络不佳,换用4 G流量刷新后也没有出现图标。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/04/23/Screenshot_2016-12-10-08-56-50_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012091",
+            "case_take_id": "2292",
+            "report_id": "10010000012073",
+            "create_time_millis": "1481332083629",
+            "bug_category": "用户体验",
+            "description": "刚才操作时,网络不佳,但是再刷新时若是因为网络原因刷新不出来课程-英语的图标,也没有相关提示,如“网络异常。”",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012132",
+            "case_take_id": "2292",
+            "report_id": "10010000012111",
+            "create_time_millis": "1481332603198",
+            "bug_category": "用户体验",
+            "description": "在英语-英语考试,选择四六级或其他老师项目,在页面右上角为,按难度和按等级排列,没有按时间排列。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/22/Screenshot_2016-12-10-09-09-58_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/16/43/Screenshot_2016-12-10-09-09-46_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012153",
+            "case_take_id": "2292",
+            "report_id": "10010000012111",
+            "create_time_millis": "1481332884929",
+            "bug_category": "用户体验",
+            "description": "课程-英语-英语考试-大学四六-评论,在评论区只能进行个人评论,不能对评论进行回复,与添加过课程的人进行交流。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/23/45/Screenshot_2016-12-10-09-19-35_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/23/45/Screenshot_2016-12-10-09-09-58_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/23/56/Screenshot_2016-12-10-09-19-35_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/23/56/Screenshot_2016-12-10-09-09-58_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012170",
+            "case_take_id": "2292",
+            "report_id": "10010000012111",
+            "create_time_millis": "1481333200493",
+            "bug_category": "用户体验",
+            "description": "课程-英语-英语考试-大学四六,选择相关考试后,页面上方的选择菜单不能通过向上滑动收回。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/26/40/Screenshot_2016-12-10-09-20-26_com.hujiang.normandy.png",
+            "severity": "1",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012185",
+            "case_take_id": "2292",
+            "report_id": "10010000012111",
+            "create_time_millis": "1481333426140",
+            "bug_category": "用户体验",
+            "description": "课程-英语-英语考试-大学四六,选择相关考试后,选择页面下方按人气,页面反应时间较长。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/30/26/Screenshot_2016-12-10-09-26-54_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012222",
+            "case_take_id": "2292",
+            "report_id": "10010000012111",
+            "create_time_millis": "1481333918535",
+            "bug_category": "用户体验",
+            "description": "课程-英语-英语考试-大学四六,任意选择相关考试后并点击进入,没有评论或评论不够不能显示评分,具体没有提示达到几条评论后可以显示相关信息,影响课程排名,有的人想添加此课程,对课程不了解,只能通过此处了解",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/39/59/Screenshot_2016-12-10-09-35-03_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/40/00/Screenshot_2016-12-10-09-34-20_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012343",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481337200742",
+            "bug_category": "功能不完整",
+            "description": "登录时,已经注册账号,但继续选用试用账号登录,如果在个人主页-设置想退出试用账号,没有退出,直接为注册,此时只需要登录,不需要注册。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/33/20/Screenshot_2016-12-10-10-30-34_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/33/31/Screenshot_2016-12-10-10-30-34_com.hujiang.normandy.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012346",
+            "case_take_id": "2292",
+            "report_id": "10010000011925",
+            "create_time_millis": "1481337376949",
+            "bug_category": "功能不完整",
+            "description": "登陆时,选用手机号快速登录,登录成功后,点击用户头像-我的账号,默认显示其他登录方式未绑定,点击任意一个登录方式,如qq,若没有绑定应该跳转到绑定的相关页面,这里是转到其他社交软件登录授权登录页面而且登陆失败,点击微信没有反应,qq,微博均失败。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/38/47/Screenshot_2016-12-10-10-35-14_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/24/Screenshot_2016-12-10-10-39-20_com.tencent.mobileqq.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/29/Screenshot_2016-12-10-10-39-13_com.sina.weibo.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/40/33/Screenshot_2016-12-10-10-35-14_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000011965",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481329423220",
+            "bug_category": "其他",
+            "description": "问题描述:注册界面密码不满足条件时提示不统一\n前置条件:手机号和验证码已输入正确\n步骤:\n1.密码处输入1\n2.点击登录\n3.密码处输入a\n4.点击登录\n5.密码处输入特殊字符@\n6.点击登录\n\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/23/42/S61210-082050.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/23/42/S61210-082041.jpg",
+            "severity": "2",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012059",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481331545675",
+            "bug_category": "其他",
+            "description": "问题描述:使用未被注册邮箱注册提示邮箱已被注册\n前置条件:已进入邮箱注册界面\n步骤:\n1.输入邮箱1107031157@qq.com\n2.输入验证码\n3.输入密码12345678a\n4.点击注册\n预期结果:\n1.邮箱输入并显示\n2.验证码输入并显示\n3.密码输入并加密显示\n4.注册成功\n实际结果:\n1.邮箱输入并显示\n2.验证码输入并显示\n3.密码输入并加密显示\n4.提示邮箱已存在",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/59/05/S61210-085333.jpg",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012077",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481331801435",
+            "bug_category": "其他",
+            "description": "问题描述:随意输入的20个字母用户名提示用户名不可以包含敏感词汇\n步骤:已进入注册最后设置用户名界面\n步骤:\n1.随意输入20个字母\n2.点击确定\n预期结果:\n1.字母输入并显示\n2.注册成功\n实际结果:\n1.字母输入并显示\n2.提示用户名不可以包含敏感词汇\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/03/20/S61210-090026.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/03/21/S61210-085936.jpg",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012137",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481332646523",
+            "bug_category": "其他",
+            "description": "问题描述:通过登录界面试用一下进入后用面包条中登录无效\n前置条件:已通过登录界面试用一下登录,且面包条已打开\n步骤:\n1.点击登录\n预期结果:\n1.跳转到登录界面\n实际结果:\n1.无响应",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/17/26/S61210-090633.jpg",
+            "severity": "4",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012174",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481333234815",
+            "bug_category": "其他",
+            "description": "问题描述:已添加课程分享到微信提示没有安装客户端(分享到朋友圈也出现相同情况)\n前置条件:课程已添加,且分享栏已打开\n步骤:\n1.点击分享到微信\n预期结果:\n1.分享成功\n实际结果:\n1.提示没有安装客户端\n",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/27/14/S61210-092457.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012193",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481333529173",
+            "bug_category": "不正常退出",
+            "description": "问题描述:做习题最后结果页面点击再来一遍闪退\n前置条件:已进入做习题结果页面\n步骤:\n1.点击再来一遍\n预期结果:\n1.习题重新打开\n实际结果:\n1.闪退报错",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/32/09/S61210-093007.jpg",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012213",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481333801999",
+            "bug_category": "其他",
+            "description": "问题描述:分享课程到微博失败\n前置条件:分享列表已打开\n步骤:\n1.点击微博\n预期结果:\n1.分享成功\n实际结果:\n1.分享失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/36/41/S61210-093519.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012240",
+            "case_take_id": "2288",
+            "report_id": "10010000011921",
+            "create_time_millis": "1481334107532",
+            "bug_category": "其他",
+            "description": "问题描述:登录界面使用第三方账号登录都失败\n前置条件:已近入登录界面\n步骤:\n1.点击QQ\n预期结果:\n1.登录成功\n实际结果:\n1.登录失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/46/S61210-093946.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/41/47/S61210-093938.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012041",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481331291830",
+            "bug_category": "用户体验",
+            "description": "添加课程后选择篇数建议能循环滚动,比如1向下划到20,20向上划到1",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/00/54/49/Screenshot_2016-12-10-08-52-32-321_com.hujiang.normandy.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/00/54/51/Screenshot_2016-12-10-08-52-22-171_com.hujiang.normandy.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012268",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481334832194",
+            "bug_category": "功能不完整",
+            "description": "课程类型听写页面加载不出来",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/53/50/Screenshot_2016-12-10-09-52-09.png;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/53/51/Screenshot_2016-12-10-09-51-50.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012273",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481334972051",
+            "bug_category": "功能不完整",
+            "description": "英语课程听写页面按钮没实现",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/56/11/Screenshot_2016-12-10-09-55-20.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012279",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481335121140",
+            "bug_category": "用户体验",
+            "description": "英语课程列表建议增加在顶部下滑刷新课程功能",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/58/40/Screenshot_2016-12-10-09-57-25.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012289",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481335548148",
+            "bug_category": "功能不完整",
+            "description": "课程分享给微信好友失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/05/47/Screenshot_2016-12-10-10-04-05-117_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012291",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481335594589",
+            "bug_category": "功能不完整",
+            "description": "课程分享到朋友圈失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/06/34/Screenshot_2016-12-10-10-03-56-057_com.hujiang.normandy.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012299",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481335807189",
+            "bug_category": "功能不完整",
+            "description": "英语课程中泛听类型课程,点击进去课程,页面不能加载",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/10/06/Screenshot_2016-12-10-10-08-11-068_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012302",
+            "case_take_id": "2311",
+            "report_id": "10010000012034",
+            "create_time_millis": "1481335860190",
+            "bug_category": "功能不完整",
+            "description": "英语课程中泛听课程进去页面后,各按钮功能没有实现",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/10/59/Screenshot_2016-12-10-10-08-11-068_com.hujiang.normandy.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012026",
+            "case_take_id": "2291",
+            "report_id": "10010000011924",
+            "create_time_millis": "1481330952560",
+            "bug_category": "用户体验",
+            "description": "在英语界面中,选择展示全部英语后,再选择其他分项,此时再点回全部英语,全部英语下只有一个分项,也就是说,我点击全部英语需要点击两下(可以做到点击一下的操作)",
+            "img_url": "",
+            "severity": "1",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012085",
+            "case_take_id": "2291",
+            "report_id": "10010000011924",
+            "create_time_millis": "1481331946190",
+            "bug_category": "用户体验",
+            "description": "进入英语界面之后,默认人气排序点击全部英语,难度选择高级,类型选择听写。此时可以发现类表中只有三个选择项。\n此时关掉网络,点击评价、时间中任意一项排序,发现需要网络不给力,重新加载。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/13/S61210-091226.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/14/47/S61210-091211.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012173",
+            "case_take_id": "2291",
+            "report_id": "10010000011924",
+            "create_time_millis": "1481333234154",
+            "bug_category": "功能不完整",
+            "description": "建议加上直达底部按钮,有时候数据过多,想要找到最后一项比较不方便。",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012178",
+            "case_take_id": "2291",
+            "report_id": "10010000011924",
+            "create_time_millis": "1481333304694",
+            "bug_category": "用户体验",
+            "description": "排序方式可以加上正反序进行排序,一个功能键完成2种功能",
+            "img_url": "",
+            "severity": "1",
+            "recurrent": "1",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012181",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333364050",
+            "bug_category": "性能",
+            "description": "使用qq登录沪江英语时提示登入失败,提示应用非官方正式版",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-08-00-56_end5505331b7231421553db728a4b1db4cd.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012186",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333441555",
+            "bug_category": "功能不完整",
+            "description": "使用微信登录时直接提示登入失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-09-40-00-39_end4c899420b29efd1ea4f8fa0adb59c084.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012191",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333505250",
+            "bug_category": "功能不完整",
+            "description": "进行课程分享时,微信课程分享失败",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-08-54-40-19_end2d9e3884a714bb9a3a52d99aa13e642f.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012201",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333635313",
+            "bug_category": "用户体验",
+            "description": "在课程选择页,选择按人气筛选, 置顶课程非人气最高课程",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_QQ图片20161210094256_enda65ab7ede9ab2fd0d07cbffa48cd4643.jpg",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012204",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333685253",
+            "bug_category": "其他",
+            "description": "在wifi、4G网络下课程无法加载",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-09-45-04-40_end79394d66074b041fa883241333c3f54d.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012206",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333714032",
+            "bug_category": "其他",
+            "description": "无法收藏课程章节",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-09-45-04-40_enddfd9c49daad9dfe6068089f363686495.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012208",
+            "case_take_id": "2317",
+            "report_id": "10010000012159",
+            "create_time_millis": "1481333745846",
+            "bug_category": "其他",
+            "description": "无法分享课程章节",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/upload_Screenshot_2016-12-10-09-45-04-40_end3dc209bec9fabf149bfb41c0089acc79.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012072",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481331683968",
+            "bug_category": "功能不完整",
+            "description": "英语课程界面按人气排序,按评价排序和按时间排序都语法选择是递增排序或递减排序。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/01/23/1481331671293_1.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012093",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481332141227",
+            "bug_category": "用户体验",
+            "description": "在HTC ONE (安卓5.0.2)设备上分享课程给微信好友,在已打开并登陆微信的情况下,多次尝试全部提示分享失败。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/08/59/1481331992473_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/09/00/1481332122148_5.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012122",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481332517212",
+            "bug_category": "用户体验",
+            "description": "在HTC ONE (安卓5.0.2)上分享课程到微信朋友圈,已提前登陆并打开微信的情况下多次尝试均提示失败。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/15/16/1481332380903_7.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012149",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481332832997",
+            "bug_category": "用户体验",
+            "description": "在课程学习界面,选择更多按钮时,出现的并非当前课程的更多信息,或与当前课程相关的信息,而是出现另一门与当前课程没有直接关联的课程信息。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012175",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481333248242",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面,复制已输入的表情,再粘贴到输入框之后,输入框显示的不是表情而是表情代码。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/27/35/1481333242277_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/28/48/1481333242277_2.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012183",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481333403731",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面输入大量表情之后,点击发送按钮,没有任何错误过成功提示,评价发送失败。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/30/02/1481333321876_4.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/30/03/1481333317559_3.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012192",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481333509055",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面,输入框中输入大量表情之后,点击输入框右侧清除按钮,无法清除输入框中的数据,旭多次点击之后才可清除。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012203",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481333668601",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面,,输入框中输入大量文字之后,点击发送按钮,只有短暂加载提示,没有任何发送成功或失败的提示,并且评价最终没有发送成功。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/34/28/1481333651424_5.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012220",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481333900266",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面,点击某个评价进行回复时,输入框出现的“回复xxx”可逐字删除,不能整体删除,并且删除任意个字符后该文本仍然是浅色显示并且仍然可作为评价发送,这可能导致用户无意删除某个字符后仍然发送以后,并没有起到回复的作用。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/38/09/1481333721639_7.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/38/17/1481333715303_6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/38/19/1481333721639_7.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012234",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481334057716",
+            "bug_category": "用户体验",
+            "description": "在评价课程界面,点赞某用户的评价之后,再次点击点赞按钮,仍然会出现加载提示,但无法再次点赞,也无法取消点赞。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/40/57/1481334041535_9.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012243",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481334220439",
+            "bug_category": "用户体验",
+            "description": "在首次添加课程并制定计划之后,再次进入课程,并进入制定计划页面,显示的每天学习篇数的数值仍然是默认的1,而不是用户首次添加课程制定计划时的数值。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/43/40/1481334088433_10.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/44/23/1481334088433_10.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012251",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481334428188",
+            "bug_category": "用户体验",
+            "description": "首次添加课程时,进入制定计划页面,显示的每天学习的篇数即是该课程的总篇数。为保证学习质量,应对每天学习篇数进行一定限制。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/47/07/1481334242603_11.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012264",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481334636395",
+            "bug_category": "用户体验",
+            "description": "添加某课程并学习几节课之后,点击退订课程,然后再次添加该课程,结果是没有是否重新学习的提示,而是直接进入该课程,并且保留了上一次添加课程时的学习进度。如果是用户退订课程很久之后再重新添加该课程,那么就需要重头学习,所以退订某一课程之后重新添加时,应提示是否重头学习。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012316",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481336346898",
+            "bug_category": "用户体验",
+            "description": "在英语课程界面,按评价排序时,评价人数不足无法显示分数的课程也参与了评价,这导致少数初始分数较高的课程过只有少数几个人评价了的课程都可以排在列表前列。这影响了排序公平。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/02/19/03/1481336030766_13.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/02/19/06/1481336027702_12.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012322",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481336472318",
+            "bug_category": "用户体验",
+            "description": "添加课程后,没有学习即可评价课程,这会导致一些刷分现象么出现。",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012334",
+            "case_take_id": "2302",
+            "report_id": "10010000011961",
+            "create_time_millis": "1481336835646",
+            "bug_category": "用户体验",
+            "description": "在英语课程界面,按人气排序时,并非按照学习人数排序,也不是按照评价人数排序。排序方式不明。",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012157",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481332981561",
+            "bug_category": "用户体验",
+            "description": "用一个未存在的用户帐号登录,系统只是提示用户名密码不匹配,而没有提示该用户未注册并跳转到注册页面,导致用户一直在修改用户名或者密码,而不是去注册页面,浪费时间。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/23/01/1481329069160_1.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012162",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333071065",
+            "bug_category": "功能不完整",
+            "description": "进行登录时,如果用户名或者密码没有填写,系统只是提示用户名或者密码不能为空,并没有重新聚焦到信息为空的那一栏。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/30/1481330132739_3.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/24/30/1481329476241_2.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/27/10/1481329476241_2.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012169",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333196800",
+            "bug_category": "用户体验",
+            "description": "在手机快速登录页面,只能按顺序从上到下填写信息,有的用户习惯是先获取手机动态码,再填写验证码,在这个应用里只能先填写验证码,没有灵活性。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/26/36/1481330132739_3.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012179",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333327488",
+            "bug_category": "其他",
+            "description": "手机快速登录页面,及时手机动态码超时填写也能正常登录。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/28/46/1481330539174_6.jpg;http://kikbug-test.b0.upaiyun.com/2016/12/10/01/28/47/1481330402359_4.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012188",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333460793",
+            "bug_category": "功能不完整",
+            "description": "注册时,用一个已经注册过的手机号去注册,在填写手机号一栏的最右边仍然有一个绿色的对勾表示该手机号可用,在相关信息都填写之后,点击注册按钮才提示该帐号已存在。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/31/00/1481331251917_8.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012195",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333551914",
+            "bug_category": "功能不完整",
+            "description": "在课程页面,选择一个课程后,在该课程的详细页面,最下面一栏显示课程的推荐是根据人气、评价、时间等,但是这个顺序是系统默认的,用户不能自己更改。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/32/31/1481331400084_9.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012200",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333624273",
+            "bug_category": "功能不完整",
+            "description": "在课程页面最上面一栏搜索自己想要的课程,系统不能根据用户输入的信息自动弹出匹配推荐。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/33/43/1481331713789_10.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012209",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333752080",
+            "bug_category": "页面布局缺陷",
+            "description": "在英语课程按人气排列的列表里,可以看出排在最前面的基本都是有星级的,但是列表中的第四个课程“迷你小对话”,没有任何相关的等级信息,仍然被推荐在了最前面。",
+            "img_url": "http://kikbug-test.b0.upaiyun.com/2016/12/10/01/35/51/1481331943657_11.jpg",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "217",
+            "id": "10010000012216",
+            "case_take_id": "2316",
+            "report_id": "10010000012151",
+            "create_time_millis": "1481333824779",
+            "bug_category": "功能不完整",
+            "description": "在课程页面,不能通过左右滑动在“我的”、“课程”、“社团”三个页面直接进行切换。",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "218",
+            "id": "10010000012341",
+            "case_take_id": "2346",
+            "report_id": "10010000012340",
+            "create_time_millis": "1481337158900",
+            "bug_category": "功能不完整",
+            "description": "输入框空白,点击提交,提示提交成功,但是实际并没有显示个人的评价",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "218",
+            "id": "10010000012266",
+            "case_take_id": "2322",
+            "report_id": "10010000012255",
+            "create_time_millis": "1481334798920",
+            "bug_category": "用户体验",
+            "description": "点击注册登录按钮下方的“先试用一下”标题反应时间较长",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "case_id": "218",
+            "id": "10010000012557",
+            "case_take_id": "2327",
+            "report_id": "10010000012290",
+            "create_time_millis": "1481341622101",
+            "bug_category": "用户体验",
+            "description": "整个软件的输入法无法启动,无法输入数据",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        }
+    ]
+}

Fichier diff supprimé car celui-ci est trop grand
+ 14 - 0
data/2017移动应用决赛.json


+ 2416 - 0
data/2018移动应用决赛.json

@@ -0,0 +1,2416 @@
+{
+    "RECORDS": [
+        {
+            "id": "10010000034774",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542414385438",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"进入热门搜索品类-国际酒店页面后,点按系统返回按键,应用无响应,不能正常返回\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414359962/1542414359962_Screenshot_2018-11-17-08-22-23-552_com.lbe.security.miui.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034800",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542414618315",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"热门搜索品类中的部分页面在断网时显示系统自带错误信息,其他页面显示途牛错误信息,不一致且不友好\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034826",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542414955681",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"在未联网状态下,\\u201c我的\\u201d模块中\\u201c推荐有礼\\u201d模块页面显示为系统错误提示,用户体验不佳。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414951368/1542414951368_Screenshot_2018-11-17-08-32-18-743_com.tuniu.app.ui.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034853",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542415224378",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"非星级会员提示无法邀请好友,但仍然能选择推荐方式二,填写好友信息后,点击立即推荐,总是提示填写邀请人信息失败。星级会员则能正常提交。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415207095/1542415207095_Screenshot_2018-11-17-08-39-00-454_com.tuniu.app.ui.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415212152/1542415212152_Screenshot_2018-11-17-08-38-19-297_com.tuniu.app.ui.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034890",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542415642772",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索\\u201c测试\\u201d等关键词,联想结果中包含测试数据,未及时清除\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415625735/1542415625735_Screenshot_2018-11-17-08-45-11-910_com.tuniu.app.ui.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415632282/1542415632282_Screenshot_2018-11-17-08-45-05-585_com.tuniu.app.ui.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415637299/1542415637299_Screenshot_2018-11-17-08-46-02-060_com.tuniu.app.ui.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034919",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542416042391",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索结果中的详情页面正在加载时缺少加载提示信息,而是显示禁用的预订按钮,用户体验不佳\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416001378/1542416001378_Screenshot_2018-11-17-08-50-53-902_com.tuniu.app.ui.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416036216/1542416036216_Screenshot_2018-11-17-08-53-38-707_com.tuniu.app.ui.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034935",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542416314554",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"详情页面的部分优惠券领取成功,部分领取失败,但领取失败时未给出合理的原因提示,且多次重试仍然失败\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416256132/1542416256132_Screenshot_2018-11-17-08-55-28-123_com.tuniu.app.ui.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416273337/1542416273337_Screenshot_2018-11-17-08-55-33-615_com.tuniu.app.ui.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034944",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542416468136",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"未联网时用户协议无法打开,显示系统错误提示\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416461104/1542416461104_Screenshot_2018-11-17-08-07-44-076_com.tuniu.app.ui.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034989",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542417313568",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"未安装微信时,点击邀请砍价页面中的\\u201c朋友圈求扩散\\u201d按钮无任何提示信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417307236/1542417307236_Screenshot_2018-11-17-09-11-34-772_com.tuniu.app.ui.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034997",
+            "case_take_id": "13770",
+            "report_id": "10010000034662",
+            "create_time_millis": "1542417428598",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"未连接网络时,点击\\u201c邀请好友砍价\\u201d仅提示\\u201c内容加载失败\\u201d,缺少详细的断网提示\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417413534/1542417413534_Screenshot_2018-11-17-09-12-02-822_com.tuniu.app.ui.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034716",
+            "case_take_id": "13792",
+            "report_id": "10010000034684",
+            "create_time_millis": "1542413455480",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"采用模拟器进入APP页面,在自动定位失败的情况下,会弹出手动定位的窗口,此时不及时点击,APP会闪退\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034749",
+            "case_take_id": "13792",
+            "report_id": "10010000034684",
+            "create_time_millis": "1542414036297",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"周边\\\"]\",\"description\":\"1,在搜索页面清空搜索历史,在输入条中输入空格,点击搜索后会默认搜索上一次的结果\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034924",
+            "case_take_id": "13792",
+            "report_id": "10010000034684",
+            "create_time_millis": "1542416133112",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"区域\\\"]\",\"description\":\"在主页面修改了目的地之后,帮你选目的地的的地址还是修改之前的地址,没法及时更新,需要手动操作\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035272",
+            "case_take_id": "13792",
+            "report_id": "10010000034684",
+            "create_time_millis": "1542426680096",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"搜索输入任何字段。bug:没有搜索按钮,只能通过回车来搜索目前输入的信息,用户体验不好。\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035277",
+            "case_take_id": "13792",
+            "report_id": "10010000034684",
+            "create_time_millis": "1542426781102",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"断网后,进入搜索历史中的城市,直接显示出网页链接和无法加载,不利于用户体验\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035215",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542425069952",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"在网络通畅的情况下,点击主页顶部搜索框进入搜索页面,一定几率不显示\\u201c推荐目的地\\u201d栏目。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425067558/1542425067558_1.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035231",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542425466691",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"在网络通畅的情况下,在输入框中输入\\u201cnanjing\\u201d,无法显示与\\u201cnanjing\\u201d相关的两项结果。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425464628/1542425464628_2.jpg",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035244",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542425968219",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"网络通畅的前提下,在搜索历史中点击搜索过的纯数字的按钮无反应。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425959957/1542425959957_3.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035259",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542426382260",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在输入纯数字后无法进行搜索,点击搜索按钮无反应\"}",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035278",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542426827015",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐方式二中,不输入好友姓名,也会被推荐了\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426805239/1542426805239_5.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035284",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542426901017",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"一定管理情况下点击搜索结果中的景点,进入后无法显示景点信息。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426899239/1542426899239_4.png",
+            "severity": "5",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035294",
+            "case_take_id": "13780",
+            "report_id": "10010000034672",
+            "create_time_millis": "1542427113649",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索纯数字信息后显示的联想结果中的酒店不存在\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542427111821/1542427111821_6.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035223",
+            "case_take_id": "13930",
+            "report_id": "10010000035196",
+            "create_time_millis": "1542425243811",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"进入我的界面,点击右上方的推荐有礼图标跳转至注册有礼界面,在注册手机号为未注册状态,验证码正确状态,邀请人手机为途牛会员状态下,无法注册并领取注册礼包。并显示\\u201c请填写正确的邀请人手机号\\u201d\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425186070/1542425186070_QQ图片20181117112547.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035247",
+            "case_take_id": "13930",
+            "report_id": "10010000035196",
+            "create_time_millis": "1542426023815",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索\\u201c北\\u201d与搜索\\u201c\\u201d京\\u201d都应该会出现北京的相关信息,但搜索\\u201c京\\u201d的是搜索联想未显示北京的相关信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425989847/1542425989847_QQ图片20181117113939.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035258",
+            "case_take_id": "13930",
+            "report_id": "10010000035196",
+            "create_time_millis": "1542426377531",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"进入我的页面后点击右上角的推荐有礼图标,进如了注册有礼界面,无其他的推荐有礼方式(可能与登录状态有关)\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426363608/1542426363608_ACF1A0FE4657E2CF41633468FE23CD9D.jpg",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035286",
+            "case_take_id": "13930",
+            "report_id": "10010000035196",
+            "create_time_millis": "1542426917813",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"进入超级自由行页面后,点击添加目的地,无反应\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426914218/1542426914218_D3BE011E5E69C7BC60BD33BC85C93FFE.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034733",
+            "case_take_id": "13796",
+            "report_id": "10010000034688",
+            "create_time_millis": "1542413826282",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"1.点击搜素联想后未找到任何信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413823026/1542413823026_Screenshot_2018-11-17-08-15-47.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034856",
+            "case_take_id": "13796",
+            "report_id": "10010000034688",
+            "create_time_millis": "1542415234447",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"热度排序\\\"]\",\"description\":\"1.点击按\\u201c30天出游人数最多\\u201d选项进行排序后,顺序并不完全按照出游人数进行排序\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415225080/1542415225080_Screenshot_2018-11-17-08-40-08.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034900",
+            "case_take_id": "13796",
+            "report_id": "10010000034688",
+            "create_time_millis": "1542415717272",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"1.点击附近目的地时一直加载无法进入详情页\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415710342/1542415710342_Screenshot_2018-11-17-08-48-13.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034917",
+            "case_take_id": "13796",
+            "report_id": "10010000034688",
+            "create_time_millis": "1542415975902",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"1.推荐目的地查看更多时,可能造成app停止运行或崩溃\\n2.推荐目的地查看更多时,可能造成app需要加载时间较长\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415944891/1542415944891_Screenshot_2018-11-17-08-33-58.png",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034729",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542413756260",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"主题1\\\"]\",\"description\":\"选择主题时,点击很多主题标签,提示未找到符合条件的线路。\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034766",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542414231630",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"\\u201c全部\\u201d界面中可供选择的完整路径太少,只有部分路径存在(周边,亲子游,城市,1-3天,101-500,4-6月),绝大部分路径都不存在。\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034781",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542414451883",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"当浏览过某个目的地后,点击浏览历史,页面提示您没有留下足迹\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034823",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542414919695",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"选择推荐方式二,填写好友信息后,点击立即推荐,总是提示填写邀请人信息失败。\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034846",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542415173476",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"推荐方式二中,好友手机,和好友姓名文本框被点击后或被填写后,其中的提示文字依然存在\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034910",
+            "case_take_id": "13773",
+            "report_id": "10010000034665",
+            "create_time_millis": "1542415836698",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"选择目的地大全,浏览一些目的地后,页面中最近浏览的标签无法清除。\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034882",
+            "case_take_id": "13768",
+            "report_id": "10010000034660",
+            "create_time_millis": "1542415538058",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"在雷电模拟器中运行app,进入搜索页面根据搜索联想进行搜索并进入子页面后,点击返回按钮无法正常返回到搜索页面,而是重定向到当前子页面,只有再次点击返回才能返回到搜索页面\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035056",
+            "case_take_id": "13768",
+            "report_id": "10010000034660",
+            "create_time_millis": "1542418883348",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"在雷电模拟器3.38中运行app,并点击首页的二维码扫描,出现\\u201c应用请求二维码\\u201d的提示后,立刻点击返回至首页,二维码页面的提示没有消失\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035168",
+            "case_take_id": "13768",
+            "report_id": "10010000034660",
+            "create_time_millis": "1542422937182",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"在雷电模拟器3.38中运行app,并点击首页的二维码扫描,出现\\u201c应用请求二维码\\u201d的提示后,立刻点击返回至首页,二维码页面的提示没有消失\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542422926360/1542422926360_微信截图_20181117104756.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035194",
+            "case_take_id": "13768",
+            "report_id": "10010000034660",
+            "create_time_millis": "1542423957315",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"每次重新打开应用进入搜索页面,点击推荐目的地的查看更多,一定出现以下情况的一种:\\n1.app崩溃,停止运行\\n2.页面卡顿,长时间空白后才进入到正确的查看更多页面\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542423921135/1542423921135_Screenshot_2018-11-17-10-58-11.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542423925971/1542423925971_Screenshot_2018-11-17-10-58-33.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035205",
+            "case_take_id": "13768",
+            "report_id": "10010000034660",
+            "create_time_millis": "1542424554735",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"搜索栏输入30030554后,没有返回下拉可选列表,同时也无法进行确认进行搜索\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542424550598/1542424550598_Screenshot_2018-11-17-11-15-43.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034831",
+            "case_take_id": "13793",
+            "report_id": "10010000034685",
+            "create_time_millis": "1542415013943",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"点击推荐有礼按钮后,页面刷新缓慢\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414982931/1542414982931_推荐有礼[1].png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034870",
+            "case_take_id": "13793",
+            "report_id": "10010000034685",
+            "create_time_millis": "1542415328730",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"推荐有礼二中好友姓名无长度限制\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415320572/1542415320572_Screenshot_2018-11-17-08-41-34[1].png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034894",
+            "case_take_id": "13793",
+            "report_id": "10010000034685",
+            "create_time_millis": "1542415649606",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"在输入框中输入30030554,搜索框无反应,无法显示搜索内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415641561/1542415641561_Screenshot_2018-11-17-08-44-41[1].png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034703",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542413326255",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"搜索30030554没有返回搜索结果,无法进行下一步邀请好友或者进行砍价的操作\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413306694/1542413306694_Screenshot_2018-11-17-08-08-06.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034723",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542413659045",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"点击搜索历史中的 30030554  条目后, 页面没有跳转到相应的搜索结果页面,也未返回任何提示信息。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413644937/1542413644937_Screenshot_2018-11-17-08-13-59.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034752",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542414106337",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"点击搜索框,选择推荐目的地右侧的查看更多,尝试多次切换左侧导航栏分类,大概率出现页面主要区域全部空白的情况(包括导航栏)\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414091112/1542414091112_Screenshot_2018-11-17-08-16-55.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034805",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542414687443",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"新注册账号没有消费旅游产品,不符合参加推荐有礼活动要求,但是仍能创建分享链接,通过各种渠道进行邀请分享,会给用户造成困扰。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414660764/1542414660764_Screenshot_2018-11-17-08-30-57.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414684369/1542414684369_Screenshot_2018-11-17-08-31-19.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034861",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542415274941",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"点击搜索框,进入搜索页面,查看\\u2018推荐按目的地\\u2018中的第一个条目(离我的距离)出错(北京的北海公园只显示距离2KM)\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415238267/1542415238267_Screenshot_2018-11-17-08-37-11.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034893",
+            "case_take_id": "13762",
+            "report_id": "10010000034654",
+            "create_time_millis": "1542415649089",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"登陆新注册账户之后,点击 推荐有礼 通过方式二 进行邀请,填写另一未注册手机号的信息, 点击立即推荐,弹出 \\u2019老会员填写邀请人信息失败\\u2018这一消息(本应显示 未消费用户 无法邀请),会对用户产生困扰。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415645038/1542415645038_Screenshot_2018-11-17-08-42-22.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034973",
+            "case_take_id": "13808",
+            "report_id": "10010000034701",
+            "create_time_millis": "1542416980488",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"手机已经开启gps服务,打开数据流量,但是初次打开提示定位失败,需要手动选择城市或者使用默认城市\\u2014\\u2014上海,以及后续在首页左上角进行选择城市时,依然提示定位失败,点击刷新按钮依然提示定位失败\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416962940/1542416962941_涂鸦_Screenshot_2018-11-17-09-08-14-526_途牛旅游.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416970720/1542416970720_Screenshot_2018-11-17-09-08-58-303.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035025",
+            "case_take_id": "13808",
+            "report_id": "10010000034701",
+            "create_time_millis": "1542418039017",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"在输入框中输入 30030554,回车后,没有搜索结果,也没有提示无此结果,影响用户体验,以及无法进行后续测试用例的编写\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542418025975/1542418025975_Screenshot_2018-11-17-09-24-57-207.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035216",
+            "case_take_id": "13808",
+            "report_id": "10010000034701",
+            "create_time_millis": "1542425070529",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"选择了深圳,但是底栏第二个显示的城市为北京\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425064945/1542425064945_涂鸦_Screenshot_2018-11-17-11-20-42-420_途牛旅游.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034712",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542413411598",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"1.在搜索框点击查看更多2.进入查看更多界面,app停止运行\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413406703/1542413406703_Screenshot_2018-11-17-08-04-58.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034744",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542413973144",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"主题\\\"]\",\"description\":\"1.在热门搜索中点击直播\\n2.进入任意直播间\\n3.拖动进读条,视频无响应,进度条消失\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413968321/1542413968321_Screenshot_2018-11-17-08-12-40.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034773",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542414382510",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"在搜索框下拉内容中,点击帮你选目的地,系统无响应且不正常退出\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414360886/1542414360886_Screenshot_2018-11-17-08-22-51.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034789",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542414532322",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"在下拉搜索框中点击帮你选目的地,进入帮你选目的地界面,页面加载时间较长\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414528194/1542414528194_Screenshot_2018-11-17-08-23-58.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034811",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542414817619",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"热度排序\\\"]\",\"description\":\"在下拉搜索框中选择帮你选目的地,进入帮你选目的地界面,选择排序方式,系统不正常退出\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414814384/1542414814384_Screenshot_2018-11-17-08-29-05.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034869",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542415328542",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"未登录的情况下,进入我的界面,点击推荐有礼,进入注册有礼界面,输入手机号进行注册,无法发送验证码至手机,页面上方进度条一直处于加载状态\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415324872/1542415324872_Screenshot_2018-11-17-08-37-05.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034895",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542415676986",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"已登录系统,在推荐有礼中选择推荐方式一,选择微博分享,进入发布微博界面,点击取消按钮,返回至推荐有礼界面,无未分享提示信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415668424/1542415668424_Screenshot_2018-11-17-08-47-28.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415672791/1542415672791_Screenshot_2018-11-17-08-47-32.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034928",
+            "case_take_id": "13788",
+            "report_id": "10010000034680",
+            "create_time_millis": "1542416185417",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"已登录,进入我的,推荐有礼界面,选择推荐方式二,输入手机号位数超过11位,无提示手机号错误信息出现,并且系统出现加载图案\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416162334/1542416162334_Screenshot_2018-11-17-08-55-48.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035234",
+            "case_take_id": "13932",
+            "report_id": "10010000035203",
+            "create_time_millis": "1542425570588",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"区域\\\"]\",\"description\":\"搜索-帮你选目的地,景点大部分图片不显示,影响用户使用体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425525429/1542425525429_QQ图片20181117113108.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035256",
+            "case_take_id": "13932",
+            "report_id": "10010000035203",
+            "create_time_millis": "1542426343934",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"区域\\\"]\",\"description\":\"在选择境外区域后,境外轻旅行无法确认,功能不完整。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426291902/1542426291902_QQ图片20181117113108.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426296961/1542426296961_QQ图片20181117114457.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034706",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542413350383",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"下架产品未及时清除\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413343358/1542413343358_Screenshot_2018-11-17-08-07-16.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034717",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542413552699",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"当启动app第一次点击查看更多是app会出现崩溃,崩溃之后重启app错误不再发生\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413542833/1542413542833_Screenshot_2018-11-17-08-12-18.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034735",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542413894993",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"点击搜素联想后目的地大全和帮你选子页面无实际内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413893808/1542413893808_Screenshot_2018-11-17-08-15-07.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034748",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542414000525",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"无法点击进入品类查看完整品类内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413998911/1542413998911_Screenshot_2018-11-17-08-19-53.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034751",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542414070783",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"周边\\\"]\",\"description\":\"用户无法点击进入周边按键查看所有周边产品信息\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034756",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542414145901",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"主题\\\"]\",\"description\":\"用户无法机内主题内容查看所有主题信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414144941/1542414144941_Screenshot_2018-11-17-08-19-53.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034804",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542414658155",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"好友姓名与好友手机没有未左对齐,且未与输入框分离,页面显得比较丑陋\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414656424/1542414656424_Screenshot_2018-11-17-08-29-12.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034814",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542414860389",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"有时候点击搜索,推荐目的地选项都没有加载出来\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414859095/1542414859095_Screenshot_2018-11-17-08-32-31.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034857",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542415241697",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"热度排序\\\"]\",\"description\":\"热度推荐含有大量白框,比较丑陋,为按照条目个数自适应调整下拉框长度\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415222830/1542415222830_Screenshot_2018-11-17-08-38-52.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034867",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542415324220",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"区域\\\"]\",\"description\":\"区域下拉框含有大量白框,比较丑陋,为按照条目个数自适应调整下拉框长度\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415311907/1542415311907_Screenshot_2018-11-17-08-41-46.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034881",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542415510489",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"主题1\\\"]\",\"description\":\"当选择滑雪后,下拉框内容没有自动下滑,需要用户手动滑动页面翻看下面的内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415481564/1542415481564_Screenshot_2018-11-17-08-44-34.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415506929/1542415506929_Screenshot_2018-11-17-08-45-00.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034899",
+            "case_take_id": "13754",
+            "report_id": "10010000034646",
+            "create_time_millis": "1542415714238",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"当选择所有条目要求后,总是提示未找到符合条件的线路,无法点击确定\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415709700/1542415709700_Screenshot_2018-11-17-08-46-53.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035049",
+            "case_take_id": "13805",
+            "report_id": "10010000034697",
+            "create_time_millis": "1542418756772",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"进入app后点击左上角的城市进行切换城市,选择好城市点击确定后,app返回主页并闪退\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542418750593/1542418750593_闪退.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035197",
+            "case_take_id": "13805",
+            "report_id": "10010000034697",
+            "create_time_millis": "1542424189681",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"首次点开发现页面下的\\u201c旅行视频\\u201d点开后会黑屏,黑屏短暂时间后又可以正常显示页面内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542424184110/1542424184110_旅行视频.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035249",
+            "case_take_id": "13805",
+            "report_id": "10010000034697",
+            "create_time_millis": "1542426057822",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在使用推荐方式二进行推荐时,如果输入英文名会显示\\u201c输入的名字不符合规范\\u201d\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426053879/1542426053879_3.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035255",
+            "case_take_id": "13805",
+            "report_id": "10010000034697",
+            "create_time_millis": "1542426216820",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐有礼2里好友手机输入13871354811,手机号会提示已经是老会员,但是此手机号码为真实号码且从未注册过途牛旅行\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426210013/1542426210013_4.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035283",
+            "case_take_id": "13805",
+            "report_id": "10010000034697",
+            "create_time_millis": "1542426861236",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\"]\",\"description\":\"在筛选条件中,自定义预计花费,如果输入2~1(左边界值大于右边界值)这样无效的数据,页面不会提示相关报错信息\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426856340/1542426856340_5.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035293",
+            "case_take_id": "13795",
+            "report_id": "10010000034687",
+            "create_time_millis": "1542427080196",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"搜索30030554,没有如何结果\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035156",
+            "case_take_id": "13888",
+            "report_id": "10010000035117",
+            "create_time_millis": "1542422422152",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"1.打开\\u201c途牛\\u201dAPP,\\n2.点击\\u201c首页\\u201d最上面的\\u201c消息\\u201d图标\\n3.进入消息页面\\n4.进入消息界面但显示无网络连接\\n\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035224",
+            "case_take_id": "13888",
+            "report_id": "10010000035117",
+            "create_time_millis": "1542425257104",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"我的\\\"]\",\"description\":\"在注册界面,输入十位手机号码,点击获取验证码成功\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035262",
+            "case_take_id": "13888",
+            "report_id": "10010000035117",
+            "create_time_millis": "1542426491033",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\"]\",\"description\":\"在点击注册并登录之后显示此操作过于频繁,请退出此页面并重试\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035282",
+            "case_take_id": "13954",
+            "report_id": "10010000035254",
+            "create_time_millis": "1542426858918",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"搜索框输入信息后无搜索按键\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426816095/1542426816095_搜索.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035297",
+            "case_take_id": "13954",
+            "report_id": "10010000035254",
+            "create_time_millis": "1542427149321",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"点击搜索框下方的信息,本应跳转到旅游方式的界面,却跳转到地点的详细界面\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034726",
+            "case_take_id": "13769",
+            "report_id": "10010000034661",
+            "create_time_millis": "1542413700630",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"点击搜索框,输入30030554无法进行搜索\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413510483/1542413510483_捕获.PNG",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034745",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542413984710",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"有概率导致\\u201c程序已停止运行\\u201d\"}",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034815",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542414861706",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在输入\\u201c3003055\\u201d后搜索都不能正常显示内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414855914/1542414855914_Screenshot_2018-11-17-08-33-47.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034936",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542416317907",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在输入\\u201c3003055\\u201d后搜索都不能正常显示内容\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034992",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542417326305",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"仍然能进入页面,没有提示用户产品不存在。应当提示相关产品不存在。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417321730/1542417321730_Screenshot_2018-11-17-09-13-14.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035016",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542417812511",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"进入详细页面后询价速度过慢\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417780619/1542417780619_Screenshot_2018-11-17-09-19-39.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035073",
+            "case_take_id": "13759",
+            "report_id": "10010000034651",
+            "create_time_millis": "1542419569806",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在输入框输入\\u201c南京\\u201d,选择第一选项有存在程序崩溃问题\"}",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034769",
+            "case_take_id": "13755",
+            "report_id": "10010000034647",
+            "create_time_millis": "1542414256667",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"搜索北京后,搜索结果应与北京相关但是却出现了与北京无关的\\u201c马尔代夫\\u201d\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414218510/1542414218510_Screenshot_2018-11-17-08-22-25.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034832",
+            "case_take_id": "13755",
+            "report_id": "10010000034647",
+            "create_time_millis": "1542415032188",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"进入\\u201c推荐方式二\\u201d 后在姓名一栏只输入姓氏\\u201c王\\u201d应显示\\u201c名字不符合规范\\u201d,实际上软件未定为违规\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415022759/1542415022759_Screenshot_2018-11-17-08-32-56.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034897",
+            "case_take_id": "13755",
+            "report_id": "10010000034647",
+            "create_time_millis": "1542415691045",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"进入\\u201c全部筛选\\u201d 并滑动到\\u201c单人预算\\u201d一栏 ,在\\u201c自定义花费\\u201d中输入价格最低500,输入\\u201c5\\u201d之后会自动跳转到顶层,重新下划到\\u201c单人预算\\u201d一栏 才能继续输入\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415679829/1542415679829_Screenshot_2018-11-17-08-47-35.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415685484/1542415685484_Screenshot_2018-11-17-08-47-41.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034920",
+            "case_take_id": "13755",
+            "report_id": "10010000034647",
+            "create_time_millis": "1542416052535",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"换一换\\\"]\",\"description\":\"点击\\u201c换一换\\u201d 后,退出并再次进入搜索界面\\u201c热门搜索\\u201d一栏,\\u201c热门搜索\\u201d内容应显示为之前点击\\u201c换一换\\u201d之后的内容,实际上却重置\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416046508/1542416046508_Screenshot_2018-11-17-08-50-25.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034949",
+            "case_take_id": "13755",
+            "report_id": "10010000034647",
+            "create_time_millis": "1542416534733",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\"]\",\"description\":\"更改定位城市后重新进入搜索界面,推荐目的地中\\u201c附近\\u201d一项应与当前定位城市台北相关,而实际上显示的\\u201c什刹海\\u201d仍为之前的定位北京附近的景点\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416491367/1542416491367_Screenshot_2018-11-17-08-56-09.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416500027/1542416500027_Screenshot_2018-11-17-08-58-00.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034698",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542413198480",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"点击查看更多目的地时候会app停止运行\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413195746/1542413195746_图片1.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034763",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542414210690",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"当用浏览器打开这个分享注册时,会有邀请码不得为空出现,并且无法关闭,影响用户体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414188041/1542414188041_图片3.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034797",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542414604516",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐有礼2里好友手机输入11111111111手机号会提示已经是老会员\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414588527/1542414588527_图片4.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034848",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542415187226",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐有礼2里面输入正常手机号就会出现老会员填写邀请人失败\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415184374/1542415184374_图片5.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034905",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542415805759",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"无法点击进入品类查看完整品类/周边/主题内容\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415803248/1542415803248_图片6.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034926",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542416159559",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"帮你选目的地主题分类实在太多,多选大多2个以上就不存在目的地了\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416157993/1542416157993_图片7.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035281",
+            "case_take_id": "13757",
+            "report_id": "10010000034649",
+            "create_time_millis": "1542426854685",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[]\",\"description\":\"当点击发现里的旅行视频时小概率会程序崩溃\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426852761/1542426852761_图片8.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034710",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542413380010",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"在进人搜索界面后,点击查看更多选项时APP显示已停止运行,在,等其返回搜索界面后再次点击则能够正常进人查看更多的界面。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413372506/1542413372506_snipaste_20181117_080627.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413377503/1542413377503_snipaste_20181117_080648.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034736",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542413895724",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"在进人推荐有礼时需要进行注册,在注册时填入自己的手机号码后能正常获得验证码,但是填入邀请人的手机号码后点击注册,显示\\u201c请填写正确的邀请人手机号码\\u201d,不能进行注册。\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034778",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542414443685",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐方式2中输入好友姓名的时候,只能输入英文和数字,不能输入中文。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414388879/1542414388879_snipaste_20181117_082622.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414438002/1542414438002_snipaste_20181117_082645.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034849",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542415196039",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在搜索3003054时不仅没有推荐而且没有提示,并且在点击搜索图标是无反应。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415162725/1542415162725_snipaste_20181117_083916.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034877",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542415446935",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在搜索3003054时不仅没有推荐而且没有提示,并且在点击搜索图标是搜索不到结果而而且提示是网络错误,用户体验极其不好。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415434899/1542415434900_snipaste_20181117_083916.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415438433/1542415438433_snipaste_20181117_084346.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034891",
+            "case_take_id": "13756",
+            "report_id": "10010000034648",
+            "create_time_millis": "1542415644943",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在搜索3003054时没有搜索结果但是分享按钮没有去掉,让用户点击了又没有任何提示,并且在页面中显示的是网络错误,提示不正确。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415628328/1542415628328_snipaste_20181117_084346.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034755",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542414139645",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"在点击进入某目的地,并新浪微博分享后,返回搜索页面,发现推荐目的地字符排列重叠\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413486812/1542413486812_Screenshot_2018-11-17-08-08-22.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034777",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542414429604",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"点评中点击图片中放大化(全屏)按钮无效果,只能使用双击图片进行图片大小变化\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414370390/1542414370390_Screenshot_2018-11-17-08-26-05.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034803",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542414656885",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"景点介绍中图片无法点击放大或下载,用户体验较差\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414638569/1542414638569_Screenshot_2018-11-17-08-30-23.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034822",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542414917667",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"在景点介绍页面,快速从下方上划到上方时,会出现白色区块挡住后面的景点介绍\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414892038/1542414892038_Screenshot_2018-11-17-08-34-47.png",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034862",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542415276140",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"除了点评中的图片,页面最上方的目的地图片也同样如此。目的地详情页面中点击图片后放大化(全屏)按钮无效果,只能使用双击图片进行图片大小变化\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415217501/1542415217501_Screenshot_2018-11-17-08-39-11.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034892",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542415645068",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"断开网络后,进入产品详情页面无明显错误提示\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415603944/1542415603944_Screenshot_2018-11-17-08-46-39.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034918",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542416007542",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"景点须知页面有个大的绿色退出按钮,与其他页面风格不符\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415930985/1542415930985_Screenshot_2018-11-17-08-51-35.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034962",
+            "case_take_id": "13766",
+            "report_id": "10010000034658",
+            "create_time_millis": "1542416786349",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\"]\",\"description\":\"进入消息页面会突然变成横屏再变回竖屏,发生在一瞬间,难以截图,用户体验不好\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034732",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542413809649",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\"]\",\"description\":\"点击帮你选目的地模块,页面加载缓慢,影响用户体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413788246/1542413788246_帮你选目的地.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034743",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542413964947",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"没有返回结果,无法执行下一步\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413961295/1542413961295_搜搜.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034775",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542414418120",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"进入联想子页面后,进行价格筛选1800以上,筛选结果不成功\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414415992/1542414415992_筛选.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034802",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542414632300",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索联想,进入子页面,子页面中的看过按钮无法拖动,影响用户视觉体验,\\u2018看过\\u2019按钮阻挡了用户看到价格\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414630022/1542414630022_看过.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034817",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542414883126",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"点击任一价格进行筛选,有可能加载速度非常缓慢,影响用户体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414880350/1542414880350_加载缓慢.png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034837",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542415086072",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"在联想的子页面,价格筛选选1300-1800,筛选结果不成功\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415084104/1542415084104_1300-1800.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034854",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542415229427",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索联想进入的子页面,价格筛选选为1000-1300,筛选不成功,会出现不在这个价格范围内的\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415227216/1542415227216_1000-1300.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034872",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542415379858",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索联想进入子页面,进行价格筛选 700-1000,会出现不在此范围的酒店\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415378515/1542415378515_700-1000.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034913",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542415878855",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"推荐方式二中明显看到,好友手机这一栏,进行点击时边框会出现边框覆盖情况\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415874349/1542415874349_边框8.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034930",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542416220486",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"非老会员扔可以使用推荐方式二,填写好友信息后,点击立即推荐,推荐失败\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416212440/1542416212440_方式二.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034954",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542416604699",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"点击搜索历史中的联想,他会默认进入上一次进入的子页面,而不是 出现所有的联想页面\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416596023/1542416596023_搜索历史.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416602818/1542416602818_历史2.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034969",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542416925881",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"点击搜索历史中的 30030554  条目后,页面无反应\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416919307/1542416919307_QQ图片20181117090819.jpg",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034982",
+            "case_take_id": "13765",
+            "report_id": "10010000034657",
+            "create_time_millis": "1542417179265",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\"]\",\"description\":\"GPS已经关闭,仍然记录上一次的定位地点,在推荐目的地中仍然进行推荐\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417177660/1542417177660_QQ截图20181117091248.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035260",
+            "case_take_id": "13815",
+            "report_id": "10010000034715",
+            "create_time_millis": "1542426385610",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"当多次点击搜索框之后,推荐目的地可能会消失\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034737",
+            "case_take_id": "13782",
+            "report_id": "10010000034674",
+            "create_time_millis": "1542413912147",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\"]\",\"description\":\"当多次点击搜索框之后,推荐目的地可能会消失\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034819",
+            "case_take_id": "13782",
+            "report_id": "10010000034674",
+            "create_time_millis": "1542414905894",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"进入帮你选目的页面,点击全部,里面不包含对热度排序的选择\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034889",
+            "case_take_id": "13782",
+            "report_id": "10010000034674",
+            "create_time_millis": "1542415636364",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在搜索框中可以输入任意文本,如任意数字,文字,没有搜索到不会有任何响应,应该是缺失一个搜索按键导致,我们希望的是可以在输入文本后,点击搜索按键再出现相应的结果,而不是随意输入正确的文本有响应,不正确的文本没有任何响应\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415625321/1542415625321_Screenshot_2018-11-17-08-46-51.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415632252/1542415632252_Screenshot_2018-11-17-08-44-50.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034971",
+            "case_take_id": "13782",
+            "report_id": "10010000034674",
+            "create_time_millis": "1542416939449",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式一\\\"]\",\"description\":\"进入推荐有礼后,提示是新人无法推荐好友,但是点击提示右上角的关闭按键后,没有退出推荐有礼界面,而且可以正常分享。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416922668/1542416922668_Screenshot_2018-11-17-09-08-01.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416929482/1542416929482_Screenshot_2018-11-17-09-08-09.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416936234/1542416936234_Screenshot_2018-11-17-09-08-14.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034993",
+            "case_take_id": "13782",
+            "report_id": "10010000034674",
+            "create_time_millis": "1542417348752",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"在推荐方式二的好友姓名栏中,可以输入超过正常姓名长度字符,没有任何提示,也没有设置上限。如可以一直反复输入123不会提示警告\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417345511/1542417345511_Screenshot_2018-11-17-09-15-40.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034754",
+            "case_take_id": "13812",
+            "report_id": "10010000034708",
+            "create_time_millis": "1542414133363",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"在未联网状态下,\\u201c我的\\u201c模块页面布局出现缺陷,\\u201d推荐有礼\\u201c模块页面显示为空白,且未提示用户连接网络后使用。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414022113/1542414022113_Screenshot_2018-11-17-08-19-10-56.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414042488/1542414042488_Screenshot_2018-11-17-08-14-55-84.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034855",
+            "case_take_id": "13812",
+            "report_id": "10010000034708",
+            "create_time_millis": "1542415230484",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[]\",\"description\":\"进入\\u201d邮轮\\u201c界面后,页面显示邮轮可预定,但选择任意日期将邮轮添加行程失败。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415213735/1542415213735_Screenshot_2018-11-17-08-26-47-56.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035265",
+            "case_take_id": "13812",
+            "report_id": "10010000034708",
+            "create_time_millis": "1542426590067",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[]\",\"description\":\"在抢购邮轮选择中,对于同一邮轮,第一次当人数选择2人时,应用提示\\u201d每单人数必须在3和15之间\\u201c;将人数选择为3时,应用提示\\u201d每单人数必须为2的倍数\\u201d;将人数选择为1时,应用提示\\u201c每单人数必须在2和6之间\\u201d。应用提示不一,导致用户无法购买。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426501309/1542426501309_Screenshot_2018-11-17-11-02-56-68.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426539933/1542426539933_Screenshot_2018-11-17-11-03-41-44.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426570272/1542426570272_Screenshot_2018-11-17-11-39-00-57.png",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035237",
+            "case_take_id": "13917",
+            "report_id": "10010000035176",
+            "create_time_millis": "1542425715840",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"进入\\\"我的\\\"界面,点击右上方的\\\"推荐有礼\\\"图标跳转至注册有礼界面,只有一种推荐方式;无法选择推荐方式\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425663420/1542425663420_Screenshot_2018-11-17-11-33-22-285_com.tuniu.app..png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035275",
+            "case_take_id": "13917",
+            "report_id": "10010000035176",
+            "create_time_millis": "1542426753541",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"热度排序\\\"]\",\"description\":\"热度推荐含有大量白框,比较丑陋,应按照条目个数自适应调整下拉框长度\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426736878/1542426736878_Screenshot_2018-11-17-11-48-41-430_com.tuniu.app..png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035299",
+            "case_take_id": "13917",
+            "report_id": "10010000035176",
+            "create_time_millis": "1542427151457",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"进入App后按下home键,重新点击App图标后会重新加载,并回到App主页面。\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035252",
+            "case_take_id": "13790",
+            "report_id": "10010000034682",
+            "create_time_millis": "1542426087390",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"在安卓5.0的雷电模拟器上,点击\\\"查看更多\\\"一定概率出现闪退,在真机安卓7.1.1上,点击\\\"查看更多\\\"不会出现任何闪退情况\"}",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035269",
+            "case_take_id": "13790",
+            "report_id": "10010000034682",
+            "create_time_millis": "1542426636964",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"断网后,进入搜索历史中的城市,直接显示出网页链接和无法加载,不利于用户体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426609716/1542426609716_4DCC320933BF7C97716A74B613FDC559.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034725",
+            "case_take_id": "13779",
+            "report_id": "10010000034671",
+            "create_time_millis": "1542413691404",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"当点击 \\\"目的地参观时\\\"选项栏未向左滑动。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413576485/1542413576485_Screenshot_2018-11-17-08-12-40.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034813",
+            "case_take_id": "13779",
+            "report_id": "10010000034671",
+            "create_time_millis": "1542414849490",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"点击景区直通车,会刷新界面,并未跳转。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414832961/1542414832961_Screenshot_2018-11-17-08-33-43.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034927",
+            "case_take_id": "13779",
+            "report_id": "10010000034671",
+            "create_time_millis": "1542416174540",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"区域\\\"]\",\"description\":\"只能保存一个选择的已目的地,如选择非洲后,再选欧洲。只保留欧洲。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416111971/1542416111971_Screenshot_2018-11-17-08-54-44.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416117488/1542416117488_Screenshot_2018-11-17-08-54-51.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416122240/1542416122240_Screenshot_2018-11-17-08-55-01.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035285",
+            "case_take_id": "13779",
+            "report_id": "10010000034671",
+            "create_time_millis": "1542426905272",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"无搜索按钮,只能按回车键。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426877832/1542426877832_Screenshot_2018-11-17-11-54-24.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034714",
+            "case_take_id": "13763",
+            "report_id": "10010000034655",
+            "create_time_millis": "1542413448504",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在切换地区之后,下方导航栏仍然显示上海地区的推荐\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034860",
+            "case_take_id": "13763",
+            "report_id": "10010000034655",
+            "create_time_millis": "1542415252132",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"在热门搜索里选择飞机票,查询南京到上海今日(2018.11.17)的机票,没有搜索到相应机票,而在其他网站则能够搜索到\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415180870/1542415180870_00000.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415217203/1542415217203_zzzz.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034956",
+            "case_take_id": "13763",
+            "report_id": "10010000034655",
+            "create_time_millis": "1542416678201",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在搜索结果页面点击右上角角标,点击电话,在弹出的控件上点击\\u201c在线客服\\u201d,没有直接跳转到客服页面\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416666481/1542416666481_123123.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416673514/1542416673514_123124.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035287",
+            "case_take_id": "13763",
+            "report_id": "10010000034655",
+            "create_time_millis": "1542426937635",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"搜索联想功能实现不完全\\n比如说我想搜索\\u201c黑龙江\\u201d这个地点,当输入\\u201c黑\\u201d之后没有联想到\\u201c黑龙江\\u201d,但是当输入\\u201c黑龙\\u201d时,则可以联想到\\u201c黑龙江\\u201d。\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035239",
+            "case_take_id": "13939",
+            "report_id": "10010000035219",
+            "create_time_millis": "1542425794166",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"在推荐目的地界面下点击查看更多会有较小的概率出现app异常推出。\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035266",
+            "case_take_id": "13939",
+            "report_id": "10010000035219",
+            "create_time_millis": "1542426602999",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在搜索框内搜索30030554后界面没有任何信息呈现出来\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426579760/1542426579760_1.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035271",
+            "case_take_id": "13939",
+            "report_id": "10010000035219",
+            "create_time_millis": "1542426667834",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"在搜索界面的搜索历史下点击3003054按钮无效\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035302",
+            "case_take_id": "13772",
+            "report_id": "10010000034664",
+            "create_time_millis": "1542427199010",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"输入姓名时没有字数限制,可以无限输入\"}",
+            "img_url": "",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035296",
+            "case_take_id": "13893",
+            "report_id": "10010000035128",
+            "create_time_millis": "1542427130494",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"推荐有礼无法正常打开\"}",
+            "img_url": "",
+            "severity": "5",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034724",
+            "case_take_id": "13801",
+            "report_id": "10010000034693",
+            "create_time_millis": "1542413673324",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在搜索框中搜索\\u201c30030030554\\u201d等一些纯数字内容,点击搜索后无结果,且无任何提示,给用户带来困扰,影响用户体验。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413325393/1542413325393_Screenshot_2018-11-17-08-08-04-114_com.tuniu.app..png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413670131/1542413670131_Screenshot_2018-11-17-08-14-02-848_com.tuniu.app..png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034839",
+            "case_take_id": "13801",
+            "report_id": "10010000034693",
+            "create_time_millis": "1542415107645",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"填写好友姓名只能填写中文汉字,否则会提示名字不规范,无法邀请只有外文名的外国朋友\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415089734/1542415089734_Screenshot_2018-11-17-08-37-09-236_com.tuniu.app..png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415103154/1542415103154_Screenshot_2018-11-17-08-37-15-243_com.tuniu.app..png",
+            "severity": "1",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034750",
+            "case_take_id": "13816",
+            "report_id": "10010000034719",
+            "create_time_millis": "1542414066099",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"在热门搜索界面,品类、周边、主题无法打开,用户体验不良好。\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034786",
+            "case_take_id": "13816",
+            "report_id": "10010000034719",
+            "create_time_millis": "1542414506303",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"搜索30030554子页面无法打开,功能不完整。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414496435/1542414496435_Screenshot_2018-11-17-08-27-15[1].png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035291",
+            "case_take_id": "13816",
+            "report_id": "10010000034719",
+            "create_time_millis": "1542427063367",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"输入姓名时没有字数限制,可以无限输入\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034707",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542413354285",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"在我的界面-点击推荐有礼,输入正确的手机号和验证码以及推荐人手机号,点击注册并领取,显示\\u201c请输入正确的邀请人手机号\\u201d。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413351837/1542413351837_1.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034728",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542413752972",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"在发现页面,搜索30030554,在网络连接正常的情况下,显示加载不出来。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413744388/1542413744388_3.png",
+            "severity": "4",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034770",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542414267569",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"在主页的搜索框中输入\\u201c品类\\u201d,回车键查询,在品类页面中点击\\u201c全部筛选\\u201d,游玩路线和出发城市选项仅有两个,并且无法自定义城市。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414253071/1542414253071_4.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034788",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542414517552",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"在热门搜索-品类-全部筛选-滑到下面进行\\u201c自定义预计花费\\u201d,在该输入框中一单输入数字,页面立刻跳到上面,给用户输入造成困难,我用的雷电模拟器。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414505836/1542414505836_5.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034809",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542414802267",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"品类\\\"]\",\"description\":\"在热门搜索-品类-全部筛选-滑到下面进行\\u201c自定义预计花费\\u201d,自定义的价格的上限如果比较低(大概不超过一万,以1000举例),确定按钮点不了。应该在自定义的后面提示用户最低花销。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414786831/1542414786831_6.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034842",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542415136056",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\",\\\"周边\\\"]\",\"description\":\"在搜索框中输入\\u201c周边\\u201d--全部筛选--进行\\u201c自定义预计花费\\u201d,在该输入框中输入数字,页面立刻跳到上面,给用户输入数字造成困难。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415113711/1542415113711_7.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034886",
+            "case_take_id": "13758",
+            "report_id": "10010000034650",
+            "create_time_millis": "1542415608284",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"在主页面搜索联想未找到相关信息,但是在发现页面下搜索联想可以搜到信息。另外的bug在于,在发现页面搜索联想后,显示了两个在北京的结果,无法自定义选择目的地。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415594123/1542415594123_8.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034731",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542413805180",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"热度排序\\\"]\",\"description\":\"搜索\\u2014\\u2014帮你选目的地\\u2014\\u2014热度排序\\u2014\\u2014周热度上升最快。bug:点击以后程序停止运行。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413794123/1542413794123_1.png",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034759",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542414180217",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\"]\",\"description\":\"搜索30030554。bug:回车后无反应,不出现子页面;取消后再搜索历史中点击,仍然无效。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414148963/1542414148963_3.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414159595/1542414159595_33.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034801",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542414626645",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索框输入联想\\u2014\\u2014回车。bug:跳转后的页面无信息,不会将相关信息列出来,影响用户体验。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414611755/1542414611755_5.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034827",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542414958436",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"我的\\u2014\\u2014推荐有礼\\u2014\\u2014输入手机号、验证码、邀请人手机号\\u2014\\u2014注册并领取。bug:无论邀请人手机号填什么,都提示\\u201c请输入正确的邀请人手机号码\\u201d\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414886798/1542414886798_6.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414908371/1542414908371_6.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414919748/1542414919748_66.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414937758/1542414937758_666.png",
+            "severity": "5",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034871",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542415345954",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\"]\",\"description\":\"我的\\u2014\\u2014注册登录\\u2014\\u2014填写相关信息。bug:所有信息确保填写正确,提示注册失败。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415336965/1542415336965_7.png",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035261",
+            "case_take_id": "13784",
+            "report_id": "10010000034676",
+            "create_time_millis": "1542426462917",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"搜索\\u2014\\u2014输入任何字段。bug:没有搜索按钮,只能通过回车来搜索目前输入的信息,用户体验不好。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426455434/1542426455434_8.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034792",
+            "case_take_id": "13785",
+            "report_id": "10010000034677",
+            "create_time_millis": "1542414554364",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"在推荐目的地界面,点击查看更多会小概率出现不正常退出。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414539307/1542414539307_查看更多.PNG",
+            "severity": "5",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034740",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542413956592",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"打开某项图片详情后点赞时,会显示点赞失败\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413937222/1542413937222_TIM截图20181117081203.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034764",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542414216432",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"地区选择\\\"]\",\"description\":\"删除状态时,点击某项会点开此项目,而不是选中,影响用户体验\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414212452/1542414212452_TIM截图20181117082041.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034795",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542414564816",
+            "bug_category": "性能",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"输入好友手机号时,输入过多会进行无意义读取,影响使用性能与用户体验\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034816",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542414882647",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"输入姓名时没有字数限制(没有错误值分析提示)\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414874482/1542414874482_TIM截图20181117083211.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034828",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542414961048",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"手机号输入框能输入,没有错误提示,且没有字数限制\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414956575/1542414956575_TIM截图20181117083211.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034844",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542415162900",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"页面弹出不可关闭且无意义的提示框,且UI混乱\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415156374/1542415156374_TIM截图20181117083625.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034866",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542415319208",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"提示非星级用户无法推荐,但关闭后仍可进入推荐页面进行操作\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415314326/1542415314326_TIM截图20181117083953.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034909",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542415834286",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"在帮你选页面跳转至目的地大全页面时,有时会闪退\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542415832021/1542415832021_TIM截图20181117084657.png",
+            "severity": "4",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034923",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542416111775",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\",\\\"子页面\\\"]\",\"description\":\"搜索历史点击30030554无反应,但部分其他选项有反应,猜想是因为30030554没有搜索结果\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416097489/1542416097489_TIM截图20181117085211.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034947",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542416490829",
+            "bug_category": "页面布局缺陷",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"通过日期筛选结果时,部分日期显示为可点击,实际无法点击\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416464136/1542416464136_TIM截图20181117085837.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034961",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542416785056",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"搜索时,加载前先更新了搜索历史(在点击与跳转页面间的一秒)。导致用户体验不佳\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416737794/1542416737794_TIM截图20181117090445.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034975",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542417005681",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索联想\\\"]\",\"description\":\"搜索任意内容时,联想未联想搜索历史\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416975420/1542416975420_TIM截图20181117090445.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542416981558/1542416981558_TIM截图20181117090647.png",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035019",
+            "case_take_id": "13817",
+            "report_id": "10010000034720",
+            "create_time_millis": "1542417874095",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"网络不佳时刷新页面无网络不佳提示\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542417871504/1542417871504_Screenshot_2018-11-17-09-21-38-093_com.tuniu.app..png",
+            "severity": "2",
+            "recurrent": "4",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034730",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542413771108",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"帮你选目的地\\\",\\\"全部\\\"]\",\"description\":\"在\\u201d全部\\u201c界面选择完\\u201c花费\\u201d范围后,出现bug:\\u201d确定\\u201c按钮无法点击\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542413726636/1542413726636_Screenshot_2018-11-17-08-14-33.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034761",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542414196172",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\"]\",\"description\":\"在推荐有礼界面的\\u201c输入邀请人手机号\\u201d输入有效手机号码,出现bug:提示请填写正确的邀请人手机号\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414086452/1542414086452_Screenshot_2018-11-17-08-17-39.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414092150/1542414092150_Screenshot_2018-11-17-08-17-56.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035201",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542424504084",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"热门搜索\\\"]\",\"description\":\"在搜索界面分别点击\\u201c查看更多\\u201d、\\u201c目的地大全\\u201d、\\u201c帮你选目的地\\u201d按钮,出现bug:偶尔出现程序不正常退出\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542424478886/1542424478886_Screenshot_2018-11-17-11-13-47.png",
+            "severity": "3",
+            "recurrent": "3",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035212",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542425017049",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"在服务电话界面选择拨打\\u201c国内服务电话\\u201d或\\u201c国际服务电话\\u201d,出现bug:服务电话点不动,无法拨打服务电话\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425002850/1542425002850_Screenshot_2018-11-17-11-21-04.png",
+            "severity": "2",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035232",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542425511344",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[]\",\"description\":\"在线客服咨询,出现bug:\\n1.发送表情时,无规律复现断网,发送不成功的情况,需要重发\\n2.在发送表情成功,客服回复后,自己发送的表情显示还未发送成功\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425473305/1542425473305_Screenshot_2018-11-17-11-24-02.png;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542425494252/1542425494252_Screenshot_2018-11-17-11-27-17.png",
+            "severity": "2",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035280",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542426854013",
+            "bug_category": "功能不完整",
+            "description": "{\"path\":\"[]\",\"description\":\"点击进入\\u201c咨询人工客服\\u201d界面后进入\\u201c在线客服\\u201d界面,出现bug:输入框无法输入,右下角的表情和添加按钮都无法使用\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542426824089/1542426824089_Screenshot_2018-11-17-11-48-13.png",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000035298",
+            "case_take_id": "13786",
+            "report_id": "10010000034678",
+            "create_time_millis": "1542427151407",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"其他\\\"]\",\"description\":\"点击发现页面下的\\u201c关注\\u201d、\\u201c推荐\\u201d等各选项,出现bug:无规律复现瞬间黑屏,黑屏短暂时间后又可以正常显示页面内容\"}",
+            "img_url": "",
+            "severity": "3",
+            "recurrent": "2",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034758",
+            "case_take_id": "13767",
+            "report_id": "10010000034659",
+            "create_time_millis": "1542414164964",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"我的\\\",\\\"推荐有礼\\\",\\\"推荐方式二\\\"]\",\"description\":\"我的-签到有礼进入签到有礼页面后,点击左上角的退出按钮,出现空白页面,无法正常返回上一页面。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414118136/1542414118136_1.PNG;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414143249/1542414143249_2.PNG",
+            "severity": "3",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034808",
+            "case_take_id": "13767",
+            "report_id": "10010000034659",
+            "create_time_millis": "1542414724350",
+            "bug_category": "用户体验",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"搜索30030554\\\",\\\"邀请好友\\\"]\",\"description\":\"在搜索框内输入3003055,,弹出结果页面的瞬间,又弹出,网络不给力的页面。点重新加载,无用。严重影响用户体验。\"}",
+            "img_url": "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414628937/1542414628937_3.PNG;http://mooctest-site.oss-cn-shanghai.aliyuncs.com/app/1542414664577/1542414664577_4.PNG",
+            "severity": "4",
+            "recurrent": "5",
+            "from_cloud": "0"
+        },
+        {
+            "id": "10010000034884",
+            "case_take_id": "13767",
+            "report_id": "10010000034659",
+            "create_time_millis": "1542415562951",
+            "bug_category": "不正常退出",
+            "description": "{\"path\":\"[\\\"搜索\\\",\\\"推荐目的地\\\",\\\"查看更多\\\"]\",\"description\":\"在搜素-查看更多中长时间查看景点信息后,程序会不正常退出。\"}",
+            "img_url": "",
+            "severity": "4",
+            "recurrent": "2",
+            "from_cloud": "0"
+        }
+    ]
+}

+ 286 - 0
mvnw

@@ -0,0 +1,286 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+  # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        wget "$jarUrl" -O "$wrapperJarPath"
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        curl -o "$wrapperJarPath" "$jarUrl"
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 161 - 0
mvnw.cmd

@@ -0,0 +1,161 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
+	IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    echo Found %WRAPPER_JAR%
+) else (
+    echo Couldn't find %WRAPPER_JAR%, downloading it ...
+	echo Downloading from: %DOWNLOAD_URL%
+    powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
+    echo Finished downloading %WRAPPER_JAR%
+)
+@REM End of extension
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

BIN
oss/.DS_Store


+ 103 - 0
pom.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.1.4.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>edu.nju</groupId>
+    <artifactId>bug</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>bug</name>
+    <description>Bug project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.session</groupId>
+            <artifactId>spring-session-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20160810</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.17</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.2.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ansj</groupId>
+            <artifactId>ansj_seg</artifactId>
+            <version>5.1.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.hankcs</groupId>
+            <artifactId>hanlp</artifactId>
+            <version>portable-1.7.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

BIN
src/.DS_Store


BIN
src/main/.DS_Store


BIN
src/main/java/.DS_Store


+ 28 - 0
src/main/java/META-INF/MANIFEST.MF

@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Class-Path: logback-core-1.2.3.jar log4j-to-slf4j-2.11.2.jar poi-ooxml
+ -schemas-3.17.jar spring-session-core-2.1.5.RELEASE.jar spring-data-m
+ ongodb-2.1.6.RELEASE.jar jackson-databind-2.7.0.jar stax-api-1.0.1.ja
+ r tomcat-embed-websocket-9.0.17.jar spring-aop-5.1.6.RELEASE.jar comm
+ ons-codec-1.11.jar tomcat-embed-core-9.0.17.jar spring-boot-starter-l
+ ogging-2.1.4.RELEASE.jar snakeyaml-1.23.jar spring-boot-starter-2.1.4
+ .RELEASE.jar ansj_seg-5.1.1.jar json-20160810.jar spring-boot-starter
+ -json-2.1.4.RELEASE.jar spring-boot-starter-tomcat-2.1.4.RELEASE.jar 
+ spring-boot-starter-data-mongodb-2.1.4.RELEASE.jar jackson-datatype-j
+ sr310-2.9.8.jar poi-3.17.jar nlp-lang-1.7.2.jar jackson-module-parame
+ ter-names-2.9.8.jar bson-3.8.2.jar validation-api-2.0.1.Final.jar jac
+ kson-annotations-2.7.0.jar commons-collections4-4.1.jar jboss-logging
+ -3.3.2.Final.jar gson-2.8.2.jar curvesapi-1.04.jar logback-classic-1.
+ 2.3.jar javax.annotation-api-1.3.2.jar slf4j-api-1.7.26.jar poi-ooxml
+ -3.17.jar hibernate-validator-6.0.16.Final.jar mongodb-driver-core-3.
+ 8.2.jar spring-context-5.1.6.RELEASE.jar spring-data-commons-2.1.6.RE
+ LEASE.jar xmlbeans-2.6.0.jar jackson-core-2.7.0.jar jul-to-slf4j-1.7.
+ 26.jar spring-web-5.1.6.RELEASE.jar jackson-datatype-jdk8-2.9.8.jar s
+ pring-jcl-5.1.6.RELEASE.jar log4j-api-2.11.2.jar mongodb-driver-3.8.2
+ .jar spring-core-5.1.6.RELEASE.jar spring-boot-starter-web-2.1.4.RELE
+ ASE.jar tomcat-embed-el-9.0.17.jar spring-expression-5.1.6.RELEASE.ja
+ r spring-webmvc-5.1.6.RELEASE.jar spring-tx-5.1.6.RELEASE.jar spring-
+ beans-5.1.6.RELEASE.jar spring-boot-autoconfigure-2.1.4.RELEASE.jar h
+ anlp-portable-1.7.0.jar spring-boot-2.1.4.RELEASE.jar classmate-1.4.0
+ .jar commons-fileupload-1.2.1.jar
+Main-Class: edu.nju.BugApplication
+

BIN
src/main/java/edu/.DS_Store


BIN
src/main/java/edu/nju/.DS_Store


+ 13 - 0
src/main/java/edu/nju/BugApplication.java

@@ -0,0 +1,13 @@
+package edu.nju;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BugApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(BugApplication.class, args);
+    }
+
+}

+ 244 - 0
src/main/java/edu/nju/controller/AnalyzeController.java

@@ -0,0 +1,244 @@
+package edu.nju.controller;
+
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.AnalyzeService;
+import edu.nju.service.ReportService;
+
+@Controller
+@RequestMapping(value = "/analyze")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class AnalyzeController {
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	@Autowired
+	ReportService rservice;
+	
+	//根据用例获取所有有效bug
+	@RequestMapping(value = "/valid")
+	@ResponseBody
+	public void getValid(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> list = aservice.getValid(case_take_id);
+			result.put("Count", list.size());
+			result.put("Detail", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有有点赞记录的bug
+	@RequestMapping(value = "/thums")
+	@ResponseBody
+	public void getThums(String case_take_id, HttpServletResponse response) {
+		try {
+			JSONObject result = new JSONObject();
+			PrintWriter out = response.getWriter();
+			Map<String, String> map = aservice.getThums(case_take_id);
+			result.put("Count", map.size());
+			result.put("Detail", new JSONObject(map));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 47.99.140.117:9001/Bug/api/analyze/scores
+	 *
+	 * @param case_take_id
+	 *            caseId - taskId,示例1632-2927
+	 * @return [{"名字":"庄坤涛","report_id":"10010000035757","报告得分":28,"审查得分":4,"worker_id":"39669"}]
+	 */
+	@RequestMapping(value = "/scores")
+	@ResponseBody
+	public void getScores(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(aservice.getScores(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 47.99.140.117:9001/Bug/api/analyze/newScores
+	 *
+	 * @param case_take_id
+	 *            caseId - taskId,示例1632-2927
+	 * @return [{"名字":"庄坤涛","report_id":"10010000035757","报告得分":28,"审查得分":4,"worker_id":"39669"}]
+	 */
+	@RequestMapping(value = "/newScores")
+	@ResponseBody
+	public void getNewScores(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(aservice.getNewScores(aservice.getScores(case_take_id)));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有的参与用户
+	@RequestMapping(value = "/users")
+	@ResponseBody
+	public void getUsers(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(new JSONArray(aservice.getReports(case_take_id)));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取指定bug的打分等级
+	@RequestMapping(value = "/grade")
+	@ResponseBody
+	public void getGrade(String id, HttpServletResponse response) {
+		try {
+			JSONObject result = new JSONObject();
+			result.put("grade", aservice.getGrade(id));
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//存储单个bug的打分等级
+	@RequestMapping(value = "/save")
+	@ResponseBody
+	public void saveGrade(String id, String grade, HttpServletResponse response) {
+		try {
+			JSONObject result = new JSONObject();
+			if(aservice.saveGrade(id, Integer.parseInt(grade))) {result.put("status", "200");}
+			else {result.put("status", "500");}
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取页面和种类的分布情况
+	@RequestMapping(value = "/bugDetail")
+	@ResponseBody
+	public void getDetail(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(aservice.getCaseDetail(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有打分等级
+	@RequestMapping(value = "/allGrades")
+	@ResponseBody
+	public void getAllGrades(String case_take_id, HttpServletResponse response) {
+		try {
+			JSONObject result = new JSONObject();
+			Map<String, Integer> map = aservice.getAllGrades(case_take_id);
+			result.put("Count", map.size());
+			result.put("Detail", new JSONObject(map));
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//判断哪些还没有打分,split后面是用例表中不存在的bug
+	@RequestMapping(value = "/diff")
+	@ResponseBody
+	public void getDiff(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> list = aservice.getDiff(case_take_id);
+			result.put("Count", list.size());
+			result.put("Detail", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取路径信息
+	@RequestMapping(value = "/path")
+	@ResponseBody
+	public void getUserPath(String case_take_id, String report_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			result.put("all", filter(aservice.getBugDetail(case_take_id)));
+			result.put("self", filter(rservice.getUserPath(report_id, case_take_id)));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	private Map<String, Integer> filter(Map<String, Integer> maps) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		for(Map.Entry<String, Integer> entry : maps.entrySet()) {
+			String[] pages = entry.getKey().split("-");
+			if(pages.length > 0) {
+				String key = pages[pages.length - 1];
+				result.put(key, result.getOrDefault(key, 0) + entry.getValue());
+			}
+		}
+		return result;
+	}
+}

+ 91 - 0
src/main/java/edu/nju/controller/AnnotationController.java

@@ -0,0 +1,91 @@
+package edu.nju.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.entities.ImageAnnotation;
+import edu.nju.service.AnnotationService;
+
+@Controller
+@RequestMapping(value = "/annotation")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class AnnotationController {
+	
+	@Autowired
+	AnnotationService anservice;
+	
+	//存储标注信息
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	@ResponseBody
+	public void saveAnnotation(String id, String width, String height, @RequestParam("xs") String[] xs, @RequestParam("ys") String[] ys,HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			if(anservice.save(id, width, height, xs, ys)) {
+				result.put("status", "200");
+			} else {
+				result.put("status", "500");
+			}
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取标注信息
+	@RequestMapping(value = "/get")
+	@ResponseBody
+	public void getAnnotation(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			ImageAnnotation result = anservice.get(id);
+			if(result != null) {
+				out.print(new JSONObject(result));
+			} else {
+				JSONObject temp = new JSONObject();
+				temp.put("status", "500");
+				out.print(temp);
+			}
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//删除标注数据
+	@RequestMapping(value = "/delete")
+	@ResponseBody
+	public void deleteAnnotation(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			if(anservice.delete(id)) {
+				result.put("status", "200");
+			} else {
+				result.put("status", "500");
+			}
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}

+ 85 - 0
src/main/java/edu/nju/controller/DeleteController.java

@@ -0,0 +1,85 @@
+package edu.nju.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.DeleteService;
+
+@Controller
+@RequestMapping(value = "/delete")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class DeleteController {
+	
+	@Autowired
+	DeleteService deleteservice;
+	
+	//删除指定的case
+	@RequestMapping(value = "/case")
+	@ResponseBody
+	public void deleteCase(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(deleteservice.deleteCase(case_take_id));
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//数据库删除单条bug
+	@RequestMapping(value = "/one")
+	@ResponseBody
+	public void deleteOne(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(deleteservice.deleteOne(id));
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//指定bug无效
+	@RequestMapping(value = "/bug")
+	@ResponseBody
+	public void deleteBug(String id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(deleteservice.deleteBug(id)) {result.put("status", "200");}
+		else {result.put("status", "500");}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/update")
+	@ResponseBody
+	public void update_case_take(String report_id, String case_take_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(deleteservice.updateCaseTake(report_id, case_take_id)) {result.put("status", "200");}
+		else {result.put("status", "500");}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 324 - 0
src/main/java/edu/nju/controller/ExtraController.java

@@ -0,0 +1,324 @@
+package edu.nju.controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import edu.nju.entities.Bug;
+import edu.nju.entities.Exam;
+import edu.nju.entities.Report;
+import edu.nju.entities.TestCase;
+import edu.nju.service.ExtraService;
+import org.springframework.web.multipart.MultipartFile;
+
+@Controller
+@RequestMapping(value = "/extra")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class ExtraController {
+	@Autowired
+	ExtraService extraService;
+	
+	//上传测试报告
+	@RequestMapping(value = "/uploadReport", method = RequestMethod.POST)
+	@ResponseBody
+	public void uploadReport(String case_id, String task_id, String case_take_id, String worker_id, String name, String device_model,
+			String device_brand, String device_os, String script_location, String report_location, 
+			String log_location, HttpServletResponse response) {
+		try {
+			String id = extraService.saveReport(case_id, task_id, case_take_id, worker_id, name, device_model, device_brand, device_os, script_location, report_location, log_location);
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			result.put("id", id);
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	//上传测试报告
+	@RequestMapping(value = "/updateReport", method = RequestMethod.POST)
+	@ResponseBody
+	public void updateReport(String report_id, String case_id, String task_id, String case_take_id, String worker_id, String name, String device_model,
+							 String device_brand, String device_os, String script_location, String report_location,
+							 String log_location, HttpServletResponse response) {
+		try {
+			boolean bool = extraService.updateReport(report_id, case_id, task_id, case_take_id, worker_id, name,
+					device_model, device_brand, device_os, script_location, report_location, log_location);
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			if(bool) { result.put("status", 200); }
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取测试报告
+	@RequestMapping(value = "/getReport")
+	@ResponseBody
+	public void getReport(String report_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			Report report = extraService.getReport(report_id);
+			if(report != null) { 
+				result.put("status", 200);
+				result.put("result", new JSONObject(report));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//使用worker_id获取测试报告
+	@RequestMapping(value = "/findByWorker")
+	@ResponseBody
+	public void findByWorker(String case_take_id, String worker_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			Report report = extraService.findByWorker(case_take_id, worker_id);
+			if(report != null) { 
+				result.put("status", 200);
+				result.put("result", new JSONObject(report));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	//获取测试用例列表
+	@RequestMapping(value = "/getCaseList")
+	@ResponseBody
+	public void getCaseList(String report_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<TestCase> caseList = extraService.getCaseList(report_id);
+			if(caseList != null) { 
+				result.put("status", 200);
+				result.put("result", new JSONArray(caseList));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取测试Bug列表
+	@RequestMapping(value = "/getBugList")
+	@ResponseBody
+	public void getBugList(String report_id, String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<Bug> bugList = extraService.getBugList(report_id, case_take_id);
+			if(bugList != null && bugList.size() > 0) { 
+				result.put("status", 200);
+				result.put("result", new JSONArray(bugList));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 47.99.140.117:9001/Bug/api/extra/uploadExam
+	 *
+	 * @param file
+	 *            文件流
+	 * @param case_id
+	 * 			  测试目标id
+	 * @param file_name
+	 *            上传excel的文件名
+	 * @param paper_type
+	 * 			  试卷类型,即试卷的显示矩阵
+	 * @param test_type
+	 * 			  测试分类,如工具
+	 * @param description
+	 * 			  测试说明
+	 * @param app_name
+	 * 			  测试目标的名称
+	 * @return JSONArray
+	 */
+	@RequestMapping(value = "/uploadExam", method = RequestMethod.POST)
+	@ResponseBody
+	public String uploadExam(@RequestParam("file") MultipartFile file, String file_name, String paper_type,
+							     String case_id, String test_type, String description, String app_name) {
+		try {
+			File dest = new File("/Users/hannatao/Downloads/" + file_name);
+			if(!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); }
+			if(!file.isEmpty()) { file.transferTo(dest); }
+			String json = extraService.saveExam(case_id, dest.getPath(), app_name, paper_type, test_type, description);
+			return json;
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return "";
+		}
+	}
+
+	/**
+	 * 47.99.140.117:9001/Bug/api/extra/getExamList
+	 *
+	 * @return 200 成功; 500 失败
+	 */
+	@RequestMapping(value = "/getExamList", method = RequestMethod.GET)
+	@ResponseBody
+	public void getExamList(HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			result.put("data", extraService.getExamList());
+			result.put("status", 200);
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取题目信息
+	@RequestMapping(value = "/getExam")
+	@ResponseBody
+	public void getExam(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			Exam exam = extraService.getExam(id);
+			if(exam != null) { 
+				result.put("status", 200);
+				result.put("result", new JSONObject(exam));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//上传测试用例
+	@RequestMapping(value = "/uploadTestCase", method = RequestMethod.POST)
+	@ResponseBody
+	public void uploadTestCase(String report_id, String name, String front, String behind, 
+			String description, HttpServletResponse response) {
+		try {
+			String id = extraService.saveTestCase(report_id, name, front, behind, description);
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			result.put("id", id);
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取测试用例
+	@RequestMapping(value = "/getTestCase")
+	@ResponseBody
+	public void getTestCase(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			TestCase testCase = extraService.getTestCase(id);
+			if(testCase != null) { 
+				result.put("status", 200);
+				result.put("result", new JSONObject(testCase));
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//更新测试用例
+	@RequestMapping(value = "/updateTestCase", method = RequestMethod.POST)
+	@ResponseBody
+	public void updateTestCase(String id, String report_id, String name, String front, String behind, 
+			String description, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			if(extraService.updateTestCase(id, report_id, name, front, behind, description)) {
+				result.put("status", 200);
+			} else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取页面json
+	@RequestMapping(value = "/getJson")
+	@ResponseBody
+	public void getJson(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			Exam exam = extraService.getExam(id);
+			if(exam != null) { 
+				result.put("status", 200);
+				result.put("result", exam.getJson());
+			}
+			else { result.put("status", 500); }
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+}

+ 113 - 0
src/main/java/edu/nju/controller/GraphController.java

@@ -0,0 +1,113 @@
+package edu.nju.controller;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.GraphService;
+
+@Controller
+@RequestMapping(value = "/graph")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class GraphController {
+
+	@Autowired
+	GraphService gservice;
+	
+	@RequestMapping(value = "/11")
+	@ResponseBody
+	public void get_case_bug_valid(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_case_bug_valid(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/12")
+	@ResponseBody
+	public void get_thums_total_valid(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_thums_total_valid(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/13")
+	@ResponseBody
+	public void get_valid_thums(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_valid_thums(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/14")
+	@ResponseBody
+	public void get_valid_fork(String case_take_id, String time, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_valid_fork(case_take_id, time));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/21")
+	@ResponseBody
+	public void ThumsToScores(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.ThumsToScores(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/22")
+	@ResponseBody
+	public void get_bug_fork(String case_take_id, String time, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_bug_fork(case_take_id, time));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/31")
+	@ResponseBody
+	public void get_rec_fork_valid_thums(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(gservice.get_rec_fork_valid_thums(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 164 - 0
src/main/java/edu/nju/controller/HistoryController.java

@@ -0,0 +1,164 @@
+package edu.nju.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.AnalyzeService;
+import edu.nju.service.HistoryService;
+import edu.nju.service.RecommendService;
+
+@Controller
+@RequestMapping(value = "/history")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class HistoryController {
+	
+	@Autowired
+	HistoryService hisservice;
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	@Autowired
+	RecommendService recservice;
+	
+	//获取指定节点的历史信息
+	@RequestMapping(value = "/getHistory")
+	@ResponseBody
+	public void getHistory(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(new JSONObject(hisservice.getHistory(id)));
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有根节点
+	@RequestMapping(value = "/getRoots")
+	@ResponseBody
+	public void getRoots(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> list = hisservice.getRoots(case_take_id);
+			result.put("Count", list.size());
+			result.put("TreeRoot", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有形成树状结构的bug根节点
+	@RequestMapping(value = "/getTrees")
+	@ResponseBody
+	public void getTrees(String case_take_id, String start, String count, String page, HttpSession session, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> all = hisservice.getTreeRoots(case_take_id);
+			hisservice.pageFilter(all, page);
+			List<String> ids = all.subList(Integer.parseInt(start), Math.min(all.size(), Integer.parseInt(start) + Integer.parseInt(count)));
+			List<List<String>> list = new ArrayList<List<String>>();
+			for(String id: ids) {
+				list.add(hisservice.getDetail(id));
+			}
+			result.put("Count", all.size());
+			result.put("TreeRoot", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取所有单个节点的数据
+	@RequestMapping(value = "/getSingle")
+	@ResponseBody
+	public void getSingle(String case_take_id, String start, String count, String page, HttpSession session, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> all = new ArrayList<String>();
+			for(String id : hisservice.getRoots(case_take_id)) {
+				if(hisservice.getHistory(id).getChildren().size() == 0) {all.add(id);}
+			}
+			hisservice.pageFilter(all, page);
+			List<String> ids = all.subList(Integer.parseInt(start), Math.min(all.size(), Integer.parseInt(start) + Integer.parseInt(count)));
+			List<String> invalid = hisservice.getInvalid(ids);
+			for(String id: invalid) {
+				if(ids.contains(id)) {ids.remove(id);}
+			}
+			
+			List<List<String>> list = new ArrayList<List<String>>();
+			for(String id : ids) {
+				List<String> temp = new ArrayList<String>();
+				temp.add(id);
+				int score = aservice.getGrade(id);
+				if(score != -1) {temp.add("true");}
+				else {temp.add("false");}
+				temp.add(recservice.getTitle(id));
+				list.add(temp);
+			}
+			result.put("Count", all.size());
+			result.put("TreeRoot", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//获取指定bug的所有路径
+	@RequestMapping(value = "/getPath")
+	@ResponseBody
+	public void getPath(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<List<String>> lists = hisservice.getDepth(id);
+			Set<String> filter = hisservice.filter(lists);
+			result.put("path", new JSONArray(lists));
+			result.put("invalid", new JSONArray(hisservice.getInvalid(filter)));
+			List<String> ids = new ArrayList<String>(filter);
+			result.put("score", new JSONArray(aservice.getScores(ids)));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/fresh")
+	@ResponseBody
+	public void fresh(HttpSession session, HttpServletResponse response) {
+		if(session.getAttribute("trees") != null) {session.removeAttribute("trees");}
+		if(session.getAttribute("single") != null) {session.removeAttribute("single");}
+	}
+}

+ 63 - 0
src/main/java/edu/nju/controller/OssController.java

@@ -0,0 +1,63 @@
+package edu.nju.controller;
+
+import edu.nju.service.OssService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+@Controller
+@RequestMapping(value = "/oss")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class OssController {
+
+    @Autowired
+    OssService oservice;
+
+    @RequestMapping(value = "/ossConf")
+    @ResponseBody
+    public void getOssConf(HttpServletResponse response) {
+        try {
+            PrintWriter out = response.getWriter();
+            out.print(oservice.getOssConf());
+            out.flush();
+            out.close();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    @RequestMapping(value = "/featureConf")
+    @ResponseBody
+    public void getFeatureConf(HttpServletResponse response) {
+        try {
+            PrintWriter out = response.getWriter();
+            out.print(oservice.getFeatureConf());
+            out.flush();
+            out.close();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    @RequestMapping(value = "/ossUpload", method = RequestMethod.POST)
+    @ResponseBody
+    public String ossUpload(@RequestParam("file") MultipartFile file, String path) {
+        File dest = new File("/Users/hannatao/Downloads" + path);
+        if(!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); }
+        try {
+            if(!file.isEmpty()) { file.transferTo(dest); }
+            return "true";
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "false";
+    }
+}

+ 232 - 0
src/main/java/edu/nju/controller/RecommendController.java

@@ -0,0 +1,232 @@
+package edu.nju.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugMirror;
+import edu.nju.service.DivRecService;
+import edu.nju.service.HistoryService;
+import edu.nju.service.RecommendService;
+import edu.nju.service.UserBasedService;
+
+@Controller
+@RequestMapping(value = "/rec")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class RecommendController {
+	
+	@Autowired
+	RecommendService recservice;
+	
+	@Autowired
+	HistoryService historyservice;
+	
+	@Autowired
+	UserBasedService ubservice;
+	
+	@Autowired
+	DivRecService divservice;
+	
+	/**
+	 * 每次刷新或进入填写页面,都应该调用一次该方法,因为其中包含了一些初始化操作
+	 * @param case_take_id
+	 * @return 该题目下排完序的BugMirror类的列表
+	 */
+	@RequestMapping(value = "/getList")
+	@ResponseBody
+	public void getList(String case_take_id, String report_id, HttpSession session, HttpServletResponse response) {
+		try {
+			if(session.getAttribute("rec") != null) {
+				session.removeAttribute("rec");
+			}
+			if(session.getAttribute("page") != null) {
+				session.removeAttribute("page");
+			}
+			if(session.getAttribute("path") != null) {
+				session.removeAttribute("path");
+			}
+			if(session.getAttribute("title") != null) {
+				session.removeAttribute("title");
+			}
+			if(session.getAttribute("des") != null) {
+				session.removeAttribute("des");
+			}
+			session.setAttribute("case", case_take_id);
+			session.setAttribute("report", report_id);
+			PrintWriter out = response.getWriter();
+			List<BugMirror> mirrors = recservice.getList(case_take_id, report_id);
+			filter(historyservice.getNew(case_take_id, report_id), mirrors);
+			out.print(new JSONArray(mirrors));
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * 用户点击查看一个Bug的详细信息
+	 * @param id
+	 * @return Bug类
+	 */
+	@RequestMapping(value = "/getDetail")
+	@ResponseBody
+	public void getDetail(String id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		try {
+			Bug bug = recservice.getDetail(id);
+			if(bug != null) {
+				result.put("detail", new JSONObject(bug));
+				result.put("history", new JSONObject(historyservice.getHistory(id)));
+				result.put("mirror", new JSONObject(recservice.getMirror(id)));
+			}
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * 用户点击六个类别之后,都使用该接口
+	 * @param type("category", "severity", "recurrent", "page1", "page2", "page3"), content
+	 * @return List<BugMirror>
+	 */
+	@RequestMapping(value = "/recommend")
+	@ResponseBody
+	public void recommend(String case_take_id, String type, String content, HttpSession session, HttpServletResponse response) {
+		try {
+			JSONObject result = new JSONObject();
+			PrintWriter out = response.getWriter();
+			List<BugMirror> mirror1 = new ArrayList<BugMirror>();
+			List<Float> scores = new ArrayList<Float>();
+			Set<BugMirror> mirror2 = new HashSet<BugMirror>();
+			Map<BugMirror, Float> map;
+			if(type.equals("title") || type.equals("description")) {
+				if(type.equals("title")) {map = recservice.recommandByTitle(content, session);}
+				else {map = recservice.recommandByDes(content, session);}
+				if(mirror1 != null) {
+					mirror1.addAll(map.keySet());
+					scores.addAll(map.values());
+				}
+			} else {
+				if(type.contains("page")) {map = recservice.recommndByPage(case_take_id, type, content, true, session);}
+				else {map = recservice.recommend(case_take_id, type, content, true, session);}
+				List<String> reports = new ArrayList<String>();
+				reports.add((String)session.getAttribute("report"));
+				if(mirror1 != null) {
+					mirror1.addAll(map.keySet());
+					scores.addAll(map.values());
+				}
+//				for(int i = 1; i <= mirror1.size(); i ++) {
+//					String temp = recservice.getReport(mirror1.get(i - 1).getId());
+//					if(!reports.contains(temp)) {reports.add(temp);}
+//				}
+//				mirror2.addAll(ubservice.UserBased(reports.toArray(new String[reports.size()])));
+			}
+//			mirror2.addAll(historyservice.getNew(case_take_id, (String)session.getAttribute("report")));
+//			filter(mirror2, mirror1);
+			result.put("same", new JSONArray(mirror1));
+			result.put("scores", new JSONArray(scores));
+			result.put("new", new JSONArray(mirror2));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/diversity")
+	@ResponseBody
+	public void diversityRec(String case_take_id, String report_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.println(new JSONArray(divservice.diverseRec(report_id, case_take_id)));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//获取标题
+	@RequestMapping(value = "/title")
+	@ResponseBody
+	public void getTitle(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(recservice.getTitle(id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//fork时,传回所有的选择参数
+	@RequestMapping(value = "/fork")
+	@ResponseBody
+	public void fork(String page1, String page2, String page3, String bug_category, String severity, String recurrent, HttpSession session, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			Map<String, String> map = new LinkedHashMap<String, String>();
+			if(!page1.equals("null")) {map.put("page1", page1);}
+			if(!page2.equals("null")) {map.put("page2", page2);}
+			if(!page3.equals("null")) {map.put("page3", page3);}
+			map.put("bug_category", bug_category);
+			map.put("severity", severity);
+			map.put("recurrent", recurrent);
+			session.setAttribute("path", map);
+			result.put("status", 200);
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	public static void filter(List<BugMirror> a, List<BugMirror> b) {
+		if(a == null) {return;}
+		for(BugMirror a1: a) {
+			boolean flag = true;
+			for(BugMirror b1 : b) {
+				if(a1.getId().equals(b1.getId())) {flag = false;}
+			}
+			if(flag) {b.add(a1);}
+		}
+	}
+	
+	public static void filter(Set<BugMirror> a, List<BugMirror> b) {
+		if(a == null || b == null) {return;}
+		for(BugMirror mirror : b) {
+			if(a.contains(mirror)) {a.remove(mirror);}
+		}
+	}
+}

+ 72 - 0
src/main/java/edu/nju/controller/RelationController.java

@@ -0,0 +1,72 @@
+package edu.nju.controller;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.CTBService;
+
+@Controller
+@RequestMapping(value = "/relation")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class RelationController {
+	
+	@Autowired
+	CTBService ctbservice;
+	
+	//获取用例下的所有bug
+	@RequestMapping(value = "/CTB")
+	@ResponseBody
+	public void getCTB(String useCase, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(new JSONArray(ctbservice.findById(useCase)));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//删除单条bug
+	@RequestMapping(value = "/remove")
+	@ResponseBody
+	public void removeCTB(String useCase, String bug_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(ctbservice.remove(useCase, bug_id)) {result.put("status", "200");}
+		else {result.put("status", "500");}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//删除一个用例下的所有bug
+	@RequestMapping(value = "/removeAll")
+	@ResponseBody
+	public void removeCase(String useCase, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(ctbservice.removeAll(useCase)) {result.put("status", "200");}
+		else {result.put("status", "500");}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 177 - 0
src/main/java/edu/nju/controller/ReportController.java

@@ -0,0 +1,177 @@
+package edu.nju.controller;
+
+import java.io.PrintWriter;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.entities.BugMirror;
+import edu.nju.service.DotService;
+import edu.nju.service.GuideService;
+import edu.nju.service.ReportService;
+
+@Controller
+@RequestMapping(value = "/report")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class ReportController {
+	
+	@Autowired
+	ReportService rservice;
+	
+	@Autowired
+	GuideService gservice;
+	
+	@Autowired
+	DotService dservice;
+	
+	//获取用户的有效信息
+	@RequestMapping(value = "/report")
+	@ResponseBody
+	public void getReport(String report_id, String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			result.put("Valid Thumsup", rservice.getValidThums(report_id) + "/" + rservice.getAllThums(report_id).size());
+			result.put("Valid Diss", rservice.getValidDiss(report_id) + "/" + rservice.getAllDiss(report_id).size());
+			result.put("Path Cover", rservice.getUserPath(report_id, case_take_id));
+			result.put("Valid Bug", rservice.getValid(report_id, case_take_id) + "/" + rservice.getUserBugs(report_id, case_take_id).size());
+			result.put("Time Gap", rservice.getTimeGap(report_id, case_take_id));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/ThumsRank")
+	@ResponseBody
+	public void ThumsRank(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			response.setContentType("text/html; charset=utf-8");
+			out.print(rservice.getThumsRank(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/ForkRank")
+	@ResponseBody
+	public void ForkRank(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(rservice.getForkRank(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/relations")
+	@ResponseBody
+	public void relations(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(rservice.relations(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/keyWords")
+	@ResponseBody
+	public void keyWords(String id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(rservice.keyWords(id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/charm")
+	@ResponseBody
+	public void charm(String case_take_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(rservice.charm(case_take_id));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//我是分隔符////////////
+	@RequestMapping(value = "/record")
+	@ResponseBody
+	public void userRecord(String user_id, String target_id, String action, String remarks, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(dservice.saveRecord(user_id, target_id, action, remarks));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/pageRec")
+	@ResponseBody
+	public void pageRec(String case_take_id, String report_id, HttpSession session, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			String result = gservice.workPlan(report_id, case_take_id, session);
+			JSONObject object = new JSONObject();
+			String[] temp1 = result.split(":");
+			object.put("info", result);
+			if(temp1.length == 1) { object.put("page", ""); }
+			else {
+				String[] pages = temp1[1].split(";");
+				object.put("page", pages);
+			}
+			out.print(object);
+			dservice.saveRecord(report_id, case_take_id, "pageRec", result);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/bugRec")
+	@ResponseBody
+	public void bugRec(String case_take_id, String report_id, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			List<BugMirror> result = gservice.PMFRecomend(report_id, case_take_id);
+			out.print(new JSONArray(result));
+			String remarks = "";
+			for(BugMirror mirror: result) {
+				remarks += mirror.getId() + ",";
+			}
+			dservice.saveRecord(report_id, case_take_id, "bugRec", remarks);
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 222 - 0
src/main/java/edu/nju/controller/UploadController.java

@@ -0,0 +1,222 @@
+package edu.nju.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import edu.nju.service.CTBService;
+import edu.nju.service.SaveService;
+
+@Controller
+@RequestMapping(value = "/upload")
+@CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
+public class UploadController {
+	
+	@Autowired
+	SaveService saveservice;
+	
+	@Autowired
+	CTBService ctbservice;
+	
+	//上传新的Bug报告
+	@RequestMapping(value = "/submit", method = RequestMethod.POST)
+	@ResponseBody
+	public void submit(String useCase, String case_take_id, String bug_category, String description, String img_url, String severity, String recurrent, String title, String report_id, String parent, String page, String case_id, String worker_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		boolean flag = true;
+		String id = saveservice.save(case_take_id, bug_category, description, img_url, severity, recurrent, title, report_id, parent, page, useCase, case_id);
+		if(!useCase.equals("null") && !id.equals("")) {flag = ctbservice.save(useCase, id, case_take_id, report_id);}
+		if(flag && !id.equals("")) {
+			result.put("status", "200");
+			result.put("id", id);
+		}
+		else {result.put("status", "500");}
+		try {
+			PrintWriter out = response.getWriter();
+			saveservice.saveStu(report_id, worker_id);
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//对已有报告进行修改
+//	@RequestMapping(value = "/update", method = RequestMethod.POST)
+//	@ResponseBody
+//	public void update(String id, String case_take_id, String bug_category, String description, String img_url, String severity, String recurrent, String title, String report_id, String parent, String page, HttpServletResponse response) {
+//		JSONObject result = new JSONObject();
+//		if(saveservice.update(id, case_take_id, bug_category, description, img_url, Integer.parseInt(severity), Integer.parseInt(recurrent), title, report_id, parent, page)) {
+//			result.put("status", "200");
+//		} else {
+//			result.put("status", "500");
+//		}
+//		try {
+//			PrintWriter out = response.getWriter();
+//			out.print(result);
+//			out.flush();
+//			out.close();
+//		} catch (IOException e) {
+//			e.printStackTrace();
+//		}
+//	}
+	
+	//👍
+	@RequestMapping(value = "/good")
+	@ResponseBody
+	public void good(String id, String report_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.confirm(id, report_id)) {
+			result.put("status", "200");
+		} else {
+			result.put("status", "500");
+		}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	//取消点赞
+	@RequestMapping(value = "/cancelGood")
+	@ResponseBody
+	public void cancelGood(String id, String report_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.cancelGood(id, report_id)) {
+			result.put("status", "200");
+		} else {
+			result.put("status", "500");
+		}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//差评
+	@RequestMapping(value = "/bad")
+	@ResponseBody
+	public void bad(String id, String report_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.diss(id, report_id)) {
+			result.put("status", "200");
+		} else {
+			result.put("status", "500");
+		}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	//取消差评
+	@RequestMapping(value = "/cancelBad")
+	@ResponseBody
+	public void cancelBad(String id, String report_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.cancelDiss(id, report_id)) {
+			result.put("status", "200");
+		} else {
+			result.put("status", "500");
+		}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/repair", method = RequestMethod.POST)
+	@ResponseBody
+	public void repair(String id, String page, String case_take_id, String bug_category, String description, String img_url, String severity, String recurrent, String report_id, String case_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.repair(id, page, case_take_id, bug_category, description, img_url, severity, recurrent, report_id, case_id)) {
+			result.put("status", "200");
+		} else {
+			result.put("status", "500");
+		}
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/title", method = RequestMethod.POST)
+	@ResponseBody
+	public void saveTitle(String id, String title, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.saveTitle(id, title)) { result.put("status", "200"); }
+		else { result.put("status", "500"); }
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/thums")
+	@ResponseBody
+	public void repairThums(String case_take_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.repairThums(case_take_id)) { result.put("status", "200"); }
+		else { result.put("status", "500"); }
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@RequestMapping(value = "/time")
+	@ResponseBody
+	public void repairTime(String case_take_id, HttpServletResponse response) {
+		JSONObject result = new JSONObject();
+		if(saveservice.repairTime(case_take_id)) { result.put("status", "200"); }
+		else { result.put("status", "500"); }
+		try {
+			PrintWriter out = response.getWriter();
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 38 - 0
src/main/java/edu/nju/dao/AnnotationDao.java

@@ -0,0 +1,38 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.ImageAnnotation;
+
+@Repository
+public class AnnotationDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(ImageAnnotation a) {
+		mongoOperations.save(a);
+	}
+	
+	//根据id删除文档
+	public void remove(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		mongoOperations.remove(query,ImageAnnotation.class);
+	}
+	
+	//根据id删除文档
+	public ImageAnnotation findById(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<ImageAnnotation> lists = mongoOperations.find(query, ImageAnnotation.class);
+		if(lists == null || lists.size() == 0) {return null;}
+		return lists.get(0);
+	}
+}

+ 119 - 0
src/main/java/edu/nju/dao/BugDao.java

@@ -0,0 +1,119 @@
+package edu.nju.dao;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.Bug;
+
+@Repository
+public class BugDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	//save存在则更新,不存在则插入
+	public String save(Bug bug) {
+		mongoOperations.save(bug);
+		return bug.getId();
+	}
+	
+	//insert存在则不做处理,不存在则插入
+	public void insert(Bug bug){
+	    mongoOperations.insert(bug);
+	}
+	
+	//根据id删除文档
+	public void remove(String id){
+	    Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    mongoOperations.remove(query);
+	}
+	
+	//根据ids删除文档
+	public void remove(List<String> ids){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		mongoOperations.remove(query,Bug.class);
+	}
+	
+	//根据report_id查找所有的Bug
+	public List<String> findByReport(String report_id) {
+		List<String> result = new ArrayList<String>();
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("report_id").is(report_id));
+	    List<Bug> lists = mongoOperations.find(query,Bug.class);
+	    for(Bug list : lists) {
+	    	result.add(list.getId());
+	    }
+	    return result;
+	}
+	
+	public List<Bug> findByReport(String report_id, String case_take_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").is(report_id).and("case_take_id").is(case_take_id));
+		return mongoOperations.find(query,Bug.class);
+	}
+	
+	//根据id更新文档
+//	public int update(Bug bug){
+//	    Query query = new Query();
+//	    query.addCriteria(Criteria.where("_id").is(bug.getId()));
+//	    Update update = new Update();
+//	    update.set("bug_category",bug.getBug_category());
+//	    return mongoOperations.updateFirst(query,update,Bug.class).getN();
+//	}
+
+	//id查询,find查询所有
+	public Bug findByid(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<Bug> list = mongoOperations.find(query,Bug.class);
+		if(list.size() == 0 || list == null) {return null;}
+		return list.get(0);
+	}
+	
+	//case条件查询,find查询所有
+	public List<Bug> findByCaseid(String case_take_id) {
+	    Query query = new Query();
+	    query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+	    return mongoOperations.find(query,Bug.class);
+	}
+	
+	public List<String> findByCase(String case_take_id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+	    List<String> result = new ArrayList<String>();
+	    List<Bug> bugs = mongoOperations.find(query,Bug.class);
+	    if(bugs != null) { for(Bug bug : bugs) { result.add(bug.getId()); } }
+	    return result;
+	}
+	
+	public void update_case_take(String report_id,String case_take_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").is(report_id));
+		List<Bug> list = mongoOperations.find(query, Bug.class);
+		for(Bug mirror : list) {
+			mirror.setCase_take_id(case_take_id);
+			mongoOperations.save(mirror);
+		}
+	}
+
+	public Set<String> findAllids() {
+		Set<String> result = new HashSet<>();
+		List<Bug> list = mongoOperations.findAll(Bug.class);
+		for(Bug bug: list) {
+			String id = bug.getCase_take_id();
+			if(id != null && id.length() > 0) { result.add(id); }
+		}
+		return result;
+	}
+}

+ 92 - 0
src/main/java/edu/nju/dao/BugHistoryDao.java

@@ -0,0 +1,92 @@
+package edu.nju.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.BugHistory;
+
+@Repository
+public class BugHistoryDao {
+	
+	@Autowired
+	MongoOperations mongoOps;
+	
+	//save存在则更新,不存在则插入
+	public void save(BugHistory history){
+		mongoOps.save(history);
+	}
+	
+	//id查询,find查询所有
+	public BugHistory findByid(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<BugHistory> history = mongoOps.find(query,BugHistory.class);
+		if(history != null && history.size() != 0) { return history.get(0); }
+		else { return null; }
+	}
+	
+	//查找所有指定的根
+	public List<String> findRoots(List<String> lists) {
+		if(lists == null || lists.size() == 0) {return new ArrayList<String>();}
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(lists).and("parent").is("null"));
+		List<BugHistory> roots = mongoOps.find(query,BugHistory.class);
+		List<String> ids = new ArrayList<String>();
+		for(BugHistory root: roots) {
+			ids.add(root.getRoot());
+		}
+		return ids;
+	}
+	
+	//查找所有的BugRoot
+	public List<String> findRoots() {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("parent").is("null"));
+		List<BugHistory> roots = mongoOps.find(query,BugHistory.class);
+		List<String> ids = new ArrayList<String>();
+		for(BugHistory root : roots) {
+			ids.add(root.getId());
+		}
+		return ids;
+	}
+	
+	//根据id删除文档
+	public void remove(String id){
+	    Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    mongoOps.remove(query,BugHistory.class);
+	}
+	
+	//根据ids删除文档
+	public void remove(List<String> ids){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		mongoOps.remove(query,BugHistory.class);
+	}
+	
+	//根据id查找
+	public BugHistory findParent(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		return mongoOps.find(query, BugHistory.class).get(0);
+	}
+	
+	//增加child
+	public void addChild(String id, String child) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		BugHistory temp_hisroty = (BugHistory) mongoOps.find(query, BugHistory.class).get(0);
+		Update update = new Update();
+		List<String> children = temp_hisroty.getChildren();
+		if(!children.contains(child)) {children.add(child);}
+		update.set("children", children);
+		mongoOps.updateFirst(query,update,BugHistory.class);
+	}
+}

+ 190 - 0
src/main/java/edu/nju/dao/BugMirrorDao.java

@@ -0,0 +1,190 @@
+package edu.nju.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.BugMirror;
+
+@Repository
+public class BugMirrorDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	//save存在则更新,不存在则插入
+	public void save(BugMirror mirror){
+	    mongoOperations.save(mirror);
+	}
+	
+	//根据id删除文档
+	public void remove(String id){
+	    Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    mongoOperations.remove(query);
+	}
+	
+	//根据ids删除文档
+	public void remove(List<String> ids){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		mongoOperations.remove(query,BugMirror.class);
+	}
+	
+	public List<BugMirror> findValid(String case_take_id) {
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("flag").is(true));
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<String> findIdsByReport(String report_id, String case_take_id) {
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("report_id").is(report_id).and("flag").is(true));
+		query.addCriteria(Criteria.where("report_id").is(report_id).and("case_take_id").is(case_take_id));
+		List<BugMirror> lists = mongoOperations.find(query, BugMirror.class);
+		List<String> result = new ArrayList<String>();
+		for(BugMirror mirror : lists) {
+			result.add(mirror.getId());
+		}
+		return result;
+	}
+	
+	public List<BugMirror> findByReport(String report_id, String case_take_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").is(report_id).and("case_take_id").is(case_take_id));
+		List<BugMirror> lists = mongoOperations.find(query, BugMirror.class);
+		return lists;
+	}
+	
+	public List<BugMirror> findByCase(String case_take_id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findByCase(String case_take_id, String report_id){
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("report_id").nin(report_id));
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findByCategory(String case_take_id, String bug_category, String report_id){
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("bug_category").is(bug_category).and("report_id").nin(report_id));
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("bug_category").is(bug_category));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findBySeverity(String case_take_id, int severity, String report_id){
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("severity").is(severity).and("report_id").nin(report_id));
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("severity").is(severity));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findByRecurrent(String case_take_id, int recurrent, String report_id){
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("recurrent").is(recurrent).and("report_id").nin(report_id));
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("recurrent").is(recurrent));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findByIds(List<String> ids){
+		if(ids == null || ids.size() == 0) {return new ArrayList<BugMirror>();}
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+	public List<BugMirror> findByIds(List<String> ids, String report_id){
+		if(ids == null || ids.size() == 0) {return new ArrayList<BugMirror>();}
+		Query query = new Query();
+//		query.addCriteria(Criteria.where("_id").in(ids).and("report_id").nin(report_id));
+		query.addCriteria(Criteria.where("_id").in(ids));
+		return mongoOperations.find(query, BugMirror.class);
+	}
+	
+//	public BugMirror findById(String id){
+//		Query query = new Query();
+//		query.addCriteria(Criteria.where("_id").is(id));
+//		return mongoOperations.find(query, BugMirror.class).get(0);
+//	}
+	
+	public BugMirror findById(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<BugMirror> mirror = mongoOperations.find(query, BugMirror.class);
+		if(mirror != null && mirror.size() > 0) { return mirror.get(0); }
+		else { return null; }
+	}
+	
+	public boolean haveJudged(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		BugMirror mirror = mongoOperations.find(query, BugMirror.class).get(0);
+		if(mirror.getGood().contains(report_id) || mirror.getBad().contains(report_id)) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+	
+	public void good(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		Update update = new Update();
+		Set<String> good = mongoOperations.find(query, BugMirror.class).get(0).getGood();
+		good.add(report_id);
+		update.set("good", good);
+		mongoOperations.updateFirst(query,update,BugMirror.class);
+	}
+	
+	public void cancelGood(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		Update update = new Update();
+		Set<String> good = mongoOperations.find(query, BugMirror.class).get(0).getGood();
+		if(good.contains(report_id)) { good.remove(report_id); }
+		update.set("good", good);
+		mongoOperations.updateFirst(query,update,BugMirror.class);
+	}
+	
+	public void bad(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		Update update = new Update();
+		Set<String> bad = mongoOperations.find(query, BugMirror.class).get(0).getBad();
+		bad.add(report_id);
+		update.set("bad", bad);
+		mongoOperations.updateFirst(query,update,BugMirror.class);
+	}
+	
+	public void canelBad(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		Update update = new Update();
+		Set<String> bad = mongoOperations.find(query, BugMirror.class).get(0).getBad();
+		if(bad.contains(report_id)) { bad.remove(report_id); }
+		update.set("bad", bad);
+		mongoOperations.updateFirst(query,update,BugMirror.class);
+	}
+	
+	public void update_case_take(String report_id,String case_take_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").is(report_id));
+		List<BugMirror> list = mongoOperations.find(query, BugMirror.class);
+		for(BugMirror mirror : list) {
+			mirror.setCase_take_id(case_take_id);
+			mongoOperations.save(mirror);
+		}
+	}
+}

+ 70 - 0
src/main/java/edu/nju/dao/BugPageDao.java

@@ -0,0 +1,70 @@
+package edu.nju.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.BugPage;
+
+@Repository
+public class BugPageDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	//save存在则更新,不存在则插入
+	public void save(BugPage page){
+	    mongoOperations.save(page);
+	}
+	
+	//根据id删除文档
+	public void remove(String id){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		mongoOperations.remove(query,BugPage.class);
+	}
+	
+	//根据ids删除文档
+	public void remove(List<String> ids){
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		mongoOperations.remove(query,BugPage.class);
+	}
+	
+	public BugPage findByid(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		return mongoOperations.find(query,BugPage.class).get(0);
+	}
+	
+	public List<BugPage> findByIds(List<String> ids) {
+		if(ids == null || ids.size() == 0) {return new ArrayList<BugPage>();}
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(ids));
+		return mongoOperations.find(query, BugPage.class);
+	}
+	
+	public List<BugPage> findByPage1(String case_take_id, String page1) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("page1").is(page1));
+		return mongoOperations.find(query,BugPage.class);
+	}
+	
+	public List<BugPage> findByPage2(String case_take_id, String page2) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("page2").is(page2));
+		return mongoOperations.find(query,BugPage.class);
+	}
+	
+	public List<BugPage> findByPage3(String case_take_id, String page3) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("page3").is(page3));
+		return mongoOperations.find(query,BugPage.class);
+	}
+	
+}

+ 42 - 0
src/main/java/edu/nju/dao/BugScoreDao.java

@@ -0,0 +1,42 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.BugScore;
+
+@Repository
+public class BugScoreDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(BugScore score) {
+		mongoOperations.save(score);
+	}
+	
+	public BugScore findById(String id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    List<BugScore> list = mongoOperations.find(query, BugScore.class);
+	    if(list != null && list.size() != 0) {return list.get(0);}
+	    return null;
+	}
+	
+	public List<BugScore> findByIds(List<String> list) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").in(list));
+	    return mongoOperations.find(query, BugScore.class);
+	}
+	
+	public void remove(List<String> ids) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").in(ids));
+	    mongoOperations.remove(query, BugScore.class);
+	}
+}

+ 89 - 0
src/main/java/edu/nju/dao/CTBDao.java

@@ -0,0 +1,89 @@
+package edu.nju.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.CaseToBug;
+
+@Repository
+public class CTBDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(CaseToBug ctb) {
+		mongoOperations.save(ctb);
+	}
+	
+	public void save(String useCase, String bug_id, String case_take_id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(useCase));
+		List<CaseToBug> result = mongoOperations.find(query, CaseToBug.class);
+		if(result.size() != 0) {
+			CaseToBug ctb = result.get(0);
+			if(!ctb.getBug_id().contains(bug_id)) {
+				ctb.getBug_id().add(bug_id);
+				mongoOperations.save(ctb);
+			}
+		} else {
+			List<String> list = new ArrayList<String>();
+			list.add(bug_id);
+			CaseToBug ctb = new CaseToBug(useCase, list, case_take_id, report_id);
+			mongoOperations.save(ctb);
+		}
+		
+	}
+	
+	public CaseToBug find(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		return mongoOperations.find(query, CaseToBug.class).get(0);
+	}
+	
+	public List<String> findById(String id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    List<CaseToBug> result = mongoOperations.find(query, CaseToBug.class);
+	    if(result.size() == 0 || result == null) {return new ArrayList<String>();}
+	    return result.get(0).getBug_id();
+	    
+	}
+	
+	public List<CaseToBug> findByCase(String case_take_id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+	    return mongoOperations.find(query, CaseToBug.class);
+	}
+	
+	public List<CaseToBug> findByReport(String report_id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("report_id").is(report_id));
+	    return mongoOperations.find(query, CaseToBug.class);
+	}
+	
+	public void remove(String useCase, String bug_id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(useCase));
+	    CaseToBug result = mongoOperations.find(query, CaseToBug.class).get(0);
+	    result.getBug_id().remove(bug_id);
+	    mongoOperations.save(result);
+	}
+	
+	public void removeAll(String case_take_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id));
+		mongoOperations.remove(query, CaseToBug.class);
+	}
+	
+	public void remove(String useCase) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(useCase));
+		mongoOperations.remove(query, CaseToBug.class);
+	}
+}

+ 30 - 0
src/main/java/edu/nju/dao/DotDao.java

@@ -0,0 +1,30 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.Dot;
+
+@Repository
+public class DotDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(Dot dot) {
+		mongoOperations.save(dot);
+	}
+	
+	public String findByid(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<Dot> list = mongoOperations.find(query, Dot.class);
+		if(list.size() == 0 || list == null) {return null;}
+		return list.get(0).getType1();
+	}
+}

+ 33 - 0
src/main/java/edu/nju/dao/ExamDao.java

@@ -0,0 +1,33 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.Exam;
+
+@Repository
+public class ExamDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(Exam exam) { mongoOperations.save(exam); }
+	
+	public Exam findById(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<Exam> list = mongoOperations.find(query, Exam.class);
+		if(list == null || list.size() == 0) { return null;}
+		else { return list.get(0); }
+	}
+
+	public List<Exam> findAll() {
+		List<Exam> list = mongoOperations.findAll(Exam.class);
+		return list;
+	}
+}

+ 42 - 0
src/main/java/edu/nju/dao/KWDao.java

@@ -0,0 +1,42 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.KeyWords;
+
+@Repository
+public class KWDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(KeyWords kws) {
+		mongoOperations.save(kws);
+	}
+	
+	public KeyWords findById(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<KeyWords> keywords = mongoOperations.find(query, KeyWords.class);
+		if(keywords != null && keywords.size() != 0) { return keywords.get(0); }
+		else { return null; }
+	}
+	
+	public void remove(String id){
+	    Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(id));
+	    mongoOperations.remove(query, KeyWords.class);
+	}
+	
+	public void remove(List<String> ids) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").in(ids));
+	    mongoOperations.remove(query, KeyWords.class);
+	}
+}

+ 52 - 0
src/main/java/edu/nju/dao/ReportDao.java

@@ -0,0 +1,52 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.Report;
+
+@Repository
+public class ReportDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public String save(Report report) { 
+		mongoOperations.save(report);
+		return report.getId(); 
+	}
+
+	public boolean update(String id, Report report) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<Report> list = mongoOperations.find(query, Report.class);
+		if(list == null || list.size() == 0) { return false;}
+		else {
+			report.setId(id);
+			mongoOperations.save(report);
+			return true;
+		}
+	}
+	
+	public Report findById(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(id));
+		List<Report> list = mongoOperations.find(query, Report.class);
+		if(list == null || list.size() == 0) { return null; }
+		else { return list.get(0); }
+	}
+	
+	public Report findByWoker(String case_take_id, String worker_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("case_take_id").is(case_take_id).and("worker_id").is(worker_id));
+		List<Report> list = mongoOperations.find(query, Report.class);
+		if(list == null || list.size() == 0) { return null; }
+		else { return list.get(0); }
+	}
+	
+}

+ 38 - 0
src/main/java/edu/nju/dao/StuInfoDao.java

@@ -0,0 +1,38 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.StuInfo;
+
+@Repository
+public class StuInfoDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(String report_id, String stu_id, String name) {
+		mongoOperations.save(new StuInfo(report_id, stu_id, name));
+	}
+	
+	public String findById(String report_id) {
+		Query query = new Query();
+	    query.addCriteria(Criteria.where("_id").is(report_id));
+	    List<StuInfo> stu_info = mongoOperations.find(query, StuInfo.class);
+	    if(stu_info == null || stu_info.size() == 0) { return "null"; }
+	    else { return stu_info.get(0).getName(); }
+	}
+
+	public String findWorkerId(String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<StuInfo> stu_info = mongoOperations.find(query, StuInfo.class);
+		if(stu_info == null || stu_info.size() == 0) { return "null"; }
+		else { return stu_info.get(0).getWorker_id(); }
+	}
+}

+ 53 - 0
src/main/java/edu/nju/dao/TestCaseDao.java

@@ -0,0 +1,53 @@
+package edu.nju.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.TestCase;
+
+@Repository
+public class TestCaseDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public String save(TestCase testCase) { 
+		mongoOperations.save(testCase); 
+		return testCase.getId();
+	}
+	
+	public TestCase findById(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("id").is(id));
+		List<TestCase> list = mongoOperations.find(query, TestCase.class);
+		if(list == null || list.size() == 0) { return null; }
+		else { return list.get(0); }
+	}
+	
+	public List<TestCase> findByReport(String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").is(report_id));
+		List<TestCase> list = mongoOperations.find(query, TestCase.class);
+		if(list == null || list.size() == 0) { return null; }
+		else { return list; }
+	}
+	
+	public void updateTestCase(String id, String report_id, String name, String front, String behind, String description) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("id").is(id));
+		List<TestCase> list = mongoOperations.find(query, TestCase.class);
+		if(list != null && list.size() != 0) {
+			TestCase testCase = list.get(0);
+			testCase.setFront(front);
+			testCase.setName(name);
+			testCase.setBehind(behind);
+			testCase.setDescription(description);
+			mongoOperations.save(testCase);
+		}
+	}
+}

+ 91 - 0
src/main/java/edu/nju/dao/ThumsUpDao.java

@@ -0,0 +1,91 @@
+package edu.nju.dao;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.ThumsUp;
+
+@Repository
+public class ThumsUpDao {
+
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public ThumsUp findByReport(String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		if(list == null || list.size() == 0) {return null;}
+		return list.get(0);
+	}
+	
+	public void saveGood(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		if(list == null || list.size() == 0) {
+			Set<String> good = new HashSet<String>();
+			good.add(id);
+			ThumsUp thumsup = new ThumsUp(report_id, good, new HashSet<String>());
+			mongoOperations.save(thumsup);
+		} else {
+			Update update = new Update();
+			Set<String> good = list.get(0).getThums();
+			good.add(id);
+			update.set("thums", good);
+			mongoOperations.updateFirst(query, update, ThumsUp.class);
+		}
+	}
+	
+	public void cancelGood(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		if(list != null && list.size() != 0) {
+			Update update = new Update();
+			Set<String> good = list.get(0).getThums();
+			if(good.contains(id)) { good.remove(id); }
+			update.set("thums", good);
+			mongoOperations.updateFirst(query, update, ThumsUp.class);
+		}
+	}
+	
+	public void saveDiss(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		if(list == null || list.size() == 0) {
+			Set<String> bad = new HashSet<String>();
+			bad.add(id);
+			ThumsUp thumsup = new ThumsUp(report_id, new HashSet<String>(), bad);
+			mongoOperations.save(thumsup);
+		} else {
+			Update update = new Update();
+			Set<String> bad = list.get(0).getDiss();
+			bad.add(id);
+			update.set("diss", bad);
+			mongoOperations.updateFirst(query, update, ThumsUp.class);
+		}
+	}
+	
+	public void cancelDiss(String id, String report_id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").is(report_id));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		if(list != null && list.size() != 0) {
+			Update update = new Update();
+			Set<String> bad = list.get(0).getDiss();
+			if(bad.contains(id)) { bad.remove(id); }
+			update.set("diss", bad);
+			mongoOperations.updateFirst(query, update, ThumsUp.class);
+		}
+	}
+}

+ 20 - 0
src/main/java/edu/nju/dao/UserRecordDao.java

@@ -0,0 +1,20 @@
+package edu.nju.dao;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.stereotype.Repository;
+
+import edu.nju.entities.UserRecord;
+
+@Repository
+public class UserRecordDao {
+	
+	@Autowired
+	private MongoOperations mongoOperations;
+	
+	public void save(UserRecord userRecord) {
+		mongoOperations.save(userRecord);
+	}
+	
+	
+}

+ 152 - 0
src/main/java/edu/nju/entities/Bug.java

@@ -0,0 +1,152 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class Bug implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8980368107739914394L;
+
+	@Id
+    private String id;
+
+	private String case_take_id;
+	
+	private String bug_category;
+	
+	private int severity;
+	
+	private int recurrent;
+	
+	private String title;
+	
+	@Indexed
+	private String report_id;
+
+	private String create_time_millis;
+	
+	private String description;
+	
+	private String img_url;
+	
+	private String bug_page;
+	
+	private String case_id;
+	
+	@PersistenceConstructor
+	public Bug(String case_take_id, String create_time_millis, String bug_category, String description, String img_url, int severity, int recurrent, String title, String report_id, String bug_page, String case_id) {
+		this.case_take_id = case_take_id;
+		this.create_time_millis = create_time_millis;
+		this.bug_category = bug_category;
+		this.description = description;
+		this.img_url = img_url;
+		this.severity = severity;
+		this.recurrent = recurrent;
+		this.title = title;
+		this.report_id = report_id;
+		this.bug_page = bug_page;
+		this.case_id = case_id;
+	}
+	
+	public String getBug_page() {
+		return bug_page;
+	}
+
+	public void setBug_page(String bug_page) {
+		this.bug_page = bug_page;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getCase_take_id() {
+		return case_take_id;
+	}
+
+	public void setCase_take_id(String case_take_id) {
+		this.case_take_id = case_take_id;
+	}
+
+	public String getCreate_time_millis() {
+		return create_time_millis;
+	}
+
+	public void setCreate_time_millis(String create_time_millis) {
+		this.create_time_millis = create_time_millis;
+	}
+
+	public String getBug_category() {
+		return bug_category;
+	}
+
+	public void setBug_category(String bug_category) {
+		this.bug_category = bug_category;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getImg_url() {
+		return img_url;
+	}
+
+	public void setImg_url(String img_url) {
+		this.img_url = img_url;
+	}
+
+	public int getSeverity() {
+		return severity;
+	}
+
+	public void setSeverity(int severity) {
+		this.severity = severity;
+	}
+
+	public int getRecurrent() {
+		return recurrent;
+	}
+
+	public void setRecurrent(int recurrent) {
+		this.recurrent = recurrent;
+	}
+	
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+	
+
+	public String getReport_id() {
+		return report_id;
+	}
+
+	public void setReport_id(String report_id) {
+		this.report_id = report_id;
+	}
+
+	public String getCase_id() {
+		return case_id;
+	}
+
+	public void setCase_id(String case_id) {
+		this.case_id = case_id;
+	}
+}

+ 64 - 0
src/main/java/edu/nju/entities/BugHistory.java

@@ -0,0 +1,64 @@
+package edu.nju.entities;
+
+import java.util.List;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class BugHistory implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8852808978961197553L;
+
+	@Id
+    private String id;
+	
+	private String parent;
+	
+	private List<String> children;
+	
+	private String root;
+
+	@PersistenceConstructor
+	public BugHistory(String id, String parent, List<String> children, String root) {
+		this.id = id;
+		this.parent = parent;
+		this.children = children;
+		this.root = root;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getParent() {
+		return parent;
+	}
+
+	public void setParent(String parent) {
+		this.parent = parent;
+	}
+	
+	public List<String> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<String> children) {
+		this.children = children;
+	}
+
+	public String getRoot() {
+		return root;
+	}
+
+	public void setRoot(String root) {
+		this.root = root;
+	}
+}

+ 177 - 0
src/main/java/edu/nju/entities/BugMirror.java

@@ -0,0 +1,177 @@
+package edu.nju.entities;
+
+import java.util.Set;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class BugMirror implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7484726588592610736L;
+
+	@Id
+    private String id;
+
+	@Indexed
+	private String case_take_id;
+	
+	@Indexed
+	private String bug_category;
+	
+	private String report_id;
+	
+	@Indexed
+	private int severity;
+	
+	@Indexed
+	private int recurrent;
+	
+	private String title;
+	
+	private Set<String> good;
+
+	private Set<String> bad;
+	
+	private String img_url;
+	
+	private boolean flag;
+	
+	private String useCase;
+	
+	@PersistenceConstructor
+	public BugMirror(String id, String case_take_id, String bug_category, int severity, int recurrent, String title, String img_url, Set<String> good, Set<String> bad, String report_id, String useCase, boolean flag) {
+		this.id = id;
+		this.case_take_id = case_take_id;
+		this.bug_category = bug_category;
+		this.severity = severity;
+		this.recurrent = recurrent;
+		this.title = title;
+		this.img_url = img_url;
+		this.bad = bad;
+		this.good = good;
+		this.report_id = report_id;
+		this.useCase = useCase;
+		this.flag = flag;
+	}
+	
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getCase_take_id() {
+		return case_take_id;
+	}
+
+	public void setCase_take_id(String case_take_id) {
+		this.case_take_id = case_take_id;
+	}
+
+	public String getBug_category() {
+		return bug_category;
+	}
+
+	public void setBug_category(String bug_category) {
+		this.bug_category = bug_category;
+	}
+
+	public int getSeverity() {
+		return severity;
+	}
+
+	public void setSeverity(int severity) {
+		this.severity = severity;
+	}
+
+	public int getRecurrent() {
+		return recurrent;
+	}
+
+	public void setRecurrent(int recurrent) {
+		this.recurrent = recurrent;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getImg_url() {
+		return img_url;
+	}
+
+	public void setImg_url(String img_url) {
+		this.img_url = img_url;
+	}
+	
+	public Set<String> getGood() {
+		return good;
+	}
+
+	public void setGood(Set<String> good) {
+		this.good = good;
+	}
+
+	public Set<String> getBad() {
+		return bad;
+	}
+
+	public void setBad(Set<String> bad) {
+		this.bad = bad;
+	}
+
+	public String getReport_id() {
+		return report_id;
+	}
+
+	public void setReport_id(String report_id) {
+		this.report_id = report_id;
+	}
+
+	public boolean isFlag() {
+		return flag;
+	}
+
+	public void setFlag(boolean flag) {
+		this.flag = flag;
+	}
+
+	public String getUseCase() {
+		return useCase;
+	}
+
+	public void setUseCase(String useCase) {
+		this.useCase = useCase;
+	}
+	
+	@Override
+    public int hashCode() {
+        return id != null ? id.hashCode() : 0;
+    }
+	
+	@Override
+    public boolean equals(Object o) {
+        // 比较引用
+        if(this == o) return true;
+        // 比较类型
+        if(o == null || getClass() != o.getClass()) return false;
+        // 比较内容,这里比较的是 id 值
+        BugMirror other = (BugMirror) o;
+        // 判断逻辑就是:三元运算符 的结果如果等于null 那么就返回 false
+        // 首先确定当前 id 不等于 null,然后确定当前 id 不等于被比较的 id
+        // 最后条件都满足了之后还是不等null,说明肯定不一致就返回 false 就可以了
+        if (id != null ? !id.equals(other.id) : other.id != null) return false;
+        return true;
+    }
+}

+ 80 - 0
src/main/java/edu/nju/entities/BugPage.java

@@ -0,0 +1,80 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class BugPage implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5647215351692151191L;
+
+	@Id
+    private String id;
+	
+	@Indexed
+	private String case_take_id;
+	
+	@Indexed
+	private String page1;
+	
+	@Indexed
+	private String page2;
+	
+	@Indexed
+	private String page3;
+
+	@PersistenceConstructor
+	public BugPage(String id, String page1, String page2, String page3, String case_take_id) {
+		this.id = id;
+		this.page1 = page1;
+		this.page2 = page2;
+		this.page3 = page3;
+		this.case_take_id = case_take_id;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getPage1() {
+		return page1;
+	}
+
+	public void setPage1(String page1) {
+		this.page1 = page1;
+	}
+
+	public String getPage2() {
+		return page2;
+	}
+
+	public void setPage2(String page2) {
+		this.page2 = page2;
+	}
+
+	public String getPage3() {
+		return page3;
+	}
+
+	public void setPage3(String page3) {
+		this.page3 = page3;
+	}
+
+	public String getCase_take_id() {
+		return case_take_id;
+	}
+
+	public void setCase_take_id(String case_take_id) {
+		this.case_take_id = case_take_id;
+	}
+	
+	
+}

+ 51 - 0
src/main/java/edu/nju/entities/BugScore.java

@@ -0,0 +1,51 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class BugScore implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2993945374555651123L;
+
+	@Id
+    private String id;
+	
+	private int grade;
+	
+	private int score;
+
+	@PersistenceConstructor
+	public BugScore(String id, int grade, int score) {
+		this.id = id;
+		this.grade = grade;
+		this.score = score;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public int getGrade() {
+		return grade;
+	}
+
+	public void setGrade(int grade) {
+		this.grade = grade;
+	}
+
+	public int getScore() {
+		return score;
+	}
+
+	public void setScore(int score) {
+		this.score = score;
+	}
+}

+ 65 - 0
src/main/java/edu/nju/entities/CaseToBug.java

@@ -0,0 +1,65 @@
+package edu.nju.entities;
+
+import java.util.List;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class CaseToBug implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1969002363605622255L;
+
+	@Id
+	private String id;  //用例id
+	
+	private String case_take_id;
+	
+	private String report_id;
+	
+	private List<String> bug_id;  //该用例下的所有bug
+	
+	@PersistenceConstructor
+	public CaseToBug(String id, List<String> bug_id, String case_take_id, String report_id) {
+		this.id = id;
+		this.bug_id = bug_id;
+		this.case_take_id = case_take_id;
+		this.report_id = report_id;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public List<String> getBug_id() {
+		return bug_id;
+	}
+
+	public void setBug_id(List<String> bug_id) {
+		this.bug_id = bug_id;
+	}
+
+	public String getCase_take_id() {
+		return case_take_id;
+	}
+
+	public void setCase_take_id(String case_take_id) {
+		this.case_take_id = case_take_id;
+	}
+
+	public String getReport_id() {
+		return report_id;
+	}
+
+	public void setReport_id(String report_id) {
+		this.report_id = report_id;
+	}
+	
+}

+ 41 - 0
src/main/java/edu/nju/entities/Dot.java

@@ -0,0 +1,41 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class Dot implements java.io.Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1721784427824000141L;
+
+	@Id
+    private String id;
+	
+	private String type1;
+	
+	@PersistenceConstructor
+	public Dot(String id, String type1) {
+		this.id = id;
+		this.type1 = type1;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getType1() {
+		return type1;
+	}
+
+	public void setType1(String type1) {
+		this.type1 = type1;
+	}
+}

+ 86 - 0
src/main/java/edu/nju/entities/Exam.java

@@ -0,0 +1,86 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class Exam implements java.io.Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7248743411159553345L;
+
+	@Id
+	private String id;
+	
+	private String json;
+	
+	private String app_name;
+
+	private String paper_type;
+
+	private String test_type;
+
+	private String description;
+
+	@PersistenceConstructor
+	public Exam(String id, String json, String app_name, String paper_type, String test_type, String description) {
+		this.id = id;
+		this.json = json;
+		this.app_name = app_name;
+		this.paper_type = paper_type;
+		this.test_type = test_type;
+		this.description = description;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getJson() {
+		return json;
+	}
+
+	public void setJson(String json) {
+		this.json = json;
+	}
+
+	public String getName() {
+		return app_name;
+	}
+
+	public void setName(String name) {
+		this.app_name = app_name;
+	}
+
+	public String getPaper_type() {
+		return paper_type;
+	}
+
+	public void setPaper_type(String paper_type) {
+		this.paper_type = paper_type;
+	}
+
+	public String getTest_type() {
+		return test_type;
+	}
+
+	public void setTest_type(String test_type) {
+		this.test_type = test_type;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+}

+ 73 - 0
src/main/java/edu/nju/entities/ImageAnnotation.java

@@ -0,0 +1,73 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class ImageAnnotation implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4960970930384537028L;
+
+	@Id
+    private String id;
+	
+	private String width;
+	
+	private String height;
+	
+	private String[] xs;
+	
+	private String[] ys;
+	
+	@PersistenceConstructor
+	public ImageAnnotation(String id, String width, String height, String[] xs, String[] ys) {
+		this.id = id;
+		this.width = width;
+		this.height = height;
+		this.xs = xs;
+		this.ys = ys;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getWidth() {
+		return width;
+	}
+
+	public void setWidth(String width) {
+		this.width = width;
+	}
+
+	public String getHeight() {
+		return height;
+	}
+
+	public void setHeight(String height) {
+		this.height = height;
+	}
+
+	public String[] getXs() {
+		return xs;
+	}
+
+	public void setXs(String[] xs) {
+		this.xs = xs;
+	}
+
+	public String[] getYs() {
+		return ys;
+	}
+
+	public void setYs(String[] ys) {
+		this.ys = ys;
+	}
+}

+ 52 - 0
src/main/java/edu/nju/entities/KeyWords.java

@@ -0,0 +1,52 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class KeyWords implements java.io.Serializable{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 3325877949872439231L;
+
+	@Id
+    private String id;
+	
+	private String title;
+	
+	private String description;
+	
+	@PersistenceConstructor
+	public KeyWords(String id, String title, String description) {
+		this.id = id;
+		this.title = title;
+		this.description = description;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+}

+ 167 - 0
src/main/java/edu/nju/entities/Report.java

@@ -0,0 +1,167 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class Report implements java.io.Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2711919701200675535L;
+
+	@Id
+	private String id;
+	
+	private String case_id;
+
+	private String task_id;
+	
+	@Indexed
+	private String case_take_id;
+	
+	private String worker_id;
+	
+	private String name;
+	
+	private String create_time_millis;
+	
+	private String device_model;
+	
+	private String device_brand;
+	
+	private String device_os;
+	
+	private String script_location;
+	
+	private String report_location;
+	
+	private String log_location;
+
+	@PersistenceConstructor
+	public Report(String case_id, String task_id, String case_take_id, String worker_id, String name, String create_time_millis,
+			String device_model, String device_brand, String device_os, String script_location, String report_location,
+			String log_location) {
+		this.name = name;
+		this.case_id = case_id;
+		this.task_id = task_id;
+		this.case_take_id = case_take_id;
+		this.worker_id = worker_id;
+		this.create_time_millis = create_time_millis;
+		this.device_model = device_model;
+		this.device_brand = device_brand;
+		this.device_os = device_os;
+		this.script_location = script_location;
+		this.report_location = report_location;
+		this.log_location = log_location;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getCase_id() {
+		return case_id;
+	}
+
+	public void setCase_id(String case_id) {
+		this.case_id = case_id;
+	}
+
+	public String getTask_id() {
+		return task_id;
+	}
+
+	public void setTask_id(String task_id) {
+		this.task_id = task_id;
+	}
+
+	public String getCase_take_id() {
+		return case_take_id;
+	}
+
+	public void setCase_take_id(String case_take_id) {
+		this.case_take_id = case_take_id;
+	}
+
+	public String getWorker_id() {
+		return worker_id;
+	}
+
+	public void setWorker_id(String woker_id) {
+		this.worker_id = woker_id;
+	}
+
+	public String getCreate_time_millis() {
+		return create_time_millis;
+	}
+
+	public void setCreate_time_millis(String create_time_millis) {
+		this.create_time_millis = create_time_millis;
+	}
+
+	public String getDevice_model() {
+		return device_model;
+	}
+
+	public void setDevice_model(String device_model) {
+		this.device_model = device_model;
+	}
+
+	public String getDevice_brand() {
+		return device_brand;
+	}
+
+	public void setDevice_brand(String device_brand) {
+		this.device_brand = device_brand;
+	}
+
+	public String getDevice_os() {
+		return device_os;
+	}
+
+	public void setDevice_os(String device_os) {
+		this.device_os = device_os;
+	}
+
+	public String getScript_location() {
+		return script_location;
+	}
+
+	public void setScript_location(String script_location) {
+		this.script_location = script_location;
+	}
+
+	public String getReport_location() {
+		return report_location;
+	}
+
+	public void setReport_location(String report_location) {
+		this.report_location = report_location;
+	}
+
+	public String getLog_location() {
+		return log_location;
+	}
+
+	public void setLog_location(String log_location) {
+		this.log_location = log_location;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	
+}

+ 53 - 0
src/main/java/edu/nju/entities/StuInfo.java

@@ -0,0 +1,53 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class StuInfo implements java.io.Serializable{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7968494783792967307L;
+	
+	@Id
+    private String id;  //report_id
+	
+	private String worker_id;
+	
+	private String name;
+
+	@PersistenceConstructor
+	public StuInfo(String id, String worker_id, String name) {
+		this.id = id;
+		this.worker_id = worker_id;
+		this.name = name;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getWorker_id() {
+		return worker_id;
+	}
+
+	public void setWorker_id(String worker_id) {
+		this.worker_id = worker_id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+}

+ 98 - 0
src/main/java/edu/nju/entities/TestCase.java

@@ -0,0 +1,98 @@
+package edu.nju.entities;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class TestCase implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4137909293358720275L;
+
+	@Id
+	private String id;
+	
+	@Indexed
+	private String report_id;
+	
+	private String name;
+	
+	private String front;
+	
+	private String behind;
+	
+	private String description;
+	
+	private String create_time_millis;
+
+	@PersistenceConstructor
+	public TestCase(String name, String front, String behind, String description, String report_id, String create_time_millis) {
+		this.name = name;
+		this.report_id = report_id;
+		this.front = front;
+		this.behind = behind;
+		this.description = description;
+		this.create_time_millis = create_time_millis;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getReport_id() {
+		return report_id;
+	}
+
+	public void setReport_id(String report_id) {
+		this.report_id = report_id;
+	}
+
+	public String getFront() {
+		return front;
+	}
+
+	public void setFront(String front) {
+		this.front = front;
+	}
+
+	public String getBehind() {
+		return behind;
+	}
+
+	public void setBehind(String behind) {
+		this.behind = behind;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getCreate_time_millis() {
+		return create_time_millis;
+	}
+
+	public void setCreate_time_millis(String create_time_millis) {
+		this.create_time_millis = create_time_millis;
+	}
+	
+}

+ 55 - 0
src/main/java/edu/nju/entities/ThumsUp.java

@@ -0,0 +1,55 @@
+package edu.nju.entities;
+
+import java.util.Set;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.annotation.PersistenceConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class ThumsUp implements java.io.Serializable{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -17882697895537936L;
+	
+	@Id
+    private String id; //即report_id
+	
+	Set<String> thums;
+	
+	Set<String> diss;
+
+	@PersistenceConstructor
+	public ThumsUp(String id, Set<String> thums, Set<String> diss) {
+		this.id = id;
+		this.thums = thums;
+		this.diss = diss;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Set<String> getThums() {
+		return thums;
+	}
+
+	public void setThums(Set<String> thums) {
+		this.thums = thums;
+	}
+
+	public Set<String> getDiss() {
+		return diss;
+	}
+
+	public void setDiss(Set<String> diss) {
+		this.diss = diss;
+	}
+	
+}

+ 73 - 0
src/main/java/edu/nju/entities/UserRecord.java

@@ -0,0 +1,73 @@
+package edu.nju.entities;
+
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document
+public class UserRecord implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6002106650098622328L;
+	
+	private String user_id;
+	
+	private String target_id;
+	
+	private String action;
+	
+	private String create_time_millis;
+	
+	private String remarks;
+
+	public UserRecord(String user_id, String target_id, String action, String create_time_millis,
+			String remarks) {
+		this.user_id = user_id;
+		this.target_id = target_id;
+		this.action = action;
+		this.create_time_millis = create_time_millis;
+		this.remarks = remarks;
+	}
+
+	public String getUser_id() {
+		return user_id;
+	}
+
+	public void setUser_id(String user_id) {
+		this.user_id = user_id;
+	}
+
+	public String getTarget_id() {
+		return target_id;
+	}
+
+	public void setTarget_id(String target_id) {
+		this.target_id = target_id;
+	}
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getCreate_time_millis() {
+		return create_time_millis;
+	}
+
+	public void setCreate_time_millis(String create_time_millis) {
+		this.create_time_millis = create_time_millis;
+	}
+
+	public String getRemarks() {
+		return remarks;
+	}
+
+	public void setRemarks(String remarks) {
+		this.remarks = remarks;
+	}
+	
+	
+}

+ 327 - 0
src/main/java/edu/nju/service/AnalyzeService.java

@@ -0,0 +1,327 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import edu.nju.util.HTTP;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugScoreDao;
+import edu.nju.dao.CTBDao;
+import edu.nju.dao.StuInfoDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugScore;
+import edu.nju.entities.CaseToBug;
+
+@Service
+public class AnalyzeService {
+	
+	@Autowired
+	CTBDao ctbdao;
+	
+	@Autowired
+	BugScoreDao bsdao;
+	
+	@Autowired
+	BugHistoryDao hdao;
+	
+	@Autowired
+	BugMirrorDao mdao;
+	
+	@Autowired
+	StuInfoDao studao;
+	
+	@Autowired
+	BugDao bdao;
+	
+	@Autowired
+	HistoryService hservice;
+	
+	//获取所有bug
+	public List<String> getValid(String case_take_id) {
+		List<String> result = new ArrayList<String>();
+		List<BugMirror> mirrors = mdao.findValid(case_take_id);
+		for(BugMirror ctb : mirrors) {
+			result.add(ctb.getId());
+		}
+		return result;
+	}
+	
+	//获取所有有测试用例的bug
+	public List<String> getValidTwo(String case_take_id) {
+		List<String> result = new ArrayList<String>();
+		List<CaseToBug> lists = ctbdao.findByCase(case_take_id);
+		for(CaseToBug ctb : lists) {
+			for(String str: ctb.getBug_id()) {
+				result.add(str);
+			}
+		}
+		return result;
+	}
+	
+	public List<String> getReports(String case_take_id) {
+		List<String> result = new ArrayList<String>();
+		List<CaseToBug> lists = ctbdao.findByCase(case_take_id);
+		for(CaseToBug ctb : lists) {
+			if(!result.contains(ctb.getReport_id())) {result.add(ctb.getReport_id());}
+		}
+		return result;
+	}
+	
+	public int getGrade(String id) {
+		BugScore bs = bsdao.findById(id);
+		if(bs != null) {return bs.getGrade();}
+		return -1;
+	}
+	
+	public boolean saveGrade(String id, int grade) {
+		try {
+			bsdao.save(new BugScore(id, grade, 0));
+			return true;
+		} catch(Exception e) {
+			return false;
+		}
+	}
+	
+	public int mark(String id, Map<String, Integer> grades, BugMirror mirror) {
+		int mark = 0;
+		int grade = grades.get(id);
+		BugHistory history = hdao.findByid(id);
+		
+		int parent = 0;
+		if(!history.getParent().equals("null")) {
+			parent = grades.getOrDefault(history.getParent(), 0);
+		}
+		int count = 0;
+		for(String child : history.getChildren()) {
+			if(grades.getOrDefault(child, 3) <= 2) {count ++;}
+		}
+		
+		switch(grade) {
+			case 1:
+				if(parent == 1) {mark += 40;}
+				else {mark += 100;}
+				mark += count * 2;
+				break;
+			case 2:
+				if(parent == 1) {break;}
+				else if(parent == 2) {mark += 40;}
+				else {mark += 80;}
+				mark += count * 2;
+				break;
+			case 3:
+				mark += count;
+				break;
+		}
+		
+		if(grade <= 2) {
+			mark += 2 * (mirror.getGood().size() - mirror.getBad().size());
+		}
+		
+		return mark;
+	}
+	
+	public JSONArray getScores(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>(); //用户得分
+		Map<String, Integer> grades = new HashMap<String, Integer>(); //专家评价分
+		Map<String, Integer> scores = new HashMap<String, Integer>(); //计算bug得分
+		JSONArray json = new JSONArray();
+		
+		List<String> bugs = getValid(case_take_id);
+		for(String bug: bugs) {
+			BugScore temp = bsdao.findById(bug);
+			if(temp != null) {grades.put(bug, temp.getGrade());}
+			else {grades.put(bug, 0);}
+		}
+//		for(String bug: bugs) {
+//			BugMirror mirror = mdao.findById(bug);
+//			int grade = grades.get(bug);
+//			if(grade == 0) {continue;}
+//			if(grade == 1) {ThumsUp(5, result, mirror);}
+//			else if(grade == 2) {ThumsUp(3, result, mirror);}
+//			else {ThumsUp(-3, result, mirror);}
+//			result.put(mirror.getReport_id(), result.getOrDefault(mirror.getReport_id(), 0) + mark(bug, grades, mirror));
+//		}
+		countScore(case_take_id, scores, grades);
+		for(String bug: bugs) {
+			BugMirror mirror = mdao.findById(bug);
+			if(mirror == null) { continue; }
+			int grade = grades.getOrDefault(bug, 0);
+			if(grade > 0) { ThumsUp(1, result, mirror); }
+			if(grade == 0) { ThumsUp(-1, result, mirror); }
+		}
+		for(Map.Entry<String, Integer> entry : result.entrySet()) {
+			if(entry.getValue() > 20) { result.put(entry.getKey(), 20); }
+			if(entry.getValue() < 0) { result.put(entry.getKey(), 0); }
+		}
+		Map<String, Integer> temp = new HashMap<String, Integer>();
+		for(String bug: bugs) {
+			BugMirror mirror = mdao.findById(bug);
+			if(mirror == null) { continue; }
+			temp.put(mirror.getReport_id(), scores.getOrDefault(bug, 0) + temp.getOrDefault(mirror.getReport_id(), 0));
+		}
+		for(Map.Entry<String, Integer> entry : temp.entrySet()) {
+			JSONObject json_temp = new JSONObject();
+			json_temp.put("report_id", entry.getKey());
+			json_temp.put("worker_id", findWorkerId(entry.getKey()));
+			json_temp.put("名字", report_trans(entry.getKey()));
+			json_temp.put("报告得分", entry.getValue());
+			json_temp.put("审查得分", result.getOrDefault(entry.getKey(), 0));
+			json.put(json_temp);
+		}
+		writeScores(case_take_id, json);
+		return json;
+	}
+
+	public JSONArray getNewScores(JSONArray array) {
+		if(array == null || array.length() <= 0) { return array; }
+		for(int i = 0; i < array.length(); i ++) {
+			JSONObject object = array.getJSONObject(i);
+			if(object.keySet().size() < 5) { continue; }
+			object.put("name", object.get("名字"));
+			object.remove("名字");
+			int score = Integer.parseInt(object.get("报告得分").toString()) + Integer.parseInt(object.get("审查得分").toString());
+			if(score > 100) { object.put("score", 100); }
+			else { object.put("score", score); }
+			object.remove("报告得分");
+			object.remove("审查得分");
+		}
+		return array;
+	}
+
+	//计算点赞得分
+	private void ThumsUp(int grade, Map<String, Integer> result, BugMirror mirror) {
+		for(String report : mirror.getGood()) {
+			result.put(report, result.getOrDefault(report, 0) + grade);
+		}
+		for(String report : mirror.getBad()) {
+			result.put(report, result.getOrDefault(report, 0) - grade);
+		}
+	}
+	
+	public Map<String, String> getThums(String case_take_id) {
+		Map<String, String> result = new HashMap<String, String>();
+		List<String> bugs = getValid(case_take_id);
+		for(String bug: bugs) {
+			BugMirror mirror = mdao.findById(bug);
+			if(mirror.getGood().size() > 0 || mirror.getBad().size() > 0) {
+				result.put(bug, mirror.getGood().size() + "," + mirror.getBad().size());
+			}
+		}
+		return result;
+	}
+	
+	public Map<String, Integer> getBugDetail(String case_take_id) {
+		Map<String, Integer> page = new HashMap<String, Integer>();
+		List<String> bugs = getValid(case_take_id);
+		for(String id : bugs) {
+			Bug bug = bdao.findByid(id);
+			page.put(bug.getBug_page(), page.getOrDefault(bug.getBug_page(), 0) + 1);
+		}
+		return page;
+	}
+	
+	public JSONObject getCaseDetail(String case_take_id) {
+		JSONObject result = new JSONObject();
+		Map<String, Integer> kind = new HashMap<String, Integer>();
+		List<String> bugs = getValid(case_take_id);
+		for(String id : bugs) {
+			Bug bug = bdao.findByid(id);
+			kind.put(bug.getBug_category(), kind.getOrDefault(bug.getBug_category(), 0) + 1);
+		}
+		result.put("page", new JSONObject(getBugDetail(case_take_id)));
+		result.put("category", new JSONObject(kind));
+		return result;
+	}
+	
+	public Map<String, Integer> getAllGrades(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<BugMirror> mlist = mdao.findByCase(case_take_id);
+		List<String> idlist = new ArrayList<String>();
+		for(BugMirror mirror : mlist) {
+			idlist.add(mirror.getId());
+		}
+		List<BugScore> slist = bsdao.findByIds(idlist);
+		for(BugScore bugscore: slist) {
+			result.put(bugscore.getId(), bugscore.getGrade());
+		}
+		return result;
+	}
+	
+	public List<String> getDiff(String case_take_id) {
+		List<String> bugs = getValid(case_take_id);
+		bugs.add("split");
+		for(Map.Entry<String, Integer> entry: getAllGrades(case_take_id).entrySet()) {
+			if(bugs.contains(entry.getKey())) {bugs.remove(entry.getKey());}
+			else {bugs.add(entry.getKey());}
+		}
+		return bugs;
+	}
+	
+	//评价页面获取评分
+	public List<List<String>> getScores(List<String> ids) {
+		List<List<String>> result = new ArrayList<List<String>>();
+		List<BugScore> list = bsdao.findByIds(ids);
+		for(BugScore bs: list) {
+			List<String> temp = new ArrayList<String>();
+			temp.add(bs.getId());
+			temp.add(Integer.toString(bs.getGrade()));
+			result.add(temp);
+		}
+		return result;
+	}
+	
+	//根据树状结构计算分数
+	public void countScore(String case_take_id, Map<String, Integer> result, Map<String, Integer> grades) {
+		List<String> roots = hservice.getRoots(case_take_id);
+		for(String root : roots) {
+			List<List<String>> lists = hservice.getDepth(root);
+			for(List<String> path : lists) {
+				int max = 0;
+				for(String id : path) {
+					int grade = grades.getOrDefault(id, 0);
+					result.put(id, Math.max(grade - max, 0));
+					max = Math.max(max, grade);
+				}
+			}
+		}
+	}
+
+	private void writeScores(String case_take_id, JSONArray array) {
+		String host = "http://www.mooctest.net";
+		String url = "/api/common/uploadCaseScore";
+		String[] ids = case_take_id.split("-");
+		String param1 = "caseId=" + ids[0] + "&examId=" + ids[1];
+		for(int i = 0; i < array.length(); i ++) {
+			JSONObject json = (JSONObject)array.get(i);
+			String worker_id = json.get("worker_id").toString();
+			int score = Integer.parseInt(json.get("报告得分").toString()) + Integer.parseInt(json.get("审查得分").toString());
+			if(score <= 0 || worker_id.equals("")) { continue; }
+			if(score > 100) { score = 100; }
+			String param2 = "&userId=" + worker_id + "&score=" + score;
+			HTTP.sendPut(host, url, param1 + param2);
+		}
+	}
+
+	private String report_trans(String report_id) {
+		String name = studao.findById(report_id);
+		if(name == null || name.equals("null")) { return report_id;}
+		return name;
+	}
+
+	private String findWorkerId(String report_id) {
+		String workerId = studao.findWorkerId(report_id);
+		if(workerId == null || workerId.equals("null")) { return "";}
+		return workerId;
+	}
+}

+ 37 - 0
src/main/java/edu/nju/service/AnnotationService.java

@@ -0,0 +1,37 @@
+package edu.nju.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.AnnotationDao;
+import edu.nju.entities.ImageAnnotation;
+
+@Service
+public class AnnotationService {
+	
+	@Autowired
+	AnnotationDao andao;
+	
+	public boolean save(String id, String width, String height, String[] xs, String[] ys) {
+		try {
+			andao.save(new ImageAnnotation(id, width, height, xs, ys));
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean delete(String id) {
+		try {
+			andao.remove(id);
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+		
+	}
+	
+	public ImageAnnotation get(String id) {
+		return andao.findById(id);
+	}
+}

+ 48 - 0
src/main/java/edu/nju/service/CTBService.java

@@ -0,0 +1,48 @@
+package edu.nju.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.CTBDao;
+
+@Service
+public class CTBService {
+	
+	@Autowired
+	CTBDao ctbdao;
+	
+	public boolean save(String useCase, String bug_id, String case_take_id, String report_id) {
+		try {
+			ctbdao.save(useCase, bug_id, case_take_id, report_id);
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	public List<String> findById(String useCase) {
+		List<String> lists = ctbdao.findById(useCase);
+		if(lists == null) {return null;}
+		return lists;
+	}
+	
+	public boolean remove(String useCase, String bug_id) {
+		try {
+			ctbdao.remove(useCase, bug_id);
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean removeAll(String useCase) {
+		try {
+			ctbdao.remove(useCase);
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+}

+ 115 - 0
src/main/java/edu/nju/service/DeleteService.java

@@ -0,0 +1,115 @@
+package edu.nju.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugPageDao;
+import edu.nju.dao.BugScoreDao;
+import edu.nju.dao.CTBDao;
+import edu.nju.dao.KWDao;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.CaseToBug;
+
+@Service
+public class DeleteService {
+	@Autowired
+	BugHistoryDao historydao;
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugPageDao pagedao;
+	
+	@Autowired
+	BugDao bugdao;
+	
+	@Autowired
+	RecommendService recservice;
+	
+	@Autowired
+	CTBDao ctbdao;
+	
+	@Autowired
+	KWDao kwdao;
+	
+	@Autowired
+	BugScoreDao bsdao;
+	
+	public boolean deleteOne(String id) {
+		try {
+			String useCase = mirrordao.findById(id).getUseCase();
+			String parent = historydao.findByid(id).getParent();
+			if(!parent.equals("null")) {
+				BugHistory history = historydao.findByid(parent);
+				history.getChildren().remove(id);
+				historydao.save(history);
+			}
+			historydao.remove(id);
+			mirrordao.remove(id);
+			bugdao.remove(id);
+			pagedao.remove(id);
+			kwdao.remove(id);
+			if(!useCase.equals("null")) {
+				CaseToBug ctb = ctbdao.find(useCase);
+				ctb.getBug_id().remove(id);
+				ctbdao.save(ctb);
+			}
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean deleteCase(String case_take_id) {
+		try {
+			List<String> ids = recservice.getListIds(case_take_id);
+			bugdao.remove(ids);
+			historydao.remove(ids);
+			pagedao.remove(ids);
+			mirrordao.remove(ids);
+			ctbdao.removeAll(case_take_id);
+			kwdao.remove(ids);
+			bsdao.remove(ids);
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean deleteBug(String id) {
+		try {
+			BugMirror mirror = mirrordao.findById(id);
+			mirror.setFlag(false);
+			if(!mirror.getUseCase().equals("null")) {
+				CaseToBug ctb = ctbdao.find(mirror.getUseCase());
+				ctb.getBug_id().remove(id);
+				ctbdao.save(ctb);
+			}
+			mirrordao.save(mirror);
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean updateCaseTake(String report_id, String case_take_id) {
+		try {
+			mirrordao.update_case_take(report_id, case_take_id);
+			bugdao.update_case_take(report_id, case_take_id);
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+}

+ 196 - 0
src/main/java/edu/nju/service/DivRecService.java

@@ -0,0 +1,196 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+//import java.util.HashMap;
+//import java.util.Map;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugPageDao;
+import edu.nju.dao.ThumsUpDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.ThumsUp;
+import edu.nju.util.PMF;
+
+@Service
+public class DivRecService {
+	
+	@Autowired
+	BugPageDao pagedao;
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugDao bugdao;
+	
+	@Autowired
+	ThumsUpDao tdao;
+	
+	@Autowired
+	BugHistoryDao hdao;
+	
+	public List<BugMirror> diverseRec(String report_id, String case_take_id) {
+		List<BugMirror> result = new ArrayList<BugMirror>();
+		List<Bug> all = bugdao.findByCaseid(case_take_id);
+		Set<String> my = new HashSet<String>();
+		List<String> allIds = bugdao.findByCase(case_take_id);
+		
+		int M = all.size(); //产品的数目
+		int K = 3; //特征的数目
+		List<String> users = new ArrayList<String>();
+		for(Bug bug: all) {
+			String user = bug.getReport_id();
+			if(users.contains(user)) { continue; }
+			users.add(user);
+		}
+		int N = users.size(); //用户的数目
+		double[][] R = new double[N][M];
+        double[][] P = new double[N][K];
+        double[][] Q = new double[K][M];
+		for(int i = 0; i < N; i ++) {
+//			List<Map<String, Integer>> user_detail = personDetail(all, user);
+			String user = users.get(i);
+			List<List<String>> relations = getAllRelation(case_take_id, user);
+			for(int j = 0; j < 4; j ++) {
+				for(String id : relations.get(j)) {
+					my.add(id);
+					int index = allIds.indexOf(id);
+					if(index < 0) { continue; }
+					switch (j) {
+						case 0: //自己提交
+							R[i][index] = 10;
+							break;
+						case 1: //点过赞
+							R[i][index] = 8;
+							break;
+						case 2: //点过踩
+							R[i][index] = 1;
+							break;
+						case 3: //fork过
+							R[i][index] = 5;
+							break;
+					}
+				}
+			}
+		}
+//		System.out.println("R矩阵");
+//        for(int i = 0; i < N; ++i) { 
+//        	for(int j = 0; j < M; ++j){ 
+//        		System.out.print((int)R[i][j] + ",");
+//        	}
+//        	System.out.println();
+//        }
+		for(int i = 0; i < N; ++i) 
+        {
+            for(int j = 0; j < K; ++j)
+            {
+                P[i][j] = Math.random() % 9;
+            }
+        }
+        for(int i = 0; i < K; ++i) 
+        {
+            for(int j = 0;j < M; ++j)
+            {
+                Q[i][j] = Math.random()%9;
+            }
+        }
+        PMF.matrix_factorization(R, P, Q, N, M, K);
+        double[][] fin_array = new double[N][M];
+        for(int i = 0; i < N; ++i) { 
+        	for(int j = 0; j < M; ++j) { 
+        		double temp = 0; 
+        		for (int k = 0; k < K; ++k){
+        			temp += P[i][k] * Q[k][j]; 
+        		}
+        		fin_array[i][j] = temp;
+//        		System.out.print(df.format(temp)+","); 
+        	}
+        }
+        int this_user = users.indexOf(report_id);
+        double[] line = fin_array[this_user];
+        for(int i = 0; i < M; i ++) {
+        	if(line[i] >= 5 && !my.contains(allIds.get(i))) {
+        		String id = allIds.get(i);
+        		result.add(mirrordao.findById(id));
+        	}
+        }
+		return result;
+	}
+	
+	public List<List<String>> getAllRelation(String case_take_id, String report_id) {
+		List<List<String>> result = new ArrayList<List<String>>();
+		result.add(new ArrayList<String>());  //获取所有自己提交
+		result.add(new ArrayList<String>());  //获取所有点赞记录
+		result.add(new ArrayList<String>());  //获取所有点踩记录
+		result.add(new ArrayList<String>());  //获取所有父记录
+		ThumsUp thum = tdao.findByReport(report_id);
+		List<String> ids = mirrordao.findIdsByReport(report_id, case_take_id);
+		result.get(0).addAll(ids);
+		if(thum != null) {
+			result.get(1).addAll(thum.getThums());
+			result.get(2).addAll(thum.getDiss());
+		}
+		List<String> parents = result.get(3);
+		for(String id : ids) {
+			BugHistory his = hdao.findByid(id);
+			if(his == null) { continue; }
+			String parent = his.getParent();
+			if(parent.equals("null") || parents.contains(parent)) { continue; }
+			parents.add(parent);
+		}
+		return result;
+	}
+	
+	public List<BugMirror> randomRec(String report_id, String case_take_id) {
+		List<BugMirror> result = new ArrayList<BugMirror>();
+		Set<String> my = new HashSet<String>();
+		List<String> allIds = bugdao.findByCase(case_take_id);
+		Map<String, Integer> map = new HashMap<String, Integer>();
+		for(List<String> list: getAllRelation(case_take_id, report_id)) {
+			for(String id: list) {
+				my.add(id);
+			}
+		}
+		for(String id: allIds) {
+			if(my.contains(id)) { continue; }
+			BugMirror mirror = mirrordao.findById(id);
+			map.put(id, mirror.getGood().size() + mirror.getBad().size());
+		}
+		List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
+		Collections.sort(entries, (a, b) -> (a.getValue() - b.getValue()));
+		for(int i = 0; i < entries.size() && i < 8; i ++) {
+			result.add(mirrordao.findById(entries.get(i).getKey()));
+		}
+		return result;
+	}
+//	private List<Map<String, Integer>> personDetail(List<Bug> all, String report_id) {
+//		List<Map<String, Integer>> result = new ArrayList<Map<String, Integer>>();
+//		result.add(new HashMap<String, Integer>());
+//		result.add(new HashMap<String, Integer>());
+//		for(Bug bug : all) {
+//			if(bug.getReport_id().equals("report_id")) {
+//				Map<String, Integer> pages = result.get(0);
+//				Map<String, Integer> categories = result.get(1);
+//				String page = bug.getBug_page();
+//				String category = bug.getBug_category();
+//				pages.put(page, pages.getOrDefault(page, 0) + 1);
+//				categories.put(category, categories.getOrDefault(category, 0) + 1);
+//			}
+//		}
+//		return result;
+//	}
+	
+}

+ 37 - 0
src/main/java/edu/nju/service/DotService.java

@@ -0,0 +1,37 @@
+package edu.nju.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.DotDao;
+import edu.nju.dao.UserRecordDao;
+import edu.nju.entities.Dot;
+import edu.nju.entities.UserRecord;
+
+@Service
+public class DotService {
+	
+	@Autowired
+	DotDao dotDao;
+	
+	@Autowired
+	UserRecordDao recordDao;
+	
+	public boolean saveType1(String id, String type1) {
+		try {
+			dotDao.save(new Dot(id, type1));
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean saveRecord(String user_id, String target_id, String action, String remarks) {
+		try {
+			recordDao.save(new UserRecord(user_id, target_id, action, Long.toString(System.currentTimeMillis()), remarks));
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+}

+ 122 - 0
src/main/java/edu/nju/service/ExtraService.java

@@ -0,0 +1,122 @@
+package edu.nju.service;
+
+import java.util.*;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.ReportDao;
+import edu.nju.dao.BugDao;
+import edu.nju.dao.ExamDao;
+import edu.nju.dao.TestCaseDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.Exam;
+import edu.nju.entities.Report;
+import edu.nju.entities.TestCase;
+import edu.nju.util.ExcelToJson;
+
+@Service
+public class ExtraService {
+
+	@Autowired
+	ReportDao reportDao;
+	
+	@Autowired
+	ExamDao examDao;
+	
+	@Autowired
+	TestCaseDao testDao;
+	
+	@Autowired
+	BugDao bugDao;
+	
+	//测试用例相关
+	public String saveTestCase(String report_id, String name, String front, String behind, String description) {
+		TestCase testCase = new TestCase(name, front, behind, description, report_id, Long.toString(System.currentTimeMillis()));
+		return testDao.save(testCase);
+	}
+	
+	public boolean updateTestCase(String id, String report_id, String name, String front, String behind, String description) {
+		try {
+			testDao.updateTestCase(id, report_id, name, front, behind, description);
+			return true;
+		} catch (Exception e) { return false; }
+	}
+	
+	public List<TestCase> getCaseList(String report_id) {
+		return testDao.findByReport(report_id);
+	}
+	
+	public TestCase getTestCase(String id) {
+		return testDao.findById(id);
+	}
+	
+	
+	//测试报告相关
+	public String saveReport(String case_id, String task_id, String case_take_id, String woker_id, String name, String device_model, 
+			String device_brand, String device_os, String script_location, String report_location, String log_location) {
+		Report report = new Report(case_id, task_id, case_take_id, woker_id, name, Long.toString(System.currentTimeMillis()),
+				device_model, device_brand, device_os, script_location, report_location, log_location);
+		return reportDao.save(report);
+	}
+
+	public boolean updateReport(String report_id, String case_id, String task_id, String case_take_id, String woker_id, String name, String device_model,
+							 String device_brand, String device_os, String script_location, String report_location, String log_location) {
+		Report report = new Report(case_id, task_id, case_take_id, woker_id, name, Long.toString(System.currentTimeMillis()),
+				device_model, device_brand, device_os, script_location, report_location, log_location);
+		return reportDao.update(report_id, report);
+	}
+	
+	public Report getReport(String report_id) {
+		return reportDao.findById(report_id);
+	}
+	
+	public Report findByWorker(String case_take_id, String worker_id) {
+		return reportDao.findByWoker(case_take_id, worker_id);
+	}
+	
+	public List<Bug> getBugList(String report_id, String case_take_id) {
+		return bugDao.findByReport(report_id, case_take_id);
+	}
+	
+	
+	//测试题目相关
+	public String saveExam(String case_id, String path, String app_name, String paper_type, String test_type, String description) {
+		String json = ExcelToJson.ExcelTranse(path).toString();
+		Exam exam = new Exam(case_id, json, app_name, paper_type, test_type, description);
+		examDao.save(exam);
+		return json;
+	}
+
+	public JSONArray getExamList() {
+		List<Exam> result = examDao.findAll();
+		JSONArray array = new JSONArray();
+		Set<String> ids = bugDao.findAllids();
+		Map<String, Exam> exams = new HashMap<>();
+
+		for(Exam exam: result) { exams.put(exam.getId(), exam); }
+		for(String id: ids) {
+			if(id == null || id.length() <= 0) { continue; }
+			String[] strs = id.split("-");
+			String case_id = strs[0];
+			String task_id = strs[1];
+			if(exams.containsKey(case_id)) {
+				JSONObject object = new JSONObject();
+				Exam exam = exams.get(case_id);
+				object.put("name", exam.getName());
+				object.put("description", exam.getDescription());
+				object.put("testType", exam.getTest_type());
+				object.put("case_id", case_id);
+				object.put("task_id", task_id);
+				array.put(object);
+			}
+		}
+		return array;
+	}
+
+	public Exam getExam(String id) {
+		return examDao.findById(id);
+	}
+}

+ 381 - 0
src/main/java/edu/nju/service/GraphService.java

@@ -0,0 +1,381 @@
+package edu.nju.service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugScoreDao;
+import edu.nju.dao.CTBDao;
+import edu.nju.dao.DotDao;
+import edu.nju.dao.StuInfoDao;
+import edu.nju.dao.ThumsUpDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugScore;
+import edu.nju.entities.CaseToBug;
+import edu.nju.entities.ThumsUp;
+
+@Service
+public class GraphService {
+	
+	@Autowired
+	BugMirrorDao mdao;
+	
+	@Autowired
+	BugDao bdao;
+	
+	@Autowired
+	BugScoreDao bsdao;
+	
+	@Autowired
+	ThumsUpDao tdao;
+	
+	@Autowired
+	BugHistoryDao hdao;
+	
+	@Autowired
+	CTBDao ctbdao;
+	
+	@Autowired
+	DotDao dotdao;
+	
+	@Autowired
+	StuInfoDao studao;
+	
+	@Autowired
+	HistoryService hservice;
+	
+	//获取所有bug
+	public List<BugMirror> getBugs(String case_take_id) {
+		return mdao.findByCase(case_take_id);
+	}
+	
+	//获取所有report_id
+	public Set<String> getReports(String case_take_id) {
+		Set<String> result = new HashSet<String>();
+		for(BugMirror mirror: getBugs(case_take_id)) {
+			result.add(mirror.getReport_id());
+		}
+		return result;
+	}
+	
+	//获取用户被点赞数
+	public Map<String, Integer> getUserThums(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<BugMirror> mirrors = getBugs(case_take_id);
+		for(BugMirror mirror: mirrors) {
+			String report_id = mirror.getReport_id();
+			result.put(report_id, result.getOrDefault(report_id, 0) + mirror.getGood().size());
+		}
+		return result;
+	}
+	
+	//获取用户所有bug
+	public Map<String, Integer> getUserBugs(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<BugMirror> mirrors = getBugs(case_take_id);
+		for(BugMirror mirror: mirrors) {
+			String report_id = mirror.getReport_id();
+			result.put(report_id, result.getOrDefault(report_id, 0) + 1);
+		}
+		return result;
+	}
+	
+	//获取用户有效bug
+	public Map<String, Integer> getUserValid(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<BugMirror> mirrors = getBugs(case_take_id);
+		for(BugMirror mirror: mirrors) {
+			String report_id = mirror.getReport_id();
+			BugScore score = bsdao.findById(mirror.getId());
+			if(score == null || score.getGrade() <= 0) { continue; }
+			result.put(report_id, result.getOrDefault(report_id, 0) + 1);
+		}
+		return result;
+	}
+	
+	//一(1)用例数目、与Bug数目、有效bug数目关系
+	public JSONArray get_case_bug_valid(String case_take_id) {
+		JSONArray array = new JSONArray();
+		Set<String> reports = getReports(case_take_id);
+		for(String report_id : reports) {
+			List<CaseToBug> ctbs = ctbdao.findByReport(report_id);
+			if(ctbs == null || ctbs.size() <= 0) { continue; }
+			int valid = 0;
+			int total = 0;
+			for(CaseToBug ctb : ctbs) {
+				List<String> bugs = ctb.getBug_id();
+				total += bugs.size();
+				for(String id : bugs) {
+					BugScore score= bsdao.findById(id);
+					if(score == null || score.getGrade() <= 0) { continue ;}
+					valid += 1;
+				}
+			}
+			JSONObject json = new JSONObject();
+			json.put("report_id", report_id);
+			json.put("use_case", ctbs.size());
+			json.put("total_bugs", total);
+			json.put("valid_bugs", valid);
+			array.put(json);
+		}
+		
+		return array;
+	}
+	
+	//一(2)被点赞数、bug数目、有效bug数目
+	public JSONArray get_thums_total_valid(String case_take_id) {
+		JSONArray array = new JSONArray();
+		Map<String, Integer> userBugs = getUserBugs(case_take_id);
+		Map<String, Integer> userValid = getUserValid(case_take_id);
+		Map<String, Integer> userThums = getUserThums(case_take_id);
+		for(Map.Entry<String, Integer> entry : userBugs.entrySet()) {
+			JSONObject json = new JSONObject();
+			json.put("report_id", entry.getKey());
+			json.put("total_bugs", entry.getValue());
+			json.put("valid_bugs", userValid.getOrDefault(entry.getKey(), 0));
+			json.put("thumsUp", userThums.getOrDefault(entry.getKey(), 0));
+			array.put(json);
+		}
+		return array;
+	}
+	
+	//一(3)有效Bug数目、点赞关系
+	public JSONObject get_valid_thums(String case_take_id) {
+		JSONObject json = new JSONObject();
+		JSONArray nodes = new JSONArray();
+		JSONArray links = new JSONArray();
+		Map<String, Integer> userValid = getUserValid(case_take_id);
+		Map<String, Integer> link_map = new HashMap<String, Integer>();
+		for(Map.Entry<String, Integer> entry : userValid.entrySet()) {
+			JSONObject node = new JSONObject();
+			String key = entry.getKey();
+			node.put("name", key);
+			node.put("value", entry.getValue());
+			nodes.put(node);
+			ThumsUp thums = tdao.findByReport(key);
+			if(thums == null) { continue; }
+			for(String id : thums.getThums()) {
+				BugMirror mirror = mdao.findById(id);
+				if(mirror == null) { continue; }
+				String new_key = key + "-" + mirror.getReport_id();
+				link_map.put(new_key, link_map.getOrDefault(new_key, 0) + 1);
+			}
+		}
+		for(Map.Entry<String, Integer> entry: link_map.entrySet()) {
+			JSONObject link = new JSONObject();
+			String[] key = entry.getKey().split("-");
+			link.put("source", key[0]);
+			link.put("target", key[1]);
+			link.put("value", entry.getValue());
+			links.put(link);
+		}
+		json.put("nodes", nodes);
+		json.put("links", links);
+		return json;
+	}
+	
+	//一(4)有效Bug数目、fork数目
+	public JSONObject get_valid_fork(String case_take_id, String end) {
+		JSONObject json = new JSONObject();
+		JSONArray nodes = new JSONArray();
+		JSONArray links = new JSONArray();
+		try {
+			Map<String, String> map = new HashMap<String, String>();
+			SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			long deadLine = dateformat.parse(end).getTime();
+			List<Bug> bugs = bdao.findByCaseid(case_take_id);
+			for(Bug bug : bugs) {
+				if(Long.parseLong(bug.getCreate_time_millis()) <= deadLine) {
+					map.put(bug.getId(), bug.getReport_id());
+				}
+			}
+			Map<String, Integer> node_value = new HashMap<String, Integer>();
+			Map<String, Integer> link_value = new HashMap<String, Integer>();
+			for(Map.Entry<String, String> entry : map.entrySet()) {
+				String key = entry.getKey();
+				String value = entry.getValue();
+				BugHistory history = hdao.findByid(key);
+				if(history == null) { continue; }
+				if(!history.getParent().equals("null")) {
+					node_value.put(value, node_value.getOrDefault(value, 0) + 1);
+					String link = value + "-" + map.get(history.getParent());
+					link_value.put(link, link_value.getOrDefault(link, 0) + 1);
+				} else if(history.getChildren().size() > 0) {
+					node_value.put(value, node_value.getOrDefault(value, 0) + 1);
+				}
+			}
+			for(Map.Entry<String, Integer> entry : node_value.entrySet()) {
+				JSONObject node = new JSONObject();
+				node.put("name", entry.getKey());
+				node.put("value", entry.getValue());
+				node.put("id", report_trans(entry.getKey()));
+				nodes.put(node);
+			}
+			for(Map.Entry<String, Integer> entry : link_value.entrySet()) {
+				JSONObject link = new JSONObject();
+				String[] key = entry.getKey().split("-");
+				link.put("source", key[0]);
+				link.put("target", key[1]);
+				link.put("value", entry.getValue());
+				links.put(link);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		json.put("nodes", nodes);
+		json.put("links", links);
+		return json;
+	}
+	
+	//二(1)被点赞数与bug分数
+	public JSONArray ThumsToScores(String case_take_id) {
+		JSONArray array = new JSONArray();
+		for(BugMirror mirror : getBugs(case_take_id)) {
+			JSONObject json = new JSONObject();
+			json.put("id", mirror.getId());
+			json.put("thums", mirror.getGood().size());
+			BugScore score = bsdao.findById(mirror.getId());
+			if(score != null) { json.put("score", score.getGrade()); }
+			else { json.put("score", 0); }
+			array.put(json);
+		}
+		return array;
+	}
+	
+//	//二(2)Bug报告、fork关系
+//	public JSONObject get_bug_fork(String case_take_id, String end) {
+//		JSONObject json = new JSONObject();
+//		JSONArray nodes = new JSONArray();
+//		JSONArray links = new JSONArray();
+//		try {
+//			Set<String> set = new HashSet<String>();
+//			SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//			long deadLine = dateformat.parse(end).getTime();
+//			List<Bug> bugs = bdao.findByCaseid(case_take_id);
+//			for(Bug bug : bugs) {
+//				if(Long.parseLong(bug.getCreate_time_millis()) <= deadLine) {
+//					set.add(bug.getId());
+//				}
+//			}
+//			for(String id: set) {
+//				BugHistory history = hdao.findByid(id);
+//				if(history == null) { continue; }
+//				if(!history.getParent().equals("null") || history.getChildren().size() > 0) {
+//					JSONObject node = new JSONObject();
+//					node.put("name", id);
+//					nodes.put(node);
+//				}
+//				if(!history.getParent().equals("null")) {
+//					JSONObject link = new JSONObject();
+//					link.put("source", id);
+//					link.put("target", history.getParent());
+//					links.put(link);
+//				}
+//			}
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+//		json.put("nodes", nodes);
+//		json.put("links", links);
+//		return json;
+//	}
+	
+	//二(2)Bug报告、fork关系
+		public JSONArray get_bug_fork(String case_take_id, String end) {
+			JSONArray result = new JSONArray();
+			try {
+				List<String> list = new ArrayList<String>();
+				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+				long deadLine = dateformat.parse(end).getTime();
+				List<Bug> bugs = bdao.findByCaseid(case_take_id);
+				for(Bug bug : bugs) {
+					if(Long.parseLong(bug.getCreate_time_millis()) <= deadLine) {
+						list.add(bug.getId());
+					}
+				}
+				for(String id: list) {
+					BugHistory history = hdao.findByid(id);
+					if(history == null) { continue; }
+					if(history.getParent().equals("null") && history.getChildren().size() > 0) {
+						List<List<String>> tree = hservice.getDepth(id);
+						Set<String> set = new HashSet<String>();
+						List<List<String>> new_tree = new ArrayList<List<String>>();
+						for(List<String> path : tree) {
+							String new_path = "";
+							for(int i = 0; i < path.size(); i ++) {
+								if(!list.contains(path.get(i))) {
+									path.remove(path.get(i));
+									i --;
+								} else {
+									new_path = new_path + "-" + path.get(i);
+								}
+							}
+							if(!new_path.equals("")) {
+								if(set.isEmpty()) {
+									new_tree.add(path);
+									set.add(new_path);
+								} else if(new_path.split("-").length > 2 && !set.contains(new_path)) {
+									new_tree.add(path);
+									set.add(new_path);
+								}
+							}
+						}
+						result.put(new JSONArray(new_tree));
+					}
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			return result;
+		}	
+	
+	//三(1)推荐有效性对比,fork比率,有效比率,点赞比率
+	public JSONObject get_rec_fork_valid_thums(String case_take_id) {
+		JSONObject json = new JSONObject();
+		int fork_1 = 0, fork_2 = 0, valid_1 = 0, valid_2 = 0, thums_1 = 0, thums_2 = 0;
+		List<BugMirror> mirrors = getBugs(case_take_id);
+		for(BugMirror mirror : mirrors) {
+			String id = mirror.getId();
+			String dot = dotdao.findByid(id);
+			if(dot == null) { continue; }
+			if(dot.equals("1")) {
+				fork_1 ++;
+				BugScore score = bsdao.findById(id);
+				if(score != null && score.getGrade() > 0) { valid_1 ++; }
+				if(mirror.getGood().size() > 0) { thums_1 ++;}
+			} else {
+				fork_2 ++;
+				BugScore score = bsdao.findById(id);
+				if(score != null && score.getGrade() > 0) { valid_2 ++; }
+				if(mirror.getGood().size() > 0) { thums_2 ++;}
+			}
+		}
+		json.put("fork_by_rec", fork_1);
+		json.put("fork_by_self", fork_2);
+		json.put("valid_by_rec", valid_1);
+		json.put("valid_by_self", valid_2);
+		json.put("thums_by_rec", thums_1);
+		json.put("thums_by_self", thums_2);
+		return json;
+	}
+	
+	private String report_trans(String report_id) {
+		String name = studao.findById(report_id);
+		if(name == null || name.equals("null")) { return report_id;}
+		return name;
+	}
+}

+ 176 - 0
src/main/java/edu/nju/service/GuideService.java

@@ -0,0 +1,176 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.servlet.http.HttpSession;
+
+import edu.nju.util.HTTP;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.entities.BugMirror;
+
+@Service
+public class GuideService {
+	
+	@Autowired
+	DivRecService drService;
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	@Autowired
+	ReportService rservice;
+	
+	//用户二分类,0为审查,1为提交
+	public int UserClassify(String report_id, String case_take_id) {
+		List<List<String>> relations = drService.getAllRelation(case_take_id, report_id);
+		int self = relations.get(0).size() - relations.get(3).size();
+		int thumsUp = relations.get(1).size();
+//		int diss = relations.get(2).size();
+		int fork = relations.get(3).size();
+		if(self <= 3 || self >= 8) { return 1; }
+		if(self >= (thumsUp + fork) / 2) { return 1; }
+		return 0;
+	}
+	
+	//根据pmf预测用户的审查目标
+	public List<BugMirror> PMFRecomend(String report_id, String case_take_id) {
+		return drService.randomRec(report_id, case_take_id);
+	}
+	
+	//根据用户历史推荐工作计划
+	public String workPlan(String report_id, String case_take_id, HttpSession session) {
+		String[] case_id = case_take_id.split("-");
+		String QS = case_id[0];
+		String structure = "";
+		if(session.getAttribute(QS) == null) {
+			structure = HTTP.sendGet("http://mooctest-site.oss-cn-shanghai.aliyuncs.com/json/" + QS + ".json" , "");
+		} else {
+			structure = session.getAttribute(QS).toString();
+		}
+		System.out.println(structure);
+		if(structure.equals("")) { return ""; }
+		return jsonGet(structure, getPages(rservice.getUserPath(report_id, case_take_id)), getPages(aservice.getBugDetail(case_take_id)));
+	}
+	
+	public List<String> getPages(Map<String, Integer> map) {
+		Set<String> result = new HashSet<String>();
+		for(Map.Entry<String, Integer> entry : map.entrySet()) {
+			String[] pages = entry.getKey().split("-");
+			if(pages.length > 0) {
+				String key = pages[pages.length - 1];
+				result.add(key);
+			}
+		}
+		return new ArrayList<String>(result);
+	}
+	
+	public String jsonGet(String structure, List<String> my, List<String> total) {
+		JSONArray array = new JSONArray(structure);
+		List<String> map = new ArrayList<String>();  // 页面按序存放
+		for(int i = 0; i < array.length(); i ++) {
+			JSONObject object = new JSONObject(array.get(i).toString());
+			map.add(object.get("item").toString());
+			JSONArray second = new JSONArray(object.get("children").toString());
+			if(second.length() <= 0) { continue; }
+			
+			for(int j = 0; j < second.length(); j ++) {
+				JSONObject object2 = new JSONObject(second.get(j).toString());
+				map.add(object2.get("item").toString());
+				JSONArray third = new JSONArray(object2.get("children").toString());
+				if(third.length() <= 0) { continue; }
+				
+				for(int z = 0; z < third.length(); z ++) {
+					JSONObject object3 = new JSONObject(third.get(z).toString());
+					map.add(object3.get("item").toString());
+				}
+			}
+		}
+		int size = map.size();
+		Map<String, Integer> hash = new HashMap<String, Integer>(); // 记录页面与序号
+		for(int i = 0; i < size; i ++) { hash.put(map.get(i), i); }
+		int[][] relation = new int[size][size];  // 关系数组
+		for(int i = 0; i < array.length(); i ++) {
+			JSONObject object = new JSONObject(array.get(i).toString());
+			int n = hash.get(object.get("item").toString());
+			relation[n][n] = -1;
+			JSONArray second = new JSONArray(object.get("children").toString()); // 二级页面
+			if(second.length() <= 0) { continue; }
+			
+			for(int j = 0; j < second.length(); j ++) {
+				JSONObject object2 = new JSONObject(second.get(j).toString());  // 单个二级页面
+				int m = hash.get(object2.get("item").toString());
+				relation[m][m] = -1;
+				relation[n][m] = relation[m][n] = 2;
+				for(int j1 = j + 1; j1 < second.length(); j1 ++) {
+					JSONObject temp = new JSONObject(second.get(j1).toString());
+					int m1 = hash.get(temp.get("item").toString());
+					relation[m][m1] = relation[m1][m] = 1;
+				}
+				JSONArray third = new JSONArray(object2.get("children").toString());
+				if(third.length() <= 0) { continue; }
+				
+				for(int z = 0; z < third.length(); z ++) {
+					JSONObject object3 = new JSONObject(third.get(z).toString());
+					int l = hash.get(object3.get("item").toString());
+					relation[l][l] = -1;
+					relation[m][l] = relation[l][m] = 2;
+					relation[n][l] = relation[l][n] = 3;
+					for(int z1 = z + 1; z1 < third.length(); z1 ++) {
+						JSONObject temp2 = new JSONObject(third.get(z1).toString());
+						int l1 = hash.get(temp2.get("item").toString());
+						relation[l][l1] = relation[l1][l] = 1;
+					}
+				}
+			}
+		}
+		
+		String advise = "";
+		if(my.size() == map.size()) { return "页面已全部覆盖"; }  // 自己已经全部覆盖
+		List<String> page_remain = new ArrayList<String>(map);  // 未全覆盖
+		Map<String, Integer> scores = new HashMap<String, Integer>();
+		if(total.size() == map.size()) {  // 整个测试环境已全覆盖
+			advise = "当前所有页面均有人提交,您还可以在以下页面进行测试:";
+		} else {
+			advise = "推荐您去以下页面进行测试:";
+			for(String page : total) {
+				page_remain.remove(page);
+			}
+		}
+		for(String page : my) { page_remain.remove(page); }
+		for(String page : page_remain) {
+			if(page.equals("") || !hash.containsKey(page)) { continue; }
+			for(String my_page: my) {
+				if(my_page.equals("") || !hash.containsKey(my_page)) { continue; }
+				int score = relation[hash.get(page)][hash.get(my_page)];
+				if(score > 0) { scores.put(page, score); }
+			}
+		}
+		List<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(scores.entrySet());
+		Collections.sort(entries, (a, b) -> (a.getValue() - b.getValue()));
+//		for(Entry<String, Integer> entry : entries) {
+//			System.out.println(entry.getKey() + ":" + entry.getValue());
+//		}
+		if(entries.size() == 0) {
+			for(int i = 0; i < page_remain.size() && i < 3; i ++) {
+				advise += page_remain.get(i) + ";";
+			}
+		} else {
+			for(int i = 0; i < entries.size() && i < 3; i ++) {
+				advise += entries.get(i).getKey() + ";";
+			}
+		}
+		return advise;
+	}
+	
+}

+ 193 - 0
src/main/java/edu/nju/service/HistoryService.java

@@ -0,0 +1,193 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.Stack;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugPageDao;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugPage;
+
+@Service
+public class HistoryService {
+	
+	@Autowired
+	BugHistoryDao historydao;
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugPageDao pagedao;
+	
+	@Autowired
+	RecommendService recservice;
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	public BugHistory getHistory(String id) {
+		return historydao.findByid(id);
+	}
+	
+	public List<String> parents(String id) {
+		Stack<String> stack = new Stack<String>();
+		List<String> result = new ArrayList<String>();
+		String parent = getHistory(id).getParent();
+		while(!parent.equals("null")) {
+			stack.push(parent);
+			parent = getHistory(parent).getParent();
+		}
+		while(!stack.isEmpty()) {
+			result.add(stack.pop());
+		}
+		result.add(id);
+		return result;
+	}
+	
+	public List<BugMirror> getNew(String case_take_id, String report_id) {
+		List<String> ids = historydao.findRoots(recservice.getListIds(case_take_id));
+		List<String> filter = new ArrayList<String>();
+		if(ids.size() > 2) {
+			int n = ids.size();
+			filter.add(ids.get(n - 1));
+			filter.add(ids.get(n - 2));
+		} else {
+			for(String id : ids) {
+				filter.add(id);
+			}
+		}
+		return mirrordao.findByIds(filter, report_id);
+	}
+	
+	public List<String> getRoots(String case_take_id) {
+		return historydao.findRoots(aservice.getValid(case_take_id));
+	}
+	
+	public List<String> getTreeRoots(String case_take_id) {
+		List<String> all = new ArrayList<String>();
+		for(String id : getRoots(case_take_id)) {
+			if(getHistory(id).getChildren().size() > 0) { all.add(id); }
+		}
+		return all;
+	}
+	
+	public List<String> getInvalid(Set<String> ids) {
+		List<String> result = new ArrayList<String>();
+		for(String id: ids) {
+			if(!mirrordao.findById(id).isFlag()) {result.add(id);}
+		}
+		return result;
+	}
+	
+	public List<String> getInvalid(List<String> ids) {
+		List<String> result = new ArrayList<String>();
+		for(String id: ids) {
+			if(!mirrordao.findById(id).isFlag()) {result.add(id);}
+		}
+		return result;
+	}
+	
+	public Set<String> filter(List<List<String>> lists) {
+		Set<String> set = new HashSet<String>();
+		for(List<String> list : lists) {
+			for(String id: list) {
+				set.add(id);
+			}
+		}
+		return set;
+	}
+	
+	//获取评分时树的信息
+	public List<String> getDetail(String id) {
+		List<String> result = new ArrayList<String>();
+		List<List<String>> paths = getDepth(id);
+		List<Set<String>> widths = new ArrayList<Set<String>>();
+		Set<String> ids = new HashSet<String>();
+		int max_height = 0;
+		int max_width = 0;
+		int count = 0;
+		String flag = "true";
+		for(List<String> path: paths) {
+			max_height = Math.max(max_height, path.size());
+			for(int i = 0; i < path.size(); i ++) {
+				String temp = path.get(i);
+				ids.add(temp);
+				if(widths.size() <= i) {
+					Set<String> set = new HashSet<String>();
+					set.add(temp);
+					widths.add(set);
+				}
+				else {widths.get(i).add(temp);}
+			}
+		}
+		for(Set<String> width: widths) {
+			max_width = Math.max(max_width, width.size());
+		}
+		for(String str: ids) {
+			if(aservice.getGrade(str) == -1) {
+				flag = "false";
+				break;
+			}
+		}
+		count = ids.size();
+		result.add(id);
+		result.add(Integer.toString(max_width));
+		result.add(Integer.toString(max_height));
+		result.add(Integer.toString(count));
+		result.add(flag);
+		result.add(recservice.getTitle(id));
+		return result;
+	}
+	
+	public void pageFilter(List<String> all, String page) {
+		if(page.equals("null")) { return; }
+		List<BugPage> mirrors = pagedao.findByIds(all);
+		String[] pages = page.split("-");
+		for(BugPage mirror : mirrors) {
+			if(pages.length > 0 && !mirror.getPage1().equals(pages[0])) {
+				all.remove(mirror.getId());
+				continue;
+			}
+			if(pages.length > 1 && !mirror.getPage2().equals(pages[1])) {
+				all.remove(mirror.getId());
+				continue;
+			}
+			if(pages.length > 2 && !mirror.getPage3().equals(pages[2])) {
+				all.remove(mirror.getId());
+				continue;
+			}
+		}
+	}
+	
+	public List<List<String>> getDepth(String id) {
+		BugHistory root = historydao.findByid(id);
+		List<List<String>> result = new ArrayList<List<String>>();
+		if(root == null) { return result;}
+		List<String> list = new ArrayList<String>();
+		list.add(root.getId());
+		dfs(root, result, list);
+		return result;
+	}
+	
+	private void dfs(BugHistory root, List<List<String>> result, List<String> list) {
+		List<String> children = root.getChildren();
+		if(children.size() != 0) {
+			for(String child : children) {
+				list.add(child);
+				dfs(historydao.findByid(child), result, list);
+				list.remove(child);
+			}
+		} else {
+			result.add(new ArrayList<String>(list));
+		}
+	}
+}

+ 16 - 0
src/main/java/edu/nju/service/OssService.java

@@ -0,0 +1,16 @@
+package edu.nju.service;
+
+import edu.nju.util.LoadConf;
+import org.json.JSONObject;
+import org.springframework.stereotype.Service;
+
+@Service
+public class OssService {
+
+    public JSONObject getOssConf() { return LoadConf.loadConf("OSS_CONFIG.json"); }
+
+    public JSONObject getFeatureConf() {
+        return LoadConf.loadConf("FEATURE_CONFIG.json");
+    }
+
+}

+ 440 - 0
src/main/java/edu/nju/service/RecommendService.java

@@ -0,0 +1,440 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.servlet.http.HttpSession;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugPageDao;
+import edu.nju.dao.KWDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugPage;
+//import edu.nju.util.Algorithm;
+//import edu.nju.util.Algorithm_1;
+import edu.nju.util.StringMatch;
+
+@Service
+public class RecommendService {
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugDao bugdao;
+	
+	@Autowired
+	BugPageDao pagedao;
+	
+	@Autowired
+	KWDao kwdao;
+	
+	public List<BugMirror> getList (String case_take_id, String report_id) {
+//		Algorithm algorithm = new Algorithm_1();
+		List<BugMirror> results = mirrordao.findByCase(case_take_id, report_id);
+//		return algorithm.sort(results);
+		return results;
+	}
+	
+	public List<String> getListIds (String case_take_id) {
+		List<BugMirror> results = mirrordao.findByCase(case_take_id);
+		List<String> lists = new ArrayList<String>();
+		for(BugMirror mirror: results) {
+			lists.add(mirror.getId());
+		}
+		return lists;
+	}
+	
+	public Bug getDetail (String id) {
+		return bugdao.findByid(id);
+	}
+	
+	public BugMirror getMirror (String id) {
+		return mirrordao.findById(id);
+	}
+	
+	public String getTitle (String id) {
+		return bugdao.findByid(id).getTitle();
+	}
+	
+	public String getReport(String id) {
+		return bugdao.findByid(id).getReport_id();
+	}
+	
+	//根据bug的本质三属性进行推荐
+//	@SuppressWarnings("unchecked")
+//	public Map<BugMirror, Float> recommend (String case_take_id, String type, String content, boolean flag, HttpSession session) {
+//		
+//		List<BugMirror> results = new ArrayList<BugMirror>();
+//		
+//		if(session.getAttribute("rec") == null) {
+//			results = findByNothing(case_take_id, type, content, (String)session.getAttribute("report"));
+//			Map<String, String> map = new LinkedHashMap<String, String>();
+//			map.put(type, content);
+//			session.setAttribute("path", map);
+//		} else {
+//			Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+//			if(map == null) { map = new LinkedHashMap<String, String>(); }
+//			if(map.containsKey(type)) {
+//				return pathExist(case_take_id, type, content, session, map);
+//			}
+//			map.put(type, content);
+//			session.setAttribute("path", map);
+//			results = findByNow(type, content, (List<BugMirror>) session.getAttribute("rec"));
+//		}
+//		
+//		session.setAttribute("rec", results);
+//		if(flag) {
+//			Algorithm algorithm = new Algorithm_1();
+//			if(results != null) {results = algorithm.sort(results);}
+//			if(session.getAttribute("title") != null) {return recommandByTitle((String)session.getAttribute("title"), session);}
+//			if(session.getAttribute("des") != null) {return recommandByDes((String)session.getAttribute("des"), session);}
+//		}
+//		
+//		Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+//		return finalScore(results, map.size());
+//	}
+	
+	//根据bug的本质三属性进行推荐
+	@SuppressWarnings("unchecked")
+	public Map<BugMirror, Float> recommend (String case_take_id, String type, String content, boolean flag, HttpSession session) {
+		
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		
+		if(session.getAttribute("rec") == null) {
+			Map<String, String> map = new LinkedHashMap<String, String>();
+			map.put(type, content);
+			session.setAttribute("path", map);
+			results = getList(case_take_id, "test");
+		} else {
+			Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+			if(map == null) { map = new LinkedHashMap<String, String>(); }
+			if(map.containsKey(type)) {
+				return pathExist(case_take_id, type, content, session, map);
+			}
+			map.put(type, content);
+			session.setAttribute("path", map);
+			results = (List<BugMirror>) session.getAttribute("rec");
+		}
+		session.setAttribute("rec", results);
+		if(flag) {
+			if(session.getAttribute("title") != null) {return recommandByTitle((String)session.getAttribute("title"), session);}
+			if(session.getAttribute("des") != null) {return recommandByDes((String)session.getAttribute("des"), session);}
+		}
+		
+		Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+		return finalScore(results, map);
+	}
+	
+	//根据页面进行推荐
+	@SuppressWarnings("unchecked")
+	public Map<BugMirror, Float> recommndByPage(String case_take_id, String type, String content, boolean flag, HttpSession session){
+		
+		List<BugPage> results = new ArrayList<BugPage>();
+		List<BugMirror> mirrors = new ArrayList<BugMirror>();
+		
+		if(session.getAttribute("page") == null) {
+			results = findPages(case_take_id, type, content);
+			mirrors = findMirror(getIds(results), (String)session.getAttribute("report"));
+			Map<String, String> map = new LinkedHashMap<String, String>();
+			map.put(type, content);
+			session.setAttribute("path", map);
+		} else {
+			Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+			if(map.containsKey(type)) {
+				return pathExist(case_take_id, type, content, session, map);
+			} else {
+				map.put(type, content);
+				session.setAttribute("path", map);
+				results = findByPages(type, content, (List<BugPage>) session.getAttribute("page"));
+				mirrors = findByMirror(getIds(results), (List<BugMirror>) session.getAttribute("rec"));
+			}
+		}
+		
+		session.setAttribute("page", results);
+		session.setAttribute("rec", mirrors);
+		
+		if(flag) {
+//			Algorithm algorithm = new Algorithm_1();
+//			if(mirrors != null) {mirrors = algorithm.sort(mirrors);}
+			if(session.getAttribute("title") != null) {return recommandByTitle((String)session.getAttribute("title"), session);}
+			if(session.getAttribute("des") != null) {return recommandByDes((String)session.getAttribute("des"), session);}
+		}
+		
+		Map<String, String> map = (Map<String, String>)session.getAttribute("path");
+		return finalScore(mirrors, map);
+	}
+	
+	//根据Title进行文本匹配
+	@SuppressWarnings("unchecked")
+	public Map<BugMirror, Float> recommandByTitle(String content, HttpSession session){
+		session.setAttribute("title", content);
+		if(session.getAttribute("rec") == null) {
+			List<BugMirror> temp = mirrordao.findByCase((String)session.getAttribute("case"), (String)session.getAttribute("report"));
+			if(temp != null) {session.setAttribute("rec", temp);}
+		}
+		if(session.getAttribute("rec") != null) {return count(content, (List<BugMirror>)session.getAttribute("rec"), true, session);}
+		return null;
+	}
+	
+	//根据description进行文本匹配
+	@SuppressWarnings("unchecked")
+	public Map<BugMirror, Float> recommandByDes(String content, HttpSession session){
+		session.setAttribute("des", content);
+		if(session.getAttribute("rec") == null) {
+			List<BugMirror> temp = mirrordao.findByCase((String)session.getAttribute("case"), (String)session.getAttribute("report"));
+			if(temp != null) {session.setAttribute("rec", temp);}
+		}
+		if(session.getAttribute("rec") != null) {return count(content, (List<BugMirror>)session.getAttribute("rec"), false, session);}
+		return null;
+	}
+	
+	//从缓存中获取
+//	private List<BugMirror> findByNow(String type, String content, List<BugMirror> lists){
+//		List<BugMirror> results = new ArrayList<BugMirror>();
+//		switch(type) {
+//			case "bug_category":
+//				for(BugMirror mirror : lists) {
+//					if(mirror.getBug_category().equals(content)) {results.add(mirror);}
+//				}
+//				break;
+//			case "severity":
+//				for(BugMirror mirror : lists) {
+//					if(mirror.getSeverity() == severityTranse(content)) {results.add(mirror);}
+//				}
+//				break;
+//			case "recurrent":
+//				for(BugMirror mirror : lists) {
+//					if(mirror.getRecurrent() == recurrentTranse(content)) {results.add(mirror);}
+//				}
+//				break;
+//		}
+//		return results;
+//	}
+
+	//从数据库中获取
+//	private List<BugMirror> findByNothing(String case_take_id, String type, String content, String report_id){
+//		switch(type) {
+//			case "bug_category":
+//				return mirrordao.findByCategory(case_take_id, content, report_id);
+//			case "severity":
+//				return mirrordao.findBySeverity(case_take_id, severityTranse(content), report_id);
+//			case "recurrent":
+//				return mirrordao.findByRecurrent(case_take_id, recurrentTranse(content), report_id);
+//		}
+//		return null;
+//	}
+	
+	//从数据库中查找页面
+	private List<BugPage> findPages(String case_take_id, String type, String content){
+		switch(type) {
+			case "page1":
+				return pagedao.findByPage1(case_take_id, content);
+			case "page2":
+				return pagedao.findByPage2(case_take_id, content);
+			case "page3":
+				return pagedao.findByPage3(case_take_id, content);
+		}
+		return null;
+	}
+	
+	//从缓存中查找页面
+	private List<BugPage> findByPages(String type, String content, List<BugPage> lists){
+		List<BugPage> results = new ArrayList<BugPage>();
+		switch(type) {
+			case "page1":
+				for(BugPage page : lists) {
+					if(page.getPage1().equals(content)) {results.add(page);}
+				}
+				break;
+			case "page2":
+				for(BugPage page : lists) {
+					if(page.getPage2().equals(content)) {results.add(page);}
+				}
+				break;
+			case "page3":
+				for(BugPage page : lists) {
+					if(page.getPage3().equals(content)) {results.add(page);}
+				}
+				break;
+		}
+		return results;
+	}
+	
+	//从数据库中获取指定id的bug
+	private List<BugMirror> findMirror(List<String> ids, String report_id){
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		results = mirrordao.findByIds(ids, report_id);
+		return results;
+	}
+	
+	//从缓存中进行筛选符合条件的
+	private List<BugMirror> findByMirror(List<String> ids, List<BugMirror> lists){
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		for(BugMirror mirror : lists) {
+			if(ids.contains(mirror.getId())) {results.add(mirror);}
+		}
+		return results;
+	}
+	
+	//根据页面获取bug_id
+	private List<String> getIds(List<BugPage> pages) {
+		List<String> ids = new ArrayList<String>();
+		for(int i = 0; i < pages.size(); i ++) {
+			ids.add(pages.get(i).getId());
+		}
+		return ids;
+	}
+	
+	//该选项已经选择过
+	private Map<BugMirror, Float> pathExist(String case_take_id, String type, String content, HttpSession session, Map<String, String> map){
+		session.removeAttribute("rec");
+		session.removeAttribute("path");
+		session.removeAttribute("page");
+		Map<BugMirror, Float> results = new LinkedHashMap<BugMirror, Float>();
+		for(Entry<String, String> entry: map.entrySet()) {
+			if(entry.getKey().equals(type)) { continue; }
+			if(entry.getKey().contains("page")) {
+				recommndByPage(case_take_id, entry.getKey(), entry.getValue(), false, session);
+			} else {
+				recommend(case_take_id, entry.getKey(), entry.getValue(), false, session);
+			}
+		}
+		if(type.contains("page")) { results = recommndByPage(case_take_id, type, content, true, session); }
+		else { results = recommend(case_take_id, type, content, true, session); }
+		return results;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private Map<BugMirror, Float> count(String content, List<BugMirror> lists, boolean type, HttpSession session) {
+		StringMatch match = new StringMatch();
+		Map<BugMirror, Float> tmap = new HashMap<BugMirror, Float>();
+		Map<BugMirror, Float> result = new LinkedHashMap<BugMirror, Float>();
+		Map<String, BugMirror> bmap = new HashMap<String, BugMirror>();
+		Map<String, String> titleMap = new HashMap<String, String>();
+		Map<String, String> desMap = new HashMap<String, String>();
+		Map<String, String> pmap = null;
+		
+		for(BugMirror mirror: lists) {
+			String id = mirror.getId();
+			bmap.put(id, mirror);
+			titleMap.put(id, kwdao.findById(id).getTitle());
+			desMap.put(id, kwdao.findById(id).getDescription());
+		}
+		for(BugMirror mirror: lists) {
+			String id = mirror.getId();
+			float score = 0;
+			if(type) {
+				score += match.score(match.Ansj(content), match.Ansj(titleMap.get(id))) * 30;
+				if(session.getAttribute("des") != null) {
+					score += match.score(match.Ansj((String)session.getAttribute("des")), match.Ansj(desMap.get(id))) * 40;
+				}
+			} else {
+				score += match.score(match.Ansj(content), match.Ansj(desMap.get(id))) * 40;
+				if(session.getAttribute("title") != null) {
+					score += match.score(match.Ansj((String)session.getAttribute("title")), match.Ansj(titleMap.get(id))) * 30;
+				}
+			}
+			tmap.put(mirror, score);
+		}
+		List<Entry<BugMirror, Float>> tlist = new ArrayList<Entry<BugMirror, Float>>(tmap.entrySet());
+		Collections.sort(tlist, (a, b) -> (Float.compare(b.getValue(), a.getValue())));
+		if(session.getAttribute("path") != null) {
+			pmap = (Map<String, String>)session.getAttribute("path");
+		}
+		
+		for(int i = 0; i < tlist.size() && i < 6; i ++) {
+			float score = (float) (tlist.get(i).getValue());
+			result.put(tlist.get(i).getKey(), score + categoryCount(tlist.get(i).getKey(), pmap));
+		}
+		tlist = new ArrayList<Entry<BugMirror, Float>>(result.entrySet());
+		Collections.sort(tlist, (a, b) -> (Float.compare(b.getValue(), a.getValue())));
+		result.clear();
+		for(Entry<BugMirror, Float> entry: tlist) {
+			result.put(entry.getKey(), entry.getValue());
+		}
+		return result;
+	}
+	
+	private Map<BugMirror, Float> finalScore(List<BugMirror> lists, Map<String, String> map) {
+		Map<BugMirror, Float> rmap = new LinkedHashMap<BugMirror, Float>();
+		for(BugMirror mirror : lists) {
+			rmap.put(mirror, categoryCount(mirror, map));
+		}
+		return rmap;
+	}
+	
+	private float categoryCount(BugMirror mirror, Map<String, String> map) {
+		if(map == null) { return 0;}
+		int score = 0;
+		int size = map.size();
+		for(Entry<String, String> entry : map.entrySet()) {
+			String type = entry.getKey();
+			String content = entry.getValue();
+			switch(type) {
+				case "bug_category":
+					size --;
+					if(content.equals(mirror.getBug_category())) { score ++; }
+					break;
+				case "severity":
+					size --;
+					if(severityTranse(content) == mirror.getSeverity()) { score ++; }
+					break;
+				case "recurrent":
+					size --;
+					if(recurrentTranse(content) == mirror.getRecurrent()) { score ++; }
+					break;
+			}		
+		}
+		return (float) ((score + size) * 5);
+	}
+	
+	private int severityTranse(String str) {
+		if(str.equals("待定")) {
+			return 1;
+		}
+		if(str.equals("较轻")) {
+			return 2;
+		}
+		if(str.equals("一般")) {
+			return 3;
+		}
+		if(str.equals("严重")) {
+			return 4;
+		}
+		if(str.equals("紧急")) {
+			return 5;
+		}
+		return 0;
+	}
+	
+	private int recurrentTranse(String str) {
+		if(str.equals("其他")) {
+			return 1;
+		}
+		if(str.equals("无规律复现")) {
+			return 2;
+		}
+		if(str.equals("小概率复现")) {
+			return 3;
+		}
+		if(str.equals("大概率复现")) {
+			return 4;
+		}
+		if(str.equals("必现")) {
+			return 5;
+		}
+		return 0;
+	}
+	
+}

+ 276 - 0
src/main/java/edu/nju/service/ReportService.java

@@ -0,0 +1,276 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugScoreDao;
+import edu.nju.dao.CTBDao;
+import edu.nju.dao.KWDao;
+import edu.nju.dao.StuInfoDao;
+import edu.nju.dao.ThumsUpDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugScore;
+import edu.nju.entities.KeyWords;
+import edu.nju.entities.ThumsUp;
+
+@Service
+public class ReportService {
+	
+	@Autowired
+	CTBDao ctbdao;
+	
+	@Autowired
+	BugScoreDao bsdao;
+	
+	@Autowired
+	BugHistoryDao hdao;
+	
+	@Autowired
+	BugMirrorDao mdao;
+	
+	@Autowired
+	BugDao bdao;
+	
+	@Autowired
+	ThumsUpDao tdao;
+	
+	@Autowired
+	KWDao kdao;
+	
+	@Autowired
+	StuInfoDao studao;
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	@Autowired
+	HistoryService hservice;
+	
+	public List<String> getUserBugs(String report_id, String case_take_id) {
+		return mdao.findIdsByReport(report_id, case_take_id);
+	}
+	
+	public Map<String, Integer> getUserPath(String report_id, String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<String> ids = getUserBugs(report_id, case_take_id);
+		for(String id: ids) {
+			Bug bug = bdao.findByid(id);
+			result.put(bug.getBug_page(), result.getOrDefault(bug.getBug_page(), 0) + 1);
+		}
+		return result;
+	}
+	
+	public int getValid(String report_id, String case_take_id) {
+		List<String> ids = getUserBugs(report_id, case_take_id);
+		List<BugScore> bugscore = bsdao.findByIds(ids);
+		int count = 0;
+		for(BugScore bs: bugscore) {
+			if(bs.getGrade() >= 8) {count ++;}
+		}
+		return count;
+	}
+	
+	public double getTimeGap(String report_id, String case_take_id) {
+		List<String> ids = getUserBugs(report_id, case_take_id);
+		if(ids.size() <= 1) {return 0;}
+		Bug start = bdao.findByid(ids.get(0));
+		Bug end = bdao.findByid(ids.get(ids.size() - 1));
+		return Double.parseDouble(end.getCreate_time_millis()) - Double.parseDouble(start.getCreate_time_millis());
+	}
+	
+	public Set<String> getAllThums(String report_id) {
+		ThumsUp thumsup = tdao.findByReport(report_id);
+		if(thumsup != null) {return thumsup.getThums();}
+		return null;
+	}
+	
+	public Set<String> getAllDiss(String report_id) {
+		ThumsUp thumsup = tdao.findByReport(report_id);
+		if(thumsup != null) {return thumsup.getDiss();}
+		return null;
+	}
+	
+	public int getValidThums(String report_id) {
+		Set<String> thums = getAllThums(report_id);
+		if(thums == null) {return 0;}
+		int count = 0;
+		for(String id: thums) {
+			BugScore bs = bsdao.findById(id);
+			if(bs.getGrade() >= 8) {count ++;}
+		}
+		return count;
+	}
+	
+	public int getValidDiss(String report_id) {
+		Set<String> diss = getAllDiss(report_id);
+		if(diss == null) {return 0;}
+		int count = 0;
+		for(String id: diss) {
+			BugScore bs = bsdao.findById(id);
+			if(bs.getGrade() <= 2) {count ++;}
+		}
+		return count;
+	}
+	
+//	public JSONObject getThumsRank(String case_take_id) {
+//		Map<String, Integer> result = new HashMap<String, Integer>();
+//		List<String> reports = aservice.getReports(case_take_id);
+//		for(String report : reports) {
+//			Set<String> thums = getAllThums(report);
+//			if(thums != null && thums.size() != 0) { result.put(report, thums.size()); }
+//		}
+//		return rank_sort(result);
+//	}
+	
+	public JSONObject getThumsRank(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<String> bugs = aservice.getValid(case_take_id);
+		for(String bug: bugs) {
+			BugMirror bugmirror = mdao.findById(bug);
+			if(bugmirror == null) { continue; }
+			String report = bugmirror.getReport_id();
+			int thums = bugmirror.getGood().size();
+			result.put(report, result.getOrDefault(report, 0) + thums);
+		}
+		return rank_sort(result);
+	}
+	
+	public JSONObject getForkRank(String case_take_id) {
+		Map<String, Integer> result = new HashMap<String, Integer>();
+		List<String> list = aservice.getValid(case_take_id);
+		for(String id : list) {
+			BugHistory history = hdao.findByid(id);
+			if(history == null) { continue; }
+			if(!history.getParent().equals("null")) { 
+				String key = bdao.findByid(id).getReport_id();
+				result.put(key, result.getOrDefault(key, 0) + 1);
+			}
+		}
+		return rank_sort(result);
+	}
+	
+	public JSONObject relations(String case_take_id) {
+		JSONObject result = new JSONObject();
+		List<String> trees = hservice.getTreeRoots(case_take_id);
+		Set<String> reports = new HashSet<String>();
+		List<List<String>> links = new ArrayList<List<String>>();
+		
+		for(String tree: trees) {
+			for(List<String> path : hservice.getDepth(tree)) {
+				for(String id: path) {
+					String report = report_trans(bdao.findByid(id).getReport_id());
+					reports.add(report);
+					List<String> temp = new ArrayList<String>();
+					temp.add(report);
+					temp.add(tree);
+					links.add(temp);
+				}
+			}
+		}
+		
+		result.put("TreeNode", trees);
+		result.put("PersonNode", reports);
+		result.put("Link", links);
+		return result;
+	}
+	
+	public JSONArray charm(String case_take_id) {
+		JSONArray array = new JSONArray();
+		Map<String, int[]> thumsup = new HashMap<String, int[]>();
+		Map<String, int[]> bugTotal = new HashMap<String, int[]>();
+		List<String> bugs = aservice.getValid(case_take_id);
+		List<String> reports = aservice.getReports(case_take_id);
+		for(String id: bugs) {
+			Bug bug = bdao.findByid(id);
+			BugScore bugscore = bsdao.findById(id);
+			if(bug == null || bugscore == null || bug.getId().equals("10010000034853")) { continue; }
+			String report_id = bug.getReport_id();
+			int[] temp_score = bugTotal.getOrDefault(report_id, new int[2]);
+			if(bugscore.getGrade() > 0) { temp_score[0] += 1; }
+			temp_score[1] += 1;
+			bugTotal.put(report_id, temp_score);
+		}
+		for(String report: reports) {
+			int[] temp_score = new int[2];
+			ThumsUp thums = tdao.findByReport(report);
+			if(thums == null) { continue; }
+			for(String id: thums.getThums()) {
+				Bug bug = bdao.findByid(id);
+				if(bug == null || bug.getId().equals("10010000034853")) { continue; }
+				BugScore bugscore = bsdao.findById(id);
+				if(bugscore == null) { continue; }
+				if(bugscore.getGrade() > 0) { temp_score[0] += 1; }
+				temp_score[1] += 1;
+			}
+			thumsup.put(report, temp_score);
+		}
+		for(Map.Entry<String, int[]> entry: bugTotal.entrySet()) {
+			JSONObject json = new JSONObject();
+			String key = entry.getKey();
+			int[] bug_score = entry.getValue();
+			int[] thums_score = thumsup.getOrDefault(key, new int[2]);
+			String value = "bug-" + bug_score[0] + "/" + bug_score[1] 
+					+ ";thumsup-" + thums_score[0] + "/" + thums_score[1];
+			json.put(report_trans(key), value);
+			array.put(json);
+		}
+		return array;
+	}
+	
+	public JSONObject keyWords(String id) {
+		Map<String, Integer> map = new HashMap<String, Integer>();
+		if(id != null || id != "") {
+			for(List<String> paths : hservice.getDepth(id)) {
+				for(String path : paths) {
+					KeyWords keywords = kdao.findById(path);
+					if(keywords == null) { continue; }
+					String[] words = keywords.getDescription().split(",");
+					for(String word : words) {
+						map.put(word, map.getOrDefault(word, 0) + 1);
+					}
+				}
+			}
+		}
+		return map_sort(map);
+	}
+	
+	private JSONObject rank_sort(Map<String, Integer> result) {
+		JSONObject json = new JSONObject(true);
+//		List<Entry<String, Integer>> map_list = new ArrayList<>(result.entrySet());
+//		Collections.sort(map_list, (a, b) -> (b.getValue() - a.getValue()));
+		for(Entry<String, Integer> entry : result.entrySet()) {
+			json.put(report_trans(entry.getKey()), entry.getValue());
+		}
+		return json;
+	}
+	
+	private JSONObject map_sort(Map<String, Integer> result) {
+		JSONObject json = new JSONObject(true);
+		for(Entry<String, Integer> entry : result.entrySet()) {
+			json.put(entry.getKey(), entry.getValue());
+		}
+		return json;
+	}
+	
+	private String report_trans(String report_id) {
+		String name = studao.findById(report_id);
+		if(name == null || name.equals("null")) { return report_id;}
+		return name;
+	}
+	
+}

+ 325 - 0
src/main/java/edu/nju/service/SaveService.java

@@ -0,0 +1,325 @@
+package edu.nju.service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import edu.nju.util.HTTP;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.dao.BugPageDao;
+import edu.nju.dao.KWDao;
+import edu.nju.dao.StuInfoDao;
+import edu.nju.dao.ThumsUpDao;
+import edu.nju.entities.Bug;
+import edu.nju.entities.BugHistory;
+import edu.nju.entities.BugMirror;
+import edu.nju.entities.BugPage;
+import edu.nju.entities.KeyWords;
+import edu.nju.entities.ThumsUp;
+import edu.nju.util.StringMatch;
+
+@Service
+public class SaveService {
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugDao bugdao;
+	
+	@Autowired
+	BugHistoryDao historydao;
+	
+	@Autowired
+	BugPageDao pagedao;
+	
+	@Autowired
+	HistoryService hisservice;
+	
+	@Autowired
+	DotService dotservice;
+	
+	@Autowired
+	KWDao kwdao;
+	
+	@Autowired
+	ThumsUpDao tdao;
+	
+	@Autowired
+	StuInfoDao sdao;
+	
+	@Autowired
+	AnalyzeService aservice;
+	
+	public String save(String case_take_id, String bug_category, String description, String img_url, String severity, String recurrent, String title, String report_id, String parent, String page, String useCase, String case_id) {
+		try {
+			StringMatch match = new StringMatch();
+			String id = bugdao.save(new Bug(case_take_id, Long.toString(System.currentTimeMillis()), bug_category, description, img_url, severityTranse(severity), recurrentTranse(recurrent), title, report_id, page, case_id));
+			mirrordao.save(new BugMirror(id, case_take_id, bug_category, severityTranse(severity), recurrentTranse(recurrent), title, img_url, new HashSet<String>(), new HashSet<String>(), report_id, useCase, true));
+			kwdao.save(new KeyWords(id, match.Ansj(title), match.Ansj(description)));
+			if(!parent.equals("null")) {
+				String[] sp = parent.split("-");
+				dotservice.saveType1(id, sp[1]);
+				historydao.addChild(sp[0], id);
+				String p = hisservice.parents(sp[0]).get(0);
+				historydao.save(new BugHistory(id, sp[0], new ArrayList<String>(), p));
+			} else {
+				historydao.save(new BugHistory(id, parent, new ArrayList<String>(), id));
+			}
+			
+			if(!page.equals("")) {
+				savePage(id, case_take_id, page);
+			}
+			return id;
+		} catch(Exception e) {
+			e.printStackTrace();
+			return "";
+		}
+	}
+	
+//	public boolean update(String id, String case_take_id, String bug_category, String description, String img_url, int severity, int recurrent, String title, String report_id, String parent,String page, String useCase, String case_id) {
+//		try {
+//			bugdao.save(new Bug(id, case_take_id, Long.toString(System.currentTimeMillis()), bug_category, description, img_url, severityTranse(severity), recurrentTranse(recurrent), title, report_id, page, case_id));
+//			mirrordao.save(new BugMirror(id, case_take_id, bug_category, severityTranse(severity), recurrentTranse(recurrent), title, img_url, new HashSet<String>(), new HashSet<String>(), report_id, useCase, true));
+//			if(!page.equals("")) {
+//				savePage(id, case_take_id, page);
+//			}
+//			return true;
+//		} catch(Exception e) {
+//			e.printStackTrace();
+//			return false;
+//		}
+//	}
+	
+	public boolean saveStu(String report_id, String worker_id) {
+		try {
+			String name = sdao.findById(report_id);
+			if(name.equals("null") || name.equals("")) {
+				String result = HTTP.sendGet("http://114.55.91.83:8191/api/user/" + worker_id, "");
+				if(result != null && !result.equals("")) { 
+					JSONObject json = new JSONObject(result);
+					sdao.save(report_id, worker_id, json.getString("name")); 
+				}
+			}
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean repair(String id, String page, String case_take_id, String bug_category, String description, String img_url, String severity, String recurrent, String report_id, String case_id) {
+		try {
+			if(id == null || id.equals("undefined")) { return false; }
+			KeyWords keywords = kwdao.findById(id);
+			String title = "";
+			if(keywords != null) { title = keywords.getTitle().replaceAll(",", ""); }
+			Bug bug = new Bug(case_take_id, Long.toString(System.currentTimeMillis()), bug_category, description, img_url, severityTranse(severity), recurrentTranse(recurrent), title, report_id, page, case_id);
+			bug.setId(id);
+			bugdao.save(bug);
+			mirrordao.save(new BugMirror(id, case_take_id, bug_category, severityTranse(severity), recurrentTranse(recurrent), title, img_url, new HashSet<String>(), new HashSet<String>(), report_id, "null", true)); //null为useCase
+			return true;
+		} catch(Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean repairThums(String case_take_id) {
+		try {
+			List<Bug> bugs = bugdao.findByCaseid(case_take_id);
+			Set<String> reports = new HashSet<String>();
+			for(Bug bug: bugs) {
+				String report_id = bug.getReport_id();
+				if(!reports.contains(report_id)) {
+					reports.add(report_id);
+					ThumsUp thumsup = tdao.findByReport(report_id);
+					if(thumsup == null) { continue; }
+					Set<String> thums = thumsup.getThums();
+					Set<String> diss = thumsup.getDiss();
+					if(thums != null && !thums.isEmpty()) {
+						for(String id : thums) {
+							BugMirror mirror = mirrordao.findById(id);
+							if(mirror == null) { continue; }
+							mirror.getGood().add(report_id);
+							mirrordao.save(mirror);
+						}
+					}
+					if(diss != null && !diss.isEmpty()) {
+						for(String id : diss) {
+							BugMirror mirror = mirrordao.findById(id);
+							if(mirror == null) { continue; }
+							mirror.getBad().add(report_id);
+							mirrordao.save(mirror);
+						}
+					}
+				}
+			}
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean repairTime(String case_take_id) {
+		try {
+			SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//			long start = dateformat.parse("2018-11-16 08:05:17").getTime();
+//			long middle = dateformat.parse("2018-11-16 09:15:17").getTime();
+//			long end = dateformat.parse("2018-11-16 11:55:17").getTime();
+			long start = dateformat.parse("2018-11-16 17:05:17").getTime();
+			long middle = dateformat.parse("2018-11-16 18:15:17").getTime();
+			long end = dateformat.parse("2018-11-16 19:55:17").getTime();
+			List<String> ids = aservice.getValid(case_take_id);
+			Collections.sort(ids);
+			int size = ids.size();
+			int middle_size = (int)(size * 0.7);
+			Long gap1 = (middle - start) / middle_size;
+			Long gap2 = (end - middle) / (size - middle_size);
+			for(int i = 0; i < middle_size; i ++) {
+				long new_time = start + gap1 * i;
+				Bug bug = bugdao.findByid(ids.get(i));
+				bug.setCreate_time_millis(Long.toString(new_time));
+				bugdao.save(bug);
+			}
+			for(int i = middle_size; i < size; i ++) {
+				long new_time = middle + gap2 * (i - middle_size);
+				Bug bug = bugdao.findByid(ids.get(i));
+				bug.setCreate_time_millis(Long.toString(new_time));
+				bugdao.save(bug);
+			}
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean saveTitle(String id, String title) {
+		try {
+			Bug bug = bugdao.findByid(id);
+			if(bug != null) { 
+				bug.setTitle(title);
+				bugdao.save(bug);
+			}
+			BugMirror mirror = mirrordao.findById(id);
+			if(mirror != null) {
+				mirror.setTitle(title);
+				mirrordao.save(mirror);
+			}
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public boolean confirm(String id, String report_id) {
+		try {
+			if(mirrordao.haveJudged(id, report_id)) {
+				mirrordao.good(id, report_id);
+				tdao.saveGood(id, report_id);
+				return true;
+			}
+			return false;
+		} catch(Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean cancelGood(String id, String report_id) {
+		try {
+			mirrordao.cancelGood(id, report_id);
+			tdao.cancelGood(id, report_id);
+			return true;
+		} catch(Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean diss(String id, String report_id) {
+		try {
+			if(mirrordao.haveJudged(id, report_id)) {
+				mirrordao.bad(id, report_id);
+				tdao.saveDiss(id, report_id);
+				return true;
+			}
+			return false;
+		} catch(Exception e) {
+			return false;
+		}
+	}
+	
+	public boolean cancelDiss(String id, String report_id) {
+		try {
+			mirrordao.canelBad(id, report_id);
+			tdao.cancelDiss(id, report_id);
+			return true;
+		} catch(Exception e) {
+			return false;
+		}
+	}
+	
+	private void savePage(String id, String case_take_id, String page) {
+		String[] pages = page.split("-");
+		int length = pages.length;
+		String page2 = "";
+		String page3 = "";
+		if(length == 2) {
+			page2 = pages[1];
+		} else if(length == 3) {
+			page2 = pages[1];
+			page3 = pages[2];
+		}
+		BugPage save = new BugPage(id, pages[0], page2, page3, case_take_id);
+		pagedao.save(save);
+	}
+	
+	private int severityTranse(String str) {
+		if(str.equals("待定")) {
+			return 1;
+		}
+		if(str.equals("较轻")) {
+			return 2;
+		}
+		if(str.equals("一般")) {
+			return 3;
+		}
+		if(str.equals("严重")) {
+			return 4;
+		}
+		if(str.equals("紧急")) {
+			return 5;
+		}
+		return 0;
+	}
+	
+	private int recurrentTranse(String str) {
+		if(str.equals("其他")) {
+			return 1;
+		}
+		if(str.equals("无规律复现")) {
+			return 2;
+		}
+		if(str.equals("小概率复现")) {
+			return 3;
+		}
+		if(str.equals("大概率复现")) {
+			return 4;
+		}
+		if(str.equals("必现")) {
+			return 5;
+		}
+		return 0;
+	}
+}

+ 47 - 0
src/main/java/edu/nju/service/UserBasedService.java

@@ -0,0 +1,47 @@
+package edu.nju.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import edu.nju.dao.BugDao;
+import edu.nju.dao.BugHistoryDao;
+import edu.nju.dao.BugMirrorDao;
+import edu.nju.entities.BugMirror;
+import edu.nju.util.UserCF;
+
+@Service
+public class UserBasedService {
+	
+	@Autowired
+	BugMirrorDao mirrordao;
+	
+	@Autowired
+	BugDao bugdao;
+	
+	@Autowired
+	BugHistoryDao historydao;
+		
+	public List<BugMirror> UserBased(String[] report_ids) {
+		UserCF cf = new UserCF();
+		String[][] input = new String[report_ids.length][];
+		for(int i = 0; i < input.length; i ++) {
+			List<String> list = getBugs(report_ids[i]);
+			list.add(0, report_ids[i]);
+			input[i] = list.toArray(new String[list.size()]);
+		}
+		return mirrordao.findByIds(cf.calculate(input));
+	}
+	
+	public List<String> getBugs(String report_id) {
+		List<String> result = historydao.findRoots(bugdao.findByReport(report_id));
+		if(result == null) {
+			return new ArrayList<String>();
+		} else {
+			return result;
+		}
+	}
+	
+}

+ 10 - 0
src/main/java/edu/nju/util/Algorithm.java

@@ -0,0 +1,10 @@
+package edu.nju.util;
+
+import java.util.List;
+
+import edu.nju.entities.BugMirror;
+
+public interface Algorithm {
+	public List<BugMirror> sort(BugMirror sample, List<BugMirror> lists);
+	public List<BugMirror> sort(List<BugMirror> lists);
+}

+ 40 - 0
src/main/java/edu/nju/util/Algorithm_1.java

@@ -0,0 +1,40 @@
+package edu.nju.util;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import edu.nju.entities.BugMirror;
+
+public class Algorithm_1 implements Algorithm{
+	
+	public List<BugMirror> sort(BugMirror sample, List<BugMirror> lists){
+		if(lists == null || lists.size() == 0) {return lists;}
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		
+		lists.sort(new Comparator<BugMirror>() {
+			public int compare(BugMirror m1, BugMirror m2) {
+				return m2.getGood().size() - m1.getGood().size();
+			}
+		});
+		for(int i = 0; i < lists.size() && i < 4; i ++) {
+			results.add(lists.get(i));
+		}
+		return results;
+	}
+	
+	public List<BugMirror> sort(List<BugMirror> lists){
+		if(lists == null || lists.size() == 0) {return lists;}
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		
+		lists.sort(new Comparator<BugMirror>() {
+			public int compare(BugMirror m1, BugMirror m2) {
+				return m1.getGood().size() - m2.getGood().size();
+			}
+		});
+		for(int i = 0; i < lists.size() && i < 4; i ++) {
+			results.add(lists.get(i));
+		}
+		return results;
+	}
+}

+ 21 - 0
src/main/java/edu/nju/util/Algorithm_2.java

@@ -0,0 +1,21 @@
+package edu.nju.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.nju.entities.BugMirror;
+
+public class Algorithm_2 implements Algorithm{
+	
+	public List<BugMirror> sort(BugMirror sample, List<BugMirror> lists){
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		
+		return results;
+	}
+	
+	public List<BugMirror> sort(List<BugMirror> lists){
+		List<BugMirror> results = new ArrayList<BugMirror>();
+		
+		return results;
+	}
+}

+ 81 - 0
src/main/java/edu/nju/util/ExcelToJson.java

@@ -0,0 +1,81 @@
+package edu.nju.util;
+
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+public class ExcelToJson {
+	
+	@SuppressWarnings("resource")
+	public static JSONArray ExcelTranse(String path) {
+		JSONArray dataArray = new JSONArray();
+		try {
+			XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(path));
+			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
+			int xssfLastRowNum = xssfSheet.getLastRowNum();
+			JSONObject object = new JSONObject();
+			JSONObject second = new JSONObject();
+			for(int rowNum = 1; rowNum <= xssfLastRowNum; rowNum++) {
+				XSSFRow xssfRow = xssfSheet.getRow(rowNum);
+				if(xssfRow == null) { continue; }
+				
+				XSSFCell cell = xssfRow.getCell(0);
+				String cellValue0 = cell.getStringCellValue();
+				if(cellValue0 != "") {
+					if(object.length() != 0) {
+						dataArray.put(object);
+						object = new JSONObject();
+					}
+					object.put("item", cellValue0);
+					object.put("children", new JSONArray());
+				}
+				
+				cell = xssfRow.getCell(1);
+				String cellValue1 = cell.getStringCellValue();
+				if(cellValue1 != "") {
+					if(second.length() != 0) {
+						JSONArray array = (JSONArray)object.get("children");
+						array.put(second);
+						object.put("children", array);
+						second = new JSONObject();
+					}
+					second.put("item", cellValue1);
+					second.put("children", new JSONArray());
+				}
+
+				cell = xssfRow.getCell(2);
+				JSONArray arr = (JSONArray)second.get("children");
+				JSONObject third = new JSONObject();
+				third.put("item", cell.getStringCellValue());
+				arr.put(third);
+				second.put("children", arr);
+				
+			}
+			dataArray.put(object);
+			
+			return dataArray;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+	
+	public static void writeToFile(String path, JSONArray dataArray) {
+		try {
+			FileWriter writer = new FileWriter(path.replaceAll("xlsx", "json"));
+			PrintWriter out = new PrintWriter(writer);
+	        out.write(dataArray.toString());
+	        out.println();
+	        writer.close();
+	        out.close();
+		} catch (Exception e) { e.printStackTrace(); }
+	}
+	
+}

+ 146 - 0
src/main/java/edu/nju/util/HTTP.java

@@ -0,0 +1,146 @@
+package edu.nju.util;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+
+public class HTTP {
+
+    /**
+     * 向指定URL发送GET方法的请求
+     *
+     * @param url
+     *            发送请求的URL
+     * @param param
+     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return URL 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param) {
+        String result = "";
+        BufferedReader in = null;
+        try {
+            String urlNameString = url + "?" + param;
+            URL realUrl = new URL(urlNameString);
+            // 打开和URL之间的连接
+            URLConnection connection = realUrl.openConnection();
+            // 设置通用的请求属性
+            connection.setRequestProperty("accept", "*/*");
+//            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            // 建立实际的连接
+            connection.connect();
+            // 获取所有响应头字段
+//            Map<String, List<String>> map = connection.getHeaderFields();
+            // 遍历所有的响应头字段
+//            for (String key : map.keySet()) {
+//                System.out.println(key + "--->" + map.get(key));
+//            }
+            // 定义 BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(new InputStreamReader(
+                    connection.getInputStream()));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result += line;
+            }
+        } catch (Exception e) {
+            System.out.println("发送GET请求出现异常!" + e);
+            e.printStackTrace();
+        }
+        // 使用finally块来关闭输入流
+        finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (Exception e2) {
+                e2.printStackTrace();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 从输入流中获取字节数组
+     * @param inputStream
+     * @return
+     * @throws IOException
+     */
+    public static byte[] readInputStream(InputStream inputStream) throws IOException {
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        while((len = inputStream.read(buffer)) != -1) {
+            bos.write(buffer, 0, len);
+        }
+        bos.close();
+        return bos.toByteArray();
+    }
+
+    /**
+     * 从网络Url中下载文件
+     * @param urlStr
+     * @param fileName
+     * @param savePath
+     * @throws IOException
+     */
+    public static void downLoadFromUrl(String urlStr, String fileName, String savePath) throws IOException{
+        URL url = new URL(urlStr);
+        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+        //设置超时间为3秒
+        conn.setConnectTimeout(3 * 1000);
+        //防止屏蔽程序抓取而返回403错误
+        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+        conn.setRequestProperty("Charset", "UTF-8");
+
+        //得到输入流
+        InputStream inputStream = conn.getInputStream();
+        //获取自己数组
+        byte[] getData = readInputStream(inputStream);
+
+        //文件保存位置
+        File saveDir = new File(savePath);
+        if(!saveDir.exists()){ saveDir.mkdir(); }
+
+        File file = new File(saveDir + File.separator + fileName);
+        FileOutputStream fos = new FileOutputStream(file);
+        fos.write(getData);
+        if(fos != null) { fos.close(); }
+        if(inputStream != null) { inputStream.close(); }
+        System.out.println("info:" + url + " download success");
+    }
+
+    public static boolean sendPut(String host, String url, String param) {
+        try {
+            String urlNameString = url + "?" + param;
+            URL realUrl = new URL(urlNameString);
+            // 打开和URL之间的连接
+            HttpURLConnection connection;
+            connection = (HttpURLConnection)realUrl.openConnection();
+            connection.setDoInput(true);
+            connection.setDoOutput(true);
+            // 设置通用的请求属性
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("Host", host);
+            connection.setRequestMethod("PUT");
+//            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            // 建立实际的连接
+            connection.connect();
+            // 获取所有响应头字段
+            Map<String, List<String>> map = connection.getHeaderFields();
+            for (String key : map.keySet()) {
+                System.out.println(key + "--->" + map.get(key));
+            }
+            return true;
+        } catch (Exception e) {
+            System.out.println("发送GET请求出现异常!" + e);
+            e.printStackTrace();
+            return false;
+        }
+    }
+}

+ 26 - 0
src/main/java/edu/nju/util/LoadConf.java

@@ -0,0 +1,26 @@
+package edu.nju.util;
+
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+
+public class LoadConf {
+
+    public static JSONObject loadConf(String name) {
+        try {
+            BufferedReader br = new BufferedReader(new FileReader("./conf/" + name));
+            StringBuilder sb = new StringBuilder();
+            String s = null;
+            while ((s = br.readLine()) != null) {
+                sb.append(s);
+            }
+            JSONObject data = new JSONObject(sb.toString());
+            return data;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+}

+ 47 - 0
src/main/java/edu/nju/util/PMF.java

@@ -0,0 +1,47 @@
+package edu.nju.util;
+
+public class PMF {
+    public static void matrix_factorization(double[][] R, double[][] U, double[][] V, int N, int M, int K){
+       int steps = 6000;
+       double alpha = 0.0002;
+       double beta = 0.02;
+       for(int step = 0 ; step < steps ; ++step){
+           for(int i = 0 ; i < N ; ++i) {
+               for(int j = 0 ; j < M ; ++j){
+                   if(R[i][j] > 0){
+                       double eij = R[i][j];
+                       for(int k = 0 ; k < K ; ++k){
+                           eij -= U[i][k] * V[k][j]; 
+                       }
+                       for(int k = 0 ; k < K ; ++k){
+                           U[i][k] += alpha * (2 * eij * V[k][j] - beta * U[i][k]);
+                           V[k][j] += alpha * (2 * eij * U[i][k] - beta * V[k][j]);
+                       } 
+                       } 
+                   }
+               }
+           double loss = 0;
+           for(int i = 0 ; i < N ; ++i){
+                for(int j = 0 ; j < M ; ++j) {
+                    if(R[i][j] > 0){
+                        double eij = 0;
+                        	for(int k = 0; k < K; ++k){
+                               eij += U[i][k] * V[k][j]; 
+                        	} 
+                            loss += Math.pow(R[i][j] - eij,2); 
+                            for(int k = 0; k < K; ++k){
+                                loss += (beta / 2) * (Math.pow(U[i][k], 2) + Math.pow(V[k][j], 2)); 
+                            }  
+                    }
+                }
+           } 
+           if(loss < 0.001) {
+        	   System.out.println("total step:" + step);
+               break;
+           } 
+           if (step % 1000 == 0) {
+               System.out.println("step:" + step + ",loss:" + loss);
+           }
+       }
+   }
+}

+ 129 - 0
src/main/java/edu/nju/util/StringMatch.java

@@ -0,0 +1,129 @@
+package edu.nju.util;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.ansj.domain.Term;
+import org.ansj.splitWord.analysis.ToAnalysis;
+
+import edu.nju.entities.BugMirror;
+
+public class StringMatch {
+	public List<BugMirror> match(String content, List<BugMirror> mirrors) {
+		String[] strs = Ansj(content).split(",");
+		List<BugMirror> result = new ArrayList<BugMirror>();
+		Map<BugMirror, Integer> map = new HashMap<BugMirror, Integer>();
+		for(BugMirror mirror : mirrors) {
+			int sum = 0;
+			for(int i = 0; i < strs.length && i < 10; i ++) {
+				if(mirror.getTitle().contains(strs[i])) {
+					sum ++;
+				}
+			}
+			if(sum > 0) {
+				map.put(mirror, sum);
+			}
+		}
+		List<Entry<BugMirror,Integer>> list = new ArrayList<Entry<BugMirror,Integer>>();
+		list.addAll(map.entrySet());
+		Collections.sort(list, (a, b) -> (b.getValue() - a.getValue()));
+		if(list.size() > 0) {
+			for(int i = 0; i < list.size() && i < 6; i ++) {
+				result.add(list.get(i).getKey());
+			}
+		}
+		return result;
+	}
+	
+	public String Ansj(String str) {
+		Set<String> expectedNature = new HashSet<String> ();
+        expectedNature.add("n");
+        expectedNature.add("v");
+        expectedNature.add("f");
+//        expectedNature.add("en");
+        StringBuilder result = new StringBuilder();
+        List<Term> terms = ToAnalysis.parse(str).getTerms();
+        for(Term term : terms) {
+        	String word = term.getName();
+        	String nature = term.getNatureStr();
+        	if(expectedNature.contains(nature)) {
+        		result.append(word+",");
+        	}
+        }
+        return result.toString();
+	}
+	
+	public float score(String str1, String str2) {
+		int[][] vector = getStringFrequency(Arrays.asList(str1.split(",")), Arrays.asList(str2.split(",")));
+		return getDoubleStrForCosValue(vector);
+	}
+	
+	public int[][] getStringFrequency(List<String> str1List, List<String> str2List){
+        Set<String> cnSet = new HashSet<String>();
+        cnSet.addAll(str1List);
+        cnSet.addAll(str2List);
+        int[][] res = new int[2][cnSet.size()];
+        Iterator<String> it = cnSet.iterator();
+        int i = 0;
+
+        while(it.hasNext()){
+            String word = it.next().toString();
+            int s1 = 0;
+            int s2 = 0;
+
+            for(String str : str1List){
+                if(word.equals(str)){
+                    s1++;
+                }
+            }
+
+            res[0][i] = s1;
+            for(String str : str2List){
+                if(word.equals(str)){
+                    s2 ++;
+                }
+            }
+
+            res[1][i] = s2;
+            i ++;
+        }
+
+        return res;
+    }
+	
+	public float getDoubleStrForCosValue(int [][] ints){
+        BigDecimal fzSum = new BigDecimal(0);
+        BigDecimal fmSum = new BigDecimal(0);
+        int num = ints[0].length;
+
+        for(int i = 0; i < num; i ++){
+            BigDecimal adb = new BigDecimal(ints[0][i]).multiply(new BigDecimal(ints[1][i]));
+            fzSum = fzSum.add(adb);
+
+        }
+
+        BigDecimal seq1SumBigDecimal = new BigDecimal(0);
+        BigDecimal seq2SumBigDecimal = new BigDecimal(0);
+
+        for(int i = 0; i < num; i ++){
+            seq1SumBigDecimal = seq1SumBigDecimal.add(new BigDecimal(Math.pow(ints[0][i],2)));
+            seq2SumBigDecimal = seq2SumBigDecimal.add(new BigDecimal(Math.pow(ints[1][i],2)));
+        }
+        double sqrt1 = Math.sqrt(seq1SumBigDecimal.doubleValue());
+        double sqrt2 = Math.sqrt(seq2SumBigDecimal.doubleValue());
+        fmSum = new BigDecimal(sqrt1).multiply(new BigDecimal(sqrt2));
+        
+        return fzSum.divide(fmSum,10,RoundingMode.HALF_UP).floatValue();
+    }
+
+}

+ 101 - 0
src/main/java/edu/nju/util/UserCF.java

@@ -0,0 +1,101 @@
+package edu.nju.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * 基于用户的协同过滤推荐算法实现
+A a b d
+B a c
+C b e
+D c d e
+ * @author HPF
+ *
+ */
+public class UserCF {
+
+	public List<String> calculate(String[][] matrixs) {
+		//输入用户总量
+		int N = matrixs.length;
+		int[][] sparseMatrix = new int[N][N];//建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】
+		Map<String, Integer> userItemLength = new HashMap<>();//存储每一个用户对应的不同物品总数  eg: A 3
+		Map<String, Set<String>> itemUserCollection = new HashMap<>();//建立物品到用户的倒排表 eg: a A B
+		Set<String> items = new HashSet<>();//辅助存储物品集合
+		Map<String, Integer> userID = new HashMap<>();//辅助存储每一个用户的用户ID映射
+		Map<Integer, String> idUser = new HashMap<>();//辅助存储每一个ID对应的用户映射
+		
+		for(int i = 0; i < N ; i++){//依次处理N个用户 输入数据  以空格间隔
+			String[] user_item = matrixs[i];
+			int length = user_item.length;
+			userItemLength.put(user_item[0], length-1);//eg: A 3
+			userID.put(user_item[0], i);//用户ID与稀疏矩阵建立对应关系
+			idUser.put(i, user_item[0]);
+			//建立物品--用户倒排表
+			for(int j = 1; j < length; j ++){
+				if(items.contains(user_item[j])){//如果已经包含对应的物品--用户映射,直接添加对应的用户
+					itemUserCollection.get(user_item[j]).add(user_item[0]);
+				}else{//否则创建对应物品--用户集合映射
+					items.add(user_item[j]);
+					itemUserCollection.put(user_item[j], new HashSet<String>());//创建物品--用户倒排关系
+					itemUserCollection.get(user_item[j]).add(user_item[0]);
+				}
+			}
+		}
+		//计算相似度矩阵【稀疏】
+		Set<Entry<String, Set<String>>> entrySet = itemUserCollection.entrySet();
+		Iterator<Entry<String, Set<String>>> iterator = entrySet.iterator();
+		while(iterator.hasNext()){
+			Set<String> commonUsers = iterator.next().getValue();
+			for (String user_u : commonUsers) {
+				for (String user_v : commonUsers) {
+					if(user_u.equals(user_v)){
+						continue;
+					}
+					sparseMatrix[userID.get(user_u)][userID.get(user_v)] += 1;//计算用户u与用户v都有正反馈的物品总数
+				}
+			}
+		}
+		String recommendUser = matrixs[0][0];
+		//计算用户之间的相似度【余弦相似性】
+//		int recommendUserId = userID.get(recommendUser);
+//		for (int j = 0;j < sparseMatrix.length; j++) {
+//				if(j != recommendUserId){
+//					System.out.println(idUser.get(recommendUserId)+"--"+idUser.get(j)+"相似度:"+sparseMatrix[recommendUserId][j]/Math.sqrt(userItemLength.get(idUser.get(recommendUserId))*userItemLength.get(idUser.get(j))));
+//				}
+//		}
+		Map<String, Double> result = new HashMap<String, Double>();
+		//计算指定用户recommendUser的物品推荐度
+		for(String item: items){//遍历每一件物品
+			Set<String> users = itemUserCollection.get(item);//得到购买当前物品的所有用户集合
+			if(!users.contains(recommendUser)){//如果被推荐用户没有购买当前物品,则进行推荐度计算
+				double itemRecommendDegree = 0.0;
+				for(String user: users){
+					itemRecommendDegree += sparseMatrix[userID.get(recommendUser)][userID.get(user)]/Math.sqrt(userItemLength.get(recommendUser)*userItemLength.get(user));//推荐度计算
+				}
+				//System.out.println("The item "+item+" for "+recommendUser +"'s recommended degree:"+itemRecommendDegree);
+				result.put(item, itemRecommendDegree);
+			}
+		}
+		List<Entry<String, Double>> lists = new ArrayList<>(result.entrySet());
+		List<String> rec = new ArrayList<String>();
+		Collections.sort(lists, (a, b) -> ((int)(b.getValue() - a.getValue())));
+		if(lists.size() == 0) {
+			return rec;
+		} else if(lists.size() == 1) {
+			rec.add(lists.get(0).getKey());
+			return rec;
+		}
+		rec.add(lists.get(0).getKey());
+		rec.add(lists.get(1).getKey());
+		return rec;
+	}
+
+}
+

BIN
src/main/resources/.DS_Store


+ 11 - 0
src/main/resources/application.properties

@@ -0,0 +1,11 @@
+server.port = 8090
+server.servlet.context-path = /Bug/api/
+
+spring.data.mongodb.host = ${MONGO_HOST:10.81.65.118}
+spring.data.mongodb.port = ${MONGO_PORT:29019}
+spring.data.mongodb.database = ${MONGO_DBNAME:co-report}
+
+spring.http.encoding.force = true
+spring.http.encoding.charset = UTF-8
+spring.http.encoding.enabled = true
+server.tomcat.uri-encoding = UTF-8

+ 16 - 0
src/test/java/edu/nju/bug/BugApplicationTests.java

@@ -0,0 +1,16 @@
+package edu.nju.bug;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class BugApplicationTests {
+
+    @Test
+    public void contextLoads() {
+    }
+
+}

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff