Jelajahi Sumber

update: status

guochao 5 tahun lalu
induk
melakukan
d3b4a53829
100 mengubah file dengan 740 tambahan dan 11 penghapusan
  1. 7 2
      .idea/workspace.xml
  2. 1 0
      src/main/java/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.java
  3. 1 1
      src/main/java/cn/iselab/mooctest/site/service/AutoReportProductService.java
  4. 12 4
      src/main/java/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.java
  5. 15 4
      src/main/java/cn/iselab/mooctest/site/web/ctrl/HandleReportController.java
  6. 3 0
      src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.java
  7. 0 0
      target/classes/application.properties
  8. 83 0
      target/classes/application.yml
  9. 22 0
      target/classes/bootstrap.yaml
  10. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/Application.class
  11. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/configuration/DefaultView.class
  12. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/configuration/OSSConfiguration.class
  13. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/dao/ReportTaskDao.class
  14. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/domainObject/ReportTask.class
  15. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.class
  16. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/domainObject/ReportType.class
  17. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/domainObject/UploadType.class
  18. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/exception/BaseException.class
  19. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/exception/ReportTaskNotExistException.class
  20. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/factory/ReportTaskFactory.class
  21. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/model/ReportTaskPO.class
  22. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/repository/IReportTaskRepo.class
  23. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/repository/ReportTaskRepo.class
  24. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/AutoReportProductService.class
  25. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/UploadService.class
  26. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl$1.class
  27. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl$2.class
  28. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.class
  29. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/service/impl/OSSUploadServiceImpl.class
  30. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/util/Converter$CopierIdentity.class
  31. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/util/Converter$PrimitiveConverter.class
  32. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/util/Converter.class
  33. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/ctrl/HandleReportController.class
  34. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/ctrl/UploadController.class
  35. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportAction.class
  36. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportAppBaseInfo.class
  37. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBug.class
  38. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugCluster.class
  39. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugDistribution.class
  40. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugInfo.class
  41. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugListInfoForTable.class
  42. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportDeviceInfo.class
  43. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportDeviceListInfoForTable.class
  44. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportLabel.class
  45. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportPie.class
  46. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportTableBug.class
  47. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportType.class
  48. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/ReportVO/AppAutoTestReportVO.class
  49. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/ReportVO/ReportDataVO.class
  50. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/ReportVO/StaticScanReportDataVO.class
  51. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/ReportVO/WebData.class
  52. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanData.class
  53. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanExample.class
  54. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanSolution.class
  55. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanVulReference.class
  56. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataBrowserStat.class
  57. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataBugDetail.class
  58. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataCategoryStat.class
  59. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.class
  60. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataPlatformStat.class
  61. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataProjectInfoVO.class
  62. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataRiskLevelStat.class
  63. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulStatistic.class
  64. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulnerability.class
  65. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/enums/VulVerifyStatus.class
  66. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/Bug.class
  67. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceBugListItem.class
  68. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceDetailItem.class
  69. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceDistributionData.class
  70. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceUCListItem.class
  71. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/FunctionalTestVO.class
  72. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/GeneralResult.class
  73. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/ScreenShot.class
  74. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/TypePassResult.class
  75. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCItemCaseInfo.class
  76. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCPassResult.class
  77. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCResultDeviceItem.class
  78. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCResultItem.class
  79. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/ActiveIssueDetailVO.class
  80. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/AppBasicInfoVO.class
  81. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/DeviceDetailVO.class
  82. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/IssueDistributionAttributeVO.class
  83. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/IssueDistributionVO.class
  84. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/IssuePhoneVO.class
  85. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/NeedOptimizedProblemVO.class
  86. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceDetailAttributeVO.class
  87. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceDetailItemVO.class
  88. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceSummaryAttributeVO.class
  89. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceSummaryItemVO.class
  90. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/PieDataVO.class
  91. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/reportData/TestResultVO.class
  92. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/ProjectInfoVO.class
  93. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/StatVO.class
  94. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/Vul2TaskVo.class
  95. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/VulCheckVo.class
  96. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/VulReferenceVo.class
  97. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/VulReportDataVO.class
  98. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/VulStatisticsVO.class
  99. TEMPAT SAMPAH
      target/classes/cn/iselab/mooctest/site/web/data/vulData/VulnerabilityVo.class
  100. 596 0
      target/classes/static/index.html

+ 7 - 2
.idea/workspace.xml

@@ -3,7 +3,12 @@
   <component name="ChangeListManager">
     <list default="true" id="c25ee83f-38b8-4a56-8a1f-62ecc8d6cec2" name="Default Changelist" comment="">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulStatistic.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulStatistic.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/service/AutoReportProductService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/service/AutoReportProductService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/ctrl/HandleReportController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/ctrl/HandleReportController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application.yml" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -129,7 +134,7 @@
       <workItem from="1576044658914" duration="312000" />
       <workItem from="1576141062434" duration="3358000" />
       <workItem from="1576166157531" duration="106000" />
-      <workItem from="1576220216208" duration="1099000" />
+      <workItem from="1576220216208" duration="3764000" />
     </task>
     <servers />
   </component>

+ 1 - 0
src/main/java/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.java

@@ -5,6 +5,7 @@ package cn.iselab.mooctest.site.domainObject;
  * @date 2019-11-18 16:24
  */
 public class ReportTaskStatus {
+    public static final int EXISTED = 2; //报告任务已存在
     public static final int GENERATING = 1; //报告任务生成中
     public static final int COMPLETED = 0;  //报告任务已完成
     public static final int FAILED = -1; //报告任务生成失败

+ 1 - 1
src/main/java/cn/iselab/mooctest/site/service/AutoReportProductService.java

@@ -15,7 +15,7 @@ public interface AutoReportProductService {
 
     ReportTask getReportTask(Long orderId, Long ownerId);
 
-    Future<String> generateReport(Long orderId, Long ownerId, ReportDataVO reportData, String reportType);
+    void generateReport(Long orderId, Long ownerId, ReportDataVO reportData, String reportType);
 
     void writeDataToJsonFile(String jsonData,String path);
 

+ 12 - 4
src/main/java/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.java

@@ -24,6 +24,8 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.*;
 import java.nio.charset.Charset;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.Future;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -70,7 +72,7 @@ public class AutoReportProductServiceImpl implements AutoReportProductService {
 
     @Async
     @Override
-    public Future<String> generateReport(Long orderId, Long ownerId, ReportDataVO reportData, String reportType) {
+    public void generateReport(Long orderId, Long ownerId, ReportDataVO reportData, String reportType) {
         log.info("开始做任务" + orderId);
         //存入数据库
         ReportTask reportTask = ReportTaskFactory.createReportTask();
@@ -102,17 +104,23 @@ public class AutoReportProductServiceImpl implements AutoReportProductService {
 
                 long end = System.currentTimeMillis();
                 log.info("完成任务"+orderId+",耗时:" + (end - start) + "毫秒");
-                return new AsyncResult<>(taskUrl);
+                return ;
             }else{
                 // zip上传失败
                 log.info("upload zip failed");
-                return null;
+                reportTask.setId(reportTaskId);
+                reportTask.setStatus(ReportTaskStatus.FAILED);
+                iReportTaskRepo.saveReportTask(reportTask);
+                return ;
             }
 
         }else{
             // npm run build 执行失败
             log.info("npm run build failed");
-            return null;
+            reportTask.setId(reportTaskId);
+            reportTask.setStatus(ReportTaskStatus.FAILED);
+            iReportTaskRepo.saveReportTask(reportTask);
+            return ;
         }
     }
 

+ 15 - 4
src/main/java/cn/iselab/mooctest/site/web/ctrl/HandleReportController.java

@@ -63,6 +63,9 @@ public class HandleReportController {
                 // 报告任务正在执行
                 map.put("status", ReportTaskStatus.GENERATING);
                 map.put("describe", "报告生成中");
+            }else if(reportTask.getStatus() == ReportTaskStatus.FAILED){
+                map.put("status", ReportTaskStatus.FAILED);
+                map.put("describe", "报告生成失败");
             }else{
                 // 报告任务执行结束,返回任务状态和url
                 map.put("status", ReportTaskStatus.COMPLETED);
@@ -126,11 +129,19 @@ public class HandleReportController {
     }
 
     private Map<String, Object> generate(Long orderId, Long ownerId, ReportDataVO reportDataVO, String reportType){
-
-        autoReportProductService.generateReport(orderId, ownerId, reportDataVO, reportType);
         Map<String, Object> map = new HashMap<>();
-        map.put("status", ReportTaskStatus.GENERATING);
-        map.put("describe", "报告生成中");
+        // 查询报告任务是否存在
+        ReportTask reportTask = autoReportProductService.getReportTask(orderId, ownerId);
+        if(reportTask != null) {
+            // 报告任务已存在
+            map.put("status", ReportTaskStatus.EXISTED);
+            map.put("describe", "报告任务已存在");
+        }else{
+            // 报告任务不存在,生成报告
+            autoReportProductService.generateReport(orderId, ownerId, reportDataVO, reportType);
+            map.put("status", ReportTaskStatus.GENERATING);
+            map.put("describe", "报告生成中");
+        }
         return map;
     }
 

+ 3 - 0
src/main/java/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.java

@@ -1,9 +1,12 @@
 package cn.iselab.mooctest.site.web.data.WebScanData;
 
+import lombok.Data;
+
 /**
  * @author sunjh
  * @date 2019/12/9 17:02
  */
+@Data
 public class WebDataEnvironment {
     private String browserName;
     private String browserVersion;

+ 0 - 0
target/classes/application.properties


+ 83 - 0
target/classes/application.yml

@@ -0,0 +1,83 @@
+spring:
+  profiles:
+    active: report-server-dev
+#    active: report-server-online
+  datasource:
+    driver-class-name: com.mysql.jdbc.Driver
+    #    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    #    username: mooctest
+    #    password: secr3t!
+    # Keep the connection alive if idle for a long time (needed in production)
+    testWhileIdle: true
+    validationQuery: SELECT 1
+    # Show or not log for each sql query
+  jpa:
+    show-sql: true
+  # Hibernate ddl auto (create, create-drop, update)
+  hibernate:
+    ddl-auto: validate
+    #hbm2ddl.auto: update
+    # Naming strategy
+    naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+  # The SQL dialect makes Hibernate generate better SQL for the chosen database
+  properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
+
+  servlet:
+    multipart:
+      max-file-size: 1000MB
+      max-request-size: 1000MB
+oss:
+  accessKeyId: IvS323TIcWUT57MG
+  accessKeySecret: dYml7rvT8stQkoSjMYlfRTxNj9dEsI
+  endPoint: oss-cn-hangzhou.aliyuncs.com
+  bucketName: mooctest-share
+
+sleep: 0
+
+# 配置输出日志
+logging:
+  level:
+    org.springframework.cloud.gateway: TRACE
+    org.springframework.http.server.reactive: DEBUG
+    org.springframework.web.reactive: DEBUG
+    reactor.ipc.netty: DEBUG
+
+#开启端点
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*'
+  security:
+    enabled: false
+---
+# 报告服务开发环境
+spring:
+  profiles: report-server-dev
+  datasource:
+    url: jdbc:mysql://106.14.81.62:3306/report_service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    username: root
+    password: 123456
+order.autoReport.upload.path: /Users/guochao/Desktop/project/enterprise-mooctest-site/var/www/reportFile/
+order.autoReport.builder.copyPath: /Users/guochao/Desktop/project/enterprise-mooctest-site/var/www/reportBuilder/
+order.autoReport.service.path: /Users/guochao/Desktop/project/enterprise-mooctest-site/projects/mooctest-report-template/
+order.autoReport.service.template.path: /Users/guochao/Desktop/project/enterprise-mooctest-site/projects/mooctest-report-template/
+static.resource.autoReport.url: /reportFile/
+order.vulReport.json.upload.path: /src/json/
+host.ip: 106.14.81.62
+
+---
+# 报告服务线上环境
+spring:
+  profiles: report-server-online
+  datasource:
+    url: jdbc:mysql://106.14.81.62:3306/report_service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    username: root
+    password: 123456
+static.resource.autoReport.url: /reportFile/
+order.autoReport.upload.path: /var/www/reportFile/
+order.autoReport.service.path: /root/mooctest-report-template/
+order.autoReport.service.template.path: /root/mooctest-report-template/
+order.autoReport.builder.copyPath: /var/www/reportBuilder/
+order.vulReport.json.upload.path: /src/json/
+host.ip: 106.14.81.62

+ 22 - 0
target/classes/bootstrap.yaml

@@ -0,0 +1,22 @@
+server:
+    port: 8080
+spring:
+    application:
+        name: mooctest-report-service
+    cloud:
+        nacos:
+            discovery:
+                # 指定nacos server的地址
+                server-addr: 127.0.0.1:8848
+
+# actuator相关配置
+management:
+    endpoints:
+        web:
+            exposure:
+                # 暴露所有监控端点
+                include: '*'
+    endpoint:
+        health:
+            # 总是显示健康检测详情
+            show-details: always

TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/Application.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/configuration/DefaultView.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/configuration/OSSConfiguration.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/dao/ReportTaskDao.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/domainObject/ReportTask.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/domainObject/ReportTaskStatus.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/domainObject/ReportType.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/domainObject/UploadType.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/exception/BaseException.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/exception/ReportTaskNotExistException.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/factory/ReportTaskFactory.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/model/ReportTaskPO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/repository/IReportTaskRepo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/repository/ReportTaskRepo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/AutoReportProductService.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/UploadService.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl$1.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl$2.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/impl/AutoReportProductServiceImpl.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/service/impl/OSSUploadServiceImpl.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/util/Converter$CopierIdentity.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/util/Converter$PrimitiveConverter.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/util/Converter.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/ctrl/HandleReportController.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/ctrl/UploadController.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportAction.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportAppBaseInfo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBug.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugCluster.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugDistribution.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugInfo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportBugListInfoForTable.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportDeviceInfo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportDeviceListInfoForTable.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportLabel.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportPie.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportTableBug.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/AppAutoTestData/AppAutoTestReportType.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/ReportVO/AppAutoTestReportVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/ReportVO/ReportDataVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/ReportVO/StaticScanReportDataVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/ReportVO/WebData.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanData.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanExample.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanSolution.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/StaticScanData/StaticScanVulReference.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataBrowserStat.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataBugDetail.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataCategoryStat.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataEnvironment.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataPlatformStat.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataProjectInfoVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataRiskLevelStat.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulStatistic.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/WebScanData/WebDataVulnerability.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/enums/VulVerifyStatus.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/Bug.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceBugListItem.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceDetailItem.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceDistributionData.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/DeviceUCListItem.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/FunctionalTestVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/GeneralResult.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/ScreenShot.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/TypePassResult.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCItemCaseInfo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCPassResult.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCResultDeviceItem.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/functionalTestData/UCResultItem.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/ActiveIssueDetailVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/AppBasicInfoVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/DeviceDetailVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/IssueDistributionAttributeVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/IssueDistributionVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/IssuePhoneVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/NeedOptimizedProblemVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceDetailAttributeVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceDetailItemVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceSummaryAttributeVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/PerformanceSummaryItemVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/PieDataVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/reportData/TestResultVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/ProjectInfoVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/StatVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/Vul2TaskVo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/VulCheckVo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/VulReferenceVo.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/VulReportDataVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/VulStatisticsVO.class


TEMPAT SAMPAH
target/classes/cn/iselab/mooctest/site/web/data/vulData/VulnerabilityVo.class


+ 596 - 0
target/classes/static/index.html

@@ -0,0 +1,596 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>报告模板上传</title>
+
+<script src="js/jquery.min.js"></script>
+
+<style>
+html,
+body {
+  height: 100%;
+  margin: 0;
+  padding: 0;
+}
+
+body {
+  font-family: 'Roboto', sans-serif;
+  background: -webkit-linear-gradient(bottom, #4F6072, #8699AA);
+  background: linear-gradient(to top, #4F6072, #8699AA);
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+}
+
+.upload {
+  position: relative;
+  width: 400px;
+  min-height: 445px;
+  box-sizing: border-box;
+  border-radius: 5px;
+  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
+  padding-bottom: 20px;
+  background: #fff;
+  -webkit-animation: fadeup .5s .5s ease both;
+          animation: fadeup .5s .5s ease both;
+  -webkit-transform: translateY(20px);
+          transform: translateY(20px);
+  opacity: 0;
+}
+.upload .upload-files header {
+  background: #4db6ac;
+  text-align: center;
+}
+.upload .upload-files header p {
+  color: #fff;
+  font-size: 40px;
+  margin: 0;
+  padding: 50px 0;
+}
+.upload .upload-files header p i {
+  -webkit-transform: translateY(20px);
+          transform: translateY(20px);
+  opacity: 0;
+  font-size: 30px;
+  -webkit-animation: fadeup .5s 1s ease both;
+          animation: fadeup .5s 1s ease both;
+}
+.upload .upload-files header p .up {
+  font-weight: bold;
+  -webkit-transform: translateX(-20px);
+          transform: translateX(-20px);
+  display: inline-block;
+  opacity: 0;
+  -webkit-animation: faderight .5s 1.5s ease both;
+          animation: faderight .5s 1.5s ease both;
+}
+.upload .upload-files header p .load {
+  display: inline-block;
+  font-weight: 100;
+  margin-left: -8px;
+  -webkit-transform: translateX(-20px);
+          transform: translateX(-20px);
+  opacity: 0;
+  -webkit-animation: faderight 1s 1.5s ease both;
+          animation: faderight 1s 1.5s ease both;
+}
+.upload .upload-files .body {
+  text-align: center;
+  padding: 50px 0;
+  padding-bottom: 30px;
+}
+.upload .upload-files .body.hidden {
+  display: none;
+}
+.upload .upload-files .body input {
+  visibility: hidden;
+}
+.upload .upload-files .body i {
+  font-size: 65px;
+  color: lightgray;
+}
+.upload .upload-files .body p {
+  font-size: 14px;
+  padding-top: 15px;
+  line-height: 1.4;
+}
+.upload .upload-files .body p b,
+.upload .upload-files .body p a {
+  color: #4db6ac;
+}
+.upload .upload-files .body.active {
+  border: dashed 2px #4db6ac;
+}
+.upload .upload-files .body.active i {
+  box-shadow: 0 0 0 -3px #fff, 0 0 0 lightgray, 0 0 0 -3px #fff, 0 0 0 lightgray;
+  -webkit-animation: file .5s ease both;
+          animation: file .5s ease both;
+}
+@-webkit-keyframes file {
+  50% {
+    box-shadow: -8px 8px 0 -3px #fff, -8px 8px 0 lightgray, -8px 8px 0 -3px #fff, -8px 8px 0 lightgray;
+  }
+  75%,
+          100% {
+    box-shadow: -8px 8px 0 -3px #fff, -8px 8px 0 lightgray, -16px 16px 0 -3px #fff, -16px 16px 0 lightgray;
+  }
+}
+@keyframes file {
+  50% {
+    box-shadow: -8px 8px 0 -3px #fff, -8px 8px 0 lightgray, -8px 8px 0 -3px #fff, -8px 8px 0 lightgray;
+  }
+  75%,
+          100% {
+    box-shadow: -8px 8px 0 -3px #fff, -8px 8px 0 lightgray, -16px 16px 0 -3px #fff, -16px 16px 0 lightgray;
+  }
+}
+.upload .upload-files .body.active .pointer-none {
+  pointer-events: none;
+}
+.upload .upload-files footer {
+  width: 100%;
+  margin: 0 auto;
+  height: 0;
+}
+.upload .upload-files footer .divider {
+  margin: 0 auto;
+  width: 0;
+  border-top: solid 4px #46aba1;
+  text-align: center;
+  overflow: hidden;
+  -webkit-transition: width .5s ease;
+  transition: width .5s ease;
+}
+.upload .upload-files footer .divider span {
+  display: inline-block;
+  -webkit-transform: translateY(-25px);
+          transform: translateY(-25px);
+  font-size: 12px;
+  padding-top: 8px;
+}
+.upload .upload-files footer.hasFiles {
+  height: auto;
+}
+.upload .upload-files footer.hasFiles .divider {
+  width: 100%;
+}
+.upload .upload-files footer.hasFiles .divider span {
+  -webkit-transform: translateY(0);
+          transform: translateY(0);
+  -webkit-transition: -webkit-transform .5s .5s ease;
+  transition: -webkit-transform .5s .5s ease;
+  transition: transform .5s .5s ease;
+  transition: transform .5s .5s ease, -webkit-transform .5s .5s ease;
+}
+.upload .upload-files footer .list-files {
+  width: 320px;
+  margin: 0 auto;
+  margin-top: 15px;
+  padding-left: 5px;
+  text-align: center;
+  overflow-x: hidden;
+  overflow-y: auto;
+  max-height: 210px;
+}
+.upload .upload-files footer .list-files::-webkit-scrollbar-track {
+  background-color: rgba(211, 211, 211, 0.25);
+}
+.upload .upload-files footer .list-files::-webkit-scrollbar {
+  width: 4px;
+  background-color: rgba(211, 211, 211, 0.25);
+}
+.upload .upload-files footer .list-files::-webkit-scrollbar-thumb {
+  background-color: rgba(77, 182, 172, 0.5);
+}
+.upload .upload-files footer .list-files .file {
+  width: 300px;
+  min-height: 50px;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: justify;
+      -ms-flex-pack: justify;
+          justify-content: space-between;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  opacity: 0;
+  -webkit-animation: fade .35s ease both;
+          animation: fade .35s ease both;
+}
+.upload .upload-files footer .list-files .file .name {
+  font-size: 12px;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  width: 80px;
+  text-align: left;
+}
+.upload .upload-files footer .list-files .file .progress {
+  width: 175px;
+  height: 5px;
+  border: solid 1px lightgray;
+  border-radius: 2px;
+  background: -webkit-linear-gradient(right, rgba(77, 182, 172, 0.2), rgba(77, 182, 172, 0.8)) no-repeat;
+  background: linear-gradient(to left, rgba(77, 182, 172, 0.2), rgba(77, 182, 172, 0.8)) no-repeat;
+  background-size: 100% 100%;
+}
+.upload .upload-files footer .list-files .file .progress.active {
+  -webkit-animation: progress 30s linear;
+          animation: progress 30s linear;
+}
+@-webkit-keyframes progress {
+  from {
+    background-size: 0 100%;
+  }
+  to {
+    background-size: 100% 100%;
+  }
+}
+@keyframes progress {
+  from {
+    background-size: 0 100%;
+  }
+  to {
+    background-size: 100% 100%;
+  }
+}
+.upload .upload-files footer .list-files .file .done {
+  cursor: pointer;
+  width: 40px;
+  height: 40px;
+  background: #4db6ac;
+  border-radius: 50%;
+  margin-left: -10px;
+  -webkit-transform: scale(0);
+          transform: scale(0);
+  position: relative;
+}
+.upload .upload-files footer .list-files .file .done:before {
+  content: "View";
+  position: absolute;
+  top: 0;
+  left: -5px;
+  font-size: 24px;
+  opacity: 0;
+}
+.upload .upload-files footer .list-files .file .done:hover:before {
+  -webkit-transition: all .25s ease;
+  transition: all .25s ease;
+  top: -30px;
+  opacity: 1;
+}
+.upload .upload-files footer .list-files .file .done.anim {
+  -webkit-animation: done1 .5s ease forwards;
+          animation: done1 .5s ease forwards;
+}
+.upload .upload-files footer .list-files .file .done.anim #path {
+  -webkit-animation: done2 2.5s .5s ease forwards;
+          animation: done2 2.5s .5s ease forwards;
+}
+.upload .upload-files footer .list-files .file .done #path {
+  stroke-dashoffset: 7387.59423828125;
+  stroke-dasharray: 7387.59423828125 7387.59423828125;
+  stroke: #fff;
+  fill: transparent;
+  stroke-width: 50px;
+}
+@-webkit-keyframes done2 {
+  to {
+    stroke-dashoffset: 0;
+  }
+}
+@keyframes done2 {
+  to {
+    stroke-dashoffset: 0;
+  }
+}
+@-webkit-keyframes done1 {
+  50% {
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: scale(0.25);
+            transform: scale(0.25);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5);
+    opacity: 1;
+  }
+}
+@keyframes done1 {
+  50% {
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: scale(0.25);
+            transform: scale(0.25);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5);
+    opacity: 1;
+  }
+}
+.upload .upload-files footer .importar {
+  outline: none;
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 20px;
+  margin: auto;
+  border: solid 1px #4db6ac;
+  color: #4db6ac;
+  background: transparent;
+  padding: 8px 15px;
+  font-size: 12px;
+  border-radius: 4px;
+  font-family: Roboto;
+  line-height: 1;
+  cursor: pointer;
+  -webkit-transform: translateY(15px);
+          transform: translateY(15px);
+  opacity: 0;
+  margin-left: calc(50% - 40px);
+}
+.upload .upload-files footer .importar.active {
+  -webkit-transition: opacity .5s 1.5s ease, -webkit-transform .5s 1.5s ease;
+  transition: opacity .5s 1.5s ease, -webkit-transform .5s 1.5s ease;
+  transition: transform .5s 1.5s ease, opacity .5s 1.5s ease;
+  transition: transform .5s 1.5s ease, opacity .5s 1.5s ease, -webkit-transform .5s 1.5s ease;
+  -webkit-transform: translateY(0);
+          transform: translateY(0);
+  opacity: 1;
+}
+.upload .upload-files footer .importar:hover {
+  background: #4db6ac;
+  color: #fff;
+}
+@-webkit-keyframes fadeup {
+  to {
+    -webkit-transform: translateY(0);
+            transform: translateY(0);
+    opacity: 1;
+  }
+}
+@keyframes fadeup {
+  to {
+    -webkit-transform: translateY(0);
+            transform: translateY(0);
+    opacity: 1;
+  }
+}
+@-webkit-keyframes faderight {
+  to {
+    -webkit-transform: translateX(0);
+            transform: translateX(0);
+    opacity: 1;
+  }
+}
+@keyframes faderight {
+  to {
+    -webkit-transform: translateX(0);
+            transform: translateX(0);
+    opacity: 1;
+  }
+}
+@-webkit-keyframes fade {
+  to {
+    opacity: 1;
+  }
+}
+@keyframes fade {
+  to {
+    opacity: 1;
+  }
+}
+@media (max-width: 400px) {
+  .upload {
+    width: 100%;
+    height: 100%;
+  }
+}
+</style>
+</head>
+<body>
+
+<link rel="stylesheet" type="text/css" href="http://cdn.bootcss.com/font-awesome/4.6.0/css/font-awesome.min.css">
+
+<div class="upload">
+	<div class="upload-files">
+		<header>
+			<p>
+				<i class="fa fa-cloud-upload" aria-hidden="true"></i>
+				<span class="up">up</span>
+				<span class="load">load</span>
+			</p>
+		</header>
+		<div class="body" id="drop">
+			<i class="fa fa-file-text-o pointer-none" aria-hidden="true"></i>
+<!--			<p class="pointer-none"><b>拖放到这里</b> files here <br /> or <a href="" id="triggerFile">浏览</a>开始上传</p>-->
+            <p class="pointer-none"><b>拖放到这里</b> files here <br /> or <a href="" id="triggerFile">浏览</a>开始上传</p>
+			<input type="file" id="file" multiple />
+		</div>
+		<footer>
+			<div class="divider">
+				<span><AR>FILES</AR></span>
+			</div>
+			<div class="list-files">
+				<!--   template   -->
+			</div>
+			<button class="importar" onclick="UpladFile()">UPDATE FILES</button>
+<!--            <button class="importar" onclick="cancleUploadFile()">CALCLE FILES</button>-->
+		</footer>
+	</div>
+</div>
+<script type="application/javascript">
+    //上传文件方法
+    var xhr;
+    function UpladFile() {
+        var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
+		// var url = "http://127.0.0.1:8080" + "/generalReportTemplate"; // 接收上传文件的后台地址
+        var url = "http://106.14.81.62:8080" + "/api/report/generalReportTemplate"; // 接收上传文件的后台地址
+
+        var form = new FormData(); // FormData 对象
+        form.append("file", fileObj); // 文件对象
+
+        xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
+        xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
+        xhr.onload = uploadComplete; //请求完成
+        xhr.onerror = uploadFailed; //请求失败
+        xhr.send(form); //开始上传,发送form数据
+    }
+
+    //上传成功响应
+    function uploadComplete(evt) {
+        //服务断接收完文件返回的结果
+        // console.log(evt.target.responseText);
+        // var data = JSON.parse(evt.target.responseText);
+        // console.log(data);
+        // if (data.success) {
+        //
+        // } else {
+        //     alert("上传失败!");
+        // }
+        alert("上传成功!");
+    }
+
+    //上传失败
+    function uploadFailed(evt) {
+        alert("上传失败!");
+    }
+</script>
+
+
+<script type="text/javascript">
+//DOM
+const $ = document.querySelector.bind(document);
+
+//APP
+let App = {};
+App.init = (function() {
+	//Init
+	function handleFileSelect(evt) {
+
+		const files = evt.target.files; // FileList object
+		//files template
+		let template = `${Object.keys(files)
+            .map(file => `<div class="file file--${file}">
+                        <div class="name"><span>${files[file].name}</span></div>
+                            <div class="progress active"></div>
+                             <div class="done">
+                                <a href="" target="_blank">
+                                     <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000">
+                                     <g><path id="path" d="M500,10C229.4,10,10,229.4,10,500c0,270.6,219.4,490,490,490c270.6,0,490-219.4,490-490C990,229.4,770.6,10,500,10z M500,967.7C241.7,967.7,32.3,758.3,32.3,500C32.3,241.7,241.7,32.3,500,32.3c258.3,0,467.7,209.4,467.7,467.7C967.7,758.3,758.3,967.7,500,967.7z M748.4,325L448,623.1L301.6,477.9c-4.4-4.3-11.4-4.3-15.8,0c-4.4,4.3-4.4,11.3,0,15.6l151.2,150c0.5,1.3,1.4,2.6,2.5,3.7c4.4,4.3,11.4,4.3,15.8,0l308.9-306.5c4.4-4.3,4.4-11.3,0-15.6C759.8,320.7,752.7,320.7,748.4,325z"</g>
+                                    </svg>
+                                </a>
+                            </div>
+                        </div>`)
+            .join("")}`;
+
+		$("#drop").classList.add("hidden");
+		$("footer").classList.add("hasFiles");
+		$(".importar").classList.add("active");
+
+		setTimeout(() => {
+			$(".list-files").innerHTML = template;
+		}, 1000);
+
+		Object.keys(files).forEach(file => {
+			let load = 2000 + file * 2000; // fake load
+			setTimeout(() => {
+				$(`.file--${file}`).querySelector(".progress").classList.remove("active");
+				$(`.file--${file}`).querySelector(".done").classList.add("anim");
+			}, load);
+		});
+	}
+
+	// trigger input
+	$("#triggerFile").addEventListener("click", evt => {
+		evt.preventDefault();
+		$("input[type=file]").click();
+	});
+
+	// drop events
+	$("#drop").ondragleave = evt => {
+		$("#drop").classList.remove("active");
+		evt.preventDefault();
+	};
+	$("#drop").ondragover = $("#drop").ondragenter = evt => {
+		$("#drop").classList.add("active");
+		evt.preventDefault();
+	};
+	$("#drop").ondrop = evt => {
+        var files = evt.dataTransfer.files; // FileList object
+        //files template
+        let template = `${Object.keys(files)
+            .map(file => `<div class="file file--${file}">
+                        <div class="name"><span>${files[file].name}</span></div>
+                            <div class="progress active"></div>
+                             <div class="done">
+                                <a href="" target="_blank">
+                                     <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000">
+                                     <g><path id="path" d="M500,10C229.4,10,10,229.4,10,500c0,270.6,219.4,490,490,490c270.6,0,490-219.4,490-490C990,229.4,770.6,10,500,10z M500,967.7C241.7,967.7,32.3,758.3,32.3,500C32.3,241.7,241.7,32.3,500,32.3c258.3,0,467.7,209.4,467.7,467.7C967.7,758.3,758.3,967.7,500,967.7z M748.4,325L448,623.1L301.6,477.9c-4.4-4.3-11.4-4.3-15.8,0c-4.4,4.3-4.4,11.3,0,15.6l151.2,150c0.5,1.3,1.4,2.6,2.5,3.7c4.4,4.3,11.4,4.3,15.8,0l308.9-306.5c4.4-4.3,4.4-11.3,0-15.6C759.8,320.7,752.7,320.7,748.4,325z"</g>
+                                    </svg>
+                                </a>
+                            </div>
+                        </div>`)
+        .join("")}`;
+
+        $("#drop").classList.add("hidden");
+        $("footer").classList.add("hasFiles");
+        $(".importar").classList.add("active");
+
+        setTimeout(() => {
+            $(".list-files").innerHTML = template;
+        }, 1000);
+
+            Object.keys(files).forEach(file => {
+                let load = 2000 + file * 2000; // fake load
+            setTimeout(() => {
+                $(`.file--${file}`).querySelector(".progress").classList.remove("active");
+            $(`.file--${file}`).querySelector(".done").classList.add("anim");
+        }, load);
+        });
+        $("input[type=file]").files = evt.dataTransfer.files;
+        var fileObj = document.getElementById("file").files[0];
+        evt.preventDefault();
+
+		// $("input[type=file]").files = evt.dataTransfer.files[0];
+		// $("footer").classList.add("hasFiles");
+		// $("#drop").classList.remove("active");
+		// evt.preventDefault();
+	};
+
+	//upload more
+	$(".importar").addEventListener("click", () => {
+		$(".list-files").innerHTML = "";
+		$("footer").classList.remove("hasFiles");
+		$(".importar").classList.remove("active");
+		setTimeout(() => {
+			$("#drop").classList.remove("hidden");
+		}, 500);
+	});
+
+	// input change
+	$("input[type=file]").addEventListener("change", handleFileSelect);
+})();
+</script>
+
+</body>
+</html>
+

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini