Bläddra i källkod

增加信创调用接口创建任务;修改配置信息,使用mongo获取部分配置项信息

郭超 4 år sedan
förälder
incheckning
513b1fb72b

+ 0 - 1
1718.json

@@ -1 +0,0 @@
-[{"item":"首页","children":[{"item":"众测广场","children":[{"item":"众测项目"},{"item":"众测任务"}]},{"item":"众测技术","children":[{"item":"技术文章"},{"item":"论文专著"}]},{"item":"个人中心","children":[{"item":"基本信息"},{"item":"我的资质"},{"item":"我的银行卡"},{"item":"修改登录密码"},{"item":"手机号绑定"},{"item":"邮箱绑定"},{"item":"身份认证"}]},{"item":"我的众测","children":[{"item":"未完成任务"},{"item":"已完成任务"},{"item":"我的项目"},{"item":"处理中的项目"},{"item":"可接收项目"}]}]}]

+ 106 - 0
src/main/java/com/mooctest/controller/advice/ExceptionAdvice.java

@@ -0,0 +1,106 @@
+package com.mooctest.crowd.site.controller.advice;
+
+import com.mooctest.crowd.domain.exception.*;
+import com.mooctest.crowd.site.constants.ResponseConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-25 00:08
+ */
+@Slf4j
+@RestControllerAdvice
+public class ExceptionAdvice {
+
+    @ExceptionHandler(BaseException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    public String handleException(Exception e){
+        log.error("访问出错:"+e.getMessage(), e);
+        if (e instanceof AccountNotExistException){
+            return ResponseConstant.USER_NOT_EXISTS;
+        } else if (e instanceof NullPointerException){
+            return "操作失败";
+        } else if (e instanceof CrowdTestProjectNotExistException){
+            return "项目不存在";
+        } else if (e instanceof CrowdTestTaskNotExistException){
+            return "任务不存在";
+        } else if (e instanceof CrowdTestReportNotExistException){
+            return "报告不存在";
+        } else if (e instanceof CrowdTestTaskNoPriceException){
+            return "项目未设置价格";
+        } else if (e instanceof PasswordErrorException){
+            return "密码错误";
+        } else if (e instanceof ApplicationTypeNoExistException){
+            return "应用类型不存在";
+        } else if (e instanceof TestTypeNoExistException){
+            return "服务类型不存在";
+        } else if (e instanceof ApplicationTypeToTestTypeNoExistException){
+            return "应用类型对应的测试类型不存在";
+        } else if (e instanceof FieldNoExistException){
+            return "领域不存在";
+        } else if (e instanceof ResourceNoExistException){
+            return "资源不存在";
+        } else if (e instanceof UserTaskCountNoExistException) {
+            return "当前用户没有参与接包";
+        } else if (e instanceof HaveNotAgencyAuthException){
+            return "您未认证为接包用户,请认证后操作。";
+        } else if (e instanceof HaveNotPartAuthException){
+            return "您未认证为发包用户,请认证后操作。";
+        } else if(e instanceof CrowdTestEndPointException){
+            return "任务的服务序列号输入有误,不是base64加密后的序列号。";
+        } else if(e instanceof ExportTaskFileNotExistException){
+            return "导出的任务文件不存在。";
+        } else if(e instanceof ExportTaskFileDirectoryNotExistException){
+            return "导出的任务文件所在的文件夹不存在。";
+        } else if(e instanceof FileIsEmptyException){
+            return "文件不存在或文件是空文件,请重新上传。";
+        } else if(e instanceof FileCopyException){
+            return "复制文件错误。";
+        } else if(e instanceof FileDownloadException){
+            return "文件下载失败。";
+        } else if(e instanceof FileUploadFailureException){
+            return "文件上传失败。";
+        } else if(e instanceof IllegalStateUploadException){
+            return "文件上传失败,由于存在部分分片未上传完成。";
+        } else {
+            return e.getMessage();
+        }
+    }
+
+    @ExceptionHandler(UnauthorizedException.class)
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    public String handleUnauthorized(UnauthorizedException e){
+        log.info("401:未经认证的请求");
+        return e.getMessage();
+    }
+
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
+    public String handlMethodNotAllowdd(HttpRequestMethodNotSupportedException e){
+        log.info("method not allowdd", e);
+        return e.getMessage();
+    }
+
+    @ExceptionHandler(Exception.class)
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+    @ResponseBody
+    public String handleSystemException(Exception e){
+        log.error("System Error: "+e.getMessage(), e);
+//        return "系统异常 " + e.getMessage();
+        return e.getMessage();
+    }
+
+    @ExceptionHandler(Excel2ProjectException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    public String handleExcel2ProjectException(Excel2ProjectException e){
+        log.error("Excel表中存在错误:"+e.getErrorLogs());
+        return "Excel表中存在错误:"+ e.getErrorLogs();
+    }
+}

+ 9 - 0
src/main/java/com/mooctest/dao/ConfigurationDao.java

@@ -0,0 +1,9 @@
+package com.mooctest.dao;
+
+import com.mooctest.model.ExtendBug;
+import com.mooctest.model.Task;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface TaskDao extends MongoRepository<Task, Long> {
+}
+

+ 8 - 0
src/main/java/com/mooctest/exception/BaseException.java

@@ -0,0 +1,8 @@
+package com.mooctest.exception;
+
+/**
+ * @author guochao
+ * @date 2021-05-11 15:48
+ */
+public class BaseException {
+}

+ 8 - 0
src/main/java/com/mooctest/exception/ConfigurationNotExistException.java

@@ -0,0 +1,8 @@
+package com.mooctest.exception;
+
+/**
+ * @author guochao
+ * @date 2021-05-11 15:51
+ */
+public class ConfigurationNotExistException {
+}

+ 19 - 0
src/main/java/com/mooctest/exception/ServerException.java

@@ -0,0 +1,19 @@
+package com.mooctest.crowd.site.exception;
+
+import com.mooctest.crowd.site.data.response.ServerCode;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ServerException extends RuntimeException {
+    private int errorCode;
+    private String error;
+
+    public ServerException(ServerCode serverCode){
+        this.errorCode = serverCode.getCode();
+        this.error = serverCode.getMsg();
+    }
+}

+ 49 - 0
src/main/java/com/mooctest/model/Configuration.java

@@ -0,0 +1,49 @@
+package com.mooctest.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Document(collection = "bug")
+public class Bug {
+
+    @Id
+    private String id;
+
+    @Field("case_take_id")
+    private String caseTakeId;
+
+    @Field("report_id")
+    private String reportId;
+
+    private String title;
+/**/
+    private String description;
+
+    @Field("img_url")
+    private String imgUrls;
+
+    private short severity;
+
+    private short recurrent;
+
+    @Field("bug_category")
+    private String bugCategory;
+
+    @Field("create_time_millis")
+    private String createTimeMillis;
+
+    @Field("bug_page")
+    private String bugPage;
+
+    @Field("case_id")
+    private String caseId;
+}

+ 30 - 0
src/main/java/com/mooctest/model/TaskExtend.java

@@ -0,0 +1,30 @@
+package com.mooctest.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Document(collection = "Task")
+public class Task {
+
+    private long taskId;
+    private long caseId;
+    private String name;
+    private String icon;
+    private String version;
+    private int status;
+    private String startTime;
+    private String endTime;
+
+    public Task(long taskId, long caseId, String name) {
+        this.taskId = taskId;
+        this.caseId = caseId;
+        this.name = name;
+    }
+
+
+}

+ 8 - 0
src/main/java/com/mooctest/service/impl/ConfigurationService.java

@@ -0,0 +1,8 @@
+package com.mooctest.service.impl;
+
+/**
+ * @author guochao
+ * @date 2021-05-11 11:39
+ */
+public interface ConfigurationService {
+}

+ 13 - 0
src/main/java/com/mooctest/service/impl/ConfigurationServiceImpl.java

@@ -0,0 +1,13 @@
+package com.mooctest.service.impl;
+
+import com.mooctest.model.Configuration;
+
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2021-05-11 11:39
+ */
+public interface ConfigurationService {
+	List<Configuration> getAllConfiguration();
+}

+ 1 - 0
src/main/resources/apidoc/V1.0/.cache.json

@@ -0,0 +1 @@
+[]

+ 98 - 0
src/main/resources/apidoc/V1.0/index.html

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>融合系统API Documentation</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css">
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/google-code-prettify@1.0.5/bin/prettify.min.css">
+    <link rel="stylesheet" href="style.css">
+</head>
+<body onload="PR.prettyPrint()">
+<nav class="navbar">
+    <div class="container-fluid">
+        <div class="navbar-header">
+            <a class="navbar-brand" href="index.html">
+                融合系统
+            </a>
+        </div>
+        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav navbar-right">
+                <li><a href="https://github.com/YeDaxia/JApiDocs" target="_blank">GitHub</a></li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">V1.0<span class="caret"></span></a>
+                    <ul class="dropdown-menu">
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+<div class="book with-summary">
+    <div class="book-summary">
+<div class="search-box form-group">
+    <input type="text" class="form-control" id="inputSearch" placeholder="搜索接口">
+    <span class="glyphicon glyphicon-search form-control-feedback" aria-hidden="true"></span>
+</div>
+<div id="accordion" class="catalog">
+</div>    </div>
+    <div class="book-body">
+        <div class="body-inner">
+            <div class="book-header">
+                <div class="d-flex justify-content-between">
+                    <a class="header-menu toggle-catalog" href="javascript:void(0)"><i
+                                class="glyphicon glyphicon-align-justify"></i> 目录</a>
+                </div>
+            </div>
+            <div class="page-wrapper">
+                <div class="page-inner">
+                    <div class="main-content">
+                        <img src="http://static.nowait.xin/pic/japidocs-logo.png" width="200" height="200">
+                        <h4 style="margin: 20px">本文档由JApiDocs生成</h4>
+                        <div class="list-group" style="min-width: 200px">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
+<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.jquery.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/google-code-prettify@1.0.5/bin/prettify.min.js"></script>
+<script>
+
+    var search_source_data = [
+    ];
+
+
+    $('.toggle-catalog').click(function () {
+        $('.book').toggleClass('with-summary');
+    });
+
+    $('#inputSearch').autocomplete({hint: false}, [
+        {
+            source: function (query, callback) {
+                var result = [];
+                for(var i = 0; i !== search_source_data.length; i++){
+                    if(search_source_data[i].name.indexOf(query) !== -1){
+                        result.push(search_source_data[i]);
+                    }
+                }
+                callback(result);
+            },
+            displayKey: 'name',
+            templates: {
+                suggestion: function (suggestion) {
+                    return suggestion.name;
+                }
+            }
+        }
+    ]).on('autocomplete:selected', function (event, suggestion, dataset, context) {
+        self.location = suggestion.url;
+    });
+</script>
+</body>
+</html>

+ 300 - 0
src/main/resources/apidoc/V1.0/style.css

@@ -0,0 +1,300 @@
+body, html {
+    height: 100%;
+}
+
+.book{
+    position: relative;
+    width: 100%;
+    height: 100%;
+}
+
+.book.with-summary .book-summary {
+    left: 0;
+}
+
+.book-summary {
+    position: absolute;
+    top: 0;
+    left: -300px;
+    bottom: 0;
+    z-index: 1;
+    overflow-y: auto;
+    width: 300px;
+    color: #364149;
+    background: #fafafa;
+    border-right: 1px solid rgba(0,0,0,.07);
+    -webkit-transition: left 250ms ease;
+    -moz-transition: left 250ms ease;
+    -o-transition: left 250ms ease;
+    transition: left 250ms ease;
+}
+
+.book-body {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    overflow-y: auto;
+    color: #333;
+    background: #fff;
+    -webkit-transition: left 250ms ease;
+    -moz-transition: left 250ms ease;
+    -o-transition: left 250ms ease;
+    transition: left 250ms ease;
+}
+
+.book-body .body-inner {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    overflow-y: auto;
+    padding-top: 10px;
+}
+
+.book-header {
+    overflow: visible;
+    height: 50px;
+    z-index: 2;
+    font-size: .85em;
+    color: #7e888b;
+    background: 0 0;
+}
+
+.book-header a.header-menu{
+    font-size: 18px;
+    color: #555555;
+    padding: 10px;
+    text-decoration: none;
+}
+
+.book-header a.header-menu:hover{
+    text-decoration: none;
+    color: #5cb85c;
+}
+
+.page-wrapper {
+    position: relative;
+    outline: 0;
+}
+
+.book .book-body .page-wrapper .page-inner {
+    position: relative;
+    left: 0px;
+    transition: 300ms ease left;
+}
+
+.page-inner {
+    position: relative;
+    max-width: 900px;
+    margin: 0 auto;
+    padding: 20px 15px 40px 15px;
+}
+
+@media (min-width: 600px){
+    .book.with-summary .book-body {
+        left: 300px;
+    }
+}
+
+@media (max-width: 600px){
+    .book-summary {
+        width: calc(100% - 60px);
+        bottom: 0;
+        left: -100%;
+    }
+    .book.with-summary .book-body {
+        -webkit-transform: translate(calc(100% - 60px),0);
+        -moz-transform: translate(calc(100% - 60px),0);
+        -ms-transform: translate(calc(100% - 60px),0);
+        -o-transform: translate(calc(100% - 60px),0);
+        transform: translate(calc(100% - 60px),0);
+    }
+}
+
+@media (max-width: 1240px){
+    .book-body {
+        -webkit-transition: -webkit-transform 250ms ease;
+        -moz-transition: -moz-transform 250ms ease;
+        -o-transition: -o-transform 250ms ease;
+        transition: transform 250ms ease;
+        padding-bottom: 20px;
+    }
+}
+
+@media (max-width: 1240px){
+    .book-body .body-inner {
+        position: static;
+        min-height: calc(100% - 50px);
+    }
+}
+
+.navbar{
+    background: #5cb85c;
+    color: #FFF;
+}
+
+.navbar a{
+    color: #FFF;
+}
+.navbar-brand{
+    font-weight: 600;
+}
+
+@media (min-width: 768px){
+    .navbar {
+        border-radius: 0;
+    }
+}
+
+.catalog .panel{
+    margin-bottom: 0;
+    border-radius: 0;
+    border: none;
+    box-shadow: none;
+    -webkit-box-shadow: none;
+}
+
+.catalog .catalog-title {
+    border-bottom: 1px solid #EAEAEA;
+    padding: 1rem 1.25rem;
+    background: rgba(0, 0, 0, .03);
+    cursor: pointer;
+    color: #333;
+    font-weight: 600;
+    font-size: 16px;
+}
+
+.catalog-item{
+    padding: 8px 15px;
+    margin-left: 15px;
+    color: #888;
+    border-bottom: solid #EEE 1px;
+    display: block;
+}
+
+.action-item h2 a{
+    color: #5cb85c;
+}
+
+a:hover{
+    color: #449d44;
+}
+
+.search-box{
+    position: relative;
+    margin: 10px;
+}
+
+.navbar{
+    margin-bottom: 0;
+}
+
+.main-content{
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    margin-top: 20px;
+}
+
+.text-bold{
+    font-weight: bold;
+}
+
+/**third part*/
+
+.algolia-autocomplete {
+    width: 100%;
+}
+.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
+    width: 100%;
+}
+.algolia-autocomplete .aa-hint {
+    color: #888;
+}
+.algolia-autocomplete .aa-dropdown-menu {
+    width: 100%;
+    background-color: #fff;
+    border: 1px solid #EEE;
+    border-top: none;
+}
+.algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
+    cursor: pointer;
+    padding: 5px 4px;
+}
+.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
+    background-color: #449d44;
+    color: #FFF;
+}
+.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
+    font-weight: bold;
+    font-style: normal;
+}
+
+
+/* Doxy pretty-printing styles. Used with prettify.js.  */
+
+pre .str, code .str { color: #fec243; } /* string  - eggyolk gold */
+pre .kwd, code .kwd { color: #8470FF; } /* keyword - light slate blue */
+pre .com, code .com { color: #32cd32; font-style: italic; } /* comment - green */
+pre .typ, code .typ { color: #6ecbcc; } /* type - turq green */
+pre .lit, code .lit { color: #d06; } /* literal - cherry red */
+pre .pun, code .pun { color: #8B8970;  } /* punctuation - lemon chiffon4  */
+pre .pln, code .pln { color: #f0f0f0; } /* plaintext - white */
+pre .tag, code .tag { color: #9c9cff; } /* html/xml tag  (bluey)  */
+pre .htm, code .htm { color: #dda0dd; } /* html tag  light purply*/
+pre .xsl, code .xsl { color: #d0a0d0; } /* xslt tag  light purply*/
+pre .atn, code .atn { color: #46eeee; font-weight: normal;} /* html/xml attribute name  - lt turquoise */
+pre .atv, code .atv { color: #EEB4B4; } /* html/xml attribute value - rosy brown2 */
+pre .dec, code .dec { color: #3387CC; } /* decimal - blue */
+
+a {
+    text-decoration: none;
+}
+
+pre.prettyprint, code.prettyprint {
+    font-family:'Droid Sans Mono','CPMono_v07 Bold','Droid Sans';
+    font-weight: bold;
+    font-size: 11pt;
+    background-color: #0f0f0f;
+    -moz-border-radius: 8px;
+    -webkit-border-radius: 8px;
+    -o-border-radius: 8px;
+    -ms-border-radius: 8px;
+    -khtml-border-radius: 8px;
+    border-radius: 8px;
+}  /*  background is black (well, just a tad less dark )  */
+
+pre.prettyprint {
+    padding: 1em;
+    white-space: pre-wrap;
+}
+
+pre.prettyprint a, code.prettyprint a {
+    text-decoration:none;
+}
+/* Specify class=linenums on a pre to get line numbering; line numbers themselves are the same color as punctuation */
+ol.linenums { margin-top: 0; margin-bottom: 0; color: #8B8970; } /* IE indents via margin-left */
+li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,li.L3,li.L5,li.L7,li.L9 { }
+
+/* print is mostly unchanged from default at present  */
+@media print {
+    pre.prettyprint, code.prettyprint { background-color: #fff;  }
+    pre .str, code .str { color: #088; }
+    pre .kwd, code .kwd { color: #006; font-weight: bold; }
+    pre .com, code .com { color: #oc3; font-style: italic; }
+    pre .typ, code .typ { color: #404; font-weight: bold; }
+    pre .lit, code .lit { color: #044; }
+    pre .pun, code .pun { color: #440; }
+    pre .pln, code .pln { color: #000; }
+    pre .tag, code .tag { color: #b66ff7; font-weight: bold; }
+    pre .htm, code .htm { color: #606; font-weight: bold; }
+    pre .xsl, code .xsl { color: #606; font-weight: bold; }
+    pre .atn, code .atn { color: #c71585;  font-weight: normal; }
+    pre .atv, code .atv { color: #088;  font-weight: normal; }
+}

+ 2 - 0
src/main/resources/apidoc/V1.0/融合系统-V1.0-api-docs.md

@@ -0,0 +1,2 @@
+> This documentation is generated by [JApiDocs](https://japidocs.agilestudio.cn/).
+---