Bläddra i källkod

添加导入导出

insomniaLee 4 år sedan
förälder
incheckning
3b801ed3bf

+ 18 - 0
src/main/java/com/mooctest/controller/TaskController.java

@@ -173,6 +173,11 @@ public class TaskController {
         return "addCrowdTask";
     }
 
+    @GetMapping("/importTask")
+    public String importTask(Model model){
+        return "importTask";
+    }
+
     @PostMapping("/addCrowdTask")
     @ResponseBody
     public String addCrowdTask2(@RequestParam("name")String name,@RequestParam("description")String description,
@@ -181,4 +186,17 @@ public class TaskController {
                                 @RequestParam("requirement") MultipartFile requirement,@RequestParam("threePage") MultipartFile threePage){
         return taskService.addCrowdTask(name, description, time, type, webUrl, apk, requirement, threePage);
     }
+
+    @PostMapping("/importTask")
+    @ResponseBody
+    public String importTask2(@RequestParam("number")String number,@RequestParam("number")String originId,
+                              @RequestParam("zipFile") MultipartFile zipFile,@RequestParam("jsonFile") MultipartFile jsonFile){
+
+        return taskService.importTask(number, originId, zipFile, jsonFile)?"success":"导出失败";
+    }
+    @PostMapping("/exportTask")
+    @ResponseBody
+    public String exportTask(@RequestParam("caseId")String caseId){
+        return taskService.exportTask(caseId)?"success":"导出失败";
+    }
 }

+ 61 - 11
src/main/java/com/mooctest/service/TaskService.java

@@ -3,11 +3,6 @@ package com.mooctest.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.mongodb.MongoClient;
-import com.mongodb.client.FindIterable;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.MongoCursor;
-import com.mongodb.client.MongoDatabase;
 import com.mooctest.dao.MasterReportDao;
 import com.mooctest.dao.TaskDao;
 import com.mooctest.dao2.CrowdTaskDao;
@@ -21,10 +16,8 @@ import org.bson.Document;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.*;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.stereotype.Service;
@@ -267,6 +260,18 @@ public class TaskService {
         return res;
     }
 
+    public String addCrowdTaskPure(String name,String description,String time,String type,MultipartFile threePage){
+        if(threePage ==null || threePage.isEmpty()) return "请提交三级页面";
+        String threePageUrl = fileService.uploadFile(threePage);
+        try {
+            boolean flag = createCrowdTest(threePageUrl,threePage.getOriginalFilename(),"",getMaxCaseId()+1,type,description,name);
+            return flag ?"success":"创建失败";
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "创建众测失败";
+        }
+    }
+
     public String addCrowdTask(String name,String description,String time,String type,String webUrl,MultipartFile apk,MultipartFile requirement,MultipartFile threePage){
         if (requirement==null||requirement.isEmpty()) return "请提交需求文档";
         if(threePage ==null || threePage.isEmpty()) return "请提交三级页面";
@@ -336,9 +341,54 @@ public class TaskService {
             temp=Long.parseLong(task.getId());
             max=temp>max?temp:max;
         }
-
 //        CrowdTask task = crowdTaskDao.findFirstByOrderByIdDesc();
-
         return max;
     }
+
+    public boolean exportTask(String caseId){
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+        params.add("caseId", caseId);
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity
+                ("http://" + reportHost  + "/Bug/api/data/outputByCaseId", params, String.class);
+        return responseEntity.getStatusCode().equals(HttpStatus.OK);
+    }
+
+    public boolean importTask(String number,String originId,
+                                  MultipartFile zipFile, MultipartFile jsonFile)  {
+
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("multipart/form-data");
+        // 设置请求的格式类型
+        headers.setContentType(type);
+        ByteArrayResource zipFileResource = null;
+        ByteArrayResource jsonFileResource  = null;
+        try {
+            zipFileResource= new ByteArrayResource(zipFile.getBytes()) {
+                @Override
+                public String getFilename() {
+                    return zipFile.getOriginalFilename();
+                }
+            };
+            jsonFileResource= new ByteArrayResource(jsonFile.getBytes()) {
+                @Override
+                public String getFilename() {
+                    return jsonFile.getOriginalFilename();
+                }
+            };
+        }catch (IOException e){
+            return false;
+        }
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("sourceZipFile", zipFileResource);
+        params.add("sourceJsonFile", jsonFileResource);
+        params.add("originalCaseId", originId);
+        params.add("cpSerialNum", number);
+        HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(params, headers);
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://" + reportHost  + "/Bug/api/data/inputFromFile", files, String.class);
+        return responseEntity.getStatusCode().equals(HttpStatus.OK);
+    }
 }

+ 2 - 2
src/main/resources/application.yml

@@ -85,8 +85,8 @@ mongodb2.host: 47.98.174.59
 mongodb2.port: 27017
 mongodb2.username: root
 mongodb2.password: 123456
-useOss: true
-filePath: /resources/
+useOss: false
+filePath: /xinchuang/data/
 urlPath: http://47.98.174.59:8100/resourcesXinchuang/
 logging:
   level:

+ 26 - 21
src/main/resources/templates/addCrowdTask.html

@@ -74,6 +74,13 @@
                             <textarea onchange="checkNull(event)" id="description" class="form-control" rows="3" placeholder="请输入描述信息"></textarea>
                         </div>
                     </div>
+                    <!-- text input -->
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">操作系统枚举项<br><small>请用逗号分割</small></label>
+                        <div class="col-sm-4">
+                            <input  onchange="checkNull(event)" class="form-control" id="os" placeholder="请输入os枚举项"/>
+                        </div>
+                    </div>
                     <!-- Date and time range -->
                     <div class="form-group">
                         <label class="col-sm-2 control-label" >任务时间</label>
@@ -98,27 +105,27 @@
                     </div>
 
                     <!-- text input -->
-<!--                    <div class="form-group" id="webUrl" style="display: none">-->
-<!--                        <label class="col-sm-2 control-label">待测网站链接</label>-->
-<!--                        <div class="col-sm-6">-->
-<!--                            <input  onchange="checkNull(event)" class="form-control" id="websiteUrl" placeholder="请输入网站链接"/>-->
-<!--                        </div>-->
-<!--                    </div>-->
+                    <div class="form-group" id="webUrl" style="display: none">
+                        <label class="col-sm-2 control-label">待测网站链接</label>
+                        <div class="col-sm-6">
+                            <input  onchange="checkNull(event)" class="form-control" id="websiteUrl" placeholder="请输入网站链接"/>
+                        </div>
+                    </div>
 
-<!--                    <div class="form-group" id="apkFile">-->
-<!--                        <label for="testApplication"  class="col-sm-2 control-label">待测应用</label>-->
-<!--                        <div class="col-sm-10">-->
-<!--                            <input  type="file" id="testApplication"/>-->
-<!--                            &lt;!&ndash;                               <p class="help-block">Example block-level help text here.</p>&ndash;&gt;-->
-<!--                        </div>-->
-<!--                    </div>-->
+                    <div class="form-group" id="apkFile">
+                        <label for="testApplication"  class="col-sm-2 control-label">待测应用</label>
+                        <div class="col-sm-10">
+                            <input  type="file" id="testApplication"/>
+                            <!--                               <p class="help-block">Example block-level help text here.</p>-->
+                        </div>
+                    </div>
 
-<!--                    <div class="form-group">-->
-<!--                        <label for="testRequirement" class="col-sm-2 control-label">测试需求</label>-->
-<!--                        <div class="col-sm-10">-->
-<!--                            <input  type="file" id="testRequirement"/>-->
-<!--                            &lt;!&ndash;                               <p class="help-block">Example block-level help text here.</p>&ndash;&gt;-->
-<!--                        </div>-->
+                    <div class="form-group">
+                        <label for="testRequirement" class="col-sm-2 control-label">测试需求</label>
+                        <div class="col-sm-10">
+                            <input  type="file" id="testRequirement"/>
+                            <!--                               <p class="help-block">Example block-level help text here.</p>-->
+                        </div>
 <!--                    </div>-->
 
                     <div class="form-group">
@@ -214,11 +221,9 @@
                         type: 'error'
                     });
                 }else {
-
                     $.notify({
                         message: '添加成功'
                     },{
-                        // settings
                         delay: 100,
                         timer: 3000,
                         type: 'success'

+ 5 - 0
src/main/resources/templates/home.html

@@ -54,6 +54,11 @@
                                 <i class="fa fa-file-excel-o"></i>导入第三方项目
                             </a>
                         </li>
+                        <li id="crowdSidebarMenu-importTask">
+                            <a href="/importTask">
+                                <i class="fa  fa-object-ungroup"></i>导入任务
+                            </a>
+                        </li>
                     </ul>
                 </li>
 

+ 179 - 0
src/main/resources/templates/importTask.html

@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="main">
+<head>
+    <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
+    <!-- dataTables -->
+    <link rel="stylesheet" type="text/css"
+          href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css"/>
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/Ionicons/css/ionicons.min.css"/>
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.css"/>
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"/>
+    <!-- iCheck for checkboxes and radio inputs -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/iCheck/all.css"/>
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.css"/>
+    <!-- Select2 -->
+    <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
+    <!-- Theme style -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/AdminLTE.min.css"/>
+    <!-- AdminLTE Skins. Choose a skin from the css/skins
+         folder instead of downloading all of them to reduce the load. -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/skins/_all-skins.min.css"/>
+</head>
+<body>
+<th:block layout:fragment="sidebar">
+    <li th:replace="/home::mainSidebar">
+</th:block>
+
+
+
+
+<th:block layout:fragment="maincontent">
+    <section class="content-header">
+        <h1>
+            导入众测报告
+            <small>众包测试</small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="/home"><i class="fa fa-dashboard"></i> 主页</a></li>
+            <li><a href="/importTask">导入众测任务</a></li>
+        </ol>
+    </section>
+
+    <!-- Main content -->
+    <section class="content" id="maincontent">
+
+        <div class="box box-primary" >
+            <div class="box-header with-border">
+                <h3 class="box-title">基本信息</h3>
+                <button class="btn btn-success pull-right" onclick="importTask()">
+                    导入
+                </button>
+            </div>
+            <!-- /.box-header -->
+            <div class="box-body">
+                <form class="form-horizontal">
+                    <!-- text input -->
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">单位序列号</label>
+                        <div class="col-sm-4">
+                            <input  onchange="checkNull(event)" class="form-control" id="number" placeholder="请输入单位名称"/>
+                        </div>
+                    </div>
+                    <!-- text input -->
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">原始任务id</label>
+                        <div class="col-sm-4">
+                            <input  onchange="checkNull(event)" class="form-control" id="originId" placeholder="请输入原始任务id"/>
+                        </div>
+                    </div>
+
+
+                    <div class="form-group">
+                        <label for="zipFile" class="col-sm-2 control-label">导入zip文件</label>
+                        <div class="col-sm-10">
+                            <input  type="file" id="zipFile"/>
+                            <!--                               <p class="help-block">Example block-level help text here.</p>-->
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="jsonFile" class="col-sm-2 control-label">导入json文件</label>
+                        <div class="col-sm-10">
+                            <input  type="file" id="jsonFile"/>
+                            <!--                               <p class="help-block">Example block-level help text here.</p>-->
+                        </div>
+                    </div>
+
+
+                </form>
+            </div>
+        </div>
+    </section>
+
+</th:block>
+</body>
+</html>
+<!-- jQuery 3 -->
+<!--<script src="/static/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>-->
+<!-- Bootstrap 3.3.7 -->
+<script src="/static/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+<!-- InputMask -->
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+<!-- date-range-picker -->
+<script src="/static/AdminLTE/bower_components/moment/min/moment.min.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll -->
+<script src="/static/AdminLTE/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="/static/AdminLTE/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="/static/AdminLTE/bower_components/fastclick/lib/fastclick.js"></script>
+
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+<!--<script src="/static/js/app_info.js"></script>-->
+<script type="text/javascript">
+    $(document).ready(function(){
+        $('#crowdSidebar').addClass('active');
+        $('#crowdSidebarMenu-importTask').addClass('active');
+    });
+
+
+
+    importTask = function(){
+        //type  = 0  表示添加
+        // type = 1 表示修改
+        // 遍历页面上的数据,生成json数据。
+        var data = new FormData();
+        data.append('number',$('#number').val());
+        data.append('originId',$('#originId').val());
+        data.append("zipFile",document.getElementById('zipFile').files[0])
+        data.append("jsonFile",document.getElementById('jsonFile').files[0])
+        $.ajax({
+            url: '/importTask',
+            data:data,
+            type: 'POST',
+            processData: false,
+            contentType: false,
+            success: function (result) {
+                if(result != 'success'){
+                    $.notify({
+                        message: result
+                    },{
+                        // settings
+                        delay: 100,
+                        timer: 1000,
+                        type: 'error'
+                    });
+                }else {
+                    $.notify({
+                        message: '导入成功'
+                    },{
+                        // settings
+                        delay: 100,
+                        timer: 3000,
+                        type: 'success'
+                    });
+                }
+            }
+        });
+    }
+
+</script>

+ 39 - 0
src/main/resources/templates/task_detail.html

@@ -258,6 +258,10 @@
                 <i class="fa fa-coffee" style="margin-right: 3px;"></i>
                 <span>全部交付</span>
             </button>
+            <button  id="export-btn" onclick="exportTask()" class="btn btn-sm btn-assign pull-right">
+                <i class="fa fa-coffee" style="margin-right: 3px;"></i>
+                <span>导出任务</span>
+            </button>
         </div>
         <table id="report-list" class="table table-striped table-bordered" cellpadding="0" width="100%">
             <thead>
@@ -368,6 +372,7 @@
     /*<![CDATA[*/
     var reportHost = [[${reportHost}]]
     var encodedReportDetailUrl = [[${encodedUrl}]]
+    var caseId = [[${caseId}]]
     /*]]>*/
 
 
@@ -406,6 +411,40 @@
         });
     });
 
+    exportTask  = function(){
+        var data = new FormData();
+        data.append('caseId',caseId);
+        $.ajax({
+            url: '/exportTask',
+            data:data,
+            type: 'POST',
+            processData: false,
+            contentType: false,
+            success: function (result) {
+                if(result != 'success'){
+                    $.notify({
+                        message: result
+                    },{
+                        // settings
+                        delay: 100,
+                        timer: 1000,
+                        type: 'error'
+                    });
+                }else {
+
+                    $.notify({
+                        message: '导出成功'
+                    },{
+                        // settings
+                        delay: 100,
+                        timer: 3000,
+                        type: 'success'
+                    });
+                }
+            }
+        });
+    }
+
 
     copyUrl = function(){
         var clipboard = new Clipboard('#taskUrl-btn', {